GAP (NumericalSgps) - Chapter 10: Polynomials and numerical semigroups

Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 A B C Bib Ind
[Top of Book] [Contents] [Previous Chapter] [Next Chapter]

[MathJax on]

10 Polynomials and numerical semigroups
10.1 Generating functions or Hilbert series
10.1-1 NumericalSemigroupPolynomial
10.1-2 HilbertSeriesOfNumericalSemigroup
10.1-3 GraeffePolynomial
10.1-4 IsCyclotomicPolynomial
10.1-5 IsKroneckerPolynomial
10.1-6 IsCyclotomicNumericalSemigroup
10.1-7 IsSelfReciprocalUnivariatePolynomial
10.2 Semigroup of values of algebraic curves
10.2-1 SemigroupOfValuesOfPlaneCurveWithSinglePlaceAtInfinity
10.2-2 IsDeltaSequence
10.2-3 DeltaSequencesWithFrobeniusNumber
10.2-4 CurveAssociatedToDeltaSequence
10.2-5 SemigroupOfValuesOfCurve_Local
10.2-6 SemigroupOfValuesOfCurve_Global

### 10 Polynomials and numerical semigroups

#### 10.1 Generating functions or Hilbert series

Let S be a numerical semigroup. The Hilbert series or generating function associated to S is H_S(x)=∑_s∈ Sx^s (actually it is the Hilbert function of the ring K[S] with K a field). See for instance [Mor14].

##### 10.1-1 NumericalSemigroupPolynomial

`‣ NumericalSemigroupPolynomial`( s, x ) | ( function )

s is a numerical semigroups and x a variable (or a value to evaluate in). The output is the polynomial 1+(x-1)∑_s∈ N∖ S x^s, which equals (1-x)H_S(x).

    gap> x:=X(Rationals,"x");;
    gap> s:=NumericalSemigroup(5,7,9);;
    gap> NumericalSemigroupPolynomial(s,x);
    x^14-x^13+x^12-x^11+x^9-x^8+x^7-x^6+x^5-x+1

##### 10.1-2 HilbertSeriesOfNumericalSemigroup

`‣ HilbertSeriesOfNumericalSemigroup`( s, x ) | ( function )

s is a numerical semigroups and x a variable (or a value to evaluate in). The output is the series ∑_s∈ ∖ S x^s. The series is given as a rational function.

    gap> x:=X(Rationals,"x");;
    gap> s:=NumericalSemigroup(5,7,9);;
    gap> HilbertSeriesOfNumericalSemigroup(s,x);
    (x^14-x^13+x^12-x^11+x^9-x^8+x^7-x^6+x^5-x+1)/(-x+1)

##### 10.1-3 GraeffePolynomial

`‣ GraeffePolynomial`( p ) | ( function )

p is a polynomial. Computes the Graeffe polynomial of p. Needed to test if p is a cyclotomic polynomial (see [BD89]).

    gap> x:=X(Rationals,"x");;
    gap> GraeffePolynomial(x^2-1);
    x^2-2*x+1

##### 10.1-4 IsCyclotomicPolynomial

`‣ IsCyclotomicPolynomial`( p ) | ( function )

p is a polynomial. Detects if p is a cyclotomic polynomial using the procedure given in [BD89].

    gap> CyclotomicPolynomial(Rationals,3);
    x^2+x+1
    gap> IsCyclotomicPolynomial(last);
    true

##### 10.1-5 IsKroneckerPolynomial

`‣ IsKroneckerPolynomial`( p ) | ( function )

p is a polynomial. Detects if p is a Kronecker polynomial, that is, a monic polynomial with integer coefficients having all its roots in the unit circunference, or equivalently, a product of cyclotomic polynomials.

    gap> x:=X(Rationals,"x");;
    gap>  s:=NumericalSemigroup(3,5,7);;
    gap>  t:=NumericalSemigroup(4,6,9);;
    gap> p:=NumericalSemigroupPolynomial(s,x);
    x^5-x^4+x^3-x+1
    gap> q:=NumericalSemigroupPolynomial(t,x);
    x^12-x^11+x^8-x^7+x^6-x^5+x^4-x+1
    gap> IsKroneckerPolynomial(p);
    false
    gap> IsKroneckerPolynomial(q);
    true

