Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 27 additions & 27 deletions src/sage/categories/drinfeld_modules.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,23 +36,23 @@
class DrinfeldModules(Category_over_base_ring):
r"""
This class implements the category of Drinfeld
`\mathbb{F}_q[T]`-modules on a given base field.
`\GF{q}[T]`-modules on a given base field.

Let `\mathbb{F}_q[T]` be a polynomial ring with coefficients in a
finite field `\mathbb{F}_q` and let `K` be a field. Fix a ring
morphism `\gamma: \mathbb{F}_q[T] \to K`; we say that `K` is an
`\mathbb{F}_q[T]`*-field*. Let `K\{\tau\}` be the ring of Ore
Let `\GF{q}[T]` be a polynomial ring with coefficients in a
finite field `\GF{q}` and let `K` be a field. Fix a ring
morphism `\gamma: \GF{q}[T] \to K`; we say that `K` is an
`\GF{q}[T]`-field. Let `K\{\tau\}` be the ring of Ore
polynomials with coefficients in `K`, whose multiplication is given
by the rule `\tau \lambda = \lambda^q \tau` for any `\lambda \in K`.

The extension `K`/`\mathbb{F}_q[T]` (represented as an instance of
The extension `K/\GF{q}[T]` (represented as an instance of
the class :class:`sage.rings.ring_extension.RingExtension`) is the
*base field* of the category; its defining morphism `\gamma` is
called the *base morphism*.

The monic polynomial that generates the kernel of `\gamma` is called
the `\mathbb{F}_q[T]`-*characteristic*, or *function-field
characteristic*, of the base field. We say that `\mathbb{F}_q[T]` is
the `\GF{q}[T]`-*characteristic*, or *function-field
characteristic*, of the base field. We say that `\GF{q}[T]` is
the *function ring* of the category; `K\{\tau\}` is the *Ore
polynomial ring*. The constant coefficient of the category is the
image of `T` under the base morphism.
Expand All @@ -77,7 +77,7 @@ class DrinfeldModules(Category_over_base_ring):

.. RUBRIC:: Properties of the category

The base field is retrieved using the method :meth:`base`.
The base field is retrieved using the method :meth:`base`::

sage: C.base()
Finite Field in z of size 11^4 over its base
Expand All @@ -101,7 +101,7 @@ class DrinfeldModules(Category_over_base_ring):
True

Similarly, the function ring-characteristic of the category is
either `0` or the unique monic polynomial in `\mathbb{F}_q[T]` that
either `0` or the unique monic polynomial in `\GF{q}[T]` that
generates the kernel of the base::

sage: C.characteristic()
Expand All @@ -123,7 +123,7 @@ class DrinfeldModules(Category_over_base_ring):
True

sage: C.ore_polring()
Ore Polynomial Ring in t over Finite Field in z of size 11^4 twisted by z |--> z^11
Ore Polynomial Ring in τ over Finite Field in z of size 11^4 twisted by z |--> z^11
sage: C.ore_polring() is phi.ore_polring()
True

Expand All @@ -135,7 +135,7 @@ class DrinfeldModules(Category_over_base_ring):

sage: psi = C.object([p_root, 1])
sage: psi
Drinfeld module defined by T |--> t + z^3 + 7*z^2 + 6*z + 10
Drinfeld module defined by T |--> τ + z^3 + 7*z^2 + 6*z + 10
sage: psi.category() is C
True

Expand Down Expand Up @@ -207,7 +207,7 @@ class DrinfeldModules(Category_over_base_ring):
TypeError: function ring base must be a finite field
"""

