Morphisms between extension of rings

AUTHOR:

  • Xavier Caruso (2019)

class sage.rings.ring_extension_morphism.MapFreeModuleToRelativeRing

Bases: sage.categories.map.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))
sage: V, i, j = K.free_module()
sage: i.is_injective()
True
is_surjective()

Return whether this morphism is surjective.

EXAMPLES:

sage: K = GF(11^6).over(GF(11^3))
sage: V, i, j = K.free_module()
sage: i.is_surjective()
True
class sage.rings.ring_extension_morphism.MapRelativeRingToFreeModule

Bases: sage.categories.map.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))
sage: V, i, j = K.free_module()
sage: j.is_injective()
True
is_surjective()

Return whether this morphism is injective.

EXAMPLES:

sage: K = GF(11^6).over(GF(11^3))
sage: V, i, j = K.free_module()
sage: j.is_surjective()
True
class sage.rings.ring_extension_morphism.RingExtensionBackendIsomorphism

Bases: sage.rings.ring_extension_morphism.RingExtensionHomomorphism

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

class sage.rings.ring_extension_morphism.RingExtensionBackendReverseIsomorphism

Bases: sage.rings.ring_extension_morphism.RingExtensionHomomorphism

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

class sage.rings.ring_extension_morphism.RingExtensionHomomorphism

Bases: sage.rings.morphism.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)
sage: L.<b> = GF(5^6).over(K)

We define the absolute Frobenius of L:

sage: FrobL = L.hom([b^5, a^5])
sage: FrobL
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()
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
sage: phi
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()
is_identity()

Return whether this morphism is the identity.

EXAMPLES:

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: L.<b> = GF(5^6).over(K)
sage: iota = L.defining_morphism()
sage: 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: K = GF(5^10).over(GF(5^5))
sage: iota = K.defining_morphism()
sage: 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()
sage: 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: K = GF(5^10).over(GF(5^5))
sage: iota = K.defining_morphism()
sage: 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()
sage: iota
Ring morphism:
  From: Integer Ring
  To:   Finite Field of size 7 over its base
  Defn: 1 |--> 1
sage: iota.is_surjective()
True