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

File: [local] / OpenXM / src / k097 / lib / restriction / demo.k (download)

Revision 1.9, Sun May 4 13:19:21 2003 UTC (21 years, 2 months ago) by takayama
Branch: MAIN
CVS Tags: R_1_3_1-2, RELEASE_1_3_1_13b, RELEASE_1_2_3_12, RELEASE_1_2_3, RELEASE_1_2_2_KNOPPIX_b, RELEASE_1_2_2_KNOPPIX, RELEASE_1_2_2, KNOPPIX_2006, HEAD, DEB_REL_1_2_3-9
Changes since 1.8: +9 -1 lines

demoReduction(true) demonstrates how reduction (division theorem) works.

/* $OpenXM: OpenXM/src/k097/lib/restriction/demo.k,v 1.9 2003/05/04 13:19:21 takayama Exp $  */

load["restriction.k"];;
load("../ox/ox.k");;

def demoSendAsirCommand(a) {
  a.executeString("load(\"bfct\");");
  a.executeString(" def myann(F) { B=ann(eval_str(F)); print(B); return(map(dp_ptod,B,[hoge,x,y,z,s,hh,ee,dx,dy,dz,ds,dhh])); }; ");
  a.executeString(" def myann0(F) { B=ann0(eval_str(F)); print(B); return(map(dp_ptod,B[1],[hoge,x,y,z,s,hh,ee,dx,dy,dz,ds,dhh])); }; ");
  a.executeString(" def mybfct(F) { return(rtostr(bfct(eval_str(F)))); }; ");
  a.executeString(" def mygeneric_bfct(F,VV,DD,WW) { print([F,VV,DD,WW]); return(generic_bfct(F,VV,DD,WW));}; ");
}

if (Boundp("NoX")) {
  as = Asir.generate(false); 
}else{
  as = Asir.generate();
}

def demoReduction(v) {
  if (v == true) {
    sm1(" [(Verbose) 1] system_variable  [(DebugReductionRed) 1] system_variable Onverbose ");
  }else{
    sm1(" [(Verbose) 0] system_variable  [(DebugReductionRed) 0] system_variable Offverbose ");
  }
}

asssssir = as;
demoSendAsirCommand(as);
RingD("x,y,z,s");

def asirBfunction(a,f) {
  local p,b;
  p = ToString(f);
  Println(p);
  b = a.rpc("mybfct",[p]);
  sm1(" b . /b set ");
  return(b);
}

def asirAnnfsXYZ(a,f) {
  local p,b;
  RingD("x,y,z,s");  /* Fix!! See the definition of myann() */
  p = ToString(f);
  b = a.rpc("myann",[p]);
  return(b);
}


def asir_generic_bfct(a,ii,vv,dd,ww) {
   local ans;
   ans = a.rpc_str("mygeneric_bfct",[ii,vv,dd,ww]);
   return(ans);
}
/* a=startAsir();
   asir_generic_bfct(a,[Dx^2+Dy^2-1,Dx*Dy-4],[x,y],[Dx,Dy],[1,1]): */

/* usage: misc/tmp/complex-ja.texi */
def ChangeRing(f) {
  local r;
  r = GetRing(f);
  if (Tag(r) == 14) {
    SetRing(r);
    return(true);
  }else{
    return(false);
  }
}

def asir_BfRoots2(G) {
   local bb,ans,ss;
   sm1(" G flatten {dehomogenize} map /G set ");
   ChangeRing(G);
   ss = asir_generic_bfct(asssssir,G,[x,y],[Dx,Dy],[1,1]);
   bb = [ss];
   sm1(" bb 0 get findIntegralRoots { (universalNumber) dc } map /ans set ");
   return([ans, bb]);
}
def asir_BfRoots3(G) {
   local bb,ans,ss;
   sm1(" G flatten {dehomogenize} map /G set ");
   ChangeRing(G);
   ss = asir_generic_bfct(asssssir,G,[x,y,z],[Dx,Dy,Dz],[1,1,1]);
   bb = [ss];
   sm1(" bb 0 get findIntegralRoots { (universalNumber) dc } map /ans set ");
   return([ans, bb]);
}

def asir_BfRoots4(G) {
   local bb,ans,ss;
   sm1(" G flatten {dehomogenize} map /G set ");
   ChangeRing(G);
   ss = asir_generic_bfct(asssssir,G,[x,y,z,vv],[Dx,Dy,Dz,Dvv],[0,0,0,1]);
   bb = [ss];
   sm1(" bb 0 get findIntegralRoots { (universalNumber) dc } map /ans set ");
   return([ans, bb]);
}