def __init__(self, base_morphism, name='t'):
def __init__(self, base_morphism, name='τ'):
r"""
Initialize ``self``.

Expand All @@ -216,7 +216,7 @@ def __init__(self, base_morphism, name='t'):
- ``base_field`` -- the base field, which is a ring extension
over a base

- ``name`` -- (default: ``'t'``) the name of the Ore polynomial
- ``name`` -- (default: ``'τ'``) the name of the Ore polynomial
variable

TESTS::
Expand All @@ -227,7 +227,7 @@ def __init__(self, base_morphism, name='t'):
sage: p_root = z^3 + 7*z^2 + 6*z + 10
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
sage: C = phi.category()
sage: ore_polring.<t> = OrePolynomialRing(K, K.frobenius_endomorphism())
sage: ore_polring.<τ> = OrePolynomialRing(K, K.frobenius_endomorphism())
sage: C._ore_polring is ore_polring
True
sage: C._function_ring is A
Expand Down Expand Up @@ -364,7 +364,7 @@ def A_field(self):
This is an instance of the class
:class:`sage.rings.ring_extension.RingExtension`.

NOTE::
.. NOTE::

This method has the same behavior as :meth:`base`.

Expand Down Expand Up @@ -406,7 +406,7 @@ def base_morphism(self):
def base_over_constants_field(self):
r"""
Return the base field, seen as an extension over the constants
field `\mathbb{F}_q`.
field `\GF{q}`.

EXAMPLES::

Expand Down Expand Up @@ -507,7 +507,7 @@ def object(self, gen):

sage: phi = C.object([p_root, 0, 1])
sage: phi
Drinfeld module defined by T |--> t^2 + z^3 + 7*z^2 + 6*z + 10
Drinfeld module defined by T |--> τ^2 + z^3 + 7*z^2 + 6*z + 10
sage: t = phi.ore_polring().gen()
sage: C.object(t^2 + z^3 + 7*z^2 + 6*z + 10) is phi
True
Expand All @@ -534,7 +534,7 @@ def ore_polring(self):
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
sage: C = phi.category()
sage: C.ore_polring()
Ore Polynomial Ring in t over Finite Field in z of size 11^4 twisted by z |--> z^11
Ore Polynomial Ring in τ over Finite Field in z of size 11^4 twisted by z |--> z^11
"""
return self._ore_polring

Expand Down Expand Up @@ -600,7 +600,7 @@ def A_field(self):
This is an instance of the class
:class:`sage.rings.ring_extension.RingExtension`.

NOTE::
.. NOTE::

This method has the same behavior as :meth:`base`.

Expand All @@ -623,7 +623,7 @@ def base(self):
This is an instance of the class
:class:`sage.rings.ring_extension.RingExtension`.

NOTE::
.. NOTE::

This method has the same behavior as :meth:`A_field`.

Expand Down Expand Up @@ -675,7 +675,7 @@ def base_morphism(self):
def base_over_constants_field(self):
r"""
Return the base field, seen as an extension over the constants
field `\mathbb{F}_q`.
field `\GF{q}`.

This is an instance of the class
:class:`sage.rings.ring_extension.RingExtension`.
Expand Down Expand Up @@ -754,7 +754,7 @@ def constant_coefficient(self):
sage: phi.constant_coefficient() == p_root
True

Let `\mathbb{F}_q[T]` be the function ring, and let `\gamma` be
Let `\GF{q}[T]` be the function ring, and let `\gamma` be
the base of the Drinfeld module. The constant coefficient is
`\gamma(T)`::

Expand All @@ -769,7 +769,7 @@ def constant_coefficient(self):
sage: t = phi.ore_polring().gen()
sage: psi = C.object(phi.constant_coefficient() + t^3)
sage: psi
Drinfeld module defined by T |--> t^3 + 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
Drinfeld module defined by T |--> τ^3 + 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12

Reciprocally, it is impossible to create two Drinfeld modules in
this category if they do not share the same constant
Expand All @@ -795,7 +795,7 @@ def ore_polring(self):
sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])
sage: S = phi.ore_polring()
sage: S
Ore Polynomial Ring in t over Finite Field in z12 of size 5^12 twisted by z12 |--> z12^(5^2)
Ore Polynomial Ring in τ over Finite Field in z12 of size 5^12 twisted by z12 |--> z12^(5^2)

