Drinfeld modules over a base¶
This module provides the class
sage.category.drinfeld_modules.DrinfeldModules.
AUTHORS:
- Antoine Leudière (2022-04) 
- Xavier Caruso (2022-06) 
- class sage.categories.drinfeld_modules.DrinfeldModules(base_field, name='t')[source]¶
- Bases: - Category_over_base_ring- This class implements the category of Drinfeld \(\mathbb{F}_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 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 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 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. - Construction - Generally, Drinfeld modules objects are created before their category, and the category is retrieved as an attribute of the Drinfeld module: - sage: Fq = GF(11) sage: A.<T> = Fq[] sage: K.<z> = Fq.extension(4) 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: C Category of Drinfeld modules over Finite Field in z of size 11^4 over its base - >>> from sage.all import * >>> Fq = GF(Integer(11)) >>> A = Fq['T']; (T,) = A._first_ngens(1) >>> K = Fq.extension(Integer(4), names=('z',)); (z,) = K._first_ngens(1) >>> p_root = z**Integer(3) + Integer(7)*z**Integer(2) + Integer(6)*z + Integer(10) >>> phi = DrinfeldModule(A, [p_root, Integer(0), Integer(0), Integer(1)]) >>> C = phi.category() >>> C Category of Drinfeld modules over Finite Field in z of size 11^4 over its base - The output tells the user that the category is only defined by its base. - Properties of the category - The base field is retrieved using the method - base().- sage: C.base() Finite Field in z of size 11^4 over its base - Equivalently, one can use - base_morphism()to retrieve the base morphism:- sage: C.base_morphism() Ring morphism: From: Univariate Polynomial Ring in T over Finite Field of size 11 To: Finite Field in z of size 11^4 over its base Defn: T |--> z^3 + 7*z^2 + 6*z + 10 - >>> from sage.all import * >>> C.base_morphism() Ring morphism: From: Univariate Polynomial Ring in T over Finite Field of size 11 To: Finite Field in z of size 11^4 over its base Defn: T |--> z^3 + 7*z^2 + 6*z + 10 - The so-called constant coefficient — which is the same for all Drinfeld modules in the category — is simply the image of \(T\) by the base morphism: - sage: C.constant_coefficient() z^3 + 7*z^2 + 6*z + 10 sage: C.base_morphism()(T) == C.constant_coefficient() True - >>> from sage.all import * >>> C.constant_coefficient() z^3 + 7*z^2 + 6*z + 10 >>> C.base_morphism()(T) == C.constant_coefficient() True - Similarly, the function ring-characteristic of the category is either \(0\) or the unique monic polynomial in \(\mathbb{F}_q[T]\) that generates the kernel of the base: - sage: C.characteristic() T^2 + 7*T + 2 sage: C.base_morphism()(C.characteristic()) 0 - >>> from sage.all import * >>> C.characteristic() T^2 + 7*T + 2 >>> C.base_morphism()(C.characteristic()) 0 - The base field, base morphism, function ring and Ore polynomial ring are the same for the category and its objects: - sage: C.base() is phi.base() True sage: C.base_morphism() is phi.base_morphism() True sage: C.function_ring() Univariate Polynomial Ring in T over Finite Field of size 11 sage: C.function_ring() is phi.function_ring() True sage: C.ore_polring() Ore Polynomial Ring in t over Finite Field in z of size 11^4 over its base twisted by Frob sage: C.ore_polring() is phi.ore_polring() True - >>> from sage.all import * >>> C.base() is phi.base() True >>> C.base_morphism() is phi.base_morphism() True >>> C.function_ring() Univariate Polynomial Ring in T over Finite Field of size 11 >>> C.function_ring() is phi.function_ring() True >>> C.ore_polring() Ore Polynomial Ring in t over Finite Field in z of size 11^4 over its base twisted by Frob >>> C.ore_polring() is phi.ore_polring() True - Creating Drinfeld module objects from the category - Calling - object()with an Ore polynomial creates a Drinfeld module object in the category whose generator is the input:- sage: psi = C.object([p_root, 1]) sage: psi Drinfeld module defined by T |--> t + z^3 + 7*z^2 + 6*z + 10 sage: psi.category() is C True - >>> from sage.all import * >>> psi = C.object([p_root, Integer(1)]) >>> psi Drinfeld module defined by T |--> t + z^3 + 7*z^2 + 6*z + 10 >>> psi.category() is C True - Of course, the constant coefficient of the input must be the same as the category: - sage: C.object([z, 1]) Traceback (most recent call last): ... ValueError: constant coefficient must equal that of the category - >>> from sage.all import * >>> C.object([z, Integer(1)]) Traceback (most recent call last): ... ValueError: constant coefficient must equal that of the category - It is also possible to create a random object in the category. The input is the desired rank: - sage: rho = C.random_object(2) sage: rho # random Drinfeld module defined by T |--> (7*z^3 + 7*z^2 + 10*z + 2)*t^2 + (9*z^3 + 5*z^2 + 2*z + 7)*t + z^3 + 7*z^2 + 6*z + 10 sage: rho.rank() == 2 True sage: rho.category() is C True - >>> from sage.all import * >>> rho = C.random_object(Integer(2)) >>> rho # random Drinfeld module defined by T |--> (7*z^3 + 7*z^2 + 10*z + 2)*t^2 + (9*z^3 + 5*z^2 + 2*z + 7)*t + z^3 + 7*z^2 + 6*z + 10 >>> rho.rank() == Integer(2) True >>> rho.category() is C True - Endsets()[source]¶
- Return the category of endsets. - EXAMPLES: - sage: Fq = GF(11) sage: A.<T> = Fq[] sage: K.<z> = Fq.extension(4) 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: from sage.categories.homsets import Homsets sage: C.Endsets() is Homsets().Endsets() True - >>> from sage.all import * >>> Fq = GF(Integer(11)) >>> A = Fq['T']; (T,) = A._first_ngens(1) >>> K = Fq.extension(Integer(4), names=('z',)); (z,) = K._first_ngens(1) >>> p_root = z**Integer(3) + Integer(7)*z**Integer(2) + Integer(6)*z + Integer(10) >>> phi = DrinfeldModule(A, [p_root, Integer(0), Integer(0), Integer(1)]) >>> C = phi.category() >>> from sage.categories.homsets import Homsets >>> C.Endsets() is Homsets().Endsets() True 
 - Homsets()[source]¶
- Return the category of homsets. - EXAMPLES: - sage: Fq = GF(11) sage: A.<T> = Fq[] sage: K.<z> = Fq.extension(4) 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: from sage.categories.homsets import Homsets sage: C.Homsets() is Homsets() True - >>> from sage.all import * >>> Fq = GF(Integer(11)) >>> A = Fq['T']; (T,) = A._first_ngens(1) >>> K = Fq.extension(Integer(4), names=('z',)); (z,) = K._first_ngens(1) >>> p_root = z**Integer(3) + Integer(7)*z**Integer(2) + Integer(6)*z + Integer(10) >>> phi = DrinfeldModule(A, [p_root, Integer(0), Integer(0), Integer(1)]) >>> C = phi.category() >>> from sage.categories.homsets import Homsets >>> C.Homsets() is Homsets() True 
 - class ParentMethods[source]¶
- Bases: - object- base()[source]¶
- Return the base field of this Drinfeld module, viewed as an algebra over the function ring. - This is an instance of the class - sage.rings.ring_extension.RingExtension.- EXAMPLES: - sage: Fq = GF(25) sage: A.<T> = Fq[] sage: K.<z12> = Fq.extension(6) sage: p_root = 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 sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5]) sage: phi.base() Finite Field in z12 of size 5^12 over its base - >>> from sage.all import * >>> Fq = GF(Integer(25)) >>> A = Fq['T']; (T,) = A._first_ngens(1) >>> K = Fq.extension(Integer(6), names=('z12',)); (z12,) = K._first_ngens(1) >>> p_root = Integer(2)*z12**Integer(11) + Integer(2)*z12**Integer(10) + z12**Integer(9) + Integer(3)*z12**Integer(8) + z12**Integer(7) + Integer(2)*z12**Integer(5) + Integer(2)*z12**Integer(4) + Integer(3)*z12**Integer(3) + z12**Integer(2) + Integer(2)*z12 >>> phi = DrinfeldModule(A, [p_root, z12**Integer(3), z12**Integer(5)]) >>> phi.base() Finite Field in z12 of size 5^12 over its base - The base can be infinite: - sage: sigma = DrinfeldModule(A, [Frac(A).gen(), 1]) sage: sigma.base() Fraction Field of Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2 over its base - >>> from sage.all import * >>> sigma = DrinfeldModule(A, [Frac(A).gen(), Integer(1)]) >>> sigma.base() Fraction Field of Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2 over its base 
 - base_morphism()[source]¶
