Skip to content

Commit 481015e

Browse files
author
Release Manager
committed
sagemathgh-40432: Implement relative Frobenius for Drinfeld modules This PR implements the relative Frobenius for Drinfeld modules. ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. --> - [x] The title is concise and informative. - [x] The description explains in detail what this PR is about. - [ ] I have linked a relevant issue or discussion. - [x] I have created tests covering the changes. - [x] I have updated the documentation and checked the documentation preview. ### ⌛ Dependencies sagemath#40430 URL: sagemath#40432 Reported by: Xavier Caruso Reviewer(s): Antoine Leudière, Volker Braun, Xavier Caruso
2 parents e2d3e7c + d315182 commit 481015e

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

src/sage/rings/function_field/drinfeld_modules/drinfeld_module.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2057,3 +2057,67 @@ def scalar_multiplication(self, x):
20572057
if not self.function_ring().has_coerce_map_from(x.parent()):
20582058
raise ValueError("%s is not element of the function ring" % x)
20592059
return self.Hom(self)(x)
2060+
2061+
def frobenius_relative(self, n=1):
2062+
r"""
2063+
Return the `n`-th iterate relative Frobenius of this Drinfeld module.
2064+
2065+
By definition, the relative Frobenius is the isogeny represented by
2066+
the Ore polynomial `\tau^d` where `d` is the degree of the characteristic
2067+
of this Drinfeld module (which is also the degree of `\gamma(T)` over
2068+
`\mathbb F_q`, where `\gamma` is the base morphism `\mathbb F_q[T] \to K`).
2069+
2070+
INPUT:
2071+
2072+
- ``n`` -- a nonnegative integer (default: ``1``)
2073+
2074+
EXAMPLES::
2075+
2076+
sage: Fq = GF(5)
2077+
sage: A.<T> = Fq[]
2078+
sage: K.<z> = Fq.extension(3)
2079+
sage: phi = DrinfeldModule(A, [1, z, z])
2080+
sage: phi.frobenius_relative()
2081+
Drinfeld Module morphism:
2082+
From: Drinfeld module defined by T |--> z*τ^2 + z*τ + 1
2083+
To: Drinfeld module defined by T |--> (2*z^2 + 4*z + 4)*τ^2 + (2*z^2 + 4*z + 4)*τ + 1
2084+
Defn: τ
2085+
sage: phi.frobenius_relative(2)
2086+
Drinfeld Module morphism:
2087+
From: Drinfeld module defined by T |--> z*τ^2 + z*τ + 1
2088+
To: Drinfeld module defined by T |--> (3*z^2 + 1)*τ^2 + (3*z^2 + 1)*τ + 1
2089+
Defn: τ^2
2090+
2091+
If `K` is finite and `n` is the degree of `K` over `\mathbb F_q(\gamma(T))`,
2092+
we obtain the Frobenius endomorphism::
2093+
2094+
sage: phi.frobenius_relative(3) == phi.frobenius_endomorphism()
2095+
True
2096+
2097+
In particular, when `\gamma(T)` generates the field `K`, the relative
2098+
Frobenius is the same as the Frobenius endomorphism::
2099+
2100+
sage: psi = DrinfeldModule(A, [z, z, 1])
2101+
sage: psi.frobenius_relative()
2102+
Endomorphism of Drinfeld module defined by T |--> τ^2 + z*τ + z
2103+
Defn: τ^3
2104+
sage: psi.frobenius_endomorphism()
2105+
Endomorphism of Drinfeld module defined by T |--> τ^2 + z*τ + z
2106+
Defn: τ^3
2107+
2108+
When the characteristic is zero, the relative Frobenius is not defined
2109+
and an error is raised::
2110+
2111+
sage: R.<z> = Fq[]
2112+
sage: K.<z> = Frac(R)
2113+
sage: phi = DrinfeldModule(A, [1, z])
2114+
sage: phi.frobenius_relative()
2115+
Traceback (most recent call last):
2116+
...
2117+
NotImplementedError: function ring characteristic not implemented in this case
2118+
"""
2119+
tau = self.ore_variable()
2120+
d = self.characteristic().degree()
2121+
if d < 0:
2122+
raise ValueError("the characteristic of the Drinfeld module must be nonzero")
2123+
return self.hom(tau**(n*d))

0 commit comments

Comments
 (0)