Macaulay2 » Documentation
Packages » FrobeniusThresholds :: frobeniusNu
next | previous | forward | backward | up | index | toc

# frobeniusNu -- computes the largest power of an ideal not contained in a specified Frobenius power

- Usage:
    `frobeniusNu(e, I, J)`
    `frobeniusNu(e, I)`
    `frobeniusNu(e, f, J)`
    `frobeniusNu(e, f)`
- Inputs:
  - e, an integer, the order of the Frobenius power to consider
  - I, an ideal, in a polynomial ring $R$ over a finite field of characteristic $p$
  - f, a ring element, in the polynomial ring $R$
  - J, an ideal, in the polynomial ring $R$; if omitted, J is assumed to be the ideal generated by the variables of $R$
- Optional inputs:
  - ContainmentTest => a symbol, default value null, specifies the manner in which to verify the containment of powers of I or f in J^{[p^e]}
  - AtOrigin => a Boolean value, default value true, if false, tells the function to take the minimum value over all possible maximal ideals J
  - ReturnList => a Boolean value, default value false, specifies whether to return the list \{\nu(1),\ldots,\nu(p^e)\}, as opposed to just \nu(p^e)
  - Search => a symbol, default value Binary, specifies the strategy to be used in the search for the largest power of I or f not contained in J^{[p^e]}
  - UseSpecialAlgorithms => a Boolean value, default value true, specifies whether to use special algorithms to compute the $F$-pure threshold of f, for certain special types of polynomials
  - Verbose => a Boolean value, default value false, requests verbose feedback, where \nu(1), \nu(p), \nu(p^2), etc., are printed as they are computed
- Outputs:
  - an integer, the largest integer \nu\ = \nu(p^e) such that I^{\nu} (or f^{\nu}, or I^{[\nu]}, depending on the arguments and options passed) is not contained in J^{[p^e]}
  - an infinite number, if I or f is not contained in the radical of $J$, or when AtOrigin => false, if I or f is a unit ideal
  - a list, containing \nu(p^i), for i = 0,\ldots,e

## Description

Consider an element $f$ of a polynomial ring $R$ over a finite field of characteristic $p$, and an ideal $J$ of this ring. If $f$ is contained in the radical of $J$, then the command frobeniusNu(e,f,J) outputs the maximal exponent $n$ such that $f^{ n}$ is not contained in the $p^e$-th Frobenius power of $J$. More generally, if $I$ is an ideal contained in the radical of $J$, then frobeniusNu(e,I,J) outputs the maximal integer exponent $n$ such that $I^n$ is not contained in the $p^e$-th Frobenius power of $J$.

These numbers are denoted $\nu_f^J(p^e)$ and $\nu_I^J(p^e)$, respectively, in the literature, and were originally defined in the paper $F$-thresholds and Bernstein-Sato Polynomials, by Mustaţă, Takagi, and Watanabe.

    i1 : R = ZZ/11[x,y];

    i2 : I = ideal(x^2 + y^3, x*y);

    o2 : Ideal of R

    i3 : J = ideal(x^2, y^3);

    o3 : Ideal of R

    i4 : frobeniusNu(1, I, J)

    o4 = 24

    i5 : f = x*y*(x^2 + y^2);

    i6 : frobeniusNu(3, f, J)

    o6 = 1330

If $f$ or $I$ is zero, then frobeniusNu returns 0; if $f$ or $I$ is not contained in the radical of $J$, frobeniusNu returns infinity.

    i7 : frobeniusNu(1, 0_R, J)

    o7 = 0

    i8 : frobeniusNu(1, 1_R, J)

    o8 = infinity

    o8 : InfiniteNumber

When the third argument is omitted, the ideal $J$ is assumed to be the homogeneous maximal ideal of $R$.

    i9 : R = ZZ/17[x,y,z];

    i10 : f = x^3 + y^4 + z^5;

    i11 : frobeniusNu(2, f)

    o11 = 220

    i12 : frobeniusNu(2, f, ideal(x, y, z))

    o12 = 220

