with Standard_Natural_Vectors; use Standard_Natural_Vectors;
with Lists_of_Integer_Vectors; use Lists_of_Integer_Vectors;
package Templates is
-- DESCRIPTION :
-- This package provides the basic data abstraction to be used for the
-- construction of a symmetric linear-product start system.
-- DATA STRUCTURES :
-- A template for an n-dimensional system is made of a table
-- of natural vectors h(*).
-- If h(i) = 0, then this coefficient h(i) will be zero,
-- elsif h(i) = j /= 0,
-- then this coefficient h(i) will be the j-th random number.
-- CONSTRUCTORS :
procedure Create ( n : in natural );
-- DESCRIPTION :
-- Allocates memory space to contain a template for
-- an n-dimensional polynomial system.
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
procedure Change_Hyperplane ( i,j : in natural; h : in Vector );
-- DESCRIPTION :
-- The (i,j)-th hyperplane will be changed into h.
-- SELECTORS :
function Number_of_Hyperplanes ( i : natural ) return natural;
-- DESCRIPTION :
-- returns the number of added hyperplanes for the i-th equation
procedure Get_Hyperplane ( i,j : in natural; h : out Vector );
-- DESCRIPTION :
-- returns the j-th hyperplane h for the i-th equation
procedure Polynomial_System ( n,nbfree : in natural );
-- DESCRIPTION :
-- Based on the template, an n-dimensional random product
-- polynomial system will be generated.
-- The parameter nbfree indicates the number of free coefficients.
-- After calling this routine, the package Random_Product_System
-- will contain the data for a polynomial system.
function Verify ( n : natural; lp : List ) return natural;
-- DESCRIPTION :
-- Computes the number of finite nonsingular solutions
-- of the final symmetric polynomial system.
-- The list of positions lp indicates where the acceptable
-- classes in the structure can be found.
-- The structure is degenerate if this number does not
-- correspond with the generalized Bezout number.
-- DESTRUCTOR :
procedure Clear;
-- DESCRIPTION :
-- This procedure frees all memory space used by the template.
end Templates;