Graded free resolutions¶
Let free resolution
such that all maps are homogeneous module homomorphisms.
EXAMPLES:
sage: S.<x,y,z,w> = PolynomialRing(QQ)
sage: I = S.ideal([y*w - z^2, -x*w + y*z, x*z - y^2])
sage: r = I.graded_free_resolution(algorithm='minimal')
sage: r
S(0) <-- S(-2)⊕S(-2)⊕S(-2) <-- S(-3)⊕S(-3) <-- 0
sage: I.graded_free_resolution(algorithm='shreyer')
S(0) <-- S(-2)⊕S(-2)⊕S(-2) <-- S(-3)⊕S(-3) <-- 0
sage: I.graded_free_resolution(algorithm='standard')
S(0) <-- S(-2)⊕S(-2)⊕S(-2) <-- S(-3)⊕S(-3) <-- 0
sage: I.graded_free_resolution(algorithm='heuristic')
S(0) <-- S(-2)⊕S(-2)⊕S(-2) <-- S(-3)⊕S(-3) <-- 0
sage: d = r.differential(2)
sage: d
Free module morphism defined as left-multiplication by the matrix
[ y x]
[-z -y]
[ w z]
Domain: Ambient free module of rank 2 over the integral domain
Multivariate Polynomial Ring in x, y, z, w over Rational Field
Codomain: Ambient free module of rank 3 over the integral domain
Multivariate Polynomial Ring in x, y, z, w over Rational Field
sage: d.image()
Submodule of Ambient free module of rank 3 over the integral domain
Multivariate Polynomial Ring in x, y, z, w over Rational Field
Generated by the rows of the matrix:
[ y -z w]
[ x -y z]
sage: m = d.image()
sage: m.graded_free_resolution(shifts=(2,2,2))
S(-2)⊕S(-2)⊕S(-2) <-- S(-3)⊕S(-3) <-- 0
An example of multigraded resolution from Example 9.1 of [MilStu2005]:
sage: R.<s,t> = QQ[]
sage: S.<a,b,c,d> = QQ[]
sage: phi = S.hom([s, s*t, s*t^2, s*t^3])
sage: I = phi.kernel(); I # needs sage.rings.function_field
Ideal (c^2 - b*d, b*c - a*d, b^2 - a*c) of
Multivariate Polynomial Ring in a, b, c, d over Rational Field
sage: P3 = ProjectiveSpace(S)
sage: C = P3.subscheme(I) # twisted cubic curve
sage: r = I.graded_free_resolution(degrees=[(1,0), (1,1), (1,2), (1,3)])
sage: r
S((0, 0)) <-- S((-2, -4))⊕S((-2, -3))⊕S((-2, -2)) <-- S((-3, -5))⊕S((-3, -4)) <-- 0
sage: r.K_polynomial(names='s,t')
s^3*t^5 + s^3*t^4 - s^2*t^4 - s^2*t^3 - s^2*t^2 + 1
AUTHORS:
Kwankyu Lee (2022-05): initial version
Travis Scrimshaw (2022-08-23): refactored for free module inputs
- class sage.homology.graded_resolution.GradedFiniteFreeResolution(module, degrees=None, shifts=None, name='S', **kwds)[source]¶
Bases:
FiniteFreeResolutionGraded finite free resolutions.
INPUT:
module– a homogeneous submodule of a free module of rank over or a homogeneous ideal of a multivariate polynomial ringdegrees– (default: a list with all entries ) a list of integers or integer vectors giving degrees of variables ofshifts– list of integers or integer vectors giving shifts of degrees of summands of the free module ; this is a list of zero degrees of length by defaultname– string; name of the base ring
- K_polynomial(names=None)[source]¶
Return the K-polynomial of this resolution.
INPUT:
names– (optional) a string of names of the variables of the K-polynomial
EXAMPLES:
sage: S.<x,y,z,w> = PolynomialRing(QQ) sage: I = S.ideal([y*w - z^2, -x*w + y*z, x*z - y^2]) sage: r = I.graded_free_resolution() sage: r.K_polynomial() 2*t^3 - 3*t^2 + 1
- betti(i, a=None)[source]¶
Return the
-th Betti number in degree .INPUT:
i– nonnegative integera– a degree; ifNone, return Betti numbers in all degrees
EXAMPLES:
sage: S.<x,y,z,w> = PolynomialRing(QQ) sage: I = S.ideal([y*w - z^2, -x*w + y*z, x*z - y^2]) sage: r = I.graded_free_resolution() sage: r.betti(0) {0: 1} sage: r.betti(1) {2: 3} sage: r.betti(2) {3: 2} sage: r.betti(1, 0) 0 sage: r.betti(1, 1) 0 sage: r.betti(1, 2) 3
- class sage.homology.graded_resolution.GradedFiniteFreeResolution_free_module(module, degrees=None, *args, **kwds)[source]¶
Bases:
GradedFiniteFreeResolution,FiniteFreeResolution_free_moduleGraded free resolution of free modules.
EXAMPLES:
sage: from sage.homology.free_resolution import FreeResolution sage: R.<x> = QQ[] sage: M = matrix([[x^3, 3*x^3, 5*x^3], ....: [0, x, 2*x]]) sage: res = FreeResolution(M, graded=True); res S(0)⊕S(0)⊕S(0) <-- S(-3)⊕S(-1) <-- 0
- class sage.homology.graded_resolution.GradedFiniteFreeResolution_singular(module, degrees=None, shifts=None, name='S', algorithm='heuristic', **kwds)[source]¶
Bases:
GradedFiniteFreeResolution,FiniteFreeResolution_singularGraded free resolutions of submodules and ideals of multivariate polynomial rings implemented using Singular.
INPUT:
module– a homogeneous submodule of a free module of rank over or a homogeneous ideal of a multivariate polynomial ringdegrees– (default: a list with all entries ) a list of integers or integer vectors giving degrees of variables ofshifts– list of integers or integer vectors giving shifts of degrees of summands of the free module ; this is a list of zero degrees of length by defaultname– string; name of the base ringalgorithm– Singular algorithm to compute a resolution ofideal
OUTPUT: a graded minimal free resolution of
idealIf
moduleis an ideal of , it is considered as a submodule of a free module of rank over .The degrees given to the variables of
are integers or integer vectors of the same length. In the latter case, is said to be multigraded, and the resolution is a multigraded free resolution. The standard grading where all variables have degree is used if the degrees are not specified.A summand of the graded free module
is a shifted (or twisted) module of rank one over , denoted with shift .The computation of the resolution is done by using
libSingular. Different Singular algorithms can be chosen for best performance. The available algorithms and the corresponding Singular commands are shown below:algorithm
Singular commands
minimalmres(ideal)shreyerminres(sres(std(ideal)))standardminres(nres(std(ideal)))heuristicminres(res(std(ideal)))EXAMPLES:
sage: S.<x,y,z,w> = PolynomialRing(QQ) sage: I = S.ideal([y*w - z^2, -x*w + y*z, x*z - y^2]) sage: r = I.graded_free_resolution(); r S(0) <-- S(-2)⊕S(-2)⊕S(-2) <-- S(-3)⊕S(-3) <-- 0 sage: len(r) 2 sage: I = S.ideal([z^2 - y*w, y*z - x*w, y - x]) sage: I.is_homogeneous() True sage: r = I.graded_free_resolution(); r S(0) <-- S(-1)⊕S(-2)⊕S(-2) <-- S(-3)⊕S(-3)⊕S(-4) <-- S(-5) <-- 0