Theorem: Module.Flat.comp
File: Mathlib/RingTheory/Flat/Stability.lean

tactic: rw [Module.Flat.iff_lTensor_injective']
state_before: R : Type u
S : Type v
M : Type w
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : Algebra R S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Module S M
inst✝² : IsScalarTower R S M
inst✝¹ : Flat R S
inst✝ : Flat S M
⊢ Flat R M
state_after: R : Type u
S : Type v
M : Type w
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : Algebra R S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Module S M
inst✝² : IsScalarTower R S M
inst✝¹ : Flat R S
inst✝ : Flat S M
⊢ ∀ (I : Ideal R), Function.Injective ⇑(lTensor M (Submodule.subtype I))

tactic: intro I
state_before: R : Type u
S : Type v
M : Type w
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : Algebra R S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Module S M
inst✝² : IsScalarTower R S M
inst✝¹ : Flat R S
inst✝ : Flat S M
⊢ ∀ (I : Ideal R), Function.Injective ⇑(lTensor M (Submodule.subtype I))
state_after: R : Type u
S : Type v
M : Type w
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : Algebra R S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Module S M
inst✝² : IsScalarTower R S M
inst✝¹ : Flat R S
inst✝ : Flat S M
I : Ideal R
⊢ Function.Injective ⇑(lTensor M (Submodule.subtype I))

tactic: rw [← EquivLike.comp_injective _ (TensorProduct.rid R M)]
state_before: R : Type u
S : Type v
M : Type w
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : Algebra R S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Module S M
inst✝² : IsScalarTower R S M
inst✝¹ : Flat R S
inst✝ : Flat S M
I : Ideal R
⊢ Function.Injective ⇑(lTensor M (Submodule.subtype I))
state_after: R : Type u
S : Type v
M : Type w
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : Algebra R S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Module S M
inst✝² : IsScalarTower R S M
inst✝¹ : Flat R S
inst✝ : Flat S M
I : Ideal R
⊢ Function.Injective (⇑(TensorProduct.rid R M) ∘ ⇑(lTensor M (Submodule.subtype I)))

tactic: haveI h : TensorProduct.rid R M ∘ lTensor M (Submodule.subtype I) =
  TensorProduct.rid R M ∘ₗ lTensor M I.subtype := rfl
state_before: R : Type u
S : Type v
M : Type w
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : Algebra R S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Module S M
inst✝² : IsScalarTower R S M
inst✝¹ : Flat R S
inst✝ : Flat S M
I : Ideal R
⊢ Function.Injective (⇑(TensorProduct.rid R M) ∘ ⇑(lTensor M (Submodule.subtype I)))
state_after: R : Type u
S : Type v
M : Type w
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : Algebra R S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Module S M
inst✝² : IsScalarTower R S M
inst✝¹ : Flat R S
inst✝ : Flat S M
I : Ideal R
h :
  ⇑(TensorProduct.rid R M) ∘ ⇑(lTensor M (Submodule.subtype I)) =
    ⇑(↑(TensorProduct.rid R M) ∘ₗ lTensor M (Submodule.subtype I))
⊢ Function.Injective (⇑(TensorProduct.rid R M) ∘ ⇑(lTensor M (Submodule.subtype I)))

tactic: simp only [h, ← auxLTensor_eq R S M, LinearMap.coe_restrictScalars, LinearMap.coe_comp,
  LinearEquiv.coe_coe, EquivLike.comp_injective, EquivLike.injective_comp]
state_before: R : Type u
S : Type v
M : Type w
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : Algebra R S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Module S M
inst✝² : IsScalarTower R S M
inst✝¹ : Flat R S
inst✝ : Flat S M
I : Ideal R
h :
  ⇑(TensorProduct.rid R M) ∘ ⇑(lTensor M (Submodule.subtype I)) =
    ⇑(↑(TensorProduct.rid R M) ∘ₗ lTensor M (Submodule.subtype I))
⊢ Function.Injective (⇑(TensorProduct.rid R M) ∘ ⇑(lTensor M (Submodule.subtype I)))
state_after: R : Type u
S : Type v
M : Type w
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : Algebra R S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Module S M
inst✝² : IsScalarTower R S M
inst✝¹ : Flat R S
inst✝ : Flat S M
I : Ideal R
h :
  ⇑(TensorProduct.rid R M) ∘ ⇑(lTensor M (Submodule.subtype I)) =
    ⇑(↑(TensorProduct.rid R M) ∘ₗ lTensor M (Submodule.subtype I))
⊢ Function.Injective ⇑(lTensor M (Submodule.subtype (Module.Flat.J R S I)))

tactic: exact (Module.Flat.iff_lTensor_injective' S M).mp inferInstance _
state_before: R : Type u
S : Type v
M : Type w
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : Algebra R S
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Module S M
inst✝² : IsScalarTower R S M
inst✝¹ : Flat R S
inst✝ : Flat S M
I : Ideal R
h :
  ⇑(TensorProduct.rid R M) ∘ ⇑(lTensor M (Submodule.subtype I)) =
    ⇑(↑(TensorProduct.rid R M) ∘ₗ lTensor M (Submodule.subtype I))
⊢ Function.Injective ⇑(lTensor M (Submodule.subtype (Module.Flat.J R S I)))
state_after: no goals