File: Mathlib/RingTheory/QuotSMulTop.lean

full_name: QuotSMulTop
code: /-- An abbreviation for `M⧸rM` that keeps us from having to write
`(⊤ : Submodule R M)` over and over to satisfy the typechecker. -/
abbrev QuotSMulTop 
goal: Type u_1

full_name: QuotSMulTop.equivQuotTensor
code: /-- Reducing a module modulo `r` is the same as left tensoring with `R/(r)`. -/
noncomputable def equivQuotTensor :
    QuotSMulTop r M ≃ₗ[R] (R ⧸ Ideal.span {r}) ⊗[R] M 
goal: QuotSMulTop r M ≃ₗ[R] TensorProduct R (R ⧸ Ideal.span {r}) M

full_name: QuotSMulTop.equivTensorQuot
code: /-- Reducing a module modulo `r` is the same as right tensoring with `R/(r)`. -/
noncomputable def equivTensorQuot :
    QuotSMulTop r M ≃ₗ[R] M ⊗[R] (R ⧸ Ideal.span {r}) 
goal: QuotSMulTop r M ≃ₗ[R] TensorProduct R M (R ⧸ Ideal.span {r})

full_name: QuotSMulTop.map
code: /-- The action of the functor `QuotSMulTop r` on morphisms. -/
def map : (M →ₗ[R] M') →ₗ[R] QuotSMulTop r M →ₗ[R] QuotSMulTop r M'  
goal: (M →ₗ[R] M') →ₗ[R] QuotSMulTop r M →ₗ[R] QuotSMulTop r M'

full_name: QuotSMulTop.map_apply_mk
code: @[simp]
lemma map_apply_mk (f : M →ₗ[R] M') (x : M) :
    map r f (Submodule.Quotient.mk x) =
      (Submodule.Quotient.mk (f x) : QuotSMulTop r M') 
goal: ((QuotSMulTop.map r) f) (Submodule.Quotient.mk x) = Submodule.Quotient.mk (f x)

full_name: QuotSMulTop.map_comp_mkQ
code: lemma map_comp_mkQ (f : M →ₗ[R] M') :
    map r f ∘ₗ mkQ (r • ⊤) = mkQ (r • ⊤) ∘ₗ f 
goal: (QuotSMulTop.map r) f ∘ₗ (r • ⊤).mkQ = (r • ⊤).mkQ ∘ₗ f

full_name: QuotSMulTop.map_id
code: @[simp]
lemma map_id : map r (LinearMap.id : M →ₗ[R] M) = .id 
goal: (QuotSMulTop.map r) LinearMap.id = LinearMap.id

full_name: QuotSMulTop.map_comp
code: @[simp]
lemma map_comp (g : M' →ₗ[R] M'') (f : M →ₗ[R] M') :
    map r (g ∘ₗ f) = map r g ∘ₗ map r f 
goal: (QuotSMulTop.map r) (g ∘ₗ f) = (QuotSMulTop.map r) g ∘ₗ (QuotSMulTop.map r) f

full_name: QuotSMulTop.equivQuotTensor_naturality_mk
code: lemma equivQuotTensor_naturality_mk (f : M →ₗ[R] M') (x : M) :
    equivQuotTensor r M' (map r f (Submodule.Quotient.mk x)) =
      f.lTensor (R ⧸ Ideal.span {r})
        (equivQuotTensor r M (Submodule.Quotient.mk x)) 
goal: (QuotSMulTop.equivQuotTensor r M') (((QuotSMulTop.map r) f) (Submodule.Quotient.mk x)) =
  (LinearMap.lTensor (R ⧸ Ideal.span {r}) f) ((QuotSMulTop.equivQuotTensor r M) (Submodule.Quotient.mk x))

full_name: QuotSMulTop.equivQuotTensor_naturality
code: lemma equivQuotTensor_naturality (f : M →ₗ[R] M') :
    equivQuotTensor r M' ∘ₗ map r f =
      f.lTensor (R ⧸ Ideal.span {r}) ∘ₗ equivQuotTensor r M 
goal: ↑(QuotSMulTop.equivQuotTensor r M') ∘ₗ (QuotSMulTop.map r) f =
  LinearMap.lTensor (R ⧸ Ideal.span {r}) f ∘ₗ ↑(QuotSMulTop.equivQuotTensor r M)

full_name: QuotSMulTop.equivTensorQuot_naturality_mk
code: lemma equivTensorQuot_naturality_mk (f : M →ₗ[R] M') (x : M) :
    equivTensorQuot r M' (map r f (Submodule.Quotient.mk x)) =
      f.rTensor (R ⧸ Ideal.span {r})
        (equivTensorQuot r M (Submodule.Quotient.mk x)) 
goal: (QuotSMulTop.equivTensorQuot r M') (((QuotSMulTop.map r) f) (Submodule.Quotient.mk x)) =
  (LinearMap.rTensor (R ⧸ Ideal.span {r}) f) ((QuotSMulTop.equivTensorQuot r M) (Submodule.Quotient.mk x))

full_name: QuotSMulTop.equivTensorQuot_naturality
code: lemma equivTensorQuot_naturality (f : M →ₗ[R] M') :
    equivTensorQuot r M' ∘ₗ map r f =
      f.rTensor (R ⧸ Ideal.span {r}) ∘ₗ equivTensorQuot r M 
goal: ↑(QuotSMulTop.equivTensorQuot r M') ∘ₗ (QuotSMulTop.map r) f =
  LinearMap.rTensor (R ⧸ Ideal.span {r}) f ∘ₗ ↑(QuotSMulTop.equivTensorQuot r M)

full_name: QuotSMulTop.map_surjective
code: lemma map_surjective {f : M →ₗ[R] M'} (hf : Surjective f) : Surjective (map r f) 
goal: Function.Surjective ⇑((QuotSMulTop.map r) f)

full_name: QuotSMulTop.map_exact
code: lemma map_exact {f : M →ₗ[R] M'} {g : M' →ₗ[R] M''}
    (hfg : Exact f g) (hg : Surjective g) : Exact (map r f) (map r g) 
goal: Function.Exact ⇑((QuotSMulTop.map r) f) ⇑((QuotSMulTop.map r) g)

full_name: QuotSMulTop.tensorQuotSMulTopEquivQuotSMulTop
code: /-- Tensoring on the left and applying `QuotSMulTop · r` commute. -/
noncomputable def tensorQuotSMulTopEquivQuotSMulTop :
    M ⊗[R] QuotSMulTop r M' ≃ₗ[R] QuotSMulTop r (M ⊗[R] M') 
goal: TensorProduct R M (QuotSMulTop r M') ≃ₗ[R] QuotSMulTop r (TensorProduct R M M')

full_name: QuotSMulTop.quotSMulTopTensorEquivQuotSMulTop
code: /-- Tensoring on the right and applying `QuotSMulTop · r` commute. -/
noncomputable def quotSMulTopTensorEquivQuotSMulTop :
    QuotSMulTop r M' ⊗[R] M ≃ₗ[R] QuotSMulTop r (M' ⊗[R] M) 
goal: TensorProduct R (QuotSMulTop r M') M ≃ₗ[R] QuotSMulTop r (TensorProduct R M' M)