with Complex_Polynomial_Systems;    use Complex_Polynomial_Systems;

package Reduction_of_Overconstrained_Systems is

-- DESCRIPTION :
--   This package provides two different approaches for reducing
--   a overconstrained system to a square system.

  function Random_Square ( p : in Poly_Sys ) return Poly_Sys;

  -- DESCRIPTION :
  --   The system q (q'range = 1..N) on return will be square, like
  --     q(i) = p(i) + l(i,N+1)*p(N+1) + .. + l(i,n)*p(n), for i=1,2,..,N.
  --   This type of reduction is recommended when the solution of any
  --   subsystem of p (p'range = 1,..,n) has a connected solution component.

  function Reduced_Square ( p : in Poly_Sys ) return Poly_Sys;

  -- DESCRIPTION :
  --   The system q (q'range = 1,..,N) on return will be square, like
  --     q(i) = Rpoly(..(Rpoly(p(i),p(N+1)), p(n)), for i=1,2,..,N,
  --   i.e.: the additional polynomial will be used for reducing the system.
  --   This type of reduction is recommended when the solution set of the
  --   first N equation of p consists of isolated points that do not all
  --   satisfy the remaining equations.

end Reduction_of_Overconstrained_Systems;
