/* $OpenXM: OpenXM/src/k097/lib/restriction/complex.k,v 1.2 2001/01/05 11:14:29 takayama Exp $ */ /* Document of this module is at k097/Doc/complex.texi */ load["lib/restriction/restriction.k"];; def Res_solv(m,d,rng) { local r,rr,ans,ac; ac = Length(Arglist); r = GetRing(Poly("1")); /* Save the current ring. */ if (ac < 3) { rng = null; rr = GetRing(m); if (Tag(rr) == 0) rr = GetRing(d); if (Tag(rr) != 0) SetRing(rr); }else{ SetRing(rng); } m=DC(m,"polynomial"); d = DC(d,"polynomial"); if (IsRing(rng)) { sm1(" [ m d rng] res-solv /ans set "); }else{ sm1(" [ m d] res-solv /ans set "); } SetRing(r); return(ans); } /* m : D^p ---> D^q/jj, u m = d mod jj */ def Res_solv2(m,d,jj,rng) { local r,rr,ans,ac,pp,qq,kk; ac = Length(Arglist); r = GetRing(Poly("1")); /* Save the current ring. */ if (ac < 4) { rng = null; rng = GetRing(m); if (Tag(rng) == 0) rng = GetRing(d); } pp = Length(m); if (!IsArray(m[0])) { sm1(" m { [ 2 1 roll ] } map /m set "); } qq = Length(m[0]); if (Length(jj) > 0) { if (!IsArray(jj[0])) { sm1(" jj { [ 2 1 roll ] } map /jj set "); } if (qq != Length(jj[0])) { Error(" Matrix size mismatch in m and jj of Kernel2(m,jj,r)."); } } m = Join(m,jj); ans = Res_solv(m,d,rng); /* Println(ans); */ SetRing(r); return([Firstn(ans[0],pp),ans[1]]); } /* Res_solv2([x,y],[x^2+y^2],[x]):*/ def Res_solv_h(m,d,rng) { local r,rr,ans,ac; ac = Length(Arglist); r = GetRing(Poly("1")); /* Save the current ring. */ if (ac < 3) { rng = null; rr = GetRing(m); if (Tag(rr) == 0) rr = GetRing(d); if (Tag(rr) != 0) SetRing(rr); }else{ SetRing(rng); } m=DC(m,"polynomial"); d = DC(d,"polynomial"); if (IsRing(rng)) { sm1(" [ m d rng] res-solv-h /ans set "); }else{ sm1(" [ m d] res-solv-h /ans set "); } SetRing(r); return(ans); } /* m : D^p ---> D^q/jj, u m = d mod jj */ def Res_solv2_h(m,d,jj,rng) { local r,rr,ans,ac,pp,qq,kk; ac = Length(Arglist); r = GetRing(Poly("1")); /* Save the current ring. */ if (ac < 4) { rng = null; rng = GetRing(m); if (Tag(rng) == 0) rng = GetRing(d); } pp = Length(m); if (!IsArray(m[0])) { sm1(" m { [ 2 1 roll ] } map /m set "); } qq = Length(m[0]); if (Length(jj) > 0) { if (!IsArray(jj[0])) { sm1(" jj { [ 2 1 roll ] } map /jj set "); } if (qq != Length(jj[0])) { Error(" Matrix size mismatch in m and jj of Kernel2(m,jj,r)."); } } m = Join(m,jj); ans = Res_solv_h(m,d,rng); /* Println(ans); */ SetRing(r); return([Firstn(ans[0],pp),ans[1]]); } /* Res_solv2_h([x,y],[x^2+y^2],[x]):*/ def Getxvars() { local v,n,i,ans,ans2; sm1(" getvNames /v set "); sm1(" [(NN)] system_variable (universalNumber) dc /n set "); ans = []; for (i=1; i D^q/jj) */ def Kernel2(m,jj,r) { local crng,ac,pp,qq,kk; ac = Length(Arglist); crng = GetRing(Poly("1")); if (ac < 3) { r = GetRing(m); } pp = Length(m); if (!IsArray(m[0])) { sm1(" m { [ 2 1 roll ] } map /m set "); } qq = Length(m[0]); if (Length(jj) > 0) { if (!IsArray(jj[0])) { sm1(" jj { [ 2 1 roll ] } map /jj set "); } if (qq != Length(jj[0])) { Error(" Matrix size mismatch in m and jj of Kernel2(m,jj,r)."); } } m = Join(m,jj); kk = Kernel(m,r); SetRing(crng); return(Firstn(kk[0],pp)); } /* Kernel of (D^p --- m ---> D^q/jj) */ def Kernel2_h(m,jj,r) { local crng,ac,pp,qq,kk; ac = Length(Arglist); crng = GetRing(Poly("1")); if (ac < 3) { r = GetRing(m); } pp = Length(m); if (!IsArray(m[0])) { sm1(" m { [ 2 1 roll ] } map /m set "); } qq = Length(m[0]); if (Length(jj) > 0) { if (!IsArray(jj[0])) { sm1(" jj { [ 2 1 roll ] } map /jj set "); } if (qq != Length(jj[0])) { Error(" Matrix size mismatch in m and jj of Kernel2(m,jj,r)."); } } m = Join(m,jj); kk = Kernel_h(m,r); SetRing(crng); return(Firstn(kk[0],pp)); } /* From lib/minimal/minimal.k */ def Gb(m,rng) { local r,rr,ans,ac; ac = Length(Arglist); r = GetRing(Poly("1")); /* Save the current ring. */ if (ac < 2) { rng = null; rr = GetRing(m); if (Tag(rr) != 0) SetRing(rr); }else{ rr = rng; SetRing(rr); } /* m=DC(m,"polynomial"); */ m = ReParse(m); sm1(" [m rr] gb /ans set "); SetRing(r); return(ans); } def Gb_h(m,rng) { local r,rr,ans,ac; ac = Length(Arglist); r = GetRing(Poly("1")); /* Save the current ring. */ if (ac < 2) { rng = null; rr = GetRing(m); if (Tag(rr) != 0) SetRing(rr); }else{ rr = rng; SetRing(rr); } /* m=DC(m,"polynomial"); */ m = ReParse(m); sm1(" [m rr] gb_h /ans set "); SetRing(r); return(ans); } def Res_shiftMatrix(m,v,rng) { local n,ans,r,ac,i,j,b1,b2; sm1(" 40 (string) dc /b1 set "); sm1(" 41 (string) dc /b2 set "); ac = Length(Arglist); r = GetRing(Poly("1")); /* Save the current ring. */ if (ac < 3) { }else{ SetRing(rng); } n = Length(m); ans = NewVector(n); for (i=0; i