with Standard_Complex_Vectors; use Standard_Complex_Vectors;
with Standard_Complex_Polynomials; use Standard_Complex_Polynomials;
with Standard_Complex_Poly_Systems; use Standard_Complex_Poly_Systems;
with Standard_Complex_Solutions; use Standard_Complex_Solutions;
with Lists_of_Integer_Vectors; use Lists_of_Integer_Vectors;
package Random_Product_System is
-- DESCRIPTION :
-- This package enables the construction and the solution
-- of a polynomial system of which each polynomial is
-- represented as a product of hyperplanes.
-- CONSTRUCTORS :
procedure Init ( n : in natural );
-- DESCRIPTION :
-- The internal data for this package are initialised
-- with n, this is the number of equations of the system
-- NOTE :
-- This operation must be the first one executed when
-- using this package.
procedure Add_Hyperplane ( i : in natural; h : in Vector );
-- DESCRIPTION :
-- The hyperplane h is added to the i-the equation of the
-- random product system
-- REQUIRED : __n_
-- i <= n \
-- h : Vector(0..n) representing h(0) + > h(j) x
-- /___ j
-- j=1
function Dimension return natural;
-- DESCRIPTION :
-- returns the number of equations in the product system.
function Number_of_Hyperplanes (i : natural) return natural;
-- DESCRIPTION :
-- returns the number of added hyperplanes for the i-th equation
function Get_Hyperplane ( i,j : in natural ) return Vector;
function Get_Hyperplane ( i,j : in natural ) return Link_to_Vector;
-- DESCRIPTION :
-- returns the j-th hyperplane for the i-th equation
procedure Change_Hyperplane ( i,j : in natural; h : in Vector );
-- DESCRIPTION :
-- the (i,j)-th hyperplane will be changed into h
procedure Solve ( sols : in out Solution_List; nl : out natural );
-- DESCRIPTION :
-- The random product system is solved and the solutions are
-- put in the list sols.
-- nl is the number of matrices that are factored.
-- NOTE :
-- All possible linear systems are factorized using Gaussian
-- elimination, together with the estimation of the condition
-- of the matrices.
-- Systems with a bad condition are not solved.
procedure Solve ( sols : in out Solution_List;
nl : out natural; l : in List );
-- DESCRIPTION :
-- Cf. Solve, but only those linear systems are factorized,
-- for which the linear equations are as indicated in the list
-- of positions l.
function Polynomial ( h : Vector ) return Poly;
-- DESCRIPTION :
-- returns the linear polynomial defined by the coefficients in h.
function Polynomial_System return Poly_Sys;
-- DESCRIPTION :
-- A polynomial system is constructed by multiplying all
-- the hyperplanes from the equations of the random product system.
-- DESTRUCTOR :
procedure Clear;
-- DESCRIPTION :
-- This procedure frees all memory space used by the random
-- product system.
end Random_Product_System;