# truncate -- truncation of the graded ring, ideal or module at a specified degree or set of degrees

## Synopsis

• Usage:
truncate(d,M)
• Inputs:
• d, an integer, or a single multi-degree or a list of multi-degrees
• M, , or a ring or an ideal
• Outputs:
• , or ideal, the submodule of M consisting of all elements of (component-wise) degree ≥i

## Description

The truncation to degree d in the singly graded case of a module (or ring or ideal) is generated by all homogeneous elements of degree at least d in M. The resulting truncation is minimally generated (assuming that M is graded).

 `i1 : R = ZZ/101[a..c];` ```i2 : truncate(2, R) 2 2 2 o2 = ideal (c , b*c, a*c, b , a*b, a ) o2 : Ideal of R``` ```i3 : truncate(2,R^1) o3 = image | c2 bc ac b2 ab a2 | 1 o3 : R-module, submodule of R``` ```i4 : truncate(2,R^1 ++ R^{-3}) o4 = image {0} | c2 bc ac b2 ab a2 0 | {3} | 0 0 0 0 0 0 1 | 2 o4 : R-module, submodule of R``` ```i5 : truncate(2, ideal(a,b,c^3)/ideal(a^2,b^2,c^4)) o5 = subquotient (| bc ac ab c3 |, | b2 a2 c4 |) 1 o5 : R-module, subquotient of R``` ```i6 : truncate(2,ideal(a,b*c,c^7)) 2 7 o6 = ideal (b*c, a*c, a*b, a , c ) o6 : Ideal of R``` ```i7 : M = coker matrix"a,b,c;c,b,a" o7 = cokernel | a b c | | c b a | 2 o7 : R-module, quotient of R``` ```i8 : truncate(2, M) o8 = subquotient (| c2 bc b2 0 |, | a b c |) | 0 0 0 c2 | | c b a | 2 o8 : R-module, subquotient of R``` ```i9 : M/(truncate(2,M)) o9 = cokernel | c2 bc b2 0 a b c | | 0 0 0 c2 c b a | 2 o9 : R-module, quotient of R``` ```i10 : for i from 0 to 5 list hilbertFunction(i,oo) o10 = {2, 3, 0, 0, 0, 0} o10 : List```

The base may be ZZ, or another polynomial ring. Over ZZ, the generators may not be minimal, but they do generate.

 `i11 : A = ZZ[x,y,z];` ```i12 : truncate(2,ideal(3*x,5*y,15)) 2 2 2 o12 = ideal (15z , 5y*z, 3x*z, 5y , x*y, 3x ) o12 : Ideal of A``` ```i13 : trim oo 2 2 2 o13 = ideal (15z , 5y*z, 3x*z, 5y , x*y, 3x ) o13 : Ideal of A``` ```i14 : truncate(2,comodule ideal(3*x,5*y,15)) o14 = subquotient (| z2 yz xz y2 x2 |, | 15 5y 3x xy |) 1 o14 : A-module, subquotient of A```

If i is a multi-degree, then the result is the submodule generated by all elements of degree (component-wise) greater than or equal to i.

The following example finds the 11 generators needed to obtain all graded elements whose degrees are component-wise at least {7,24}.

 `i15 : S = ZZ/101[x,y,z,Degrees=>{{1,3},{1,4},{1,0}}];` ```i16 : trunc = truncate({7,24}, S^1 ++ S^{{-8,-20}}) o16 = image {0, 0} | y6z y7 xy6 x2y5 x3y4 x4y3 x6y2 x7y x8 0 0 | {8, 20} | 0 0 0 0 0 0 0 0 0 y x2 | 2 o16 : S-module, submodule of S``` ```i17 : degrees trunc o17 = {{7, 24}, {7, 28}, {7, 27}, {7, 26}, {7, 25}, {7, 24}, {8, 26}, {8, ----------------------------------------------------------------------- 25}, {8, 24}, {9, 24}, {10, 26}} o17 : List```

If i is a list of multi-degrees, then the result is the submodule generated by all elements of degree (component-wise) greater than or equal to at least one degree in i.

The following example finds the generators needed to obtain all graded elements whose degrees which are component-wise at least {3,0} or at least {0,1}. The resulting module is also minimally generated.

 `i18 : S = ZZ/101[x,y,z,Degrees=>{{1,3},{1,4},{1,0}}];` ```i19 : trunc = truncate({{3,0},{0,1}}, S^1 ++ S^{{-8,-20}}) o19 = image {0, 0} | y x z3 0 | {8, 20} | 0 0 0 1 | 2 o19 : S-module, submodule of S``` ```i20 : degrees trunc o20 = {{1, 4}, {1, 3}, {3, 0}, {8, 20}} o20 : List```

The coefficient ring may also be a polynomial ring. In this example, the coefficient variables also have degree one. The given generators will generate the truncation over the coefficient ring.

 ```i21 : B = R[x,y,z, Join=>false] o21 = B o21 : PolynomialRing``` ```i22 : degree x o22 = {1} o22 : List``` ```i23 : degree B_3 o23 = {1} o23 : List``` ```i24 : truncate(2, B^1) o24 = image | c2 bc ac b2 ab a2 cz bz az cy by ay cx bx ax z2 yz xz y2 xy x2 | 1 o24 : B-module, submodule of B``` ```i25 : truncate(4, ideal(b^2*y,x^3)) 2 3 2 2 2 2 2 3 3 3 3 o25 = ideal (b c*y, b y, a*b y, b y*z, b y , b x*y, c*x , b*x , a*x , x z, ----------------------------------------------------------------------- 3 4 x y, x ) o25 : Ideal of B```

If the coefficient variables have degree 0:

 ```i26 : A1 = ZZ/101[a,b,c,Degrees=>{3:{}}] o26 = A1 o26 : PolynomialRing``` ```i27 : degree a o27 = {} o27 : List``` ```i28 : B1 = A1[x,y] o28 = B1 o28 : PolynomialRing``` ```i29 : degrees B1 o29 = {{1}, {1}} o29 : List``` ```i30 : truncate(2,B1^1) o30 = image | y2 xy x2 | 1 o30 : B1-module, submodule of B1``` ```i31 : truncate(2, ideal(a^3*x, b*y^2)) 2 3 3 2 o31 = ideal (b*y , a x*y, a x ) o31 : Ideal of B1```

## Caveat

The behavior of this function has changed as of Macaulay2 version 1.13. This is a (potentially) breaking change. Before, it used a less useful notion of truncation, involving the heft vector, and was often not what one wanted in the multi-graded case. Additionally, in the tower ring case, when the coefficient ring had variables of nonzero degree, sometimes incorrect answers resulted.

Also, the function expects a graded module, ring, or ideal, but this is not checked, and some answer is returned.

• basis -- basis or generating set of all or part of a ring, ideal or module
• comodule -- submodule to quotient module

## Ways to use truncate :

• truncate(List,Ideal)
• truncate(List,Module)
• truncate(List,Ring)
• truncate(ZZ,Ideal)
• truncate(ZZ,Module)
• truncate(ZZ,Ring)
• truncate(List,Matrix) -- truncation of a matrix
• truncate(ZZ,Matrix), see truncate(List,Matrix) -- truncation of a matrix