The given element $u$ in a polynomial ring $R$ over the prime field $\mathbb{Z}/p$ defines a $p^{-1}$-linear map $\phi: R\to R$; this map consists of multiplication by the polynomial $u$, followed by the Frobenius trace on the polynomial ring $R$. An ideal $I$ of $R$ is $\phi$-compatible if $\phi(I)\subseteq I$ or, equivalently, $u I \subseteq I^{[p]}$. The function compatibleIdeals returns a list of all prime ideals $P$ of $R$ such that:
(a) $uP \subseteq P^{[p]}$, and
(b) $u$ is not in $P^{[p]}$.
Condition (b) is equivalent to the non-vanishing of the corresponding near-splitting of $R/P$. When $\phi$ is surjective, the set of all $\phi$-compatible ideals consists of all intersections of the above prime ideals.
This function is an implementation of the algorithm described in Moty Katzman and Karl Schwede's paper An algorithm for computing compatibly Frobenius split subvarieties, J. Symbolic Comput. 47 (2012), no. 8, pp. 996-1008.
These prime ideals have a "Matlis-dual" interpretation, too. Let $E$ be the injective hull of the residue field of the localization of $R$ at the irrelevant ideal, and let $T: E \rightarrow E$ be the natural Frobenius map. Then $uT$ is a Frobenius map on $E$, and the primes $P$ computed by this function are precisely those for which $uT$ restricts to a nonzero Frobenius map of the annihilator of $P$ on $E$.
The following is a simple example, which is split with the coordinate axes in $\mathbb{A}^2$.
i1 : R = ZZ/3[s,t]; |
i2 : u = s^2*t^2; |
i3 : compatibleIdeals u o3 = {ideal s, ideal (t, s), ideal t} o3 : List |
Here is a more substantial example.
i4 : R = ZZ/2[a,b,c,d,e,f]; |
i5 : u = d*(b*e - d*c)*(d - a*e - b*f + a*c*f); |
i6 : print \ compatibleIdeals u; ideal d ideal (e, d) ideal (f, e, d) ideal (f, e, d, b) ideal (f, e, d, b, a) ideal (f, e, d, c, b, a) ideal (f, e, d, c, b) ideal (f, e, d, a*c + b) ideal (d, b, a) ideal (e, d, b, a) ideal (e, d, c, b, a) ideal (d, b, a, c*f + e) ideal (e, d, b) ideal (e, d, c, b) ideal (e, d, a*c + b) ideal (d, b) ideal (d, b, c*f + e) ideal (d, a*c*f + a*e + b*f) ideal (a*e + d, c*d + b*e, a*c + b) ideal (c*f + e, b*f + d, a*e + d, c*d + b*e, a*c + b) ideal(c*d + b*e) ideal (c*f + e, b*f + d, c*d + b*e) ideal(a*c*f + a*e + b*f + d) |
The option FrobeniusRootStrategy is passed to internal frobeniusRoot calls.
The object compatibleIdeals is a method function with options.