The Ore polynomial ring can also be retrieved from the category
of the Drinfeld module::
Expand Down Expand Up @@ -824,8 +824,8 @@ def ore_variable(self):
sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])

sage: phi.ore_polring()
Ore Polynomial Ring in t over Finite Field in z12 of size 5^12 twisted by z12 |--> z12^(5^2)
Ore Polynomial Ring in τ over Finite Field in z12 of size 5^12 twisted by z12 |--> z12^(5^2)
sage: phi.ore_variable()
t
τ
"""
return self.category().ore_polring().gen()
16 changes: 8 additions & 8 deletions src/sage/rings/function_field/drinfeld_modules/action.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@
class DrinfeldModuleAction(Action):
r"""
This class implements the module action induced by a Drinfeld
`\mathbb{F}_q[T]`-module.
`\GF{q}[T]`-module.

Let `\phi` be a Drinfeld `\mathbb{F}_q[T]`-module over a field `K`
Let `\phi` be a Drinfeld `\GF{q}[T]`-module over a field `K`
and let `L/K` be a field extension. Let `x \in L` and let `a` be a
function ring element; the action is defined as `(a, x) \mapsto
\phi_a(x)`.
Expand All @@ -42,12 +42,12 @@ class DrinfeldModuleAction(Action):
.. NOTE::

The user should never explicitly instantiate the class
`DrinfeldModuleAction`.
:class:`DrinfeldModuleAction`.

.. WARNING::

This class may be replaced later on. See issues #34833 and
#34834.
This class may be replaced later on. See issues
:issue:`34833` and :issue:`34834`.

INPUT: the Drinfeld module

Expand All @@ -60,7 +60,7 @@ class DrinfeldModuleAction(Action):
sage: action = phi.action()
sage: action
Action on Finite Field in z of size 11^2 over its base
induced by Drinfeld module defined by T |--> t^3 + z
induced by Drinfeld module defined by T |--> τ^3 + z

The action on elements is computed as follows::

Expand Down Expand Up @@ -154,7 +154,7 @@ def _latex_(self):
sage: phi = DrinfeldModule(A, [z, 0, 0, 1])
sage: action = phi.action()
sage: latex(action)
\text{Action{ }on{ }}\Bold{F}_{11^{2}}\text{{ }induced{ }by{ }}\phi: T \mapsto t^{3} + z
\text{Action{ }on{ }}\Bold{F}_{11^{2}}\text{{ }induced{ }by{ }}\phi: T \mapsto τ^{3} + z
"""
return f'\\text{{Action{{ }}on{{ }}}}' \
f'{latex(self._base)}\\text{{{{ }}' \
Expand All @@ -174,7 +174,7 @@ def _repr_(self):
sage: phi = DrinfeldModule(A, [z, 0, 0, 1])
sage: action = phi.action()
sage: action
Action on Finite Field in z of size 11^2 over its base induced by Drinfeld module defined by T |--> t^3 + z
Action on Finite Field in z of size 11^2 over its base induced by Drinfeld module defined by T |--> τ^3 + z
"""
return f'Action on {self._base} induced by ' \
f'{self._drinfeld_module}'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@