- Return the base morphism of this Drinfeld module. - EXAMPLES: - sage: Fq = GF(25) sage: A.<T> = Fq[] sage: K.<z12> = Fq.extension(6) sage: p_root = 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 sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5]) sage: phi.base_morphism() Ring morphism: From: Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2 To: Finite Field in z12 of size 5^12 over its base 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 - >>> from sage.all import * >>> Fq = GF(Integer(25)) >>> A = Fq['T']; (T,) = A._first_ngens(1) >>> K = Fq.extension(Integer(6), names=('z12',)); (z12,) = K._first_ngens(1) >>> p_root = Integer(2)*z12**Integer(11) + Integer(2)*z12**Integer(10) + z12**Integer(9) + Integer(3)*z12**Integer(8) + z12**Integer(7) + Integer(2)*z12**Integer(5) + Integer(2)*z12**Integer(4) + Integer(3)*z12**Integer(3) + z12**Integer(2) + Integer(2)*z12 >>> phi = DrinfeldModule(A, [p_root, z12**Integer(3), z12**Integer(5)]) >>> phi.base_morphism() Ring morphism: From: Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2 To: Finite Field in z12 of size 5^12 over its base 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 - The base field can be infinite: - sage: sigma = DrinfeldModule(A, [Frac(A).gen(), 1]) sage: sigma.base_morphism() Ring morphism: From: Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2 To: Fraction Field of Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2 over its base Defn: T |--> T - >>> from sage.all import * >>> sigma = DrinfeldModule(A, [Frac(A).gen(), Integer(1)]) >>> sigma.base_morphism() Ring morphism: From: Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2 To: Fraction Field of Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2 over its base Defn: T |--> T 
 - base_over_constants_field()[source]¶
