@@ -70,7 +70,7 @@ class DrinfeldModules(Category_over_base_ring):
70
70
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
71
71
sage: C = phi.category()
72
72
sage: C
73
- Category of Drinfeld modules over Finite Field in z of size 11^4 over its base
73
+ Category of Drinfeld modules over Finite Field in z of size 11^4
74
74
75
75
The output tells the user that the category is only defined by its
76
76
base.
@@ -88,7 +88,7 @@ class DrinfeldModules(Category_over_base_ring):
88
88
sage: C.base_morphism()
89
89
Ring morphism:
90
90
From: Univariate Polynomial Ring in T over Finite Field of size 11
91
- To: Finite Field in z of size 11^4 over its base
91
+ To: Finite Field in z of size 11^4
92
92
Defn: T |--> z^3 + 7*z^2 + 6*z + 10
93
93
94
94
The so-called constant coefficient --- which is the same for all
@@ -123,7 +123,7 @@ class DrinfeldModules(Category_over_base_ring):
123
123
True
124
124
125
125
sage: C.ore_polring()
126
- Ore Polynomial Ring in t over Finite Field in z of size 11^4 over its base twisted by Frob
126
+ Ore Polynomial Ring in t over Finite Field in z of size 11^4 twisted by z |--> z^11
127
127
sage: C.ore_polring() is phi.ore_polring()
128
128
True
129
129
@@ -165,20 +165,26 @@ class DrinfeldModules(Category_over_base_ring):
165
165
sage: K.<z> = Fq.extension(4)
166
166
sage: from sage.categories.drinfeld_modules import DrinfeldModules
167
167
sage: base = Hom(A, K)(0)
168
- sage: C = DrinfeldModules(base)
168
+ sage: C = DrinfeldModules(base) # known bug (blankline)
169
+ <BLANKLINE>
169
170
Traceback (most recent call last):
170
171
...
171
172
TypeError: base field must be a ring extension
172
173
173
174
::
174
175
176
+ Note that `C.base_morphism()` has codomain `K` while
177
+ the defining morphism of `C.base()` has codomain `K` viewed
178
+ as an `A`-field. Thus, they differ::
179
+
175
180
sage: C.base().defining_morphism() == C.base_morphism()
176
- True
181
+ False
177
182
178
183
::
179
184
180
185
sage: base = Hom(A, A)(1)
181
- sage: C = DrinfeldModules(base)
186
+ sage: C = DrinfeldModules(base) # known bug (blankline)
187
+ <BLANKLINE>
182
188
Traceback (most recent call last):
183
189
...
184
190
TypeError: base field must be a ring extension
@@ -203,7 +209,7 @@ class DrinfeldModules(Category_over_base_ring):
203
209
TypeError: function ring base must be a finite field
204
210
"""
205
211
206
- def __init__ (self , base_field , name = 't' ):
212
+ def __init__ (self , base_morphism , name = 't' ):
207
213
r"""
208
214
Initialize ``self``.
209
215
@@ -223,34 +229,23 @@ def __init__(self, base_field, name='t'):
223
229
sage: p_root = z^3 + 7*z^2 + 6*z + 10
224
230
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
225
231
sage: C = phi.category()
226
- sage: ore_polring.<t> = OrePolynomialRing(phi.base(), phi.base() .frobenius_endomorphism())
232
+ sage: ore_polring.<t> = OrePolynomialRing(K, K .frobenius_endomorphism())
227
233
sage: C._ore_polring is ore_polring
228
234
True
229
- sage: i = phi.base().coerce_map_from(K)
230
- sage: base_morphism = Hom(A, K)(p_root)
231
- sage: C.base() == K.over(base_morphism)
232
- True
233
- sage: C._base_morphism == i * base_morphism
234
- True
235
235
sage: C._function_ring is A
236
236
True
237
- sage: C._constant_coefficient == base_morphism (T)
237
+ sage: C._constant_coefficient == C._base_morphism (T)
238
238
True
239
239
sage: C._characteristic(C._constant_coefficient)
240
240
0
241
241
"""
242
- # Check input is a ring extension
243
- if not isinstance (base_field , RingExtension_generic ):
244
- raise TypeError ('base field must be a ring extension' )
245
- base_morphism = base_field .defining_morphism ()
246
242
self ._base_morphism = base_morphism
243
+ function_ring = self ._function_ring = base_morphism .domain ()
244
+ base_field = self ._base_field = base_morphism .codomain ()
247
245
# Check input is a field
248
246
if not base_field .is_field ():
249
247
raise TypeError ('input must be a field' )
250
- self ._base_field = base_field
251
- self ._function_ring = base_morphism .domain ()
252
248
# Check domain of base morphism is Fq[T]
253
- function_ring = self ._function_ring
254
249
if not isinstance (function_ring , PolynomialRing_generic ):
255
250
raise NotImplementedError ('function ring must be a polynomial '
256
251
'ring' )
@@ -262,7 +257,7 @@ def __init__(self, base_field, name='t'):
262
257
Fq = function_ring_base
263
258
A = function_ring
264
259
T = A .gen ()
265
- K = base_field # A ring extension
260
+ K = base_field
266
261
# Build K{t}
267
262
d = log (Fq .cardinality (), Fq .characteristic ())
268
263
tau = K .frobenius_endomorphism (d )
@@ -284,7 +279,7 @@ def __init__(self, base_field, name='t'):
284
279
i = A .coerce_map_from (Fq )
285
280
Fq_to_K = self ._base_morphism * i
286
281
self ._base_over_constants_field = base_field .over (Fq_to_K )
287
- super ().__init__ (base = base_field )
282
+ super ().__init__ (base = base_field . over ( base_morphism ) )
288
283
289
284
def _latex_ (self ):
290
285
r"""
@@ -321,7 +316,7 @@ def _repr_(self):
321
316
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
322
317
sage: C = phi.category()
323
318
sage: C
324
- Category of Drinfeld modules over Finite Field in z of size 11^4 over its base
319
+ Category of Drinfeld modules over Finite Field in z of size 11^4
325
320
"""
326
321
return f'Category of Drinfeld modules over { self ._base_field } '
327
322
@@ -378,7 +373,7 @@ def base_morphism(self):
378
373
sage: C.base_morphism()
379
374
Ring morphism:
380
375
From: Univariate Polynomial Ring in T over Finite Field of size 11
381
- To: Finite Field in z of size 11^4 over its base
376
+ To: Finite Field in z of size 11^4
382
377
Defn: T |--> z^3 + 7*z^2 + 6*z + 10
383
378
384
379
sage: C.constant_coefficient() == C.base_morphism()(T)
@@ -517,7 +512,7 @@ def ore_polring(self):
517
512
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
518
513
sage: C = phi.category()
519
514
sage: C.ore_polring()
520
- Ore Polynomial Ring in t over Finite Field in z of size 11^4 over its base twisted by Frob
515
+ Ore Polynomial Ring in t over Finite Field in z of size 11^4 twisted by z |--> z^11
521
516
"""
522
517
return self ._ore_polring
523
518
@@ -615,17 +610,16 @@ def base_morphism(self):
615
610
sage: phi.base_morphism()
616
611
Ring morphism:
617
612
From: Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2
618
- To: Finite Field in z12 of size 5^12 over its base
613
+ To: Finite Field in z12 of size 5^12
619
614
Defn: 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
620
615
621
616
The base field can be infinite::
622
617
623
618
sage: sigma = DrinfeldModule(A, [Frac(A).gen(), 1])
624
619
sage: sigma.base_morphism()
625
- Ring morphism :
620
+ Coercion map :
626
621
From: Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2
627
- To: Fraction Field of Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2 over its base
628
- Defn: T |--> T
622
+ To: Fraction Field of Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2
629
623
"""
630
624
return self .category ().base_morphism ()
631
625
@@ -753,7 +747,7 @@ def ore_polring(self):
753
747
sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])
754
748
sage: S = phi.ore_polring()
755
749
sage: S
756
- Ore Polynomial Ring in t over Finite Field in z12 of size 5^12 over its base twisted by Frob^2
750
+ Ore Polynomial Ring in t over Finite Field in z12 of size 5^12 twisted by z12 |--> z12^(5^2)
757
751
758
752
The Ore polynomial ring can also be retrieved from the category
759
753
of the Drinfeld module::
@@ -782,7 +776,7 @@ def ore_variable(self):
782
776
sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])
783
777
784
778
sage: phi.ore_polring()
785
- Ore Polynomial Ring in t over Finite Field in z12 of size 5^12 over its base twisted by Frob^2
779
+ Ore Polynomial Ring in t over Finite Field in z12 of size 5^12 twisted by z12 |--> z12^(5^2)
786
780
sage: phi.ore_variable()
787
781
t
788
782
"""
0 commit comments