[BACK]Return to minimal.k CVS log [TXT][DIR] Up to [local] / OpenXM / src / k097 / lib / minimal

Diff for /OpenXM/src/k097/lib/minimal/minimal.k between version 1.10 and 1.15

version 1.10, 2000/05/07 02:10:44 version 1.15, 2000/06/14 07:44:05
Line 1 
Line 1 
 /* $OpenXM: OpenXM/src/k097/lib/minimal/minimal.k,v 1.9 2000/05/06 13:41:12 takayama Exp $ */  /* $OpenXM: OpenXM/src/k097/lib/minimal/minimal.k,v 1.14 2000/06/09 08:04:54 takayama Exp $ */
 #define DEBUG 1  #define DEBUG 1
 /* #define ORDINARY 1 */  /* #define ORDINARY 1 */
 /* If you run this program on openxm version 1.1.2 (FreeBSD),  /* If you run this program on openxm version 1.1.2 (FreeBSD),
Line 6 
Line 6 
    ln -s /usr/bin/cpp /lib/cpp     ln -s /usr/bin/cpp /lib/cpp
 */  */
 #define OFFSET 0  #define OFFSET 0
 #define TOTAL_STRATEGY  #define TOTAL_STRATEGY 1
 /* #define OFFSET 20*/  /* #define OFFSET 20*/
 /* Test sequences.  /* Test sequences.
    Use load["minimal.k"];;     Use load["minimal.k"];;
Line 132  sm1(" [(AvoidTheSameRing)] pushEnv 
Line 132  sm1(" [(AvoidTheSameRing)] pushEnv 
       [ [(AvoidTheSameRing) 0] system_variable        [ [(AvoidTheSameRing) 0] system_variable
         [(gbListTower) tower (list) dc] system_variable          [(gbListTower) tower (list) dc] system_variable
       ] pop popEnv ");        ] pop popEnv ");
         /* sm1("(hoge) message show_ring "); */
 }  }
   
 def SresolutionFrameWithTower(g,opt) {  def SresolutionFrameWithTower(g,opt) {
   local gbTower, ans, ff, count, startingGB, opts, skelton,withSkel, autof,    local gbTower, ans, ff, count, startingGB, opts, skelton,withSkel, autof,
         gbasis;          gbasis, nohomog;
     nohomog = false;
     count = -1;
   if (Length(Arglist) >= 2) {    if (Length(Arglist) >= 2) {
     if (IsInteger(opt)) count = opt;      if (IsInteger(opt)) {
         count = opt;
       }else if (IsString(opt)) {
         if (opt == "homogenized") {
            nohomog = true;
         }else{
            Println("Warning: unknown option");
            Println(opt);
         }
       }
   }else{    }else{
     count = -1;      count = -1;
   }    }
Line 152  def SresolutionFrameWithTower(g,opt) {
Line 164  def SresolutionFrameWithTower(g,opt) {
   */    */
   
   sm1(" (mmLarger) (matrix) switch_function ");    sm1(" (mmLarger) (matrix) switch_function ");
   g = Map(g,"Shomogenize");    if (! nohomog) {
       Println("Automatic homogenization.");
       g = Map(g,"Shomogenize");
     }else{
       Println("No automatic homogenization.");
     }
   if (SonAutoReduce) {    if (SonAutoReduce) {
     sm1("[ (AutoReduce) ] system_variable /autof set ");      sm1("[ (AutoReduce) ] system_variable /autof set ");
     sm1("[ (AutoReduce) 1 ] system_variable ");      sm1("[ (AutoReduce) 1 ] system_variable ");
Line 192  def SresolutionFrameWithTower(g,opt) {
Line 209  def SresolutionFrameWithTower(g,opt) {
 }  }
 HelpAdd(["SresolutionFrameWithTower",  HelpAdd(["SresolutionFrameWithTower",
 ["It returs [resolution of the initial, gbTower, skelton, gbasis]",  ["It returs [resolution of the initial, gbTower, skelton, gbasis]",
    "option: \"homogenized\" (no automatic homogenization) ",
  "Example: Sweyl(\"x,y\");",   "Example: Sweyl(\"x,y\");",
  "         a=SresolutionFrameWithTower([x^3,x*y,y^3-1]);"]]);   "         a=SresolutionFrameWithTower([x^3,x*y,y^3-1]);"]]);
   
 def SresolutionFrame(f,opt) {  def SresolutionFrame(f,opt) {
   local ans;    local ans;
   ans = SresolutionFrameWithTower(f);    ans = SresolutionFrameWithTower(f,opt);
   return(ans[0]);    return(ans[0]);
 }  }
 /* ---------------------------- */  /* ---------------------------- */
Line 291  def Sres0FrameWithSkelton(g) {
Line 309  def Sres0FrameWithSkelton(g) {
   
   
 def StotalDegree(f) {  def StotalDegree(f) {
   sm1(" [(grade) f] gbext (universalNumber) dc /FunctionValue set ");    local d0;
     sm1(" [(grade) f] gbext (universalNumber) dc /d0 set ");
     /* Print("degree of "); Print(f); Print(" is "); Println(d0); */
     return(d0);
 }  }
   
 /* Sord_w(x^2*Dx*Dy,[x,-1,Dx,1]); */  /* Sord_w(x^2*Dx*Dy,[x,-1,Dx,1]); */
Line 434  def SmaxOfStrategy(a) {
Line 455  def SmaxOfStrategy(a) {
 }  }
   
   
 def SlaScala(g) {  def SlaScala(g,opt) {
   local rf, tower, reductionTable, skel, redundantTable, bases,    local rf, tower, reductionTable, skel, redundantTable, bases,
         strategy, maxOfStrategy, height, level, n, i,          strategy, maxOfStrategy, height, level, n, i,
         freeRes,place, f, reducer,pos, redundant_seq,bettiTable,freeResV,ww,          freeRes,place, f, reducer,pos, redundant_seq,bettiTable,freeResV,ww,
Line 443  def SlaScala(g) {
Line 464  def SlaScala(g) {
   /* extern WeightOfSweyl; */    /* extern WeightOfSweyl; */
   ww = WeightOfSweyl;    ww = WeightOfSweyl;
   Print("WeightOfSweyl="); Println(WeightOfSweyl);    Print("WeightOfSweyl="); Println(WeightOfSweyl);
   rf = SresolutionFrameWithTower(g);    rf = SresolutionFrameWithTower(g,opt);
     Print("rf="); sm1_pmat(rf);
   redundant_seq = 1;   redundant_seq_ordinary = 1;    redundant_seq = 1;   redundant_seq_ordinary = 1;
   tower = rf[1];    tower = rf[1];
   reductionTable = SgenerateTable(tower);    reductionTable = SgenerateTable(tower);
Line 661  def MonomialPart(f) {
Line 683  def MonomialPart(f) {
   sm1(" [(lmonom) f] gbext /FunctionValue set ");    sm1(" [(lmonom) f] gbext /FunctionValue set ");
 }  }
   
   /* WARNING:
     When you use SwhereInTower, you have to change gbList
     as below. Ofcourse, you should restrore the gbList
     SsetTower(StowerOf(tower,level));
     pos = SwhereInTower(syzHead,tower[level]);
   */
 def SwhereInTower(f,tower) {  def SwhereInTower(f,tower) {
   local i,n,p,q;    local i,n,p,q;
   if (f == Poly("0")) return(-1);    if (f == Poly("0")) return(-1);
Line 697  def SpairAndReduction(skel,level,ii,freeRes,tower,ww) 
Line 725  def SpairAndReduction(skel,level,ii,freeRes,tower,ww) 
   
   tower2 = StowerOf(tower,level-1);    tower2 = StowerOf(tower,level-1);
   SsetTower(tower2);    SsetTower(tower2);
     Println(["level=",level]);
     Println(["tower2=",tower2]);
   /** sm1(" show_ring ");   */    /** sm1(" show_ring ");   */
   
   gi = Stoes_vec(bases[i]);    gi = Stoes_vec(bases[i]);
Line 730  def SpairAndReduction(skel,level,ii,freeRes,tower,ww) 
Line 760  def SpairAndReduction(skel,level,ii,freeRes,tower,ww) 
   sj = sj*tmp[1]+t_syz[j];    sj = sj*tmp[1]+t_syz[j];
   t_syz[i] = si;    t_syz[i] = si;
   t_syz[j] = sj;    t_syz[j] = sj;
   
     SsetTower(StowerOf(tower,level));
   pos = SwhereInTower(syzHead,tower[level]);    pos = SwhereInTower(syzHead,tower[level]);
   
     SsetTower(StowerOf(tower,level-1));
   pos2 = SwhereInTower(tmp[0],tower[level-1]);    pos2 = SwhereInTower(tmp[0],tower[level-1]);
   ans = [tmp[0],t_syz,pos,pos2,vdeg,vdeg_reduced];    ans = [tmp[0],t_syz,pos,pos2,vdeg,vdeg_reduced];
   /* pos is the place to put syzygy at level. */    /* pos is the place to put syzygy at level. */
Line 843  def Sbases_to_vec(bases,size) {
Line 877  def Sbases_to_vec(bases,size) {
   return(newbases);    return(newbases);
 }  }
   
 def Sminimal(g) {  HelpAdd(["Sminimal",
   ["It constructs the V-minimal free resolution by LaScala-Stillman's algorithm",
    "option: \"homogenized\" (no automatic homogenization ",
    "Example:  Sweyl(\"x,y\",[[\"x\",-1,\"y\",-1,\"Dx\",1,\"Dy\",1]]);",
    "          v=[[2*x*Dx + 3*y*Dy+6, 0],",
    "             [3*x^2*Dy + 2*y*Dx, 0],",
    "             [0,  x^2+y^2],",
    "             [0,  x*y]];",
    "         a=Sminimal(v);",
    "         Sweyl(\"x,y\",[[\"x\",-1,\"y\",-1,\"Dx\",1,\"Dy\",1]]);",
    "         b = ReParse(a[0]); sm1_pmat(b); ",
    "         IsExact_h(b,[x,y]):",
    "Note:  a[0] is the V-minimal resolution. a[3] is the Schreyer resolution."]]);
   
   def Sminimal(g,opt) {
   local r, freeRes, redundantTable, reducer, maxLevel,    local r, freeRes, redundantTable, reducer, maxLevel,
         minRes, seq, maxSeq, level, betti, q, bases, dr,          minRes, seq, maxSeq, level, betti, q, bases, dr,
         betti_levelplus, newbases, i, j,qq;          betti_levelplus, newbases, i, j,qq, tminRes;
   r = SlaScala(g);    r = SlaScala(g,opt);
   /* Should I turn off the tower?? */    /* Should I turn off the tower?? */
   freeRes = r[0];    freeRes = r[0];
   redundantTable = r[1];    redundantTable = r[1];
Line 904  def Sminimal(g) {
Line 952  def Sminimal(g) {
       }        }
     }      }
    }     }
    return([Stetris(minRes,redundantTable),     tminRes = Stetris(minRes,redundantTable);
      return([SpruneZeroRow(tminRes), tminRes,
           [ minRes, redundantTable, reducer,r[3],r[4]],r[0]]);            [ minRes, redundantTable, reducer,r[3],r[4]],r[0]]);
   /* r[4] is the redundantTable_ordinary */    /* r[4] is the redundantTable_ordinary */
   /* r[0] is the freeResolution */    /* r[0] is the freeResolution */
Line 1076  def Sannfs2_laScala(f) {
Line 1125  def Sannfs2_laScala(f) {
   return(Sminimal(pp));    return(Sminimal(pp));
 }  }
   
   def Sannfs2_laScala2(f) {
     local p,pp;
     p = Sannfs(f,"x,y");
     sm1(" p 0 get { [(x) (y) (Dx) (Dy)] laplace0 } map /p set ");
     p = [p];
     Sweyl("x,y",[["x",1,"y",1,"Dx",1,"Dy",1,"h",1],
                  ["x",-1,"y",-1,"Dx",1,"Dy",1]]);
     pp = Map(p[0],"Spoly");
     return(Sminimal(pp));
   }
   
 def Sannfs3(f) {  def Sannfs3(f) {
   local p,pp;    local p,pp;
   p = Sannfs(f,"x,y,z");    p = Sannfs(f,"x,y,z");
Line 1101  HelpAdd(["Sannfs3",
Line 1161  HelpAdd(["Sannfs3",
   
 */  */
   
   def Sannfs3_laScala2(f) {
     local p,pp;
     p = Sannfs(f,"x,y,z");
     sm1(" p 0 get { [(x) (y) (z) (Dx) (Dy) (Dz)] laplace0 } map /p set ");
     Sweyl("x,y,z",[["x",1,"y",1,"z",1,"Dx",1,"Dy",1,"Dz",1,"h",1],
                    ["x",-1,"y",-1,"z",-1,"Dx",1,"Dy",1,"Dz",1]]);
     pp = Map(p,"Spoly");
     return(Sminimal(pp));
   }
   
   
 /*  The below does not use LaScala-Stillman's algorithm. */  /*  The below does not use LaScala-Stillman's algorithm. */
Line 1295  def SpairAndReduction2(skel,level,ii,freeRes,tower,ww,
Line 1364  def SpairAndReduction2(skel,level,ii,freeRes,tower,ww,
   
   tower2 = StowerOf(tower,level-1);    tower2 = StowerOf(tower,level-1);
   SsetTower(tower2);    SsetTower(tower2);
     Println(["level=",level]);
     Println(["tower2=",tower2]);
   /** sm1(" show_ring ");   */    /** sm1(" show_ring ");   */
   
   gi = Stoes_vec(bases[i]);    gi = Stoes_vec(bases[i]);
Line 1352  def SpairAndReduction2(skel,level,ii,freeRes,tower,ww,
Line 1423  def SpairAndReduction2(skel,level,ii,freeRes,tower,ww,
   Print("vdegree of the original = "); Println(vdeg);    Print("vdegree of the original = "); Println(vdeg);
   Print("vdegree of the remainder = "); Println(vdeg_reduced);    Print("vdegree of the remainder = "); Println(vdeg_reduced);
   
     if (!IsNull(vdeg_reduced)) {
       if (vdeg_reduced < vdeg) {
         Println("--- Special in V-minimal!");
         Println(tmp[0]);
         Println("syzygy="); sm1_pmat(t_syz);
         Print("[vdeg, vdeg_reduced] = "); Println([vdeg,vdeg_reduced]);
       }
     }
   
     SsetTower(StowerOf(tower,level));
   pos = SwhereInTower(syzHead,tower[level]);    pos = SwhereInTower(syzHead,tower[level]);
   
     SsetTower(StowerOf(tower,level-1));
   pos2 = SwhereInTower(tmp[0],tower[level-1]);    pos2 = SwhereInTower(tmp[0],tower[level-1]);
   ans = [tmp[0],t_syz,pos,pos2,vdeg,vdeg_reduced,c2];    ans = [tmp[0],t_syz,pos,pos2,vdeg,vdeg_reduced,c2];
   /* pos is the place to put syzygy at level. */    /* pos is the place to put syzygy at level. */
   /* pos2 is the place to put a new GB at level-1. */    /* pos2 is the place to put a new GB at level-1. */
   Println(ans);    Println(ans);
   Println("  ");    Println("--- end of SpairAndReduction2  ");
   return(ans);    return(ans);
 }  }
   
 HelpAdd(["Sminimal_v",  HelpAdd(["Sminimal_v",
 ["It constructs the V-minimal free resolution from the Schreyer resolution",  ["It constructs the V-minimal free resolution from the Schreyer resolution",
  "step by step.",   "step by step.",
    "This code still contains bugs. It sometimes outputs wrong answer.",
  "Example:   Sweyl(\"x,y\",[[\"x\",-1,\"y\",-1,\"Dx\",1,\"Dy\",1]]);",   "Example:   Sweyl(\"x,y\",[[\"x\",-1,\"y\",-1,\"Dx\",1,\"Dy\",1]]);",
  "          v=[[2*x*Dx + 3*y*Dy+6, 0],",   "          v=[[2*x*Dx + 3*y*Dy+6, 0],",
  "             [3*x^2*Dy + 2*y*Dx, 0],",   "             [3*x^2*Dy + 2*y*Dx, 0],",
Line 1374  HelpAdd(["Sminimal_v",
Line 1458  HelpAdd(["Sminimal_v",
  "         sm1_pmat(a[0]); b=a[0]; b[1]*b[0]:",   "         sm1_pmat(a[0]); b=a[0]; b[1]*b[0]:",
  "Note:  a[0] is the V-minimal resolution. a[3] is the Schreyer resolution."]]);   "Note:  a[0] is the V-minimal resolution. a[3] is the Schreyer resolution."]]);
   
   /* This code still contains bugs. It sometimes outputs wrong answer. */
   /* See test12() in minimal-test.k.  */
   /* There may be remaining 1, too */
 def Sminimal_v(g) {  def Sminimal_v(g) {
   local r, freeRes, redundantTable, reducer, maxLevel,    local r, freeRes, redundantTable, reducer, maxLevel,
         minRes, seq, maxSeq, level, betti, q, bases, dr,          minRes, seq, maxSeq, level, betti, q, bases, dr,
Line 1549  def testAnnfs3(f) {
Line 1635  def testAnnfs3(f) {
   }    }
   return(a);    return(a);
 }  }
   
   def ToString_array(p) {
     local ans;
     if (IsArray(p)) {
       ans = Map(p,"ToString_array");
     }else{
       ans = ToString(p);
     }
     return(ans);
   }
   
   /* sm1_res_div([[x],[y]],[[x^2],[x*y],[y^2]],[x,y]): */
   
   def sm1_res_div(I,J,V) {
     I = ToString_array(I);
     J = ToString_array(J);
     V = ToString_array(V);
     sm1(" [[ I J]  V ] res*div /FunctionValue set ");
   }
   
   /* It has not yet been working */
   def sm1_res_kernel_image(m,n,v) {
     m = ToString_array(m);
     n = ToString_array(n);
     v = ToString_array(v);
     sm1(" [m n v] res-kernel-image /FunctionValue set ");
   }
   def Skernel(m,v) {
     m = ToString_array(m);
     v = ToString_array(v);
     sm1(" [ m v ] syz /FunctionValue set ");
   }
   
   def test3() {
     local a1,a2,b1,b2;
     a1 = Sannfs3("x^3-y^2*z^2");
     a1 = a1[0];
     a2 = Sannfs3_laScala2("x^3-y^2*z^2");
     a2 = a2[0];
     b1 = a1[1];
     b2 = a2[1];
     sm1_pmat(b2);
     Println("  OVER ");
     sm1_pmat(b1);
     return([sm1_res_div(b2,b1,["x","y","z"]),b2,b1,a2,a1]);
   }
   
   def test4() {
     local a,b;
     a = Sannfs3_laScala2("x^3-y^2*z^2");
     b = a[0];
     sm1_pmat( sm1_res_kernel_image(b[0],b[1],[x,y,z]));
     sm1_pmat( sm1_res_kernel_image(b[1],b[2],[x,y,z]));
     return(a);
   }
   
   def sm1_gb(f,v) {
     f =ToString_array(f);
     v = ToString_array(v);
     sm1(" [f v] gb /FunctionValue set ");
   }
   
   
   def SisComplex(a) {
     local n,i,j,k,b,p,q;
     n = Length(a);
     for (i=0; i<n-1; i++) {
       if (Length(a[i+1]) != 0) {
         b = a[i+1]*a[i];
         p = Length(b); q = Length(b[0]);
         for (j=0; j<p; j++) {
           for (k=0; k<q; k++) {
             if (!IsZero(b[j,k])) {
                Print("Is is not complex at ");
                Println([i,j,k]);
                return(false);
             }
           }
         }
       }
     }
     return(true);
   }
   
   def IsExact_h(c,v) {
     local a;
     v = ToString_array(v);
     a = [c,v];
     sm1(a," isExact_h /FunctionValue set ");
   }
   HelpAdd(["IsExact_h",
   ["IsExact_h(complex,var): bool",
    "It checks the given complex is exact or not in D<h> (homogenized Weyl algebra)",
    "cf. ReParse"
   ]]);
   
   def ReParse(a) {
     local c;
     if (IsArray(a)) {
       c = Map(a,"ReParse");
     }else{
       sm1(a," toString . /c set");
     }
     return(c);
   }
   HelpAdd(["ReParse",
   ["Reparse(obj): obj",
    "It parses the given object in the current ring.",
    "Outputs from SlaScala, Sschreyer may cause a trouble in other functions,",
    "because it uses the Schreyer order.",
    "In this case, ReParse the outputs from these functions.",
    "cf. IsExaxt_h"
   ]]);

Legend:
Removed from v.1.10  
changed lines
  Added in v.1.15

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