- Return the base field, seen as an extension over the constants field \(\mathbb{F}_q\). - This is an instance of the class - sage.rings.ring_extension.RingExtension.- EXAMPLES: - sage: Fq = GF(25) sage: A.<T> = Fq[] sage: K.<z12> = Fq.extension(6) sage: p_root = 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 sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5]) sage: phi.base_over_constants_field() Field in z12 with defining polynomial x^6 + (4*z2 + 3)*x^5 + x^4 + (3*z2 + 1)*x^3 + x^2 + (4*z2 + 1)*x + z2 over its base - >>> from sage.all import * >>> Fq = GF(Integer(25)) >>> A = Fq['T']; (T,) = A._first_ngens(1) >>> K = Fq.extension(Integer(6), names=('z12',)); (z12,) = K._first_ngens(1) >>> p_root = Integer(2)*z12**Integer(11) + Integer(2)*z12**Integer(10) + z12**Integer(9) + Integer(3)*z12**Integer(8) + z12**Integer(7) + Integer(2)*z12**Integer(5) + Integer(2)*z12**Integer(4) + Integer(3)*z12**Integer(3) + z12**Integer(2) + Integer(2)*z12 >>> phi = DrinfeldModule(A, [p_root, z12**Integer(3), z12**Integer(5)]) >>> phi.base_over_constants_field() Field in z12 with defining polynomial x^6 + (4*z2 + 3)*x^5 + x^4 + (3*z2 + 1)*x^3 + x^2 + (4*z2 + 1)*x + z2 over its base 
 - characteristic()[source]¶
