with text_io; use text_io;
with Standard_Integer_Vectors; use Standard_Integer_Vectors;
with Standard_Complex_Poly_Systems; use Standard_Complex_Poly_Systems;
with Arrays_of_Integer_Vector_Lists; use Arrays_of_Integer_Vector_Lists;
with Integer_Mixed_Subdivisions; use Integer_Mixed_Subdivisions;
package Mixed_Volume_Computation is
-- DESCRIPTION :
-- This package offers a number of routines for the computation
-- of the mixed volume of a system of polynomial equations.
-- UTILITIES :
procedure Compute_Mixture ( supports : in out Array_of_Lists;
mix,perms : out Link_to_Vector );
-- DESCRIPTION :
-- Computes the type of mixture of the supports of a system.
-- ON ENTRY :
-- supports the supports of a polynomial system.
-- ON RETURN :
-- supports a permuted array of supports, so that the same
-- supports stand all toghether;
-- mix mix(k) indicates number of occurrencies of the kth support;
-- perms perms(k) gives the place of the kth support,
-- after permutation to make supports correspond with mix.
function Compute_Index ( k : natural; mix : Vector ) return natural;
-- DESCRIPTION :
-- Given k, an entry in the supports, the number this function returns
-- indicates the number of different support, w.r.t. the type of mixture.
function Compute_Permutation
( n : natural; mix : Vector; supports : Array_of_Lists )
return Link_to_Vector;
-- DESCRIPTION :
-- Given the type of mixture and the support, the permutation vector
-- will be computed.
-- ON RETURN :
-- perms perms(k) gives the place of the kth support,
-- after permutation to make supports correspond with mix.
function Typed_Lists ( mix : Vector; points : Array_of_Lists )
return Array_of_Lists;
-- DESCRIPTION :
-- Returns a tuple of lists where each list occurs only once,
-- according to the given type of mixture.
function Permute ( p : Poly_Sys; perm : Link_to_Vector ) return Poly_Sys;
function Permute ( supports : Array_of_Lists ; perm : Link_to_Vector )
return Array_of_Lists;
-- DESCRIPTION :
-- Permutes the polynomials in the system or the supports,
-- according to the vector perm.
-- MIXED VOLUME COMPUTATION, GIVEN A SUBDIVISION :
function Mixed_Volume ( n : natural; mix : Vector;
mic : Mixed_Cell ) return natural;
function Mixed_Volume ( n : natural; mix : Vector;
mixsub : Mixed_Subdivision ) return natural;
-- DESCRIPTION :
-- Computes the mixed volume based on a mixed cell and subdivision.
-- When the cells are not fine enough, they will be refined but will
-- be lost after returning the result.
procedure Mixed_Volume ( n : in natural; mix : in Vector;
mic : in out Mixed_Cell; mv : out natural );
procedure Mixed_Volume ( n : in natural; mix : in Vector;
mixsub : in out Mixed_Subdivision;
mv : out natural );
-- DESCRIPTION :
-- Computes the mixed volume based on a mixed cell and subdivision.
-- When the cells are not fine enough, they will be refined by lifting.
-- The refinement is stored in the subdivision field of the cells.
-- MIXED VOLUME COMPUTATIONS, GIVEN THE SUPPORTS :
function Mixed_Volume ( n : natural; supports : Array_of_Lists )
return natural;
function Mixed_Volume ( file : file_type; n : natural;
supports : Array_of_Lists ) return natural;
function Mixed_Volume ( n : natural; mix : Vector;
supports : Array_of_Lists ) return natural;
function Mixed_Volume ( file : file_type; n : natural; mix : Vector;
supports : Array_of_Lists ) return natural;
procedure Mixed_Volume ( n : in natural; mix : in Vector;
supports : in Array_of_Lists;
lifted : out Array_of_Lists;
mixsub : out Mixed_Subdivision; mv : out natural );
procedure Mixed_Volume ( file : in file_type; n : in natural;
mix : in Vector; supports : in Array_of_Lists;
lifted : out Array_of_Lists;
mixsub : out Mixed_Subdivision; mv : out natural );
-- DESCRIPTION :
-- All these routines compute the mixed volume of support lists.
-- ON ENTRY :
-- file if specified, then the mixed subdivision will be
-- written on file;
-- n the dimension of the system;
-- mix mix(k) is the number of times the kth support occurs;
-- supports the supports of a system of n polynomials in n unknowns.
-- ON RETURN :
-- lifted array of listed points;
-- mixsub mixed subdivision used;
-- mv the mixed volume.
end Mixed_Volume_Computation;