##### 10.1-6 IsCyclotomicNumericalSemigroup

`‣ IsCyclotomicNumericalSemigroup`( s ) | ( function )

s is a numerical semigroup. Detects if the polynomial associated to s is a Kronecker polynomial.

    gap> l:=CompleteIntersectionNumericalSemigroupsWithFrobeniusNumber(21);;
    gap> ForAll(l,IsCyclotomicNumericalSemigroup);
    true

##### 10.1-7 IsSelfReciprocalUnivariatePolynomial

`‣ IsSelfReciprocalUnivariatePolynomial`( p ) | ( function )

p is a polynomial. Detects if p is a selfreciprocal. A numerical semigroup is symmetric if and only if it is selfreciprocal, [Mor14]

    gap> l:=IrreducibleNumericalSemigroupsWithFrobeniusNumber(13);;
    gap> x:=X(Rationals,"x");;
    gap> ForAll(l, s->
    > IsSelfReciprocalUnivariatePolynomial(NumericalSemigroupPolynomial(s,x)));
    true

#### 10.2 Semigroup of values of algebraic curves

Let f(x,y)∈ K[x,y], with K an algebraically close field of characteristic zero. Let f(x,y)=y^n+a_1(x)y^n-1+dots+a_n(x) be a nonzero polynomial of K[x][y]. After possibly a change of variables, we may assume that, that deg_x(a_i(x))le i-1 for all i∈{1,..., n}. For g∈ K[x,y] that is not a multiple of f, define mathrmint(f,g)=dim_ K frac K[x,y](f,g). If f as a one place at infinity, then the set {mathrmint(f,g)∣ g∈ K[x,y]∖(f)} is a free numerical semigroup (and thus a complete intersection).

##### 10.2-1 SemigroupOfValuesOfPlaneCurveWithSinglePlaceAtInfinity

`‣ SemigroupOfValuesOfPlaneCurveWithSinglePlaceAtInfinity`( f ) | ( function )

f is a polynomial in the variables X(Rationals,1) and X(Rationals,2). Computes the semigroup {mathrmint(f,g)∣ g∈ K[x,y]∖(f)}. The algorithm checks if f has one place at infinity. If the extra argument "all" is given, then the output is the δ-sequence and approximate roots of f. The method is explained in [AG14].

    gap> x:=X(Rationals,"x");; y:=X(Rationals,"y");;
    gap> f:=((y^3-x^2)^2-x*y^2)^4-(y^3-x^2);;
    gap> SemigroupOfValuesOfPlaneCurveWithSinglePlaceAtInfinity(f,"all");
    [ [ 24, 16, 28, 7 ], [ y, y^3-x^2, y^6-2*x^2*y^3+x^4-x*y^2 ] ]

##### 10.2-2 IsDeltaSequence

`‣ IsDeltaSequence`( l ) | ( function )