- Return the function ring-characteristic. - EXAMPLES: - sage: Fq = GF(25) sage: A.<T> = Fq[] sage: K.<z12> = Fq.extension(6) sage: p_root = 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 sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5]) sage: phi.characteristic() T^2 + (4*z2 + 2)*T + 2 sage: phi.base_morphism()(phi.characteristic()) 0 - >>> from sage.all import * >>> Fq = GF(Integer(25)) >>> A = Fq['T']; (T,) = A._first_ngens(1) >>> K = Fq.extension(Integer(6), names=('z12',)); (z12,) = K._first_ngens(1) >>> p_root = Integer(2)*z12**Integer(11) + Integer(2)*z12**Integer(10) + z12**Integer(9) + Integer(3)*z12**Integer(8) + z12**Integer(7) + Integer(2)*z12**Integer(5) + Integer(2)*z12**Integer(4) + Integer(3)*z12**Integer(3) + z12**Integer(2) + Integer(2)*z12 >>> phi = DrinfeldModule(A, [p_root, z12**Integer(3), z12**Integer(5)]) >>> phi.characteristic() T^2 + (4*z2 + 2)*T + 2 >>> phi.base_morphism()(phi.characteristic()) 0 - sage: B.<Y> = Fq[] sage: L = Frac(B) sage: psi = DrinfeldModule(A, [L(1), 0, 0, L(1)]) sage: psi.characteristic() Traceback (most recent call last): ... NotImplementedError: function ring characteristic not implemented in this case - >>> from sage.all import * >>> B = Fq['Y']; (Y,) = B._first_ngens(1) >>> L = Frac(B) >>> psi = DrinfeldModule(A, [L(Integer(1)), Integer(0), Integer(0), L(Integer(1))]) >>> psi.characteristic() Traceback (most recent call last): ... NotImplementedError: function ring characteristic not implemented in this case 
 - constant_coefficient()[source]¶
- Return the constant coefficient of the generator of this Drinfeld module. - OUTPUT: an element in the base field - EXAMPLES: - sage: Fq = GF(25) sage: A.<T> = Fq[] sage: K.<z12> = Fq.extension(6) sage: p_root = 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 sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5]) sage: phi.constant_coefficient() == p_root True - >>> from sage.all import * >>> Fq = GF(Integer(25)) >>> A = Fq['T']; (T,) = A._first_ngens(1) >>> K = Fq.extension(Integer(6), names=('z12',)); (z12,) = K._first_ngens(1) >>> p_root = Integer(2)*z12**Integer(11) + Integer(2)*z12**Integer(10) + z12**Integer(9) + Integer(3)*z12**Integer(8) + z12**Integer(7) + Integer(2)*z12**Integer(5) + Integer(2)*z12**Integer(4) + Integer(3)*z12**Integer(3) + z12**Integer(2) + Integer(2)*z12 >>> phi = DrinfeldModule(A, [p_root, z12**Integer(3), z12**Integer(5)]) >>> phi.constant_coefficient() == p_root True - Let \(\mathbb{F}_q[T]\) be the function ring, and let \(\gamma\) be the base of the Drinfeld module. The constant coefficient is \(\gamma(T)\): - sage: C = phi.category() sage: base = C.base() sage: base(T) == phi.constant_coefficient() True - >>> from sage.all import * >>> C = phi.category() >>> base = C.base() >>> base(T) == phi.constant_coefficient() True - Naturally, two Drinfeld modules in the same category have the same constant coefficient: - 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 - >>> from sage.all import * >>> t = phi.ore_polring().gen() >>> psi = C.object(phi.constant_coefficient() + t**Integer(3)) >>> 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 - Reciprocally, it is impossible to create two Drinfeld modules in this category if they do not share the same constant coefficient: - sage: rho = C.object(phi.constant_coefficient() + 1 + t^3) Traceback (most recent call last): ... ValueError: constant coefficient must equal that of the category - >>> from sage.all import * >>> rho = C.object(phi.constant_coefficient() + Integer(1) + t**Integer(3)) Traceback (most recent call last): ... ValueError: constant coefficient must equal that of the category 
 - function_ring()[source]¶
- Return the function ring of this Drinfeld module. - EXAMPLES: - sage: Fq = GF(25) sage: A.<T> = Fq[] sage: K.<z12> = Fq.extension(6) sage: p_root = 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 sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5]) sage: phi.function_ring() Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2 sage: phi.function_ring() is A True - >>> from sage.all import * >>> Fq = GF(Integer(25)) >>> A = Fq['T']; (T,) = A._first_ngens(1) >>> K = Fq.extension(Integer(6), names=('z12',)); (z12,) = K._first_ngens(1) >>> p_root = Integer(2)*z12**Integer(11) + Integer(2)*z12**Integer(10) + z12**Integer(9) + Integer(3)*z12**Integer(8) + z12**Integer(7) + Integer(2)*z12**Integer(5) + Integer(2)*z12**Integer(4) + Integer(3)*z12**Integer(3) + z12**Integer(2) + Integer(2)*z12 >>> phi = DrinfeldModule(A, [p_root, z12**Integer(3), z12**Integer(5)]) >>> phi.function_ring() Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2 >>> phi.function_ring() is A True 
 - ore_polring()[source]¶
