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

Proof steps:
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
hMN : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
⊢ Injective ⇑(rTensor N M'.subtype)
state_after: 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
hMN : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
⊢ ∀ (a : ↥M' ⊗[R] N), (rTensor N M'.subtype) a = 0 → a = 0
tactic: apply (injective_iff_map_eq_zero _).mpr
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
hMN : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
⊢ ∀ (a : ↥M' ⊗[R] N), (rTensor N M'.subtype) a = 0 → a = 0
state_after: 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
hMN : ∀ {ι : 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' ⊗[R] N
hx : (rTensor N M'.subtype) x = 0
⊢ x = 0
tactic: rintro x hx
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
hMN : ∀ {ι : 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' ⊗[R] N
hx : (rTensor N M'.subtype) x = 0
⊢ x = 0
state_after: case intro
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
hMN : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
s : Finset (↥M' × N)
hx : (rTensor N M'.subtype) (∑ i ∈ s, i.1 ⊗ₜ[R] i.2) = 0
⊢ ∑ i ∈ s, i.1 ⊗ₜ[R] i.2 = 0
tactic: obtain ⟨s, rfl⟩ := exists_finset x
state_before: case intro
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
hMN : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
s : Finset (↥M' × N)
hx : (rTensor N M'.subtype) (∑ i ∈ s, i.1 ⊗ₜ[R] i.2) = 0
⊢ ∑ i ∈ s, i.1 ⊗ₜ[R] i.2 = 0
state_after: case intro
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
hMN : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
s : Finset (↥M' × N)
hx : (rTensor N M'.subtype) (∑ i ∈ s, i.1 ⊗ₜ[R] i.2) = 0
⊢ ∑ x ∈ s.attach, (↑x).1 ⊗ₜ[R] (↑x).2 = 0
tactic: rw [← Finset.sum_attach]
state_before: case intro
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
hMN : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
s : Finset (↥M' × N)
hx : (rTensor N M'.subtype) (∑ i ∈ s, i.1 ⊗ₜ[R] i.2) = 0
⊢ ∑ x ∈ s.attach, (↑x).1 ⊗ₜ[R] (↑x).2 = 0
state_after: case intro.hmn
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
hMN : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
s : Finset (↥M' × N)
hx : (rTensor N M'.subtype) (∑ i ∈ s, i.1 ⊗ₜ[R] i.2) = 0
⊢ VanishesTrivially R (fun i => (↑i).1) fun i => (↑i).2
tactic: apply sum_tmul_eq_zero_of_vanishesTrivially
state_before: case intro.hmn
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
hMN : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
s : Finset (↥M' × N)
hx : (rTensor N M'.subtype) (∑ i ∈ s, i.1 ⊗ₜ[R] i.2) = 0
⊢ VanishesTrivially R (fun i => (↑i).1) fun i => (↑i).2
state_after: case intro.hmn
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
hMN : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
s : Finset (↥M' × N)
hx : ∑ x ∈ s, ↑x.1 ⊗ₜ[R] x.2 = 0
⊢ VanishesTrivially R (fun i => (↑i).1) fun i => (↑i).2
tactic: simp only [map_sum, rTensor_tmul, coeSubtype] at hx
state_before: case intro.hmn
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
hMN : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
s : Finset (↥M' × N)
hx : ∑ x ∈ s, ↑x.1 ⊗ₜ[R] x.2 = 0
⊢ VanishesTrivially R (fun i => (↑i).1) fun i => (↑i).2
state_after: case intro.hmn
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
hMN : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
s : Finset (↥M' × N)
hx : ∑ x ∈ s, ↑x.1 ⊗ₜ[R] x.2 = 0
this : VanishesTrivially R (fun i => ↑(↑i).1) fun i => (↑i).2
⊢ VanishesTrivially R (fun i => (↑i).1) fun i => (↑i).2
tactic: have := hMN ((Finset.sum_attach s _).trans hx)
state_before: case intro.hmn
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
hMN : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
s : Finset (↥M' × N)
hx : ∑ x ∈ s, ↑x.1 ⊗ₜ[R] x.2 = 0
this : VanishesTrivially R (fun i => ↑(↑i).1) fun i => (↑i).2
⊢ VanishesTrivially R (fun i => (↑i).1) fun i => (↑i).2
state_after: case intro.hmn
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
hMN : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
s : Finset (↥M' × N)
hx : ∑ x ∈ s, ↑x.1 ⊗ₜ[R] x.2 = 0
this :
  ∃ κ x a y,
    (∀ (i : { x // x ∈ s }), (fun i => (↑i).2) i = ∑ j : κ, a i j • y j) ∧
      ∀ (j : κ), ∑ i : { x // x ∈ s }, a i j • (fun i => ↑(↑i).1) i = 0
⊢ ∃ κ x a y,
    (∀ (i : { x // x ∈ s }), (fun i => (↑i).2) i = ∑ j : κ, a i j • y j) ∧
      ∀ (j : κ), ∑ i : { x // x ∈ s }, a i j • (fun i => (↑i).1) i = 0
tactic: unfold VanishesTrivially at this ⊢
state_before: case intro.hmn
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
hMN : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
s : Finset (↥M' × N)
hx : ∑ x ∈ s, ↑x.1 ⊗ₜ[R] x.2 = 0
this :
  ∃ κ x a y,
    (∀ (i : { x // x ∈ s }), (fun i => (↑i).2) i = ∑ j : κ, a i j • y j) ∧
      ∀ (j : κ), ∑ i : { x // x ∈ s }, a i j • (fun i => ↑(↑i).1) i = 0
⊢ ∃ κ x a y,
    (∀ (i : { x // x ∈ s }), (fun i => (↑i).2) i = ∑ j : κ, a i j • y j) ∧
      ∀ (j : κ), ∑ i : { x // x ∈ s }, a i j • (fun i => (↑i).1) i = 0
state_after: case h.e'_2.h.h.e'_2.h.h.e'_2.h.h.e'_2.h.h.e'_2.h.a
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
hMN : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
s : Finset (↥M' × N)
hx : ∑ x ∈ s, ↑x.1 ⊗ₜ[R] x.2 = 0
this :
  ∃ κ x a y,
    (∀ (i : { x // x ∈ s }), (fun i => (↑i).2) i = ∑ j : κ, a i j • y j) ∧
      ∀ (j : κ), ∑ i : { x // x ∈ s }, a i j • (fun i => ↑(↑i).1) i = 0
κ : Type u
x✝ : Fintype κ
a : { x // x ∈ s } → κ → R
y : κ → N
j : κ
⊢ ∑ i : { x // x ∈ s }, a i j • (fun i => (↑i).1) i = 0 ↔ ∑ i : { x // x ∈ s }, a i j • (fun i => ↑(↑i).1) i = 0
tactic: convert this with κ _ a y j
state_before: case h.e'_2.h.h.e'_2.h.h.e'_2.h.h.e'_2.h.h.e'_2.h.a
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
hMN : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
s : Finset (↥M' × N)
hx : ∑ x ∈ s, ↑x.1 ⊗ₜ[R] x.2 = 0
this :
  ∃ κ x a y,
    (∀ (i : { x // x ∈ s }), (fun i => (↑i).2) i = ∑ j : κ, a i j • y j) ∧
      ∀ (j : κ), ∑ i : { x // x ∈ s }, a i j • (fun i => ↑(↑i).1) i = 0
κ : Type u
x✝ : Fintype κ
a : { x // x ∈ s } → κ → R
y : κ → N
j : κ
⊢ ∑ i : { x // x ∈ s }, a i j • (fun i => (↑i).1) i = 0 ↔ ∑ i : { x // x ∈ s }, a i j • (fun i => ↑(↑i).1) i = 0
state_after: case h.e'_2.h.h.e'_2.h.h.e'_2.h.h.e'_2.h.h.e'_2.h.a
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
hMN : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
s : Finset (↥M' × N)
hx : ∑ x ∈ s, ↑x.1 ⊗ₜ[R] x.2 = 0
this :
  ∃ κ x a y,
    (∀ (i : { x // x ∈ s }), (fun i => (↑i).2) i = ∑ j : κ, a i j • y j) ∧
      ∀ (j : κ), ∑ i : { x // x ∈ s }, a i j • (fun i => ↑(↑i).1) i = 0
κ : Type u
x✝ : Fintype κ
a : { x // x ∈ s } → κ → R
y : κ → N
j : κ
⊢ ∑ i : { x // x ∈ s }, a i j • (fun i => ↑(↑i).1) i = 0 ↔ ∑ i : { x // x ∈ s }, a i j • (fun i => (↑i).1) i = 0
tactic: symm
state_before: case h.e'_2.h.h.e'_2.h.h.e'_2.h.h.e'_2.h.h.e'_2.h.a
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
hMN : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
s : Finset (↥M' × N)
hx : ∑ x ∈ s, ↑x.1 ⊗ₜ[R] x.2 = 0
this :
  ∃ κ x a y,
    (∀ (i : { x // x ∈ s }), (fun i => (↑i).2) i = ∑ j : κ, a i j • y j) ∧
      ∀ (j : κ), ∑ i : { x // x ∈ s }, a i j • (fun i => ↑(↑i).1) i = 0
κ : Type u
x✝ : Fintype κ
a : { x // x ∈ s } → κ → R
y : κ → N
j : κ
⊢ ∑ i : { x // x ∈ s }, a i j • (fun i => ↑(↑i).1) i = 0 ↔ ∑ i : { x // x ∈ s }, a i j • (fun i => (↑i).1) i = 0
state_after: case h.e'_1.h.e'_2
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
hMN : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
s : Finset (↥M' × N)
hx : ∑ x ∈ s, ↑x.1 ⊗ₜ[R] x.2 = 0
this :
  ∃ κ x a y,
    (∀ (i : { x // x ∈ s }), (fun i => (↑i).2) i = ∑ j : κ, a i j • y j) ∧
      ∀ (j : κ), ∑ i : { x // x ∈ s }, a i j • (fun i => ↑(↑i).1) i = 0
κ : Type u
x✝ : Fintype κ
a : { x // x ∈ s } → κ → R
y : κ → N
j : κ
⊢ ∑ i : { x // x ∈ s }, a i j • (fun i => ↑(↑i).1) i = M'.subtype (∑ i : { x // x ∈ s }, a i j • (fun i => (↑i).1) i)
tactic: convert (injective_iff_map_eq_zero' _).mp (injective_subtype M') _
state_before: case h.e'_1.h.e'_2
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
hMN : ∀ {ι : Type u} [inst : Fintype ι] {m : ι → M} {n : ι → N}, ∑ i : ι, m i ⊗ₜ[R] n i = 0 → VanishesTrivially R m n
M' : Submodule R M
s : Finset (↥M' × N)
hx : ∑ x ∈ s, ↑x.1 ⊗ₜ[R] x.2 = 0
this :
  ∃ κ x a y,
    (∀ (i : { x // x ∈ s }), (fun i => (↑i).2) i = ∑ j : κ, a i j • y j) ∧
      ∀ (j : κ), ∑ i : { x // x ∈ s }, a i j • (fun i => ↑(↑i).1) i = 0
κ : Type u
x✝ : Fintype κ
a : { x // x ∈ s } → κ → R
y : κ → N
j : κ
⊢ ∑ i : { x // x ∈ s }, a i j • (fun i => ↑(↑i).1) i = M'.subtype (∑ i : { x // x ∈ s }, a i j • (fun i => (↑i).1) i)
state_after: no goals
tactic: simp