with Standard_Integer_Vectors; use Standard_Integer_Vectors;
with Arrays_of_Integer_Vector_Lists; use Arrays_of_Integer_Vector_Lists;
with Integer_Faces_of_Polytope; use Integer_Faces_of_Polytope;
package Contributions_to_Mixed_Volume is
-- DESCRIPTION :
-- This package provides utilities to determine whether a point
-- contributes to the mixed volume of a tuple of point sets, i.e.: whether
-- it can be removed of the tuple without decreasing the mixed volume.
-- THE CRITERION : (simple/exhaustive)
function Simple_Zero_Contribution
( pts : Array_of_Lists;
x : Vector; i : natural ) return boolean;
function Simple_Zero_Contribution
( pts : Array_of_Lists; ifacets : Faces;
x : Vector; i : natural ) return boolean;
function Exhaustive_Zero_Contribution
( pts : Array_of_Lists;
x : Vector; i : natural ) return boolean;
function Exhaustive_Zero_Contribution
( pts : Array_of_Lists; ifacets : Faces;
x : Vector; i : natural ) return boolean;
-- DESCRIPTION :
-- Returns true if the point x does not influence the mixed volume of
-- the tuple pts, when considered w.r.t. the ith component.
-- There is a simple and an exhaustive criterion to check the contribution
-- of the point. When the simple criterion returns false, the point does
-- not necessarily make a contribution to the mixed volume, whereas when
-- the exhaustive criterion returns false, we can be sure that the point
-- contributes to the mixed volume.
-- ON ENTRY :
-- pts tuple of points sets, with dimension = x'length;
-- ifacets all facets of the polytope spanned by pts(i), that contain x;
-- x a point, considered w.r.t. pts(i);
-- i component of pts, i is in pts'range.
-- ON RETURN :
-- true if Mixed_Volume(pts) = Mixed_Volume(pts, pts(i) contains x);
-- false when the criterion fails to decide.
-- SWEEPING THROUGH THE POINT LISTS : (with simple/exhaustive criterion)
function Simple_Sweep ( pts : Array_of_Lists ) return Array_of_Lists;
function Simple_Sweep ( pts : Array_of_Lists; facets : Array_of_Faces )
return Array_of_Lists;
function Exhaustive_Sweep ( pts : Array_of_Lists ) return Array_of_Lists;
function Exhaustive_Sweep ( pts : Array_of_Lists; facets : Array_of_Faces )
return Array_of_Lists;
-- DESCRIPTION :
-- Applies the simple/exhaustive criterion to the points.
-- Returns those points for which the criterion has failed to
-- demonstrate that the contribution to the mixed volume was zero.
-- ON ENTRY :
-- pts tuple of point sets;
-- facets tuple of facets of the polytopes spanned by pts,
-- facets'range = pts'range.
-- ON RETURN :
-- A tuple of point sets where the points that do not contribute to the
-- mixed volume have been eliminated, according to the simple or exhaustive
-- criterion that has been used.
-- Note that essential sets are not necessarily unique, because they depend
-- on the order in which points with zero contribution are eliminated.
end Contributions_to_Mixed_Volume;