def findMinSol(f) {
  sm1(" f (string) dc findIntegralRoots 0 get (universalNumber) dc /FunctionValue set ");
}

def asirAnnXYZ(a,f) {
  local p,b,b0,k1;
  RingD("x,y,z,s");  /* Fix!! See the definition of myann() */
  p = ToString(f);
  b = a.rpc("myann",[p]);
  Print("Annhilating ideal with s is "); Println(b);
  b0 = asirBfunction(a,f);
  Print("bfunction is "); Println(b0);
  k1 = findMinSol(b0);
  Print("Minimal integral root is "); Println(k1);
  sm1(" b { [[(s). k1 (string) dc .]] replace } map /b set ");
  return(b);
}


def nonquasi2(p,q) {
  local s,ans,f;

  sm1("0 set_timer "); sm1(" oxNoX ");
  asssssir.OnTimer();

  f = x^p+y^q+x*y^(q-1);
  Print("f=");Println(f);
  s = ToString(f);
  sm1(" Onverbose ");
  ans = asirAnnfsXYZ(asssssir,f);
  sm1(" ans 0 get (ring) dc ring_def ");
  sm1("[ ans { [[(s). (-1).]] replace } map ] /II set ");
  Println("Step 1: Annhilating ideal (II)"); Println(II);
  sm1(" II 0 get { [(x) (y) (Dx) (Dy) ] laplace0 } map /II set ");
  Sweyl("x,y",[["x",-1,"y",-1,"Dx",1,"Dy",1]]);
  pp = Map(II,"Spoly");
  Res = Sminimal(pp);
  Res0 = Res[0];
  Println("Step2: (-1,1)-minimal resolution (Res0) "); sm1_pmat(Res0);
/*  R = BfRoots1(Res0[0],"x,y"); */
  R = asir_BfRoots2(Res0[0]);
  Println("Step3: computing the cohomology of the truncated complex.");
  Print("Roots and b-function are "); Println(R);
  R0 = R[0];
  Ans=Srestall(Res0, ["x", "y"],  ["x", "y"], R0[Length(R0)-1]);

  Println("Timing data: sm1 "); sm1(" 1 set_timer ");
  Print("     ox_asir [CPU,GC]:  ");Println(asssssir.OffTimer());

  Print("Answer is "); Println(Ans[0]);
  return(Ans);
}

def asirAnn0XYZ(a,f) {
  local p,b,b0;
  RingD("x,y,z,s");  /* Fix!! See the definition of myann() */
  p = ToString(f);
  b = a.rpc("myann0",[p]);
  Print("Annhilating ideal of f^r is "); Println(b);
  return(b);
}

def DeRham2WithAsir(f) {
  local s;

  sm1("0 set_timer "); sm1(" oxNoX ");
  asssssir.OnTimer();

  s = ToString(f);
  II = asirAnn0XYZ(asssssir,f);
  Print("Step 1: Annhilating ideal (II)"); Println(II);
  sm1(" II  { [(x) (y) (Dx) (Dy) ] laplace0 } map /II set ");
  Sweyl("x,y",[["x",-1,"y",-1,"Dx",1,"Dy",1]]);
  pp = Map(II,"Spoly");
  Res = Sminimal(pp);
  Res0 = Res[0];
  Print("Step2: (-1,1)-minimal resolution (Res0) "); sm1_pmat(Res0);
  /* R = BfRoots1(Res0[0],"x,y"); */
  R = asir_BfRoots2(Res0[0]);
  Println("Step3: computing the cohomology of the truncated complex.");
  Print("Roots and b-function are "); Println(R);
  R0 = R[0];
  Ans=Srestall(Res0, ["x", "y"],  ["x", "y"],R0[Length(R0)-1] );

  Println("Timing data: sm1 "); sm1(" 1 set_timer ");
  Print("     ox_asir [CPU,GC]:  ");Println(asssssir.OffTimer());

  Print("Answer is ");Println(Ans[0]);
  return(Ans);
}
def DeRham3WithAsir(f) {
  local s;

  sm1("0 set_timer "); sm1(" oxNoX ");
  asssssir.OnTimer();

  s = ToString(f);
  II = asirAnn0XYZ(asssssir,f);
  Print("Step 1: Annhilating ideal (II)"); Println(II);
  sm1(" II  { [(x) (y) (z) (Dx) (Dy) (Dz)] laplace0 } map /II set ");
  Sweyl("x,y,z",[["x",-1,"y",-1,"z",-1,"Dx",1,"Dy",1,"Dz",1]]);
  pp = Map(II,"Spoly");
  Res = Sminimal(pp);
  Res0 = Res[0];
  Print("Step2: (-1,1)-minimal resolution (Res0) "); sm1_pmat(Res0);
  /* R = BfRoots1(Res0[0],"x,y,z");  */
  R = asir_BfRoots3(Res0[0]);
  Println("Step3: computing the cohomology of the truncated complex.");
  Print("Roots and b-function are "); Println(R);
  R0 = R[0];
  Ans=Srestall(Res0, ["x", "y", "z"],  ["x", "y", "z"],R0[Length(R0)-1] );

  Println("Timing data: sm1 "); sm1(" 1 set_timer ");
  Print("     ox_asir [CPU,GC]:  ");Println(asssssir.OffTimer());

  Print("Answer is ");Println(Ans[0]);
  return(Ans);
}

