Morphisms between extension of rings#

AUTHOR:

  • Xavier Caruso (2019)

class sage.rings.ring_extension_morphism.MapFreeModuleToRelativeRing#

Bases: Map

Base class of the module isomorphism between a ring extension and a free module over one of its bases.

is_injective()#

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
is_surjective()#

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
class sage.rings.ring_extension_morphism.MapRelativeRingToFreeModule#

Bases: Map

Base class of the module isomorphism between a ring extension and a free module over one of its bases.

is_injective()#

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
is_surjective()#

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
class sage.rings.ring_extension_morphism.RingExtensionBackendIsomorphism#

Bases: RingExtensionHomomorphism

A class for implementating isomorphisms taking an element of the backend to its ring extension.

class sage.rings.ring_extension_morphism.RingExtensionBackendReverseIsomorphism#

Bases: RingExtensionHomomorphism

A class for implementating isomorphisms from a ring extension to its backend.

class sage.rings.ring_extension_morphism.RingExtensionHomomorphism#

Bases: RingMap

A class for ring homomorphisms between extensions.

base_map()#

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

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

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
is_identity()#

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

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
is_injective()#

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
is_surjective()#

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