- Return the Ore polynomial ring of this Drinfeld module. - EXAMPLES: - sage: Fq = GF(25) sage: A.<T> = Fq[] sage: K.<z12> = Fq.extension(6) sage: p_root = 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 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 over its base twisted by Frob^2 - >>> from sage.all import * >>> Fq = GF(Integer(25)) >>> A = Fq['T']; (T,) = A._first_ngens(1) >>> K = Fq.extension(Integer(6), names=('z12',)); (z12,) = K._first_ngens(1) >>> p_root = Integer(2)*z12**Integer(11) + Integer(2)*z12**Integer(10) + z12**Integer(9) + Integer(3)*z12**Integer(8) + z12**Integer(7) + Integer(2)*z12**Integer(5) + Integer(2)*z12**Integer(4) + Integer(3)*z12**Integer(3) + z12**Integer(2) + Integer(2)*z12 >>> phi = DrinfeldModule(A, [p_root, z12**Integer(3), z12**Integer(5)]) >>> S = phi.ore_polring() >>> S Ore Polynomial Ring in t over Finite Field in z12 of size 5^12 over its base twisted by Frob^2 - The Ore polynomial ring can also be retrieved from the category of the Drinfeld module: - sage: S is phi.category().ore_polring() True - >>> from sage.all import * >>> S is phi.category().ore_polring() True - The generator of the Drinfeld module is in the Ore polynomial ring: - sage: phi(T) in S True - >>> from sage.all import * >>> phi(T) in S True 
 - ore_variable()[source]¶
- Return the variable of the Ore polynomial ring of this Drinfeld module. - EXAMPLES: - sage: Fq = GF(25) sage: A.<T> = Fq[] sage: K.<z12> = Fq.extension(6) sage: p_root = 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 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 over its base twisted by Frob^2 sage: phi.ore_variable() t - >>> from sage.all import * >>> Fq = GF(Integer(25)) >>> A = Fq['T']; (T,) = A._first_ngens(1) >>> K = Fq.extension(Integer(6), names=('z12',)); (z12,) = K._first_ngens(1) >>> p_root = Integer(2)*z12**Integer(11) + Integer(2)*z12**Integer(10) + z12**Integer(9) + Integer(3)*z12**Integer(8) + z12**Integer(7) + Integer(2)*z12**Integer(5) + Integer(2)*z12**Integer(4) + Integer(3)*z12**Integer(3) + z12**Integer(2) + Integer(2)*z12 >>> phi = DrinfeldModule(A, [p_root, z12**Integer(3), z12**Integer(5)]) >>> phi.ore_polring() Ore Polynomial Ring in t over Finite Field in z12 of size 5^12 over its base twisted by Frob^2 >>> phi.ore_variable() t 
 
 - base_morphism()[source]¶
- Return the base morphism of the category. - EXAMPLES: - sage: Fq = GF(11) sage: A.<T> = Fq[] sage: K.<z> = Fq.extension(4) 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: C.base_morphism() Ring morphism: From: Univariate Polynomial Ring in T over Finite Field of size 11 To: Finite Field in z of size 11^4 over its base Defn: T |--> z^3 + 7*z^2 + 6*z + 10 sage: C.constant_coefficient() == C.base_morphism()(T) True - >>> from sage.all import * >>> Fq = GF(Integer(11)) >>> A = Fq['T']; (T,) = A._first_ngens(1) >>> K = Fq.extension(Integer(4), names=('z',)); (z,) = K._first_ngens(1) >>> p_root = z**Integer(3) + Integer(7)*z**Integer(2) + Integer(6)*z + Integer(10) >>> phi = DrinfeldModule(A, [p_root, Integer(0), Integer(0), Integer(1)]) >>> C = phi.category() >>> C.base_morphism() Ring morphism: From: Univariate Polynomial Ring in T over Finite Field of size 11 To: Finite Field in z of size 11^4 over its base Defn: T |--> z^3 + 7*z^2 + 6*z + 10 >>> C.constant_coefficient() == C.base_morphism()(T) True 
 - base_over_constants_field()[source]¶
