[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     ! 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>