<h3>10 <span class="Heading">
Polynomials and numerical semigroups
</span></h3>
<p>Polynomials appear related to numerical semigroups in several ways. One of them is through their associated generating function (or Hilbert series), and another via value semigroups of a curve; and curves might be defined by polynomials. In this chapter we present several functions to compute the polynomial and Hilbert series associated to a numerical semigroup, and to calculate the respective numerical semigroups given a set of defining polynomials.</p>
<h4>10.1 <span class="Heading">
Generating functions or Hilbert series
</span></h4>
<p>Let <span class="SimpleMath">S</span> be a numerical semigroup. The Hilbert series or generating function associated to <span class="SimpleMath">S</span> is <span class="SimpleMath">H_S(x)=∑_s∈ Sx^s</span> (actually it is the Hilbert function of the ring <span class="SimpleMath">K[S]</span> with <span class="SimpleMath">K</span> a field). See for instance <a href="chapBib.html#biBM">[Mor14]</a>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ NumericalSemigroupPolynomial</code>( <var class="Arg">s</var>, <var class="Arg">x</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><var class="Arg">s</var> is a numerical semigroups and <var class="Arg">x</var> a variable (or a value to evaluate in). The output is the polynomial <span class="SimpleMath">1+(x-1)∑_s∈ N∖ S x^s</span>, which equals <span class="SimpleMath">(1-x)H_S(x)</span>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsNumericalSemigroupPolynomial</code>( <var class="Arg">f</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><var class="Arg">f</var> is a polynomial in one variable. The output is true if there exists a numerical semigroup <span class="SimpleMath">S</span> such that <var class="Arg">f</var> equals <span class="SimpleMath">(1-x)H_S(x)</span>, that is, the polynomial associated to <span class="SimpleMath">S</span> (false otherwise).</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ NumericalSemigroupFromNumericalSemigroupPolynomial</code>( <var class="Arg">f</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><var class="Arg">f</var> is a polynomial associated to a numerical semigroup (otherwise yields error). The output is the numerical semigroup <span class="SimpleMath">S</span> such that <var class="Arg">f</var> equals <span class="SimpleMath">(1-x)H_S(x)</span>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HilbertSeriesOfNumericalSemigroup</code>( <var class="Arg">s</var>, <var class="Arg">x</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><var class="Arg">s</var> is a numerical semigroup and <var class="Arg">x</var> a variable (or a value to evaluate in). The output is the series <span class="SimpleMath">∑_s∈ S x^s</span>. The series is given as a rational function.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GraeffePolynomial</code>( <var class="Arg">p</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><var class="Arg">p</var> is a polynomial. Computes the Graeffe polynomial of <var class="Arg">p</var>. Needed to test if <var class="Arg">p</var> is a cyclotomic polynomial (see <a href="chapBib.html#biBBD-cyclotomic">[BD89]</a>).</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsCyclotomicPolynomial</code>( <var class="Arg">p</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><var class="Arg">p</var> is a polynomial. Detects if <var class="Arg">p</var> is a cyclotomic polynomial using the procedure given in <a href="chapBib.html#biBBD-cyclotomic">[BD89]</a>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsKroneckerPolynomial</code>( <var class="Arg">p</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><var class="Arg">p</var> is a polynomial. Detects if <var class="Arg">p</var> is a Kronecker polynomial, that is, a monic polynomial with integer coefficients having all its roots in the unit circumference, or equivalently, a product of cyclotomic polynomials. The current implementation has been done with A. Herrera-Poyatos, following <a href="chapBib.html#biBBD-cyclotomic">[BD89]</a>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsCyclotomicNumericalSemigroup</code>( <var class="Arg">s</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><var class="Arg">s</var> is a numerical semigroup. Detects if the polynomial associated to <var class="Arg">s</var> is a Kronecker polynomial.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CyclotomicExponentSequence</code>( <var class="Arg">s</var>, <var class="Arg">k</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><var class="Arg">s</var> is a numerical semigroup and <var class="Arg">k</var> is a positive integer. Outputs the list of the first <var class="Arg">k</var> elements of the cyclotomic exponent sequence of s (see <a href="chapBib.html#biBC-GS-M">[CGM16]</a>).</p>
<p>The sequence will be truncated if the semigroup is cyclotomic and k is bigger than the last nonzero element in its sequence.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ WittCoefficients</code>( <var class="Arg">p</var>, <var class="Arg">k</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><var class="Arg">p</var> is a univariate polynomial with integer coefficientas and <span class="SimpleMath">p(1)=1</span>. Then <span class="SimpleMath">p(x)=∏_n≥ 0(1-x^n)^e_n</span>, for some integers <span class="SimpleMath">e_n</span>. The output is the list <span class="SimpleMath">[e_1,...,e_k]</span>, and it is computed by using <a href="chapBib.html#biBC-GS-HP-M">[CGHM19]</a>.</p>
<p>The difference with this example and the one in <code class="func">CyclotomicExponentSequence</code> (<a href="chap10.html#X7B428FA2877EC733"><span class="RefLink">10.1-9</span></a>) is that in that case a cyclotomic check is performed that slows down the process.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsSelfReciprocalUnivariatePolynomial</code>( <var class="Arg">p</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><var class="Arg">p</var> is a univariate polynomial. Detects if <var class="Arg">p</var> is selfreciprocal. A numerical semigroup is symmetric if and only if it is selfreciprocal, <a href="chapBib.html#biBM">[Mor14]</a>. The current implementation is due to A. Herrera-Poyatos.</p>
<h4>10.2 <span class="Heading">
Semigroup of values of algebraic curves
</span></h4>
<p>Let <span class="SimpleMath">f(x,y)∈ K[x,y]</span>, with <span class="SimpleMath">K</span> an algebraically closed field of characteristic zero. Let <span class="SimpleMath">f(x,y)=y^n+a_1(x)y^n-1+dots+a_n(x)</span> be a nonzero polynomial of <span class="SimpleMath">K[x][y]</span>. After possibly a change of variables, we may assume that, that <span class="SimpleMath">deg_x(a_i(x))≤ i-1</span> for all <span class="SimpleMath">i∈{1,..., n}</span>. For <span class="SimpleMath">g∈ K[x,y]</span> that is not a multiple of <span class="SimpleMath">f</span>, define <span class="SimpleMath">mathrmint(f,g)=dim_ K frac K[x,y](f,g)</span>. If <span class="SimpleMath">f</span> has one place at infinity, then the set <span class="SimpleMath">{mathrmint(f,g)∣ g∈ K[x,y]∖(f)}</span> is a free numerical semigroup (and thus a complete intersection).</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SemigroupOfValuesOfPlaneCurveWithSinglePlaceAtInfinity</code>( <var class="Arg">f</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><var class="Arg">f</var> is a polynomial in the variables X(Rationals,1) and X(Rationals,2). Computes the semigroup <span class="SimpleMath">{mathrmint(f,g)∣ g∈ K[x,y]∖(f)}</span>, where <span class="SimpleMath">mathrmint(f,g)=dim_ K ( K[x,y]/(f,g))</span>. The algorithm checks if <var class="Arg">f</var> has one place at infinity. If the extra argument "all" is given, then the output is the <span class="SimpleMath">δ</span>-sequence and approximate roots of <var class="Arg">f</var>. The method is explained in <a href="chapBib.html#biBAGS14">[AG16a]</a>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsDeltaSequence</code>( <var class="Arg">l</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><var class="Arg">l</var> is a list of positive integers. Assume that <var class="Arg">l</var> equals <span class="SimpleMath">a_0,a_1,dots,a_h</span>. Then <var class="Arg">l</var> is a <span class="SimpleMath">δ</span>-sequence if <span class="SimpleMath">gcd(a_0,..., a_h)=1</span>, <span class="SimpleMath">⟨ a_0,⋯, a_s⟩</span> is free, <span class="SimpleMath">a_kD_k > a_k+1D_k+1</span> and <span class="SimpleMath">a_0> a_1 > D_2 > D_3 > ... > D_h+1</span>, where <span class="SimpleMath">D_1=a_0</span>, <span class="SimpleMath">D_k=gcd(D_k-1,a_k-1)</span>.</p>
<p>Every <span class="SimpleMath">δ</span>-sequence generates a numerical semigroup that is the semigroup of values of a plane curve with one place at infinity.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DeltaSequencesWithFrobeniusNumber</code>( <var class="Arg">f</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><var class="Arg">f</var> is an integer. Computes the set of all <span class="SimpleMath">δ</span>-sequences generating numerical semigroups with Frobenius number <var class="Arg">f</var>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CurveAssociatedToDeltaSequence</code>( <var class="Arg">l</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><var class="Arg">l</var> is a <span class="SimpleMath">δ</span>-sequence. Computes a curve in the variables X(Rationals,1) and X(Rationals,2) whose semigroup of values is generated by the <var class="Arg">l</var>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SemigroupOfValuesOfPlaneCurve</code>( <var class="Arg">f</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><var class="Arg">f</var> is a polynomial in the variables X(Rationals,1) and X(Rationals,2). The singular package is mandatory. Either by loading it prior to numerical semigroups or by using <var class="Arg">NumSgpsUseSingular()</var>. If <span class="SimpleMath">f</span> is irreducible, computes the semigroup <span class="SimpleMath">{mathrmint(f,g)∣ g∈ K[x,y]∖(f)}</span>, where <span class="SimpleMath">mathrmint(f,g)=dim_ K ( K[[x,y]]/(f,g))</span>. If it has two components, the output is the value semigroup in two variables, and thus a good semigroup. If there are more components, then the output is that of <var class="Arg">semigroup</var> in the alexpoly singular library.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SemigroupOfValuesOfCurve_Local</code>( <var class="Arg">arg</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>The function admits one or two parameters. In any case, the first is a list of polynomials <var class="Arg">pols</var>. And the second can be the string <var class="Arg">"basis"</var> or an integer <var class="Arg">val</var>.</p>
<p>If only one argument is given, the output is the semigroup of all possible orders of <span class="SimpleMath">K[[pols]]</span> provided that <span class="SimpleMath">K[[x]]/K[[pols]]</span> has finite length. If the second argument <var class="Arg">"basis"</var> is given, then the outputis a (reduced) basis of the algebra <span class="SimpleMath">K[[pols]]</span> such that the orders of the basis elements generate minimally the semigroup of orders of <span class="SimpleMath">K[[pols]]</span>. If an integer <var class="Arg">val</var> is the second argument, then the output is a polynomial in <span class="SimpleMath">K[[pols]]</span> with order <var class="Arg">val</var> (<code class="code">fail</code> if there is no such polynomial, that is, <var class="Arg">val</var> is not in the semigroup of values).</p>
<p>The method is explained in <a href="chapBib.html#biBAGSM14">[AGM17]</a>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SemigroupOfValuesOfCurve_Global</code>( <var class="Arg">arg</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>The function admits one or two parameters. In any case, the first is a list of polynomials <var class="Arg">pols</var>. And the second can be the string <var class="Arg">"basis"</var> or an integer <var class="Arg">val</var>.</p>
<p>If only one argument is given, the output is the semigroup of all possible degrees of <span class="SimpleMath">K[pols]</span> provided that <span class="SimpleMath">K[x]/K[pols]</span> has finite length. If the second argument <var class="Arg">"basis"</var> is given, then the output is a (reduced) basis of the algebra <span class="SimpleMath">K[pols]</span> such that the degrees of the basis elements generate minimally the semigroup of degrees of <span class="SimpleMath">K[pols]</span>. If an integer <var class="Arg">val</var> is the second argument, then the output is a polynomial in <span class="SimpleMath">K[pols]</span> with degree <var class="Arg">val</var> (<code class="code">fail</code> if there is no such polynomial, that is, <var class="Arg">val</var> is not in the semigroup of values).</p>
<p>The method is explained in <a href="chapBib.html#biBAGSM14">[AGM17]</a>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GeneratorsModule_Global</code>( <var class="Arg">A</var>, <var class="Arg">M</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><var class="Arg">A</var> and <var class="Arg">M</var> are lists of polynomials in the same variable. The output is a basis of the ideal <span class="SimpleMath">M K[A]</span>, that is, a set <span class="SimpleMath">F</span> such that <span class="SimpleMath">deg(F)</span> generates the ideal <spanclass="SimpleMath">deg(M K[A])</span> of <span class="SimpleMath">deg(K[A])</span>, where <spanclass="SimpleMath">deg</span> stands for degree. The method is explained in <a href="chapBib.html#biBA-A-GS">[AAG19]</a>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GeneratorsKahlerDifferentials</code>( <var class="Arg">A</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><var class="Arg">A</var> is a list of polynomials in the same variable. The output is <var class="Arg">GeneratorsModule_Global(A,M)</var>, with <var class="Arg">M</var> the set of derivatives of the elements in <var class="Arg">A</var>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsMonomialNumericalSemigroup</code>( <var class="Arg">S</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p><var class="Arg">S</var> is a numerical semigroup. Tests whether <var class="Arg">S</var> a monomial numerical semigroup.</p>
<p>Let <span class="SimpleMath">R</span> a Noetherian ring such that <span class="SimpleMath">K ⊆ R ⊆ K[[t]]</span>, <span class="SimpleMath">K</span> is a field of characteristic zero, the algebraic closure of <span class="SimpleMath">R</span> is <span class="SimpleMath">K[[t]]</span>, and the conductor <span class="SimpleMath">(R : K[[t]])</span> is not zero. If <span class="SimpleMath">v : K((t))-> Z</span> is the natural valuation for <span class="SimpleMath">K((t))</span>, then <span class="SimpleMath">v(R)</span> is a numerical semigroup.</p>
<p>Let <span class="SimpleMath">S</span> be a numerical semigroup minimally generated by <span class="SimpleMath">{n_1,...,n_e}</span>. The semigroup ring associated to <span class="SimpleMath">S</span> is <span class="SimpleMath">K[[S]]=K[[t^n_1,...,t^n_e]]</span>. A ring is called a semigroup ring if it is of the form <span class="SimpleMath">K[[S]]</span>, for some numerical semigroup <span class="SimpleMath">S</span>. We say that <span class="SimpleMath">S</span> is a monomial numerical semigroup if for any <span class="SimpleMath">R</span> as above with <span class="SimpleMath">v(R)=S</span>, <span class="SimpleMath">R</span> is a semigroup ring. See <a href="chapBib.html#biBVMic02">[Mic02]</a> for details.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LegendrianGenericNumericalSemigroup</code>( <var class="Arg">n</var>, <var class="Arg">m</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><var class="Arg">n</var> and <var class="Arg">m</var> are coprime integers with <span class="SimpleMath"><var class="Arg">m</var>≥ 2<var class="Arg">n</var>+1</span>. The output is the semigroup of a generic element in the class of irreducible Legendrian singularities with equisingularity equal to the topological type of <span class="SimpleMath">y^n=x^m</span>, as described in Section 5 of <a href="chapBib.html#biBaraujo-neto">[AN09]</a>.</p>
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.