l is a list of positive integers. Assume that l equals a_0,a_1,dots,a_h. Then l is a δ-sequence if gcd(a_0,..., a_h)=1, ⟨ a_0,⋯ a_s is free, a_kD_k > a_k+1D_k+1 and a_0> a_1 > D_2 > D_3 > ... > D_h+1, where D_1=a_0, D_k=gcd(D_k-1,a_k-1.

Every δ-sequence generates a numerical semigroup that is the semigroup of values of a plane curve with one place at infinity.

    gap> IsDeltaSequence([24,16,28,7]);
    true

##### 10.2-3 DeltaSequencesWithFrobeniusNumber

`‣ DeltaSequencesWithFrobeniusNumber`( f ) | ( function )

f is a positive integer. Computes the set of all δ-sequences generating numerical semigroups with Frobenius number f.

    gap> DeltaSequencesWithFrobeniusNumber(21);
    [ [ 8, 6, 11 ], [ 10, 4, 15 ], [ 12, 8, 6, 11 ], [ 14, 4, 11 ],
      [ 15, 10, 4 ], [ 23, 2 ] ]

##### 10.2-4 CurveAssociatedToDeltaSequence

`‣ CurveAssociatedToDeltaSequence`( l ) | ( function )

l is a δ-sequence. Computes a curve in the variables X(Rationals,1) and X(Rationals,2) whose semigroup of values is generated by the l.

    gap> CurveAssociatedToDeltaSequence([24,16,28,7]);
    x_2^24-8*x^2*x_2^21+28*x^4*x_2^18-56*x^6*x_2^15-4*x*x_2^20+70*x^8*x_2^12+24*x^\
    3*x_2^17-56*x^10*x_2^9-60*x^5*x_2^14+28*x^12*x_2^6+80*x^7*x_2^11+6*x^2*x_2^16-\
    8*x^14*x_2^3-60*x^9*x_2^8-24*x^4*x_2^13+x^16+24*x^11*x_2^5+36*x^6*x_2^10-4*x^1\
    3*x_2^2-24*x^8*x_2^7-4*x^3*x_2^12+6*x^10*x_2^4+8*x^5*x_2^9-4*x^7*x_2^6+x^4*x_2\
    ^8-x_2^3+x^2
    gap> SemigroupOfValuesOfPlaneCurveWithSinglePlaceAtInfinity(last,"all");
    [ [ 24, 16, 28, 7 ], [ x_2, x_2^3-x_1^2, x_2^6-2*x_1^2*x_2^3+x_1^4-x_1*x_2^2 ] ]

##### 10.2-5 SemigroupOfValuesOfCurve_Local

`‣ SemigroupOfValuesOfCurve_Local`( arg ) | ( function )

The function admits one or two parameters. In any case, the first is a list of polynomials pols. And the second can be the string "basis" or an integer val.

If only one argument is given, the output is the semigroup of all possible orders of K[[pols]] provided that K[[x]]/K[[pols]] has finite length. If the second argument "basis" is given, then the output is a (reduced) basis of the algebra K[[pols]] such that the orders of the basis elements generate minimally the semigroup of orders of K[[pols]]. If an integer val is the second argument, then the output is a polynomial in K[[pols]] with order val (`fail` if there is no such polynomioal, that is, val is not in the semigroup of values).

The method is explained in [AGM14].

    gap> x:=Indeterminate(Rationals,"x");;
    gap> SemigroupOfValuesOfCurve_Local([x^4,x^6+x^7,x^13]);
    <Numerical semigroup with 4 generators>
    gap> MinimalGeneratingSystem(last);
    [ 4, 6, 13, 15 ]
    gap> SemigroupOfValuesOfCurve_Local([x^4,x^6+x^7,x^13], "basis");
    [ x^4, x^7+x^6, x^13, x^15 ]
    gap> SemigroupOfValuesOfCurve_Local([x^4,x^6+x^7,x^13], 20);
    x^20

##### 10.2-6 SemigroupOfValuesOfCurve_Global

`‣ SemigroupOfValuesOfCurve_Global`( arg ) | ( function )

The function admits one or two parameters. In any case, the first is a list of polynomials pols. And the second can be the string "basis" or an integer val.

If only one argument is given, the output is the semigroup of all possible degrees of K[pols] provided that K[x]/K[pols] has finite length. If the second argument "basis" is given, then the output is a (reduced) basis of the algebra K[pols] such that the degrees of the basis elements generate minimally the semigroup of degrees of K[pols]. If an integer val is the second argument, then the output is a polynomial in K[pols] with degree val (`fail` if there is no such polynomioal, that is, val is not in the semigroup of values).

The method is explained in [AGM14].

    gap> x:=Indeterminate(Rationals,"x");;
    gap> SemigroupOfValuesOfCurve_Global([x^4,x^6+x^7,x^13]);
    <Numerical semigroup with 3 generators>
    gap> MinimalGeneratingSystem(last);
    [ 4, 7, 13 ]
    gap> SemigroupOfValuesOfCurve_Global([x^4,x^6+x^7,x^13],"basis");
    [ x^4, x^7+x^6, x^13 ]
    gap> SemigroupOfValuesOfCurve_Global([x^4,x^6+x^7,x^13],12);
    x^12
    gap> SemigroupOfValuesOfCurve_Global([x^4,x^6+x^7,x^13],6);
    fail

[Top of Book] [Contents] [Previous Chapter] [Next Chapter]
Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 A B C Bib Ind

generated by GAPDoc2HTML