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

Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Stalift/bkk_bound_computations.adb, Revision 1.1.1.1

1.1       maekawa     1: with integer_io;                         use integer_io;
                      2: with Standard_Integer_Vectors;           use Standard_Integer_Vectors;
                      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: with Standard_Complex_Laur_Systems;      use Standard_Complex_Laur_Systems;
                      6: with Standard_Poly_Laur_Convertors;      use Standard_Poly_Laur_Convertors;
                      7: with Power_Lists;                        use Power_Lists;
                      8: with Trees_of_Vectors;                   use Trees_of_Vectors;
                      9: with Trees_of_Vectors_io;                use Trees_of_Vectors_io;
                     10: with Volumes;
                     11: with Mixed_Homotopy_Continuation;
                     12: with Integer_Lifting_Utilities;          use Integer_Lifting_Utilities;
                     13: with Mixed_Volume_Computation;
                     14: with Integer_Mixed_Subdivisions;         use Integer_Mixed_Subdivisions;
                     15: with Integer_Mixed_Subdivisions_io;      use Integer_Mixed_Subdivisions_io;
                     16: with Integer_Polyhedral_Continuation;    use Integer_Polyhedral_Continuation;
                     17:
                     18: package body BKK_Bound_Computations is
                     19:
                     20:   function BKK_by_Implicit_Lifting ( p : Poly_Sys ) return natural is
                     21:
                     22:     n : constant natural := p'length;
                     23:     supports : Array_of_Lists(p'range) := Create(p);
                     24:     bkk : constant natural := Volumes.Mixed_Volume(n,supports);
                     25:
                     26:   begin
                     27:     Deep_Clear(supports);
                     28:     return bkk;
                     29:   end BKK_by_Implicit_Lifting;
                     30:
                     31:   function BKK_by_Implicit_Lifting ( file : file_type; p : Poly_Sys )
                     32:                                    return natural is
                     33:     n : constant natural := p'length;
                     34:     supports : Array_of_Lists(p'range) := Create(p);
                     35:     tv : Tree_of_Vectors;
                     36:     bkk : natural;
                     37:
                     38:   begin
                     39:     Volumes.Mixed_Volume(n,supports,tv,bkk);
                     40:     new_line(file);
                     41:     put_line(file,"The tree of useful directions : "); put(file,tv);
                     42:     new_line(file);
                     43:     Deep_Clear(supports); Clear(tv);
                     44:     return bkk;
                     45:   end BKK_by_Implicit_Lifting;
                     46:
                     47:   function BKK_by_Static_Lifting ( p : Poly_Sys ) return natural is
                     48:
                     49:     n : constant natural := p'length;
                     50:     supports : Array_of_Lists(p'range) := Create(p);
                     51:     bkk : constant natural := Mixed_Volume_Computation.Mixed_Volume(n,supports);
                     52:
                     53:   begin
                     54:     Deep_Clear(supports);
                     55:     return bkk;
                     56:   end BKK_by_Static_Lifting;
                     57:
                     58:   function BKK_by_Static_Lifting ( file : file_type; p : Poly_Sys )
                     59:                                  return natural is
                     60:
                     61:     n : constant natural := p'length;
                     62:     supports : Array_of_Lists(p'range) := Create(p);
                     63:     bkk : constant natural
                     64:         := Mixed_Volume_Computation.Mixed_Volume(file,n,supports);
                     65:
                     66:   begin
                     67:     Deep_Clear(supports);
                     68:     return bkk;
                     69:   end BKK_by_Static_Lifting;
                     70:
                     71:   function Solve_by_Implicit_Lifting ( p : Poly_Sys ) return Solution_List is
                     72:
                     73:     n : constant natural := p'length;
                     74:     supports : Array_of_Lists(p'range) := Create(p);
                     75:     tv : Tree_of_Vectors;
                     76:     bkk : natural;
                     77:     lp : Laur_Sys(p'range) := Polynomial_to_Laurent_System(p);
                     78:     sols : Solution_List;
                     79:
                     80:   begin
                     81:     Volumes.Mixed_Volume(n,supports,tv,bkk);
                     82:     Deep_Clear(supports);
                     83:     Mixed_Homotopy_Continuation.Solve(Standard_Output,lp,tv,bkk,sols);
                     84:     Clear(tv); Clear(lp);
                     85:     return sols;
                     86:   end Solve_by_Implicit_Lifting;
                     87:
                     88:   function Solve_by_Implicit_Lifting ( file : file_type; p : Poly_Sys )
                     89:                                      return Solution_List is
                     90:
                     91:     n : constant natural := p'length;
                     92:     supports : Array_of_Lists(p'range) := Create(p);
                     93:     tv : Tree_of_Vectors;
                     94:     bkk : natural;
                     95:     lp : Laur_Sys(p'range) := Polynomial_to_Laurent_System(p);
                     96:     sols : Solution_List;
                     97:
                     98:   begin
                     99:     Volumes.Mixed_Volume(n,supports,tv,bkk);
                    100:     Deep_Clear(supports);
                    101:     new_line(file);
                    102:     put(file,"The BKK bound equals "); put(file,bkk,1); new_line(file);
                    103:     put_line(file," with tree of useful directions : "); put(file,tv);
                    104:     new_line(file);
                    105:     Mixed_Homotopy_Continuation.Solve(file,lp,tv,bkk,sols);
                    106:     Clear(tv); Clear(lp);
                    107:     return sols;
                    108:   end Solve_by_Implicit_Lifting;
                    109:
                    110:   function Solve_by_Static_Lifting ( p : Poly_Sys ) return Solution_List is
                    111:
                    112:     n : constant natural := p'length;
                    113:     supports : Array_of_Lists(p'range) := Create(p);
                    114:     mv : natural;
                    115:     sols : Solution_List;
                    116:     mix,per : Link_to_Vector;
                    117:     mixsub : Mixed_Subdivision;
                    118:     permp : Poly_Sys(p'range);
                    119:     lp,pp : Laur_Sys(p'range);
                    120:
                    121:     use Mixed_Volume_Computation;
                    122:
                    123:   begin
                    124:     Compute_Mixture(supports,mix,per);
                    125:     permp := Permute(p,per); Clear(per);
                    126:     declare
                    127:       lifted : Array_of_Lists(mix'range);
                    128:     begin
                    129:       Mixed_Volume(n,mix.all,supports,lifted,mixsub,mv);
                    130:       pp := Polynomial_to_Laurent_System(p);
                    131:       lp := Perform_Lifting(n,mix.all,lifted,pp);
                    132:       Mixed_Solve(lp,mix.all,mixsub,sols);
                    133:       Deep_Clear(lifted);
                    134:     end;
                    135:     Clear(pp); Clear(lp);
                    136:     Deep_Clear(supports);
                    137:     Deep_Clear(mixsub);
                    138:     Clear(mix);
                    139:     return sols;
                    140:   end Solve_by_Static_Lifting;
                    141:
                    142:   function Solve_by_Static_Lifting ( file : file_type; p : Poly_Sys )
                    143:                                    return Solution_List is
                    144:
                    145:     n : constant natural := p'length;
                    146:     supports : Array_of_Lists(p'range) := Create(p);
                    147:     mv : natural;
                    148:     sols : Solution_List;
                    149:     mix,per : Link_to_Vector;
                    150:     mixsub : Mixed_Subdivision;
                    151:     permp : Poly_Sys(p'range);
                    152:     lp,pp : Laur_Sys(p'range);
                    153:
                    154:     use Mixed_Volume_Computation;
                    155:
                    156:   begin
                    157:     Compute_Mixture(supports,mix,per);
                    158:     permp := Permute(p,per); Clear(per);
                    159:     declare
                    160:       lifted : Array_of_Lists(mix'range);
                    161:     begin
                    162:       Mixed_Volume(file,n,mix.all,supports,lifted,mixsub,mv);
                    163:       put_line(file,"THE MIXED SUBDIVISION :");
                    164:       put(file,n,mix.all,mixsub);
                    165:       pp := Polynomial_to_Laurent_System(p);
                    166:       lp := Perform_Lifting(n,mix.all,lifted,pp);
                    167:       new_line(file); put_line(file,"POLYHEDRAL HOMOTOPY CONTINUATION");
                    168:       Mixed_Solve(file,lp,mix.all,mixsub,sols);
                    169:       Deep_Clear(lifted);
                    170:     end;
                    171:     Clear(pp); Clear(lp);
                    172:     Deep_Clear(supports);
                    173:     Deep_Clear(mixsub);
                    174:     Clear(mix);
                    175:     return sols;
                    176:   end Solve_by_Static_Lifting;
                    177:
                    178: end BKK_Bound_Computations;

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