with Standard_Natural_Vectors;
with Sets_of_Unknowns; use Sets_of_Unknowns;
with Partitions_of_Sets_of_Unknowns; use Partitions_of_Sets_of_Unknowns;
with Standard_Complex_Poly_Systems; use Standard_Complex_Poly_Systems;
package Degree_Structure is
-- DESCRIPTION :
-- This package analyzes the structure of a given
-- polynomial system, with respect to its degrees.
-- CREATORS :
procedure Create ( p : in Poly_Sys );
-- DESCRIPTION :
-- For each equation of the polynomial system p, a heuristic is applied
-- for constructing a good tuple of partitions.
-- This degree structure will be contained by the package itself.
procedure Put ( p : in Poly_Sys;
i,m : in natural; z : in Partition );
-- DESCRIPTION :
-- A partition for the set of unknowns of the ith polynomial
-- of the system p is added.
-- SELECTORS :
function Empty return boolean;
-- DESCRIPTION :
-- is true initially and after the Clear procedure.
function Get ( i : natural ) return natural;
-- DESCRIPTION :
-- returns the number of sets for the partition of
-- the i-th equation of a polynomial system p for
-- which the Create operation must be performed.
procedure Get ( i : in natural; z : in out Partition;
d : out Standard_Natural_Vectors.Vector );
-- DESCRIPTION :
-- The partition for the i-the equation of the polynomial
-- system p is returned together with its degrees;
-- for j in d'range : d(j) = Degree(p(i),z(j)).
-- REQUIRED :
-- The Create operation or Put operations have been performed on a
-- polynomial system p having at least i equations.
-- COMPUTING THE GENERALIZED BEZOUT NUMBER :
function Admissible ( z : Partition; n : natural ) return boolean;
-- DESCRIPTION :
-- return true if the following holds:
-- `Any union of k sets of z contains at least k unknowns',
-- for k in 2..n.
-- NOTE :
-- z is not necessary a partition, it is rather a set of n sets
-- of unknowns.
function Admissible ( z : Partition; n : natural; s : Set )
return boolean;
-- DESCRIPTION :
-- given admissible(z,n) = true, this function returns
-- admissible(union(z,s),n+1).
function Admissible ( z : Partition; k,n : natural; s : Set )
return boolean;
-- DESCRIPTION :
-- returns true if admissible(union(z,s),n+1), with respect to k.
function Generalized_Bezout_Number return natural;
-- DESCRIPTION :
-- This function returns a Bezout number based on the
-- degree structure of the system.
function Generalized_Bezout_Number ( p : in Poly_Sys ) return natural;
-- DESCRIPTION :
-- Calling this function is equivalent to :
-- Degree_Structure.Create(p);
-- return Degree_Structure.Generalized_Bezout_Number;
-- DESTRUCTOR :
procedure Clear;
-- DESCRIPTION :
-- All allocated memory space is freed.
end Degree_Structure;