In a polynomial ring $R = k[x_1, \ldots, x_n]$ with cofficients in a field of positive characteristic $p$, the $p^e$-th Frobenius root $I^{[1/p^e]}$ of an ideal $I$ is the smallest ideal $J$ such that $I\subseteq J^{[p^e]}$ (= frobeniusPower(p^e, J)). Similarly, if $M$ is a submodule of $R^k$, the $p^e$-th Frobenius root of $M$, denoted $M^{[1/p^e]}$, is the smallest submodule $V$ of $R^k$ such that $M\subseteq V^{[p^e]}$. The function frobeniusRoot computes such ideals and submodules.
There are many ways to call frobeniusRoot. The simplest way is to call frobeniusRoot(e, I), which computes $I^{[1/p^e]}$.
i1 : R = ZZ/5[x,y,z]; |
i2 : I = ideal(x^50*z^95, y^100 + z^27); o2 : Ideal of R |
i3 : frobeniusRoot(2, I) 4 o3 = ideal (z, y ) o3 : Ideal of R |
The function frobeniusRoot works over arbitrary finite fields.
i4 : p = 3; |
i5 : R = GF(p^2)[x,y,z]; |
i6 : I = ideal(a^(2*p)*x^p + y*z^p + x^p*y^p); o6 : Ideal of R |
i7 : frobeniusRoot(1, I) o7 = ideal (z, x*y + (a + 1)x) o7 : Ideal of R |
In the following example, for a submodule $M$ of $R^2$, frobeniusRoot(1, M) computes the smallest submodule $V$ of $R^2$ such that $M \subseteq V^{[2]}$.
i8 : R = ZZ/2[a,b,c,d]; |
i9 : A = matrix {{a^4 + a*b*c^2 + a*b*c*d, a^2* b}, {a^2*c*d^3 , a^3* c*d + a^3 *d^2 + b*c*d^3}}; 2 2 o9 : Matrix R <--- R |
i10 : M = image A; |
i11 : frobeniusRoot(1, M) o11 = image {-2} | 1 0 0 | {0} | 0 d a | 2 o11 : R-module, submodule of R |
For ease of use, one can also simply pass a matrix $A$ whose image is $M$, and frobeniusRoot(1, A) returns a matrix whose image is $V$.
i12 : frobeniusRoot(1, A) o12 = {-2} | 1 0 0 | {0} | 0 d a | 2 3 o12 : Matrix R <--- R |
Often, one wants to compute a Frobenius root of some product of powers of ideals, $I_1^{a_1}\cdots I_n^{a_n}$. This is best accomplished by calling frobeniusRoot(e, \{a_1,\ldots,a_n\}, \{I_1,\ldots,I_n\}).
i13 : R = ZZ/5[x,y,z]; |
i14 : I1 = ideal(x^10, y^10, z^10); o14 : Ideal of R |
i15 : I2 = ideal(x^20*y^100, x + z^100); o15 : Ideal of R |
i16 : I3 = ideal(x^50*y^50*z^50); o16 : Ideal of R |
i17 : time J1 = frobeniusRoot(1, {8, 10, 12}, {I1, I2, I3}); -- used 1.04421 seconds o17 : Ideal of R |
i18 : time J2 = frobeniusRoot(1, I1^8*I2^10*I3^12); -- used 5.67672 seconds o18 : Ideal of R |
i19 : J1 == J2 o19 = true |
For legacy reasons, the last ideal in the list can be specified separately, using frobeniusRoot(e, \{a_1,\ldots,a_n\}, \{I_1,\ldots,I_n\}, I). The last ideal, I, is just raised to the first power.
The following are additional ways of calling frobeniusRoot:
$\bullet$ frobeniusRoot(e, m, I) computes the $p^e$-th Frobenius root of the ideal $I^m$.
$\bullet$ frobeniusRoot(e, a, f) computes the $p^e$-th Frobenius root of the principal ideal ($f^{ a}$).
$\bullet$ frobeniusRoot(e, a, f, I) computes the $p^e$-th Frobenius root of the product $f^{ a}I$.
There are two valid inputs for the option FrobeniusRootStrategy, namely Substitution and MonomialBasis. In the computation of the $p^e$-th Frobenius root of an ideal $I$, each generator $f$ of $I$ is written in the form $f = \sum a_i^{p^e} m_i$, where each $m_i$ is a monomial whose exponents are less than $p^e$; then the collection of all the $a_i$, obtained for all generators of $I$, generates the Frobenius root $I^{[1/p^e]}$. Substitution and MonomialBasis use different methods for gathering these $a_i$, and sometimes one method is faster than the other.
The object frobeniusRoot is a method function with options.