Documentation

Mathlib.LinearAlgebra.Quotient

Quotients by submodules #

def Submodule.quotientRel {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :

The equivalence relation associated to a submodule p, defined by x ≈ y iff -x + y ∈ p.

Note this is equivalent to y - x ∈ p, but defined this way to be defeq to the AddSubgroup version, where commutativity can't be assumed.

Equations
Instances For
    theorem Submodule.quotientRel_r_def {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {x : M} {y : M} :
    Setoid.r x y x - y p
    instance Submodule.hasQuotient {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] :

    The quotient of a module M by a submodule p ⊆ M.

    Equations
    • Submodule.hasQuotient = { quotient' := fun (p : Submodule R M) => Quotient p.quotientRel }
    def Submodule.Quotient.mk {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {p : Submodule R M} :
    MM p

    Map associating to an element of M the corresponding element of M/p, when p is a submodule of M.

    Equations
    • Submodule.Quotient.mk = Quotient.mk''
    Instances For
      @[simp]
      theorem Submodule.Quotient.mk'_eq_mk' {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {p : Submodule R M} (x : M) :
      @[simp]
      theorem Submodule.Quotient.mk''_eq_mk {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {p : Submodule R M} (x : M) :
      @[simp]
      theorem Submodule.Quotient.quot_mk_eq_mk {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {p : Submodule R M} (x : M) :
      theorem Submodule.Quotient.eq' {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {x : M} {y : M} :
      theorem Submodule.Quotient.eq {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {x : M} {y : M} :
      instance Submodule.Quotient.instZeroQuotient {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
      Zero (M p)
      Equations
      instance Submodule.Quotient.instInhabitedQuotient {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
      Equations
      @[simp]
      theorem Submodule.Quotient.mk_zero {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
      @[simp]
      theorem Submodule.Quotient.mk_eq_zero {R : Type u_1} {M : Type u_2} {x : M} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
      @[simp]
      theorem Submodule.Quotient.mk_add {R : Type u_1} {M : Type u_2} {x : M} {y : M} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
      @[simp]
      theorem Submodule.Quotient.mk_neg {R : Type u_1} {M : Type u_2} {x : M} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
      @[simp]
      theorem Submodule.Quotient.mk_sub {R : Type u_1} {M : Type u_2} {x : M} {y : M} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
      instance Submodule.Quotient.instSMul' {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {S : Type u_3} [SMul S R] [SMul S M] [IsScalarTower S R M] (P : Submodule R M) :
      SMul S (M P)
      Equations
      instance Submodule.Quotient.instSMul {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (P : Submodule R M) :
      SMul R (M P)

      Shortcut to help the elaborator in the common case.

      Equations
      @[simp]
      theorem Submodule.Quotient.mk_smul {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {S : Type u_3} [SMul S R] [SMul S M] [IsScalarTower S R M] (r : S) (x : M) :
      instance Submodule.Quotient.smulCommClass {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {S : Type u_3} [SMul S R] [SMul S M] [IsScalarTower S R M] (P : Submodule R M) (T : Type u_4) [SMul T R] [SMul T M] [IsScalarTower T R M] [SMulCommClass S T M] :
      SMulCommClass S T (M P)
      Equations
      • =
      instance Submodule.Quotient.isScalarTower {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {S : Type u_3} [SMul S R] [SMul S M] [IsScalarTower S R M] (P : Submodule R M) (T : Type u_4) [SMul T R] [SMul T M] [IsScalarTower T R M] [SMul S T] [IsScalarTower S T M] :
      IsScalarTower S T (M P)
      Equations
      • =
      instance Submodule.Quotient.isCentralScalar {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {S : Type u_3} [SMul S R] [SMul S M] [IsScalarTower S R M] (P : Submodule R M) [SMul Sᵐᵒᵖ R] [SMul Sᵐᵒᵖ M] [IsScalarTower Sᵐᵒᵖ R M] [IsCentralScalar S M] :
      Equations
      • =
      instance Submodule.Quotient.mulAction' {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {S : Type u_3} [Monoid S] [SMul S R] [MulAction S M] [IsScalarTower S R M] (P : Submodule R M) :
      MulAction S (M P)
      Equations
      instance Submodule.Quotient.smulZeroClass' {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {S : Type u_3} [SMul S R] [SMulZeroClass S M] [IsScalarTower S R M] (P : Submodule R M) :
      Equations
      instance Submodule.Quotient.distribSMul' {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {S : Type u_3} [SMul S R] [DistribSMul S M] [IsScalarTower S R M] (P : Submodule R M) :
      Equations
      instance Submodule.Quotient.distribMulAction' {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {S : Type u_3} [Monoid S] [SMul S R] [DistribMulAction S M] [IsScalarTower S R M] (P : Submodule R M) :
      Equations
      instance Submodule.Quotient.module' {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {S : Type u_3} [Semiring S] [SMul S R] [Module S M] [IsScalarTower S R M] (P : Submodule R M) :
      Module S (M P)
      Equations
      def Submodule.Quotient.restrictScalarsEquiv {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (S : Type u_3) [Ring S] [SMul S R] [Module S M] [IsScalarTower S R M] (P : Submodule R M) :

      The quotient of P as an S-submodule is the same as the quotient of P as an R-submodule, where P : Submodule R M.

      Equations
      Instances For
        theorem Submodule.Quotient.mk_surjective {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
        Function.Surjective Submodule.Quotient.mk
        theorem Submodule.Quotient.nontrivial_of_lt_top {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) (h : p < ) :
        instance Submodule.QuotientBot.infinite {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] [Infinite M] :
        Equations
        • =
        instance Submodule.QuotientTop.unique {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] :
        Equations
        • Submodule.QuotientTop.unique = { default := 0, uniq := }
        instance Submodule.QuotientTop.fintype {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] :
        Equations
        theorem Submodule.unique_quotient_iff_eq_top {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {p : Submodule R M} :
        noncomputable instance Submodule.Quotient.fintype {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] [Fintype M] (S : Submodule R M) :
        Fintype (M S)
        Equations
        theorem Submodule.card_eq_card_quotient_mul_card {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (S : Submodule R M) :
        theorem Submodule.quot_hom_ext {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {M₂ : Type u_3} [AddCommGroup M₂] [Module R M₂] (f : M p →ₗ[R] M₂) (g : M p →ₗ[R] M₂) (h : ∀ (x : M), f (Submodule.Quotient.mk x) = g (Submodule.Quotient.mk x)) :
        f = g
        def Submodule.mkQ {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
        M →ₗ[R] M p

        The map from a module M to the quotient of M by a submodule p as a linear map.

        Equations
        • p.mkQ = { toFun := Submodule.Quotient.mk, map_add' := , map_smul' := }
        Instances For
          @[simp]
          theorem Submodule.mkQ_apply {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) (x : M) :
          theorem Submodule.mkQ_surjective {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (A : Submodule R M) :
          theorem Submodule.linearMap_qext {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} ⦃f : M p →ₛₗ[τ₁₂] M₂ ⦃g : M p →ₛₗ[τ₁₂] M₂ (h : f.comp p.mkQ = g.comp p.mkQ) :
          f = g

          Two LinearMaps from a quotient module are equal if their compositions with submodule.mkQ are equal.

          See note [partially-applied ext lemmas].

          def Submodule.liftQ {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) (h : p LinearMap.ker f) :
          M p →ₛₗ[τ₁₂] M₂

          The map from the quotient of M by a submodule p to M₂ induced by a linear map f : M → M₂ vanishing on p, as a linear map.

          Equations
          • p.liftQ f h = let __src := QuotientAddGroup.lift p.toAddSubgroup f.toAddMonoidHom h; { toFun := (__src).toFun, map_add' := , map_smul' := }
          Instances For
            @[simp]
            theorem Submodule.liftQ_apply {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) {h : p LinearMap.ker f} (x : M) :
            (p.liftQ f h) (Submodule.Quotient.mk x) = f x
            @[simp]
            theorem Submodule.liftQ_mkQ {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) (h : p LinearMap.ker f) :
            (p.liftQ f h).comp p.mkQ = f
            def Submodule.liftQSpanSingleton {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (x : M) (f : M →ₛₗ[τ₁₂] M₂) (h : f x = 0) :
            M Submodule.span R {x} →ₛₗ[τ₁₂] M₂

            Special case of submodule.liftQ when p is the span of x. In this case, the condition on f simply becomes vanishing at x.

            Equations
            Instances For
              @[simp]
              theorem Submodule.liftQSpanSingleton_apply {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (x : M) (f : M →ₛₗ[τ₁₂] M₂) (h : f x = 0) (y : M) :
              @[simp]
              theorem Submodule.range_mkQ {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
              @[simp]
              theorem Submodule.ker_mkQ {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
              theorem Submodule.le_comap_mkQ {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) (p' : Submodule R (M p)) :
              p Submodule.comap p.mkQ p'
              @[simp]
              theorem Submodule.mkQ_map_self {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
              @[simp]
              theorem Submodule.comap_map_mkQ {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) (p' : Submodule R M) :
              Submodule.comap p.mkQ (Submodule.map p.mkQ p') = p p'
              @[simp]
              theorem Submodule.map_mkQ_eq_top {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) (p' : Submodule R M) :
              Submodule.map p.mkQ p' = p p' =
              def Submodule.mapQ {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (q : Submodule R₂ M₂) (f : M →ₛₗ[τ₁₂] M₂) (h : p Submodule.comap f q) :
              M p →ₛₗ[τ₁₂] M₂ q

              The map from the quotient of M by submodule p to the quotient of M₂ by submodule q along f : M → M₂ is linear.

              Equations
              • p.mapQ q f h = p.liftQ (q.mkQ.comp f)
              Instances For
                @[simp]
                theorem Submodule.mapQ_apply {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (q : Submodule R₂ M₂) (f : M →ₛₗ[τ₁₂] M₂) {h : p Submodule.comap f q} (x : M) :
                theorem Submodule.mapQ_mkQ {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (q : Submodule R₂ M₂) (f : M →ₛₗ[τ₁₂] M₂) {h : p Submodule.comap f q} :
                (p.mapQ q f h).comp p.mkQ = q.mkQ.comp f
                @[simp]
                theorem Submodule.mapQ_zero {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (q : Submodule R₂ M₂) (h : optParam (p Submodule.comap 0 q) ) :
                p.mapQ q 0 h = 0
                theorem Submodule.mapQ_comp {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} {R₃ : Type u_5} {M₃ : Type u_6} [Ring R₃] [AddCommGroup M₃] [Module R₃ M₃] (p₂ : Submodule R₂ M₂) (p₃ : Submodule R₃ M₃) {τ₂₃ : R₂ →+* R₃} {τ₁₃ : R →+* R₃} [RingHomCompTriple τ₁₂ τ₂₃ τ₁₃] (f : M →ₛₗ[τ₁₂] M₂) (g : M₂ →ₛₗ[τ₂₃] M₃) (hf : p Submodule.comap f p₂) (hg : p₂ Submodule.comap g p₃) (h : optParam (p Submodule.comap f (Submodule.comap g p₃)) ) :
                p.mapQ p₃ (g.comp f) h = (p₂.mapQ p₃ g hg).comp (p.mapQ p₂ f hf)

                Given submodules p ⊆ M, p₂ ⊆ M₂, p₃ ⊆ M₃ and maps f : M → M₂, g : M₂ → M₃ inducing mapQ f : M ⧸ p → M₂ ⧸ p₂ and mapQ g : M₂ ⧸ p₂ → M₃ ⧸ p₃ then mapQ (g ∘ f) = (mapQ g) ∘ (mapQ f).

                @[simp]
                theorem Submodule.mapQ_id {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) (h : optParam (p Submodule.comap LinearMap.id p) ) :
                p.mapQ p LinearMap.id h = LinearMap.id
                theorem Submodule.mapQ_pow {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {f : M →ₗ[R] M} (h : p Submodule.comap f p) (k : ) (h' : optParam (p Submodule.comap (f ^ k) p) ) :
                p.mapQ p (f ^ k) h' = p.mapQ p f h ^ k
                theorem Submodule.comap_liftQ {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (q : Submodule R₂ M₂) (f : M →ₛₗ[τ₁₂] M₂) (h : p LinearMap.ker f) :
                Submodule.comap (p.liftQ f h) q = Submodule.map p.mkQ (Submodule.comap f q)
                theorem Submodule.map_liftQ {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} [RingHomSurjective τ₁₂] (f : M →ₛₗ[τ₁₂] M₂) (h : p LinearMap.ker f) (q : Submodule R (M p)) :
                Submodule.map (p.liftQ f h) q = Submodule.map f (Submodule.comap p.mkQ q)
                theorem Submodule.ker_liftQ {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) (h : p LinearMap.ker f) :
                LinearMap.ker (p.liftQ f h) = Submodule.map p.mkQ (LinearMap.ker f)
                theorem Submodule.range_liftQ {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} [RingHomSurjective τ₁₂] (f : M →ₛₗ[τ₁₂] M₂) (h : p LinearMap.ker f) :
                theorem Submodule.ker_liftQ_eq_bot {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) (h : p LinearMap.ker f) (h' : LinearMap.ker f p) :
                LinearMap.ker (p.liftQ f h) =
                theorem Submodule.ker_liftQ_eq_bot' {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) (h : p = LinearMap.ker f) :
                LinearMap.ker (p.liftQ f ) =
                def Submodule.comapMkQRelIso {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
                Submodule R (M p) ≃o { p' : Submodule R M // p p' }

                The correspondence theorem for modules: there is an order isomorphism between submodules of the quotient of M by p, and submodules of M larger than p.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  def Submodule.comapMkQOrderEmbedding {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :

                  The ordering on submodules of the quotient of M by p embeds into the ordering on submodules of M.

                  Equations
                  Instances For
                    @[simp]
                    theorem Submodule.comapMkQOrderEmbedding_eq {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) (p' : Submodule R (M p)) :
                    p.comapMkQOrderEmbedding p' = Submodule.comap p.mkQ p'
                    theorem Submodule.span_preimage_eq {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {R₂ : Type u_3} {M₂ : Type u_4} [Ring R₂] [AddCommGroup M₂] [Module R₂ M₂] {τ₁₂ : R →+* R₂} [RingHomSurjective τ₁₂] {f : M →ₛₗ[τ₁₂] M₂} {s : Set M₂} (h₀ : s.Nonempty) (h₁ : s (LinearMap.range f)) :
                    @[simp]
                    theorem Submodule.Quotient.equiv_symm_apply {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {N : Type u_5} [AddCommGroup N] [Module R N] (P : Submodule R M) (Q : Submodule R N) (f : M ≃ₗ[R] N) (hf : Submodule.map f P = Q) (a : N Q) :
                    (Submodule.Quotient.equiv P Q f hf).symm a = (Q.mapQ P f.symm ) a
                    @[simp]
                    theorem Submodule.Quotient.equiv_apply {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {N : Type u_5} [AddCommGroup N] [Module R N] (P : Submodule R M) (Q : Submodule R N) (f : M ≃ₗ[R] N) (hf : Submodule.map f P = Q) (a : M P) :
                    (Submodule.Quotient.equiv P Q f hf) a = (P.mapQ Q f ) a
                    def Submodule.Quotient.equiv {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {N : Type u_5} [AddCommGroup N] [Module R N] (P : Submodule R M) (Q : Submodule R N) (f : M ≃ₗ[R] N) (hf : Submodule.map f P = Q) :
                    (M P) ≃ₗ[R] N Q

                    If P is a submodule of M and Q a submodule of N, and f : M ≃ₗ N maps P to Q, then M ⧸ P is equivalent to N ⧸ Q.

                    Equations
                    • Submodule.Quotient.equiv P Q f hf = let __src := P.mapQ Q f ; { toFun := (P.mapQ Q f ), map_add' := , map_smul' := , invFun := (Q.mapQ P f.symm ), left_inv := , right_inv := }
                    Instances For
                      @[simp]
                      theorem Submodule.Quotient.equiv_symm {R : Type u_5} {M : Type u_6} {N : Type u_7} [CommRing R] [AddCommGroup M] [Module R M] [AddCommGroup N] [Module R N] (P : Submodule R M) (Q : Submodule R N) (f : M ≃ₗ[R] N) (hf : Submodule.map f P = Q) :
                      (Submodule.Quotient.equiv P Q f hf).symm = Submodule.Quotient.equiv Q P f.symm
                      @[simp]
                      theorem Submodule.Quotient.equiv_trans {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {N : Type u_5} {O : Type u_6} [AddCommGroup N] [Module R N] [AddCommGroup O] [Module R O] (P : Submodule R M) (Q : Submodule R N) (S : Submodule R O) (e : M ≃ₗ[R] N) (f : N ≃ₗ[R] O) (he : Submodule.map e P = Q) (hf : Submodule.map f Q = S) (hef : Submodule.map (e ≪≫ₗ f) P = S) :
                      Submodule.Quotient.equiv P S (e ≪≫ₗ f) hef = Submodule.Quotient.equiv P Q e he ≪≫ₗ Submodule.Quotient.equiv Q S f hf
                      theorem LinearMap.range_mkQ_comp {R : Type u_1} {M : Type u_2} {R₂ : Type u_3} {M₂ : Type u_4} [Ring R] [Ring R₂] [AddCommMonoid M] [AddCommGroup M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} [RingHomSurjective τ₁₂] (f : M →ₛₗ[τ₁₂] M₂) :
                      (LinearMap.range f).mkQ.comp f = 0
                      theorem LinearMap.ker_le_range_iff {R : Type u_1} {M : Type u_2} {R₂ : Type u_3} {M₂ : Type u_4} {R₃ : Type u_5} {M₃ : Type u_6} [Ring R] [Ring R₂] [Ring R₃] [AddCommMonoid M] [AddCommGroup M₂] [AddCommMonoid M₃] [Module R M] [Module R₂ M₂] [Module R₃ M₃] {τ₁₂ : R →+* R₂} {τ₂₃ : R₂ →+* R₃} [RingHomSurjective τ₁₂] {f : M →ₛₗ[τ₁₂] M₂} {g : M₂ →ₛₗ[τ₂₃] M₃} :
                      theorem LinearMap.range_eq_top_of_cancel {R : Type u_1} {M : Type u_2} {R₂ : Type u_3} {M₂ : Type u_4} [Ring R] [Ring R₂] [AddCommMonoid M] [AddCommGroup M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} [RingHomSurjective τ₁₂] {f : M →ₛₗ[τ₁₂] M₂} (h : ∀ (u v : M₂ →ₗ[R₂] M₂ LinearMap.range f), u.comp f = v.comp fu = v) :

                      An epimorphism is surjective.

                      def Submodule.quotEquivOfEqBot {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) (hp : p = ) :
                      (M p) ≃ₗ[R] M

                      If p = ⊥, then M / p ≃ₗ[R] M.

                      Equations
                      Instances For
                        @[simp]
                        theorem Submodule.quotEquivOfEqBot_apply_mk {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) (hp : p = ) (x : M) :
                        (p.quotEquivOfEqBot hp) (Submodule.Quotient.mk x) = x
                        @[simp]
                        theorem Submodule.quotEquivOfEqBot_symm_apply {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) (hp : p = ) (x : M) :
                        (p.quotEquivOfEqBot hp).symm x = Submodule.Quotient.mk x
                        @[simp]
                        theorem Submodule.coe_quotEquivOfEqBot_symm {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) (hp : p = ) :
                        (p.quotEquivOfEqBot hp).symm = p.mkQ
                        def Submodule.quotEquivOfEq {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) (p' : Submodule R M) (h : p = p') :
                        (M p) ≃ₗ[R] M p'

                        Quotienting by equal submodules gives linearly equivalent quotients.

                        Equations
                        • p.quotEquivOfEq p' h = let __src := Quotient.congr (Equiv.refl M) ; { toFun := __src.toFun, map_add' := , map_smul' := , invFun := __src.invFun, left_inv := , right_inv := }
                        Instances For
                          @[simp]
                          theorem Submodule.quotEquivOfEq_mk {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) (p' : Submodule R M) (h : p = p') (x : M) :
                          (p.quotEquivOfEq p' h) (Submodule.Quotient.mk x) = Submodule.Quotient.mk x
                          @[simp]
                          theorem Submodule.Quotient.equiv_refl {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (P : Submodule R M) (Q : Submodule R M) (hf : Submodule.map ((LinearEquiv.refl R M)) P = Q) :
                          Submodule.Quotient.equiv P Q (LinearEquiv.refl R M) hf = P.quotEquivOfEq Q
                          def Submodule.mapQLinear {R : Type u_1} {M : Type u_2} {M₂ : Type u_3} [CommRing R] [AddCommGroup M] [Module R M] [AddCommGroup M₂] [Module R M₂] (p : Submodule R M) (q : Submodule R M₂) :
                          (p.compatibleMaps q) →ₗ[R] M p →ₗ[R] M₂ q

                          Given modules M, M₂ over a commutative ring, together with submodules p ⊆ M, q ⊆ M₂, the natural map $\{f ∈ Hom(M, M₂) | f(p) ⊆ q \} \to Hom(M/p, M₂/q)$ is linear.

                          Equations
                          • p.mapQLinear q = { toFun := fun (f : (p.compatibleMaps q)) => p.mapQ q f , map_add' := , map_smul' := }
                          Instances For