/*  test data 

   NoX=true;
   nonquasi2(4,5);
   nonquasi2(4,6);
   nonquasi2(4,7);
   nonquasi2(4,8);
   nonquasi2(4,9);
   nonquasi2(4,10);

   nonquasi2(5,6);
   nonquasi2(6,7);
   nonquasi2(7,8);
   nonquasi2(8,9);
   nonquasi2(9,10);
*/

   P2 = [
     "x^3-y^2",
     "y^2-x^3-x-1",
     "y^2-x^5-x-1",
     "y^2-x^7-x-1",
     "y^2-x^9-x-1",
     "y^2-x^11-x-1"
   ];

   P3 = [
     "x^3-y^2*z^2",
     "x^2*z+y^3+y^2*z+z^3",
     "y*z^2+x^3+x^2*y^2+y^6",
     "x*z^2+x^2*y+x*y^3+y^5"
   ];


def diff_tmp(ff,xx) {
  local g;
  g = xx*ff;
  return( Replace(g,[[xx,Poly("0")],[h,Poly("1")]]));
}

def Localize3WithAsir(I,f) {
  local s;

  sm1("0 set_timer "); sm1(" oxNoX ");
  asssssir.OnTimer();
  
  RingD("x,y,z,vv");  
  /* BUG: use of RingD("x,y,z,v") causes an expected error.
    [x2,x3,x4,x4] in mygeneric_bfct.  (should be [x2,x3,x4,x5]).
  */
  f = ReParse(f);
  I = ReParse(I);
  /* Test data. */
  /*
  f = x^3-y^2*z^2;
  I = [f^2*Dx-3*x^2, f^2*Dy-2*y*z^2, f^2*Dz-2*y^2*z];

  f = x^3-y^2;
  I = [f^2*Dx-diff_tmp(f,Dx), f^2*Dy-diff_tmp(f,Dy), Dz];
  */

  r1 = Dx-vv^2*diff_tmp(f,Dx)*Dvv;
  r2 = Dy-vv^2*diff_tmp(f,Dy)*Dvv;
  r3 = Dz-vv^2*diff_tmp(f,Dz)*Dvv;
  II = ReParse(I);
  sm1(" II { [[(Dx). r1] [(Dy). r2] [(Dz). r3]] replace } map dehomogenize /II set ");

  Print("Step 1: phi(J)"); Println(II);
  II = Join(II,[vv*f-1]);
  Print("Step 2: <phi(J),vf-1>"); Println(II);

  Println("Step3: computing the integral.");
  sm1(" II  { [(x) (y) (z) (vv) (Dx) (Dy) (Dz) (Dvv)] laplace0 } map /JJ set ");
  Sweyl("x,y,z,vv",[["vv",-1,"Dvv",1]]);
  pp = Map(JJ,"Spoly");
  R = asir_BfRoots4(pp);
  Print("Roots and b-function are "); Println(R);

  R0 = R[0];
  k1 = R0[Length(R0)-1];
  sm1(" [(parse) (intw.sm1) pushfile] extension /intw.verbose 1 def ");
  sm1(" [II [(vv) (x) (y) (z)] [(vv) -1 (Dvv) 1] k1 (integer) dc] integral-k1 /Ans set ");

  Println("Timing data: sm1 "); sm1(" 1 set_timer ");
  Print("     ox_asir [CPU,GC]:  ");Println(asssssir.OffTimer());

  Print("Answer is ");Println(Ans);
  return(Ans);
}


def Ltest2() {
  RingD("x,y,z");
  f = x^3-y^2;
  I = [f^2*Dx-diff_tmp(f,Dx), f^2*Dy-diff_tmp(f,Dy), Dz];
  return( Localize3WithAsir(I,f) );
}