version 1.1, 2000/05/03 06:42:07 |
version 1.4, 2000/05/04 11:05:20 |
|
|
/* $OpenXM$ */ |
/* $OpenXM: OpenXM/src/k097/lib/minimal/minimal.k,v 1.3 2000/05/04 06:55:28 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), |
|
make a symbolic link by the command |
|
ln -s /usr/bin/cpp /lib/cpp |
|
*/ |
/* Test sequences. |
/* Test sequences. |
Use load["minimal.k"];; |
Use load["minimal.k"];; |
|
|
Line 367 def SnewArrayOfFormat(p) { |
|
Line 371 def SnewArrayOfFormat(p) { |
|
return(null); |
return(null); |
} |
} |
} |
} |
|
def ScopyArray(a) { |
|
local n, i,ans; |
|
n = Length(a); |
|
ans = NewArray(n); |
|
for (i=0; i<n; i++) { |
|
ans[i] = a[i]; |
|
} |
|
return(ans); |
|
} |
def SminOfStrategy(a) { |
def SminOfStrategy(a) { |
local n,i,ans,tt; |
local n,i,ans,tt; |
ans = 100000; /* very big number */ |
ans = 100000; /* very big number */ |
Line 409 def SlaScala(g) { |
|
Line 422 def SlaScala(g) { |
|
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, |
redundantTable_ordinary, redundant_seq_ordinary; |
redundantTable_ordinary, redundant_seq_ordinary, |
|
reductionTable_tmp; |
/* extern WeightOfSweyl; */ |
/* extern WeightOfSweyl; */ |
ww = WeightOfSweyl; |
ww = WeightOfSweyl; |
Print("WeghtOfSweyl="); Println(WeightOfSweyl); |
Print("WeghtOfSweyl="); Println(WeightOfSweyl); |
Line 430 def SlaScala(g) { |
|
Line 444 def SlaScala(g) { |
|
while (strategy <= maxOfStrategy) { |
while (strategy <= maxOfStrategy) { |
for (level = 0; level < height; level++) { |
for (level = 0; level < height; level++) { |
n = Length(reductionTable[level]); |
n = Length(reductionTable[level]); |
for (i=0; i<n; i++) { |
reductionTable_tmp = ScopyArray(reductionTable[level]); |
|
while (SthereIs(reductionTable_tmp,strategy)) { |
|
i = SnextI(reductionTable_tmp,strategy,redundantTable, |
|
skel,level,freeRes); |
|
Println([level,i]); |
|
reductionTable_tmp[i] = -200000; |
if (reductionTable[level,i] == strategy) { |
if (reductionTable[level,i] == strategy) { |
Print("Processing "); Print([level,i]); |
Print("Processing "); Print([level,i]); |
Print(" Strategy = "); Println(strategy); |
Print(" Strategy = "); Println(strategy); |
Line 503 def SlaScala(g) { |
|
Line 522 def SlaScala(g) { |
|
return([freeResV, redundantTable,reducer,bettiTable,redundantTable_ordinary]); |
return([freeResV, redundantTable,reducer,bettiTable,redundantTable_ordinary]); |
} |
} |
|
|
|
def SthereIs(reductionTable_tmp,strategy) { |
|
local n,i; |
|
n = Length(reductionTable_tmp); |
|
for (i=0; i<n; i++) { |
|
if (reductionTable_tmp[i] == strategy) { |
|
return(true); |
|
} |
|
} |
|
return(false); |
|
} |
|
|
|
def SnextI(reductionTable_tmp,strategy,redundantTable, |
|
skel,level,freeRes) |
|
{ |
|
local ii,n,p,myindex,i,j,bases; |
|
n = Length(reductionTable_tmp); |
|
if (level == 0) { |
|
for (ii=0; ii<n; ii++) { |
|
if (reductionTable_tmp[ii] == strategy) { |
|
return(ii); |
|
} |
|
} |
|
}else{ |
|
for (ii=0; ii<n; ii++) { |
|
if (reductionTable_tmp[ii] == strategy) { |
|
p = skel[level,ii]; |
|
myindex = p[0]; |
|
i = myindex[0]; j = myindex[1]; |
|
bases = freeRes[level-1]; |
|
if (IsNull(bases[i]) || IsNull(bases[j])) { |
|
|
|
}else{ |
|
return(ii); |
|
} |
|
} |
|
} |
|
} |
|
Println(reductionTable_tmp); |
|
Error("SnextI: bases[i] or bases[j] is null for all combinations."); |
|
} |
|
|
|
|
|
|
def SsetBettiTable(freeRes,g) { |
def SsetBettiTable(freeRes,g) { |
local level,i, n,bases,ans; |
local level,i, n,bases,ans; |
ans = NewArray(Length(freeRes)+1); |
ans = NewArray(Length(freeRes)+1); |
Line 638 def SpairAndReduction(skel,level,ii,freeRes,tower,ww) |
|
Line 700 def SpairAndReduction(skel,level,ii,freeRes,tower,ww) |
|
|
|
Print("result is "); Println(tmp); |
Print("result is "); Println(tmp); |
|
|
vdeg = SvDegree(si*gi+sj*gj,tower,level-1,ww); |
/* This is essential part for V-minimal resolution. */ |
|
/* vdeg = SvDegree(si*gi+sj*gj,tower,level-1,ww); */ |
|
vdeg = SvDegree(si*gi,tower,level-1,ww); |
vdeg_reduced = SvDegree(tmp[0],tower,level-1,ww); |
vdeg_reduced = SvDegree(tmp[0],tower,level-1,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); |
Line 823 def Sminimal(g) { |
|
Line 887 def Sminimal(g) { |
|
} |
} |
} |
} |
return([Stetris(minRes,redundantTable), |
return([Stetris(minRes,redundantTable), |
[ minRes, redundantTable, reducer,r[3],r[4]]]); |
[ 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 */ |
} |
} |
|
|
|
|
Line 933 In(20)=SvDegree(x,tt,2,ww): |
|
Line 998 In(20)=SvDegree(x,tt,2,ww): |
|
def SvDegree(f,tower,level,w) { |
def SvDegree(f,tower,level,w) { |
local i,ans; |
local i,ans; |
if (IsZero(f)) return(null); |
if (IsZero(f)) return(null); |
|
f = Init(f); |
if (level <= 0) { |
if (level <= 0) { |
return(Sord_w(f,w)); |
return(Sord_w(f,w)); |
} |
} |
Line 942 def SvDegree(f,tower,level,w) { |
|
Line 1008 def SvDegree(f,tower,level,w) { |
|
return(ans); |
return(ans); |
} |
} |
|
|
|
def Sannfs(f,v) { |
|
local f2; |
|
f2 = ToString(f); |
|
if (IsArray(v)) { |
|
v = Map(v,"ToString"); |
|
} |
|
sm1(" [f2 v] annfs /FunctionValue set "); |
|
} |
|
|
|
/* Sannfs2("x^3-y^2"); */ |
|
def Sannfs2(f) { |
|
local p,pp; |
|
p = Sannfs(f,"x,y"); |
|
Sweyl("x,y",[["x",-1,"y",-1,"Dx",1,"Dy",1]]); |
|
pp = Map(p[0],"Spoly"); |
|
return(Sminimal(pp)); |
|
} |
|
|
|
def Sannfs3(f) { |
|
local p,pp; |
|
p = Sannfs(f,"x,y,z"); |
|
Sweyl("x,y,z",[["x",-1,"y",-1,"z",-1,"Dx",1,"Dy",1,"Dz",1]]); |
|
pp = Map(p[0],"Spoly"); |
|
return(Sminimal(pp)); |
|
} |
|
|
|
/* |
|
The betti numbers of most examples are 2,1. (0-th and 1-th). |
|
a=Sannfs2("x*y*(x+y-1)"); ==> The betti numbers are 3, 2. |
|
a=Sannfs2("x^3-y^2-x"); : it causes an error. It should be fixed. |
|
a=Sannfs2("x*y*(x-y)"); : it causes an error. It should be fixed. |
|
|
|
*/ |
|
|
|
|