Documentation

Mathlib.LinearAlgebra.Isomorphisms

Isomorphism theorems for modules. #

The first and second isomorphism theorems for modules.

noncomputable def LinearMap.quotKerEquivRange {R : Type u_1} {M : Type u_2} {M₂ : Type u_3} [Ring R] [AddCommGroup M] [AddCommGroup M₂] [Module R M] [Module R M₂] (f : M →ₗ[R] M₂) :
(M ⧸ f.ker) ≃ₗ[R] ↥f.range

The first isomorphism law for modules. The quotient of M by the kernel of f is linearly equivalent to the range of f.

Equations
Instances For
    noncomputable def LinearMap.quotKerEquivOfSurjective {R : Type u_1} {M : Type u_2} {M₂ : Type u_3} [Ring R] [AddCommGroup M] [AddCommGroup M₂] [Module R M] [Module R M₂] (f : M →ₗ[R] M₂) (hf : Function.Surjective ⇑f) :
    (M ⧸ f.ker) ≃ₗ[R] M₂

    The first isomorphism theorem for surjective linear maps.

    Equations
    Instances For
      @[simp]
      theorem LinearMap.quotKerEquivRange_apply_mk {R : Type u_1} {M : Type u_2} {M₂ : Type u_3} [Ring R] [AddCommGroup M] [AddCommGroup M₂] [Module R M] [Module R M₂] (f : M →ₗ[R] M₂) (x : M) :
      @[simp]
      theorem LinearMap.quotKerEquivOfSurjective_apply_mk {R : Type u_1} {M : Type u_2} {M₂ : Type u_3} [Ring R] [AddCommGroup M] [AddCommGroup M₂] [Module R M] [Module R M₂] (f : M →ₗ[R] M₂) (hf : Function.Surjective ⇑f) (x : M) :
      @[simp]
      theorem LinearMap.quotKerEquivRange_symm_apply_image {R : Type u_1} {M : Type u_2} {M₂ : Type u_3} [Ring R] [AddCommGroup M] [AddCommGroup M₂] [Module R M] [Module R M₂] (f : M →ₗ[R] M₂) (x : M) (h : f x ∈ f.range) :
      @[simp]
      theorem LinearMap.quotKerEquivOfSurjective_symm_apply {R : Type u_1} {M : Type u_2} {M₂ : Type u_3} [Ring R] [AddCommGroup M] [AddCommGroup M₂] [Module R M] [Module R M₂] (f : M →ₗ[R] M₂) (hf : Function.Surjective ⇑f) (x : M) :
      @[reducible, inline]
      abbrev LinearMap.subToSupQuotient {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p p' : Submodule R M) :
      ↥p →ₗ[R] ↥(p ⊔ p') ⧸ Submodule.comap (p ⊔ p').subtype p'

      Linear map from p to p+p'/p' where p p' are submodules of R

      Equations
      Instances For
        theorem LinearMap.comap_leq_ker_subToSupQuotient {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p p' : Submodule R M) :
        def LinearMap.quotientInfToSupQuotient {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p p' : Submodule R M) :
        ↥p ⧸ Submodule.comap p.subtype p ⊓ Submodule.comap p.subtype p' →ₗ[R] ↥(p ⊔ p') ⧸ Submodule.comap (p ⊔ p').subtype p'

        Canonical linear map from the quotient p/(p ∩ p') to (p+p')/p', mapping x + (p ∩ p') to x + p', where p and p' are submodules of an ambient module.

        Note that in the following declaration the type of the domain is expressed using comap p.subtype p ⊓ comap p.subtype p' instead of comap p.subtype (p ⊓ p') because the former is the simp normal form (see also Submodule.comap_inf).

        Equations
        Instances For
          noncomputable def LinearMap.quotientInfEquivSupQuotient {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p p' : Submodule R M) :
          (↥p ⧸ Submodule.comap p.subtype p ⊓ Submodule.comap p.subtype p') ≃ₗ[R] ↥(p ⊔ p') ⧸ Submodule.comap (p ⊔ p').subtype p'

          Second Isomorphism Law : the canonical map from p/(p ∩ p') to (p+p')/p' as a linear isomorphism.

          Note that in the following declaration the type of the domain is expressed using comap p.subtype p ⊓ comap p.subtype p' instead of comap p.subtype (p ⊓ p') because the former is the simp normal form (see also Submodule.comap_inf).

          Equations
          Instances For
            @[simp]
            theorem LinearMap.quotientInfEquivSupQuotient_symm_apply_left {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p p' : Submodule R M) (x : ↥(p ⊔ p')) (hx : ↑x ∈ p) :
            theorem LinearMap.quotientInfEquivSupQuotient_symm_apply_right {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p p' : Submodule R M) {x : ↥(p ⊔ p')} (hx : ↑x ∈ p') :
            noncomputable def LinearMap.liftOfSurjective {R : Type u_1} {M : Type u_2} {M₂ : Type u_3} {M₃ : Type u_4} [Ring R] [AddCommGroup M] [AddCommGroup M₂] [AddCommGroup M₃] [Module R M] [Module R M₂] [Module R M₃] {f : M →ₗ[R] M₂} (hf : Function.Surjective ⇑f) :
            { g : M →ₗ[R] M₃ // f.ker ≤ g.ker } ≃ (M₂ →ₗ[R] M₃)

            Given a surjective f : M →ₗ[R] M₂ and an R-module M₃, this is a bijection between R-linear maps M₂ →ₗ[R] M₃ and R-linear maps g : M →ₗ[R] M₃ such that ker f ≤ ker g.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              @[simp]
              theorem LinearMap.liftOfSurjective_symm_apply {R : Type u_1} {M : Type u_2} {M₂ : Type u_3} {M₃ : Type u_4} [Ring R] [AddCommGroup M] [AddCommGroup M₂] [AddCommGroup M₃] [Module R M] [Module R M₂] [Module R M₃] {f : M →ₗ[R] M₂} (hf : Function.Surjective ⇑f) (h : M₂ →ₗ[R] M₃) :
              @[simp]
              theorem LinearMap.equivOfSurjective_apply {R : Type u_1} {M : Type u_2} {M₂ : Type u_3} {M₃ : Type u_4} [Ring R] [AddCommGroup M] [AddCommGroup M₂] [AddCommGroup M₃] [Module R M] [Module R M₂] [Module R M₃] {f : M →ₗ[R] M₂} (hf : Function.Surjective ⇑f) {g : M →ₗ[R] M₃} (hg : f.ker ≤ g.ker) {m : M} :
              ((liftOfSurjective hf) ⟨g, hg⟩) (f m) = g m

              The third isomorphism theorem for modules.

              def Submodule.quotientQuotientEquivQuotientAux {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (S T : Submodule R M) (h : S ≤ T) :
              (M ⧸ S) ⧸ map S.mkQ T →ₗ[R] M ⧸ T

              The map from the third isomorphism theorem for modules: (M / S) / (T / S) → M / T.

              Equations
              Instances For
                @[simp]
                theorem Submodule.quotientQuotientEquivQuotientAux_mk {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (S T : Submodule R M) (h : S ≤ T) (x : M ⧸ S) :
                def Submodule.quotientQuotientEquivQuotient {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (S T : Submodule R M) (h : S ≤ T) :
                ((M ⧸ S) ⧸ map S.mkQ T) ≃ₗ[R] M ⧸ T

                Noether's third isomorphism theorem for modules: (M / S) / (T / S) ≃ M / T.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  def Submodule.quotientQuotientEquivQuotientSup {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (S T : Submodule R M) :
                  ((M ⧸ S) ⧸ map S.mkQ T) ≃ₗ[R] M ⧸ S ⊔ T

                  Essentially the same equivalence as in the third isomorphism theorem, except restated in terms of suprema/addition of submodules instead of ≤.

                  Equations
                  Instances For
                    theorem Submodule.card_quotient_mul_card_quotient {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (S T : Submodule R M) (hST : T ≤ S) :
                    Nat.card ↥(map T.mkQ S) * Nat.card (M ⧸ S) = Nat.card (M ⧸ T)

                    Corollary of the third isomorphism theorem: [S : T] [M : S] = [M : T]