Skip to content

Commit 606d762

Browse files
author
Xavier Caruso
committed
add the argument n, and move code in DrinfeldModule
1 parent e82e19a commit 606d762

File tree

2 files changed

+64
-36
lines changed

2 files changed

+64
-36
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
@@ -2084,3 +2084,67 @@ def scalar_multiplication(self, x):
20842084
if not self.function_ring().has_coerce_map_from(x.parent()):
20852085
raise ValueError("%s is not element of the function ring" % x)
20862086
return self.Hom(self)(x)
2087+
2088+
def frobenius_relative(self, n=1):
2089+
r"""
2090+
Return the `n`-th iterate relative Frobenius of this Drinfeld module.
2091+
2092+
By definition, the relative Frobenius is the isogeny represented by
2093+
the Ore polynomial `tau^d` where `d` is the degree of the characteristic
2094+
of this Drinfeld module (which is also the degree of `\gamma(T)` over
2095+
the `\mathbb F_q`).
2096+
2097+
INPUT:
2098+
2099+
- ``n`` -- a nonnegative integer (default: ``1``)
2100+
2101+
EXAMPLES::
2102+
2103+
sage: Fq = GF(5)
2104+
sage: A.<T> = Fq[]
2105+
sage: K.<z> = Fq.extension(3)
2106+
sage: phi = DrinfeldModule(A, [1, z, z])
2107+
sage: phi.frobenius_relative()
2108+
Drinfeld Module morphism:
2109+
From: Drinfeld module defined by T |--> z*t^2 + z*t + 1
2110+
To: Drinfeld module defined by T |--> (2*z^2 + 4*z + 4)*t^2 + (2*z^2 + 4*z + 4)*t + 1
2111+
Defn: t
2112+
sage: phi.frobenius_relative(2)
2113+
Drinfeld Module morphism:
2114+
From: Drinfeld module defined by T |--> z*t^2 + z*t + 1
2115+
To: Drinfeld module defined by T |--> (3*z^2 + 1)*t^2 + (3*z^2 + 1)*t + 1
2116+
Defn: t^2
2117+
2118+
When `n` is the degree of `F` over `\FF_q(\gamma(T))`, we obtain
2119+
the Frobenius endomorphism::
2120+
2121+
sage: phi.frobenius_relative(3) == phi.frobenius_endomorphism()
2122+
True
2123+
2124+
In particular, when `\gamma(T)` generates the field `K`, the relative
2125+
Frobenius is the same as the Frobenius endomorphism::
2126+
2127+
sage: psi = DrinfeldModule(A, [z, z, 1])
2128+
sage: psi.frobenius_relative()
2129+
Endomorphism of Drinfeld module defined by T |--> t^2 + z*t + z
2130+
Defn: t^3
2131+
sage: psi.frobenius_endomorphism()
2132+
Endomorphism of Drinfeld module defined by T |--> t^2 + z*t + z
2133+
Defn: t^3
2134+
2135+
When the characteristic is zero, the relative Frobenius is not defined
2136+
and an error is raised::
2137+
2138+
sage: R.<z> = Fq[]
2139+
sage: K.<z> = Frac(R)
2140+
sage: phi = DrinfeldModule(A, [1, z])
2141+
sage: phi.frobenius_relative()
2142+
Traceback (most recent call last):
2143+
...
2144+
NotImplementedError: function ring characteristic not implemented in this case
2145+
"""
2146+
tau = self.ore_variable()
2147+
d = self.characteristic().degree()
2148+
if d < 0:
2149+
raise ValueError("the characteristic of the Drinfeld module must be nonzero")
2150+
return self.hom(tau**(n*d))

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

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -907,42 +907,6 @@ def frobenius_trace(self, algorithm=None):
907907
# If all fail, we raise an error
908908
raise NotImplementedError(f'algorithm "{algorithm}" not implemented')
909909

910-
def frobenius_relative(self):
911-
r"""
912-
Return the relative Frobenius of this Drinfeld module, that is
913-
the isogeny of the form `\tau^d` with `d` minimal.
914-
915-
We note that `d` is the degree of `\gamma(T)` over the `\mathbb F_q`.
916-
917-
EXAMPLES::
918-
919-
sage: Fq = GF(5)
920-
sage: A.<T> = Fq[]
921-
sage: K.<z> = Fq.extension(3)
922-
sage: phi = DrinfeldModule(A, [1, z, z])
923-
sage: phi.frobenius_relative()
924-
Drinfeld Module morphism:
925-
From: Drinfeld module defined by T |--> z*t^2 + z*t + 1
926-
To: Drinfeld module defined by T |--> (2*z^2 + 4*z + 4)*t^2 + (2*z^2 + 4*z + 4)*t + 1
927-
Defn: t
928-
929-
When the constant coefficient generates the field `K`, the relative
930-
Frobenius is the same as the Frobenius endomorphism::
931-
932-
sage: psi = DrinfeldModule(A, [z, z, 1])
933-
sage: psi.frobenius_relative()
934-
Endomorphism of Drinfeld module defined by T |--> t^2 + z*t + z
935-
Defn: t^3
936-
sage: psi.frobenius_endomorphism()
937-
Endomorphism of Drinfeld module defined by T |--> t^2 + z*t + z
938-
Defn: t^3
939-
"""
940-
E = self.base_over_constants_field()
941-
z = E(self.constant_coefficient())
942-
d = z.minpoly().degree()
943-
tau = self.ore_variable()
944-
return self.hom(tau**d)
945-
946910
def invert(self, ore_pol):
947911
r"""
948912
Return the preimage of the input under the Drinfeld module, if it

0 commit comments

Comments
 (0)