Theorem: TensorProduct.forall_vanishesTrivially_iff_forall_FG_rTensor_injective
File: Mathlib/LinearAlgebra/TensorProduct/Vanishing.lean

tactic: constructor
state_before: R : Type u
inst✝⁵ : CommRing R
M : Type u
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
N : Type u
inst✝² : AddCommGroup N
inst✝¹ : Module R N
ι : Type u
inst✝ : Fintype ι
m : ι → M
n : ι → N
⊢ (∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n) ↔
    ∀ (M' : Submodule R M), M'.FG → Injective ⇑(rTensor N M'.subtype)
state_after: case mp
R : Type u
inst✝⁵ : CommRing R
M : Type u
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
N : Type u
inst✝² : AddCommGroup N
inst✝¹ : Module R N
ι : Type u
inst✝ : Fintype ι
m : ι → M
n : ι → N
⊢ (∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n) →
    ∀ (M' : Submodule R M), M'.FG → Injective ⇑(rTensor N M'.subtype)

case mpr
R : Type u
inst✝⁵ : CommRing R
M : Type u
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
N : Type u
inst✝² : AddCommGroup N
inst✝¹ : Module R N
ι : Type u
inst✝ : Fintype ι
m : ι → M
n : ι → N
⊢ (∀ (M' : Submodule R M), M'.FG → Injective ⇑(rTensor N M'.subtype)) →
    ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n

tactic: intro h M' _
state_before: case mp
R : Type u
inst✝⁵ : CommRing R
M : Type u
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
N : Type u
inst✝² : AddCommGroup N
inst✝¹ : Module R N
ι : Type u
inst✝ : Fintype ι
m : ι → M
n : ι → N
⊢ (∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n) →
    ∀ (M' : Submodule R M), M'.FG → Injective ⇑(rTensor N M'.subtype)
state_after: case mp
R : Type u
inst✝⁵ : CommRing R
M : Type u
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
N : Type u
inst✝² : AddCommGroup N
inst✝¹ : Module R N
ι : Type u
inst✝ : Fintype ι
m : ι → M
n : ι → N
h : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
x✝ : M'.FG
⊢ Injective ⇑(rTensor N M'.subtype)

tactic: exact rTensor_injective_of_forall_vanishesTrivially R h M'
state_before: case mp
R : Type u
inst✝⁵ : CommRing R
M : Type u
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
N : Type u
inst✝² : AddCommGroup N
inst✝¹ : Module R N
ι : Type u
inst✝ : Fintype ι
m : ι → M
n : ι → N
h : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
x✝ : M'.FG
⊢ Injective ⇑(rTensor N M'.subtype)
state_after: no goals

tactic: intro h ι _ m n hmn
state_before: case mpr
R : Type u
inst✝⁵ : CommRing R
M : Type u
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
N : Type u
inst✝² : AddCommGroup N
inst✝¹ : Module R N
ι : Type u
inst✝ : Fintype ι
m : ι → M
n : ι → N
⊢ (∀ (M' : Submodule R M), M'.FG → Injective ⇑(rTensor N M'.subtype)) →
    ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
state_after: case mpr
R : Type u
inst✝⁶ : CommRing R
M : Type u
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
ι✝ : Type u
inst✝¹ : Fintype ι✝
m✝ : ι✝ → M
n✝ : ι✝ → N
h : ∀ (M' : Submodule R M), M'.FG → Injective ⇑(rTensor N M'.subtype)
ι : Type u
inst✝ : Fintype ι
m : ι → M
n : ι → N
hmn : ∑ i : ι, m i ⊗ₜ[R] n i = 0
⊢ VanishesTrivially R m n

tactic: exact vanishesTrivially_of_sum_tmul_eq_zero_of_rTensor_injective R
  (h _ (fg_span (Set.finite_range _))) hmn
state_before: case mpr
R : Type u
inst✝⁶ : CommRing R
M : Type u
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
N : Type u
inst✝³ : AddCommGroup N
inst✝² : Module R N
ι✝ : Type u
inst✝¹ : Fintype ι✝
m✝ : ι✝ → M
n✝ : ι✝ → N
h : ∀ (M' : Submodule R M), M'.FG → Injective ⇑(rTensor N M'.subtype)
ι : Type u
inst✝ : Fintype ι
m : ι → M
n : ι → N
hmn : ∑ i : ι, m i ⊗ₜ[R] n i = 0
⊢ VanishesTrivially R m n
state_after: no goals