-- Mathlib/LinearAlgebra/DFinsupp.lean
theorem iSupIndep_of_dfinsupp_lsum_injective (p : ι → Submodule R N)
    (h : Function.Injective (lsum ℕ (M := fun i ↦ ↥(p i)) fun i => (p i).subtype)) :
    iSupIndep p

Proof state:
ι : Type u_1
R : Type u_2
N : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Semiring R
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
p : ι → Submodule R N
h : Function.Injective ⇑((lsum ℕ) fun i => (p i).subtype)
i : ι
x : ↥(p i)
v : Π₀ (i : ι), ↥(p i)
hv : ((lsum ℕ) fun i => (p i).subtype) (erase i v) = ↑x
⊢ ((lsum ℕ) fun i => (p i).subtype) (erase i v) = ((lsum ℕ) fun i => (p i).subtype) (single i x)

Tactic:
simpa only [lsum_single] using hv

Result:
no goals

Proof state:
ι : Type u_1
R : Type u_2
N : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Semiring R
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
p : ι → Submodule R N
h : Function.Injective ⇑((lsum ℕ) fun i => (p i).subtype)
⊢ ∀ (i : ι) (x : ↥(p i)) (v : Π₀ (i : ι), ↥(p i)), ((lsum ℕ) fun i => (p i).subtype) (erase i v) = ↑x → x = 0

Tactic:
intro i x v hv

Result:
ι : Type u_1
R : Type u_2
N : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Semiring R
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
p : ι → Submodule R N
h : Function.Injective ⇑((lsum ℕ) fun i => (p i).subtype)
i : ι
x : ↥(p i)
v : Π₀ (i : ι), ↥(p i)
hv : ((lsum ℕ) fun i => (p i).subtype) (erase i v) = ↑x
⊢ x = 0

Proof state:
ι : Type u_1
R : Type u_2
N : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Semiring R
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
p : ι → Submodule R N
h : Function.Injective ⇑((lsum ℕ) fun i => (p i).subtype)
⊢ iSupIndep p

Tactic:
rw [iSupIndep_iff_forall_dfinsupp]

Result:
ι : Type u_1
R : Type u_2
N : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Semiring R
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
p : ι → Submodule R N
h : Function.Injective ⇑((lsum ℕ) fun i => (p i).subtype)
⊢ ∀ (i : ι) (x : ↥(p i)) (v : Π₀ (i : ι), ↥(p i)), ((lsum ℕ) fun i => (p i).subtype) (erase i v) = ↑x → x = 0

Proof state:
ι : Type u_1
R : Type u_2
N : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Semiring R
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
p : ι → Submodule R N
h : Function.Injective ⇑((lsum ℕ) fun i => (p i).subtype)
i : ι
x : ↥(p i)
v : Π₀ (i : ι), ↥(p i)
hv : ((lsum ℕ) fun i => (p i).subtype) (erase i v) = ((lsum ℕ) fun i => (p i).subtype) (single i x)
⊢ x = 0

Tactic:
have := DFunLike.ext_iff.mp (h hv) i

Result:
ι : Type u_1
R : Type u_2
N : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Semiring R
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
p : ι → Submodule R N
h : Function.Injective ⇑((lsum ℕ) fun i => (p i).subtype)
i : ι
x : ↥(p i)
v : Π₀ (i : ι), ↥(p i)
hv : ((lsum ℕ) fun i => (p i).subtype) (erase i v) = ((lsum ℕ) fun i => (p i).subtype) (single i x)
this : (erase i v) i = (single i x) i
⊢ x = 0

Proof state:
ι : Type u_1
R : Type u_2
N : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Semiring R
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
p : ι → Submodule R N
h : Function.Injective ⇑((lsum ℕ) fun i => (p i).subtype)
i : ι
x : ↥(p i)
v : Π₀ (i : ι), ↥(p i)
hv : ((lsum ℕ) fun i => (p i).subtype) (erase i v) = ((lsum ℕ) fun i => (p i).subtype) (single i x)
this : (erase i v) i = (single i x) i
⊢ x = 0

Tactic:
simpa [eq_comm] using this

Result:
no goals

Proof state:
ι : Type u_1
R : Type u_2
N : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Semiring R
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
p : ι → Submodule R N
h : Function.Injective ⇑((lsum ℕ) fun i => (p i).subtype)
i : ι
x : ↥(p i)
v : Π₀ (i : ι), ↥(p i)
hv : ((lsum ℕ) fun i => (p i).subtype) (erase i v) = ↑x
⊢ x = 0

Tactic:
replace hv : lsum ℕ (M := fun i ↦ ↥(p i)) (fun i => (p i).subtype) (erase i v) =
    lsum ℕ (M := fun i ↦ ↥(p i)) (fun i => (p i).subtype) (single i x) := by
  simpa only [lsum_single] using hv

Result:
ι : Type u_1
R : Type u_2
N : Type u_5
inst✝³ : DecidableEq ι
inst✝² : Semiring R
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
p : ι → Submodule R N
h : Function.Injective ⇑((lsum ℕ) fun i => (p i).subtype)
i : ι
x : ↥(p i)
v : Π₀ (i : ι), ↥(p i)
hv : ((lsum ℕ) fun i => (p i).subtype) (erase i v) = ((lsum ℕ) fun i => (p i).subtype) (single i x)
⊢ x = 0