Morphisms between extension of rings¶
AUTHOR:
- Xavier Caruso (2019) 
- class sage.rings.ring_extension_morphism.MapFreeModuleToRelativeRing[source]¶
- Bases: - Map- Base class of the module isomorphism between a ring extension and a free module over one of its bases. - is_injective()[source]¶
- Return whether this morphism is injective. - EXAMPLES: - sage: K = GF(11^6).over(GF(11^3)) # needs sage.rings.finite_rings sage: V, i, j = K.free_module() # needs sage.rings.finite_rings sage: i.is_injective() # needs sage.rings.finite_rings True - >>> from sage.all import * >>> K = GF(Integer(11)**Integer(6)).over(GF(Integer(11)**Integer(3))) # needs sage.rings.finite_rings >>> V, i, j = K.free_module() # needs sage.rings.finite_rings >>> i.is_injective() # needs sage.rings.finite_rings True 
 - is_surjective()[source]¶
- Return whether this morphism is surjective. - EXAMPLES: - sage: K = GF(11^6).over(GF(11^3)) # needs sage.rings.finite_rings sage: V, i, j = K.free_module() # needs sage.rings.finite_rings sage: i.is_surjective() # needs sage.rings.finite_rings True - >>> from sage.all import * >>> K = GF(Integer(11)**Integer(6)).over(GF(Integer(11)**Integer(3))) # needs sage.rings.finite_rings >>> V, i, j = K.free_module() # needs sage.rings.finite_rings >>> i.is_surjective() # needs sage.rings.finite_rings True 
 
- class sage.rings.ring_extension_morphism.MapRelativeRingToFreeModule[source]¶
- Bases: - Map- Base class of the module isomorphism between a ring extension and a free module over one of its bases. - is_injective()[source]¶
- Return whether this morphism is injective. - EXAMPLES: - sage: K = GF(11^6).over(GF(11^3)) # needs sage.rings.finite_rings sage: V, i, j = K.free_module() # needs sage.rings.finite_rings sage: j.is_injective() # needs sage.rings.finite_rings True - >>> from sage.all import * >>> K = GF(Integer(11)**Integer(6)).over(GF(Integer(11)**Integer(3))) # needs sage.rings.finite_rings >>> V, i, j = K.free_module() # needs sage.rings.finite_rings >>> j.is_injective() # needs sage.rings.finite_rings True 
 - is_surjective()[source]¶
- Return whether this morphism is injective. - EXAMPLES: - sage: K = GF(11^6).over(GF(11^3)) # needs sage.rings.finite_rings sage: V, i, j = K.free_module() # needs sage.rings.finite_rings sage: j.is_surjective() # needs sage.rings.finite_rings True - >>> from sage.all import * >>> K = GF(Integer(11)**Integer(6)).over(GF(Integer(11)**Integer(3))) # needs sage.rings.finite_rings >>> V, i, j = K.free_module() # needs sage.rings.finite_rings >>> j.is_surjective() # needs sage.rings.finite_rings True 
 
- class sage.rings.ring_extension_morphism.RingExtensionBackendIsomorphism[source]¶
- Bases: - RingExtensionHomomorphism- A class for implementating isomorphisms taking an element of the backend to its ring extension. 
- class sage.rings.ring_extension_morphism.RingExtensionBackendReverseIsomorphism[source]¶
- Bases: - RingExtensionHomomorphism- A class for implementating isomorphisms from a ring extension to its backend. 
- class sage.rings.ring_extension_morphism.RingExtensionHomomorphism[source]¶
- Bases: - RingMap- A class for ring homomorphisms between extensions. - base_map()[source]¶
- Return the base map of this morphism or just - Noneif the base map is a coercion map.- EXAMPLES: - sage: F = GF(5) sage: K.<a> = GF(5^2).over(F) # needs sage.rings.finite_rings sage: L.<b> = GF(5^6).over(K) # needs sage.rings.finite_rings - >>> from sage.all import * >>> F = GF(Integer(5)) >>> K = GF(Integer(5)**Integer(2)).over(F, names=('a',)); (a,) = K._first_ngens(1)# needs sage.rings.finite_rings >>> L = GF(Integer(5)**Integer(6)).over(K, names=('b',)); (b,) = L._first_ngens(1)# needs sage.rings.finite_rings - We define the absolute Frobenius of L: - sage: FrobL = L.hom([b^5, a^5]); FrobL # needs sage.rings.finite_rings Ring endomorphism of Field in b with defining polynomial x^3 + (2 + 2*a)*x - a over its base Defn: b |--> (-1 + a) + (1 + 2*a)*b + a*b^2 with map on base ring: a |--> 1 - a sage: FrobL.base_map() # needs sage.rings.finite_rings Ring morphism: From: Field in a with defining polynomial x^2 + 4*x + 2 over its base To: Field in b with defining polynomial x^3 + (2 + 2*a)*x - a over its base Defn: a |--> 1 - a - >>> from sage.all import * >>> FrobL = L.hom([b**Integer(5), a**Integer(5)]); FrobL # needs sage.rings.finite_rings Ring endomorphism of Field in b with defining polynomial x^3 + (2 + 2*a)*x - a over its base Defn: b |--> (-1 + a) + (1 + 2*a)*b + a*b^2 with map on base ring: a |--> 1 - a >>> FrobL.base_map() # needs sage.rings.finite_rings Ring morphism: From: Field in a with defining polynomial x^2 + 4*x + 2 over its base To: Field in b with defining polynomial x^3 + (2 + 2*a)*x - a over its base Defn: a |--> 1 - a - The square of - FrobLacts trivially on K; in other words, it has a trivial base map:- sage: phi = FrobL^2; phi # needs sage.rings.finite_rings Ring endomorphism of Field in b with defining polynomial x^3 + (2 + 2*a)*x - a over its base Defn: b |--> 2 + 2*a*b + (2 - a)*b^2 sage: phi.base_map() # needs sage.rings.finite_rings - >>> from sage.all import * >>> phi = FrobL**Integer(2); phi # needs sage.rings.finite_rings Ring endomorphism of Field in b with defining polynomial x^3 + (2 + 2*a)*x - a over its base Defn: b |--> 2 + 2*a*b + (2 - a)*b^2 >>> phi.base_map() # needs sage.rings.finite_rings 
 - is_identity()[source]¶