- Return the base field, seen as an extension over the constants field \(\mathbb{F}_q\). - EXAMPLES: - sage: Fq = GF(11) sage: A.<T> = Fq[] sage: K.<z> = Fq.extension(4) 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: C.base_over_constants_field() Field in z with defining polynomial x^4 + 8*x^2 + 10*x + 2 over its base - >>> from sage.all import * >>> Fq = GF(Integer(11)) >>> A = Fq['T']; (T,) = A._first_ngens(1) >>> K = Fq.extension(Integer(4), names=('z',)); (z,) = K._first_ngens(1) >>> p_root = z**Integer(3) + Integer(7)*z**Integer(2) + Integer(6)*z + Integer(10) >>> phi = DrinfeldModule(A, [p_root, Integer(0), Integer(0), Integer(1)]) >>> C = phi.category() >>> C.base_over_constants_field() Field in z with defining polynomial x^4 + 8*x^2 + 10*x + 2 over its base 
 - characteristic()[source]¶
- Return the function ring-characteristic. - EXAMPLES: - sage: Fq = GF(11) sage: A.<T> = Fq[] sage: K.<z> = Fq.extension(4) 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: C.characteristic() T^2 + 7*T + 2 - >>> from sage.all import * >>> Fq = GF(Integer(11)) >>> A = Fq['T']; (T,) = A._first_ngens(1) >>> K = Fq.extension(Integer(4), names=('z',)); (z,) = K._first_ngens(1) >>> p_root = z**Integer(3) + Integer(7)*z**Integer(2) + Integer(6)*z + Integer(10) >>> phi = DrinfeldModule(A, [p_root, Integer(0), Integer(0), Integer(1)]) >>> C = phi.category() >>> C.characteristic() T^2 + 7*T + 2 - sage: psi = DrinfeldModule(A, [Frac(A).gen(), 1]) sage: C = psi.category() sage: C.characteristic() 0 - >>> from sage.all import * >>> psi = DrinfeldModule(A, [Frac(A).gen(), Integer(1)]) >>> C = psi.category() >>> C.characteristic() 0 
 - constant_coefficient()[source]¶
- Return the constant coefficient of the category. - EXAMPLES: - sage: Fq = GF(11) sage: A.<T> = Fq[] sage: K.<z> = Fq.extension(4) 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: C.constant_coefficient() z^3 + 7*z^2 + 6*z + 10 sage: C.constant_coefficient() == C.base()(T) True - >>> from sage.all import * >>> Fq = GF(Integer(11)) >>> A = Fq['T']; (T,) = A._first_ngens(1) >>> K = Fq.extension(Integer(4), names=('z',)); (z,) = K._first_ngens(1) >>> p_root = z**Integer(3) + Integer(7)*z**Integer(2) + Integer(6)*z + Integer(10) >>> phi = DrinfeldModule(A, [p_root, Integer(0), Integer(0), Integer(1)]) >>> C = phi.category() >>> C.constant_coefficient() z^3 + 7*z^2 + 6*z + 10 >>> C.constant_coefficient() == C.base()(T) True 
 - function_ring()[source]¶
- Return the function ring of the category. - EXAMPLES: - sage: Fq = GF(11) sage: A.<T> = Fq[] sage: K.<z> = Fq.extension(4) 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: C.function_ring() Univariate Polynomial Ring in T over Finite Field of size 11 sage: C.function_ring() is A True - >>> from sage.all import * >>> Fq = GF(Integer(11)) >>> A = Fq['T']; (T,) = A._first_ngens(1) >>> K = Fq.extension(Integer(4), names=('z',)); (z,) = K._first_ngens(1) >>> p_root = z**Integer(3) + Integer(7)*z**Integer(2) + Integer(6)*z + Integer(10) >>> phi = DrinfeldModule(A, [p_root, Integer(0), Integer(0), Integer(1)]) >>> C = phi.category() >>> C.function_ring() Univariate Polynomial Ring in T over Finite Field of size 11 >>> C.function_ring() is A True 
 - object(gen)[source]¶
