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/ |