Singular
https://www.singular.uni-kl.de/forum/

How to calculate Syz for module
https://www.singular.uni-kl.de/forum/viewtopic.php?f=10&t=2258
Page 1 of 1

Author:  SyzBoy [ Wed Jun 12, 2013 12:00 pm ]
Post subject:  How to calculate Syz for module

if not using syz function, how to write command to calculate it fundamentally

below is maple code
Code:
restart;
with(Groebner):

IsNullZero := proc(tau)
if assigned(tau) then
   return tau
else
   return 0
end if
end proc;

DoExist := proc(tau, n)
if rtable_num_elems(tau) >= n then
   return tau[n];
else
   return 0;
end if;
end proc;

LeadingTermVector := proc(a,b)
result := a;
for i from 1 to rtable_num_elems(a) do
   result[i] = `*`(LeadingTerm(a[i], b));
od;
return result;
end proc;

LCMVector := proc(a,b)
result := a;
for i from 1 to rtable_num_elems(a) do
   result[i] = lcm(a[i], b[i]);
od;
return result;
end proc;

SPolynomialVector := proc(a, b, c)
result := a;
for i from 1 to rtable_num_elems(a) do
   result[i] = SPolynomial(a[i], b[i], c);
od;
return result;
end proc;

DivideVector := proc(a, b)
result8 := a;
for i from 1 to rtable_num_elems(a) do
   if a[i] = 0 then
      result8[i] = 0;
   else
      result8[i] = a[i]/b[i];
   end if;
od;
return result8;
end proc;

BasisVector := proc(a, b)
result6 := 0;
for i from 1 to rtable_num_elems(a) do
   result6[i] := 0;   
od;
for i from 1 to rtable_num_elems(a) do
   result6[i] := Basis(convert(a(i, 1 .. -1),list), b);
od;
return result6;
end proc;

NormalFormVector := proc(a, b, c, d)
for i from 1 to rtable_num_elems(b) do
   NormalForm(a[i], b[i], c, d);
od;
end proc;


g1 := y;
g2 := y^2-x-y;
g3 := x+y;
g4 := -y;
g5 := x*y+x/2+y/2;
g6 := x^2-x/4-y/4;

m1 := Vector([0, y, x]);
m2 := Vector([0, y^2-x-y, 0]);
m3 := Vector([x, x+y, 0]);
m4 := Vector([y, -y, 0]);
m5 := Vector([0, x*y+x/2+y/2, 0]);
m6 := Vector([0, x^2-x/4-y/4, 0]);

k1 := [0,0,x,y,0,0];

X1 := `*`(LeadingTermVector(g1, tdeg(x, y)));
X2 := `*`(LeadingTermVector(g2, tdeg(x, y)));
X3 := `*`(LeadingTermVector(g3, tdeg(x, y)));
X4 := `*`(LeadingTermVector(g4, tdeg(x, y)));
X5 := `*`(LeadingTermVector(g5, tdeg(x, y)));
X6 := `*`(LeadingTermVector(g6, tdeg(x, y)));

#X1 := `*`(LeadingTerm(g1, tdeg(x, y)));
#X2 := `*`(LeadingTerm(g2, tdeg(x, y)));
#X3 := `*`(LeadingTerm(g3, tdeg(x, y)));
#X4 := `*`(LeadingTerm(g4, tdeg(x, y)));
#X5 := `*`(LeadingTerm(g5, tdeg(x, y)));
#X6 := `*`(LeadingTerm(g6, tdeg(x, y)));

X12 := LCMVector(X1,X2);
X13 := LCMVector(X1,X3);
X14 := LCMVector(X1,X4);
X15 := LCMVector(X1,X5);
X16 := LCMVector(X1,X6);
X23 := LCMVector(X2,X3);
X24 := LCMVector(X2,X4);
X25 := LCMVector(X2,X5);
X26 := LCMVector(X2,X6);
X34 := LCMVector(X3,X4);
X35 := LCMVector(X3,X5);
X36 := LCMVector(X3,X6);
X45 := LCMVector(X4,X5);
X46 := LCMVector(X4,X6);
X56 := LCMVector(X5,X6);

#X12 := lcm(X1,X2);
#X13 := lcm(X1,X3);
#X14 := lcm(X1,X4);
#X15 := lcm(X1,X5);
#X16 := lcm(X1,X6);
#X23 := lcm(X2,X3);
#X24 := lcm(X2,X4);
#X25 := lcm(X2,X5);
#X26 := lcm(X2,X6);
#X34 := lcm(X3,X4);
#X35 := lcm(X3,X5);
#X36 := lcm(X3,X6);
#X45 := lcm(X4,X5);
#X46 := lcm(X4,X6);
#X56 := lcm(X5,X6);

S12 := SPolynomialVector(g1, g2, lexdeg([x, y]));
S13 := SPolynomialVector(g1, g3, lexdeg([x, y]));
S14 := SPolynomialVector(g1, g4, lexdeg([x, y]));
S15 := SPolynomialVector(g1, g5, lexdeg([x, y]));
S16 := SPolynomialVector(g1, g6, lexdeg([x, y]));
S23 := SPolynomialVector(g2, g3, lexdeg([x, y]));
S24 := SPolynomialVector(g2, g4, lexdeg([x, y]));
S25 := SPolynomialVector(g2, g5, lexdeg([x, y]));
S26 := SPolynomialVector(g2, g6, lexdeg([x, y]));
S34 := SPolynomialVector(g3, g4, lexdeg([x, y]));
S35 := SPolynomialVector(g3, g5, lexdeg([x, y]));
S36 := SPolynomialVector(g3, g6, lexdeg([x, y]));
S45 := SPolynomialVector(g4, g5, lexdeg([x, y]));
S46 := SPolynomialVector(g4, g6, lexdeg([x, y]));
S56 := SPolynomialVector(g5, g6, lexdeg([x, y]));

e1 := Vector([1,0,0,0,0,0]);
e2 := Vector([0,1,0,0,0,0]);
e3 := Vector([0,0,1,0,0,0]);
e4 := Vector([0,0,0,1,0,0]);
e5 := Vector([0,0,0,0,1,0]);
e6 := Vector([0,0,0,0,0,1]);

Author:  malex [ Mon Jun 17, 2013 8:57 am ]
Post subject:  Re: How to calculate Syz for module

just add a unit matrix to your input module for bookkeeping and choose a module ordering in such a way that the original module monomials are bigger than any monomial involving new bookkeeping components. after computing a GB - vectors with bookkeeping data only will be syzygies:

Code:
> ring R = 0,(x,y), (c,dp);
> gen(2) < gen(1);
1
> gen(3) < gen(1);
1
> module M = [x, 1, 0] , [y, 0, 1];
> std(M);
_[1]=[0,y,-x] // <--  syz(x, y)
_[2]=[y,0,1]
_[3]=[x,1]


hope this helps.
Oleksandr.

Page 1 of 1 All times are UTC + 1 hour [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/