Annotation of OpenXM_contrib/PHC/Ada/Schubert/pieri_root_counts.ads, Revision 1.1
1.1 ! maekawa 1: with text_io; use text_io;
! 2: with Generic_Lists;
! 3: with Pieri_Trees; use Pieri_Trees;
! 4:
! 5: package Pieri_Root_Counts is
! 6:
! 7: -- DESCRIPTION :
! 8: -- This package executes the combinatorial root counting method based on
! 9: -- the construction of Pieri trees and provides data structures to perform
! 10: -- the Pieri deformations. These deformations start at the leaves that
! 11: -- satisfy Pieri's condition for which a triple intersection of planes
! 12: -- leads to a unique solution. They continue following the chains that
! 13: -- end at those leaves. These chains are indexed by the pairs of leaves.
! 14: -- So a list of paired nodes suffices to run the Pieri homotopy algorithm.
! 15: -- For efficiency one wants to avoid the repeated generation of the same
! 16: -- equations at every node. Therefore a tree of paired nodes is needed.
! 17: -- In the creation of this tree, a chain is traversed in increasing order.
! 18:
! 19: -- DATA STRUCTURES :
! 20:
! 21: type Paired_Nodes is record
! 22: left,right : Link_to_Pieri_Node;
! 23: end record;
! 24:
! 25: package Lists_of_Paired_Nodes is new Generic_Lists(Paired_Nodes);
! 26: type List_of_Paired_Nodes is new Lists_of_Paired_Nodes.List;
! 27:
! 28: type Paired_Chain is array ( integer range <> ) of Paired_Nodes;
! 29:
! 30: type Nodal_Pair;
! 31: type Link_to_Nodal_Pair is access Nodal_Pair;
! 32: type Nodal_Matrix
! 33: is array (integer range <>,integer range <>) of Link_to_Nodal_Pair;
! 34:
! 35: type Nodal_Pair ( d : natural ) is record
! 36: pnd : Paired_Nodes;
! 37: sols : natural; -- #paths arriving at the node
! 38: children : Nodal_Matrix(0..d,0..d); -- indices in children are jumps
! 39: ancestor : Link_to_Nodal_Pair;
! 40: end record;
! 41:
! 42: -- CREATORS :
! 43:
! 44: function Create ( n,d : natural; t1,t2 : Pieri_Tree )
! 45: return List_of_Paired_Nodes;
! 46:
! 47: -- DESCRIPTION :
! 48: -- Creates a list of paired nodes that satisfy Pieri's condition.
! 49:
! 50: function Create ( pnd : Paired_Nodes ) return Paired_Chain;
! 51:
! 52: -- DESCRIPTION :
! 53: -- Returns the chain of nodes that start at the first branch point down
! 54: -- and end at the given pair of leaves pnd.
! 55: -- This is an intermediate data structure in the Create operation below.
! 56:
! 57: function Create ( d : natural; lp : List_of_Paired_Nodes ) return Nodal_Pair;
! 58:
! 59: -- DESCRIPTION :
! 60: -- Creates a tree of nodal pairs and returns its root.
! 61: -- The tree structure allows repeated nodes.
! 62: -- A node that occured already once has sols equal to zero.
! 63:
! 64: -- SELECTORS :
! 65:
! 66: function Height ( pnd : Paired_Nodes ) return natural;
! 67:
! 68: -- DESCRIPTION :
! 69: -- Returns Max(pnd.left.h,pnd.right.h).
! 70:
! 71: function Equal ( pnd1,pnd2 : Paired_Nodes ) return boolean;
! 72:
! 73: -- DESCRIPTION :
! 74: -- Returns true when both nodes are the same.
! 75:
! 76: function At_First_Branch_Point ( pnd : Paired_Nodes ) return boolean;
! 77:
! 78: -- DESCRIPTION :
! 79: -- Returns true when the current pair of nodes is at the first
! 80: -- branch point in the Pieri trees.
! 81:
! 82: function At_Leaves ( pnd : Paired_Nodes ) return boolean;
! 83:
! 84: -- DESCRIPTION :
! 85: -- Returns true when the current pair of nodes consists of leaves.
! 86:
! 87: function Ancestor ( pnd : Paired_Nodes ) return Paired_Nodes;
! 88:
! 89: -- DESCRIPTION :
! 90: -- Returns the pair of ancestor nodes to the given pair of nodes.
! 91:
! 92: function First_Branch_Point ( pnd : Paired_Nodes ) return Paired_Nodes;
! 93:
! 94: -- DESCRIPTION :
! 95: -- Returns the pair of nodes down in the chains of pnd where the
! 96: -- first branch point occurs.
! 97:
! 98: function Height ( np : Nodal_Pair ) return natural;
! 99:
! 100: -- DESCRIPTION :
! 101: -- Returns the number of nodes above the current nodal pair.
! 102:
! 103: function Is_In ( root : Nodal_Pair; pnd : Paired_Nodes ) return boolean;
! 104:
! 105: -- DESCRIPTION :
! 106: -- Returns true if the paired nodes occur somewhere in the tree of
! 107: -- nodal pairs starting at the root.
! 108:
! 109: function Number_of_Paths ( root : Nodal_Pair ) return natural;
! 110:
! 111: -- DESCRIPTION :
! 112: -- Returns the number of paths that need to be followed.
! 113:
! 114: -- FORMATTED OUTPUT :
! 115:
! 116: procedure Write ( file : in file_type; chn : in Paired_Chain );
! 117:
! 118: -- DESCRIPTION :
! 119: -- Writes the chain of paired nodes in a formatted way.
! 120:
! 121: procedure Write ( file : in file_type; root : in Nodal_Pair );
! 122:
! 123: -- DESCRIPTION :
! 124: -- Writes the tree of paired nodes on file in a formatted way.
! 125:
! 126: end Pieri_Root_Counts;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>