- Return a Drinfeld module object in the category whose generator is the input. - INPUT: - gen– the generator of the Drinfeld module, given as an Ore polynomial or a list of coefficients
 - EXAMPLES: - sage: Fq = GF(11) sage: A.<T> = Fq[] sage: K.<z> = Fq.extension(4) sage: p_root = z^3 + 7*z^2 + 6*z + 10 sage: psi = DrinfeldModule(A, [p_root, 1]) sage: C = psi.category() 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 sage: t = phi.ore_polring().gen() sage: C.object(t^2 + z^3 + 7*z^2 + 6*z + 10) is phi True - >>> from sage.all import * >>> Fq = GF(Integer(11)) >>> A = Fq['T']; (T,) = A._first_ngens(1) >>> K = Fq.extension(Integer(4), names=('z',)); (z,) = K._first_ngens(1) >>> p_root = z**Integer(3) + Integer(7)*z**Integer(2) + Integer(6)*z + Integer(10) >>> psi = DrinfeldModule(A, [p_root, Integer(1)]) >>> C = psi.category() >>> phi = C.object([p_root, Integer(0), Integer(1)]) >>> phi Drinfeld module defined by T |--> t^2 + z^3 + 7*z^2 + 6*z + 10 >>> t = phi.ore_polring().gen() >>> C.object(t**Integer(2) + z**Integer(3) + Integer(7)*z**Integer(2) + Integer(6)*z + Integer(10)) is phi True 
 - ore_polring()[source]¶
- Return the Ore polynomial ring of the category. - EXAMPLES: - sage: Fq = GF(11) sage: A.<T> = Fq[] sage: K.<z> = Fq.extension(4) 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: C.ore_polring() Ore Polynomial Ring in t over Finite Field in z of size 11^4 over its base twisted by Frob - >>> from sage.all import * >>> Fq = GF(Integer(11)) >>> A = Fq['T']; (T,) = A._first_ngens(1) >>> K = Fq.extension(Integer(4), names=('z',)); (z,) = K._first_ngens(1) >>> p_root = z**Integer(3) + Integer(7)*z**Integer(2) + Integer(6)*z + Integer(10) >>> phi = DrinfeldModule(A, [p_root, Integer(0), Integer(0), Integer(1)]) >>> C = phi.category() >>> C.ore_polring() Ore Polynomial Ring in t over Finite Field in z of size 11^4 over its base twisted by Frob 
 - random_object(rank)[source]¶
- Return a random Drinfeld module in the category with given rank. - INPUT: - rank– integer; the rank of the Drinfeld module
 - EXAMPLES: - sage: Fq = GF(11) sage: A.<T> = Fq[] sage: K.<z> = Fq.extension(4) 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: psi = C.random_object(3) # random Drinfeld module defined by T |--> (6*z^3 + 4*z^2 + 10*z + 9)*t^3 + (4*z^3 + 8*z^2 + 8*z)*t^2 + (10*z^3 + 3*z^2 + 6*z)*t + z^3 + 7*z^2 + 6*z + 10 sage: psi.rank() == 3 True - >>> from sage.all import * >>> Fq = GF(Integer(11)) >>> A = Fq['T']; (T,) = A._first_ngens(1) >>> K = Fq.extension(Integer(4), names=('z',)); (z,) = K._first_ngens(1) >>> p_root = z**Integer(3) + Integer(7)*z**Integer(2) + Integer(6)*z + Integer(10) >>> phi = DrinfeldModule(A, [p_root, Integer(0), Integer(0), Integer(1)]) >>> C = phi.category() >>> psi = C.random_object(Integer(3)) # random Drinfeld module defined by T |--> (6*z^3 + 4*z^2 + 10*z + 9)*t^3 + (4*z^3 + 8*z^2 + 8*z)*t^2 + (10*z^3 + 3*z^2 + 6*z)*t + z^3 + 7*z^2 + 6*z + 10 >>> psi.rank() == Integer(3) True 
 - super_categories()[source]¶
- EXAMPLES: - sage: Fq = GF(11) sage: A.<T> = Fq[] sage: K.<z> = Fq.extension(4) 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: C.super_categories() [Category of objects] - >>> from sage.all import * >>> Fq = GF(Integer(11)) >>> A = Fq['T']; (T,) = A._first_ngens(1) >>> K = Fq.extension(Integer(4), names=('z',)); (z,) = K._first_ngens(1) >>> p_root = z**Integer(3) + Integer(7)*z**Integer(2) + Integer(6)*z + Integer(10) >>> phi = DrinfeldModule(A, [p_root, Integer(0), Integer(0), Integer(1)]) >>> C = phi.category() >>> C.super_categories() [Category of objects]