Theorem: Module.Flat.iff_rTensor_injective'
File: Mathlib/RingTheory/Flat/Basic.lean

Proof steps:
state_before: R : Type u
M : Type v
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
⊢ Flat R M ↔ ∀ (I : Ideal R), Function.Injective ⇑(rTensor M (Submodule.subtype I))
state_after: R : Type u
M : Type v
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
⊢ (∀ ⦃I : Ideal R⦄, I.FG → Function.Injective ⇑(rTensor M (Submodule.subtype I))) ↔
    ∀ (I : Ideal R), Function.Injective ⇑(rTensor M (Submodule.subtype I))
tactic: rewrite [Flat.iff_rTensor_injective]
state_before: R : Type u
M : Type v
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
⊢ (∀ ⦃I : Ideal R⦄, I.FG → Function.Injective ⇑(rTensor M (Submodule.subtype I))) ↔
    ∀ (I : Ideal R), Function.Injective ⇑(rTensor M (Submodule.subtype I))
state_after: R : Type u
M : Type v
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
h : ∀ ⦃I : Ideal R⦄, I.FG → Function.Injective ⇑(rTensor M (Submodule.subtype I))
I : Ideal R
⊢ Function.Injective ⇑(rTensor M (Submodule.subtype I))
tactic: refine ⟨fun h I => ?_, fun h I _ => h I⟩
state_before: R : Type u
M : Type v
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
h : ∀ ⦃I : Ideal R⦄, I.FG → Function.Injective ⇑(rTensor M (Submodule.subtype I))
I : Ideal R
⊢ Function.Injective ⇑(rTensor M (Submodule.subtype I))
state_after: R : Type u
M : Type v
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
h : ∀ ⦃I : Ideal R⦄, I.FG → Function.Injective ⇑(rTensor M (Submodule.subtype I))
I : Ideal R
⊢ ∀ (a : ↥I ⊗[R] M), (rTensor M (Submodule.subtype I)) a = 0 → a = 0
tactic: rewrite [injective_iff_map_eq_zero]
state_before: R : Type u
M : Type v
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
h : ∀ ⦃I : Ideal R⦄, I.FG → Function.Injective ⇑(rTensor M (Submodule.subtype I))
I : Ideal R
⊢ ∀ (a : ↥I ⊗[R] M), (rTensor M (Submodule.subtype I)) a = 0 → a = 0
state_after: R : Type u
M : Type v
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
h : ∀ ⦃I : Ideal R⦄, I.FG → Function.Injective ⇑(rTensor M (Submodule.subtype I))
I : Ideal R
x : ↥I ⊗[R] M
hx₀ : (rTensor M (Submodule.subtype I)) x = 0
⊢ x = 0
tactic: intro x hx₀
state_before: R : Type u
M : Type v
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
h : ∀ ⦃I : Ideal R⦄, I.FG → Function.Injective ⇑(rTensor M (Submodule.subtype I))
I : Ideal R
x : ↥I ⊗[R] M
hx₀ : (rTensor M (Submodule.subtype I)) x = 0
⊢ x = 0
state_after: case intro.intro.intro.intro
R : Type u
M : Type v
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
h : ∀ ⦃I : Ideal R⦄, I.FG → Function.Injective ⇑(rTensor M (Submodule.subtype I))
I : Ideal R
J : Submodule R R
hfg : J.FG
hle : J ≤ I
y : ↥J ⊗[R] M
hx₀ : (rTensor M (Submodule.subtype I)) ((rTensor M (inclusion hle)) y) = 0
⊢ (rTensor M (inclusion hle)) y = 0
tactic: obtain ⟨J, hfg, hle, y, rfl⟩ := Submodule.exists_fg_le_eq_rTensor_inclusion x
state_before: case intro.intro.intro.intro
R : Type u
M : Type v
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
h : ∀ ⦃I : Ideal R⦄, I.FG → Function.Injective ⇑(rTensor M (Submodule.subtype I))
I : Ideal R
J : Submodule R R
hfg : J.FG
hle : J ≤ I
y : ↥J ⊗[R] M
hx₀ : (rTensor M (Submodule.subtype I)) ((rTensor M (inclusion hle)) y) = 0
⊢ (rTensor M (inclusion hle)) y = 0
state_after: case intro.intro.intro.intro
R : Type u
M : Type v
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
h : ∀ ⦃I : Ideal R⦄, I.FG → Function.Injective ⇑(rTensor M (Submodule.subtype I))
I : Ideal R
J : Submodule R R
hfg : J.FG
hle : J ≤ I
y : ↥J ⊗[R] M
hx₀ : (rTensor M (Submodule.subtype I ∘ₗ inclusion hle)) y = 0
⊢ (rTensor M (inclusion hle)) y = 0
tactic: rewrite [← rTensor_comp_apply] at hx₀
state_before: case intro.intro.intro.intro
R : Type u
M : Type v
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
h : ∀ ⦃I : Ideal R⦄, I.FG → Function.Injective ⇑(rTensor M (Submodule.subtype I))
I : Ideal R
J : Submodule R R
hfg : J.FG
hle : J ≤ I
y : ↥J ⊗[R] M
hx₀ : (rTensor M (Submodule.subtype I ∘ₗ inclusion hle)) y = 0
⊢ (rTensor M (inclusion hle)) y = 0
state_after: no goals
tactic: rw [(injective_iff_map_eq_zero _).mp (h hfg) y hx₀, LinearMap.map_zero]