The function betti creates and displays the Betti diagram of mathematical objects that can be presented using graded free modules and graded maps between them, such as ideals, modules, and chain complexes. The returned BettiTally encapsulates the data from the entries of the displayed Betti diagram, in case they are needed in a program.
i1 : S = QQ[x,y,z,w]; |
i2 : I = monomialCurveIdeal(S, {1,2,3}) 2 2 o2 = ideal (z - y*w, y*z - x*w, y - x*z) o2 : Ideal of S |
i3 : t = betti res I 0 1 2 o3 = total: 1 3 2 0: 1 . . 1: . 3 2 o3 : BettiTally |
i4 : peek oo o4 = BettiTally{(0, {0}, 0) => 1} (1, {2}, 2) => 3 (2, {3}, 3) => 2 |
i5 : t#(1, {2}, 2) o5 = 3 |
The keys are triples (i,d,h) encoding:
Only i and h are used in printing, and the weight covector can be modified by specifying the betti(...,Weights=>...) option. The heft vector of the ring of the input object is the default choice for the weight covector.
i6 : R = QQ[a,b,c, Degrees => {-1,-2,-3}]; |
i7 : heft R o7 = {-1} o7 : List |
i8 : betti koszul vars R 0 1 2 3 o8 = total: 1 3 3 1 0: 1 1 . . 1: . 1 1 . 2: . 1 1 . 3: . . 1 1 o8 : BettiTally |
If the ring has no heft vector, then the weights vector is taken to be all zero. If the option betti(...,Weights=>...) is provided, the length of the given weight vector should be the same as the degree length of the ring of the input object.
i9 : betti(oo, Weights => {1}) 0 1 2 3 o9 = total: 1 3 3 1 -9: . . . 1 -8: . . . . -7: . . 1 . -6: . . 1 . -5: . . 1 . -4: . 1 . . -3: . 1 . . -2: . 1 . . -1: . . . . 0: 1 . . . o9 : BettiTally |
If the ring is multigraded, the function multigraded(BettiTally) may be used to extract information from all degree components of the Betti diagram at once.
i10 : R = QQ[a,b,c,d, Degrees => {{1,0},{2,1},{0,1},{-2,1}}]; |
i11 : heft R o11 = {1, 3} o11 : List |
i12 : b = betti res coker vars R 0 1 2 3 4 o12 = total: 1 4 6 4 1 0: 1 2 1 . . 1: . . . . . 2: . 1 2 1 . 3: . . . . . 4: . 1 2 1 . 5: . . . . . 6: . . 1 2 1 o12 : BettiTally |
i13 : betti(b, Weights => {1,0}) 0 1 2 3 4 o13 = total: 1 4 6 4 1 -4: . . 1 1 . -3: . 1 1 1 1 -2: . . 1 1 . -1: . 1 1 . . 0: 1 1 1 1 . 1: . 1 1 . . o13 : BettiTally |
i14 : betti(b, Weights => {0,1}) 0 1 2 3 4 o14 = total: 1 4 6 4 1 -1: . 1 3 3 1 0: 1 3 3 1 . o14 : BettiTally |
i15 : multigraded b 0 1 2 3 4 o15 = 0: 1 . . . . 1: . a+a^(-2)b . . . 2: . . a^(-1)b . . 3: . b . . . 4: . . ab+a^(-2)b2 . . 5: . a2b . a^(-1)b2 . 6: . . a3b+b2 . . 7: . . . ab2 . 8: . . a2b2 . . 9: . . . a3b2+b3 . 10: . . . . ab3 o15 : MultigradedBettiTally |
i16 : S = ZZ/10007[x,y]; |
i17 : G = gb ideal(x^3+y^3, x*y^4); |
i18 : gens G o18 = | x3+y3 xy4 y7 | 1 3 o18 : Matrix S <--- S |
i19 : betti G 0 1 o19 = total: 1 3 0: 1 . 1: . . 2: . 1 3: . . 4: . 1 5: . . 6: . 1 o19 : BettiTally |
The diagram ignores the degree of the map itself.
i20 : S = ZZ/10007[x,y]; |
i21 : betti matrix {{x^3, x*y^2}, {y*x, y^2}} 0 1 o21 = total: 2 2 0: 2 . 1: . . 2: . 2 o21 : BettiTally |
Note that the Betti numbers are not minimized.
i22 : S = ZZ/10007[x,y]; |
i23 : betti coker matrix{{x^3, x*y^2}, {y*x^2, y^3}} 0 1 o23 = total: 2 2 0: 2 . 1: . . 2: . 2 o23 : BettiTally |
i24 : betti coker map(S^{0,-1}, , matrix{{x^2, y}, {y^3, x^2}}) 0 1 o24 = total: 2 2 0: 1 . 1: 1 . 2: . 1 3: . 1 o24 : BettiTally |
Note that the Betti numbers are not minimized.
i25 : S = ZZ/10007[x,y]; |
i26 : I = ideal(x,x^2,y^3); o26 : Ideal of S |
i27 : betti I 0 1 o27 = total: 1 3 0: 1 1 1: . 1 2: . 1 o27 : BettiTally |
i28 : betti comodule I 0 1 o28 = total: 1 3 0: 1 1 1: . 1 2: . 1 o28 : BettiTally |
The diagram can be used to determine the degrees of the entries in the matrices of the differentials in a chain complex (which is a type of graded module) provided they are homogeneous maps of degree 0.
i29 : R = ZZ/101[a..h] o29 = R o29 : PolynomialRing |
i30 : p = genericMatrix(R,a,2,4) o30 = | a c e g | | b d f h | 2 4 o30 : Matrix R <--- R |
i31 : q = generators gb p o31 = | g e c a 0 0 0 0 0 0 | | h f d b fg-eh dg-ch bg-ah de-cf be-af bc-ad | 2 10 o31 : Matrix R <--- R |
i32 : C = resolution cokernel leadTerm q 2 10 14 7 1 o32 = R <-- R <-- R <-- R <-- R <-- 0 0 1 2 3 4 5 o32 : ChainComplex |
i33 : betti C 0 1 2 3 4 o33 = total: 2 10 14 7 1 0: 2 4 6 4 1 1: . 6 8 3 . o33 : BettiTally |
Column j of the top row of the diagram gives the rank of the free module C_j. The entry in column j in the row labelled i is the number of basis elements of (weighted) degree i+j in the free module C_j. When the chain complex is the resolution of a module the entries are the total and the graded Betti numbers of the module.
The object betti is a method function with options.