@@ -47,15 +47,15 @@ class DrinfeldModule(Parent, UniqueRepresentation):
47
47
polynomials with coefficients in `K`, whose multiplication is given
48
48
by the rule `\tau \lambda = \lambda^q \tau` for any `\lambda \in K`.
49
49
50
- A Drinfeld `\mathbb{F}_q[T]`-module over the ` base
51
- \mathbb{F}_q[T]`-field `K` is an `\mathbb{F}_q`-algebra morphism
50
+ A Drinfeld `\mathbb{F}_q[T]`-module over the base
51
+ ` \mathbb{F}_q[T]`-field `K` is an `\mathbb{F}_q`-algebra morphism
52
52
`\phi: \mathbb{F}_q[T] \to K\{\tau\}` such that `\Im(\phi) \not\subset K`
53
53
and `\phi` agrees with `\gamma` on `\mathbb{F}_q`.
54
54
55
55
For `a` in `\mathbb{F}_q[T]`, `\phi(a)` is denoted `\phi_a`.
56
56
57
57
The Drinfeld `\mathbb{F}_q[T]`-module `\phi` is uniquely determined
58
- by the image `\phi_T` of `T` — this serves as input of the class.
58
+ by the image `\phi_T` of `T`; this serves as input of the class.
59
59
60
60
.. NOTE::
61
61
@@ -84,8 +84,8 @@ class DrinfeldModule(Parent, UniqueRepresentation):
84
84
85
85
sage: Fq = GF(49)
86
86
sage: A.<T> = Fq[]
87
- sage: K.<z> = Frac(A)
88
- sage: psi = DrinfeldModule(A, [z , T+1])
87
+ sage: K = Frac(A)
88
+ sage: psi = DrinfeldModule(A, [K(T) , T+1])
89
89
sage: psi
90
90
Drinfeld module defined by T |--> (T + 1)*t + T
91
91
@@ -111,8 +111,10 @@ class DrinfeldModule(Parent, UniqueRepresentation):
111
111
112
112
- ``function_ring`` -- a univariate polynomial ring whose base field
113
113
is a finite field
114
+
114
115
- ``gen`` -- the generator of the Drinfeld module; as a list of
115
116
coefficients or an Ore polynomial
117
+
116
118
- ``name`` (default: ``'t'``) -- the name of the Ore polynomial ring
117
119
generator
118
120
@@ -131,7 +133,7 @@ class DrinfeldModule(Parent, UniqueRepresentation):
131
133
.. NOTE::
132
134
133
135
Note that the definition of the base field is implicit; it is
134
- automatically defined as the compositum of all the parents of
136
+ automatically defined as the compositum of all the parents of
135
137
the coefficients.
136
138
137
139
The above Drinfeld module is finite; it can also be infinite::
@@ -337,7 +339,7 @@ class DrinfeldModule(Parent, UniqueRepresentation):
337
339
sage: identity_morphism.ore_polynomial()
338
340
1
339
341
340
- It is easy to check if a morphism is an isogeny, endomorphism or
342
+ One checks if a morphism is an isogeny, endomorphism or
341
343
isomorphism::
342
344
343
345
sage: frobenius_endomorphism.is_isogeny()
@@ -355,17 +357,17 @@ class DrinfeldModule(Parent, UniqueRepresentation):
355
357
356
358
.. RUBRIC:: The Vélu formula
357
359
358
- Let ``ore_pol `` be a nonzero Ore polynomial. We can decide if there
359
- exists a Drinfeld module ``psi`` such that ``ore_pol`` is an isogeny
360
- from ``self`` to ``psi``. If so, we find ``psi`` ::
360
+ Let ``P `` be a nonzero Ore polynomial. We can decide if ``P``
361
+ defines an isogeny with a given domain and, if it does, find
362
+ the codomain ::
361
363
362
- sage: ore_pol = (2*z^6 + z^3 + 2*z^2 + z + 2)*t + z^11 + 2*z^10 + 2*z^9 + 2*z^8 + z^7 + 2*z^6 + z^5 + z^3 + z^2 + z
363
- sage: psi = phi.velu(ore_pol )
364
+ sage: P = (2*z^6 + z^3 + 2*z^2 + z + 2)*t + z^11 + 2*z^10 + 2*z^9 + 2*z^8 + z^7 + 2*z^6 + z^5 + z^3 + z^2 + z
365
+ sage: psi = phi.velu(P )
364
366
sage: psi
365
367
Drinfeld module defined by T |--> (2*z^11 + 2*z^9 + z^6 + 2*z^5 + 2*z^4 + 2*z^2 + 1)*t^2 + (2*z^11 + 2*z^10 + 2*z^9 + z^8 + 2*z^7 + 2*z^6 + z^5 + 2*z^4 + 2*z^2 + 2*z)*t + z
366
- sage: ore_pol in Hom(phi, psi)
368
+ sage: P in Hom(phi, psi)
367
369
True
368
- sage: ore_pol * phi(T) == psi(T) * ore_pol
370
+ sage: P * phi(T) == psi(T) * P
369
371
True
370
372
371
373
If the input does not define an isogeny, an exception is raised:
@@ -519,14 +521,19 @@ def __classcall_private__(cls, function_ring, gen, name='t', latexname=None):
519
521
520
522
- ``function_ring`` -- a univariate polynomial ring whose base
521
523
is a finite field
524
+
522
525
- ``gen`` -- the generator of the Drinfeld module; as a list of
523
526
coefficients or an Ore polynomial
527
+
524
528
- ``name`` (default: ``'t'``) -- the name of the Ore polynomial
525
529
ring gen
530
+
526
531
- ``latexname`` (default: ``None``) -- the LaTeX name of the Drinfeld
527
532
module
528
533
529
- OUTPUT: a DrinfeldModule or FiniteDrinfeldModule
534
+ OUTPUT:
535
+
536
+ A DrinfeldModule or FiniteDrinfeldModule.
530
537
531
538
TESTS::
532
539
@@ -618,17 +625,20 @@ def __init__(self, gen, category, latexname=None):
618
625
"""
619
626
Initialize ``self``.
620
627
621
- Validity of the input is checked in `` __classcall_private__` `.
622
- The `` __init__` ` just saves attributes.
628
+ Validity of the input is checked in meth:` __classcall_private__`.
629
+ The meth:` __init__` just saves attributes.
623
630
624
631
INPUT:
625
632
626
633
- ``function_ring`` -- a univariate polynomial ring whose base
627
634
is a finite field
635
+
628
636
- ``gen`` -- the generator of the Drinfeld module; as a list of
629
637
coefficients or an Ore polynomial
638
+
630
639
- ``name`` (default: ``'t'``) -- the name of the Ore polynomial
631
640
ring gen
641
+
632
642
- ``latexname`` (default: ``None``) -- the LaTeX name of the Drinfeld
633
643
module
634
644
@@ -718,11 +728,10 @@ def _Hom_(self, other, category):
718
728
INPUT:
719
729
720
730
- ``other`` -- the codomain of the homset
731
+
721
732
- ``category`` -- the category in which we consider the
722
733
morphisms, usually ``self.category()``
723
734
724
- OUTPUT: an homset
725
-
726
735
EXAMPLES::
727
736
728
737
sage: Fq = GF(25)
@@ -768,10 +777,8 @@ def _latex_(self):
768
777
r"""
769
778
Return a LaTeX representation of the Drinfeld module.
770
779
771
- If a LaTeX name was given at init. using `latexname`, use the LaTeX
772
- name. Otherwise, create a representation.
773
-
774
- OUTPUT: a string
780
+ If a LaTeX name was given at initialization, we use it.
781
+ Otherwise, we create a representation.
775
782
776
783
EXAMPLES::
777
784
@@ -807,9 +814,7 @@ def _latex_(self):
807
814
808
815
def _repr_ (self ):
809
816
r"""
810
- Return a string representation of the Drinfeld module.
811
-
812
- OUTPUT: a string
817
+ Return a string representation of this Drinfeld module.
813
818
814
819
EXAMPLES::
815
820
@@ -844,7 +849,7 @@ def action(self):
844
849
sage: action
845
850
Action on Finite Field in z12 of size 5^12 over its base induced by Drinfeld module defined by T |--> z12^5*t^2 + z12^3*t + 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
846
851
847
- The action on elements is computed as follows::
852
+ The action on elements is computed as follows::
848
853
849
854
sage: P = T^2 + T + 1
850
855
sage: a = z12 + 1
@@ -905,8 +910,6 @@ def coefficients(self, sparse=True):
905
910
906
911
- ``sparse`` -- a boolean
907
912
908
- OUTPUT: a list of elements in the base codomain
909
-
910
913
EXAMPLES::
911
914
912
915
sage: Fq = GF(25)
@@ -939,8 +942,6 @@ def gen(self):
939
942
r"""
940
943
Return the generator of the Drinfeld module.
941
944
942
- OUTPUT: an Ore polynomial
943
-
944
945
EXAMPLES::
945
946
946
947
sage: Fq = GF(25)
@@ -973,8 +974,6 @@ def height(self):
973
974
A rank two Drinfeld module is supersingular if and only if its
974
975
height equals its rank.
975
976
976
- OUTPUT: an integer
977
-
978
977
EXAMPLES::
979
978
980
979
sage: Fq = GF(25)
@@ -1015,15 +1014,14 @@ def height(self):
1015
1014
'function field characteristic' )
1016
1015
else :
1017
1016
p = self .characteristic ()
1018
- return Integer (( self (p ).valuation ()) // ( p .degree () ))
1017
+ return Integer (self (p ).valuation () // p .degree ())
1019
1018
except NotImplementedError :
1020
1019
raise NotImplementedError ('height not implemented in this case' )
1021
1020
1022
1021
def is_finite (self ):
1023
1022
r"""
1024
- Return ``True`` whether the Drinfeld module is finite.
1025
-
1026
- OUTPUT: a boolean
1023
+ Return ``True`` if this Drinfeld module is finite,
1024
+ ``False`` otherwise.
1027
1025
1028
1026
EXAMPLES::
1029
1027
0 commit comments