- Return whether this morphism is the identity. - EXAMPLES: - sage: # needs sage.rings.finite_rings sage: K.<a> = GF(5^2).over() # over GF(5) sage: FrobK = K.hom([a^5]) sage: FrobK.is_identity() False sage: (FrobK^2).is_identity() True - >>> from sage.all import * >>> # needs sage.rings.finite_rings >>> K = GF(Integer(5)**Integer(2)).over(names=('a',)); (a,) = K._first_ngens(1)# over GF(5) >>> FrobK = K.hom([a**Integer(5)]) >>> FrobK.is_identity() False >>> (FrobK**Integer(2)).is_identity() True - Coercion maps are not considered as identity morphisms: - sage: # needs sage.rings.finite_rings sage: L.<b> = GF(5^6).over(K) sage: iota = L.defining_morphism(); iota Ring morphism: From: Field in a with defining polynomial x^2 + 4*x + 2 over its base To: Field in b with defining polynomial x^3 + (2 + 2*a)*x - a over its base Defn: a |--> a sage: iota.is_identity() False - >>> from sage.all import * >>> # needs sage.rings.finite_rings >>> L = GF(Integer(5)**Integer(6)).over(K, names=('b',)); (b,) = L._first_ngens(1) >>> iota = L.defining_morphism(); iota Ring morphism: From: Field in a with defining polynomial x^2 + 4*x + 2 over its base To: Field in b with defining polynomial x^3 + (2 + 2*a)*x - a over its base Defn: a |--> a >>> iota.is_identity() False 
 - is_injective()[source]¶
- Return whether this morphism is injective. - EXAMPLES: - sage: # needs sage.rings.finite_rings sage: K = GF(5^10).over(GF(5^5)) sage: iota = K.defining_morphism(); iota Ring morphism: From: Finite Field in z5 of size 5^5 To: Field in z10 with defining polynomial x^2 + (2*z5^3 + 2*z5^2 + 4*z5 + 4)*x + z5 over its base Defn: z5 |--> z5 sage: iota.is_injective() True sage: K = GF(7).over(ZZ) sage: iota = K.defining_morphism(); iota Ring morphism: From: Integer Ring To: Finite Field of size 7 over its base Defn: 1 |--> 1 sage: iota.is_injective() False - >>> from sage.all import * >>> # needs sage.rings.finite_rings >>> K = GF(Integer(5)**Integer(10)).over(GF(Integer(5)**Integer(5))) >>> iota = K.defining_morphism(); iota Ring morphism: From: Finite Field in z5 of size 5^5 To: Field in z10 with defining polynomial x^2 + (2*z5^3 + 2*z5^2 + 4*z5 + 4)*x + z5 over its base Defn: z5 |--> z5 >>> iota.is_injective() True >>> K = GF(Integer(7)).over(ZZ) >>> iota = K.defining_morphism(); iota Ring morphism: From: Integer Ring To: Finite Field of size 7 over its base Defn: 1 |--> 1 >>> iota.is_injective() False 
 - is_surjective()[source]¶
- Return whether this morphism is surjective. - EXAMPLES: - sage: # needs sage.rings.finite_rings sage: K = GF(5^10).over(GF(5^5)) sage: iota = K.defining_morphism(); iota Ring morphism: From: Finite Field in z5 of size 5^5 To: Field in z10 with defining polynomial x^2 + (2*z5^3 + 2*z5^2 + 4*z5 + 4)*x + z5 over its base Defn: z5 |--> z5 sage: iota.is_surjective() False sage: K = GF(7).over(ZZ) sage: iota = K.defining_morphism(); iota Ring morphism: From: Integer Ring To: Finite Field of size 7 over its base Defn: 1 |--> 1 sage: iota.is_surjective() True - >>> from sage.all import * >>> # needs sage.rings.finite_rings >>> K = GF(Integer(5)**Integer(10)).over(GF(Integer(5)**Integer(5))) >>> iota = K.defining_morphism(); iota Ring morphism: From: Finite Field in z5 of size 5^5 To: Field in z10 with defining polynomial x^2 + (2*z5^3 + 2*z5^2 + 4*z5 + 4)*x + z5 over its base Defn: z5 |--> z5 >>> iota.is_surjective() False >>> K = GF(Integer(7)).over(ZZ) >>> iota = K.defining_morphism(); iota Ring morphism: From: Integer Ring To: Finite Field of size 7 over its base Defn: 1 |--> 1 >>> iota.is_surjective() True