[BACK]Return to normal_cone_intersections.ads CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Root_Counts / Stalift

Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Stalift/normal_cone_intersections.ads, Revision 1.1.1.1

1.1       maekawa     1: with Standard_Integer_Vectors;           use Standard_Integer_Vectors;
                      2: with Standard_Integer_Matrices;          use Standard_Integer_Matrices;
                      3: with Lists_of_Integer_Vectors;           use Lists_of_Integer_Vectors;
                      4: with Arrays_of_Integer_Vector_Lists;     use Arrays_of_Integer_Vector_Lists;
                      5:
                      6: package Normal_Cone_Intersections is
                      7:
                      8: -- DESCRIPTION :
                      9: --   This package provides a data abstraction to represent the intersections
                     10: --   of the generators of a normal cone with a tuple of normal cone complexes.
                     11:
                     12: -- DATA STRUCTURE :
                     13:
                     14:   type Intersection_Matrix ( n,m,nc : natural ) is record
                     15:     sv : Vector(1..n);
                     16:     im : Matrix(0..m,1..nc);
                     17:   end record;
                     18:
                     19:   -- The aim of an intersection matrix is to answer the question :
                     20:   --   does the ith generator of the normal cone of the point x
                     21:   --   belong to the normal cone of the kth point of the jth support?
                     22:
                     23:   -- The parameters of the three-dimensional intersection matrix are
                     24:   --   n  : number of supports to consider the point x to;
                     25:   --   m  : number of generators of the normal cone to x;
                     26:   --   nc : total number of normal cones that need to be considered.
                     27:
                     28:   -- The data of the intersection matrix are
                     29:   --   sv(1..n) a vector whose entries indicates the starting position of the
                     30:   --     the supports in the matrix im, i.e., sv(i) gives the first column in
                     31:   --     the matrix im that collects the data of the normal cone of the first
                     32:   --     points in the ith support;
                     33:   --   im(0..m,1..nc) is a matrix that contains the answers to the question:
                     34:   --     im(i,sv(j)+k) equals 0 or 1, 0 when the ith generator does not belong
                     35:   --     to the normal cone of the kth points in the jth support, 1 otherwise;
                     36:   --     im(0,sv(j)+k) is the sum of im(i,sv(j)+k) for all i in 1..m.
                     37:
                     38: -- CONSTRUCTORS :
                     39:
                     40:   function Number_of_Cones ( l : Array_of_Lists; i : natural ) return natural;
                     41:
                     42:   -- DESCRIPTION :
                     43:   --   Computes the number of cones, i.e.: returns the sum of the lengths of
                     44:   --   all lists of l, without consider the ith one.
                     45:   --   This is an auxiliary for determining the third dimension of the
                     46:   --   intersection matrix.
                     47:
                     48:   function Lengths ( l : Array_of_Lists; i : natural ) return Vector;
                     49:
                     50:   -- DESCRIPTION :
                     51:   --   Returns a vector of dimension equal to l that accumulates the lengths
                     52:   --   of the lists of l, without considering the ith component.
                     53:   --   More precisely, the jth component of the vector on return equals
                     54:   --   one plus the sum of all lengths of the lists in l(l'first..j),
                     55:   --   minus the length of l(i), if i < j.  So the vector on return can serve
                     56:   --   as the vector sv, except for the last component that equals one plus
                     57:   --   the total number of cones to consider.
                     58:
                     59:   function Create ( l : Array_of_Lists; g : List; i : natural )
                     60:                   return Intersection_Matrix;
                     61:
                     62:   -- DESCRIPTION :
                     63:   --   Returns the intersection matrix of the list of generators of the normal
                     64:   --   cone of a point that belongs to the list l(i).
                     65:
                     66: -- ELEMENTARY SELECTORS :
                     67:
                     68:   function Is_In ( ima : Intersection_Matrix; i,j,k : natural ) return boolean;
                     69:
                     70:   -- DESCRIPTION :
                     71:   --   Returns true when the ith generator belongs to the normal cone of the
                     72:   --   kth point of the jth support list.
                     73:
                     74:   function Maximal_Column ( ima : Intersection_Matrix ) return natural;
                     75:
                     76:   -- DESCRIPTION :
                     77:   --   Returns the index to the column in the intersection matrix with
                     78:   --   the maximal column sum.
                     79:
                     80:   function Component ( ima : Intersection_Matrix; column : natural )
                     81:                      return natural;
                     82:
                     83:   -- DESCRIPTION :
                     84:   --   Returns the number of the component of the intersection matrix the
                     85:   --   given column index corresponds to.  The number on return equals the
                     86:   --   index of the support of the corresponding column.
                     87:
                     88:   function Length ( ima : Intersection_Matrix; i : natural ) return natural;
                     89:
                     90:   -- DESCRIPTION :
                     91:   --   Returns the length of the ith component of the matrix, i.e., returns
                     92:   --   the length of the ith support list.
                     93:
                     94:   function Row_Sum ( ima : Intersection_Matrix; i,j : natural ) return natural;
                     95:
                     96:   -- DESCRIPTION :
                     97:   --   Returns the sum of the elements on the ith row, for all normal cones
                     98:   --   of the points of the jth support.
                     99:
                    100: -- ENUMERATING COMPLEMENTARY COLUMS :
                    101:
                    102:   generic
                    103:
                    104:     with procedure Process ( cols : in Vector; continue : out boolean );
                    105:
                    106:     -- DESCRIPTION :
                    107:     --   This procedure is invoked each time a set of complementary columns
                    108:     --   has been found.  The vector on return has the following meaning:
                    109:     --     cols(i) = 0 means that no normal cone of the ith component is taken,
                    110:     --     cols(i) = j means that the jth normal cone of the ith component
                    111:     --                 belongs to the complementary columns.
                    112:     --   Note that the range of cols is 1..n-1, with n = #supports.
                    113:
                    114:   procedure Complementary_Columns ( ima : in Intersection_Matrix );
                    115:
                    116:   -- DESCRIPTION :
                    117:   --   This procedure enumerates all complementary columns.
                    118:   --   A set of columns, at most one of each component, is said to be
                    119:   --   complementary if its union contains all generators of a normal cone.
                    120:
                    121:   function Partition ( ima : Intersection_Matrix; cols : Vector; g : List )
                    122:                      return Array_of_Lists;
                    123:
                    124:   -- DESCRIPTION :
                    125:   --   Returns a partition of the set of generators g w.r.t. the columns cols
                    126:   --   in the intersection matrix ima.  More precisely: the ith list on return
                    127:   --   contains those generators that belong to the normal cone cols(i) of the
                    128:   --   ith component.
                    129:   --   If the same generator belongs to several cones, it will be contained
                    130:   --   only in the list with smallest index.
                    131:
                    132:   -- REQUIRED : cols is a set of complementary columns.
                    133:
                    134:   function Partition_in_Union ( partg,points : Array_of_Lists; i : natural;
                    135:                                 cols : Vector ) return boolean;
                    136:
                    137:   -- DESCRIPTION :
                    138:   --   Returns true if the set of generators of a normal cones of the ith
                    139:   --   component of the point lists belongs to the union of normal cones,
                    140:   --   as indicated by the set of complementary columns.
                    141:
                    142:   function Contained_in_Union
                    143:              ( l : Array_of_Lists; i : natural; g : List;
                    144:                ima : Intersection_Matrix; cols : Vector ) return boolean;
                    145:
                    146:   -- DESCRIPTION :
                    147:   --   Returns true if the list of generators g is contained in the normal
                    148:   --   cones to the point selected by the columns of the intersection matrix.
                    149:
                    150: -- FINAL TARGET ROUTINE :
                    151:
                    152:   function Contained_in_Union
                    153:              ( l : Array_of_Lists; i : natural; g : List;
                    154:                ima : Intersection_Matrix ) return boolean;
                    155:
                    156:   -- DESCRIPTION :
                    157:   --   Enumerates all sets of complementary columns, until its union
                    158:   --   contains the convex cone spanned by the list of generators,
                    159:   --   until all possibilities are exhausted.
                    160:   --   In the first case, true is returned, otherwise false is returned.
                    161:
                    162: end Normal_Cone_Intersections;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>