It is well known that if $q=p^e$ for some nonnegative integer $e$, then $\nu_I^J(qp) = \nu_I^J(q) p + L$, where the error term $L$ is nonnegative, and can be explicitly bounded from above in terms of $p$ and the number of generators of $I$ and $J$ (e.g., $L$ is at most $p-1$ when $I$ is principal). This implies that when searching for frobeniusNu(e,I,J), it is always safe to start at $p$ times frobeniusNu(e-1,I,J), and one need not search too far past this number, and suggests that the most efficient way to compute frobeniusNu(e,I,J) is to compute, successively, frobeniusNu(i,I,J), for i = 0,\ldots,e. This is indeed how the computation is done in most cases.

If $M$ is the homogeneous maximal ideal of $R$ and $f$ is an element of $R$, the numbers $\nu_f^M(p^e)$ determine and are determined by the $F$-pure threshold of $f$ at the origin. Indeed, $\nu_f^M(p^e)$ is $p^e$ times the truncation of the non-terminating base $p$ expansion of fpt($f$) at its $e$^{th} spot. This fact is used to speed up the computations for certain polynomials whose $F$-pure thresholds can be quickly computed via special algorithms, namely diagonal polynomials, binomials, forms in two variables, and polynomials whose factors are in simple normal crossing. This feature can be disabled by setting the option UseSpecialAlgorithms (default value true) to false.

    i13 : R = ZZ/17[x,y,z];

    i14 : f = x^3 + y^4 + z^5; -- a diagonal polynomial

    i15 : time frobeniusNu(3, f)
     -- used 0.00399977s (cpu); 0.00442506s (thread); 0s (gc)

    o15 = 3756

    i16 : time frobeniusNu(3, f, UseSpecialAlgorithms => false)
     -- used 0.30758s (cpu); 0.242377s (thread); 0s (gc)

    o16 = 3756

The valid values for the option ContainmentTest are FrobeniusPower, FrobeniusRoot, and StandardPower. The default value of this option depends on what is passed to frobeniusNu. Indeed, by default, ContainmentTest is set to FrobeniusRoot if frobeniusNu is passed a ring element $f$, and is set to StandardPower if frobeniusNu is passed an ideal $I$. We describe the consequences of setting ContainmentTest to each of these values below.

First, if ContainmentTest is set to StandardPower, then the ideal containments checked when computing frobeniusNu(e,I,J) are verified directly. That is, the standard power $I^n$ is first computed, and a check is then run to see if it is contained in the $p^e$-th Frobenius power of $J$.

Alternately, if ContainmentTest is set to FrobeniusRoot, then the ideal containments are verified using Frobenius Roots. That is, the $p^e$-th Frobenius root of $I^n$ is first computed, and a check is then run to see if it is contained in $J$. The output is unaffected, but this option often speeds up computations, specially when a polynomial or principal ideal is passed as the second argument.

    i17 : R = ZZ/5[x,y,z];

    i18 : f = x^3 + y^3 + z^3 + x*y*z;

    i19 : time frobeniusNu(4, f) -- ContainmentTest is set to FrobeniusRoot, by default
     -- used 0.313708s (cpu); 0.212273s (thread); 0s (gc)

    o19 = 499

    i20 : time frobeniusNu(4, f, ContainmentTest => StandardPower)
     -- used 1.35723s (cpu); 1.14614s (thread); 0s (gc)

    o20 = 499

