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
None
if 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
FrobL
acts 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