Morphisms between extension of rings - General Rings, Ideals, and Morphisms

Skip to content
Back to top
View this page
Edit this page

# 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

        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

    Python

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

    Return whether this morphism is surjective.

    EXAMPLES:

    Sage

        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

    Python

        >>> 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

  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

        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

    Python

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

    Return whether this morphism is injective.

    EXAMPLES:

    Sage

        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

    Python

        >>> 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

  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

        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

    Python

        >>> 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

        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

    [Python]

        >>> 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

        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

    Python

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

    Return whether this morphism is the identity.

    EXAMPLES:

    Sage

        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

    Python

        >>> 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

        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

    [Python]

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

    Return whether this morphism is injective.

    EXAMPLES:

    Sage

        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

    Python

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

    Return whether this morphism is surjective.

    EXAMPLES:

    Sage

        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

    Python

        >>> 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