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

Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Symmetry/orbits_of_solutions.ads, Revision 1.1.1.1

1.1       maekawa     1: with text_io;                            use text_io;
                      2: with Standard_Floating_Numbers;          use Standard_Floating_Numbers;
                      3: with Generic_Lists;
                      4: with Standard_Complex_Solutions;         use Standard_Complex_Solutions;
                      5: with Permutations,Symmetry_Group;        use Permutations,Symmetry_Group;
                      6:
                      7: package Orbits_of_Solutions is
                      8:
                      9: -- DESCRIPTION :
                     10: --   This package contains routines for manipulating the
                     11: --   solutions set of a symmetric polynomial system.
                     12:
                     13: -- DATA STRUCTURES :
                     14:
                     15:   type Orbit ( n : natural ) is record
                     16:     orb : Permutation(1..n);  -- data representing the orbit
                     17:      -- e.g.: orb = [ 1 1 2 2 ] => solution is like (a,a,b,b) or (a,b,a,b)
                     18:     nbdiff : natural;         -- number of different values
                     19:     nbgen  : natural;         -- number of generating solutions
                     20:     nbsols : natural;         -- number of solutions in the orbit
                     21:   end record;
                     22:
                     23:   type Link_to_Orbit is access Orbit;
                     24:
                     25:   package Lists_of_Orbits is new Generic_Lists(Link_to_Orbit);
                     26:   type List_of_Orbits is new Lists_of_Orbits.List;
                     27:
                     28: -- CONSTRUCTORS :
                     29:
                     30:   function Generating ( sols : Solution_List; sign : boolean;
                     31:                         tol : double_float ) return Solution_List;
                     32:
                     33:   -- DESCRIPTION :
                     34:   --   Returns a list of generating solutions, by permutations, all
                     35:   --   other solutions in sols can be derived from the resulting list.
                     36:   --   If sign is true, then also permutations who alter the sign of
                     37:   --   the components are tried.
                     38:
                     39:   procedure Analyze ( l : in List_of_Permutations; sign : in boolean;
                     40:                       tol : in double_float; sols : in out Solution_List );
                     41:
                     42:   -- DESCRIPTION :
                     43:   --   the solution list sols will be checked upon symmetry, according
                     44:   --   to the list of permutations l
                     45:
                     46:   -- ON ENTRY :
                     47:   --   l              a list of permutations;
                     48:   --   sign           if true then sign symmetry has to be taken into account;
                     49:   --   tol            tolerance to decide wether two solutions are equal;
                     50:   --   sols           a list of solutions.
                     51:
                     52:   -- ON RETURN :
                     53:   --   sols           a list of solutions, where only one element per orbit
                     54:   --                  is in the list;
                     55:   --                  the multiplicity field is used to indicate the number
                     56:   --                  of elements in the orbit.
                     57:
                     58:   procedure Orbit_Structure
                     59:                     ( s : in Solution; tol : in double_float;
                     60:                       orbit : in out Permutation; nbdiff : out natural);
                     61:
                     62:   -- DESCRIPTION :
                     63:   --   This procedure returns the structure of the orbit of the solution.
                     64:
                     65:   -- ON ENTRY :
                     66:   --   s              a solution;
                     67:   --   tol            tolerance to decide wether two solutions are equal.
                     68:
                     69:   -- ON RETURN :
                     70:   --   orbit          orbit(i) = j means that x_i has the same value as x_j;
                     71:   --   nbdiff         the number of different values in the orbit.
                     72:
                     73:   function Orbits ( sols : Solution_List; tol : double_float )
                     74:                   return Permutation;
                     75:
                     76:   -- DESCRIPTION :
                     77:   --   Let orb := Orbits(sols,tol),
                     78:   --   then orb(i) gives the number of solutions belonging to an orbit
                     79:   --   with i different values.
                     80:
                     81:   -- ON ENTRY :
                     82:   --   sols         a list of solutions;
                     83:   --   tol          tolerance to decide wether two solutions are equal.
                     84:
                     85:   procedure Orbits ( grp : in List_of_Permutations; tol : in double_float;
                     86:                      sols : in out Solution_List;
                     87:                      lorb : in out List_of_Orbits );
                     88:
                     89:   -- DESCRIPTION :
                     90:   --   The list of solutions will be analyzed according to the
                     91:   --   symmetry group.  Together with the information on the orbits,
                     92:   --   the list of generating solutions will be produced.
                     93:
                     94:   -- ON ENTRY :
                     95:   --   grp           a list of permutations representing the symmetry group;
                     96:   --   tol           used to compare two solutions;
                     97:   --   sols          the list of solutions.
                     98:
                     99:   -- ON RETURN :
                    100:   --   sols          the generating list of solutions;
                    101:   --   lorb          the list containing the information of the orbits.
                    102:
                    103: -- SELECTOR :
                    104:
                    105:   function Same_Orbit ( orb1,orb2 : Permutation ) return boolean;
                    106:
                    107:   -- DESCRIPTION :
                    108:   --   Returns true when the structures of the orbits are the same.
                    109:   --   For example : 1 1 1 2 = 1 2 1 1, but 1 1 2 2 /= 2 2 1 2.
                    110:
                    111: -- DESTRUCTOR :
                    112:
                    113:   procedure Clear ( lorb : in out List_of_Orbits );
                    114:
                    115:   -- DESCRIPTION :
                    116:   --   All memory space allocated for lorb will be freed.
                    117:
                    118: end Orbits_of_Solutions;

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