class DrinfeldModule_charzero(DrinfeldModule):
r"""
This class implements Drinfeld `\mathbb{F}_q[T]`-modules defined
over fields of `\mathbb{F}_q[T]`-characteristic zero.
This class implements Drinfeld `\GF{q}[T]`-modules defined
over fields of `\GF{q}[T]`-characteristic zero.

Recall that the `\mathbb{F}_q[T]`-*characteristic* is defined as the
Recall that the `\GF{q}[T]`-*characteristic* is defined as the
kernel of the underlying structure morphism. For general definitions
and help on Drinfeld modules, see class
:class:`sage.rings.function_fields.drinfeld_module.drinfeld_module.DrinfeldModule`.
Expand All @@ -59,7 +59,7 @@ class DrinfeldModule_charzero(DrinfeldModule):
sage: A.<T> = GF(3)[]
sage: phi = DrinfeldModule(A, [T, 1])
sage: phi
Drinfeld module defined by T |--> t + T
Drinfeld module defined by T |--> τ + T

::

Expand Down Expand Up @@ -96,18 +96,18 @@ class DrinfeldModule_charzero(DrinfeldModule):
sage: phi.goss_polynomial(3)
X^3 + (1/(T^2 + T))*X^2

.. RUBRIC:: Base fields of `\mathbb{F}_q[T]`-characteristic zero
.. RUBRIC:: Base fields of `\GF{q}[T]`-characteristic zero

The base fields need not only be fraction fields of polynomials
ring. In the following example, we construct a Drinfeld module over
`\mathbb{F}_q((1/T))`, the completion of the rational function field
`\GF{q}((1/T))`, the completion of the rational function field
at the place `1/T`::

sage: A.<T> = GF(2)[]
sage: L.<s> = LaurentSeriesRing(GF(2)) # s = 1/T
sage: phi = DrinfeldModule(A, [1/s, s + s^2 + s^5 + O(s^6), 1+1/s])
sage: phi(T)
(s^-1 + 1)*t^2 + (s + s^2 + s^5 + O(s^6))*t + s^-1
(s^-1 + 1)*τ^2 + (s + s^2 + s^5 + O(s^6))*τ + s^-1

One can also construct Drinfeld modules over SageMath's global
function fields::
Expand All @@ -116,7 +116,7 @@ class DrinfeldModule_charzero(DrinfeldModule):
sage: K.<z> = FunctionField(GF(5)) # z = T
sage: phi = DrinfeldModule(A, [z, 1, z^2])
sage: phi(T)
z^2*t^2 + t + z
z^2*τ^2 + τ + z
"""
@cached_method
def _compute_coefficient_exp(self, k):
Expand Down Expand Up @@ -157,7 +157,7 @@ def exponential(self, prec=Infinity, name='z'):
Return the exponential of this Drinfeld module.

Note that the exponential is only defined when the
`\mathbb{F}_q[T]`-characteristic is zero.
`\GF{q}[T]`-characteristic is zero.

INPUT:

Expand Down Expand Up @@ -283,7 +283,7 @@ def logarithm(self, prec=Infinity, name='z'):

By definition, the logarithm is the compositional inverse of the
exponential (see :meth:`exponential`). Note that the logarithm
is only defined when the `\mathbb{F}_q[T]`-characteristic is
is only defined when the `\GF{q}[T]`-characteristic is
zero.

INPUT:
Expand Down Expand Up @@ -448,7 +448,7 @@ class DrinfeldModule_rational(DrinfeldModule_charzero):
sage: Fq = GF(q)
sage: A.<T> = Fq[]
sage: C = DrinfeldModule(A, [T, 1]); C
Drinfeld module defined by T |--> t + T
Drinfeld module defined by T |--> τ + T
sage: type(C)
<class 'sage.rings.function_field.drinfeld_modules.charzero_drinfeld_module.DrinfeldModule_rational_with_category'>
"""
Expand All @@ -471,7 +471,7 @@ def coefficient_in_function_ring(self, n):
sage: phi.coefficient_in_function_ring(2)
T^2

Compare with the method meth:`coefficient`::
Compare with the method :meth:`coefficient`::

sage: phi.coefficient(2)
U^2
Expand Down Expand Up @@ -556,7 +556,7 @@ def class_polynomial(self):
sage: Fq = GF(q)
sage: A.<T> = Fq[]
sage: C = DrinfeldModule(A, [T, 1]); C
Drinfeld module defined by T |--> t + T
Drinfeld module defined by T |--> τ + T
sage: C.class_polynomial()
1

Expand Down
Loading
Loading