Finally, when ContainmentTest is set to FrobeniusPower, then instead of producing the invariant $\nu_I^J(p^e)$ as defined above, frobeniusNu instead outputs the maximal integer $n$ such that the $n$^{th} (generalized) Frobenius power of $I$ is not contained in the $p^e$-th Frobenius power of $J$. Here, the $n$^{th} Frobenius power of $I$, when $n$ is a nonnegative integer, is as defined in the paper Frobenius Powers by Hernández, Teixeira, and Witt, which can be computed with the function frobeniusPower, from the TestIdeals package. In particular, frobeniusNu(e,I,J) and frobeniusNu(e,I,J,ContainmentTest=>FrobeniusPower) need not agree. However, they will agree when $I$ is a principal ideal.

    i21 : R = ZZ/3[x,y];

    i22 : M = ideal(x, y);

    o22 : Ideal of R

    i23 : frobeniusNu(3, M^5)

    o23 = 10

    i24 : frobeniusNu(3, M^5, ContainmentTest => FrobeniusPower)

    o24 = 8

The function frobeniusNu works by searching through the list of potential integers $n$ and checking containments of $I^n$ in the specified Frobenius power of $J$. The way this search is approached is specified by the option Search, which can be set to Binary (the default value) or Linear.

    i25 : R = ZZ/5[x,y,z];

    i26 : f = x^2*y^4 + y^2*z^7 + z^2*x^8;

    i27 : time frobeniusNu(5, f) -- uses binary search (default)
     -- used 0.818828s (cpu); 0.617988s (thread); 0s (gc)

    o27 = 1124

    i28 : time frobeniusNu(5, f, Search => Linear)
     -- used 1.18554s (cpu); 0.882638s (thread); 0s (gc)

    o28 = 1124

    i29 : M = ideal(x, y, z);

    o29 : Ideal of R

    i30 : time frobeniusNu(2, M, M^2) -- uses binary search (default)
     -- used 1.59833s (cpu); 1.37227s (thread); 0s (gc)

    o30 = 97

    i31 : time frobeniusNu(2, M, M^2, Search => Linear) -- but linear search gets luckier
     -- used 0.536525s (cpu); 0.46698s (thread); 0s (gc)

    o31 = 97

The option AtOrigin (default value true) can be turned off to tell frobeniusNu to effectively do the computation over all possible maximal ideals $J$ and take the minimum.

    i32 : R = ZZ/7[x,y];

    i33 : f = (x - 1)^3 - (y - 2)^2;

    i34 : frobeniusNu(1, f)

    o34 = infinity

    o34 : InfiniteNumber

    i35 : frobeniusNu(1, f, AtOrigin => false)

    o35 = 5

The option ReturnList (default value false) can be used to request that the output be not only $\nu_I^J(p^e)$, but a list containing $\nu_I^J(p^i)$, for $i=0,\ldots,e$.

    i36 : R = ZZ/5[x,y,z];

    i37 : f = x^2*y^4 + y^2*z^7 + z^2*x^8;

    i38 : frobeniusNu(5, f, ReturnList => true)

    o38 = {0, 1, 8, 44, 224, 1124}

    o38 : List

Alternatively, the option Verbose (default value false) can be used to request that the values $\nu_I^J(p^i)$ ($i=0,\ldots,e$) be printed as they are computed, to monitor the progress of the computation.

    i39 : frobeniusNu(5, f, Verbose => true)
    nuInternal: using comparison test FrobeniusRoot
    ν(1) = 0
    ν(p^1) = 1
    ν(p^2) = 8
    ν(p^3) = 44
    ν(p^4) = 224
    ν(p^5) = 1124

    o39 = 1124

## See also

- fpt -- attempt to compute the F-pure threshold of a polynomial at the origin or globally

## Ways to use frobeniusNu:

- `frobeniusNu(ZZ,Ideal)`
- `frobeniusNu(ZZ,Ideal,Ideal)`
- `frobeniusNu(ZZ,RingElement)`
- `frobeniusNu(ZZ,RingElement,Ideal)`

## For the programmer

The object frobeniusNu is a method function with options.

The source of this document is in /build/macaulay2-88fgJW/macaulay2-1.25.11+ds/M2/Macaulay2/packages/FrobeniusThresholds/MainFunctionsDoc.m2:671:0.