Annotation of OpenXM_contrib/PHC/Ada/Schubert/driver_for_quantum_pieri.adb, Revision 1.1
1.1 ! maekawa 1: with text_io,integer_io; use text_io,integer_io;
! 2: with Communications_with_User; use Communications_with_User;
! 3: with Timing_Package; use Timing_Package;
! 4: with Standard_Floating_Numbers; use Standard_Floating_Numbers;
! 5: with Standard_Complex_Numbers; use Standard_Complex_Numbers;
! 6: with Standard_Floating_Vectors;
! 7: with Standard_Natural_Vectors;
! 8: with Standard_Complex_Vectors;
! 9: with Standard_Complex_Norms_Equals; use Standard_Complex_Norms_Equals;
! 10: with Standard_Natural_Matrices;
! 11: with Standard_Natural_Matrices_io; use Standard_Natural_Matrices_io;
! 12: with Standard_Complex_Matrices; use Standard_Complex_Matrices;
! 13: with Standard_Random_Vectors; use Standard_Random_Vectors;
! 14: with Standard_Complex_VecMats; use Standard_Complex_VecMats;
! 15: with Symbol_Table; use Symbol_Table;
! 16: with Standard_Complex_Polynomials; use Standard_Complex_Polynomials;
! 17: with Standard_Complex_Poly_Matrices;
! 18: with Standard_Complex_Poly_Matrices_io; use Standard_Complex_Poly_Matrices_io;
! 19: with Standard_Complex_Poly_Systems; use Standard_Complex_Poly_Systems;
! 20: with Standard_Complex_Poly_Systems_io; use Standard_Complex_Poly_Systems_io;
! 21: with Standard_Complex_Solutions; use Standard_Complex_Solutions;
! 22: with Homotopy;
! 23: with Drivers_for_Poly_Continuation; use Drivers_for_Poly_Continuation;
! 24: with Increment_and_Fix_Continuation; use Increment_and_Fix_Continuation;
! 25: with Standard_Root_Refiners; use Standard_Root_Refiners;
! 26: with Brackets,Brackets_io; use Brackets,Brackets_io;
! 27: with Localization_Posets; use Localization_Posets;
! 28: with Localization_Posets_io; use Localization_Posets_io;
! 29: with Curves_into_Grassmannian; use Curves_into_Grassmannian;
! 30: with Curves_into_Grassmannian_io; use Curves_into_Grassmannian_io;
! 31: with Deformation_Posets; use Deformation_Posets;
! 32: with Determinantal_Systems; use Determinantal_Systems;
! 33: with Plane_Representations; use Plane_Representations;
! 34: with Drivers_for_Input_Planes; use Drivers_for_Input_planes;
! 35:
! 36: procedure Driver_for_Quantum_Pieri
! 37: ( file : in file_type; n,d,q : in natural ) is
! 38:
! 39: function Solution_Plane
! 40: ( top,bottom : Bracket;
! 41: locmap : Standard_Natural_Matrices.Matrix;
! 42: mat : Standard_Complex_Matrices.Matrix )
! 43: return Solution is
! 44:
! 45: -- DESCRIPTION :
! 46: -- Returns the representation of the solution plane as a vector.
! 47:
! 48: solloc : constant Standard_Complex_Vectors.Vector
! 49: := Column_Vector_Rep(locmap,Localize(locmap,mat));
! 50: sol : Solution(solloc'length);
! 51:
! 52: begin
! 53: sol.m := 1;
! 54: sol.t := Create(0.0);
! 55: sol.res := 0.0;
! 56: sol.err := 0.0;
! 57: sol.rco := 0.0;
! 58: sol.v := solloc;
! 59: return sol;
! 60: end Solution_Plane;
! 61:
! 62: function Solution_Planes ( top,bottom : Bracket;
! 63: locmap : Standard_Natural_Matrices.Matrix;
! 64: vm : VecMat ) return Solution_List is
! 65:
! 66: -- DESCRIPTION :
! 67: -- Returns the representation of the vector of planes as a solution list.
! 68:
! 69: res,res_last : Solution_List;
! 70:
! 71: begin
! 72: for i in vm'range loop
! 73: Append(res,res_last,Solution_Plane(top,bottom,locmap,vm(i).all));
! 74: end loop;
! 75: return res;
! 76: end Solution_Planes;
! 77:
! 78: function Create_Polynomial_System
! 79: ( top,bottom : Bracket;
! 80: locmap : Standard_Natural_Matrices.Matrix;
! 81: xpm : Standard_Complex_Poly_Matrices.Matrix;
! 82: svals : Standard_Complex_Vectors.Vector;
! 83: planes : VecMat ) return Poly_Sys is
! 84:
! 85: -- DESCRIPTION :
! 86: -- Returns the polynomial system that collects the intersection
! 87: -- conditions for meeting the given m-planes at the specified s-values.
! 88: -- The system is localized according to the given localization map.
! 89:
! 90: res,wrksys : Poly_Sys(svals'range);
! 91:
! 92: begin
! 93: for i in svals'range loop
! 94: declare
! 95: eva : Standard_Complex_Poly_Matrices.Matrix(xpm'range(1),xpm'range(2))
! 96: := Elim(xpm,svals(i),Create(1.0));
! 97: wrk : constant Poly_Sys := Polynomial_Equations(planes(i).all,eva);
! 98: begin
! 99: wrksys(i) := wrk(wrk'first);
! 100: Standard_Complex_Poly_Matrices.Clear(eva);
! 101: end;
! 102: end loop;
! 103: res := Column_Localize(top,bottom,locmap,wrksys);
! 104: Clear(wrksys);
! 105: return res;
! 106: end Create_Polynomial_System;
! 107:
! 108: procedure Refine_Roots ( file : in file_type;
! 109: p : in Poly_Sys; sols : in out Solution_List ) is
! 110:
! 111: -- DESCRIPTION :
! 112: -- Calls the root refiner, for square polynomial systems only.
! 113:
! 114: epsxa : constant double_float := 10.0**(-8);
! 115: epsfa : constant double_float := 10.0**(-8);
! 116: tolsing : constant double_float := 10.0**(-8);
! 117: max : constant natural := 3;
! 118: numit : natural := 0;
! 119:
! 120: begin
! 121: Reporting_Root_Refiner(file,p,sols,epsxa,epsfa,tolsing,numit,max,false);
! 122: end Refine_Roots;
! 123:
! 124: procedure Solve_Target_System
! 125: ( file : in file_type; start,target : in Poly_Sys;
! 126: sols : in out Solution_List; report : in boolean ) is
! 127:
! 128: -- DESCRIPTION :
! 129: -- Calls the standard continuation routines to solve a specific
! 130: -- target system, starting at the solutions of the start system.
! 131:
! 132: -- REQUIRED : not Is_Null(sols).
! 133:
! 134: timer : Timing_Widget;
! 135: n : constant natural := target'last;
! 136: a : Standard_Complex_Vectors.Vector(1..n) := Random_Vector(1,n);
! 137: b : Standard_Complex_Vectors.Vector(1..n) := Random_Vector(1,n);
! 138:
! 139: begin
! 140: tstart(timer);
! 141: Homotopy.Create(target,start,1,a,b,true); -- linear cheater
! 142: Set_Continuation_Parameter(sols,Create(0.0));
! 143: declare
! 144: procedure Sil_Cont is
! 145: new Silent_Continue(Max_Norm,
! 146: Homotopy.Eval,Homotopy.Diff,Homotopy.Diff);
! 147: procedure Rep_Cont is
! 148: new Reporting_Continue(Max_Norm,
! 149: Homotopy.Eval,Homotopy.Diff,Homotopy.Diff);
! 150: begin
! 151: if report
! 152: then Rep_Cont(file,sols,false,Create(1.0));
! 153: else Sil_Cont(sols,false,Create(1.0));
! 154: end if;
! 155: end;
! 156: tstop(timer);
! 157: new_line(file);
! 158: print_times(file,timer,"Cheater's homotopy to target system");
! 159: Refine_Roots(file,target,sols);
! 160: end Solve_Target_System;
! 161:
! 162: procedure Solve_Hypersurface_Target_System
! 163: ( file : in file_type; m,p,q : in natural;
! 164: start_svals,target_svals
! 165: : in Standard_Complex_Vectors.Vector;
! 166: start_planes,target_planes : in VecMat;
! 167: index_poset : in Array_of_Array_of_Nodes;
! 168: deform_poset : in Array_of_Array_of_VecMats;
! 169: report : in boolean ) is
! 170:
! 171: -- DESCRIPTION :
! 172: -- This procedure tests the output of the deformation poset,
! 173: -- creating polynomial representations of the intersection conditions
! 174: -- and solution lists representing the solution planes.
! 175:
! 176: -- ON ENTRY :
! 177: -- file to write intermediate output on;
! 178: -- m dimension of the input planes;
! 179: -- p dimension of the solution planes;
! 180: -- q degree of the maps;
! 181: -- start_svals interpolation points at the start;
! 182: -- target_svals interpolation points at the target;
! 183: -- start_planes input m-planes in general position;
! 184: -- target_planes specific input m-planes;
! 185: -- index_poset indexed localization poset;
! 186: -- deform_poset poset with the solution p-planes;
! 187: -- report switch for intermediate output during continuation.
! 188:
! 189: dim : constant natural := m*p+q*(m+p);
! 190: top : constant Bracket := index_poset(dim)(1).top;
! 191: bot : constant Bracket := index_poset(dim)(1).bottom;
! 192: xpm : Standard_Complex_Poly_Matrices.Matrix(1..m+p,1..p)
! 193: := Symbolic_Create(m,p,q,top,bot);
! 194: solplanes : constant VecMat := deform_poset(dim)(1).all;
! 195: locmap : Standard_Natural_Matrices.Matrix(1..(m+p)*(q+1),1..p)
! 196: := Standard_Coordinate_Frame(m,p,q,top,bot,solplanes(1).all);
! 197: locsys : Poly_Sys(start_planes'range)
! 198: := Create_Polynomial_System
! 199: (top,bot,locmap,xpm,start_svals,start_planes);
! 200: target : Poly_Sys(target_planes'range)
! 201: := Create_Polynomial_System
! 202: (top,bot,locmap,xpm,target_svals,target_planes);
! 203: sols : Solution_List := Solution_Planes(top,bot,locmap,solplanes);
! 204:
! 205: begin
! 206: One_Set_up_Symbol_Table(m,p,q,top,bot);
! 207: new_line(file);
! 208: put(file,"The "); put(file,q,1); put(file,"-map of "); put(file,p,1);
! 209: put_line(file,"-planes representation : ");
! 210: put(file,xpm);
! 211: put_line(file,"with as localization map :"); put(file,locmap);
! 212: new_line(file);
! 213: Reduce_Symbols(top,bot,locmap);
! 214: put_line(file,"THE GENERIC SYSTEM : ");
! 215: put_line(file,locsys);
! 216: new_line(file);
! 217: Refine_Roots(file,locsys,sols);
! 218: new_line(file);
! 219: put_line(file,"THE TARGET SYSTEM : ");
! 220: put_line(file,target);
! 221: new_line(file);
! 222: Solve_Target_System(file,locsys,target,sols,report);
! 223: end Solve_Hypersurface_Target_System;
! 224:
! 225: procedure Set_Parameters ( file : in file_type; report : out boolean ) is
! 226:
! 227: -- DESCRIPTION :
! 228: -- Interactive determination of the continuation and output parameters.
! 229:
! 230: oc : natural;
! 231:
! 232: begin
! 233: new_line;
! 234: Driver_for_Continuation_Parameters(file);
! 235: new_line;
! 236: Driver_for_Process_io(file,oc);
! 237: report := not (oc = 0);
! 238: new_line;
! 239: put_line("No more input expected. See output file for results...");
! 240: new_line;
! 241: new_line(file);
! 242: end Set_Parameters;
! 243:
! 244: procedure Write_Poset_Times
! 245: ( file : in file_type; timer : in Timing_Widget;
! 246: npaths : in Standard_Natural_Vectors.Vector;
! 247: timings : in Duration_Array ) is
! 248:
! 249: -- DESCRIPTION :
! 250: -- Writes a overview of #paths and timings spent during deformations
! 251: -- along the poset structure.
! 252:
! 253: begin
! 254: new_line(file);
! 255: put_line(file,"--------------------------------------");
! 256: put_line(file,"| TIMING INFORMATION OVERVIEW |");
! 257: put_line(file,"--------------------------------------");
! 258: put_line(file,"| n | #paths | user cpu time |");
! 259: put_line(file,"--------------------------------------");
! 260: for i in npaths'range loop
! 261: if npaths(i) /= 0
! 262: then put(file,"|"); put(file,i,4); put(file," |");
! 263: put(file,npaths(i),7); put(file," | ");
! 264: print_hms(file,timings(i)); put(file," |"); new_line(file);
! 265: end if;
! 266: end loop;
! 267: put_line(file,"--------------------------------------");
! 268: put(file,"| total |");
! 269: put(file,Standard_Natural_Vectors.Sum(npaths),7);
! 270: put(file," | ");
! 271: print_hms(file,Elapsed_User_Time(timer));
! 272: put(file," |"); new_line(file);
! 273: put_line(file,"--------------------------------------");
! 274: end Write_Poset_Times;
! 275:
! 276: procedure Solve_Deformation_Poset
! 277: ( file : in file_type; m,p,q : in natural;
! 278: index_poset : in out Array_of_Array_of_Nodes ) is
! 279:
! 280: -- DESCRIPTION :
! 281: -- Writes the symbolic form of the maps.
! 282:
! 283: lnd : Link_to_Node;
! 284: deform_poset : Array_of_Array_of_VecMats(index_poset'range)
! 285: := Create(index_poset);
! 286: dim : constant natural := (m*p)+q*(m+p);
! 287: input : VecMat(1..dim) := Random_Complex_Planes(m,p,q);
! 288: svals : Standard_Complex_Vectors.Vector(1..dim) := Random_Vector(1,dim);
! 289: target_planes : VecMat(1..dim);
! 290: target_svals : Standard_Floating_Vectors.Vector(1..dim);
! 291: comp_target_svals : Standard_Complex_Vectors.Vector(1..dim);
! 292: root : Node := index_poset(dim)(1).all;
! 293: ans : character;
! 294: report,outlog : boolean;
! 295: timer : Timing_Widget;
! 296: npaths : Standard_Natural_Vectors.Vector(1..dim) := (1..dim => 0);
! 297: timings : Duration_Array(1..dim) := (1..dim => 0.0);
! 298:
! 299: begin
! 300: new_line;
! 301: put("Do you want to have the homotopies on file ? (y/n) ");
! 302: Ask_Yes_or_No(ans);
! 303: outlog := (ans = 'y');
! 304: Driver_for_Input_Planes(file,m,p,q,target_svals,target_planes);
! 305: Set_Parameters(file,report);
! 306: tstart(timer);
! 307: Solve(file,m+p,q,deform_poset,root,input,svals,report,outlog,
! 308: npaths,timings);
! 309: tstop(timer);
! 310: new_line(file);
! 311: print_times(file,timer,"Solving along the deformation poset");
! 312: Write_Poset_Times(file,timer,npaths,timings);
! 313: for i in target_svals'range loop
! 314: comp_target_svals(i) := Create(target_svals(i));
! 315: end loop;
! 316: Solve_Hypersurface_Target_System
! 317: (file,m,p,q,svals,comp_target_svals,input,target_planes,
! 318: index_poset,deform_poset,report);
! 319: end Solve_Deformation_Poset;
! 320:
! 321: procedure Create_Hypersurface_Localization_Poset
! 322: ( file : in file_type;
! 323: lnkroot : in Link_to_Node; m,p,q : in natural ) is
! 324:
! 325: -- DESCRIPTION :
! 326: -- Creates the posets and outputs them to the screen and on file.
! 327: -- Calls the solver afterwards.
! 328:
! 329: nq : constant natural := m*p + q*(m+p);
! 330: level_poset : Array_of_Nodes(0..nq);
! 331: index_poset : Array_of_Array_of_Nodes(0..nq);
! 332: nbp : natural;
! 333:
! 334: begin
! 335: level_poset := Create_Leveled_Poset(lnkroot);
! 336: Count_Roots(level_poset);
! 337: index_poset := Create_Indexed_Poset(level_poset);
! 338: put(index_poset);
! 339: put(file,index_poset);
! 340: put_line("The size of the poset : "); put_roco(index_poset);
! 341: put_line(file,"The size of the poset : "); put_roco(file,index_poset);
! 342: nbp := Root_Count_Sum(level_poset);
! 343: put("The number of paths : "); put(nbp,1); new_line;
! 344: put(file,"The number of paths : "); put(file,nbp,1); new_line(file);
! 345: Solve_Deformation_Poset(file,m,p,q,index_poset);
! 346: end Create_Hypersurface_Localization_Poset;
! 347:
! 348: procedure Create_General_Localization_Poset
! 349: ( file : in file_type; lnkroot : in Link_to_Node;
! 350: m,p,q : in natural; codim : in Bracket ) is
! 351:
! 352: -- DESCRIPTION :
! 353: -- Creates the posets and outputs them to the screen and on file.
! 354:
! 355: nq : constant natural := m*p + q*(m+p);
! 356: level_poset : Array_of_Nodes(0..nq);
! 357: index_poset : Array_of_Array_of_Nodes(0..nq);
! 358: nbp : natural;
! 359:
! 360: begin
! 361: level_poset := Create_Leveled_Poset(lnkroot);
! 362: Count_Roots(level_poset);
! 363: index_poset := Create_Indexed_Poset(level_poset);
! 364: put(index_poset);
! 365: put(file,index_poset);
! 366: put_line("The size of the poset : "); put_roco(index_poset);
! 367: put_line(file,"The size of the poset : "); put_roco(file,index_poset);
! 368: nbp := Root_Count_Sum(level_poset);
! 369: put("The number of paths : "); put(nbp,1); new_line;
! 370: put(file,"The number of paths : "); put(file,nbp,1); new_line(file);
! 371: -- Solve_Deformation_Poset(file,m,p,q,index_poset);
! 372: end Create_General_Localization_Poset;
! 373:
! 374: procedure Create_Top_Hypersurface_Poset
! 375: ( file : in file_type; m,p,q : in natural ) is
! 376:
! 377: -- DESCRIPTION :
! 378: -- Creates the poset by incrementing only top pivots.
! 379:
! 380: timer : Timing_Widget;
! 381: root : Node(p) := Trivial_Root(m,p,q);
! 382: lnkroot : Link_to_Node := new Node'(root);
! 383:
! 384: begin
! 385: tstart(timer);
! 386: Q_Top_Create(lnkroot,root.bottom(p),m+p);
! 387: put_line("The poset created from the top : ");
! 388: put_line(file,"The poset created from the top : ");
! 389: Create_Hypersurface_Localization_Poset(file,lnkroot,m,p,q);
! 390: tstop(timer);
! 391: new_line(file);
! 392: print_times(file,timer,"Total time for Quantum Pieri Homotopy Algorithm");
! 393: end Create_Top_Hypersurface_Poset;
! 394:
! 395: procedure Create_Bottom_Hypersurface_Poset
! 396: ( file : in file_type; m,p,q : in natural ) is
! 397:
! 398: -- DESCRIPTION :
! 399: -- Creates the poset by decrementing only bottom pivots.
! 400:
! 401: timer : Timing_Widget;
! 402: root : Node(p) := Trivial_Root(m,p,q);
! 403: lnkroot : Link_to_Node := new Node'(root);
! 404:
! 405: begin
! 406: tstart(timer);
! 407: Q_Bottom_Create(lnkroot,m+p);
! 408: put_line("The poset created from the bottom : ");
! 409: put_line(file,"The poset created from the bottom : ");
! 410: Create_Hypersurface_Localization_Poset(file,lnkroot,m,p,q);
! 411: tstop(timer);
! 412: new_line(file);
! 413: print_times(file,timer,"Total time for Quantum Pieri Homotopy Algorithm");
! 414: end Create_Bottom_Hypersurface_Poset;
! 415:
! 416: procedure Create_Mixed_Hypersurface_Poset
! 417: ( file : in file_type; m,p,q : in natural ) is
! 418:
! 419: -- DESCRIPTION :
! 420: -- Creates the poset by incrementing top and decrementing bottom pivots.
! 421:
! 422: timer : Timing_Widget;
! 423: root : Node(p) := Trivial_Root(m,p,q);
! 424: lnkroot : Link_to_Node := new Node'(root);
! 425:
! 426: begin
! 427: tstart(timer);
! 428: Q_Top_Bottom_Create(lnkroot,root.bottom(p),m+p);
! 429: put_line("The poset created in a mixed fashion : ");
! 430: put_line(file,"The poset created in a mixed fashion :");
! 431: Create_Hypersurface_Localization_Poset(file,lnkroot,m,p,q);
! 432: tstop(timer);
! 433: new_line(file);
! 434: print_times(file,timer,"Total time for Quantum Pieri Homotopy Algorithm");
! 435: end Create_Mixed_Hypersurface_Poset;
! 436:
! 437: procedure Create_Top_General_Poset
! 438: ( file : in file_type; m,p,q : in natural ) is
! 439:
! 440: -- DESCRIPTION :
! 441: -- Creates the poset by incrementing top pivots.
! 442:
! 443: timer : Timing_Widget;
! 444: root : Node(p) := Trivial_Root(m,p,q);
! 445: lnkroot : Link_to_Node := new Node'(root);
! 446: codim : constant Bracket := Read_Codimensions(m,p,q);
! 447:
! 448: begin
! 449: tstart(timer);
! 450: Q_Top_Create(lnkroot,codim,root.bottom(p),m+p);
! 451: put_line("The poset created from the top : ");
! 452: put_line(file,"The poset created from the top :");
! 453: Create_General_Localization_Poset(file,lnkroot,m,p,q,codim);
! 454: tstop(timer);
! 455: new_line(file);
! 456: print_times(file,timer,"Total time for Quantum Pieri Homotopy Algorithm");
! 457: end Create_Top_General_Poset;
! 458:
! 459: procedure Create_Bottom_General_Poset
! 460: ( file : in file_type; m,p,q : in natural ) is
! 461:
! 462: -- DESCRIPTION :
! 463: -- Creates the poset by decrementing bottom pivots.
! 464:
! 465: timer : Timing_Widget;
! 466: root : Node(p) := Trivial_Root(m,p,q);
! 467: lnkroot : Link_to_Node := new Node'(root);
! 468: codim : constant Bracket := Read_Codimensions(m,p,q);
! 469:
! 470: begin
! 471: tstart(timer);
! 472: Q_Bottom_Create(lnkroot,codim,m+p);
! 473: put_line("The poset created from the bottom : ");
! 474: put_line(file,"The poset created from the bottom :");
! 475: Create_General_Localization_Poset(file,lnkroot,m,p,q,codim);
! 476: tstop(timer);
! 477: new_line(file);
! 478: print_times(file,timer,"Total time for Quantum Pieri Homotopy Algorithm");
! 479: end Create_Bottom_General_Poset;
! 480:
! 481: procedure Create_Mixed_General_Poset
! 482: ( file : in file_type; m,p,q : in natural ) is
! 483:
! 484: -- DESCRIPTION :
! 485: -- Creates the poset by incrementing top and decrementing bottom pivots.
! 486:
! 487: timer : Timing_Widget;
! 488: root : Node(p) := Trivial_Root(m,p,q);
! 489: lnkroot : Link_to_Node := new Node'(root);
! 490: codim : constant Bracket := Read_Codimensions(m,p,q);
! 491:
! 492: begin
! 493: tstart(timer);
! 494: Q_Top_Bottom_Create(lnkroot,codim,root.bottom(p),m+p);
! 495: put_line("The poset created from the bottom : ");
! 496: put_line(file,"The poset created from the bottom :");
! 497: Create_General_Localization_Poset(file,lnkroot,m,p,q,codim);
! 498: tstop(timer);
! 499: new_line(file);
! 500: print_times(file,timer,"Total time for Quantum Pieri Homotopy Algorithm");
! 501: end Create_Mixed_General_Poset;
! 502:
! 503: procedure Main is
! 504:
! 505: p : constant natural := d;
! 506: m : constant natural := n-d;
! 507: ans : character;
! 508:
! 509: begin
! 510: new_line;
! 511: put_line("MENU for interpolating maps of fixed degree in Grassmannian.");
! 512: put_line(" 1. k_i = 1 consistently incrementing top pivots.");
! 513: put_line(" 2. consistently decrementing bottom pivots.");
! 514: put_line(" 3. mixed top-bottom sequence for poset creation.");
! 515: put_line(" 4. k_i >= 1 consistently incrementing top pivots.");
! 516: put_line(" 5. consistently incrementing bottom pivots.");
! 517: put_line(" 6. mixed top-bottom sequence for poset creation.");
! 518: put("Type 1, 2, 3, 4, 5, or 6 to choose : ");
! 519: Ask_Alternative(ans,"123456");
! 520: new_line;
! 521: case ans is
! 522: when '1' => Create_Top_Hypersurface_Poset(file,m,p,q);
! 523: when '2' => Create_Bottom_Hypersurface_Poset(file,m,p,q);
! 524: when '3' => Create_Mixed_Hypersurface_Poset(file,m,p,q);
! 525: when '4' => Create_Top_General_Poset(file,m,p,q);
! 526: when '5' => Create_Bottom_General_Poset(file,m,p,q);
! 527: when '6' => Create_Mixed_General_Poset(file,m,p,q);
! 528: when others => put_line("Option not recognized. Please try again.");
! 529: end case;
! 530: end Main;
! 531:
! 532: begin
! 533: Main;
! 534: end Driver_for_Quantum_Pieri;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>