[BACK]Return to pieri_deformations.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Schubert

Annotation of OpenXM_contrib/PHC/Ada/Schubert/pieri_deformations.adb, Revision 1.1

1.1     ! maekawa     1: with integer_io;                         use integer_io;
        !             2: with Standard_Floating_Numbers;          use Standard_Floating_Numbers;
        !             3: with Standard_Floating_Numbers_io;       use Standard_Floating_Numbers_io;
        !             4: with Standard_Complex_Numbers;           use Standard_Complex_Numbers;
        !             5: with Standard_Natural_Matrices;
        !             6: with Standard_Natural_Matrices_io;       use Standard_Natural_Matrices_io;
        !             7: with Standard_Complex_Vectors;
        !             8: with Standard_Complex_Vectors_io;        use Standard_Complex_Vectors_io;
        !             9: with Standard_Complex_Norms_Equals;      use Standard_Complex_Norms_Equals;
        !            10: with Standard_Complex_Matrices_io;       use Standard_Complex_Matrices_io;
        !            11: with Standard_Complex_Poly_Matrices;
        !            12: with Standard_Complex_Poly_Matrices_io;  use Standard_Complex_Poly_Matrices_io;
        !            13: with Standard_Complex_Polynomials;       use Standard_Complex_Polynomials;
        !            14: with Standard_Complex_Poly_Systems;      use Standard_Complex_Poly_Systems;
        !            15: with Standard_Complex_Poly_Systems_io;   use Standard_Complex_Poly_Systems_io;
        !            16: with Standard_Complex_Poly_SysFun;       use Standard_Complex_Poly_SysFun;
        !            17: with Brackets,Brackets_io;               use Brackets,Brackets_io;
        !            18: with Bracket_Monomials;                  use Bracket_Monomials;
        !            19: with Bracket_Monomials_io;               use Bracket_Monomials_io;
        !            20: with Bracket_Polynomials;                use Bracket_Polynomials;
        !            21: with Bracket_Polynomials_io;             use Bracket_Polynomials_io;
        !            22: with Bracket_Systems;                    use Bracket_Systems;
        !            23: with Pieri_Trees,Pieri_Trees_io;         use Pieri_Trees,Pieri_Trees_io;
        !            24: with Symbolic_Minor_Equations;           use Symbolic_Minor_Equations;
        !            25: with Numeric_Minor_Equations;            use Numeric_Minor_Equations;
        !            26: with Determinantal_Systems;              use Determinantal_Systems;
        !            27: with Solve_Pieri_Leaves;
        !            28: with Plane_Representations;              use Plane_Representations;
        !            29: with Specialization_of_Planes;           use Specialization_of_Planes;
        !            30: with Pieri_Continuation;                 use Pieri_Continuation;
        !            31:
        !            32: package body Pieri_Deformations is
        !            33:
        !            34:   function Coordinate_Bracket
        !            35:              ( nd : Pieri_Node; jmp : natural ) return Bracket is
        !            36:
        !            37:   -- DESCRIPTION :
        !            38:   --   On return we find the bracket determines the local coordinates.
        !            39:   --   This bracket depends whether jmp = nd.node'last or not.
        !            40:
        !            41:   begin
        !            42:     if Is_Leaf(nd) or jmp < nd.node'last
        !            43:      then return nd.node;
        !            44:      else return Upper_Jump_Decrease(nd);
        !            45:     end if;
        !            46:   end Coordinate_Bracket;
        !            47:
        !            48:   procedure Test_Solution
        !            49:                  ( file : in file_type; nd1,nd2 : in Pieri_Node;
        !            50:                    id : in natural; l1,l2 : in VecMat; l : in Matrix;
        !            51:                    x : Standard_Complex_Poly_Matrices.Matrix;
        !            52:                    solpla : in Matrix ) is
        !            53:
        !            54:   -- DESCRIPTION :
        !            55:   --   Evaluates the system that represents the intersection conditions
        !            56:   --   for the planes in l1,l2 and the plane l in the given solution plane.
        !            57:
        !            58:     sys : Link_to_Poly_Sys := new Poly_Sys'(Polynomial_Equations(l,x));
        !            59:     eva : Standard_Complex_Vectors.Vector(sys'range);
        !            60:     fst : natural;
        !            61:
        !            62:   begin
        !            63:     if Is_Leaf(nd1)
        !            64:      then fst := l1'last+1;
        !            65:      elsif nd1.i = 0
        !            66:          then fst := nd1.c;
        !            67:          else fst := nd1.c+1;
        !            68:     end if;
        !            69:     for i in fst..l1'last loop
        !            70:       Concat(sys,Polynomial_Equations(l1(i).all,x));
        !            71:     end loop;
        !            72:     if Is_Leaf(nd2)
        !            73:      then fst := l2'last+1;
        !            74:      elsif nd2.i = 0
        !            75:          then fst := nd2.c;
        !            76:          else fst := nd2.c+1;
        !            77:     end if;
        !            78:     for i in fst..l2'last loop
        !            79:       Concat(sys,Polynomial_Equations(l2(i).all,x));
        !            80:     end loop;
        !            81:    -- put_line(file,"The polynomial system that has been solved :");
        !            82:    -- put_line(file,sys.all);
        !            83:     eva := Eval(sys.all,Vector_Rep(solpla));
        !            84:     put(file,"Residual at the target system :");
        !            85:     put(file,Max_Norm(eva),3);
        !            86:     Clear(sys);
        !            87:     if (((nd1.i = 0) and (nd1.c = 1))
        !            88:       or else ((nd2.i = 0) and (nd2.c = 1)))
        !            89:      then put(file," PAIR "); put(file,id,1); put_line(file," DONE.");
        !            90:      else put_line(file,".");
        !            91:     end if;
        !            92:   end Test_Solution;
        !            93:
        !            94:   procedure Test_Solutions
        !            95:                  ( file : in file_type;
        !            96:                    l1,l2 : in VecMat; l : in Matrix;
        !            97:                    x : Standard_Complex_Poly_Matrices.Matrix;
        !            98:                    solpla : in VecMat ) is
        !            99:
        !           100:   -- DESCRIPTION :
        !           101:   --   Evaluates the system that represents the intersection conditions
        !           102:   --   for the planes in l1,l2 and the plane l in the given solution plane.
        !           103:
        !           104:     sys : Link_to_Poly_Sys := new Poly_Sys'(Polynomial_Equations(l,x));
        !           105:
        !           106:   begin
        !           107:     for i in l1'range loop
        !           108:       Concat(sys,Polynomial_Equations(l1(i).all,x));
        !           109:     end loop;
        !           110:     for i in l2'range loop
        !           111:       Concat(sys,Polynomial_Equations(l2(i).all,x));
        !           112:     end loop;
        !           113:     put_line(file,"The polynomial system that has been solved :");
        !           114:     put_line(file,sys.all);
        !           115:     for i in solpla'range loop
        !           116:       exit when (solpla(i) = null);
        !           117:       put(file,"Solution plane no. "); put(file,i,1); put_line(file," :");
        !           118:       put(file,solpla(i).all,2);
        !           119:       put_line(file,"The system evaluated at the plane :");
        !           120:       put_line(file,Eval(sys.all,Vector_Rep(solpla(i).all)));
        !           121:     end loop;
        !           122:     Clear(sys);
        !           123:   end Test_Solutions;
        !           124:
        !           125:   procedure Start_at_Leaves
        !           126:               ( file : in file_type; pnd : in Paired_Nodes;
        !           127:                 ln : in Matrix; sol : in out Matrix ) is
        !           128:
        !           129:   -- DESCRIPTION :
        !           130:   --   Computes the start solutions at the leaves.
        !           131:
        !           132:    -- xpm : Standard_Complex_Poly_Matrices.Matrix(sol'range(1),sol'range(2))
        !           133:    --     := Schubert_Pattern(sol'last(1),pnd.left.node,pnd.right.node);
        !           134:    -- sys : Link_to_Poly_Sys := new Poly_Sys'(Polynomial_Equations(ln,xpm));
        !           135:
        !           136:   begin
        !           137:     sol := Solve_Pieri_Leaves(file,pnd.left.node,pnd.right.node,ln);
        !           138:     put_line(file,"The solution plane at the leaves : ");
        !           139:     put(file,sol,2);
        !           140:    -- put_line(file,"The polynomial equations : "); put(file,sys.all);
        !           141:    -- put(file,"The solution evaluated at the polynomial equations : ");
        !           142:    -- put(file,Evaluate(sys.all,sol),3); new_line(file);
        !           143:    -- Standard_Complex_Poly_Matrices.Clear(xpm);
        !           144:    -- Clear(sys);
        !           145:   end Start_at_Leaves;
        !           146:
        !           147:   function Moving_U_Matrix
        !           148:               ( file : in file_type; outlog : in boolean;
        !           149:                 nd : Pieri_Node; lb : Bracket;
        !           150:                 f : Standard_Complex_Matrices.Matrix; l : VecMat )
        !           151:               return Standard_Complex_Poly_Matrices.Matrix is
        !           152:
        !           153:   -- DESCRIPTION :
        !           154:   --   Returns the moving U-matrix.
        !           155:
        !           156:   -- REQUIRED : nd.c > 0.
        !           157:
        !           158:     n : constant natural := f'length(1);
        !           159:     p : constant natural := lb'length;
        !           160:     nva : constant natural := n*p+1;
        !           161:     m : constant natural := n-p;
        !           162:     lc : constant natural := l(nd.c)'length(2);
        !           163:     r : natural;
        !           164:     U : constant Standard_Complex_Matrices.Matrix := U_Matrix(f,lb);
        !           165:
        !           166:   begin
        !           167:     if outlog
        !           168:      then put_line(file,"The U-matrix : "); put(file,U,2);
        !           169:     end if;
        !           170:     if nd.i = 0
        !           171:      then return Moving_U_Matrix(nva,U,l(nd.c).all);
        !           172:      else r := m+1 - lc;
        !           173:           return Moving_U_Matrix(U,nd.i,r,lb);
        !           174:     end if;
        !           175:   end Moving_U_Matrix;
        !           176:
        !           177:   function Moving_Cycle ( movU,x : Standard_Complex_Poly_Matrices.Matrix )
        !           178:                         return Poly_Sys is
        !           179:
        !           180:   -- DESCRIPTION :
        !           181:   --   Returns the moving cycle expaned as polynomial system.
        !           182:
        !           183:     n : constant natural := x'length(1);
        !           184:     p : constant natural := x'length(2);
        !           185:     kd : constant natural := p + movU'length(2);
        !           186:     bm : Bracket_Monomial := Maximal_Minors(n,kd);
        !           187:     bs : Bracket_System(0..Number_of_Brackets(bm))
        !           188:        := Minor_Equations(kd,kd-p,bm);
        !           189:     res : constant Poly_Sys := Lifted_Expanded_Minors(movU,x,bs);
        !           190:
        !           191:   begin
        !           192:     Clear(bm); Clear(bs);
        !           193:     return res;
        !           194:   end Moving_Cycle;
        !           195:
        !           196:   function One_Moving_Cycle
        !           197:               ( file : in file_type; nd : Pieri_Node; lb : Bracket;
        !           198:                 f : Standard_Complex_Matrices.Matrix; l : VecMat;
        !           199:                 x : Standard_Complex_Poly_Matrices.Matrix; outlog : boolean )
        !           200:               return Poly_Sys is
        !           201:
        !           202:   -- DESCRIPTION :
        !           203:   --   Returns the moving part for one node in case i = 0.
        !           204:
        !           205:   -- REQUIRED : nd.c > 0.
        !           206:
        !           207:     lc : constant natural := l(nd.c)'length(2);
        !           208:     movU : Standard_Complex_Poly_Matrices.Matrix(x'range(1),1..lc)
        !           209:          := Moving_U_Matrix(file,outlog,nd,lb,f,l);
        !           210:     res : constant Poly_Sys := Moving_Cycle(movU,x);
        !           211:
        !           212:   begin
        !           213:     if outlog
        !           214:      then put_line(file,"The moving U matrix : "); put(file,MovU);
        !           215:           put_line(file,"The equations of the moving cycle : "); put(file,res);
        !           216:     end if;
        !           217:     Standard_Complex_Poly_Matrices.Clear(movU);
        !           218:     return res;
        !           219:   end One_Moving_Cycle;
        !           220:
        !           221:   function Left_Moving_Cycle
        !           222:               ( file : file_type; nd : Pieri_Node; lb : Bracket; jmp : natural;
        !           223:                 f : Standard_Complex_Matrices.Matrix; l : VecMat;
        !           224:                 x : Standard_Complex_Poly_Matrices.Matrix; outlog : boolean )
        !           225:               return Poly_Sys is
        !           226:
        !           227:   -- DESCRIPTION :
        !           228:   --   Returns the moving part for the case i > 0 and jmp < p,
        !           229:   --   for the node from the first Pieri tree.
        !           230:
        !           231:   -- REQUIRED : nd.c > 0.
        !           232:
        !           233:     n : constant natural := x'length(1);
        !           234:     p : constant natural := x'length(2);
        !           235:     lc : constant natural := l(nd.c)'length(2);
        !           236:     movU : Standard_Complex_Poly_Matrices.Matrix(x'range(1),1..lc)
        !           237:          := Moving_U_Matrix(file,outlog,nd,lb,f,l);
        !           238:     movUsec : constant Standard_Complex_Poly_Matrices.Matrix
        !           239:             := Lower_Section(movU,n+1-lb(jmp));
        !           240:     res : constant Poly_Sys := Moving_Cycle(movUsec,x);
        !           241:
        !           242:   begin
        !           243:     if outlog
        !           244:      then put_line(file,"The left moving U matrix : "); put(file,movU);
        !           245:           put_line(file,"The left moving cycle : "); put(file,movUsec);
        !           246:           put_line(file,"The equations of the moving cycle : "); put(file,res);
        !           247:     end if;
        !           248:     Standard_Complex_Poly_Matrices.Clear(movU);
        !           249:     return res;
        !           250:   end Left_Moving_Cycle;
        !           251:
        !           252:   function Right_Moving_Cycle
        !           253:               ( file : file_type; nd : Pieri_Node; lb : Bracket; jmp : natural;
        !           254:                 f : Standard_Complex_Matrices.Matrix; l : VecMat;
        !           255:                 x : Standard_Complex_Poly_Matrices.Matrix; outlog : boolean )
        !           256:               return Poly_Sys is
        !           257:
        !           258:   -- DESCRIPTION :
        !           259:   --   Returns the moving part for the case i > 0 and jmp < p,
        !           260:   --   for the node from the second Pieri tree.
        !           261:
        !           262:   -- REQUIRED : nd.c > 0.
        !           263:
        !           264:     lc : constant natural := l(nd.c)'length(2);
        !           265:     movU : Standard_Complex_Poly_Matrices.Matrix(x'range(1),1..lc)
        !           266:          := Moving_U_Matrix(file,outlog,nd,lb,f,l);
        !           267:     movUsec : constant Standard_Complex_Poly_Matrices.Matrix
        !           268:             := Upper_Section(movU,lb(jmp));
        !           269:     res : constant Poly_Sys := Moving_Cycle(movUsec,x);
        !           270:
        !           271:   begin
        !           272:     if outlog
        !           273:      then put_line(file,"The right moving U matrix : "); put(file,movU);
        !           274:           put_line(file,"The right moving cycle : "); put(file,movUsec);
        !           275:           put_line(file,"The equations of the moving cycle :"); put(file,res);
        !           276:     end if;
        !           277:     Standard_Complex_Poly_Matrices.Clear(movU);
        !           278:     return res;
        !           279:   end Right_Moving_Cycle;
        !           280:
        !           281:   procedure Moving_Cycles
        !           282:               ( file : in file_type; pnd : in Paired_Nodes; id : in natural;
        !           283:                 jmp1,jmp2 : in natural; b1,b2 : in Bracket;
        !           284:                 f1,f2 : in Standard_Complex_Matrices.Matrix;
        !           285:                 l1,l2 : in VecMat; ln : in Matrix; report,outlog : in boolean;
        !           286:                 sol : in out Matrix ) is
        !           287:
        !           288:   -- DESCRIPTION :
        !           289:   --   Set up the moving cycles for the current pair of nodes down to
        !           290:   --   the nodes (b1,b2), jumping along the indices (jmp1,jmp2).
        !           291:   --   The other parameters are the same as in Deform_Pair.
        !           292:
        !           293:     cb1 : constant Bracket := Coordinate_Bracket(pnd.left.all,jmp1);
        !           294:     cb2 : constant Bracket := Coordinate_Bracket(pnd.right.all,jmp2);
        !           295:     xpm : Standard_Complex_Poly_Matrices.Matrix(sol'range(1),sol'range(2))
        !           296:         := Schubert_Pattern(sol'last(1),cb1,cb2);
        !           297:     homotopy : Link_to_Poly_Sys;
        !           298:     locmap : constant Standard_Natural_Matrices.Matrix
        !           299:            := Standard_Coordinate_Frame(xpm,sol);
        !           300:
        !           301:   begin
        !           302:     if outlog
        !           303:      then
        !           304:        put_line(file,"The localization map of the solution at the pair :");
        !           305:        put(file,xpm);
        !           306:     end if;
        !           307:     homotopy := new Poly_Sys'(Polynomial_Equations(ln,xpm));
        !           308:     for i in pnd.left.c+1..l1'last loop
        !           309:       Concat(homotopy,Polynomial_Equations(l1(i).all,xpm));
        !           310:     end loop;
        !           311:     for i in pnd.right.c+1..l2'last loop
        !           312:       Concat(homotopy,Polynomial_Equations(l2(i).all,xpm));
        !           313:     end loop;
        !           314:     for i in homotopy'range loop
        !           315:       Embed(homotopy(i));
        !           316:     end loop;
        !           317:     if not Is_Leaf(pnd.left.all) and (pnd.left.c > 0)
        !           318:      then
        !           319:        if pnd.left.i = 0
        !           320:         then Concat(homotopy,
        !           321:                     One_Moving_Cycle(file,pnd.left.all,b1,f1,l1,xpm,outlog));
        !           322:         elsif jmp1 < b1'last
        !           323:             then Concat(homotopy,
        !           324:                         Left_Moving_Cycle
        !           325:                           (file,pnd.left.all,b1,jmp1,f1,l1,xpm,outlog));
        !           326:        end if;
        !           327:     end if;
        !           328:     if not Is_Leaf(pnd.right.all) and (pnd.right.c > 0)
        !           329:      then
        !           330:        if pnd.right.i = 0
        !           331:         then Concat(homotopy,
        !           332:                     One_Moving_Cycle(file,pnd.right.all,b2,f2,l2,xpm,outlog));
        !           333:         elsif jmp2 < b2'last
        !           334:             then
        !           335:               Concat(homotopy,
        !           336:                      Right_Moving_Cycle
        !           337:                        (file,pnd.right.all,b2,jmp2,f2,l2,xpm,outlog));
        !           338:        end if;
        !           339:     end if;
        !           340:     if outlog
        !           341:      then put_line(file,"All equations in the homotopy :");
        !           342:           put_line(file,homotopy.all);
        !           343:     end if;
        !           344:     Trace_Paths(file,homotopy.all,locmap,report,outlog,sol);
        !           345:     Test_Solution(file,pnd.left.all,pnd.right.all,id,l1,l2,ln,xpm,sol);
        !           346:     Standard_Complex_Poly_Matrices.Clear(xpm);
        !           347:     Clear(homotopy);
        !           348:   end Moving_Cycles;
        !           349:
        !           350: -- TARGET PROCEDURES :
        !           351:
        !           352:   procedure Deform_Pair
        !           353:               ( file : in file_type; pnd : in Paired_Nodes; id : in natural;
        !           354:                 f1,f2 : in Standard_Complex_Matrices.Matrix;
        !           355:                 l1,l2 : in VecMat; ln : in Matrix; report,outlog : in boolean;
        !           356:                 sol : in out Matrix ) is
        !           357:
        !           358:     down : Paired_Nodes;
        !           359:     jmp1 : constant natural := Jump(pnd.left.all);
        !           360:     jmp2 : constant natural := Jump(pnd.right.all);
        !           361:     lb1 : constant Bracket := Lower_Jump_Decrease(pnd.left.all);
        !           362:     lb2 : constant Bracket := Lower_Jump_Decrease(pnd.right.all);
        !           363:
        !           364:   begin
        !           365:     put(file,"JUMP @(");
        !           366:     put(file,pnd.left.all); put(file,",");
        !           367:     put(file,pnd.right.all); put(file,")"); put(file," = (");
        !           368:     put(file,jmp1,1); put(file,","); put(file,jmp2,1); put(file,") -> (");
        !           369:     put(file,lb1); put(file,","); put(file,lb2); put_line(file,").");
        !           370:     if (Is_Leaf(pnd.left.all) and Is_Leaf(pnd.right.all))
        !           371:      then Start_at_Leaves(file,pnd,ln,sol);
        !           372:      else Moving_Cycles
        !           373:             (file,pnd,id,jmp1,jmp2,lb1,lb2,f1,f2,l1,l2,ln,report,outlog,sol);
        !           374:     end if;
        !           375:     if not At_First_Branch_Point(pnd)
        !           376:      then down := Ancestor(pnd);
        !           377:           Deform_Pair(file,down,id,f1,f2,l1,l2,ln,report,outlog,sol);
        !           378:     end if;
        !           379:    -- if pnd.left.h = pnd.right.h
        !           380:    --  then if (((pnd.left.c <= 1) and (pnd.right.c <=1))
        !           381:    --         and then (((pnd.left.i = 0) and (pnd.left.c = 1))
        !           382:    --          or else ((pnd.right.i = 0) and (pnd.right.c = 1))))
        !           383:    --        then null;
        !           384:    --        else down.left := pnd.left.ancestor;
        !           385:    --             down.right := pnd.right.ancestor;
        !           386:    --             Deform_Pair(file,down,id,f1,f2,l1,l2,ln,report,outlog,sol);
        !           387:    --       end if;
        !           388:    --  elsif pnd.left.h > pnd.right.h
        !           389:    --      then down.left := pnd.left.ancestor;
        !           390:    --           down.right := pnd.right;
        !           391:    --           Deform_Pair(file,down,id,f1,f2,l1,l2,ln,report,outlog,sol);
        !           392:    --      else down.left := pnd.left;
        !           393:    --           down.right := pnd.right.ancestor;
        !           394:    --           Deform_Pair(file,down,id,f1,f2,l1,l2,ln,report,outlog,sol);
        !           395:    -- end if;
        !           396:   end Deform_Pair;
        !           397:
        !           398:   procedure Write_Paired_Chains ( file : in file_type;
        !           399:                                   pnd : in Paired_Nodes; ind : in natural ) is
        !           400:
        !           401:   -- DESCRIPTION :
        !           402:   --   Writes the chains downwards that start at the leaves of pnd.
        !           403:   --   The paired nodes have index number ind.
        !           404:
        !           405:   begin
        !           406:     put(file,"DESCENDING THE PAIRED CHAINS "); put(file,ind,1);
        !           407:     put_line(file," :");
        !           408:     put(file,pnd.left);  new_line(file);
        !           409:     put(file,pnd.right); new_line(file);
        !           410:   end Write_Paired_Chains;
        !           411:
        !           412:   procedure Deform_Pairs
        !           413:               ( file : in file_type; n,d : in natural;
        !           414:                 lp : in List_of_Paired_Nodes; l1,l2 : in VecMat;
        !           415:                 ln : in Matrix; report,outlog : in boolean;
        !           416:                 sols : out VecMat ) is
        !           417:
        !           418:     tmp : List_of_Paired_Nodes := lp;
        !           419:     pnd : Paired_Nodes;
        !           420:     f1 : constant Standard_Complex_Matrices.Matrix
        !           421:        := Random_Upper_Triangular(n);
        !           422:     f2 : constant Standard_Complex_Matrices.Matrix
        !           423:        := Random_Lower_Triangular(n);
        !           424:     firstpair : Paired_Nodes := Head_Of(lp);
        !           425:     lb1 : constant Bracket := Lowest_Jump_Decrease(firstpair.left.all);
        !           426:     lb2 : constant Bracket := Lowest_Jump_Decrease(firstpair.right.all);
        !           427:     xpm : Standard_Complex_Poly_Matrices.Matrix(ln'range(1),lb1'range)
        !           428:         := Schubert_Pattern(ln'last(1),lb1,lb2);
        !           429:
        !           430:   begin
        !           431:     for i in 1..Length_Of(lp) loop
        !           432:       pnd := Head_Of(tmp);
        !           433:       Write_Paired_Chains(file,pnd,i);
        !           434:       sols(i) := new Standard_Complex_Matrices.Matrix(1..n,1..d);
        !           435:       Deform_Pair(file,pnd,i,f1,f2,l1,l2,ln,report,outlog,sols(i).all);
        !           436:       tmp := Tail_Of(tmp);
        !           437:     end loop;
        !           438:     Test_Solutions(file,l1,l2,ln,xpm,sols);
        !           439:   end Deform_Pairs;
        !           440:
        !           441: end Pieri_Deformations;

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