File: poincare-doc.m2

package info (click to toggle)
macaulay2 1.21%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 133,096 kB
  • sloc: cpp: 110,377; ansic: 16,306; javascript: 4,193; makefile: 3,821; sh: 3,580; lisp: 764; yacc: 590; xml: 177; python: 140; perl: 114; lex: 65; awk: 3
file content (226 lines) | stat: -rw-r--r-- 7,434 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
-- -*- coding: utf-8 -*-
--- status: 
--- author(s): L. Gold, Mahrud
--- notes: 

doc ///
Node
  Key
     poincare
    (poincare, Ring)
    (poincare, Module)
    (poincare, Ideal)
    (poincare, MonomialIdeal)
    installHilbertFunction
  Headline
    assemble degrees of a ring, module, or ideal into a polynomial
  Usage
    poincare M
  Inputs
    M:{Ring,Module,Ideal}
  Outputs
    :RingElement
      in the @TO2 (degreesRing, "degrees ring")@ of the ambient ring, which is a Laurent polynomial ring whose
      monomial @TT "T_0^(d_0) ... T_(r-1)^(d_(r-1))"@ correspond to the degree @TT "{d_0,...,d_(n-1)}"@
  Description
    Text
      This function computes the numerator of the reduced @TO2 (hilbertSeries, "Hilbert series")@ of a
      graded ring, or a graded module or ideal over a graded ring, which encodes information about the
      twists in the minimal free resolution of the object.
    Example
      S = ZZ/101[w..z];
      M = module monomialCurveIdeal(S, {1,3,4});
      betti res M
      poincare M
      hilbertSeries M
    Text
      When $S$ is a $\ZZ^r$-graded ring in $n$ variables and $M$ a graded $S$-module, the Hilbert series
      of $M$ is by definition the formal power series
      $$ HS(T_0,\dots,T_{n-1}) = \sum_{d\in\ZZ^r} \mathrm{dim}(M_d) T_0^{d_0} \cdots T_{n-1}^{d_{n-1}}. $$
      The coefficient of the term $T_0^{d_0} \cdots T_{n-1}^{d_{n-1}}$ in the series is the number of
      basis elements of $M_{d_0,...,d_{n-1}}$. When the multi-degree has a single component, the coefficient
      of $T^d$ is dimension of $M_d$.

      Since the Hilbert series is additive in exact sequences, the function @TT "poincare"@ can be used
      to get information about the minimal free resolution and hence the syzygies of $M$. For more details,
      see @TO "Hilbert functions and free resolutions"@.

      This polynomial is an element of the @TO2 (degreesRing, "degrees ring")@ of $S$. Notice that the
      monomial ordering used in the degrees ring is @TO "RevLex"@, so the polynomials in it will be
      displayed with the smallest exponents first.
  Synopsis
    Heading
      compute the polynomial for a ring
    Usage
      poincare R
    Description
      Example
        R = ZZ/101[x]/ideal(x^2);
        poincare R
        numerator hilbertSeries R
      Text
        Recall that the variables of the polynomial are the variables of the degrees ring.
      Example
        R = ZZ/101[x,y, DegreeRank => 2]/ideal(x^2*y);
        poincare R
        numerator hilbertSeries R
  Synopsis
    Heading
      compute the polynomial for a module
    Usage
      poincare M
    Description
      Example
        R = ZZ/101[w..z];
        M = module monomialCurveIdeal(R, {1,3,4});
        poincare M
        numerator reduceHilbert hilbertSeries M
  Synopsis
    Heading
      compute the polynomial for the quotient of a ring by an ideal
    Usage
      poincare I
    Description
      Text
        The this command computes the numerator of the Hilbert series of the @TO comodule@ @TT "R^1/I"@,
	where @TT "R"@ is the ring of @TT "I"@.
      Example
        R = ZZ/101[w..z];
        I = monomialCurveIdeal(R, {1,3,4});
        poincare I
	poincare comodule I
        numerator hilbertSeries I
        numerator reduceHilbert hilbertSeries I
	poincare module I
  Description
    Text
      @HEADER2 "Caching of the result of poincare"@

      When @TT "poincare M"@ is called on a module $M$, the result is cached in  @TT "M.cache.poincare"@
      for future reference. For ideals, the polynomial is cached in the @TO comodule@ of the ideal
      and for matrices, it is cached in the @TO cokernel@ of the matrix.
      This can speed the computation of Gröbner bases. For details, see @TO "computing Groebner bases"@.

      If the numerator $p$ of the Hilbert series for a module $M$ is known by other means, it can be
      manually stored by running:
    Code
      EXAMPLE { PRE //// poincare M = p -- cache poincare //// }
    Text
      This functionality used to be available by running @TT "installHilbertFunction(M, p)"@.

      For example, in the following example, the Hilbert function of 3 random polynomials should be the
      same as the Hilbert function for a complete intersection.
    Example
      R = ZZ/101[a..g];
      I = ideal random(R^1, R^{3:-3});
      p = poincare ideal(a^3, b^3, c^3)
      poincare I = p
      gbTrace = 3
      time poincare I
      time gens gb I;
    Text
      In this case, the savings is minimal, but often it can be dramatic.
      Another important situation is to compute a Gröbner basis using a different monomial order.
    Example
      R = QQ[a..d];
      I = ideal random(R^1, R^{3:-3});
      time p = poincare I
      S = QQ[a..d, MonomialOrder => Eliminate 2]
      J = substitute(I, S)
      poincare J = p
      gbTrace = 3
      time gens gb J;
      selectInSubring(1, gens gb J)
  Caveat
    This function may behave unpredictably in presence of variables of degree zero.
  SeeAlso
    poincareN
    (poincare, ChainComplex)
    degreesRing
    hilbertFunction
    hilbertSeries
    hilbertPolynomial
    reduceHilbert
    selectInSubring
    "Elimination::Elimination"
///

-- This will be consumed into the Complexes package
doc ///
Node
  Key
    (poincare, ChainComplex)
  Headline
    assemble degrees of a chain complex into a polynomial
  Usage
    poincare C
  Inputs
    C:ChainComplex
  Outputs
    :RingElement
      in the Laurent polynomial ring @TO2 (degreesRing, "degrees ring")@, whose variables correspond to the degrees of the ambient ring
  Description
    Text
      We compute @TO poincare@ for a chain complex.
    Example
      R = ZZ/32003[a..h];
      C = res ideal(a*b, c*d, e*f)
      poincare C
    Text
      Note that since the Hilbert series is additive in exact sequences, for a free resolution this only depends
      on the Betti numbers of the resolution. For more details, see @TO "Hilbert functions and free resolutions"@.
    Example
      b = betti C
      poincare b
  SeeAlso
    poincareN
    degreesRing
    hilbertFunction
    hilbertSeries
    hilbertPolynomial
    reduceHilbert
    (poincare, BettiTally)

Node
  Key
     poincareN
    (poincareN, ChainComplex)
  Headline
    assemble degrees into polynomial
  Usage
    poincareN C
  Inputs
    C:ChainComplex
  Outputs
    :RingElement
      in the Laurent polynomial ring @TO2 (degreesRing, "degrees ring")@, whose variables correspond to the degrees of the ambient ring
  Description
    Text
      This function encodes information about the degrees of basis elements of a free chain complex in a
      polynomial. The polynomial has terms $S^i T_0^{d_0} \cdots T_{n-1}^{d_{n-1}}$ in it for each basis
      element of @TT "C_i"@ with multi-degree @TT "{d_0,...,d_(n-1)}"@.
    Example
      R = ZZ/101[a,b,c, Degrees=>{1,1,2}];
      C = res cokernel vars R
      betti C
      p = poincareN C
    Text
      Setting the @TT "S"@ variable to -1 gives the polynomial calculated by @TO (poincare, ChainComplex)@.
    Example
      sub(p, {S => -1})
      poincare C
    Text
      Conversely, setting it to 1 gives the same polynomial for the direct sum of components of the complex.
    Example
      sub(p, {S => 1})
      poincare sum C
  SeeAlso
    poincare
    degreesRing
    hilbertFunction
    hilbertSeries
    hilbertPolynomial
    reduceHilbert
    (poincare, BettiTally)
    (sum, ChainComplex)
///