with Complex_Polynomial_Systems;   use Complex_Polynomial_Systems;
with Symmetry_Group;               use Symmetry_Group;

package Equivariant_Polynomial_Systems is

-- DESCRIPTION :
--   This package contains procedures for, given a group representation V,
--   to compute the associated representation W, of a (G,V,W)-symmetric
--   polynomial system.

  procedure Act ( v : in List_of_Permutations; s : in Poly_Sys;
                  w : in out List_of_Permutations;
                  fail,inva,equi : out boolean );

  -- DESCRIPTION :
  --   Each permutation of the list v will be applied on the system s;
  --   the list w contains the results of each permutation.

  -- ON ENTRY :
  --   v          a list of permutations;
  --   s          a polynomial system.

  -- ON RETURN :
  --   w          a list of Natural_Vectors x
  --               x(i) = j, where j indicates the index of the
  --               resulting polynomial of s, after permutation,
  --              if j = n+1, then the permuted polynomial did not belong to s
  --              and fail will be true on return;
  --   fail       true if the system is not (G,V,W)-symmetric, false otherwise;
  --   inva       true, if every polynomial in the system remains invariant,
  --              i.e.: Permute(s(i),p) = s(i), with i in s'range,
  --              for every permutation p, false otherwise;
  --   equi       true, if v = w, false otherwise.

  function Symmetric ( s : Poly_Sys; v,w : List_of_Permutations )
                     return boolean;

  -- DESCRIPTION :
  --   This routine returns true if s is (G,V,W)-symmetric,
  --   it returns false when s is (G,V,W)-symmetric.

  -- ON ENTRY :
  --   s          a polynomial system;
  --   v,w        representations of the group.

end Equivariant_Polynomial_Systems;
