The FrobeniusThresholds package for Macaulay2
Daniel J. Hern\'andez, Karl Schwede, Pedro Teixeira, Emily E. Witt

TL;DR
The FrobeniusThresholds package for Macaulay2 provides tools to compute and estimate $F$-thresholds and related invariants, aiding the study of singularities in prime characteristic algebra.
Contribution
It introduces a new Macaulay2 package that automates the calculation of $F$-pure thresholds and related invariants, enhancing computational approaches in singularity theory.
Findings
Enables efficient computation of $F$-pure thresholds.
Provides estimates for generalized $F$-thresholds.
Facilitates research in prime characteristic singularities.
Abstract
This article describes the \emph{Macaulay2} package \emph{FrobeniusThresholds}, designed to estimate and calculate -pure thresholds, more general -thresholds, and related numerical invariants arising in the study of singularities in prime characteristic commutative algebra.
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
The FrobeniusThresholds package for Macaulay2
Daniel J. Hernández
Department of Mathematics, University of Kansas, Lawrence, KS 66045, USA
,
Karl Schwede
Department of Mathematics, University of Utah, Salt Lake City, UT 84112, USA
,
Pedro Teixeira
Department of Mathematics, Knox College, Galesburg, IL 61401, USA
and
Emily E. Witt
Department of Mathematics, University of Kansas, Lawrence, KS 66045, USA
Abstract.
This article describes the Macaulay2 package FrobeniusThresholds, designed to estimate and calculate -pure thresholds, more general -thresholds, and related numerical invariants arising in the study of singularities in prime characteristic commutative algebra.
Key words and phrases:
Macaulay2, Frobenius, -singularity, -pure threshold, -threshold
2010 Mathematics Subject Classification:
13A35
D. J. Hernández was partially supported by NSF DMS #1600702.
K. Schwede was supported by NSF CAREER Grant DMS #1252860/1501102, NSF FRG Grant DMS #1265261/1501115, NSF grant #1801849 and a Sloan Fellowship.
E. E. Witt was partially supported by NSF DMS #1623035.
1. Introduction
This paper describes the Macaulay2 package FrobeniusThresholds [GS, BHS*+*], which provides tools for computing or estimating certain fundamental invariants in positive characteristic commutative algebra, namely -pure thresholds, -thresholds, and -jumping exponents. Recall that a ring of prime characteristic is -pure if the Frobenius map—that is, the ring endomorphism sending an element to its -th power—is a pure morphism; under natural geometric hypotheses, this is equivalent to the condition that the Frobenius morphism splits as a map of rings. The concept of -purity has proven to be important in commutative algebra, and has a rich history. Indeed, it first appeared in the work of Hochster and Roberts to study local cohomology [HR76], was compared with rational singularities in [Fed83], and was used to study global properties of Schubert varieties in [MR85].
After the advent of tight closure [HH90], the use of the Frobenius map to quantify singularity—that is, deviation from regularity—proliferated, and based on a connection discovered between -pure and log canonical singularities [HW02], the concept of -purity was generalized to the context of pairs. Along these lines, the -pure threshold was defined in analogy with the log canonical threshold [TW04], and -thresholds were introduced as a natural extension [MTW05].
The connection between the -pure threshold and the log canonical threshold, however, extends beyond mere analogy. For example, suppose is a polynomial with integer coefficients, and that is the polynomial obtained by reducing the coefficients of modulo a prime . Then, the -pure thresholds of the reductions converge to the log canonical threshold of as tends to infinity [HY03]. A related result is that of Zhu, who proved that the log canonical threshold of is at least the -pure threshold of any reduction [Zhu17, Corollary 4.2].
This latter result is interesting from a computational perspective, in that it provides lower bounds for log canonical thresholds. Though there is a general purpose implementation of an algorithm for computing log canonical thresholds in the Dmodules package [LT]111The MultiplierIdeals package [TSR, Tei15] also computes log canonical thresholds in many special cases, including monomial ideals, hyperplane arrangements, generic determinantal ideals, and certain binomial ideals. , the function for computing -pure thresholds contained in the FrobeniusThresholds package is typically much faster, especially so in low characteristic.
In summary, the -pure threshold is an interesting numerical invariant, related to many other measures of singularity across all characteristics, and has been the focus of intense study over the past fifteen years. Unfortunately, it is typically difficult to calculate. The package FrobeniusThresholds is centered on calculating and estimating the -pure threshold and other -thresholds, with the function fpt at its core. It builds heavily upon the TestIdeals package for Macaulay2 [BBB*+*, BHK*+*18], which provides a broad range of functionality for effective computation in prime characteristic commutative algebra.
1.1. Some background and notation
Although some of the functionality implemented in FrobeniusThresholds is not restricted to regular ambient rings (see Section 3), for the sake of concreteness, in this introduction we will work in a polynomial ring over a finite field of characteristic . The ideal of this ring generated by its variables is denoted .
Let us outline a way in which natural numerical invariants in prime characteristic commutative algebra are often constructed: For every natural number , associate to some fixed data—often, a collection of polynomials or ideals—an integer describing something of relevance that depends on (e.g., the dimension of some interesting vector space constructed in terms of the initial data). Normalize this integer by dividing by some power of , and then take the limit as the integer tends to infinity. The resulting limit, if it exists, should then encode some interesting information about the initial data.
Consider a nonzero polynomial and a natural number . If does not vanish at the origin, then set . Otherwise, , and we instead define
[TABLE]
where denotes the -th Frobenius power of , that is, the ideal generated by the -th powers of the elements of . Following our outline, we define
[TABLE]
This limit exists, and is a rational number when , though the latter is far from obvious [BMS08]. Inspired by its connections with the -purity of pairs, this limit is called the -pure threshold of at the origin.
The -pure threshold is closely related to many other fundamental concepts in prime characteristic commutative algebra. For instance,
[TABLE]
where and are the test ideal and -signature, respectively, associated to and the formal nonnegative real exponent . The former is an ideal in the ambient ring of , and the latter is a real number; both depend on the parameter and the characteristic in subtle ways [BMS08, BST12].
In the literature, the -pure threshold is often denoted , for obvious reasons. However, in this note we adopt the former notation to avoid any possible confusion with the function fpt described in Section 4, which some times does not output the number , but returns, instead, lower and upper bounds for that number.
It turns out that the sequence \big{(}\nu_{f}^{\mathfrak{m}}(p^{e})\big{)}_{e=0}^{\infty} itself, and not just its limit, encodes interesting information about . For example, it is closely related to the Bernstein–Sato polynomial of [MTW05]. Thus, it is natural to ask whether one can recover the sequence \big{(}\nu_{f}^{\mathfrak{m}}(p^{e})\big{)}_{e=0}^{\infty} from the limit . Fortunately, the answer to this question is yes [MTW05, Her12]; for each we have
[TABLE]
We conclude this subsection by briefly reviewing some natural generalizations. Suppose that and are ideals. If is contained in the radical of , then we set
[TABLE]
or , when the set on the right-hand side is empty. Otherwise, we set . This clearly generalizes the quantity considered earlier, and we call
[TABLE]
the -threshold of with respect to . The value is called the -pure threshold of at the origin, and if is principal, is called the -threshold of with respect to . Like -pure thresholds, -thresholds are rational (when finite), and can be characterized in terms of test ideals.
Acknowledgements.
The authors enthusiastically thank everyone who helped complete the FrobeniusThresholds package: the package coauthors Juliette Bruce and Daniel Smolkin, and contributors Erin Bela, Zhibek Kadyrsizova, Moty Katzman, Sara Malec, and Marcus Robinson.
Thanks go to the organizers of the Macaulay2 workshops where much of the functionality described herein was developed, hosted by Wake Forest University in 2012, the University of California, Berkeley in 2014 and 2017, Boise State University in 2015, and the University of Utah in 2016.
Finally, the authors are grateful to the University of Utah for hosting a collaborative development visit in 2018, and to the Institute of Mathematics and its Applications for its generous support for our 2019 Coding Sprint. The current version of the package was finalized during these events.
2. The nu function
We first consider the nu function, a fundamental component of the package FrobeniusThresholds. We adopt the setup established in the introduction: we work in a polynomial ring over a finite field of characteristic , denotes the ideal generated by the variables, and is a natural number. If and are ideals of , the command nu(e,I,J) outputs the extended integer defined in the introduction; if is an element of , nu(e,f,J) outputs . When the third argument is omitted from the function nu, it is assumed to be the maximal ideal .
i1 : R = ZZ/11[x,y];i2 : I = ideal(x^2 + y^3, xy);o2 : Ideal of Ri3 : J = ideal(x^2, y^3);o3 : Ideal of Ri4 : nu(2, I, J)o4 = 281i5 : f = xy*(x^2 + y^2);i6 : nu(2, f, J)o6 = 120
2.1. Options for nu
We now describe the options available for the function nu. As pointed out in the introduction, if , the values can be recovered from the -pure threshold of . This is used to speed up computations for certain polynomials whose -pure thresholds can be computed quickly via specialized algorithms or formulas, namely diagonal polynomials, binomials, forms in two variables, and products of factors in simple normal crossing (see Section 4). This feature can be disabled by setting the option UseSpecialAlgorithms (default value true) to false.222In Section 4.1 we discuss a couple of situations in which this may be desirable.
i7 : R = ZZ/17[x,y,z];i8 : f = x^3 + y^4 + z^5; -- a diagonal polynomiali9 : time nu(10, f) -- used 0.0161622 secondso9 = 1541642394460i10 : time nu(10, f, UseSpecialAlgorithms => false) -- used 2.06877 secondso10 = 1541642394460
In general, the function nu works by searching through a list of integers , and checking containments of the -th power of in the specified Frobenius power of . It is well known that, for any positive integer ,
[TABLE]
where the error term is nonnegative and can be explicitly bounded from above in terms of and the number of generators of and . For instance, the error term is at most when is principal and is arbitrary. This implies that when searching for the maximal exponent defining nu(e,I,J) for positive , it is safe to start at times the output of nu(e-1,I,J), and one need not search too far past this number. This also suggests that the most efficient way to compute nu(e,I,J) is to compute, successively, nu(s,I,J), for each integer , and this is indeed how the computation is done in most cases.
The user can specify how the search is approached through the option Search, which can take two values: Binary (the default value) and Linear.
i11 : R = ZZ/5[x,y,z];i12 : m = ideal(x, y, z);o12 : Ideal of Ri13 : time nu(2, m, m^2) -- uses binary search (default) -- used 1.82479 secondso13 = 97i14 : time nu(2, m, m^2, Search => Linear) -- but linear search gets luckier -- used 0.597035 secondso14 = 97
If the option ReturnList is changed from its default value of false to true, nu outputs a list of the values , for , at no additional computational cost.
i15 : nu(5, x^2y^4 + y^2z^7 + z^2*x^8, ReturnList => true)o15 = {0, 1, 8, 44, 224, 1124}o15 : List
The same information can be found by setting the option Verbose to true, to request that the values be printed as they are iteratively computed (serving also as a way to monitor the progress of the computation).
As described in the introduction, the integer is the maximal integer such that the -th power of is not contained in the -th Frobenius power of . However,
[TABLE]
where denotes the -th Frobenius root of , as defined in [BMS08]. The option ContainmentTest for nu allows the user to choose which of the two types of containment statements appearing above to use toward the calculation of .
If ContainmentTest is set to StandardPower, then nu(e,I,J) is computed by testing the left-hand containment above, and when it is set to FrobeniusRoot, the right-hand containment is checked. For efficiency reasons, the default value for ContainmentTest is set to FrobeniusRoot if the second argument passed to nu is a polynomial, and is set to StandardPower if the second argument is an ideal.
i16 : R = ZZ/11[x,y,z];i17 : f = x^3 + y^3 + z^3 + xyz;i18 : time nu(3, f) -- ContainmentTest is set to FrobeniusRoot, by default -- used 0.153691 secondso18 = 1209i19 : time nu(3, f, ContainmentTest => StandardPower) -- used 10.1343 secondso19 = 1209
The option ContainmentTest has a third possible value, FrobeniusPower, which allows nu to compute a different but analogous invariant. The first, third, and fourth authors introduced the notion of a (generalized) Frobenius power of an ideal , when is an arbitrary nonnegative integer [HTW18]. When ContainmentTest is set to FrobeniusPower, rather than computing , the function nu computes the maximal integer for which is not contained in . This number is denoted in loc. cit., and equals when is a principal ideal. However, these numbers need not agree in general, as we see below.
i20 : R = ZZ/3[x,y];i21 : m = ideal(x, y);o21 : Ideal of Ri22 : nu(4, m^5)o22 = 32i23 : nu(4, m^5, ContainmentTest => FrobeniusPower)o23 = 26
The last option we describe for nu is AtOrigin. Recall that can be interpreted as the maximum integer for which is not contained in . When the option AtOrigin is set to false (from its default value true), the function nu determines, instead, the maximum integer for which is the unit ideal, which can also be characterized as the minimal integer as varies among all maximal ideals of the ring.
i24 : R = ZZ/7[x,y];i25 : f = (x - 1)^3 - (y - 2)^2;i26 : nu(3, f)o26 = infinityo26 : InfiniteNumberi27 : nu(3, f, AtOrigin => false)o27 = 285
3. isFPT, compareFPT and isFJumpingExponent
The FrobeniusThresholds package contains methods to test candidate values for -pure thresholds and -jumping numbers, even in some singular rings. Consider a -Gorenstein ring of characteristic , whose index is not divisible by . Given a parameter and an element of , the command isFPT(t, f) checks whether is the -pure threshold of , while compareFPT(t, f) provides further information, returning -1, 0, or 1 when is, respectively, less than, equal to, or greater than the -pure threshold of . Setting the option AtOrigin to true tells the function to consider the -pure threshold at the origin.
i1 : R = ZZ/11[x,y,z]/(x^2 - y*(z - 1));i2 : compareFPT(5/11, z - 1)o2 = -1i3 : isFPT(1/2, z - 1)o3 = truei4 : isFPT(1/2, z - 1, AtOrigin => true)o4 = false
The general method applied calls upon functionality from the TestIdeals package. The functions testIdeal and FPureModule therein are used to compute the test ideals and , for . By comparing these test ideals, we can decide whether is the -pure threshold of . For instance, when is a polynomial ring, is the -pure threshold of at the origin if and only if is contained in the homogeneous maximal ideal, but is not.
Since not only the -pure thresholds, but also the higher -jumping numbers, are determined by containment conditions on test ideals, the functionality is extended to determine whether a given number is an -jumping number.
i5 : R = ZZ/13[x,y];i6 : f = y*((y + 1) - (x - 1)^2)(x - 2)(x + y - 2);i7 : isFJumpingExponent(3/4, f)o7 = truei8 : isFPT(3/4, f)o8 = false
4. The fpt function
The core function in the package FrobeniusThresholds is called fpt. Throughout this section, let be a polynomial with coefficients in a finite field of characteristic . When passed the polynomial , the function fpt attempts to find the exact value for the -pure threshold of at the origin, and returns that value, if possible. Otherwise, it returns lower and upper bounds for the -pure threshold, as demonstrated below.
i1 : R = ZZ/5[x,y,z];i2 : fpt(x^3 + y^3 + z^3 + xyz) 4o2 = - 5o2 : QQi3 : fpt(x^5 + y^6 + z^7 + (xyz)^3) 7 2o3 = {--, -} 25 5o3 : List
4.1. The option UseSpecialAlgorithms
The fpt function has an option called UseSpecialAlgorithms, which, when set to true (its default value), tells fpt to first check whether is a diagonal polynomial, a binomial, a form in two variables, or a product of factors in simple normal crossing, in that order. When is a diagonal polynomial, a binomial, or a form in two variables, algorithms of Hernández [Her15, Her14] or Hernández and Teixeira [HT17] are executed to compute the -pure threshold.
i4 : fpt(x^17 + y^20 + z^24) -- a diagonal polynomial 94o4 = --- 625o4 : QQi5 : fpt(x^2y^6z^10 + x^10y^5z^3) -- a binomial 997o5 = ---- 6250o5 : QQi6 : R = ZZ/5[x,y];i7 : fpt(x^2y^6(x + y)^9*(x + 3*y)^10) -- a form in two variables 5787o7 = ----- 78125o7 : QQ
The algorithm for computing the -pure threshold of a binary form requires factoring into linear forms, and that may be difficult or impossible when that factorization occurs in a Galois field of excessively large order. This is a situation when the user will want to set the option UseSpecialAlgorithms to false. However, when a factorization is already known, instead of passing to fpt, the user can pass a list containing all the pairwise coprime linear factors of to fpt, and a list containing their respective multiplicities.
i8 : fpt({x, y, x + y, x + 3*y}, {2, 6, 9, 10}) == ooo8 = true
If UseSpecialAlgorithms is set to true and does not fall into any of the aforementioned cases, then the function fpt next calls isSimpleNormalCrossing(f) (see Section 4.3) to check whether the polynomial is (locally, at the origin) a product of factors that are in simple normal crossing, in which case the -pure threshold is simply the reciprocal of the largest multiplicity occurring in that factorization. Note that the function factor is called whenever isSimpleNormalCrossing is used, and that can sometimes make the verification slow. The user can avoid this by setting UseSpecialAlgorithms to false.
4.2. When no special algorithm applies
We now explain how the function fpt proceeds when no special algorithm is available, or when UseSpecialAlgorithms is set to false. In this case, fpt computes a sequence of lower and upper bounds for the -pure threshold of , and either finds its exact value in this process, or outputs the last of these sets of bounds, which will be the tightest among all computed. The value of the option DepthOfSearch determines the precision of the initial set of bounds, and the option Attempts determines, roughly, how many new, tighter sets of bounds are to be computed.
More specifically, let denote the value of the option DepthOfSearch, which conservatively defaults to 1. The fpt function first computes , which agrees with the output of nu(e,f). It is well known that the -pure threshold of is greater than and at most , and applying [Her12, Proposition 4.2] to the lower bound tells us that the -pure threshold of must be at least . In summary, we know that the -pure threshold of must lie in the closed interval
[TABLE]
With these estimates in hand, the subroutine guessFPT is called to make some “educated guesses” in an attempt to identify the -pure threshold within this interval, or at least narrow down this interval to produce improved estimates. The number of “guesses” is controlled by the option Attempts, which conservatively defaults to 3. If Attempts is set to 0, then guessFPT is bypassed. If Attempts is set to at least 1, then a first check is run to verify whether the right-hand endpoint of the above interval ( ‣ 4.2) is the -pure threshold. We illustrate this below.
i9 : f = x^2*(x + y)^3*(x + 3*y^2)^5;i10 : fpt(f, Attempts => 0) -- a bad estimate 1o10 = {0, -} 5o10 : Listi11 : fpt(f, Attempts => 0, DepthOfSearch => 3) -- a better estimate 21 22o11 = {---, ---} 124 125o11 : Listi12 : fpt(f, Attempts => 1, DepthOfSearch => 3) -- the right-hand endpoint (ν+1)/p^e is the F-pure threshold 22o12 = --- 125o12 : QQ
If Attempts is set to at least 2 and the right-hand endpoint of the interval ( ‣ 4.2) is not the -pure threshold, then a second check is run to verify whether the left-hand endpoint of this interval is the -pure threshold.
i13 : f = x^6y^4 + x^4y^9 + (x^2 + y^3)^3;i14 : fpt(f, Attempts => 1, DepthOfSearch => 3) 17 7o14 = {--, --} 62 25o14 : Listi15 : fpt(f, Attempts => 2, DepthOfSearch => 3) -- the left-hand endpoint ν/(p^e-1) is the F-pure threshold 17o15 = -- 62o15 : QQ
If neither endpoint is the -pure threshold and Attempts is set to more than 2, then additional checks are performed at certain numbers within the interval. First, a number in the interval is selected, according to criteria specified by the value of the option GuessStrategy; we refer the reader to the documentation of this option for more details. Then the function compareFPT is used to test that number. If that “guess” is correct, its value is returned; otherwise, the information returned by compareFPT is used to narrow down the interval, and this process is repeated as many times as specified by Attempts.
i16 : f = x^3y^11(x + y)^8*(x^2 + y^3)^8;i17 : fpt(f, DepthOfSearch => 3, Attempts => 4) 1 4o17 = {--, --} 20 75o17 : Listi18 : fpt(f, DepthOfSearch => 3, Attempts => 6) 13 4o18 = {---, --} 250 75o18 : Listi19 : fpt(f, DepthOfSearch => 3, Attempts => 8) 1o19 = -- 19o19 : QQ
The option Bounds allows the user to specify known lower and upper bounds for the -pure threshold of , in order to speed up computations or to refine previously obtained estimates.
i20 : f = x^7y^5(x + y)^5*(x^2 + y^3)^4;i21 : fpt(f, DepthOfSearch => 3, Attempts => 5) 19 1o21 = {---, --} 250 13o21 : Listi22 : fpt(f, DepthOfSearch => 3, Attempts => 5, Bounds => oo) 45 1o22 = {---, --} 589 13o22 : List
If guessFPT is unsuccessful and FinalAttempt is set to true, the fpt function proceeds to use the convexity of the -signature function and a secant line argument to attempt to narrow down the interval bounding the -pure threshold. If successful, the new lower bound may coincide with the upper bound, in which case we can conclude that it is the desired -pure threshold. If this is not the case, a check is performed to verify if the new lower bound is the -pure threshold.
i23 : f = 2x^10y^8 + x^4y^7 - 2x^3*y^8;i24 : numeric fpt(f, DepthOfSearch => 3)o24 = {.14, .144}o24 : Listi25 : numeric fpt(f, DepthOfSearch => 3, FinalAttempt => true) -- FinalAttempt improves the estimate slightlyo25 = {.142067, .144}o25 : List
The computations performed when FinalAttempt is set to true are often slow, and often fail to improve the estimate, and for this reason, this option should be used sparingly. It is typically more effective to increase the values of Attempts or DepthOfSearch, instead.
i26 : time numeric fpt(f, DepthOfSearch => 3, FinalAttempt => true) -- used 0.72874 secondso26 = {.142067, .144}o26 : Listi27 : time fpt(f, DepthOfSearch => 3, Attempts => 7) -- used 0.452872 seconds 1o27 = - 7o27 : QQi28 : time fpt(f, DepthOfSearch => 4) -- used 0.338834 seconds 1o28 = - 7o28 : QQ
As seen in several examples above, when the exact answer is not found, a list containing the endpoints of an interval containing the -pure threshold of is returned. Whether that interval is open, closed, or a mixed interval depends on the options passed (it will be open whenever Attempts is set to at least 3); if the option Verbose is set to true, the precise interval will be printed.
i29 : fpt(f, DepthOfSearch => 3, FinalAttempt => true, Verbose => true)Starting fpt ...fpt is not 1 ...Verifying if special algorithms apply...Special fpt algorithms were not used ...ν has been computed: ν = nu(3,f) = 17 ...fpt lies in the interval [ν/(p^e-1),(ν+1)/p^e] = [17/124,18/125] ...Starting guessFPT ...The right-hand endpoint is not the fpt ...The left-hand endpoint is not the fpt ...guessFPT narrowed the interval down to (7/50,18/125) ...Beginning F-signature computation ...First F-signature computed: s(f,(ν-1)/p^e) = 793/15625 ...Second F-signature computed: s(f,ν/p^e) = 342/15625 ...Computed F-signature secant line intercept: 8009/56375 ...F-signature intercept is an improved lower bound;Using F-regularity to check if it is the fpt ...The new lower bound is not the fpt ...fpt failed to find the exact answer; try increasing the value of DepthOfSearch or Attempts.fpt lies in the interval (8009/56375,18/125). 8009 18o29 = {-----, ---} 56375 125o29 : List
Finally, we point out that one can set the option AtOrigin from its default value of true to false, to compute the -pure threshold globally. In other words, it computes the minimum of the -pure threshold at all maximal ideals.
i30 : R = ZZ/7[x,y];i31 : f = x*(y - 1)^2 - y*(x - 1)^3;i32 : fpt(f)o32 = 1i33 : fpt(f, AtOrigin => false) 5o33 = - 6o33 : QQ
In this case, most features enabled by UseSpecialAlgorithms => true are ignored, except for the check for simple normal crossings; FinalAttempt => true is also ignored.
4.3. The function isSimpleNormalCrossings
As mentioned earlier, the function isSimpleNormalCrossings verifies whether a polynomial is a product of factors in simple normal crossing. Suppose that has factorization . Recall that its factors are said to be in simple normal crossing at a point if, locally, they form part of a regular system of parameters. The function isSimpleNormalCrossings determines whether has simple normal crossings at the origin by computing the Jacobian matrix of each subset of (evaluated at the origin), and checking that these matrices have the expected rank, and that these subsets generate ideals of the appropriate height.
i34 : R = ZZ/7[x,y,z];i35 : isSimpleNormalCrossing(x^2 - y^2)o35 = truei36 : isSimpleNormalCrossing(x^2 - y*z)o36 = false
The function isSimpleNormalCrossing is exposed to the user, so can be used independent of any -pure threshold calculation. If the user sets its option AtOrigin to false (its default value is true), then the function checks whether the are in simple normal crossing everywhere, which can be much slower, since Jacobian ideals are computed.
i37 : R = QQ[x,y,z];i38 : f = (y - (x - 1)^2)*y^2; --SNC at the origin, but not globallyi39 : isSimpleNormalCrossing(f)o39 = truei40 : isSimpleNormalCrossing(f, AtOrigin => false)o40 = false
5. Possible Future Directions
One natural direction of development would be to incorporate the test ideals when computing -thresholds in the case where the ideal is nonprincipal. The theoretical foundation for computing such test ideals has already largely been worked out in [ST14], but such an update to the FrobeniusThresholds package would require the TestIdeals package to be updated first.
At the moment, the specialized algorithm called by the fpt function for computing the -pure threshold of a homogeneous polynomial in two variables limits us to working with the standard grading on the ambient polynomial ring. Clearly, it is desirable to be able to work with nonstandard gradings as well, and results of [HT17] suggest an algorithm for doing so. Thus, the package could be improved by finalizing and implementing such an algorithm.
Finally, it would be desirable to develop and implement additional algorithms for computing -pure thresholds and -jumping numbers for additional classes of polynomials. The first, third, and fourth authors, along with Josep Álvarez Montaner, Jack Jeffries, and Luis Núñez-Betancourt, are currently working on developing such algorithms. The theoretical foundation of these algorithms lies in polyhedral geometry and integer programming, making them natural candidates for implementation in Macaulay2.
The reference list from the paper itself. Each links out to its DOI / PubMed record.
- 1[BBB + ] E. Bela, A. F. Boix, J. Bruce, D. Ellingson, D. J. Hernández, Z. Kadyrsizova, M. Katzman, S. Malec, M. Mastroeni, M. Mostafazadehfard, M. Robinson, K. Schwede, D. Smolkin, P. Teixeira, and E. E. Witt : Test Ideals: a package for calculations of singularities in positive characteristic. Version 1.01 , available at https://github.com/Macaulay 2/M 2/tree/master/M 2/Macaulay 2/packages .
- 2[BMS 08] M. Blickle, M. Mustaţǎ, and K. E. Smith : Discreteness and rationality of F 𝐹 F -thresholds , Michigan Math. J. 57 (2008), 43–61.
- 3[BST 12] M. Blickle, K. Schwede, and K. Tucker : F 𝐹 F -signature of pairs and the asymptotic behavior of Frobenius splittings , Adv. Math. 231 (2012), no. 6, 3232–3258.
- 4[BHK + 18] A. F. Boix, D. J. Hernández, Z. Kadyrsizova, M. Katzman, S. Malec, M. Mastroeni, M. Mostafazadehfard, M. Robinson, K. Schwede, D. Smolkin, P. Teixeira, and E. E. Witt : The Test Ideals package for Macaulay 2 , preprint, ar Xiv:1810.02770 [math.AC] , 2018.
- 5[BHS + ] J. Bruce, D. J. Hernández, K. Schwede, D. Smolkin, P. Teixeira, and E. E. Witt : Frobenius Thresholds: a package for computing F 𝐹 F -pure thresholds and related invariants. Version 2.0 , available at https://github.com/Macaulay 2/M 2/tree/master/M 2/Macaulay 2/packages .
- 6[Fed 83] R. Fedder : F 𝐹 F -purity and rational singularity , Trans. Amer. Math. Soc. 278 (1983), no. 2, 461–480.
- 7[GS] D. R. Grayson and M. E. Stillman : Macaulay 2, a software system for research in algebraic geometry , available at http://www.math.uiuc.edu/Macaulay 2/ .
- 8[HW 02] N. Hara and K.-I. Watanabe : F 𝐹 F -regular and F 𝐹 F -pure rings vs. log terminal and log canonical singularities , J. Algebraic Geom. 11 (2002), no. 2, 363–392.
