[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
⊢ LinearIndependent R v ↔ ∀ (l : ι →₀ R), ↑(Finsupp.total ι M R v) l = 0 → l = 0
[PROOFSTEP]
simp [LinearIndependent, LinearMap.ker_eq_bot']
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hf : ∀ (l : ι →₀ R), ↑(Finsupp.total ι M R v) l = 0 → l = 0
s : Finset ι
g : ι → R
hg : ∑ i in s, g i • v i = 0
i : ι
his : i ∈ s
⊢ ↑(Finsupp.total ι M R v) (∑ i in s, Finsupp.single i (g i)) = 0
[PROOFSTEP]
simpa only [LinearMap.map_sum, Finsupp.total_single] using hg
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hf : ∀ (l : ι →₀ R), ↑(Finsupp.total ι M R v) l = 0 → l = 0
s : Finset ι
g : ι → R
hg : ∑ i in s, g i • v i = 0
i : ι
his : i ∈ s
h : ∑ i in s, Finsupp.single i (g i) = 0
⊢ g i = ↑(Finsupp.lapply i) (Finsupp.single i (g i))
[PROOFSTEP]
{rw [Finsupp.lapply_apply, Finsupp.single_eq_same]
}
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hf : ∀ (l : ι →₀ R), ↑(Finsupp.total ι M R v) l = 0 → l = 0
s : Finset ι
g : ι → R
hg : ∑ i in s, g i • v i = 0
i : ι
his : i ∈ s
h : ∑ i in s, Finsupp.single i (g i) = 0
⊢ g i = ↑(Finsupp.lapply i) (Finsupp.single i (g i))
[PROOFSTEP]
rw [Finsupp.lapply_apply, Finsupp.single_eq_same]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hf : ∀ (l : ι →₀ R), ↑(Finsupp.total ι M R v) l = 0 → l = 0
s : Finset ι
g : ι → R
hg : ∑ i in s, g i • v i = 0
i : ι
his : i ∈ s
h : ∑ i in s, Finsupp.single i (g i) = 0
j : ι
_hjs : j ∈ s
hji : j ≠ i
⊢ ↑(Finsupp.lapply i) (Finsupp.single j (g j)) = 0
[PROOFSTEP]
rw [Finsupp.lapply_apply, Finsupp.single_eq_of_ne hji]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
⊢ LinearIndependent R v ↔
    ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
[PROOFSTEP]
classical exact
  linearIndependent_iff'.trans
    ⟨fun H s g hg hv i => if his : i ∈ s then H s g hv i his else hg i his, fun H s g hg i hi =>
      by
      convert
        H s (fun j => if j ∈ s then g j else 0) (fun j hj => if_neg hj)
          (by simp_rw [ite_smul, zero_smul, Finset.sum_extend_by_zero, hg]) i
      exact (if_pos hi).symm⟩
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
⊢ LinearIndependent R v ↔
    ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
[PROOFSTEP]
exact
  linearIndependent_iff'.trans
    ⟨fun H s g hg hv i => if his : i ∈ s then H s g hv i his else hg i his, fun H s g hg i hi =>
      by
      convert
        H s (fun j => if j ∈ s then g j else 0) (fun j hj => if_neg hj)
          (by simp_rw [ite_smul, zero_smul, Finset.sum_extend_by_zero, hg]) i
      exact (if_pos hi).symm⟩
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
H : ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
s : Finset ι
g : ι → R
hg : ∑ i in s, g i • v i = 0
i : ι
hi : i ∈ s
⊢ g i = 0
[PROOFSTEP]
convert
  H s (fun j => if j ∈ s then g j else 0) (fun j hj => if_neg hj)
    (by simp_rw [ite_smul, zero_smul, Finset.sum_extend_by_zero, hg]) i
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
H : ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
s : Finset ι
g : ι → R
hg : ∑ i in s, g i • v i = 0
i : ι
hi : i ∈ s
⊢ ∑ i in s, (fun j => if j ∈ s then g j else 0) i • v i = 0
[PROOFSTEP]
simp_rw [ite_smul, zero_smul, Finset.sum_extend_by_zero, hg]
[GOAL]
case h.e'_2
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
H : ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
s : Finset ι
g : ι → R
hg : ∑ i in s, g i • v i = 0
i : ι
hi : i ∈ s
⊢ g i = if i ∈ s then g i else 0
[PROOFSTEP]
exact (if_pos hi).symm
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
⊢ ¬LinearIndependent R v ↔ ∃ s g, ∑ i in s, g i • v i = 0 ∧ ∃ i, i ∈ s ∧ g i ≠ 0
[PROOFSTEP]
rw [linearIndependent_iff']
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
⊢ (¬∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι), i ∈ s → g i = 0) ↔
    ∃ s g, ∑ i in s, g i • v i = 0 ∧ ∃ i, i ∈ s ∧ g i ≠ 0
[PROOFSTEP]
simp only [exists_prop, not_forall]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : AddCommMonoid M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Fintype ι
⊢ LinearIndependent R v ↔ ∀ (g : ι → R), ∑ i : ι, g i • v i = 0 → ∀ (i : ι), g i = 0
[PROOFSTEP]
refine'
  ⟨fun H g => by simpa using linearIndependent_iff'.1 H Finset.univ g, fun H =>
    linearIndependent_iff''.2 fun s g hg hs i => H _ _ _⟩
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : AddCommMonoid M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Fintype ι
H : LinearIndependent R v
g : ι → R
⊢ ∑ i : ι, g i • v i = 0 → ∀ (i : ι), g i = 0
[PROOFSTEP]
simpa using linearIndependent_iff'.1 H Finset.univ g
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : AddCommMonoid M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Fintype ι
H : ∀ (g : ι → R), ∑ i : ι, g i • v i = 0 → ∀ (i : ι), g i = 0
s : Finset ι
g : ι → R
hg : ∀ (i : ι), ¬i ∈ s → g i = 0
hs : ∑ i in s, g i • v i = 0
i : ι
⊢ ∑ i : ι, g i • v i = 0
[PROOFSTEP]
rw [← hs]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : AddCommMonoid M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Fintype ι
H : ∀ (g : ι → R), ∑ i : ι, g i • v i = 0 → ∀ (i : ι), g i = 0
s : Finset ι
g : ι → R
hg : ∀ (i : ι), ¬i ∈ s → g i = 0
hs : ∑ i in s, g i • v i = 0
i : ι
⊢ ∑ i : ι, g i • v i = ∑ i in s, g i • v i
[PROOFSTEP]
refine' (Finset.sum_subset (Finset.subset_univ _) fun i _ hi => _).symm
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : AddCommMonoid M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Fintype ι
H : ∀ (g : ι → R), ∑ i : ι, g i • v i = 0 → ∀ (i : ι), g i = 0
s : Finset ι
g : ι → R
hg : ∀ (i : ι), ¬i ∈ s → g i = 0
hs : ∑ i in s, g i • v i = 0
i✝ i : ι
x✝ : i ∈ Finset.univ
hi : ¬i ∈ s
⊢ g i • v i = 0
[PROOFSTEP]
rw [hg i hi, zero_smul]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁸ : Semiring R
inst✝⁷ : AddCommMonoid M
inst✝⁶ : AddCommMonoid M'
inst✝⁵ : AddCommMonoid M''
inst✝⁴ : Module R M
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
⊢ LinearIndependent R v ↔
    LinearMap.ker (↑(LinearMap.lsum R (fun x => R) ℕ) fun i => LinearMap.smulRight LinearMap.id (v i)) = ⊥
[PROOFSTEP]
simp [Fintype.linearIndependent_iff, LinearMap.ker_eq_bot', funext_iff]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : AddCommMonoid M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Fintype ι
⊢ ¬LinearIndependent R v ↔ ∃ g, ∑ i : ι, g i • v i = 0 ∧ ∃ i, g i ≠ 0
[PROOFSTEP]
simpa using not_iff_not.2 Fintype.linearIndependent_iff
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : AddCommMonoid M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
i : ι
hv : LinearIndependent R v
h : v i = 0
⊢ 1 = 0
[PROOFSTEP]
suffices (Finsupp.single i 1 : ι →₀ R) i = 0 by simpa
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : AddCommMonoid M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
i : ι
hv : LinearIndependent R v
h : v i = 0
this : ↑(Finsupp.single i 1) i = 0
⊢ 1 = 0
[PROOFSTEP]
simpa
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : AddCommMonoid M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
i : ι
hv : LinearIndependent R v
h : v i = 0
⊢ ↑(Finsupp.single i 1) i = 0
[PROOFSTEP]
rw [linearIndependent_iff.1 hv (Finsupp.single i 1)]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : AddCommMonoid M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
i : ι
hv : LinearIndependent R v
h : v i = 0
⊢ ↑0 i = 0
[PROOFSTEP]
simp
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : AddCommMonoid M'
inst✝⁴ : AddCommMonoid M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
i : ι
hv : LinearIndependent R v
h : v i = 0
⊢ ↑(Finsupp.total ι M R v) (Finsupp.single i 1) = 0
[PROOFSTEP]
simp [h]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y✝ x y : M
h : LinearIndependent R ![x, y]
s t : R
h' : s • x + t • y = 0
⊢ s = 0 ∧ t = 0
[PROOFSTEP]
have := linearIndependent_iff'.1 h Finset.univ ![s, t]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y✝ x y : M
h : LinearIndependent R ![x, y]
s t : R
h' : s • x + t • y = 0
this :
  ∑ i : Fin (Nat.succ (Nat.succ 0)), Matrix.vecCons s ![t] i • Matrix.vecCons x ![y] i = 0 →
    ∀ (i : Fin (Nat.succ (Nat.succ 0))), i ∈ Finset.univ → Matrix.vecCons s ![t] i = 0
⊢ s = 0 ∧ t = 0
[PROOFSTEP]
simp only [Fin.sum_univ_two, Matrix.cons_val_zero, Matrix.cons_val_one, Matrix.head_cons, h', Finset.mem_univ,
  forall_true_left] at this 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y✝ x y : M
h : LinearIndependent R ![x, y]
s t : R
h' : s • x + t • y = 0
this : ∀ (i : Fin (Nat.succ (Nat.succ 0))), Matrix.vecCons s ![t] i = 0
⊢ s = 0 ∧ t = 0
[PROOFSTEP]
exact ⟨this 0, this 1⟩
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
h : LinearIndependent R v
f : ι' → ι
hf : Injective f
⊢ LinearIndependent R (v ∘ f)
[PROOFSTEP]
rw [linearIndependent_iff, Finsupp.total_comp]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
h : LinearIndependent R v
f : ι' → ι
hf : Injective f
⊢ ∀ (l : ι' →₀ R), ↑(LinearMap.comp (Finsupp.total ι M R v) (Finsupp.lmapDomain R R f)) l = 0 → l = 0
[PROOFSTEP]
intro l hl
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
h : LinearIndependent R v
f : ι' → ι
hf : Injective f
l : ι' →₀ R
hl : ↑(LinearMap.comp (Finsupp.total ι M R v) (Finsupp.lmapDomain R R f)) l = 0
⊢ l = 0
[PROOFSTEP]
have h_map_domain : ∀ x, (Finsupp.mapDomain f l) (f x) = 0 := by
  rw [linearIndependent_iff.1 h (Finsupp.mapDomain f l) hl]; simp
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
h : LinearIndependent R v
f : ι' → ι
hf : Injective f
l : ι' →₀ R
hl : ↑(LinearMap.comp (Finsupp.total ι M R v) (Finsupp.lmapDomain R R f)) l = 0
⊢ ∀ (x : ι'), ↑(Finsupp.mapDomain f l) (f x) = 0
[PROOFSTEP]
rw [linearIndependent_iff.1 h (Finsupp.mapDomain f l) hl]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
h : LinearIndependent R v
f : ι' → ι
hf : Injective f
l : ι' →₀ R
hl : ↑(LinearMap.comp (Finsupp.total ι M R v) (Finsupp.lmapDomain R R f)) l = 0
⊢ ∀ (x : ι'), ↑0 (f x) = 0
[PROOFSTEP]
simp
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
h : LinearIndependent R v
f : ι' → ι
hf : Injective f
l : ι' →₀ R
hl : ↑(LinearMap.comp (Finsupp.total ι M R v) (Finsupp.lmapDomain R R f)) l = 0
h_map_domain : ∀ (x : ι'), ↑(Finsupp.mapDomain f l) (f x) = 0
⊢ l = 0
[PROOFSTEP]
ext x
[GOAL]
case h
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
h : LinearIndependent R v
f : ι' → ι
hf : Injective f
l : ι' →₀ R
hl : ↑(LinearMap.comp (Finsupp.total ι M R v) (Finsupp.lmapDomain R R f)) l = 0
h_map_domain : ∀ (x : ι'), ↑(Finsupp.mapDomain f l) (f x) = 0
x : ι'
⊢ ↑l x = ↑0 x
[PROOFSTEP]
convert h_map_domain x
[GOAL]
case h.e'_2
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
h : LinearIndependent R v
f : ι' → ι
hf : Injective f
l : ι' →₀ R
hl : ↑(LinearMap.comp (Finsupp.total ι M R v) (Finsupp.lmapDomain R R f)) l = 0
h_map_domain : ∀ (x : ι'), ↑(Finsupp.mapDomain f l) (f x) = 0
x : ι'
⊢ ↑l x = ↑(Finsupp.mapDomain f l) (f x)
[PROOFSTEP]
rw [Finsupp.mapDomain_apply hf]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
i : LinearIndependent R v
⊢ LinearIndependent R Subtype.val
[PROOFSTEP]
simpa using i.comp _ (rangeSplitting_injective v)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
f : M →ₗ[R] M'
hf_inj : Disjoint (span R (range v)) (LinearMap.ker f)
⊢ LinearIndependent R (↑f ∘ v)
[PROOFSTEP]
rw [disjoint_iff_inf_le, ← Set.image_univ, Finsupp.span_image_eq_map_total, map_inf_eq_map_inf_comap,
  map_le_iff_le_comap, comap_bot, Finsupp.supported_univ, top_inf_eq] at hf_inj 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
f : M →ₗ[R] M'
hf_inj : comap (Finsupp.total ι M R v) (LinearMap.ker f) ≤ LinearMap.ker (Finsupp.total ι M R v)
⊢ LinearIndependent R (↑f ∘ v)
[PROOFSTEP]
unfold LinearIndependent at hv ⊢
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearMap.ker (Finsupp.total ι M R v) = ⊥
f : M →ₗ[R] M'
hf_inj : comap (Finsupp.total ι M R v) (LinearMap.ker f) ≤ LinearMap.ker (Finsupp.total ι M R v)
⊢ LinearMap.ker (Finsupp.total ι M' R (↑f ∘ v)) = ⊥
[PROOFSTEP]
rw [hv, le_bot_iff] at hf_inj 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearMap.ker (Finsupp.total ι M R v) = ⊥
f : M →ₗ[R] M'
hf_inj : comap (Finsupp.total ι M R v) (LinearMap.ker f) = ⊥
⊢ LinearMap.ker (Finsupp.total ι M' R (↑f ∘ v)) = ⊥
[PROOFSTEP]
haveI : Inhabited M := ⟨0⟩
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearMap.ker (Finsupp.total ι M R v) = ⊥
f : M →ₗ[R] M'
hf_inj : comap (Finsupp.total ι M R v) (LinearMap.ker f) = ⊥
this : Inhabited M
⊢ LinearMap.ker (Finsupp.total ι M' R (↑f ∘ v)) = ⊥
[PROOFSTEP]
rw [Finsupp.total_comp, @Finsupp.lmapDomain_total _ _ R _ _ _ _ _ _ _ _ _ _ f, LinearMap.ker_comp, hf_inj]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearMap.ker (Finsupp.total ι M R v) = ⊥
f : M →ₗ[R] M'
hf_inj : comap (Finsupp.total ι M R v) (LinearMap.ker f) = ⊥
this : Inhabited M
⊢ ∀ (i : ι), ↑f (v i) = ↑f (v i)
[PROOFSTEP]
exact fun _ => rfl
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
f : M →ₗ[R] M'
hv : LinearIndependent R (↑f ∘ v)
⊢ Disjoint (span R (range v)) (LinearMap.ker f)
[PROOFSTEP]
rw [LinearIndependent, Finsupp.total_comp, Finsupp.lmapDomain_total R _ f (fun _ ↦ rfl), LinearMap.ker_comp] at hv 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
f : M →ₗ[R] M'
hv : comap (Finsupp.total ι M R fun x => v x) (LinearMap.ker f) = ⊥
⊢ Disjoint (span R (range v)) (LinearMap.ker f)
[PROOFSTEP]
rw [disjoint_iff_inf_le, ← Set.image_univ, Finsupp.span_image_eq_map_total, map_inf_eq_map_inf_comap, hv, inf_bot_eq,
  map_bot]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
f : M →ₗ[R] M'
hf_inj : LinearMap.ker f = ⊥
⊢ Disjoint (span R (range v)) (LinearMap.ker f)
[PROOFSTEP]
simp [hf_inj]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
f : M →ₗ[R] M'
hfv : LinearIndependent R (↑f ∘ v)
s : Finset ι
g : ι → R
hg : ∑ i in s, g i • v i = 0
i : ι
his : i ∈ s
⊢ ∑ i in s, g i • ↑f (v i) = 0
[PROOFSTEP]
simp_rw [← f.map_smul, ← f.map_sum, hg, f.map_zero]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
f : M →ₗ[R] M'
hf_inj : ker f = ⊥
h : LinearIndependent R v
⊢ Disjoint (span R (Set.range v)) (ker f)
[PROOFSTEP]
simp only [hf_inj, disjoint_bot_right]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
m : ℕ
x : M
v : Fin m → M
hli : LinearIndependent R v
x_ortho : ∀ (c : R) (y : { x // x ∈ span R (range v) }), c • x + ↑y = 0 → c = 0
⊢ LinearIndependent R (Fin.cons x v)
[PROOFSTEP]
rw [Fintype.linearIndependent_iff] at hli ⊢
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
m : ℕ
x : M
v : Fin m → M
hli✝ : LinearIndependent R v
hli : ∀ (g : Fin m → R), ∑ i : Fin m, g i • v i = 0 → ∀ (i : Fin m), g i = 0
x_ortho : ∀ (c : R) (y : { x // x ∈ span R (range v) }), c • x + ↑y = 0 → c = 0
⊢ ∀ (g : Fin (m + 1) → R), ∑ i : Fin (m + 1), g i • Fin.cons x v i = 0 → ∀ (i : Fin (m + 1)), g i = 0
[PROOFSTEP]
rintro g total_eq j
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
m : ℕ
x : M
v : Fin m → M
hli✝ : LinearIndependent R v
hli : ∀ (g : Fin m → R), ∑ i : Fin m, g i • v i = 0 → ∀ (i : Fin m), g i = 0
x_ortho : ∀ (c : R) (y : { x // x ∈ span R (range v) }), c • x + ↑y = 0 → c = 0
g : Fin (m + 1) → R
total_eq : ∑ i : Fin (m + 1), g i • Fin.cons x v i = 0
j : Fin (m + 1)
⊢ g j = 0
[PROOFSTEP]
simp_rw [Fin.sum_univ_succ, Fin.cons_zero, Fin.cons_succ] at total_eq 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
m : ℕ
x : M
v : Fin m → M
hli✝ : LinearIndependent R v
hli : ∀ (g : Fin m → R), ∑ i : Fin m, g i • v i = 0 → ∀ (i : Fin m), g i = 0
x_ortho : ∀ (c : R) (y : { x // x ∈ span R (range v) }), c • x + ↑y = 0 → c = 0
g : Fin (m + 1) → R
j : Fin (m + 1)
total_eq : g 0 • x + ∑ x : Fin m, g (Fin.succ x) • v x = 0
⊢ g j = 0
[PROOFSTEP]
have : g 0 = 0 := by
  refine' x_ortho (g 0) ⟨∑ i : Fin m, g i.succ • v i, _⟩ total_eq
  exact sum_mem fun i _ => smul_mem _ _ (subset_span ⟨i, rfl⟩)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
m : ℕ
x : M
v : Fin m → M
hli✝ : LinearIndependent R v
hli : ∀ (g : Fin m → R), ∑ i : Fin m, g i • v i = 0 → ∀ (i : Fin m), g i = 0
x_ortho : ∀ (c : R) (y : { x // x ∈ span R (range v) }), c • x + ↑y = 0 → c = 0
g : Fin (m + 1) → R
j : Fin (m + 1)
total_eq : g 0 • x + ∑ x : Fin m, g (Fin.succ x) • v x = 0
⊢ g 0 = 0
[PROOFSTEP]
refine' x_ortho (g 0) ⟨∑ i : Fin m, g i.succ • v i, _⟩ total_eq
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
m : ℕ
x : M
v : Fin m → M
hli✝ : LinearIndependent R v
hli : ∀ (g : Fin m → R), ∑ i : Fin m, g i • v i = 0 → ∀ (i : Fin m), g i = 0
x_ortho : ∀ (c : R) (y : { x // x ∈ span R (range v) }), c • x + ↑y = 0 → c = 0
g : Fin (m + 1) → R
j : Fin (m + 1)
total_eq : g 0 • x + ∑ x : Fin m, g (Fin.succ x) • v x = 0
⊢ ∑ i : Fin m, g (Fin.succ i) • v i ∈ span R (range v)
[PROOFSTEP]
exact sum_mem fun i _ => smul_mem _ _ (subset_span ⟨i, rfl⟩)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
m : ℕ
x : M
v : Fin m → M
hli✝ : LinearIndependent R v
hli : ∀ (g : Fin m → R), ∑ i : Fin m, g i • v i = 0 → ∀ (i : Fin m), g i = 0
x_ortho : ∀ (c : R) (y : { x // x ∈ span R (range v) }), c • x + ↑y = 0 → c = 0
g : Fin (m + 1) → R
j : Fin (m + 1)
total_eq : g 0 • x + ∑ x : Fin m, g (Fin.succ x) • v x = 0
this : g 0 = 0
⊢ g j = 0
[PROOFSTEP]
rw [this, zero_smul, zero_add] at total_eq 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
m : ℕ
x : M
v : Fin m → M
hli✝ : LinearIndependent R v
hli : ∀ (g : Fin m → R), ∑ i : Fin m, g i • v i = 0 → ∀ (i : Fin m), g i = 0
x_ortho : ∀ (c : R) (y : { x // x ∈ span R (range v) }), c • x + ↑y = 0 → c = 0
g : Fin (m + 1) → R
j : Fin (m + 1)
total_eq : ∑ x : Fin m, g (Fin.succ x) • v x = 0
this : g 0 = 0
⊢ g j = 0
[PROOFSTEP]
exact Fin.cases this (hli _ total_eq) j
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝¹⁰ : Semiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : AddCommMonoid M''
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
a b : R
x y : M
inst✝³ : Semiring K
inst✝² : SMulWithZero R K
inst✝¹ : Module K M
inst✝ : IsScalarTower R K M
hinj : Injective fun r => r • 1
li : LinearIndependent K v
⊢ LinearIndependent R v
[PROOFSTEP]
refine' linearIndependent_iff'.mpr fun s g hg i hi => hinj _
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝¹⁰ : Semiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : AddCommMonoid M''
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
a b : R
x y : M
inst✝³ : Semiring K
inst✝² : SMulWithZero R K
inst✝¹ : Module K M
inst✝ : IsScalarTower R K M
hinj : Injective fun r => r • 1
li : LinearIndependent K v
s : Finset ι
g : ι → R
hg : ∑ i in s, g i • v i = 0
i : ι
hi : i ∈ s
⊢ (fun r => r • 1) (g i) = (fun r => r • 1) 0
[PROOFSTEP]
dsimp only
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝¹⁰ : Semiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : AddCommMonoid M''
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
a b : R
x y : M
inst✝³ : Semiring K
inst✝² : SMulWithZero R K
inst✝¹ : Module K M
inst✝ : IsScalarTower R K M
hinj : Injective fun r => r • 1
li : LinearIndependent K v
s : Finset ι
g : ι → R
hg : ∑ i in s, g i • v i = 0
i : ι
hi : i ∈ s
⊢ g i • 1 = 0 • 1
[PROOFSTEP]
rw [zero_smul]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝¹⁰ : Semiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : AddCommMonoid M''
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
a b : R
x y : M
inst✝³ : Semiring K
inst✝² : SMulWithZero R K
inst✝¹ : Module K M
inst✝ : IsScalarTower R K M
hinj : Injective fun r => r • 1
li : LinearIndependent K v
s : Finset ι
g : ι → R
hg : ∑ i in s, g i • v i = 0
i : ι
hi : i ∈ s
⊢ g i • 1 = 0
[PROOFSTEP]
refine' (linearIndependent_iff'.mp li : _) _ (g · • (1 : K)) _ i hi
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝¹⁰ : Semiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : AddCommMonoid M''
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
a b : R
x y : M
inst✝³ : Semiring K
inst✝² : SMulWithZero R K
inst✝¹ : Module K M
inst✝ : IsScalarTower R K M
hinj : Injective fun r => r • 1
li : LinearIndependent K v
s : Finset ι
g : ι → R
hg : ∑ i in s, g i • v i = 0
i : ι
hi : i ∈ s
⊢ ∑ i in s, (fun x => g x • 1) i • v i = 0
[PROOFSTEP]
simp_rw [smul_assoc, one_smul]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝¹⁰ : Semiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : AddCommMonoid M'
inst✝⁷ : AddCommMonoid M''
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
a b : R
x y : M
inst✝³ : Semiring K
inst✝² : SMulWithZero R K
inst✝¹ : Module K M
inst✝ : IsScalarTower R K M
hinj : Injective fun r => r • 1
li : LinearIndependent K v
s : Finset ι
g : ι → R
hg : ∑ i in s, g i • v i = 0
i : ι
hi : i ∈ s
⊢ ∑ x in s, g x • v x = 0
[PROOFSTEP]
exact hg
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set M
li : LinearIndependent R Subtype.val
t : Finset ↑s
⊢ LinearIndependent R Subtype.val
[PROOFSTEP]
let f : t.map (Embedding.subtype s) → s := fun x =>
  ⟨x.1, by
    obtain ⟨x, h⟩ := x
    rw [Finset.mem_map] at h 
    obtain ⟨a, _ha, rfl⟩ := h
    simp only [Subtype.coe_prop, Embedding.coe_subtype]⟩
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
s : Set M
li : LinearIndependent R Subtype.val
t : Finset ↑s
x : { x // x ∈ Finset.map (Embedding.subtype s) t }
⊢ ↑x ∈ s
[PROOFSTEP]
obtain ⟨x, h⟩ := x
[GOAL]
case mk
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
s : Set M
li : LinearIndependent R Subtype.val
t : Finset ↑s
x : M
h : x ∈ Finset.map (Embedding.subtype s) t
⊢ ↑{ val := x, property := h } ∈ s
[PROOFSTEP]
rw [Finset.mem_map] at h 
[GOAL]
case mk
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
s : Set M
li : LinearIndependent R Subtype.val
t : Finset ↑s
x : M
h✝ : x ∈ Finset.map (Embedding.subtype s) t
h : ∃ a, a ∈ t ∧ ↑(Embedding.subtype s) a = x
⊢ ↑{ val := x, property := h✝ } ∈ s
[PROOFSTEP]
obtain ⟨a, _ha, rfl⟩ := h
[GOAL]
case mk.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a✝ b : R
x y : M
s : Set M
li : LinearIndependent R Subtype.val
t : Finset ↑s
a : Subtype s
_ha : a ∈ t
h : ↑(Embedding.subtype s) a ∈ Finset.map (Embedding.subtype s) t
⊢ ↑{ val := ↑(Embedding.subtype s) a, property := h } ∈ s
[PROOFSTEP]
simp only [Subtype.coe_prop, Embedding.coe_subtype]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set M
li : LinearIndependent R Subtype.val
t : Finset ↑s
f : { x // x ∈ Finset.map (Embedding.subtype s) t } → ↑s := fun x => { val := ↑x, property := (_ : ↑x ∈ s) }
⊢ LinearIndependent R Subtype.val
[PROOFSTEP]
convert LinearIndependent.comp li f ?_
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set M
li : LinearIndependent R Subtype.val
t : Finset ↑s
f : { x // x ∈ Finset.map (Embedding.subtype s) t } → ↑s := fun x => { val := ↑x, property := (_ : ↑x ∈ s) }
⊢ Injective f
[PROOFSTEP]
rintro ⟨x, hx⟩ ⟨y, hy⟩
[GOAL]
case mk.mk
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y✝ : M
s : Set M
li : LinearIndependent R Subtype.val
t : Finset ↑s
f : { x // x ∈ Finset.map (Embedding.subtype s) t } → ↑s := fun x => { val := ↑x, property := (_ : ↑x ∈ s) }
x : M
hx : x ∈ Finset.map (Embedding.subtype s) t
y : M
hy : y ∈ Finset.map (Embedding.subtype s) t
⊢ f { val := x, property := hx } = f { val := y, property := hy } →
    { val := x, property := hx } = { val := y, property := hy }
[PROOFSTEP]
rw [Finset.mem_map] at hx hy 
[GOAL]
case mk.mk
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y✝ : M
s : Set M
li : LinearIndependent R Subtype.val
t : Finset ↑s
f : { x // x ∈ Finset.map (Embedding.subtype s) t } → ↑s := fun x => { val := ↑x, property := (_ : ↑x ∈ s) }
x : M
hx✝ : x ∈ Finset.map (Embedding.subtype s) t
hx : ∃ a, a ∈ t ∧ ↑(Embedding.subtype s) a = x
y : M
hy✝ : y ∈ Finset.map (Embedding.subtype s) t
hy : ∃ a, a ∈ t ∧ ↑(Embedding.subtype s) a = y
⊢ f { val := x, property := hx✝ } = f { val := y, property := hy✝ } →
    { val := x, property := hx✝ } = { val := y, property := hy✝ }
[PROOFSTEP]
obtain ⟨a, _ha, rfl⟩ := hx
[GOAL]
case mk.mk.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a✝ b : R
x y✝ : M
s : Set M
li : LinearIndependent R Subtype.val
t : Finset ↑s
f : { x // x ∈ Finset.map (Embedding.subtype s) t } → ↑s := fun x => { val := ↑x, property := (_ : ↑x ∈ s) }
y : M
hy✝ : y ∈ Finset.map (Embedding.subtype s) t
hy : ∃ a, a ∈ t ∧ ↑(Embedding.subtype s) a = y
a : Subtype s
_ha : a ∈ t
hx : ↑(Embedding.subtype s) a ∈ Finset.map (Embedding.subtype s) t
⊢ f { val := ↑(Embedding.subtype s) a, property := hx } = f { val := y, property := hy✝ } →
    { val := ↑(Embedding.subtype s) a, property := hx } = { val := y, property := hy✝ }
[PROOFSTEP]
obtain ⟨b, _hb, rfl⟩ := hy
[GOAL]
case mk.mk.intro.intro.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a✝ b✝ : R
x y : M
s : Set M
li : LinearIndependent R Subtype.val
t : Finset ↑s
f : { x // x ∈ Finset.map (Embedding.subtype s) t } → ↑s := fun x => { val := ↑x, property := (_ : ↑x ∈ s) }
a : Subtype s
_ha : a ∈ t
hx : ↑(Embedding.subtype s) a ∈ Finset.map (Embedding.subtype s) t
b : Subtype s
_hb : b ∈ t
hy : ↑(Embedding.subtype s) b ∈ Finset.map (Embedding.subtype s) t
⊢ f { val := ↑(Embedding.subtype s) a, property := hx } = f { val := ↑(Embedding.subtype s) b, property := hy } →
    { val := ↑(Embedding.subtype s) a, property := hx } = { val := ↑(Embedding.subtype s) b, property := hy }
[PROOFSTEP]
simp only [imp_self, Subtype.mk_eq_mk]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
n : ℕ
H : ∀ (s : Finset M), (LinearIndependent R fun i => ↑i) → Finset.card s ≤ n
⊢ ∀ (s : Set M), LinearIndependent R Subtype.val → #↑s ≤ ↑n
[PROOFSTEP]
intro s li
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
n : ℕ
H : ∀ (s : Finset M), (LinearIndependent R fun i => ↑i) → Finset.card s ≤ n
s : Set M
li : LinearIndependent R Subtype.val
⊢ #↑s ≤ ↑n
[PROOFSTEP]
apply Cardinal.card_le_of
[GOAL]
case H
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
n : ℕ
H : ∀ (s : Finset M), (LinearIndependent R fun i => ↑i) → Finset.card s ≤ n
s : Set M
li : LinearIndependent R Subtype.val
⊢ ∀ (s_1 : Finset ↑s), Finset.card s_1 ≤ n
[PROOFSTEP]
intro t
[GOAL]
case H
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
n : ℕ
H : ∀ (s : Finset M), (LinearIndependent R fun i => ↑i) → Finset.card s ≤ n
s : Set M
li : LinearIndependent R Subtype.val
t : Finset ↑s
⊢ Finset.card t ≤ n
[PROOFSTEP]
rw [← Finset.card_map (Embedding.subtype s)]
[GOAL]
case H
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
n : ℕ
H : ∀ (s : Finset M), (LinearIndependent R fun i => ↑i) → Finset.card s ≤ n
s : Set M
li : LinearIndependent R Subtype.val
t : Finset ↑s
⊢ Finset.card (Finset.map (Embedding.subtype s) t) ≤ n
[PROOFSTEP]
apply H
[GOAL]
case H.a
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
n : ℕ
H : ∀ (s : Finset M), (LinearIndependent R fun i => ↑i) → Finset.card s ≤ n
s : Set M
li : LinearIndependent R Subtype.val
t : Finset ↑s
⊢ LinearIndependent R fun i => ↑i
[PROOFSTEP]
apply linearIndependent_finset_map_embedding_subtype _ li
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
⊢ LinearIndependent R (v ∘ Subtype.val) ↔
    ∀ (l : ι →₀ R), l ∈ Finsupp.supported R R s → ↑(Finsupp.total ι M R v) l = 0 → l = 0
[PROOFSTEP]
simp only [linearIndependent_iff, (· ∘ ·), Finsupp.mem_supported, Finsupp.total_apply, Set.subset_def, Finset.mem_coe]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
⊢ (∀ (l : ↑s →₀ R), (Finsupp.sum l fun i a => a • v ↑i) = 0 → l = 0) ↔
    ∀ (l : ι →₀ R), (∀ (x : ι), x ∈ l.support → x ∈ s) → (Finsupp.sum l fun i a => a • v i) = 0 → l = 0
[PROOFSTEP]
constructor
[GOAL]
case mp
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
⊢ (∀ (l : ↑s →₀ R), (Finsupp.sum l fun i a => a • v ↑i) = 0 → l = 0) →
    ∀ (l : ι →₀ R), (∀ (x : ι), x ∈ l.support → x ∈ s) → (Finsupp.sum l fun i a => a • v i) = 0 → l = 0
[PROOFSTEP]
intro h l hl₁ hl₂
[GOAL]
case mp
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ↑s →₀ R), (Finsupp.sum l fun i a => a • v ↑i) = 0 → l = 0
l : ι →₀ R
hl₁ : ∀ (x : ι), x ∈ l.support → x ∈ s
hl₂ : (Finsupp.sum l fun i a => a • v i) = 0
⊢ l = 0
[PROOFSTEP]
have := h (l.subtypeDomain s) ((Finsupp.sum_subtypeDomain_index hl₁).trans hl₂)
[GOAL]
case mp
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ↑s →₀ R), (Finsupp.sum l fun i a => a • v ↑i) = 0 → l = 0
l : ι →₀ R
hl₁ : ∀ (x : ι), x ∈ l.support → x ∈ s
hl₂ : (Finsupp.sum l fun i a => a • v i) = 0
this : Finsupp.subtypeDomain s l = 0
⊢ l = 0
[PROOFSTEP]
exact (Finsupp.subtypeDomain_eq_zero_iff hl₁).1 this
[GOAL]
case mpr
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
⊢ (∀ (l : ι →₀ R), (∀ (x : ι), x ∈ l.support → x ∈ s) → (Finsupp.sum l fun i a => a • v i) = 0 → l = 0) →
    ∀ (l : ↑s →₀ R), (Finsupp.sum l fun i a => a • v ↑i) = 0 → l = 0
[PROOFSTEP]
intro h l hl
[GOAL]
case mpr
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ (x : ι), x ∈ l.support → x ∈ s) → (Finsupp.sum l fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (Finsupp.sum l fun i a => a • v ↑i) = 0
⊢ l = 0
[PROOFSTEP]
refine' Finsupp.embDomain_eq_zero.1 (h (l.embDomain <| Function.Embedding.subtype s) _ _)
[GOAL]
case mpr.refine'_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ (x : ι), x ∈ l.support → x ∈ s) → (Finsupp.sum l fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (Finsupp.sum l fun i a => a • v ↑i) = 0
⊢ ∀ (x : ι), x ∈ (Finsupp.embDomain (Embedding.subtype s) l).support → x ∈ s
[PROOFSTEP]
suffices ∀ i hi, ¬l ⟨i, hi⟩ = 0 → i ∈ s by simpa
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ (x : ι), x ∈ l.support → x ∈ s) → (Finsupp.sum l fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (Finsupp.sum l fun i a => a • v ↑i) = 0
this : ∀ (i : ι) (hi : i ∈ s), ¬↑l { val := i, property := hi } = 0 → i ∈ s
⊢ ∀ (x : ι), x ∈ (Finsupp.embDomain (Embedding.subtype s) l).support → x ∈ s
[PROOFSTEP]
simpa
[GOAL]
case mpr.refine'_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ (x : ι), x ∈ l.support → x ∈ s) → (Finsupp.sum l fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (Finsupp.sum l fun i a => a • v ↑i) = 0
⊢ ∀ (i : ι) (hi : i ∈ s), ¬↑l { val := i, property := hi } = 0 → i ∈ s
[PROOFSTEP]
intros
[GOAL]
case mpr.refine'_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ (x : ι), x ∈ l.support → x ∈ s) → (Finsupp.sum l fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (Finsupp.sum l fun i a => a • v ↑i) = 0
i✝ : ι
hi✝ : i✝ ∈ s
a✝ : ¬↑l { val := i✝, property := hi✝ } = 0
⊢ i✝ ∈ s
[PROOFSTEP]
assumption
[GOAL]
case mpr.refine'_2
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ (x : ι), x ∈ l.support → x ∈ s) → (Finsupp.sum l fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (Finsupp.sum l fun i a => a • v ↑i) = 0
⊢ (Finsupp.sum (Finsupp.embDomain (Embedding.subtype s) l) fun i a => a • v i) = 0
[PROOFSTEP]
rwa [Finsupp.embDomain_eq_mapDomain, Finsupp.sum_mapDomain_index]
[GOAL]
case mpr.refine'_2.h_zero
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ (x : ι), x ∈ l.support → x ∈ s) → (Finsupp.sum l fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (Finsupp.sum l fun i a => a • v ↑i) = 0
⊢ ∀ (b : ι), 0 • v b = 0
case mpr.refine'_2.h_add
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ (x : ι), x ∈ l.support → x ∈ s) → (Finsupp.sum l fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (Finsupp.sum l fun i a => a • v ↑i) = 0
⊢ ∀ (b : ι) (m₁ m₂ : R), (m₁ + m₂) • v b = m₁ • v b + m₂ • v b
[PROOFSTEP]
exacts [fun _ => zero_smul _ _, fun _ _ _ => add_smul _ _ _]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
⊢ ¬LinearIndependent R (v ∘ Subtype.val) ↔ ∃ f, f ∈ Finsupp.supported R R s ∧ ↑(Finsupp.total ι M R v) f = 0 ∧ f ≠ 0
[PROOFSTEP]
simp [linearIndependent_comp_subtype, and_left_comm]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set M
⊢ (LinearIndependent R fun x => ↑x) ↔
    ∀ (l : M →₀ R), l ∈ Finsupp.supported R R s → ↑(Finsupp.total M M R id) l = 0 → l = 0
[PROOFSTEP]
apply @linearIndependent_comp_subtype _ _ _ id
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
⊢ LinearIndependent R (v ∘ Subtype.val) ↔ Disjoint (Finsupp.supported R R s) (LinearMap.ker (Finsupp.total ι M R v))
[PROOFSTEP]
rw [linearIndependent_comp_subtype, LinearMap.disjoint_ker]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set M
⊢ (LinearIndependent R fun x => ↑x) ↔ Disjoint (Finsupp.supported R R s) (LinearMap.ker (Finsupp.total M M R id))
[PROOFSTEP]
apply @linearIndependent_comp_subtype_disjoint _ _ _ id
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set M
⊢ (LinearIndependent R fun x => ↑x) ↔ LinearMap.ker (Finsupp.totalOn M M R id s) = ⊥
[PROOFSTEP]
rw [Finsupp.totalOn, LinearMap.ker, LinearMap.comap_codRestrict, Submodule.map_bot, comap_bot, LinearMap.ker_comp,
  linearIndependent_subtype_disjoint, disjoint_iff_inf_le, ← map_comap_subtype, map_le_iff_le_comap, comap_bot,
  ker_subtype, le_bot_iff]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
simp [linearIndependent_subtype_disjoint]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
t s : Set M
h : t ⊆ s
⊢ (LinearIndependent R fun x => ↑x) → LinearIndependent R fun x => ↑x
[PROOFSTEP]
simp only [linearIndependent_subtype_disjoint]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
t s : Set M
h : t ⊆ s
⊢ Disjoint (Finsupp.supported R R s) (LinearMap.ker (Finsupp.total M M R id)) →
    Disjoint (Finsupp.supported R R t) (LinearMap.ker (Finsupp.total M M R id))
[PROOFSTEP]
exact Disjoint.mono_left (Finsupp.supported_mono h)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
s : η → Set M
hs : Directed (fun x x_1 => x ⊆ x_1) s
h : ∀ (i : η), LinearIndependent R fun x => ↑x
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
by_cases hη : Nonempty η
[GOAL]
case pos
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
s : η → Set M
hs : Directed (fun x x_1 => x ⊆ x_1) s
h : ∀ (i : η), LinearIndependent R fun x => ↑x
hη : Nonempty η
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
skip
[GOAL]
case pos
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
s : η → Set M
hs : Directed (fun x x_1 => x ⊆ x_1) s
h : ∀ (i : η), LinearIndependent R fun x => ↑x
hη : Nonempty η
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
refine' linearIndependent_of_finite (⋃ i, s i) fun t ht ft => _
[GOAL]
case pos
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
s : η → Set M
hs : Directed (fun x x_1 => x ⊆ x_1) s
h : ∀ (i : η), LinearIndependent R fun x => ↑x
hη : Nonempty η
t : Set M
ht : t ⊆ ⋃ (i : η), s i
ft : Set.Finite t
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
rcases finite_subset_iUnion ft ht with ⟨I, fi, hI⟩
[GOAL]
case pos.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
s : η → Set M
hs : Directed (fun x x_1 => x ⊆ x_1) s
h : ∀ (i : η), LinearIndependent R fun x => ↑x
hη : Nonempty η
t : Set M
ht : t ⊆ ⋃ (i : η), s i
ft : Set.Finite t
I : Set η
fi : Set.Finite I
hI : t ⊆ ⋃ (i : η) (_ : i ∈ I), s i
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
rcases hs.finset_le fi.toFinset with ⟨i, hi⟩
[GOAL]
case pos.intro.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
s : η → Set M
hs : Directed (fun x x_1 => x ⊆ x_1) s
h : ∀ (i : η), LinearIndependent R fun x => ↑x
hη : Nonempty η
t : Set M
ht : t ⊆ ⋃ (i : η), s i
ft : Set.Finite t
I : Set η
fi : Set.Finite I
hI : t ⊆ ⋃ (i : η) (_ : i ∈ I), s i
i : η
hi : ∀ (i_1 : η), i_1 ∈ Finite.toFinset fi → s i_1 ⊆ s i
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
exact (h i).mono (Subset.trans hI <| iUnion₂_subset fun j hj => hi j (fi.mem_toFinset.2 hj))
[GOAL]
case neg
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
s : η → Set M
hs : Directed (fun x x_1 => x ⊆ x_1) s
h : ∀ (i : η), LinearIndependent R fun x => ↑x
hη : ¬Nonempty η
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
refine (linearIndependent_empty R M).mono (t := iUnion (s ·)) ?_
[GOAL]
case neg
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
s : η → Set M
hs : Directed (fun x x_1 => x ⊆ x_1) s
h : ∀ (i : η), LinearIndependent R fun x => ↑x
hη : ¬Nonempty η
⊢ ⋃ (x : η), s x ⊆ ∅
[PROOFSTEP]
rintro _ ⟨_, ⟨i, _⟩, _⟩
[GOAL]
case neg.intro.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
s : η → Set M
hs : Directed (fun x x_1 => x ⊆ x_1) s
h : ∀ (i : η), LinearIndependent R fun x => ↑x
hη : ¬Nonempty η
a✝ : M
w✝ : Set M
right✝ : a✝ ∈ w✝
i : η
h✝ : (fun x => s x) i = w✝
⊢ a✝ ∈ ∅
[PROOFSTEP]
exact hη ⟨i⟩
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set (Set M)
hs : DirectedOn (fun x x_1 => x ⊆ x_1) s
h : ∀ (a : Set M), a ∈ s → LinearIndependent R Subtype.val
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
rw [sUnion_eq_iUnion]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set (Set M)
hs : DirectedOn (fun x x_1 => x ⊆ x_1) s
h : ∀ (a : Set M), a ∈ s → LinearIndependent R Subtype.val
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
exact linearIndependent_iUnion_of_directed hs.directed_val (by simpa using h)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set (Set M)
hs : DirectedOn (fun x x_1 => x ⊆ x_1) s
h : ∀ (a : Set M), a ∈ s → LinearIndependent R Subtype.val
⊢ ∀ (i : ↑s), LinearIndependent R fun x => ↑x
[PROOFSTEP]
simpa using h
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
s : Set η
t : η → Set M
hs : DirectedOn (t ⁻¹'o fun x x_1 => x ⊆ x_1) s
h : ∀ (a : η), a ∈ s → LinearIndependent R fun x => ↑x
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
rw [biUnion_eq_iUnion]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
s : Set η
t : η → Set M
hs : DirectedOn (t ⁻¹'o fun x x_1 => x ⊆ x_1) s
h : ∀ (a : η), a ∈ s → LinearIndependent R fun x => ↑x
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
exact linearIndependent_iUnion_of_directed (directed_comp.2 <| hs.directed_val) (by simpa using h)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
s : Set η
t : η → Set M
hs : DirectedOn (t ⁻¹'o fun x x_1 => x ⊆ x_1) s
h : ∀ (a : η), a ∈ s → LinearIndependent R fun x => ↑x
⊢ ∀ (i : ↑s), LinearIndependent R fun x => ↑x
[PROOFSTEP]
simpa using h
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
⊢ Injective v
[PROOFSTEP]
intro i j hij
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
i j : ι
hij : v i = v j
⊢ i = j
[PROOFSTEP]
let l : ι →₀ R := Finsupp.single i (1 : R) - Finsupp.single j 1
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
i j : ι
hij : v i = v j
l : ι →₀ R := Finsupp.single i 1 - Finsupp.single j 1
⊢ i = j
[PROOFSTEP]
have h_total : Finsupp.total ι M R v l = 0 :=
  by
  simp_rw [LinearMap.map_sub, Finsupp.total_apply]
  simp [hij]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
i j : ι
hij : v i = v j
l : ι →₀ R := Finsupp.single i 1 - Finsupp.single j 1
⊢ ↑(Finsupp.total ι M R v) l = 0
[PROOFSTEP]
simp_rw [LinearMap.map_sub, Finsupp.total_apply]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
i j : ι
hij : v i = v j
l : ι →₀ R := Finsupp.single i 1 - Finsupp.single j 1
⊢ ((Finsupp.sum (Finsupp.single i 1) fun i a => a • v i) - Finsupp.sum (Finsupp.single j 1) fun i a => a • v i) = 0
[PROOFSTEP]
simp [hij]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
i j : ι
hij : v i = v j
l : ι →₀ R := Finsupp.single i 1 - Finsupp.single j 1
h_total : ↑(Finsupp.total ι M R v) l = 0
⊢ i = j
[PROOFSTEP]
have h_single_eq : Finsupp.single i (1 : R) = Finsupp.single j 1 :=
  by
  rw [linearIndependent_iff] at hv 
  simp [eq_add_of_sub_eq' (hv l h_total)]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
i j : ι
hij : v i = v j
l : ι →₀ R := Finsupp.single i 1 - Finsupp.single j 1
h_total : ↑(Finsupp.total ι M R v) l = 0
⊢ Finsupp.single i 1 = Finsupp.single j 1
[PROOFSTEP]
rw [linearIndependent_iff] at hv 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : ∀ (l : ι →₀ R), ↑(Finsupp.total ι M R v) l = 0 → l = 0
i j : ι
hij : v i = v j
l : ι →₀ R := Finsupp.single i 1 - Finsupp.single j 1
h_total : ↑(Finsupp.total ι M R v) l = 0
⊢ Finsupp.single i 1 = Finsupp.single j 1
[PROOFSTEP]
simp [eq_add_of_sub_eq' (hv l h_total)]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
i j : ι
hij : v i = v j
l : ι →₀ R := Finsupp.single i 1 - Finsupp.single j 1
h_total : ↑(Finsupp.total ι M R v) l = 0
h_single_eq : Finsupp.single i 1 = Finsupp.single j 1
⊢ i = j
[PROOFSTEP]
simpa [Finsupp.single_eq_single_iff] using h_single_eq
[GOAL]
ι✝ : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
ι : Type u_8
f : ι → M
hf : LinearIndependent R f
⊢ LinearIndependent R Subtype.val
[PROOFSTEP]
nontriviality R
[GOAL]
ι✝ : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
ι : Type u_8
f : ι → M
hf : LinearIndependent R f
✝ : Nontrivial R
⊢ LinearIndependent R Subtype.val
[PROOFSTEP]
exact (linearIndependent_subtype_range hf.injective).2 hf
[GOAL]
ι✝ : Type u'
ι'✝ : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
ι : Type u_8
ι' : Type u_9
s : Set ι
f : ι → ι'
g : ι' → M
hs : LinearIndependent R fun x => g (f ↑x)
⊢ LinearIndependent R fun x => g ↑x
[PROOFSTEP]
nontriviality R
[GOAL]
ι✝ : Type u'
ι'✝ : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
ι : Type u_8
ι' : Type u_9
s : Set ι
f : ι → ι'
g : ι' → M
hs : LinearIndependent R fun x => g (f ↑x)
✝ : Nontrivial R
⊢ LinearIndependent R fun x => g ↑x
[PROOFSTEP]
have : InjOn f s := injOn_iff_injective.2 hs.injective.of_comp
[GOAL]
ι✝ : Type u'
ι'✝ : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
ι : Type u_8
ι' : Type u_9
s : Set ι
f : ι → ι'
g : ι' → M
hs : LinearIndependent R fun x => g (f ↑x)
✝ : Nontrivial R
this : InjOn f s
⊢ LinearIndependent R fun x => g ↑x
[PROOFSTEP]
exact (linearIndependent_equiv' (Equiv.Set.imageOfInjOn f s this) rfl).1 hs
[GOAL]
ι✝ : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
ι : Type u_8
s : Set ι
f : ι → M
hs : LinearIndependent R fun x => f ↑x
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
convert LinearIndependent.image_of_comp s f id hs
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝¹⁰ : Ring R
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
a b : R
x y : M
G : Type u_8
hG : Group G
inst✝³ : DistribMulAction G R
inst✝² : DistribMulAction G M
inst✝¹ : IsScalarTower G R M
inst✝ : SMulCommClass G R M
v : ι → M
hv : LinearIndependent R v
w : ι → G
⊢ LinearIndependent R (w • v)
[PROOFSTEP]
rw [linearIndependent_iff''] at hv ⊢
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝¹⁰ : Ring R
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
a b : R
x y : M
G : Type u_8
hG : Group G
inst✝³ : DistribMulAction G R
inst✝² : DistribMulAction G M
inst✝¹ : IsScalarTower G R M
inst✝ : SMulCommClass G R M
v : ι → M
hv : ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
w : ι → G
⊢ ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • (w • v) i = 0 → ∀ (i : ι), g i = 0
[PROOFSTEP]
intro s g hgs hsum i
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝¹⁰ : Ring R
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
a b : R
x y : M
G : Type u_8
hG : Group G
inst✝³ : DistribMulAction G R
inst✝² : DistribMulAction G M
inst✝¹ : IsScalarTower G R M
inst✝ : SMulCommClass G R M
v : ι → M
hv : ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
w : ι → G
s : Finset ι
g : ι → R
hgs : ∀ (i : ι), ¬i ∈ s → g i = 0
hsum : ∑ i in s, g i • (w • v) i = 0
i : ι
⊢ g i = 0
[PROOFSTEP]
refine' (smul_eq_zero_iff_eq (w i)).1 _
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝¹⁰ : Ring R
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
a b : R
x y : M
G : Type u_8
hG : Group G
inst✝³ : DistribMulAction G R
inst✝² : DistribMulAction G M
inst✝¹ : IsScalarTower G R M
inst✝ : SMulCommClass G R M
v : ι → M
hv : ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
w : ι → G
s : Finset ι
g : ι → R
hgs : ∀ (i : ι), ¬i ∈ s → g i = 0
hsum : ∑ i in s, g i • (w • v) i = 0
i : ι
⊢ w i • g i = 0
[PROOFSTEP]
refine' hv s (fun i => w i • g i) (fun i hi => _) _ i
[GOAL]
case refine'_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝¹⁰ : Ring R
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
a b : R
x y : M
G : Type u_8
hG : Group G
inst✝³ : DistribMulAction G R
inst✝² : DistribMulAction G M
inst✝¹ : IsScalarTower G R M
inst✝ : SMulCommClass G R M
v : ι → M
hv : ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
w : ι → G
s : Finset ι
g : ι → R
hgs : ∀ (i : ι), ¬i ∈ s → g i = 0
hsum : ∑ i in s, g i • (w • v) i = 0
i✝ i : ι
hi : ¬i ∈ s
⊢ (fun i => w i • g i) i = 0
[PROOFSTEP]
dsimp only
[GOAL]
case refine'_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝¹⁰ : Ring R
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
a b : R
x y : M
G : Type u_8
hG : Group G
inst✝³ : DistribMulAction G R
inst✝² : DistribMulAction G M
inst✝¹ : IsScalarTower G R M
inst✝ : SMulCommClass G R M
v : ι → M
hv : ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
w : ι → G
s : Finset ι
g : ι → R
hgs : ∀ (i : ι), ¬i ∈ s → g i = 0
hsum : ∑ i in s, g i • (w • v) i = 0
i✝ i : ι
hi : ¬i ∈ s
⊢ w i • g i = 0
[PROOFSTEP]
exact (hgs i hi).symm ▸ smul_zero _
[GOAL]
case refine'_2
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝¹⁰ : Ring R
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
a b : R
x y : M
G : Type u_8
hG : Group G
inst✝³ : DistribMulAction G R
inst✝² : DistribMulAction G M
inst✝¹ : IsScalarTower G R M
inst✝ : SMulCommClass G R M
v : ι → M
hv : ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
w : ι → G
s : Finset ι
g : ι → R
hgs : ∀ (i : ι), ¬i ∈ s → g i = 0
hsum : ∑ i in s, g i • (w • v) i = 0
i : ι
⊢ ∑ i in s, (fun i => w i • g i) i • v i = 0
[PROOFSTEP]
rw [← hsum, Finset.sum_congr rfl _]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝¹⁰ : Ring R
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
a b : R
x y : M
G : Type u_8
hG : Group G
inst✝³ : DistribMulAction G R
inst✝² : DistribMulAction G M
inst✝¹ : IsScalarTower G R M
inst✝ : SMulCommClass G R M
v : ι → M
hv : ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
w : ι → G
s : Finset ι
g : ι → R
hgs : ∀ (i : ι), ¬i ∈ s → g i = 0
hsum : ∑ i in s, g i • (w • v) i = 0
i : ι
⊢ ∀ (x : ι), x ∈ s → (fun i => w i • g i) x • v x = g x • (w • v) x
[PROOFSTEP]
intros
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝¹⁰ : Ring R
inst✝⁹ : AddCommGroup M
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R M
inst✝⁵ : Module R M'
inst✝⁴ : Module R M''
a b : R
x y : M
G : Type u_8
hG : Group G
inst✝³ : DistribMulAction G R
inst✝² : DistribMulAction G M
inst✝¹ : IsScalarTower G R M
inst✝ : SMulCommClass G R M
v : ι → M
hv : ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
w : ι → G
s : Finset ι
g : ι → R
hgs : ∀ (i : ι), ¬i ∈ s → g i = 0
hsum : ∑ i in s, g i • (w • v) i = 0
i x✝ : ι
a✝ : x✝ ∈ s
⊢ (fun i => w i • g i) x✝ • v x✝ = g x✝ • (w • v) x✝
[PROOFSTEP]
erw [Pi.smul_apply, smul_assoc, smul_comm]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι → M
hv : LinearIndependent R v
w : ι → Rˣ
⊢ LinearIndependent R (w • v)
[PROOFSTEP]
rw [linearIndependent_iff''] at hv ⊢
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι → M
hv : ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
w : ι → Rˣ
⊢ ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • (w • v) i = 0 → ∀ (i : ι), g i = 0
[PROOFSTEP]
intro s g hgs hsum i
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι → M
hv : ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
w : ι → Rˣ
s : Finset ι
g : ι → R
hgs : ∀ (i : ι), ¬i ∈ s → g i = 0
hsum : ∑ i in s, g i • (w • v) i = 0
i : ι
⊢ g i = 0
[PROOFSTEP]
rw [← (w i).mul_left_eq_zero]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι → M
hv : ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
w : ι → Rˣ
s : Finset ι
g : ι → R
hgs : ∀ (i : ι), ¬i ∈ s → g i = 0
hsum : ∑ i in s, g i • (w • v) i = 0
i : ι
⊢ g i * ↑(w i) = 0
[PROOFSTEP]
refine' hv s (fun i => g i • (w i : R)) (fun i hi => _) _ i
[GOAL]
case refine'_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι → M
hv : ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
w : ι → Rˣ
s : Finset ι
g : ι → R
hgs : ∀ (i : ι), ¬i ∈ s → g i = 0
hsum : ∑ i in s, g i • (w • v) i = 0
i✝ i : ι
hi : ¬i ∈ s
⊢ (fun i => g i • ↑(w i)) i = 0
[PROOFSTEP]
dsimp only
[GOAL]
case refine'_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι → M
hv : ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
w : ι → Rˣ
s : Finset ι
g : ι → R
hgs : ∀ (i : ι), ¬i ∈ s → g i = 0
hsum : ∑ i in s, g i • (w • v) i = 0
i✝ i : ι
hi : ¬i ∈ s
⊢ g i • ↑(w i) = 0
[PROOFSTEP]
exact (hgs i hi).symm ▸ zero_smul _ _
[GOAL]
case refine'_2
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι → M
hv : ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
w : ι → Rˣ
s : Finset ι
g : ι → R
hgs : ∀ (i : ι), ¬i ∈ s → g i = 0
hsum : ∑ i in s, g i • (w • v) i = 0
i : ι
⊢ ∑ i in s, (fun i => g i • ↑(w i)) i • v i = 0
[PROOFSTEP]
rw [← hsum, Finset.sum_congr rfl _]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι → M
hv : ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
w : ι → Rˣ
s : Finset ι
g : ι → R
hgs : ∀ (i : ι), ¬i ∈ s → g i = 0
hsum : ∑ i in s, g i • (w • v) i = 0
i : ι
⊢ ∀ (x : ι), x ∈ s → (fun i => g i • ↑(w i)) x • v x = g x • (w • v) x
[PROOFSTEP]
intros
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι → M
hv : ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
w : ι → Rˣ
s : Finset ι
g : ι → R
hgs : ∀ (i : ι), ¬i ∈ s → g i = 0
hsum : ∑ i in s, g i • (w • v) i = 0
i x✝ : ι
a✝ : x✝ ∈ s
⊢ (fun i => g i • ↑(w i)) x✝ • v x✝ = g x✝ • (w • v) x✝
[PROOFSTEP]
erw [Pi.smul_apply, smul_assoc]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι → M
hv : ∀ (s : Finset ι) (g : ι → R), (∀ (i : ι), ¬i ∈ s → g i = 0) → ∑ i in s, g i • v i = 0 → ∀ (i : ι), g i = 0
w : ι → Rˣ
s : Finset ι
g : ι → R
hgs : ∀ (i : ι), ¬i ∈ s → g i = 0
hsum : ∑ i in s, g i • (w • v) i = 0
i x✝ : ι
a✝ : x✝ ∈ s
⊢ g x✝ • ↑(w x✝) • v x✝ = g x✝ • w x✝ • v x✝
[PROOFSTEP]
rfl
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y✝ x y : M
h : LinearIndependent R ![x, y]
s t s' t' : R
h' : s • x + t • y = s' • x + t' • y
⊢ s = s' ∧ t = t'
[PROOFSTEP]
have : (s - s') • x + (t - t') • y = 0 :=
  by
  rw [← sub_eq_zero_of_eq h', ← sub_eq_zero]
  simp only [sub_smul]
  abel
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y✝ x y : M
h : LinearIndependent R ![x, y]
s t s' t' : R
h' : s • x + t • y = s' • x + t' • y
⊢ (s - s') • x + (t - t') • y = 0
[PROOFSTEP]
rw [← sub_eq_zero_of_eq h', ← sub_eq_zero]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y✝ x y : M
h : LinearIndependent R ![x, y]
s t s' t' : R
h' : s • x + t • y = s' • x + t' • y
⊢ (s - s') • x + (t - t') • y - (s • x + t • y - (s' • x + t' • y)) = 0
[PROOFSTEP]
simp only [sub_smul]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y✝ x y : M
h : LinearIndependent R ![x, y]
s t s' t' : R
h' : s • x + t • y = s' • x + t' • y
⊢ s • x - s' • x + (t • y - t' • y) - (s • x + t • y - (s' • x + t' • y)) = 0
[PROOFSTEP]
abel
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y✝ x y : M
h : LinearIndependent R ![x, y]
s t s' t' : R
h' : s • x + t • y = s' • x + t' • y
⊢ s • x - s' • x + (t • y - t' • y) - (s • x + t • y - (s' • x + t' • y)) = 0
[PROOFSTEP]
abel
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y✝ x y : M
h : LinearIndependent R ![x, y]
s t s' t' : R
h' : s • x + t • y = s' • x + t' • y
this : (s - s') • x + (t - t') • y = 0
⊢ s = s' ∧ t = t'
[PROOFSTEP]
simpa [sub_eq_zero] using h.eq_zero_of_pair this
[GOAL]
ι✝ : Type u'
ι' : Type u_1
R✝ : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι✝ → M✝
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M✝
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R✝ M✝
inst✝⁵ : Module R✝ M'
inst✝⁴ : Module R✝ M''
a b : R✝
x y : M✝
ι : Type w
R : Type u
inst✝³ : Ring R
inst✝² : Nontrivial R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
i : LinearIndependent R v
⊢ Maximal i ↔ ∀ (κ : Type v) (w : κ → M), LinearIndependent R w → ∀ (j : ι → κ), w ∘ j = v → Surjective j
[PROOFSTEP]
constructor
[GOAL]
case mp
ι✝ : Type u'
ι' : Type u_1
R✝ : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι✝ → M✝
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M✝
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R✝ M✝
inst✝⁵ : Module R✝ M'
inst✝⁴ : Module R✝ M''
a b : R✝
x y : M✝
ι : Type w
R : Type u
inst✝³ : Ring R
inst✝² : Nontrivial R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
i : LinearIndependent R v
⊢ Maximal i → ∀ (κ : Type v) (w : κ → M), LinearIndependent R w → ∀ (j : ι → κ), w ∘ j = v → Surjective j
[PROOFSTEP]
rintro p κ w i' j rfl
[GOAL]
case mp
ι✝ : Type u'
ι' : Type u_1
R✝ : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M✝
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M✝
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R✝ M✝
inst✝⁵ : Module R✝ M'
inst✝⁴ : Module R✝ M''
a b : R✝
x y : M✝
ι : Type w
R : Type u
inst✝³ : Ring R
inst✝² : Nontrivial R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
κ : Type v
w : κ → M
i' : LinearIndependent R w
j : ι → κ
i : LinearIndependent R (w ∘ j)
p : Maximal i
⊢ Surjective j
[PROOFSTEP]
specialize p (range w) i'.coe_range (range_comp_subset_range _ _)
[GOAL]
case mp
ι✝ : Type u'
ι' : Type u_1
R✝ : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M✝
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M✝
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R✝ M✝
inst✝⁵ : Module R✝ M'
inst✝⁴ : Module R✝ M''
a b : R✝
x y : M✝
ι : Type w
R : Type u
inst✝³ : Ring R
inst✝² : Nontrivial R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
κ : Type v
w : κ → M
i' : LinearIndependent R w
j : ι → κ
i : LinearIndependent R (w ∘ j)
p : range (w ∘ j) = range w
⊢ Surjective j
[PROOFSTEP]
rw [range_comp, ← @image_univ _ _ w] at p 
[GOAL]
case mp
ι✝ : Type u'
ι' : Type u_1
R✝ : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M✝
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M✝
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R✝ M✝
inst✝⁵ : Module R✝ M'
inst✝⁴ : Module R✝ M''
a b : R✝
x y : M✝
ι : Type w
R : Type u
inst✝³ : Ring R
inst✝² : Nontrivial R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
κ : Type v
w : κ → M
i' : LinearIndependent R w
j : ι → κ
i : LinearIndependent R (w ∘ j)
p : w '' range j = w '' univ
⊢ Surjective j
[PROOFSTEP]
exact range_iff_surjective.mp (image_injective.mpr i'.injective p)
[GOAL]
case mpr
ι✝ : Type u'
ι' : Type u_1
R✝ : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι✝ → M✝
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M✝
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R✝ M✝
inst✝⁵ : Module R✝ M'
inst✝⁴ : Module R✝ M''
a b : R✝
x y : M✝
ι : Type w
R : Type u
inst✝³ : Ring R
inst✝² : Nontrivial R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
i : LinearIndependent R v
⊢ (∀ (κ : Type v) (w : κ → M), LinearIndependent R w → ∀ (j : ι → κ), w ∘ j = v → Surjective j) → Maximal i
[PROOFSTEP]
intro p w i' h
[GOAL]
case mpr
ι✝ : Type u'
ι' : Type u_1
R✝ : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι✝ → M✝
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M✝
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R✝ M✝
inst✝⁵ : Module R✝ M'
inst✝⁴ : Module R✝ M''
a b : R✝
x y : M✝
ι : Type w
R : Type u
inst✝³ : Ring R
inst✝² : Nontrivial R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
i : LinearIndependent R v
p : ∀ (κ : Type v) (w : κ → M), LinearIndependent R w → ∀ (j : ι → κ), w ∘ j = v → Surjective j
w : Set M
i' : LinearIndependent R Subtype.val
h : range v ≤ w
⊢ range v = w
[PROOFSTEP]
specialize
  p w ((↑) : w → M) i' (fun i => ⟨v i, range_subset_iff.mp h i⟩)
    (by
      ext
      simp)
[GOAL]
ι✝ : Type u'
ι' : Type u_1
R✝ : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι✝ → M✝
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M✝
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R✝ M✝
inst✝⁵ : Module R✝ M'
inst✝⁴ : Module R✝ M''
a b : R✝
x y : M✝
ι : Type w
R : Type u
inst✝³ : Ring R
inst✝² : Nontrivial R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
i : LinearIndependent R v
p : ∀ (κ : Type v) (w : κ → M), LinearIndependent R w → ∀ (j : ι → κ), w ∘ j = v → Surjective j
w : Set M
i' : LinearIndependent R Subtype.val
h : range v ≤ w
⊢ (Subtype.val ∘ fun i => { val := v i, property := (_ : v i ∈ w) }) = v
[PROOFSTEP]
ext
[GOAL]
case h
ι✝ : Type u'
ι' : Type u_1
R✝ : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι✝ → M✝
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M✝
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R✝ M✝
inst✝⁵ : Module R✝ M'
inst✝⁴ : Module R✝ M''
a b : R✝
x y : M✝
ι : Type w
R : Type u
inst✝³ : Ring R
inst✝² : Nontrivial R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
i : LinearIndependent R v
p : ∀ (κ : Type v) (w : κ → M), LinearIndependent R w → ∀ (j : ι → κ), w ∘ j = v → Surjective j
w : Set M
i' : LinearIndependent R Subtype.val
h : range v ≤ w
x✝ : ι
⊢ (Subtype.val ∘ fun i => { val := v i, property := (_ : v i ∈ w) }) x✝ = v x✝
[PROOFSTEP]
simp
[GOAL]
case mpr
ι✝ : Type u'
ι' : Type u_1
R✝ : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι✝ → M✝
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M✝
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R✝ M✝
inst✝⁵ : Module R✝ M'
inst✝⁴ : Module R✝ M''
a b : R✝
x y : M✝
ι : Type w
R : Type u
inst✝³ : Ring R
inst✝² : Nontrivial R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
i : LinearIndependent R v
w : Set M
i' : LinearIndependent R Subtype.val
h : range v ≤ w
p : Surjective fun i => { val := v i, property := (_ : v i ∈ w) }
⊢ range v = w
[PROOFSTEP]
have q := congr_arg (fun s => ((↑) : w → M) '' s) p.range_eq
[GOAL]
case mpr
ι✝ : Type u'
ι' : Type u_1
R✝ : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι✝ → M✝
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M✝
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R✝ M✝
inst✝⁵ : Module R✝ M'
inst✝⁴ : Module R✝ M''
a b : R✝
x y : M✝
ι : Type w
R : Type u
inst✝³ : Ring R
inst✝² : Nontrivial R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
i : LinearIndependent R v
w : Set M
i' : LinearIndependent R Subtype.val
h : range v ≤ w
p : Surjective fun i => { val := v i, property := (_ : v i ∈ w) }
q :
  (fun s => Subtype.val '' s) (range fun i => { val := v i, property := (_ : v i ∈ w) }) =
    (fun s => Subtype.val '' s) univ
⊢ range v = w
[PROOFSTEP]
dsimp at q 
[GOAL]
case mpr
ι✝ : Type u'
ι' : Type u_1
R✝ : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι✝ → M✝
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M✝
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R✝ M✝
inst✝⁵ : Module R✝ M'
inst✝⁴ : Module R✝ M''
a b : R✝
x y : M✝
ι : Type w
R : Type u
inst✝³ : Ring R
inst✝² : Nontrivial R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
i : LinearIndependent R v
w : Set M
i' : LinearIndependent R Subtype.val
h : range v ≤ w
p : Surjective fun i => { val := v i, property := (_ : v i ∈ w) }
q : (Subtype.val '' range fun i => { val := v i, property := (_ : v i ∈ w) }) = Subtype.val '' univ
⊢ range v = w
[PROOFSTEP]
rw [← image_univ, image_image] at q 
[GOAL]
case mpr
ι✝ : Type u'
ι' : Type u_1
R✝ : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι✝ → M✝
inst✝¹⁰ : Ring R✝
inst✝⁹ : AddCommGroup M✝
inst✝⁸ : AddCommGroup M'
inst✝⁷ : AddCommGroup M''
inst✝⁶ : Module R✝ M✝
inst✝⁵ : Module R✝ M'
inst✝⁴ : Module R✝ M''
a b : R✝
x y : M✝
ι : Type w
R : Type u
inst✝³ : Ring R
inst✝² : Nontrivial R
M : Type v
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
i : LinearIndependent R v
w : Set M
i' : LinearIndependent R Subtype.val
h : range v ≤ w
p : Surjective fun i => { val := v i, property := (_ : v i ∈ w) }
q : (fun x => ↑{ val := v x, property := (_ : v x ∈ w) }) '' univ = Subtype.val '' univ
⊢ range v = w
[PROOFSTEP]
simpa using q
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
⊢ i = j
[PROOFSTEP]
let l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
⊢ i = j
[PROOFSTEP]
have h_total : Finsupp.total ι M R v l = 0 :=
  by
  simp_rw [LinearMap.map_sub, Finsupp.total_apply]
  simp [h]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
⊢ ↑(Finsupp.total ι M R v) l = 0
[PROOFSTEP]
simp_rw [LinearMap.map_sub, Finsupp.total_apply]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
⊢ ((Finsupp.sum (Finsupp.single i c) fun i a => a • v i) - Finsupp.sum (Finsupp.single j d) fun i a => a • v i) = 0
[PROOFSTEP]
simp [h]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
h_total : ↑(Finsupp.total ι M R v) l = 0
⊢ i = j
[PROOFSTEP]
have h_single_eq : Finsupp.single i c = Finsupp.single j d :=
  by
  rw [linearIndependent_iff] at li 
  simp [eq_add_of_sub_eq' (li l h_total)]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
h_total : ↑(Finsupp.total ι M R v) l = 0
⊢ Finsupp.single i c = Finsupp.single j d
[PROOFSTEP]
rw [linearIndependent_iff] at li 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : ∀ (l : ι →₀ R), ↑(Finsupp.total ι M R v) l = 0 → l = 0
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
h_total : ↑(Finsupp.total ι M R v) l = 0
⊢ Finsupp.single i c = Finsupp.single j d
[PROOFSTEP]
simp [eq_add_of_sub_eq' (li l h_total)]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
h_total : ↑(Finsupp.total ι M R v) l = 0
h_single_eq : Finsupp.single i c = Finsupp.single j d
⊢ i = j
[PROOFSTEP]
rcases(Finsupp.single_eq_single_iff _ _ _ _).mp h_single_eq with (⟨H, _⟩ | ⟨hc, _⟩)
[GOAL]
case inl.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
h_total : ↑(Finsupp.total ι M R v) l = 0
h_single_eq : Finsupp.single i c = Finsupp.single j d
H : i = j
right✝ : c = d
⊢ i = j
[PROOFSTEP]
exact H
[GOAL]
case inr.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc✝ : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
h_total : ↑(Finsupp.total ι M R v) l = 0
h_single_eq : Finsupp.single i c = Finsupp.single j d
hc : c = 0
right✝ : d = 0
⊢ i = j
[PROOFSTEP]
contradiction
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s t : Set ι
hs : Disjoint s t
⊢ Disjoint (span R (v '' s)) (span R (v '' t))
[PROOFSTEP]
simp only [disjoint_def, Finsupp.mem_span_image_iff_total]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s t : Set ι
hs : Disjoint s t
⊢ ∀ (x : M),
    (∃ l, l ∈ Finsupp.supported R R s ∧ ↑(Finsupp.total ι M R v) l = x) →
      (∃ l, l ∈ Finsupp.supported R R t ∧ ↑(Finsupp.total ι M R v) l = x) → x = 0
[PROOFSTEP]
rintro _ ⟨l₁, hl₁, rfl⟩ ⟨l₂, hl₂, H⟩
[GOAL]
case intro.intro.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s t : Set ι
hs : Disjoint s t
l₁ : ι →₀ R
hl₁ : l₁ ∈ Finsupp.supported R R s
l₂ : ι →₀ R
hl₂ : l₂ ∈ Finsupp.supported R R t
H : ↑(Finsupp.total ι M R v) l₂ = ↑(Finsupp.total ι M R v) l₁
⊢ ↑(Finsupp.total ι M R v) l₁ = 0
[PROOFSTEP]
rw [hv.injective_total.eq_iff] at H 
[GOAL]
case intro.intro.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s t : Set ι
hs : Disjoint s t
l₁ : ι →₀ R
hl₁ : l₁ ∈ Finsupp.supported R R s
l₂ : ι →₀ R
hl₂ : l₂ ∈ Finsupp.supported R R t
H : l₂ = l₁
⊢ ↑(Finsupp.total ι M R v) l₁ = 0
[PROOFSTEP]
subst l₂
[GOAL]
case intro.intro.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s t : Set ι
hs : Disjoint s t
l₁ : ι →₀ R
hl₁ : l₁ ∈ Finsupp.supported R R s
hl₂ : l₁ ∈ Finsupp.supported R R t
⊢ ↑(Finsupp.total ι M R v) l₁ = 0
[PROOFSTEP]
have : l₁ = 0 := Submodule.disjoint_def.mp (Finsupp.disjoint_supported_supported hs) _ hl₁ hl₂
[GOAL]
case intro.intro.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s t : Set ι
hs : Disjoint s t
l₁ : ι →₀ R
hl₁ : l₁ ∈ Finsupp.supported R R s
hl₂ : l₁ ∈ Finsupp.supported R R t
this : l₁ = 0
⊢ ↑(Finsupp.total ι M R v) l₁ = 0
[PROOFSTEP]
simp [this]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
s : Set ι
x : ι
h : ¬x ∈ s
⊢ ¬v x ∈ span R (v '' s)
[PROOFSTEP]
have h' : v x ∈ Submodule.span R (v '' { x }) :=
  by
  rw [Set.image_singleton]
  exact mem_span_singleton_self (v x)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
s : Set ι
x : ι
h : ¬x ∈ s
⊢ v x ∈ span R (v '' {x})
[PROOFSTEP]
rw [Set.image_singleton]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
s : Set ι
x : ι
h : ¬x ∈ s
⊢ v x ∈ span R {v x}
[PROOFSTEP]
exact mem_span_singleton_self (v x)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
s : Set ι
x : ι
h : ¬x ∈ s
h' : v x ∈ span R (v '' {x})
⊢ ¬v x ∈ span R (v '' s)
[PROOFSTEP]
intro w
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
s : Set ι
x : ι
h : ¬x ∈ s
h' : v x ∈ span R (v '' {x})
w : v x ∈ span R (v '' s)
⊢ False
[PROOFSTEP]
apply LinearIndependent.ne_zero x hv
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
s : Set ι
x : ι
h : ¬x ∈ s
h' : v x ∈ span R (v '' {x})
w : v x ∈ span R (v '' s)
⊢ v x = 0
[PROOFSTEP]
refine' disjoint_def.1 (hv.disjoint_span_image _) (v x) h' w
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
s : Set ι
x : ι
h : ¬x ∈ s
h' : v x ∈ span R (v '' {x})
w : v x ∈ span R (v '' s)
⊢ Disjoint {x} s
[PROOFSTEP]
simpa using h
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
x : ι
f : ι →₀ R
h : ¬x ∈ f.support
⊢ ↑(Finsupp.total ι M R v) f ≠ v x
[PROOFSTEP]
replace h : x ∉ (f.support : Set ι) := h
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
x : ι
f : ι →₀ R
h : ¬x ∈ ↑f.support
⊢ ↑(Finsupp.total ι M R v) f ≠ v x
[PROOFSTEP]
have p := hv.not_mem_span_image h
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
x : ι
f : ι →₀ R
h : ¬x ∈ ↑f.support
p : ¬v x ∈ span R (v '' ↑f.support)
⊢ ↑(Finsupp.total ι M R v) f ≠ v x
[PROOFSTEP]
intro w
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
x : ι
f : ι →₀ R
h : ¬x ∈ ↑f.support
p : ¬v x ∈ span R (v '' ↑f.support)
w : ↑(Finsupp.total ι M R v) f = v x
⊢ False
[PROOFSTEP]
rw [← w] at p 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
x : ι
f : ι →₀ R
h : ¬x ∈ ↑f.support
p : ¬↑(Finsupp.total ι M R v) f ∈ span R (v '' ↑f.support)
w : ↑(Finsupp.total ι M R v) f = v x
⊢ False
[PROOFSTEP]
rw [Finsupp.span_image_eq_map_total] at p 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
x : ι
f : ι →₀ R
h : ¬x ∈ ↑f.support
p : ¬↑(Finsupp.total ι M R v) f ∈ Submodule.map (Finsupp.total ι M R v) (Finsupp.supported R R ↑f.support)
w : ↑(Finsupp.total ι M R v) f = v x
⊢ False
[PROOFSTEP]
simp only [not_exists, not_and, mem_map] at p 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
x : ι
f : ι →₀ R
h : ¬x ∈ ↑f.support
w : ↑(Finsupp.total ι M R v) f = v x
p : ∀ (x : ι →₀ R), x ∈ Finsupp.supported R R ↑f.support → ¬↑(Finsupp.total ι M R v) x = ↑(Finsupp.total ι M R v) f
⊢ False
[PROOFSTEP]
exact p f (f.mem_supported_support R) rfl
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
⊢ LinearIndependent R v ↔
    LinearIndependent R (v ∘ Sum.inl) ∧
      LinearIndependent R (v ∘ Sum.inr) ∧ Disjoint (span R (range (v ∘ Sum.inl))) (span R (range (v ∘ Sum.inr)))
[PROOFSTEP]
classical
rw [range_comp v, range_comp v]
refine' ⟨_, _⟩
· intro h
  refine' ⟨h.comp _ Sum.inl_injective, h.comp _ Sum.inr_injective, _⟩
  refine'
    h.disjoint_span_image
      _
        -- Porting note: `isCompl_range_inl_range_inr.1` timeouts.
  exact IsCompl.disjoint isCompl_range_inl_range_inr
rintro ⟨hl, hr, hlr⟩
rw [linearIndependent_iff'] at *
intro s g hg i hi
have :
  ((∑ i in s.preimage Sum.inl (Sum.inl_injective.injOn _), (fun x => g x • v x) (Sum.inl i)) +
      ∑ i in s.preimage Sum.inr (Sum.inr_injective.injOn _), (fun x => g x • v x) (Sum.inr i)) =
    0 :=
  by
  -- Porting note: `g` must be specified.
  rw [Finset.sum_preimage' (g := fun x => g x • v x), Finset.sum_preimage' (g := fun x => g x • v x), ←
    Finset.sum_union, ← Finset.filter_or]
  · simpa only [← mem_union, range_inl_union_range_inr, mem_univ, Finset.filter_True]
  ·
    -- Porting note: Here was one `exact`, but timeouted.
    refine Finset.disjoint_filter.2 fun x _ hx => disjoint_left.1 ?_ hx
    exact IsCompl.disjoint isCompl_range_inl_range_inr
· rw [← eq_neg_iff_add_eq_zero] at this 
  rw [disjoint_def'] at hlr 
  have A := by
    refine hlr _ (sum_mem fun i _ => ?_) _ (neg_mem <| sum_mem fun i _ => ?_) this
    · exact smul_mem _ _ (subset_span ⟨Sum.inl i, mem_range_self _, rfl⟩)
    · exact smul_mem _ _ (subset_span ⟨Sum.inr i, mem_range_self _, rfl⟩)
  cases' i with i i
  · exact hl _ _ A i (Finset.mem_preimage.2 hi)
  · rw [this, neg_eq_zero] at A 
    exact hr _ _ A i (Finset.mem_preimage.2 hi)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
⊢ LinearIndependent R v ↔
    LinearIndependent R (v ∘ Sum.inl) ∧
      LinearIndependent R (v ∘ Sum.inr) ∧ Disjoint (span R (range (v ∘ Sum.inl))) (span R (range (v ∘ Sum.inr)))
[PROOFSTEP]
rw [range_comp v, range_comp v]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
⊢ LinearIndependent R v ↔
    LinearIndependent R (v ∘ Sum.inl) ∧
      LinearIndependent R (v ∘ Sum.inr) ∧ Disjoint (span R (v '' range Sum.inl)) (span R (v '' range Sum.inr))
[PROOFSTEP]
refine' ⟨_, _⟩
[GOAL]
case refine'_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
⊢ LinearIndependent R v →
    LinearIndependent R (v ∘ Sum.inl) ∧
      LinearIndependent R (v ∘ Sum.inr) ∧ Disjoint (span R (v '' range Sum.inl)) (span R (v '' range Sum.inr))
[PROOFSTEP]
intro h
[GOAL]
case refine'_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
h : LinearIndependent R v
⊢ LinearIndependent R (v ∘ Sum.inl) ∧
    LinearIndependent R (v ∘ Sum.inr) ∧ Disjoint (span R (v '' range Sum.inl)) (span R (v '' range Sum.inr))
[PROOFSTEP]
refine' ⟨h.comp _ Sum.inl_injective, h.comp _ Sum.inr_injective, _⟩
[GOAL]
case refine'_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
h : LinearIndependent R v
⊢ Disjoint (span R (v '' range Sum.inl)) (span R (v '' range Sum.inr))
[PROOFSTEP]
refine'
  h.disjoint_span_image
    _
      -- Porting note: `isCompl_range_inl_range_inr.1` timeouts.
[GOAL]
case refine'_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
h : LinearIndependent R v
⊢ Disjoint (range Sum.inl) (range Sum.inr)
[PROOFSTEP]
exact IsCompl.disjoint isCompl_range_inl_range_inr
[GOAL]
case refine'_2
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
⊢ LinearIndependent R (v ∘ Sum.inl) ∧
      LinearIndependent R (v ∘ Sum.inr) ∧ Disjoint (span R (v '' range Sum.inl)) (span R (v '' range Sum.inr)) →
    LinearIndependent R v
[PROOFSTEP]
rintro ⟨hl, hr, hlr⟩
[GOAL]
case refine'_2.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
hl : LinearIndependent R (v ∘ Sum.inl)
hr : LinearIndependent R (v ∘ Sum.inr)
hlr : Disjoint (span R (v '' range Sum.inl)) (span R (v '' range Sum.inr))
⊢ LinearIndependent R v
[PROOFSTEP]
rw [linearIndependent_iff'] at *
[GOAL]
case refine'_2.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
hl : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • (v ∘ Sum.inl) i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hr : ∀ (s : Finset ι') (g : ι' → R), ∑ i in s, g i • (v ∘ Sum.inr) i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
hlr : Disjoint (span R (v '' range Sum.inl)) (span R (v '' range Sum.inr))
⊢ ∀ (s : Finset (ι ⊕ ι')) (g : ι ⊕ ι' → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι ⊕ ι'), i ∈ s → g i = 0
[PROOFSTEP]
intro s g hg i hi
[GOAL]
case refine'_2.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
hl : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • (v ∘ Sum.inl) i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hr : ∀ (s : Finset ι') (g : ι' → R), ∑ i in s, g i • (v ∘ Sum.inr) i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
hlr : Disjoint (span R (v '' range Sum.inl)) (span R (v '' range Sum.inr))
s : Finset (ι ⊕ ι')
g : ι ⊕ ι' → R
hg : ∑ i in s, g i • v i = 0
i : ι ⊕ ι'
hi : i ∈ s
⊢ g i = 0
[PROOFSTEP]
have :
  ((∑ i in s.preimage Sum.inl (Sum.inl_injective.injOn _), (fun x => g x • v x) (Sum.inl i)) +
      ∑ i in s.preimage Sum.inr (Sum.inr_injective.injOn _), (fun x => g x • v x) (Sum.inr i)) =
    0 :=
  by
  -- Porting note: `g` must be specified.
  rw [Finset.sum_preimage' (g := fun x => g x • v x), Finset.sum_preimage' (g := fun x => g x • v x), ←
    Finset.sum_union, ← Finset.filter_or]
  · simpa only [← mem_union, range_inl_union_range_inr, mem_univ, Finset.filter_True]
  ·
    -- Porting note: Here was one `exact`, but timeouted.
    refine Finset.disjoint_filter.2 fun x _ hx => disjoint_left.1 ?_ hx
    exact IsCompl.disjoint isCompl_range_inl_range_inr
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
hl : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • (v ∘ Sum.inl) i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hr : ∀ (s : Finset ι') (g : ι' → R), ∑ i in s, g i • (v ∘ Sum.inr) i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
hlr : Disjoint (span R (v '' range Sum.inl)) (span R (v '' range Sum.inr))
s : Finset (ι ⊕ ι')
g : ι ⊕ ι' → R
hg : ∑ i in s, g i • v i = 0
i : ι ⊕ ι'
hi : i ∈ s
⊢ ∑ i in Finset.preimage s Sum.inl (_ : InjOn Sum.inl (Sum.inl ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inl i) +
      ∑ i in Finset.preimage s Sum.inr (_ : InjOn Sum.inr (Sum.inr ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inr i) =
    0
[PROOFSTEP]
rw [Finset.sum_preimage' (g := fun x => g x • v x), Finset.sum_preimage' (g := fun x => g x • v x), ← Finset.sum_union,
  ← Finset.filter_or]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
hl : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • (v ∘ Sum.inl) i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hr : ∀ (s : Finset ι') (g : ι' → R), ∑ i in s, g i • (v ∘ Sum.inr) i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
hlr : Disjoint (span R (v '' range Sum.inl)) (span R (v '' range Sum.inr))
s : Finset (ι ⊕ ι')
g : ι ⊕ ι' → R
hg : ∑ i in s, g i • v i = 0
i : ι ⊕ ι'
hi : i ∈ s
⊢ ∑ x in Finset.filter (fun a => a ∈ range Sum.inl ∨ a ∈ range Sum.inr) s, g x • v x = 0
[PROOFSTEP]
simpa only [← mem_union, range_inl_union_range_inr, mem_univ, Finset.filter_True]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
hl : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • (v ∘ Sum.inl) i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hr : ∀ (s : Finset ι') (g : ι' → R), ∑ i in s, g i • (v ∘ Sum.inr) i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
hlr : Disjoint (span R (v '' range Sum.inl)) (span R (v '' range Sum.inr))
s : Finset (ι ⊕ ι')
g : ι ⊕ ι' → R
hg : ∑ i in s, g i • v i = 0
i : ι ⊕ ι'
hi : i ∈ s
⊢ Disjoint (Finset.filter (fun x => x ∈ range Sum.inl) s) (Finset.filter (fun x => x ∈ range Sum.inr) s)
[PROOFSTEP]
refine Finset.disjoint_filter.2 fun x _ hx => disjoint_left.1 ?_ hx
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝¹ y : M
v : ι ⊕ ι' → M
hl : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • (v ∘ Sum.inl) i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hr : ∀ (s : Finset ι') (g : ι' → R), ∑ i in s, g i • (v ∘ Sum.inr) i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
hlr : Disjoint (span R (v '' range Sum.inl)) (span R (v '' range Sum.inr))
s : Finset (ι ⊕ ι')
g : ι ⊕ ι' → R
hg : ∑ i in s, g i • v i = 0
i : ι ⊕ ι'
hi : i ∈ s
x : ι ⊕ ι'
x✝ : x ∈ s
hx : x ∈ range Sum.inl
⊢ Disjoint (range Sum.inl) (range Sum.inr)
[PROOFSTEP]
exact IsCompl.disjoint isCompl_range_inl_range_inr
[GOAL]
case refine'_2.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
hl : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • (v ∘ Sum.inl) i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hr : ∀ (s : Finset ι') (g : ι' → R), ∑ i in s, g i • (v ∘ Sum.inr) i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
hlr : Disjoint (span R (v '' range Sum.inl)) (span R (v '' range Sum.inr))
s : Finset (ι ⊕ ι')
g : ι ⊕ ι' → R
hg : ∑ i in s, g i • v i = 0
i : ι ⊕ ι'
hi : i ∈ s
this :
  ∑ i in Finset.preimage s Sum.inl (_ : InjOn Sum.inl (Sum.inl ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inl i) +
      ∑ i in Finset.preimage s Sum.inr (_ : InjOn Sum.inr (Sum.inr ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inr i) =
    0
⊢ g i = 0
[PROOFSTEP]
rw [← eq_neg_iff_add_eq_zero] at this 
[GOAL]
case refine'_2.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
hl : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • (v ∘ Sum.inl) i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hr : ∀ (s : Finset ι') (g : ι' → R), ∑ i in s, g i • (v ∘ Sum.inr) i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
hlr : Disjoint (span R (v '' range Sum.inl)) (span R (v '' range Sum.inr))
s : Finset (ι ⊕ ι')
g : ι ⊕ ι' → R
hg : ∑ i in s, g i • v i = 0
i : ι ⊕ ι'
hi : i ∈ s
this :
  ∑ i in Finset.preimage s Sum.inl (_ : InjOn Sum.inl (Sum.inl ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inl i) =
    -∑ i in Finset.preimage s Sum.inr (_ : InjOn Sum.inr (Sum.inr ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inr i)
⊢ g i = 0
[PROOFSTEP]
rw [disjoint_def'] at hlr 
[GOAL]
case refine'_2.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
hl : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • (v ∘ Sum.inl) i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hr : ∀ (s : Finset ι') (g : ι' → R), ∑ i in s, g i • (v ∘ Sum.inr) i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
hlr : ∀ (x : M), x ∈ span R (v '' range Sum.inl) → ∀ (y : M), y ∈ span R (v '' range Sum.inr) → x = y → x = 0
s : Finset (ι ⊕ ι')
g : ι ⊕ ι' → R
hg : ∑ i in s, g i • v i = 0
i : ι ⊕ ι'
hi : i ∈ s
this :
  ∑ i in Finset.preimage s Sum.inl (_ : InjOn Sum.inl (Sum.inl ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inl i) =
    -∑ i in Finset.preimage s Sum.inr (_ : InjOn Sum.inr (Sum.inr ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inr i)
⊢ g i = 0
[PROOFSTEP]
have A := by
  refine hlr _ (sum_mem fun i _ => ?_) _ (neg_mem <| sum_mem fun i _ => ?_) this
  · exact smul_mem _ _ (subset_span ⟨Sum.inl i, mem_range_self _, rfl⟩)
  · exact smul_mem _ _ (subset_span ⟨Sum.inr i, mem_range_self _, rfl⟩)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
hl : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • (v ∘ Sum.inl) i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hr : ∀ (s : Finset ι') (g : ι' → R), ∑ i in s, g i • (v ∘ Sum.inr) i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
hlr : ∀ (x : M), x ∈ span R (v '' range Sum.inl) → ∀ (y : M), y ∈ span R (v '' range Sum.inr) → x = y → x = 0
s : Finset (ι ⊕ ι')
g : ι ⊕ ι' → R
hg : ∑ i in s, g i • v i = 0
i : ι ⊕ ι'
hi : i ∈ s
this :
  ∑ i in Finset.preimage s Sum.inl (_ : InjOn Sum.inl (Sum.inl ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inl i) =
    -∑ i in Finset.preimage s Sum.inr (_ : InjOn Sum.inr (Sum.inr ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inr i)
⊢ ?m.395655
[PROOFSTEP]
refine hlr _ (sum_mem fun i _ => ?_) _ (neg_mem <| sum_mem fun i _ => ?_) this
[GOAL]
case refine_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
hl : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • (v ∘ Sum.inl) i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hr : ∀ (s : Finset ι') (g : ι' → R), ∑ i in s, g i • (v ∘ Sum.inr) i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
hlr : ∀ (x : M), x ∈ span R (v '' range Sum.inl) → ∀ (y : M), y ∈ span R (v '' range Sum.inr) → x = y → x = 0
s : Finset (ι ⊕ ι')
g : ι ⊕ ι' → R
hg : ∑ i in s, g i • v i = 0
i✝ : ι ⊕ ι'
hi : i✝ ∈ s
this :
  ∑ i in Finset.preimage s Sum.inl (_ : InjOn Sum.inl (Sum.inl ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inl i) =
    -∑ i in Finset.preimage s Sum.inr (_ : InjOn Sum.inr (Sum.inr ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inr i)
i : ι
x✝ : i ∈ Finset.preimage s Sum.inl (_ : InjOn Sum.inl (Sum.inl ⁻¹' ↑s))
⊢ (fun x => g x • v x) (Sum.inl i) ∈ span R (v '' range Sum.inl)
[PROOFSTEP]
exact smul_mem _ _ (subset_span ⟨Sum.inl i, mem_range_self _, rfl⟩)
[GOAL]
case refine_2
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
hl : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • (v ∘ Sum.inl) i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hr : ∀ (s : Finset ι') (g : ι' → R), ∑ i in s, g i • (v ∘ Sum.inr) i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
hlr : ∀ (x : M), x ∈ span R (v '' range Sum.inl) → ∀ (y : M), y ∈ span R (v '' range Sum.inr) → x = y → x = 0
s : Finset (ι ⊕ ι')
g : ι ⊕ ι' → R
hg : ∑ i in s, g i • v i = 0
i✝ : ι ⊕ ι'
hi : i✝ ∈ s
this :
  ∑ i in Finset.preimage s Sum.inl (_ : InjOn Sum.inl (Sum.inl ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inl i) =
    -∑ i in Finset.preimage s Sum.inr (_ : InjOn Sum.inr (Sum.inr ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inr i)
i : ι'
x✝ : i ∈ Finset.preimage s Sum.inr (_ : InjOn Sum.inr (Sum.inr ⁻¹' ↑s))
⊢ (fun x => g x • v x) (Sum.inr i) ∈ span R (v '' range Sum.inr)
[PROOFSTEP]
exact smul_mem _ _ (subset_span ⟨Sum.inr i, mem_range_self _, rfl⟩)
[GOAL]
case refine'_2.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
hl : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • (v ∘ Sum.inl) i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hr : ∀ (s : Finset ι') (g : ι' → R), ∑ i in s, g i • (v ∘ Sum.inr) i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
hlr : ∀ (x : M), x ∈ span R (v '' range Sum.inl) → ∀ (y : M), y ∈ span R (v '' range Sum.inr) → x = y → x = 0
s : Finset (ι ⊕ ι')
g : ι ⊕ ι' → R
hg : ∑ i in s, g i • v i = 0
i : ι ⊕ ι'
hi : i ∈ s
this :
  ∑ i in Finset.preimage s Sum.inl (_ : InjOn Sum.inl (Sum.inl ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inl i) =
    -∑ i in Finset.preimage s Sum.inr (_ : InjOn Sum.inr (Sum.inr ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inr i)
A : ∑ c in Finset.preimage s Sum.inl (_ : InjOn Sum.inl (Sum.inl ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inl c) = 0
⊢ g i = 0
[PROOFSTEP]
cases' i with i i
[GOAL]
case refine'_2.intro.intro.inl
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
hl : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • (v ∘ Sum.inl) i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hr : ∀ (s : Finset ι') (g : ι' → R), ∑ i in s, g i • (v ∘ Sum.inr) i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
hlr : ∀ (x : M), x ∈ span R (v '' range Sum.inl) → ∀ (y : M), y ∈ span R (v '' range Sum.inr) → x = y → x = 0
s : Finset (ι ⊕ ι')
g : ι ⊕ ι' → R
hg : ∑ i in s, g i • v i = 0
this :
  ∑ i in Finset.preimage s Sum.inl (_ : InjOn Sum.inl (Sum.inl ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inl i) =
    -∑ i in Finset.preimage s Sum.inr (_ : InjOn Sum.inr (Sum.inr ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inr i)
A : ∑ c in Finset.preimage s Sum.inl (_ : InjOn Sum.inl (Sum.inl ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inl c) = 0
i : ι
hi : Sum.inl i ∈ s
⊢ g (Sum.inl i) = 0
[PROOFSTEP]
exact hl _ _ A i (Finset.mem_preimage.2 hi)
[GOAL]
case refine'_2.intro.intro.inr
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
hl : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • (v ∘ Sum.inl) i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hr : ∀ (s : Finset ι') (g : ι' → R), ∑ i in s, g i • (v ∘ Sum.inr) i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
hlr : ∀ (x : M), x ∈ span R (v '' range Sum.inl) → ∀ (y : M), y ∈ span R (v '' range Sum.inr) → x = y → x = 0
s : Finset (ι ⊕ ι')
g : ι ⊕ ι' → R
hg : ∑ i in s, g i • v i = 0
this :
  ∑ i in Finset.preimage s Sum.inl (_ : InjOn Sum.inl (Sum.inl ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inl i) =
    -∑ i in Finset.preimage s Sum.inr (_ : InjOn Sum.inr (Sum.inr ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inr i)
A : ∑ c in Finset.preimage s Sum.inl (_ : InjOn Sum.inl (Sum.inl ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inl c) = 0
i : ι'
hi : Sum.inr i ∈ s
⊢ g (Sum.inr i) = 0
[PROOFSTEP]
rw [this, neg_eq_zero] at A 
[GOAL]
case refine'_2.intro.intro.inr
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι ⊕ ι' → M
hl : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • (v ∘ Sum.inl) i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hr : ∀ (s : Finset ι') (g : ι' → R), ∑ i in s, g i • (v ∘ Sum.inr) i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
hlr : ∀ (x : M), x ∈ span R (v '' range Sum.inl) → ∀ (y : M), y ∈ span R (v '' range Sum.inr) → x = y → x = 0
s : Finset (ι ⊕ ι')
g : ι ⊕ ι' → R
hg : ∑ i in s, g i • v i = 0
this :
  ∑ i in Finset.preimage s Sum.inl (_ : InjOn Sum.inl (Sum.inl ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inl i) =
    -∑ i in Finset.preimage s Sum.inr (_ : InjOn Sum.inr (Sum.inr ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inr i)
A : ∑ i in Finset.preimage s Sum.inr (_ : InjOn Sum.inr (Sum.inr ⁻¹' ↑s)), (fun x => g x • v x) (Sum.inr i) = 0
i : ι'
hi : Sum.inr i ∈ s
⊢ g (Sum.inr i) = 0
[PROOFSTEP]
exact hr _ _ A i (Finset.mem_preimage.2 hi)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s t : Set M
hs : LinearIndependent R fun x => ↑x
ht : LinearIndependent R fun x => ↑x
hst : Disjoint (span R s) (span R t)
⊢ Disjoint (span R (range fun x => ↑x)) (span R (range fun x => ↑x))
[PROOFSTEP]
simpa
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s t : Set M
hs : LinearIndependent R fun x => ↑x
ht : LinearIndependent R fun x => ↑x
hst : Disjoint (span R s) (span R t)
⊢ range (Sum.elim (fun x => ↑x) fun x => ↑x) = s ∪ t
[PROOFSTEP]
simp
[GOAL]
ι✝ : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
ι : Type u_8
f : ι → Set M
hl : ∀ (i : ι), LinearIndependent R fun x => ↑x
hd : ∀ (i : ι) (t : Set ι), Set.Finite t → ¬i ∈ t → Disjoint (span R (f i)) (⨆ (i : ι) (_ : i ∈ t), span R (f i))
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
classical
rw [iUnion_eq_iUnion_finset f]
apply linearIndependent_iUnion_of_directed
· apply directed_of_sup
  exact fun t₁ t₂ ht => iUnion_mono fun i => iUnion_subset_iUnion_const fun h => ht h
intro t
induction' t using Finset.induction_on with i s his ih
· refine' (linearIndependent_empty R M).mono _
  simp
· rw [Finset.set_biUnion_insert]
  refine' (hl _).union ih _
  rw [span_iUnion₂]
  exact hd i s s.finite_toSet his
[GOAL]
ι✝ : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
ι : Type u_8
f : ι → Set M
hl : ∀ (i : ι), LinearIndependent R fun x => ↑x
hd : ∀ (i : ι) (t : Set ι), Set.Finite t → ¬i ∈ t → Disjoint (span R (f i)) (⨆ (i : ι) (_ : i ∈ t), span R (f i))
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
rw [iUnion_eq_iUnion_finset f]
[GOAL]
ι✝ : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
ι : Type u_8
f : ι → Set M
hl : ∀ (i : ι), LinearIndependent R fun x => ↑x
hd : ∀ (i : ι) (t : Set ι), Set.Finite t → ¬i ∈ t → Disjoint (span R (f i)) (⨆ (i : ι) (_ : i ∈ t), span R (f i))
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
apply linearIndependent_iUnion_of_directed
[GOAL]
case hs
ι✝ : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
ι : Type u_8
f : ι → Set M
hl : ∀ (i : ι), LinearIndependent R fun x => ↑x
hd : ∀ (i : ι) (t : Set ι), Set.Finite t → ¬i ∈ t → Disjoint (span R (f i)) (⨆ (i : ι) (_ : i ∈ t), span R (f i))
⊢ Directed (fun x x_1 => x ⊆ x_1) fun i => ⋃ (i_1 : ι) (_ : i_1 ∈ i), f i_1
[PROOFSTEP]
apply directed_of_sup
[GOAL]
case hs.H
ι✝ : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
ι : Type u_8
f : ι → Set M
hl : ∀ (i : ι), LinearIndependent R fun x => ↑x
hd : ∀ (i : ι) (t : Set ι), Set.Finite t → ¬i ∈ t → Disjoint (span R (f i)) (⨆ (i : ι) (_ : i ∈ t), span R (f i))
⊢ ∀ ⦃i j : Finset ι⦄, i ≤ j → ⋃ (i_1 : ι) (_ : i_1 ∈ i), f i_1 ⊆ ⋃ (i : ι) (_ : i ∈ j), f i
[PROOFSTEP]
exact fun t₁ t₂ ht => iUnion_mono fun i => iUnion_subset_iUnion_const fun h => ht h
[GOAL]
case h
ι✝ : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
ι : Type u_8
f : ι → Set M
hl : ∀ (i : ι), LinearIndependent R fun x => ↑x
hd : ∀ (i : ι) (t : Set ι), Set.Finite t → ¬i ∈ t → Disjoint (span R (f i)) (⨆ (i : ι) (_ : i ∈ t), span R (f i))
⊢ ∀ (i : Finset ι), LinearIndependent R fun x => ↑x
[PROOFSTEP]
intro t
[GOAL]
case h
ι✝ : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
ι : Type u_8
f : ι → Set M
hl : ∀ (i : ι), LinearIndependent R fun x => ↑x
hd : ∀ (i : ι) (t : Set ι), Set.Finite t → ¬i ∈ t → Disjoint (span R (f i)) (⨆ (i : ι) (_ : i ∈ t), span R (f i))
t : Finset ι
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
induction' t using Finset.induction_on with i s his ih
[GOAL]
case h.empty
ι✝ : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
ι : Type u_8
f : ι → Set M
hl : ∀ (i : ι), LinearIndependent R fun x => ↑x
hd : ∀ (i : ι) (t : Set ι), Set.Finite t → ¬i ∈ t → Disjoint (span R (f i)) (⨆ (i : ι) (_ : i ∈ t), span R (f i))
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
refine' (linearIndependent_empty R M).mono _
[GOAL]
case h.empty
ι✝ : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
ι : Type u_8
f : ι → Set M
hl : ∀ (i : ι), LinearIndependent R fun x => ↑x
hd : ∀ (i : ι) (t : Set ι), Set.Finite t → ¬i ∈ t → Disjoint (span R (f i)) (⨆ (i : ι) (_ : i ∈ t), span R (f i))
⊢ ⋃ (i : ι) (_ : i ∈ ∅), f i ⊆ ∅
[PROOFSTEP]
simp
[GOAL]
case h.insert
ι✝ : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
ι : Type u_8
f : ι → Set M
hl : ∀ (i : ι), LinearIndependent R fun x => ↑x
hd : ∀ (i : ι) (t : Set ι), Set.Finite t → ¬i ∈ t → Disjoint (span R (f i)) (⨆ (i : ι) (_ : i ∈ t), span R (f i))
i : ι
s : Finset ι
his : ¬i ∈ s
ih : LinearIndependent R fun x => ↑x
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
rw [Finset.set_biUnion_insert]
[GOAL]
case h.insert
ι✝ : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
ι : Type u_8
f : ι → Set M
hl : ∀ (i : ι), LinearIndependent R fun x => ↑x
hd : ∀ (i : ι) (t : Set ι), Set.Finite t → ¬i ∈ t → Disjoint (span R (f i)) (⨆ (i : ι) (_ : i ∈ t), span R (f i))
i : ι
s : Finset ι
his : ¬i ∈ s
ih : LinearIndependent R fun x => ↑x
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
refine' (hl _).union ih _
[GOAL]
case h.insert
ι✝ : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
ι : Type u_8
f : ι → Set M
hl : ∀ (i : ι), LinearIndependent R fun x => ↑x
hd : ∀ (i : ι) (t : Set ι), Set.Finite t → ¬i ∈ t → Disjoint (span R (f i)) (⨆ (i : ι) (_ : i ∈ t), span R (f i))
i : ι
s : Finset ι
his : ¬i ∈ s
ih : LinearIndependent R fun x => ↑x
⊢ Disjoint (span R (f i)) (span R (⋃ (x : ι) (_ : x ∈ s), f x))
[PROOFSTEP]
rw [span_iUnion₂]
[GOAL]
case h.insert
ι✝ : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι✝ → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
ι : Type u_8
f : ι → Set M
hl : ∀ (i : ι), LinearIndependent R fun x => ↑x
hd : ∀ (i : ι) (t : Set ι), Set.Finite t → ¬i ∈ t → Disjoint (span R (f i)) (⨆ (i : ι) (_ : i ∈ t), span R (f i))
i : ι
s : Finset ι
his : ¬i ∈ s
ih : LinearIndependent R fun x => ↑x
⊢ Disjoint (span R (f i)) (⨆ (i : ι) (_ : i ∈ s), span R (f i))
[PROOFSTEP]
exact hd i s s.finite_toSet his
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
ιs : η → Type u_9
f : (j : η) → ιs j → M
hindep : ∀ (j : η), LinearIndependent R (f j)
hd :
  ∀ (i : η) (t : Set η),
    Set.Finite t → ¬i ∈ t → Disjoint (span R (range (f i))) (⨆ (i : η) (_ : i ∈ t), span R (range (f i)))
⊢ LinearIndependent R fun ji => f ji.fst ji.snd
[PROOFSTEP]
nontriviality R
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
ιs : η → Type u_9
f : (j : η) → ιs j → M
hindep : ∀ (j : η), LinearIndependent R (f j)
hd :
  ∀ (i : η) (t : Set η),
    Set.Finite t → ¬i ∈ t → Disjoint (span R (range (f i))) (⨆ (i : η) (_ : i ∈ t), span R (range (f i)))
✝ : Nontrivial R
⊢ LinearIndependent R fun ji => f ji.fst ji.snd
[PROOFSTEP]
apply LinearIndependent.of_subtype_range
[GOAL]
case hf
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
ιs : η → Type u_9
f : (j : η) → ιs j → M
hindep : ∀ (j : η), LinearIndependent R (f j)
hd :
  ∀ (i : η) (t : Set η),
    Set.Finite t → ¬i ∈ t → Disjoint (span R (range (f i))) (⨆ (i : η) (_ : i ∈ t), span R (range (f i)))
✝ : Nontrivial R
⊢ Injective fun ji => f ji.fst ji.snd
[PROOFSTEP]
rintro ⟨x₁, x₂⟩ ⟨y₁, y₂⟩ hxy
[GOAL]
case hf.mk.mk
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
ιs : η → Type u_9
f : (j : η) → ιs j → M
hindep : ∀ (j : η), LinearIndependent R (f j)
hd :
  ∀ (i : η) (t : Set η),
    Set.Finite t → ¬i ∈ t → Disjoint (span R (range (f i))) (⨆ (i : η) (_ : i ∈ t), span R (range (f i)))
✝ : Nontrivial R
x₁ : η
x₂ : ιs x₁
y₁ : η
y₂ : ιs y₁
hxy : (fun ji => f ji.fst ji.snd) { fst := x₁, snd := x₂ } = (fun ji => f ji.fst ji.snd) { fst := y₁, snd := y₂ }
⊢ { fst := x₁, snd := x₂ } = { fst := y₁, snd := y₂ }
[PROOFSTEP]
by_cases h_cases : x₁ = y₁
[GOAL]
case pos
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
ιs : η → Type u_9
f : (j : η) → ιs j → M
hindep : ∀ (j : η), LinearIndependent R (f j)
hd :
  ∀ (i : η) (t : Set η),
    Set.Finite t → ¬i ∈ t → Disjoint (span R (range (f i))) (⨆ (i : η) (_ : i ∈ t), span R (range (f i)))
✝ : Nontrivial R
x₁ : η
x₂ : ιs x₁
y₁ : η
y₂ : ιs y₁
hxy : (fun ji => f ji.fst ji.snd) { fst := x₁, snd := x₂ } = (fun ji => f ji.fst ji.snd) { fst := y₁, snd := y₂ }
h_cases : x₁ = y₁
⊢ { fst := x₁, snd := x₂ } = { fst := y₁, snd := y₂ }
case neg
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
ιs : η → Type u_9
f : (j : η) → ιs j → M
hindep : ∀ (j : η), LinearIndependent R (f j)
hd :
  ∀ (i : η) (t : Set η),
    Set.Finite t → ¬i ∈ t → Disjoint (span R (range (f i))) (⨆ (i : η) (_ : i ∈ t), span R (range (f i)))
✝ : Nontrivial R
x₁ : η
x₂ : ιs x₁
y₁ : η
y₂ : ιs y₁
hxy : (fun ji => f ji.fst ji.snd) { fst := x₁, snd := x₂ } = (fun ji => f ji.fst ji.snd) { fst := y₁, snd := y₂ }
h_cases : ¬x₁ = y₁
⊢ { fst := x₁, snd := x₂ } = { fst := y₁, snd := y₂ }
[PROOFSTEP]
subst h_cases
[GOAL]
case pos
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
ιs : η → Type u_9
f : (j : η) → ιs j → M
hindep : ∀ (j : η), LinearIndependent R (f j)
hd :
  ∀ (i : η) (t : Set η),
    Set.Finite t → ¬i ∈ t → Disjoint (span R (range (f i))) (⨆ (i : η) (_ : i ∈ t), span R (range (f i)))
✝ : Nontrivial R
x₁ : η
x₂ y₂ : ιs x₁
hxy : (fun ji => f ji.fst ji.snd) { fst := x₁, snd := x₂ } = (fun ji => f ji.fst ji.snd) { fst := x₁, snd := y₂ }
⊢ { fst := x₁, snd := x₂ } = { fst := x₁, snd := y₂ }
[PROOFSTEP]
apply Sigma.eq
[GOAL]
case pos.a
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
ιs : η → Type u_9
f : (j : η) → ιs j → M
hindep : ∀ (j : η), LinearIndependent R (f j)
hd :
  ∀ (i : η) (t : Set η),
    Set.Finite t → ¬i ∈ t → Disjoint (span R (range (f i))) (⨆ (i : η) (_ : i ∈ t), span R (range (f i)))
✝ : Nontrivial R
x₁ : η
x₂ y₂ : ιs x₁
hxy : (fun ji => f ji.fst ji.snd) { fst := x₁, snd := x₂ } = (fun ji => f ji.fst ji.snd) { fst := x₁, snd := y₂ }
⊢ Eq.recOn ?pos.h₁✝ { fst := x₁, snd := x₂ }.snd = { fst := x₁, snd := y₂ }.snd
case pos.h₁
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
ιs : η → Type u_9
f : (j : η) → ιs j → M
hindep : ∀ (j : η), LinearIndependent R (f j)
hd :
  ∀ (i : η) (t : Set η),
    Set.Finite t → ¬i ∈ t → Disjoint (span R (range (f i))) (⨆ (i : η) (_ : i ∈ t), span R (range (f i)))
✝ : Nontrivial R
x₁ : η
x₂ y₂ : ιs x₁
hxy : (fun ji => f ji.fst ji.snd) { fst := x₁, snd := x₂ } = (fun ji => f ji.fst ji.snd) { fst := x₁, snd := y₂ }
⊢ { fst := x₁, snd := x₂ }.fst = { fst := x₁, snd := y₂ }.fst
[PROOFSTEP]
rw [LinearIndependent.injective (hindep _) hxy]
[GOAL]
case pos.h₁
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
ιs : η → Type u_9
f : (j : η) → ιs j → M
hindep : ∀ (j : η), LinearIndependent R (f j)
hd :
  ∀ (i : η) (t : Set η),
    Set.Finite t → ¬i ∈ t → Disjoint (span R (range (f i))) (⨆ (i : η) (_ : i ∈ t), span R (range (f i)))
✝ : Nontrivial R
x₁ : η
x₂ y₂ : ιs x₁
hxy : (fun ji => f ji.fst ji.snd) { fst := x₁, snd := x₂ } = (fun ji => f ji.fst ji.snd) { fst := x₁, snd := y₂ }
⊢ { fst := x₁, snd := x₂ }.fst = { fst := x₁, snd := y₂ }.fst
case pos.h₁
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
ιs : η → Type u_9
f : (j : η) → ιs j → M
hindep : ∀ (j : η), LinearIndependent R (f j)
hd :
  ∀ (i : η) (t : Set η),
    Set.Finite t → ¬i ∈ t → Disjoint (span R (range (f i))) (⨆ (i : η) (_ : i ∈ t), span R (range (f i)))
✝ : Nontrivial R
x₁ : η
x₂ y₂ : ιs x₁
hxy : (fun ji => f ji.fst ji.snd) { fst := x₁, snd := x₂ } = (fun ji => f ji.fst ji.snd) { fst := x₁, snd := y₂ }
⊢ { fst := x₁, snd := x₂ }.fst = { fst := x₁, snd := y₂ }.fst
[PROOFSTEP]
rfl
[GOAL]
case neg
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
ιs : η → Type u_9
f : (j : η) → ιs j → M
hindep : ∀ (j : η), LinearIndependent R (f j)
hd :
  ∀ (i : η) (t : Set η),
    Set.Finite t → ¬i ∈ t → Disjoint (span R (range (f i))) (⨆ (i : η) (_ : i ∈ t), span R (range (f i)))
✝ : Nontrivial R
x₁ : η
x₂ : ιs x₁
y₁ : η
y₂ : ιs y₁
hxy : (fun ji => f ji.fst ji.snd) { fst := x₁, snd := x₂ } = (fun ji => f ji.fst ji.snd) { fst := y₁, snd := y₂ }
h_cases : ¬x₁ = y₁
⊢ { fst := x₁, snd := x₂ } = { fst := y₁, snd := y₂ }
[PROOFSTEP]
have h0 : f x₁ x₂ = 0 :=
  by
  apply
    disjoint_def.1 (hd x₁ { y₁ } (finite_singleton y₁) fun h => h_cases (eq_of_mem_singleton h)) (f x₁ x₂)
      (subset_span (mem_range_self _))
  rw [iSup_singleton]
  simp only at hxy 
  rw [hxy]
  exact subset_span (mem_range_self y₂)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
ιs : η → Type u_9
f : (j : η) → ιs j → M
hindep : ∀ (j : η), LinearIndependent R (f j)
hd :
  ∀ (i : η) (t : Set η),
    Set.Finite t → ¬i ∈ t → Disjoint (span R (range (f i))) (⨆ (i : η) (_ : i ∈ t), span R (range (f i)))
✝ : Nontrivial R
x₁ : η
x₂ : ιs x₁
y₁ : η
y₂ : ιs y₁
hxy : (fun ji => f ji.fst ji.snd) { fst := x₁, snd := x₂ } = (fun ji => f ji.fst ji.snd) { fst := y₁, snd := y₂ }
h_cases : ¬x₁ = y₁
⊢ f x₁ x₂ = 0
[PROOFSTEP]
apply
  disjoint_def.1 (hd x₁ { y₁ } (finite_singleton y₁) fun h => h_cases (eq_of_mem_singleton h)) (f x₁ x₂)
    (subset_span (mem_range_self _))
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
ιs : η → Type u_9
f : (j : η) → ιs j → M
hindep : ∀ (j : η), LinearIndependent R (f j)
hd :
  ∀ (i : η) (t : Set η),
    Set.Finite t → ¬i ∈ t → Disjoint (span R (range (f i))) (⨆ (i : η) (_ : i ∈ t), span R (range (f i)))
✝ : Nontrivial R
x₁ : η
x₂ : ιs x₁
y₁ : η
y₂ : ιs y₁
hxy : (fun ji => f ji.fst ji.snd) { fst := x₁, snd := x₂ } = (fun ji => f ji.fst ji.snd) { fst := y₁, snd := y₂ }
h_cases : ¬x₁ = y₁
⊢ f x₁ x₂ ∈ ⨆ (i : η) (_ : i ∈ {y₁}), span R (range (f i))
[PROOFSTEP]
rw [iSup_singleton]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
ιs : η → Type u_9
f : (j : η) → ιs j → M
hindep : ∀ (j : η), LinearIndependent R (f j)
hd :
  ∀ (i : η) (t : Set η),
    Set.Finite t → ¬i ∈ t → Disjoint (span R (range (f i))) (⨆ (i : η) (_ : i ∈ t), span R (range (f i)))
✝ : Nontrivial R
x₁ : η
x₂ : ιs x₁
y₁ : η
y₂ : ιs y₁
hxy : (fun ji => f ji.fst ji.snd) { fst := x₁, snd := x₂ } = (fun ji => f ji.fst ji.snd) { fst := y₁, snd := y₂ }
h_cases : ¬x₁ = y₁
⊢ f x₁ x₂ ∈ span R (range (f y₁))
[PROOFSTEP]
simp only at hxy 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
ιs : η → Type u_9
f : (j : η) → ιs j → M
hindep : ∀ (j : η), LinearIndependent R (f j)
hd :
  ∀ (i : η) (t : Set η),
    Set.Finite t → ¬i ∈ t → Disjoint (span R (range (f i))) (⨆ (i : η) (_ : i ∈ t), span R (range (f i)))
✝ : Nontrivial R
x₁ : η
x₂ : ιs x₁
y₁ : η
y₂ : ιs y₁
hxy : f x₁ x₂ = f y₁ y₂
h_cases : ¬x₁ = y₁
⊢ f x₁ x₂ ∈ span R (range (f y₁))
[PROOFSTEP]
rw [hxy]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
ιs : η → Type u_9
f : (j : η) → ιs j → M
hindep : ∀ (j : η), LinearIndependent R (f j)
hd :
  ∀ (i : η) (t : Set η),
    Set.Finite t → ¬i ∈ t → Disjoint (span R (range (f i))) (⨆ (i : η) (_ : i ∈ t), span R (range (f i)))
✝ : Nontrivial R
x₁ : η
x₂ : ιs x₁
y₁ : η
y₂ : ιs y₁
hxy : f x₁ x₂ = f y₁ y₂
h_cases : ¬x₁ = y₁
⊢ f y₁ y₂ ∈ span R (range (f y₁))
[PROOFSTEP]
exact subset_span (mem_range_self y₂)
[GOAL]
case neg
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
ιs : η → Type u_9
f : (j : η) → ιs j → M
hindep : ∀ (j : η), LinearIndependent R (f j)
hd :
  ∀ (i : η) (t : Set η),
    Set.Finite t → ¬i ∈ t → Disjoint (span R (range (f i))) (⨆ (i : η) (_ : i ∈ t), span R (range (f i)))
✝ : Nontrivial R
x₁ : η
x₂ : ιs x₁
y₁ : η
y₂ : ιs y₁
hxy : (fun ji => f ji.fst ji.snd) { fst := x₁, snd := x₂ } = (fun ji => f ji.fst ji.snd) { fst := y₁, snd := y₂ }
h_cases : ¬x₁ = y₁
h0 : f x₁ x₂ = 0
⊢ { fst := x₁, snd := x₂ } = { fst := y₁, snd := y₂ }
[PROOFSTEP]
exact False.elim ((hindep x₁).ne_zero _ h0)
[GOAL]
case a
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
ιs : η → Type u_9
f : (j : η) → ιs j → M
hindep : ∀ (j : η), LinearIndependent R (f j)
hd :
  ∀ (i : η) (t : Set η),
    Set.Finite t → ¬i ∈ t → Disjoint (span R (range (f i))) (⨆ (i : η) (_ : i ∈ t), span R (range (f i)))
✝ : Nontrivial R
⊢ LinearIndependent R Subtype.val
[PROOFSTEP]
rw [range_sigma_eq_iUnion_range]
[GOAL]
case a
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
η : Type u_8
ιs : η → Type u_9
f : (j : η) → ιs j → M
hindep : ∀ (j : η), LinearIndependent R (f j)
hd :
  ∀ (i : η) (t : Set η),
    Set.Finite t → ¬i ∈ t → Disjoint (span R (range (f i))) (⨆ (i : η) (_ : i ∈ t), span R (range (f i)))
✝ : Nontrivial R
⊢ LinearIndependent R Subtype.val
[PROOFSTEP]
apply linearIndependent_iUnion_finite_subtype (fun j => (hindep j).to_subtype_range) hd
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
⊢ (ι →₀ R) ≃ₗ[R] { x // x ∈ span R (range v) }
[PROOFSTEP]
apply LinearEquiv.ofBijective (LinearMap.codRestrict (span R (range v)) (Finsupp.total ι M R v) _)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
⊢ Bijective ↑(LinearMap.codRestrict (span R (range v)) (Finsupp.total ι M R v) ?m.425197)
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
⊢ ∀ (c : ι →₀ R), ↑(Finsupp.total ι M R v) c ∈ span R (range v)
[PROOFSTEP]
constructor
[GOAL]
case left
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
⊢ Injective ↑(LinearMap.codRestrict (span R (range v)) (Finsupp.total ι M R v) ?m.425197)
[PROOFSTEP]
rw [← LinearMap.ker_eq_bot, LinearMap.ker_codRestrict]
[GOAL]
case left
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
⊢ LinearMap.ker (Finsupp.total ι M R v) = ⊥
case left.hf
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
⊢ ∀ (c : ι →₀ R), ↑(Finsupp.total ι M R v) c ∈ span R (range v)
[PROOFSTEP]
apply hv
[GOAL]
case left.hf
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
⊢ ∀ (c : ι →₀ R), ↑(Finsupp.total ι M R v) c ∈ span R (range v)
[PROOFSTEP]
intro l
[GOAL]
case left.hf
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
l : ι →₀ R
⊢ ↑(Finsupp.total ι M R v) l ∈ span R (range v)
[PROOFSTEP]
rw [← Finsupp.range_total]
[GOAL]
case left.hf
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
l : ι →₀ R
⊢ ↑(Finsupp.total ι M R v) l ∈ LinearMap.range (Finsupp.total ι M R v)
[PROOFSTEP]
rw [LinearMap.mem_range]
[GOAL]
case left.hf
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
l : ι →₀ R
⊢ ∃ y, ↑(Finsupp.total ι M R v) y = ↑(Finsupp.total ι M R v) l
[PROOFSTEP]
apply mem_range_self l
[GOAL]
case right
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
⊢ Surjective
    ↑(LinearMap.codRestrict (span R (range v)) (Finsupp.total ι M R v)
        (_ : ∀ (l : ι →₀ R), ↑(Finsupp.total ι M R v) l ∈ span R (range v)))
[PROOFSTEP]
rw [← LinearMap.range_eq_top, LinearMap.range_eq_map, LinearMap.map_codRestrict, ← LinearMap.range_le_iff_comap,
  range_subtype, Submodule.map_top]
[GOAL]
case right
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
⊢ span R (range v) ≤ LinearMap.range (Finsupp.total ι M R v)
[PROOFSTEP]
rw [Finsupp.range_total]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
⊢ LinearMap.ker (repr hv) = ⊥
[PROOFSTEP]
rw [LinearIndependent.repr, LinearEquiv.ker]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
⊢ LinearMap.range (repr hv) = ⊤
[PROOFSTEP]
rw [LinearIndependent.repr, LinearEquiv.range]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
hv : LinearIndependent R v
l : ι →₀ R
x : { x // x ∈ span R (range v) }
eq : ↑(Finsupp.total ι M R v) l = ↑x
⊢ ↑(repr hv) x = l
[PROOFSTEP]
have : ↑((LinearIndependent.totalEquiv hv : (ι →₀ R) →ₗ[R] span R (range v)) l) = Finsupp.total ι M R v l := rfl
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
hv : LinearIndependent R v
l : ι →₀ R
x : { x // x ∈ span R (range v) }
eq : ↑(Finsupp.total ι M R v) l = ↑x
this : ↑(↑↑(totalEquiv hv) l) = ↑(Finsupp.total ι M R v) l
⊢ ↑(repr hv) x = l
[PROOFSTEP]
have : (LinearIndependent.totalEquiv hv : (ι →₀ R) →ₗ[R] span R (range v)) l = x :=
  by
  rw [eq] at this 
  exact Subtype.ext_iff.2 this
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
hv : LinearIndependent R v
l : ι →₀ R
x : { x // x ∈ span R (range v) }
eq : ↑(Finsupp.total ι M R v) l = ↑x
this : ↑(↑↑(totalEquiv hv) l) = ↑(Finsupp.total ι M R v) l
⊢ ↑↑(totalEquiv hv) l = x
[PROOFSTEP]
rw [eq] at this 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
hv : LinearIndependent R v
l : ι →₀ R
x : { x // x ∈ span R (range v) }
eq : ↑(Finsupp.total ι M R v) l = ↑x
this : ↑(↑↑(totalEquiv hv) l) = ↑x
⊢ ↑↑(totalEquiv hv) l = x
[PROOFSTEP]
exact Subtype.ext_iff.2 this
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
hv : LinearIndependent R v
l : ι →₀ R
x : { x // x ∈ span R (range v) }
eq : ↑(Finsupp.total ι M R v) l = ↑x
this✝ : ↑(↑↑(totalEquiv hv) l) = ↑(Finsupp.total ι M R v) l
this : ↑↑(totalEquiv hv) l = x
⊢ ↑(repr hv) x = l
[PROOFSTEP]
rw [← LinearEquiv.symm_apply_apply hv.totalEquiv l]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
hv : LinearIndependent R v
l : ι →₀ R
x : { x // x ∈ span R (range v) }
eq : ↑(Finsupp.total ι M R v) l = ↑x
this✝ : ↑(↑↑(totalEquiv hv) l) = ↑(Finsupp.total ι M R v) l
this : ↑↑(totalEquiv hv) l = x
⊢ ↑(repr hv) x = ↑(LinearEquiv.symm (totalEquiv hv)) (↑(totalEquiv hv) l)
[PROOFSTEP]
rw [← this]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
hv : LinearIndependent R v
l : ι →₀ R
x : { x // x ∈ span R (range v) }
eq : ↑(Finsupp.total ι M R v) l = ↑x
this✝ : ↑(↑↑(totalEquiv hv) l) = ↑(Finsupp.total ι M R v) l
this : ↑↑(totalEquiv hv) l = x
⊢ ↑(repr hv) (↑↑(totalEquiv hv) l) = ↑(LinearEquiv.symm (totalEquiv hv)) (↑(totalEquiv hv) l)
[PROOFSTEP]
rfl
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
hv : LinearIndependent R v
i : ι
x : { x // x ∈ span R (range v) }
hx : ↑x = v i
⊢ ↑(repr hv) x = Finsupp.single i 1
[PROOFSTEP]
apply hv.repr_eq
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
hv : LinearIndependent R v
i : ι
x : { x // x ∈ span R (range v) }
hx : ↑x = v i
⊢ ↑(Finsupp.total ι M R v) (Finsupp.single i 1) = ↑x
[PROOFSTEP]
simp [Finsupp.total_single, hx]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y : M
hv : LinearIndependent R v
inst✝ : Nontrivial R
x : { x // x ∈ span R (range v) }
⊢ Span.repr R (range v) x = Finsupp.equivMapDomain (Equiv.ofInjective v (_ : Injective v)) (↑(repr hv) x)
[PROOFSTEP]
have p : (Span.repr R (Set.range v) x).equivMapDomain (Equiv.ofInjective _ hv.injective).symm = hv.repr x :=
  by
  apply (LinearIndependent.totalEquiv hv).injective
  ext
  simp only [LinearIndependent.totalEquiv_apply_coe, Equiv.self_comp_ofInjective_symm, LinearIndependent.total_repr,
    Finsupp.total_equivMapDomain, Span.finsupp_total_repr]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y : M
hv : LinearIndependent R v
inst✝ : Nontrivial R
x : { x // x ∈ span R (range v) }
⊢ Finsupp.equivMapDomain (Equiv.ofInjective v (_ : Injective v)).symm (Span.repr R (range v) x) = ↑(repr hv) x
[PROOFSTEP]
apply (LinearIndependent.totalEquiv hv).injective
[GOAL]
case a
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y : M
hv : LinearIndependent R v
inst✝ : Nontrivial R
x : { x // x ∈ span R (range v) }
⊢ ↑(totalEquiv hv) (Finsupp.equivMapDomain (Equiv.ofInjective v (_ : Injective v)).symm (Span.repr R (range v) x)) =
    ↑(totalEquiv hv) (↑(repr hv) x)
[PROOFSTEP]
ext
[GOAL]
case a.a
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y : M
hv : LinearIndependent R v
inst✝ : Nontrivial R
x : { x // x ∈ span R (range v) }
⊢ ↑(↑(totalEquiv hv) (Finsupp.equivMapDomain (Equiv.ofInjective v (_ : Injective v)).symm (Span.repr R (range v) x))) =
    ↑(↑(totalEquiv hv) (↑(repr hv) x))
[PROOFSTEP]
simp only [LinearIndependent.totalEquiv_apply_coe, Equiv.self_comp_ofInjective_symm, LinearIndependent.total_repr,
  Finsupp.total_equivMapDomain, Span.finsupp_total_repr]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y : M
hv : LinearIndependent R v
inst✝ : Nontrivial R
x : { x // x ∈ span R (range v) }
p : Finsupp.equivMapDomain (Equiv.ofInjective v (_ : Injective v)).symm (Span.repr R (range v) x) = ↑(repr hv) x
⊢ Span.repr R (range v) x = Finsupp.equivMapDomain (Equiv.ofInjective v (_ : Injective v)) (↑(repr hv) x)
[PROOFSTEP]
ext ⟨_, ⟨i, rfl⟩⟩
[GOAL]
case h.mk.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y : M
hv : LinearIndependent R v
inst✝ : Nontrivial R
x : { x // x ∈ span R (range v) }
p : Finsupp.equivMapDomain (Equiv.ofInjective v (_ : Injective v)).symm (Span.repr R (range v) x) = ↑(repr hv) x
i : ι
⊢ ↑(Span.repr R (range v) x) { val := v i, property := (_ : ∃ y, v y = v i) } =
    ↑(Finsupp.equivMapDomain (Equiv.ofInjective v (_ : Injective v)) (↑(repr hv) x))
      { val := v i, property := (_ : ∃ y, v y = v i) }
[PROOFSTEP]
simp [← p]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a✝ b : R
x y : M
hv✝ hv : LinearIndependent R v
i : ι
a : R
ha : a • v i ∈ span R (v '' (univ \ {i}))
⊢ a = 0
[PROOFSTEP]
rw [Finsupp.span_image_eq_map_total, mem_map] at ha 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a✝ b : R
x y : M
hv✝ hv : LinearIndependent R v
i : ι
a : R
ha : ∃ y, y ∈ Finsupp.supported R R (univ \ {i}) ∧ ↑(Finsupp.total ι M R v) y = a • v i
⊢ a = 0
[PROOFSTEP]
rcases ha with ⟨l, hl, e⟩
[GOAL]
case intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a✝ b : R
x y : M
hv✝ hv : LinearIndependent R v
i : ι
a : R
l : ι →₀ R
hl : l ∈ Finsupp.supported R R (univ \ {i})
e : ↑(Finsupp.total ι M R v) l = a • v i
⊢ a = 0
[PROOFSTEP]
rw [sub_eq_zero.1 (linearIndependent_iff.1 hv (l - Finsupp.single i a) (by simp [e]))] at hl 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a✝ b : R
x y : M
hv✝ hv : LinearIndependent R v
i : ι
a : R
l : ι →₀ R
hl : l ∈ Finsupp.supported R R (univ \ {i})
e : ↑(Finsupp.total ι M R v) l = a • v i
⊢ ↑(Finsupp.total ι M R v) (l - Finsupp.single i a) = 0
[PROOFSTEP]
simp [e]
[GOAL]
case intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a✝ b : R
x y : M
hv✝ hv : LinearIndependent R v
i : ι
a : R
l : ι →₀ R
hl : Finsupp.single i a ∈ Finsupp.supported R R (univ \ {i})
e : ↑(Finsupp.total ι M R v) l = a • v i
⊢ a = 0
[PROOFSTEP]
by_contra hn
[GOAL]
case intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a✝ b : R
x y : M
hv✝ hv : LinearIndependent R v
i : ι
a : R
l : ι →₀ R
hl : Finsupp.single i a ∈ Finsupp.supported R R (univ \ {i})
e : ↑(Finsupp.total ι M R v) l = a • v i
hn : ¬a = 0
⊢ False
[PROOFSTEP]
exact (not_mem_of_mem_diff (hl <| by simp [hn])) (mem_singleton _)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a✝ b : R
x y : M
hv✝ hv : LinearIndependent R v
i : ι
a : R
l : ι →₀ R
hl : Finsupp.single i a ∈ Finsupp.supported R R (univ \ {i})
e : ↑(Finsupp.total ι M R v) l = a • v i
hn : ¬a = 0
⊢ i ∈ ↑(Finsupp.single i a).support
[PROOFSTEP]
simp [hn]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
H : ∀ (i : ι) (a : R), a • v i ∈ span R (v '' (univ \ {i})) → a = 0
l : ι →₀ R
hl : ↑(Finsupp.total ι M R v) l = 0
⊢ l = 0
[PROOFSTEP]
ext i
[GOAL]
case h
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
H : ∀ (i : ι) (a : R), a • v i ∈ span R (v '' (univ \ {i})) → a = 0
l : ι →₀ R
hl : ↑(Finsupp.total ι M R v) l = 0
i : ι
⊢ ↑l i = ↑0 i
[PROOFSTEP]
simp only [Finsupp.zero_apply]
[GOAL]
case h
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
H : ∀ (i : ι) (a : R), a • v i ∈ span R (v '' (univ \ {i})) → a = 0
l : ι →₀ R
hl : ↑(Finsupp.total ι M R v) l = 0
i : ι
⊢ ↑l i = 0
[PROOFSTEP]
by_contra hn
[GOAL]
case h
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
H : ∀ (i : ι) (a : R), a • v i ∈ span R (v '' (univ \ {i})) → a = 0
l : ι →₀ R
hl : ↑(Finsupp.total ι M R v) l = 0
i : ι
hn : ¬↑l i = 0
⊢ False
[PROOFSTEP]
refine' hn (H i _ _)
[GOAL]
case h
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
H : ∀ (i : ι) (a : R), a • v i ∈ span R (v '' (univ \ {i})) → a = 0
l : ι →₀ R
hl : ↑(Finsupp.total ι M R v) l = 0
i : ι
hn : ¬↑l i = 0
⊢ ↑l i • v i ∈ span R (v '' (univ \ {i}))
[PROOFSTEP]
refine' (Finsupp.mem_span_image_iff_total R).2 ⟨Finsupp.single i (l i) - l, _, _⟩
[GOAL]
case h.refine'_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
H : ∀ (i : ι) (a : R), a • v i ∈ span R (v '' (univ \ {i})) → a = 0
l : ι →₀ R
hl : ↑(Finsupp.total ι M R v) l = 0
i : ι
hn : ¬↑l i = 0
⊢ Finsupp.single i (↑l i) - l ∈ Finsupp.supported R R (univ \ {i})
[PROOFSTEP]
rw [Finsupp.mem_supported']
[GOAL]
case h.refine'_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
H : ∀ (i : ι) (a : R), a • v i ∈ span R (v '' (univ \ {i})) → a = 0
l : ι →₀ R
hl : ↑(Finsupp.total ι M R v) l = 0
i : ι
hn : ¬↑l i = 0
⊢ ∀ (x : ι), ¬x ∈ univ \ {i} → ↑(Finsupp.single i (↑l i) - l) x = 0
[PROOFSTEP]
intro j hj
[GOAL]
case h.refine'_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
H : ∀ (i : ι) (a : R), a • v i ∈ span R (v '' (univ \ {i})) → a = 0
l : ι →₀ R
hl : ↑(Finsupp.total ι M R v) l = 0
i : ι
hn : ¬↑l i = 0
j : ι
hj : ¬j ∈ univ \ {i}
⊢ ↑(Finsupp.single i (↑l i) - l) j = 0
[PROOFSTEP]
have hij : j = i :=
  Classical.not_not.1 fun hij : j ≠ i => hj ((mem_diff _).2 ⟨mem_univ _, fun h => hij (eq_of_mem_singleton h)⟩)
[GOAL]
case h.refine'_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
H : ∀ (i : ι) (a : R), a • v i ∈ span R (v '' (univ \ {i})) → a = 0
l : ι →₀ R
hl : ↑(Finsupp.total ι M R v) l = 0
i : ι
hn : ¬↑l i = 0
j : ι
hj : ¬j ∈ univ \ {i}
hij : j = i
⊢ ↑(Finsupp.single i (↑l i) - l) j = 0
[PROOFSTEP]
simp [hij]
[GOAL]
case h.refine'_2
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
H : ∀ (i : ι) (a : R), a • v i ∈ span R (v '' (univ \ {i})) → a = 0
l : ι →₀ R
hl : ↑(Finsupp.total ι M R v) l = 0
i : ι
hn : ¬↑l i = 0
⊢ ↑(Finsupp.total ι M R v) (Finsupp.single i (↑l i) - l) = ↑l i • v i
[PROOFSTEP]
simp [hl]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
⊢ CompleteLattice.Independent fun i => span R {v i}
[PROOFSTEP]
refine' CompleteLattice.independent_def.mp fun i => _
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
i : ι
⊢ Disjoint ((fun i => span R {v i}) i) (⨆ (j : ι) (_ : j ≠ i), (fun i => span R {v i}) j)
[PROOFSTEP]
rw [disjoint_iff_inf_le]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
i : ι
⊢ (fun i => span R {v i}) i ⊓ ⨆ (j : ι) (_ : j ≠ i), (fun i => span R {v i}) j ≤ ⊥
[PROOFSTEP]
intro m hm
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
i : ι
m : M
hm : m ∈ (fun i => span R {v i}) i ⊓ ⨆ (j : ι) (_ : j ≠ i), (fun i => span R {v i}) j
⊢ m ∈ ⊥
[PROOFSTEP]
simp only [mem_inf, mem_span_singleton, iSup_subtype', ← span_range_eq_iSup] at hm 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
i : ι
m : M
hm : (∃ a, a • v i = m) ∧ m ∈ span R (range fun i_1 => v ↑i_1)
⊢ m ∈ ⊥
[PROOFSTEP]
obtain ⟨⟨r, rfl⟩, hm⟩ := hm
[GOAL]
case intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
i : ι
r : R
hm : r • v i ∈ span R (range fun i_1 => v ↑i_1)
⊢ r • v i ∈ ⊥
[PROOFSTEP]
suffices r = 0 by simp [this]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
i : ι
r : R
hm : r • v i ∈ span R (range fun i_1 => v ↑i_1)
this : r = 0
⊢ r • v i ∈ ⊥
[PROOFSTEP]
simp [this]
[GOAL]
case intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
i : ι
r : R
hm : r • v i ∈ span R (range fun i_1 => v ↑i_1)
⊢ r = 0
[PROOFSTEP]
apply linearIndependent_iff_not_smul_mem_span.mp hv i
[GOAL]
case intro.intro.a
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
i : ι
r : R
hm : r • v i ∈ span R (range fun i_1 => v ↑i_1)
⊢ r • v i ∈ span R (v '' (univ \ {i}))
[PROOFSTEP]
suffices v '' (univ \ { i }) = range fun j : { j // j ≠ i } => v j by rwa [this]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
i : ι
r : R
hm : r • v i ∈ span R (range fun i_1 => v ↑i_1)
this : v '' (univ \ {i}) = range fun j => v ↑j
⊢ r • v i ∈ span R (v '' (univ \ {i}))
[PROOFSTEP]
rwa [this]
[GOAL]
case intro.intro.a
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
i : ι
r : R
hm : r • v i ∈ span R (range fun i_1 => v ↑i_1)
⊢ v '' (univ \ {i}) = range fun j => v ↑j
[PROOFSTEP]
ext
[GOAL]
case intro.intro.a.h
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv✝ hv : LinearIndependent R v
i : ι
r : R
hm : r • v i ∈ span R (range fun i_1 => v ↑i_1)
x✝ : M
⊢ x✝ ∈ v '' (univ \ {i}) ↔ x✝ ∈ range fun j => v ↑j
[PROOFSTEP]
simp
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
⊢ ∃ I, (LinearIndependent R fun x => s ↑x) ∧ ∀ (J : Set ι), I ⊆ J → (LinearIndependent R fun x => s ↑x) → I = J
[PROOFSTEP]
let indep : Set ι → Prop := fun I => LinearIndependent R (s ∘ (↑) : I → M)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
indep : Set ι → Prop := fun I => LinearIndependent R (s ∘ Subtype.val)
⊢ ∃ I, (LinearIndependent R fun x => s ↑x) ∧ ∀ (J : Set ι), I ⊆ J → (LinearIndependent R fun x => s ↑x) → I = J
[PROOFSTEP]
let X := { I : Set ι // indep I }
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
indep : Set ι → Prop := fun I => LinearIndependent R (s ∘ Subtype.val)
X : Type u' := { I // indep I }
⊢ ∃ I, (LinearIndependent R fun x => s ↑x) ∧ ∀ (J : Set ι), I ⊆ J → (LinearIndependent R fun x => s ↑x) → I = J
[PROOFSTEP]
let r : X → X → Prop := fun I J => I.1 ⊆ J.1
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
indep : Set ι → Prop := fun I => LinearIndependent R (s ∘ Subtype.val)
X : Type u' := { I // indep I }
r : X → X → Prop := fun I J => ↑I ⊆ ↑J
⊢ ∃ I, (LinearIndependent R fun x => s ↑x) ∧ ∀ (J : Set ι), I ⊆ J → (LinearIndependent R fun x => s ↑x) → I = J
[PROOFSTEP]
have key : ∀ c : Set X, IsChain r c → indep (⋃ (I : X) (_ : I ∈ c), I) :=
  by
  intro c hc
  dsimp
  rw [linearIndependent_comp_subtype]
  intro f hsupport hsum
  rcases eq_empty_or_nonempty c with (rfl | hn)
  · simpa using hsupport
  haveI : IsRefl X r := ⟨fun _ => Set.Subset.refl _⟩
  obtain ⟨I, _I_mem, hI⟩ : ∃ I ∈ c, (f.support : Set ι) ⊆ I :=
    hc.directedOn.exists_mem_subset_of_finset_subset_biUnion hn hsupport
  exact linearIndependent_comp_subtype.mp I.2 f hI hsum
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
indep : Set ι → Prop := fun I => LinearIndependent R (s ∘ Subtype.val)
X : Type u' := { I // indep I }
r : X → X → Prop := fun I J => ↑I ⊆ ↑J
⊢ ∀ (c : Set X), IsChain r c → indep (⋃ (I : X) (_ : I ∈ c), ↑I)
[PROOFSTEP]
intro c hc
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
indep : Set ι → Prop := fun I => LinearIndependent R (s ∘ Subtype.val)
X : Type u' := { I // indep I }
r : X → X → Prop := fun I J => ↑I ⊆ ↑J
c : Set X
hc : IsChain r c
⊢ indep (⋃ (I : X) (_ : I ∈ c), ↑I)
[PROOFSTEP]
dsimp
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
indep : Set ι → Prop := fun I => LinearIndependent R (s ∘ Subtype.val)
X : Type u' := { I // indep I }
r : X → X → Prop := fun I J => ↑I ⊆ ↑J
c : Set X
hc : IsChain r c
⊢ LinearIndependent R (s ∘ Subtype.val)
[PROOFSTEP]
rw [linearIndependent_comp_subtype]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
indep : Set ι → Prop := fun I => LinearIndependent R (s ∘ Subtype.val)
X : Type u' := { I // indep I }
r : X → X → Prop := fun I J => ↑I ⊆ ↑J
c : Set X
hc : IsChain r c
⊢ ∀ (l : ι →₀ R),
    l ∈ Finsupp.supported R R (⋃ (I : { I // LinearIndependent R (s ∘ Subtype.val) }) (_ : I ∈ c), ↑I) →
      ↑(Finsupp.total ι M R s) l = 0 → l = 0
[PROOFSTEP]
intro f hsupport hsum
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
indep : Set ι → Prop := fun I => LinearIndependent R (s ∘ Subtype.val)
X : Type u' := { I // indep I }
r : X → X → Prop := fun I J => ↑I ⊆ ↑J
c : Set X
hc : IsChain r c
f : ι →₀ R
hsupport : f ∈ Finsupp.supported R R (⋃ (I : { I // LinearIndependent R (s ∘ Subtype.val) }) (_ : I ∈ c), ↑I)
hsum : ↑(Finsupp.total ι M R s) f = 0
⊢ f = 0
[PROOFSTEP]
rcases eq_empty_or_nonempty c with (rfl | hn)
[GOAL]
case inl
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
indep : Set ι → Prop := fun I => LinearIndependent R (s ∘ Subtype.val)
X : Type u' := { I // indep I }
r : X → X → Prop := fun I J => ↑I ⊆ ↑J
f : ι →₀ R
hsum : ↑(Finsupp.total ι M R s) f = 0
hc : IsChain r ∅
hsupport : f ∈ Finsupp.supported R R (⋃ (I : { I // LinearIndependent R (s ∘ Subtype.val) }) (_ : I ∈ ∅), ↑I)
⊢ f = 0
[PROOFSTEP]
simpa using hsupport
[GOAL]
case inr
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
indep : Set ι → Prop := fun I => LinearIndependent R (s ∘ Subtype.val)
X : Type u' := { I // indep I }
r : X → X → Prop := fun I J => ↑I ⊆ ↑J
c : Set X
hc : IsChain r c
f : ι →₀ R
hsupport : f ∈ Finsupp.supported R R (⋃ (I : { I // LinearIndependent R (s ∘ Subtype.val) }) (_ : I ∈ c), ↑I)
hsum : ↑(Finsupp.total ι M R s) f = 0
hn : Set.Nonempty c
⊢ f = 0
[PROOFSTEP]
haveI : IsRefl X r := ⟨fun _ => Set.Subset.refl _⟩
[GOAL]
case inr
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
indep : Set ι → Prop := fun I => LinearIndependent R (s ∘ Subtype.val)
X : Type u' := { I // indep I }
r : X → X → Prop := fun I J => ↑I ⊆ ↑J
c : Set X
hc : IsChain r c
f : ι →₀ R
hsupport : f ∈ Finsupp.supported R R (⋃ (I : { I // LinearIndependent R (s ∘ Subtype.val) }) (_ : I ∈ c), ↑I)
hsum : ↑(Finsupp.total ι M R s) f = 0
hn : Set.Nonempty c
this : IsRefl X r
⊢ f = 0
[PROOFSTEP]
obtain ⟨I, _I_mem, hI⟩ : ∃ I ∈ c, (f.support : Set ι) ⊆ I :=
  hc.directedOn.exists_mem_subset_of_finset_subset_biUnion hn hsupport
[GOAL]
case inr.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
indep : Set ι → Prop := fun I => LinearIndependent R (s ∘ Subtype.val)
X : Type u' := { I // indep I }
r : X → X → Prop := fun I J => ↑I ⊆ ↑J
c : Set X
hc : IsChain r c
f : ι →₀ R
hsupport : f ∈ Finsupp.supported R R (⋃ (I : { I // LinearIndependent R (s ∘ Subtype.val) }) (_ : I ∈ c), ↑I)
hsum : ↑(Finsupp.total ι M R s) f = 0
hn : Set.Nonempty c
this : IsRefl X r
I : X
_I_mem : I ∈ c
hI : ↑f.support ⊆ ↑I
⊢ f = 0
[PROOFSTEP]
exact linearIndependent_comp_subtype.mp I.2 f hI hsum
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
indep : Set ι → Prop := fun I => LinearIndependent R (s ∘ Subtype.val)
X : Type u' := { I // indep I }
r : X → X → Prop := fun I J => ↑I ⊆ ↑J
key : ∀ (c : Set X), IsChain r c → indep (⋃ (I : X) (_ : I ∈ c), ↑I)
⊢ ∃ I, (LinearIndependent R fun x => s ↑x) ∧ ∀ (J : Set ι), I ⊆ J → (LinearIndependent R fun x => s ↑x) → I = J
[PROOFSTEP]
have trans : Transitive r := fun I J K => Set.Subset.trans
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
indep : Set ι → Prop := fun I => LinearIndependent R (s ∘ Subtype.val)
X : Type u' := { I // indep I }
r : X → X → Prop := fun I J => ↑I ⊆ ↑J
key : ∀ (c : Set X), IsChain r c → indep (⋃ (I : X) (_ : I ∈ c), ↑I)
trans : Transitive r
⊢ ∃ I, (LinearIndependent R fun x => s ↑x) ∧ ∀ (J : Set ι), I ⊆ J → (LinearIndependent R fun x => s ↑x) → I = J
[PROOFSTEP]
obtain ⟨⟨I, hli : indep I⟩, hmax : ∀ a, r ⟨I, hli⟩ a → r a ⟨I, hli⟩⟩ :=
  @exists_maximal_of_chains_bounded _ r
    (fun c hc => ⟨⟨⋃ I ∈ c, (I : Set ι), key c hc⟩, fun I => Set.subset_biUnion_of_mem⟩) @trans
[GOAL]
case intro.mk
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
indep : Set ι → Prop := fun I => LinearIndependent R (s ∘ Subtype.val)
X : Type u' := { I // indep I }
r : X → X → Prop := fun I J => ↑I ⊆ ↑J
key : ∀ (c : Set X), IsChain r c → indep (⋃ (I : X) (_ : I ∈ c), ↑I)
trans : Transitive r
I : Set ι
hli : indep I
hmax : ∀ (a : X), r { val := I, property := hli } a → r a { val := I, property := hli }
⊢ ∃ I, (LinearIndependent R fun x => s ↑x) ∧ ∀ (J : Set ι), I ⊆ J → (LinearIndependent R fun x => s ↑x) → I = J
[PROOFSTEP]
exact ⟨I, hli, fun J hsub hli => Set.Subset.antisymm hsub (hmax ⟨J, hli⟩ hsub)⟩
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
⊢ ∃ I, (LinearIndependent R fun x => s ↑x) ∧ ∀ (i : ι), ¬i ∈ I → ∃ a, a ≠ 0 ∧ a • s i ∈ span R (s '' I)
[PROOFSTEP]
classical
rcases exists_maximal_independent' R s with ⟨I, hIlinind, hImaximal⟩
use I, hIlinind
intro i hi
specialize hImaximal (I ∪ { i }) (by simp)
set J := I ∪ { i } with hJ
have memJ : ∀ {x}, x ∈ J ↔ x = i ∨ x ∈ I := by simp [hJ]
have hiJ : i ∈ J := by simp
have h := by
  refine mt hImaximal ?_
  · intro h2
    rw [h2] at hi 
    exact absurd hiJ hi
obtain ⟨f, supp_f, sum_f, f_ne⟩ := linearDependent_comp_subtype.mp h
have hfi : f i ≠ 0 := by
  contrapose hIlinind
  refine' linearDependent_comp_subtype.mpr ⟨f, _, sum_f, f_ne⟩
  simp only [Finsupp.mem_supported, hJ] at supp_f ⊢
  rintro x hx
  refine' (memJ.mp (supp_f hx)).resolve_left _
  rintro rfl
  exact hIlinind (Finsupp.mem_support_iff.mp hx)
use f i, hfi
have hfi' : i ∈ f.support := Finsupp.mem_support_iff.mpr hfi
rw [← Finset.insert_erase hfi', Finset.sum_insert (Finset.not_mem_erase _ _), add_eq_zero_iff_eq_neg] at sum_f 
rw [sum_f]
refine' neg_mem (sum_mem fun c hc => smul_mem _ _ (subset_span ⟨c, _, rfl⟩))
exact (memJ.mp (supp_f (Finset.erase_subset _ _ hc))).resolve_left (Finset.ne_of_mem_erase hc)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
⊢ ∃ I, (LinearIndependent R fun x => s ↑x) ∧ ∀ (i : ι), ¬i ∈ I → ∃ a, a ≠ 0 ∧ a • s i ∈ span R (s '' I)
[PROOFSTEP]
rcases exists_maximal_independent' R s with ⟨I, hIlinind, hImaximal⟩
[GOAL]
case intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
hImaximal : ∀ (J : Set ι), I ⊆ J → (LinearIndependent R fun x => s ↑x) → I = J
⊢ ∃ I, (LinearIndependent R fun x => s ↑x) ∧ ∀ (i : ι), ¬i ∈ I → ∃ a, a ≠ 0 ∧ a • s i ∈ span R (s '' I)
[PROOFSTEP]
use I, hIlinind
[GOAL]
case right
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
hImaximal : ∀ (J : Set ι), I ⊆ J → (LinearIndependent R fun x => s ↑x) → I = J
⊢ ∀ (i : ι), ¬i ∈ I → ∃ a, a ≠ 0 ∧ a • s i ∈ span R (s '' I)
[PROOFSTEP]
intro i hi
[GOAL]
case right
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
hImaximal : ∀ (J : Set ι), I ⊆ J → (LinearIndependent R fun x => s ↑x) → I = J
i : ι
hi : ¬i ∈ I
⊢ ∃ a, a ≠ 0 ∧ a • s i ∈ span R (s '' I)
[PROOFSTEP]
specialize hImaximal (I ∪ { i }) (by simp)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
hImaximal : ∀ (J : Set ι), I ⊆ J → (LinearIndependent R fun x => s ↑x) → I = J
i : ι
hi : ¬i ∈ I
⊢ I ⊆ I ∪ {i}
[PROOFSTEP]
simp
[GOAL]
case right
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
i : ι
hi : ¬i ∈ I
hImaximal : (LinearIndependent R fun x => s ↑x) → I = I ∪ {i}
⊢ ∃ a, a ≠ 0 ∧ a • s i ∈ span R (s '' I)
[PROOFSTEP]
set J := I ∪ { i } with hJ
[GOAL]
case right
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
⊢ ∃ a, a ≠ 0 ∧ a • s i ∈ span R (s '' I)
[PROOFSTEP]
have memJ : ∀ {x}, x ∈ J ↔ x = i ∨ x ∈ I := by simp [hJ]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
⊢ ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
[PROOFSTEP]
simp [hJ]
[GOAL]
case right
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
memJ : ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
⊢ ∃ a, a ≠ 0 ∧ a • s i ∈ span R (s '' I)
[PROOFSTEP]
have hiJ : i ∈ J := by simp
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
memJ : ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
⊢ i ∈ J
[PROOFSTEP]
simp
[GOAL]
case right
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
memJ : ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
hiJ : i ∈ J
⊢ ∃ a, a ≠ 0 ∧ a • s i ∈ span R (s '' I)
[PROOFSTEP]
have h := by
  refine mt hImaximal ?_
  · intro h2
    rw [h2] at hi 
    exact absurd hiJ hi
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
memJ : ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
hiJ : i ∈ J
⊢ ?m.535465
[PROOFSTEP]
refine mt hImaximal ?_
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
memJ : ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
hiJ : i ∈ J
⊢ ¬I = J
[PROOFSTEP]
intro h2
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
memJ : ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
hiJ : i ∈ J
h2 : I = J
⊢ False
[PROOFSTEP]
rw [h2] at hi 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
i : ι
J : Set ι := I ∪ {i}
hi : ¬i ∈ J
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
memJ : ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
hiJ : i ∈ J
h2 : I = J
⊢ False
[PROOFSTEP]
exact absurd hiJ hi
[GOAL]
case right
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
memJ : ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
hiJ : i ∈ J
h : ¬LinearIndependent R fun x => s ↑x
⊢ ∃ a, a ≠ 0 ∧ a • s i ∈ span R (s '' I)
[PROOFSTEP]
obtain ⟨f, supp_f, sum_f, f_ne⟩ := linearDependent_comp_subtype.mp h
[GOAL]
case right.intro.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
memJ : ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
hiJ : i ∈ J
h : ¬LinearIndependent R fun x => s ↑x
f : ι →₀ R
supp_f : f ∈ Finsupp.supported R R J
sum_f : ∑ i in f.support, ↑f i • s i = 0
f_ne : f ≠ 0
⊢ ∃ a, a ≠ 0 ∧ a • s i ∈ span R (s '' I)
[PROOFSTEP]
have hfi : f i ≠ 0 := by
  contrapose hIlinind
  refine' linearDependent_comp_subtype.mpr ⟨f, _, sum_f, f_ne⟩
  simp only [Finsupp.mem_supported, hJ] at supp_f ⊢
  rintro x hx
  refine' (memJ.mp (supp_f hx)).resolve_left _
  rintro rfl
  exact hIlinind (Finsupp.mem_support_iff.mp hx)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
memJ : ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
hiJ : i ∈ J
h : ¬LinearIndependent R fun x => s ↑x
f : ι →₀ R
supp_f : f ∈ Finsupp.supported R R J
sum_f : ∑ i in f.support, ↑f i • s i = 0
f_ne : f ≠ 0
⊢ ↑f i ≠ 0
[PROOFSTEP]
contrapose hIlinind
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
memJ : ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
hiJ : i ∈ J
h : ¬LinearIndependent R fun x => s ↑x
f : ι →₀ R
supp_f : f ∈ Finsupp.supported R R J
sum_f : ∑ i in f.support, ↑f i • s i = 0
f_ne : f ≠ 0
hIlinind : ¬↑f i ≠ 0
⊢ ¬LinearIndependent R fun x => s ↑x
[PROOFSTEP]
refine' linearDependent_comp_subtype.mpr ⟨f, _, sum_f, f_ne⟩
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
memJ : ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
hiJ : i ∈ J
h : ¬LinearIndependent R fun x => s ↑x
f : ι →₀ R
supp_f : f ∈ Finsupp.supported R R J
sum_f : ∑ i in f.support, ↑f i • s i = 0
f_ne : f ≠ 0
hIlinind : ¬↑f i ≠ 0
⊢ f ∈ Finsupp.supported R R I
[PROOFSTEP]
simp only [Finsupp.mem_supported, hJ] at supp_f ⊢
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
memJ : ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
hiJ : i ∈ J
h : ¬LinearIndependent R fun x => s ↑x
f : ι →₀ R
sum_f : ∑ i in f.support, ↑f i • s i = 0
f_ne : f ≠ 0
hIlinind : ¬↑f i ≠ 0
supp_f : ↑f.support ⊆ I ∪ {i}
⊢ ↑f.support ⊆ I
[PROOFSTEP]
rintro x hx
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
memJ : ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
hiJ : i ∈ J
h : ¬LinearIndependent R fun x => s ↑x
f : ι →₀ R
sum_f : ∑ i in f.support, ↑f i • s i = 0
f_ne : f ≠ 0
hIlinind : ¬↑f i ≠ 0
supp_f : ↑f.support ⊆ I ∪ {i}
x : ι
hx : x ∈ ↑f.support
⊢ x ∈ I
[PROOFSTEP]
refine' (memJ.mp (supp_f hx)).resolve_left _
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
memJ : ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
hiJ : i ∈ J
h : ¬LinearIndependent R fun x => s ↑x
f : ι →₀ R
sum_f : ∑ i in f.support, ↑f i • s i = 0
f_ne : f ≠ 0
hIlinind : ¬↑f i ≠ 0
supp_f : ↑f.support ⊆ I ∪ {i}
x : ι
hx : x ∈ ↑f.support
⊢ ¬x = i
[PROOFSTEP]
rintro rfl
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x✝ y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
f : ι →₀ R
sum_f : ∑ i in f.support, ↑f i • s i = 0
f_ne : f ≠ 0
x : ι
hx : x ∈ ↑f.support
hi : ¬x ∈ I
J : Set ι := I ∪ {x}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {x}
memJ : ∀ {x_1 : ι}, x_1 ∈ J ↔ x_1 = x ∨ x_1 ∈ I
hiJ : x ∈ J
h : ¬LinearIndependent R fun x => s ↑x
hIlinind : ¬↑f x ≠ 0
supp_f : ↑f.support ⊆ I ∪ {x}
⊢ False
[PROOFSTEP]
exact hIlinind (Finsupp.mem_support_iff.mp hx)
[GOAL]
case right.intro.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
memJ : ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
hiJ : i ∈ J
h : ¬LinearIndependent R fun x => s ↑x
f : ι →₀ R
supp_f : f ∈ Finsupp.supported R R J
sum_f : ∑ i in f.support, ↑f i • s i = 0
f_ne : f ≠ 0
hfi : ↑f i ≠ 0
⊢ ∃ a, a ≠ 0 ∧ a • s i ∈ span R (s '' I)
[PROOFSTEP]
use f i, hfi
[GOAL]
case right
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
memJ : ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
hiJ : i ∈ J
h : ¬LinearIndependent R fun x => s ↑x
f : ι →₀ R
supp_f : f ∈ Finsupp.supported R R J
sum_f : ∑ i in f.support, ↑f i • s i = 0
f_ne : f ≠ 0
hfi : ↑f i ≠ 0
⊢ ↑f i • s i ∈ span R (s '' I)
[PROOFSTEP]
have hfi' : i ∈ f.support := Finsupp.mem_support_iff.mpr hfi
[GOAL]
case right
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
memJ : ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
hiJ : i ∈ J
h : ¬LinearIndependent R fun x => s ↑x
f : ι →₀ R
supp_f : f ∈ Finsupp.supported R R J
sum_f : ∑ i in f.support, ↑f i • s i = 0
f_ne : f ≠ 0
hfi : ↑f i ≠ 0
hfi' : i ∈ f.support
⊢ ↑f i • s i ∈ span R (s '' I)
[PROOFSTEP]
rw [← Finset.insert_erase hfi', Finset.sum_insert (Finset.not_mem_erase _ _), add_eq_zero_iff_eq_neg] at sum_f 
[GOAL]
case right
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
memJ : ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
hiJ : i ∈ J
h : ¬LinearIndependent R fun x => s ↑x
f : ι →₀ R
supp_f : f ∈ Finsupp.supported R R J
sum_f : ↑f i • s i = -∑ x in Finset.erase f.support i, ↑f x • s x
f_ne : f ≠ 0
hfi : ↑f i ≠ 0
hfi' : i ∈ f.support
⊢ ↑f i • s i ∈ span R (s '' I)
[PROOFSTEP]
rw [sum_f]
[GOAL]
case right
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
memJ : ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
hiJ : i ∈ J
h : ¬LinearIndependent R fun x => s ↑x
f : ι →₀ R
supp_f : f ∈ Finsupp.supported R R J
sum_f : ↑f i • s i = -∑ x in Finset.erase f.support i, ↑f x • s x
f_ne : f ≠ 0
hfi : ↑f i ≠ 0
hfi' : i ∈ f.support
⊢ -∑ x in Finset.erase f.support i, ↑f x • s x ∈ span R (s '' I)
[PROOFSTEP]
refine' neg_mem (sum_mem fun c hc => smul_mem _ _ (subset_span ⟨c, _, rfl⟩))
[GOAL]
case right
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
hv : LinearIndependent R v
s : ι → M
I : Set ι
hIlinind : LinearIndependent R fun x => s ↑x
i : ι
hi : ¬i ∈ I
J : Set ι := I ∪ {i}
hImaximal : (LinearIndependent R fun x => s ↑x) → I = J
hJ : J = I ∪ {i}
memJ : ∀ {x : ι}, x ∈ J ↔ x = i ∨ x ∈ I
hiJ : i ∈ J
h : ¬LinearIndependent R fun x => s ↑x
f : ι →₀ R
supp_f : f ∈ Finsupp.supported R R J
sum_f : ↑f i • s i = -∑ x in Finset.erase f.support i, ↑f x • s x
f_ne : f ≠ 0
hfi : ↑f i ≠ 0
hfi' : i ∈ f.support
c : ι
hc : c ∈ Finset.erase f.support i
⊢ c ∈ I
[PROOFSTEP]
exact (memJ.mp (supp_f (Finset.erase_subset _ _ hc))).resolve_left (Finset.ne_of_mem_erase hc)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
f : ι' ↪ ι
hss : range v ⊆ ↑(span R (range (v ∘ ↑f)))
⊢ Surjective ↑f
[PROOFSTEP]
intro i
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
f : ι' ↪ ι
hss : range v ⊆ ↑(span R (range (v ∘ ↑f)))
i : ι
⊢ ∃ a, ↑f a = i
[PROOFSTEP]
let repr : (span R (range (v ∘ f)) : Type _) → ι' →₀ R := (hv.comp f f.injective).repr
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
f : ι' ↪ ι
hss : range v ⊆ ↑(span R (range (v ∘ ↑f)))
i : ι
repr : { x // x ∈ span R (range (v ∘ ↑f)) } → ι' →₀ R := ↑(LinearIndependent.repr (_ : LinearIndependent R (v ∘ ↑f)))
⊢ ∃ a, ↑f a = i
[PROOFSTEP]
let l := (repr ⟨v i, hss (mem_range_self i)⟩).mapDomain f
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
f : ι' ↪ ι
hss : range v ⊆ ↑(span R (range (v ∘ ↑f)))
i : ι
repr : { x // x ∈ span R (range (v ∘ ↑f)) } → ι' →₀ R := ↑(LinearIndependent.repr (_ : LinearIndependent R (v ∘ ↑f)))
l : ι →₀ R := Finsupp.mapDomain (↑f) (repr { val := v i, property := (_ : v i ∈ ↑(span R (range (v ∘ ↑f)))) })
⊢ ∃ a, ↑f a = i
[PROOFSTEP]
have h_total_l : Finsupp.total ι M R v l = v i := by
  dsimp only []
  rw [Finsupp.total_mapDomain]
  rw [(hv.comp f f.injective).total_repr]
    -- Porting note: `rfl` isn't necessary.
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
f : ι' ↪ ι
hss : range v ⊆ ↑(span R (range (v ∘ ↑f)))
i : ι
repr : { x // x ∈ span R (range (v ∘ ↑f)) } → ι' →₀ R := ↑(LinearIndependent.repr (_ : LinearIndependent R (v ∘ ↑f)))
l : ι →₀ R := Finsupp.mapDomain (↑f) (repr { val := v i, property := (_ : v i ∈ ↑(span R (range (v ∘ ↑f)))) })
⊢ ↑(Finsupp.total ι M R v) l = v i
[PROOFSTEP]
dsimp only []
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
f : ι' ↪ ι
hss : range v ⊆ ↑(span R (range (v ∘ ↑f)))
i : ι
repr : { x // x ∈ span R (range (v ∘ ↑f)) } → ι' →₀ R := ↑(LinearIndependent.repr (_ : LinearIndependent R (v ∘ ↑f)))
l : ι →₀ R := Finsupp.mapDomain (↑f) (repr { val := v i, property := (_ : v i ∈ ↑(span R (range (v ∘ ↑f)))) })
⊢ ↑(Finsupp.total ι M R v)
      (Finsupp.mapDomain (↑f)
        (↑(LinearIndependent.repr (_ : LinearIndependent R (v ∘ ↑f)))
          { val := v i, property := (_ : v i ∈ ↑(span R (range (v ∘ ↑f)))) })) =
    v i
[PROOFSTEP]
rw [Finsupp.total_mapDomain]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
f : ι' ↪ ι
hss : range v ⊆ ↑(span R (range (v ∘ ↑f)))
i : ι
repr : { x // x ∈ span R (range (v ∘ ↑f)) } → ι' →₀ R := ↑(LinearIndependent.repr (_ : LinearIndependent R (v ∘ ↑f)))
l : ι →₀ R := Finsupp.mapDomain (↑f) (repr { val := v i, property := (_ : v i ∈ ↑(span R (range (v ∘ ↑f)))) })
⊢ ↑(Finsupp.total ι' M R (v ∘ ↑f))
      (↑(LinearIndependent.repr (_ : LinearIndependent R (v ∘ ↑f)))
        { val := v i, property := (_ : v i ∈ ↑(span R (range (v ∘ ↑f)))) }) =
    v i
[PROOFSTEP]
rw [(hv.comp f f.injective).total_repr]
  -- Porting note: `rfl` isn't necessary.
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
f : ι' ↪ ι
hss : range v ⊆ ↑(span R (range (v ∘ ↑f)))
i : ι
repr : { x // x ∈ span R (range (v ∘ ↑f)) } → ι' →₀ R := ↑(LinearIndependent.repr (_ : LinearIndependent R (v ∘ ↑f)))
l : ι →₀ R := Finsupp.mapDomain (↑f) (repr { val := v i, property := (_ : v i ∈ ↑(span R (range (v ∘ ↑f)))) })
h_total_l : ↑(Finsupp.total ι M R v) l = v i
⊢ ∃ a, ↑f a = i
[PROOFSTEP]
have h_total_eq : (Finsupp.total ι M R v) l = (Finsupp.total ι M R v) (Finsupp.single i 1) := by
  rw [h_total_l, Finsupp.total_single, one_smul]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
f : ι' ↪ ι
hss : range v ⊆ ↑(span R (range (v ∘ ↑f)))
i : ι
repr : { x // x ∈ span R (range (v ∘ ↑f)) } → ι' →₀ R := ↑(LinearIndependent.repr (_ : LinearIndependent R (v ∘ ↑f)))
l : ι →₀ R := Finsupp.mapDomain (↑f) (repr { val := v i, property := (_ : v i ∈ ↑(span R (range (v ∘ ↑f)))) })
h_total_l : ↑(Finsupp.total ι M R v) l = v i
⊢ ↑(Finsupp.total ι M R v) l = ↑(Finsupp.total ι M R v) (Finsupp.single i 1)
[PROOFSTEP]
rw [h_total_l, Finsupp.total_single, one_smul]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
f : ι' ↪ ι
hss : range v ⊆ ↑(span R (range (v ∘ ↑f)))
i : ι
repr : { x // x ∈ span R (range (v ∘ ↑f)) } → ι' →₀ R := ↑(LinearIndependent.repr (_ : LinearIndependent R (v ∘ ↑f)))
l : ι →₀ R := Finsupp.mapDomain (↑f) (repr { val := v i, property := (_ : v i ∈ ↑(span R (range (v ∘ ↑f)))) })
h_total_l : ↑(Finsupp.total ι M R v) l = v i
h_total_eq : ↑(Finsupp.total ι M R v) l = ↑(Finsupp.total ι M R v) (Finsupp.single i 1)
⊢ ∃ a, ↑f a = i
[PROOFSTEP]
have l_eq : l = _ := LinearMap.ker_eq_bot.1 hv h_total_eq
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
f : ι' ↪ ι
hss : range v ⊆ ↑(span R (range (v ∘ ↑f)))
i : ι
repr : { x // x ∈ span R (range (v ∘ ↑f)) } → ι' →₀ R := ↑(LinearIndependent.repr (_ : LinearIndependent R (v ∘ ↑f)))
l : ι →₀ R := Finsupp.mapDomain (↑f) (repr { val := v i, property := (_ : v i ∈ ↑(span R (range (v ∘ ↑f)))) })
h_total_l : ↑(Finsupp.total ι M R v) l = v i
h_total_eq : ↑(Finsupp.total ι M R v) l = ↑(Finsupp.total ι M R v) (Finsupp.single i 1)
l_eq : l = Finsupp.single i 1
⊢ ∃ a, ↑f a = i
[PROOFSTEP]
dsimp only [] at l_eq 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
f : ι' ↪ ι
hss : range v ⊆ ↑(span R (range (v ∘ ↑f)))
i : ι
repr : { x // x ∈ span R (range (v ∘ ↑f)) } → ι' →₀ R := ↑(LinearIndependent.repr (_ : LinearIndependent R (v ∘ ↑f)))
l : ι →₀ R := Finsupp.mapDomain (↑f) (repr { val := v i, property := (_ : v i ∈ ↑(span R (range (v ∘ ↑f)))) })
h_total_l : ↑(Finsupp.total ι M R v) l = v i
h_total_eq : ↑(Finsupp.total ι M R v) l = ↑(Finsupp.total ι M R v) (Finsupp.single i 1)
l_eq :
  Finsupp.mapDomain (↑f)
      (↑(LinearIndependent.repr (_ : LinearIndependent R (v ∘ ↑f)))
        { val := v i, property := (_ : v i ∈ ↑(span R (range (v ∘ ↑f)))) }) =
    Finsupp.single i 1
⊢ ∃ a, ↑f a = i
[PROOFSTEP]
rw [← Finsupp.embDomain_eq_mapDomain] at l_eq 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
f : ι' ↪ ι
hss : range v ⊆ ↑(span R (range (v ∘ ↑f)))
i : ι
repr : { x // x ∈ span R (range (v ∘ ↑f)) } → ι' →₀ R := ↑(LinearIndependent.repr (_ : LinearIndependent R (v ∘ ↑f)))
l : ι →₀ R := Finsupp.mapDomain (↑f) (repr { val := v i, property := (_ : v i ∈ ↑(span R (range (v ∘ ↑f)))) })
h_total_l : ↑(Finsupp.total ι M R v) l = v i
h_total_eq : ↑(Finsupp.total ι M R v) l = ↑(Finsupp.total ι M R v) (Finsupp.single i 1)
l_eq :
  Finsupp.embDomain f
      (↑(LinearIndependent.repr (_ : LinearIndependent R (v ∘ ↑f)))
        { val := v i, property := (_ : v i ∈ ↑(span R (range (v ∘ ↑f)))) }) =
    Finsupp.single i 1
⊢ ∃ a, ↑f a = i
[PROOFSTEP]
rcases Finsupp.single_of_embDomain_single (repr ⟨v i, _⟩) f i (1 : R) zero_ne_one.symm l_eq with ⟨i', hi'⟩
[GOAL]
case intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
f : ι' ↪ ι
hss : range v ⊆ ↑(span R (range (v ∘ ↑f)))
i : ι
repr : { x // x ∈ span R (range (v ∘ ↑f)) } → ι' →₀ R := ↑(LinearIndependent.repr (_ : LinearIndependent R (v ∘ ↑f)))
l : ι →₀ R := Finsupp.mapDomain (↑f) (repr { val := v i, property := (_ : v i ∈ ↑(span R (range (v ∘ ↑f)))) })
h_total_l : ↑(Finsupp.total ι M R v) l = v i
h_total_eq : ↑(Finsupp.total ι M R v) l = ↑(Finsupp.total ι M R v) (Finsupp.single i 1)
l_eq :
  Finsupp.embDomain f
      (↑(LinearIndependent.repr (_ : LinearIndependent R (v ∘ ↑f)))
        { val := v i, property := (_ : v i ∈ ↑(span R (range (v ∘ ↑f)))) }) =
    Finsupp.single i 1
i' : ι'
hi' : repr { val := v i, property := (_ : v i ∈ ↑(span R (range (v ∘ ↑f)))) } = Finsupp.single i' 1 ∧ ↑f i' = i
⊢ ∃ a, ↑f a = i
[PROOFSTEP]
use i'
[GOAL]
case h
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
hv : LinearIndependent R v
f : ι' ↪ ι
hss : range v ⊆ ↑(span R (range (v ∘ ↑f)))
i : ι
repr : { x // x ∈ span R (range (v ∘ ↑f)) } → ι' →₀ R := ↑(LinearIndependent.repr (_ : LinearIndependent R (v ∘ ↑f)))
l : ι →₀ R := Finsupp.mapDomain (↑f) (repr { val := v i, property := (_ : v i ∈ ↑(span R (range (v ∘ ↑f)))) })
h_total_l : ↑(Finsupp.total ι M R v) l = v i
h_total_eq : ↑(Finsupp.total ι M R v) l = ↑(Finsupp.total ι M R v) (Finsupp.single i 1)
l_eq :
  Finsupp.embDomain f
      (↑(LinearIndependent.repr (_ : LinearIndependent R (v ∘ ↑f)))
        { val := v i, property := (_ : v i ∈ ↑(span R (range (v ∘ ↑f)))) }) =
    Finsupp.single i 1
i' : ι'
hi' : repr { val := v i, property := (_ : v i ∈ ↑(span R (range (v ∘ ↑f)))) } = Finsupp.single i' 1 ∧ ↑f i' = i
⊢ ↑f i' = i
[PROOFSTEP]
exact hi'.2
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
s t : Set M
hs : LinearIndependent R fun x => ↑x
h : t ⊆ s
hst : s ⊆ ↑(span R t)
⊢ s = t
[PROOFSTEP]
let f : t ↪ s := ⟨fun x => ⟨x.1, h x.2⟩, fun a b hab => Subtype.coe_injective (Subtype.mk.inj hab)⟩
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
s t : Set M
hs : LinearIndependent R fun x => ↑x
h : t ⊆ s
hst : s ⊆ ↑(span R t)
f : ↑t ↪ ↑s :=
  { toFun := fun x => { val := ↑x, property := (_ : ↑x ∈ s) },
    inj' :=
      (_ :
        ∀ (a b : ↑t),
          (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) a = (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) b →
            a = b) }
⊢ s = t
[PROOFSTEP]
have h_surj : Surjective f := by
  apply surjective_of_linearIndependent_of_span hs f _
  convert hst <;> simp [comp]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
s t : Set M
hs : LinearIndependent R fun x => ↑x
h : t ⊆ s
hst : s ⊆ ↑(span R t)
f : ↑t ↪ ↑s :=
  { toFun := fun x => { val := ↑x, property := (_ : ↑x ∈ s) },
    inj' :=
      (_ :
        ∀ (a b : ↑t),
          (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) a = (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) b →
            a = b) }
⊢ Surjective ↑f
[PROOFSTEP]
apply surjective_of_linearIndependent_of_span hs f _
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
s t : Set M
hs : LinearIndependent R fun x => ↑x
h : t ⊆ s
hst : s ⊆ ↑(span R t)
f : ↑t ↪ ↑s :=
  { toFun := fun x => { val := ↑x, property := (_ : ↑x ∈ s) },
    inj' :=
      (_ :
        ∀ (a b : ↑t),
          (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) a = (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) b →
            a = b) }
⊢ (range fun x => ↑x) ⊆ ↑(span R (range ((fun x => ↑x) ∘ ↑f)))
[PROOFSTEP]
convert hst
[GOAL]
case h.e'_3
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
s t : Set M
hs : LinearIndependent R fun x => ↑x
h : t ⊆ s
hst : s ⊆ ↑(span R t)
f : ↑t ↪ ↑s :=
  { toFun := fun x => { val := ↑x, property := (_ : ↑x ∈ s) },
    inj' :=
      (_ :
        ∀ (a b : ↑t),
          (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) a = (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) b →
            a = b) }
⊢ (range fun x => ↑x) = s
[PROOFSTEP]
simp [comp]
[GOAL]
case h.e'_4.h.e'_4.h.e'_6
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
s t : Set M
hs : LinearIndependent R fun x => ↑x
h : t ⊆ s
hst : s ⊆ ↑(span R t)
f : ↑t ↪ ↑s :=
  { toFun := fun x => { val := ↑x, property := (_ : ↑x ∈ s) },
    inj' :=
      (_ :
        ∀ (a b : ↑t),
          (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) a = (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) b →
            a = b) }
⊢ range ((fun x => ↑x) ∘ ↑f) = t
[PROOFSTEP]
simp [comp]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
s t : Set M
hs : LinearIndependent R fun x => ↑x
h : t ⊆ s
hst : s ⊆ ↑(span R t)
f : ↑t ↪ ↑s :=
  { toFun := fun x => { val := ↑x, property := (_ : ↑x ∈ s) },
    inj' :=
      (_ :
        ∀ (a b : ↑t),
          (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) a = (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) b →
            a = b) }
h_surj : Surjective ↑f
⊢ s = t
[PROOFSTEP]
show s = t
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
s t : Set M
hs : LinearIndependent R fun x => ↑x
h : t ⊆ s
hst : s ⊆ ↑(span R t)
f : ↑t ↪ ↑s :=
  { toFun := fun x => { val := ↑x, property := (_ : ↑x ∈ s) },
    inj' :=
      (_ :
        ∀ (a b : ↑t),
          (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) a = (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) b →
            a = b) }
h_surj : Surjective ↑f
⊢ s = t
[PROOFSTEP]
apply Subset.antisymm _ h
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
s t : Set M
hs : LinearIndependent R fun x => ↑x
h : t ⊆ s
hst : s ⊆ ↑(span R t)
f : ↑t ↪ ↑s :=
  { toFun := fun x => { val := ↑x, property := (_ : ↑x ∈ s) },
    inj' :=
      (_ :
        ∀ (a b : ↑t),
          (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) a = (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) b →
            a = b) }
h_surj : Surjective ↑f
⊢ s ⊆ t
[PROOFSTEP]
intro x hx
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y : M
inst✝ : Nontrivial R
s t : Set M
hs : LinearIndependent R fun x => ↑x
h : t ⊆ s
hst : s ⊆ ↑(span R t)
f : ↑t ↪ ↑s :=
  { toFun := fun x => { val := ↑x, property := (_ : ↑x ∈ s) },
    inj' :=
      (_ :
        ∀ (a b : ↑t),
          (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) a = (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) b →
            a = b) }
h_surj : Surjective ↑f
x : M
hx : x ∈ s
⊢ x ∈ t
[PROOFSTEP]
rcases h_surj ⟨x, hx⟩ with ⟨y, hy⟩
[GOAL]
case intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y✝ : M
inst✝ : Nontrivial R
s t : Set M
hs : LinearIndependent R fun x => ↑x
h : t ⊆ s
hst : s ⊆ ↑(span R t)
f : ↑t ↪ ↑s :=
  { toFun := fun x => { val := ↑x, property := (_ : ↑x ∈ s) },
    inj' :=
      (_ :
        ∀ (a b : ↑t),
          (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) a = (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) b →
            a = b) }
h_surj : Surjective ↑f
x : M
hx : x ∈ s
y : ↑t
hy : ↑f y = { val := x, property := hx }
⊢ x ∈ t
[PROOFSTEP]
convert y.mem
[GOAL]
case h.e'_4
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x✝ y✝ : M
inst✝ : Nontrivial R
s t : Set M
hs : LinearIndependent R fun x => ↑x
h : t ⊆ s
hst : s ⊆ ↑(span R t)
f : ↑t ↪ ↑s :=
  { toFun := fun x => { val := ↑x, property := (_ : ↑x ∈ s) },
    inj' :=
      (_ :
        ∀ (a b : ↑t),
          (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) a = (fun x => { val := ↑x, property := (_ : ↑x ∈ s) }) b →
            a = b) }
h_surj : Surjective ↑f
x : M
hx : x ∈ s
y : ↑t
hy : ↑f y = { val := x, property := hx }
⊢ x = ↑y
[PROOFSTEP]
rw [← Subtype.mk.inj hy]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set M
f : M →ₗ[R] M'
hs : LinearIndependent R fun x => ↑x
hf_inj : Disjoint (span R s) (ker f)
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
rw [← @Subtype.range_coe _ s] at hf_inj 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set M
f : M →ₗ[R] M'
hs : LinearIndependent R fun x => ↑x
hf_inj : Disjoint (span R (Set.range Subtype.val)) (ker f)
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
refine' (hs.map hf_inj).to_subtype_range' _
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set M
f : M →ₗ[R] M'
hs : LinearIndependent R fun x => ↑x
hf_inj : Disjoint (span R (Set.range Subtype.val)) (ker f)
⊢ Set.range (↑f ∘ fun x => ↑x) = ↑f '' s
[PROOFSTEP]
simp [Set.range_comp f]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set M
t : Set M'
hs : LinearIndependent R fun x => ↑x
ht : LinearIndependent R fun x => ↑x
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
refine' (hs.image_subtype _).union (ht.image_subtype _) _ <;> [simp; simp; skip]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set M
t : Set M'
hs : LinearIndependent R fun x => ↑x
ht : LinearIndependent R fun x => ↑x
⊢ LinearIndependent R fun x => ↑x
[PROOFSTEP]
refine' (hs.image_subtype _).union (ht.image_subtype _) _
[GOAL]
case refine'_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set M
t : Set M'
hs : LinearIndependent R fun x => ↑x
ht : LinearIndependent R fun x => ↑x
⊢ Disjoint (span R s) (ker (inl R M M'))
[PROOFSTEP]
simp
[GOAL]
case refine'_2
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set M
t : Set M'
hs : LinearIndependent R fun x => ↑x
ht : LinearIndependent R fun x => ↑x
⊢ Disjoint (span R t) (ker (inr R M M'))
[PROOFSTEP]
simp
[GOAL]
case refine'_3
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set M
t : Set M'
hs : LinearIndependent R fun x => ↑x
ht : LinearIndependent R fun x => ↑x
⊢ Disjoint (span R (↑(inl R M M') '' s)) (span R (↑(inr R M M') '' t))
[PROOFSTEP]
skip
[GOAL]
case refine'_3
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set M
t : Set M'
hs : LinearIndependent R fun x => ↑x
ht : LinearIndependent R fun x => ↑x
⊢ Disjoint (span R (↑(inl R M M') '' s)) (span R (↑(inr R M M') '' t))
[PROOFSTEP]
simp only [span_image]
[GOAL]
case refine'_3
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set M
t : Set M'
hs : LinearIndependent R fun x => ↑x
ht : LinearIndependent R fun x => ↑x
⊢ Disjoint (Submodule.map (inl R M M') (span R s)) (Submodule.map (inr R M M') (span R t))
[PROOFSTEP]
simp [disjoint_iff, prod_inf_prod]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι → M
v' : ι' → M'
hv : LinearIndependent R v
hv' : LinearIndependent R v'
⊢ Disjoint (span R (Set.range (↑(inl R M M') ∘ v))) (span R (Set.range (↑(inr R M M') ∘ v')))
[PROOFSTEP]
refine' isCompl_range_inl_inr.disjoint.mono _ _
[GOAL]
case refine'_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι → M
v' : ι' → M'
hv : LinearIndependent R v
hv' : LinearIndependent R v'
⊢ span R (Set.range (↑(inl R M M') ∘ v)) ≤ LinearMap.range (inl R M M')
[PROOFSTEP]
simp only [span_le, range_coe, range_comp_subset_range]
[GOAL]
case refine'_2
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : AddCommGroup M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
v : ι → M
v' : ι' → M'
hv : LinearIndependent R v
hv' : LinearIndependent R v'
⊢ span R (Set.range (↑(inr R M M') ∘ v')) ≤ LinearMap.range (inr R M M')
[PROOFSTEP]
simp only [span_le, range_coe, range_comp_subset_range]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a b : R
x y : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
⊢ LinearIndependent L fun f => ↑f
[PROOFSTEP]
letI := Classical.decEq (G →* L)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a b : R
x y : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this : DecidableEq (G →* L) := Classical.decEq (G →* L)
⊢ LinearIndependent L fun f => ↑f
[PROOFSTEP]
letI : MulAction L L := DistribMulAction.toMulAction
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a b : R
x y : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
⊢ LinearIndependent L fun f => ↑f
[PROOFSTEP]
exact
  linearIndependent_iff'.2
      -- To do this, we use `Finset` induction,
          -- Porting note: `False.elim` → `fun h => False.elim <| Finset.not_mem_empty _ h`
    fun s =>
    Finset.induction_on s (fun g _hg i h => False.elim <| Finset.not_mem_empty _ h)
      fun a s has ih g hg =>
        -- Here
                -- * `a` is a new character we will insert into the `Finset` of characters `s`,
                -- * `ih` is the fact that only the trivial linear combination of characters in `s` is zero
                -- * `hg` is the fact that `g` are the coefficients of a linear combination summing to zero
                -- and it remains to prove that `g` vanishes on `insert a s`.
                -- We now make the key calculation:
                -- For any character `i` in the original `Finset`, we have `g i • i = g i • a` as functions
                -- on the monoid `G`.
      have h1 : ∀ i ∈ s, (g i • (i : G → L)) = g i • (a : G → L) := fun i his =>
        funext
          fun x : G =>
            -- We prove these expressions are equal by showing
                        -- the differences of their values on each monoid element `x` is zero
          eq_of_sub_eq_zero <|
            ih (fun j => g j * j x - g j * a x)
              (funext fun y : G =>
                calc
                  -- After that, it's just a chase scene.
                  (∑ i in s, ((g i * i x - g i * a x) • (i : G → L))) y = ∑ i in s, (g i * i x - g i * a x) * i y :=
                    Finset.sum_apply _ _ _
                  _ = ∑ i in s, (g i * i x * i y - g i * a x * i y) := (Finset.sum_congr rfl fun _ _ => sub_mul _ _ _)
                  _ = (∑ i in s, g i * i x * i y) - ∑ i in s, g i * a x * i y := Finset.sum_sub_distrib
                  _ = (g a * a x * a y + ∑ i in s, g i * i x * i y) - (g a * a x * a y + ∑ i in s, g i * a x * i y) :=
                    by rw [add_sub_add_left_eq_sub]
                  _ = (∑ i in insert a s, g i * i x * i y) - ∑ i in insert a s, g i * a x * i y := by
                    rw [Finset.sum_insert has, Finset.sum_insert has]
                  _ = (∑ i in insert a s, g i * i (x * y)) - ∑ i in insert a s, a x * (g i * i y) :=
                    (congr (congr_arg Sub.sub (Finset.sum_congr rfl fun i _ => by rw [i.map_mul, mul_assoc]))
                      (Finset.sum_congr rfl fun _ _ => by rw [mul_assoc, mul_left_comm]))
                  _ =
                      (∑ i in insert a s, (g i • (i : G → L))) (x * y) -
                        a x * (∑ i in insert a s, (g i • (i : G → L))) y :=
                    by rw [Finset.sum_apply, Finset.sum_apply, Finset.mul_sum]; rfl
                  _ = 0 - a x * 0 := by rw [hg]; rfl
                  _ = 0 := by rw [mul_zero, sub_zero])
              i his
      have h2 : ∀ i : G →* L, i ∈ s → ∃ y, i y ≠ a y := fun i his =>
        Classical.by_contradiction fun h =>
          have hia : i = a := MonoidHom.ext fun y => Classical.by_contradiction fun hy => h ⟨y, hy⟩
          has <| hia ▸ his
      have h3 : ∀ i ∈ s, g i = 0 := fun i his =>
        let ⟨y, hy⟩ := h2 i his
        have h : g i • i y = g i • a y := congr_fun (h1 i his) y
        Or.resolve_right (mul_eq_zero.1 <| by rw [mul_sub, sub_eq_zero]; exact h)
          (sub_ne_zero_of_ne hy)
            -- And so, using the fact that the linear combination over `s` and over `insert a s` both
                    -- vanish, we deduce that `g a = 0`.
      have h4 : g a = 0 :=
        calc
          g a = g a * 1 := (mul_one _).symm
          _ = (g a • (a : G → L)) 1 := by rw [← a.map_one]; rfl
          _ = (∑ i in insert a s, (g i • (i : G → L))) 1 :=
            by
            rw [Finset.sum_eq_single a]
            · intro i his hia
              rw [Finset.mem_insert] at his 
              rw [h3 i (his.resolve_left hia), zero_smul]
            · intro haas
              exfalso
              apply haas
              exact Finset.mem_insert_self a s
          _ = 0 := by rw [hg];
            rfl
              -- Now we're done; the last two facts together imply that `g` vanishes on every element
                      -- of `insert a s`.
      (Finset.forall_mem_insert _ _ _).2 ⟨h4, h3⟩
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x✝ y✝ : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
i : G →* L
his : i ∈ s
x y : G
⊢ ∑ i in s, g i * ↑i x * ↑i y - ∑ i in s, g i * ↑a x * ↑i y =
    g a * ↑a x * ↑a y + ∑ i in s, g i * ↑i x * ↑i y - (g a * ↑a x * ↑a y + ∑ i in s, g i * ↑a x * ↑i y)
[PROOFSTEP]
rw [add_sub_add_left_eq_sub]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x✝ y✝ : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
i : G →* L
his : i ∈ s
x y : G
⊢ g a * ↑a x * ↑a y + ∑ i in s, g i * ↑i x * ↑i y - (g a * ↑a x * ↑a y + ∑ i in s, g i * ↑a x * ↑i y) =
    ∑ i in insert a s, g i * ↑i x * ↑i y - ∑ i in insert a s, g i * ↑a x * ↑i y
[PROOFSTEP]
rw [Finset.sum_insert has, Finset.sum_insert has]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x✝¹ y✝ : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
i✝ : G →* L
his : i✝ ∈ s
x y : G
i : G →* L
x✝ : i ∈ insert a s
⊢ g i * ↑i x * ↑i y = g i * ↑i (x * y)
[PROOFSTEP]
rw [i.map_mul, mul_assoc]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x✝² y✝ : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
i : G →* L
his : i ∈ s
x y : G
x✝¹ : G →* L
x✝ : x✝¹ ∈ insert a s
⊢ g x✝¹ * ↑a x * ↑x✝¹ y = ↑a x * (g x✝¹ * ↑x✝¹ y)
[PROOFSTEP]
rw [mul_assoc, mul_left_comm]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x✝ y✝ : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
i : G →* L
his : i ∈ s
x y : G
⊢ ∑ i in insert a s, g i * ↑i (x * y) - ∑ i in insert a s, ↑a x * (g i * ↑i y) =
    Finset.sum (insert a s) (fun i => g i • ↑i) (x * y) - ↑a x * Finset.sum (insert a s) (fun i => g i • ↑i) y
[PROOFSTEP]
rw [Finset.sum_apply, Finset.sum_apply, Finset.mul_sum]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x✝ y✝ : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
i : G →* L
his : i ∈ s
x y : G
⊢ ∑ i in insert a s, g i * ↑i (x * y) - ∑ i in insert a s, ↑a x * (g i * ↑i y) =
    ∑ c in insert a s, (g c • ↑c) (x * y) - ∑ x_1 in insert a s, ↑a x * (g x_1 • ↑x_1) y
[PROOFSTEP]
rfl
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x✝ y✝ : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
i : G →* L
his : i ∈ s
x y : G
⊢ Finset.sum (insert a s) (fun i => g i • ↑i) (x * y) - ↑a x * Finset.sum (insert a s) (fun i => g i • ↑i) y =
    0 - ↑a x * 0
[PROOFSTEP]
rw [hg]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x✝ y✝ : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
i : G →* L
his : i ∈ s
x y : G
⊢ OfNat.ofNat 0 (x * y) - ↑a x * OfNat.ofNat 0 y = 0 - ↑a x * 0
[PROOFSTEP]
rfl
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x✝ y✝ : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
i : G →* L
his : i ∈ s
x y : G
⊢ 0 - ↑a x * 0 = 0
[PROOFSTEP]
rw [mul_zero, sub_zero]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x y✝ : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
i : G →* L
his : i ∈ s
y : G
hy : ↑i y ≠ ↑a y
h : g i • ↑i y = g i • ↑a y
⊢ g i * (↑i y - ↑a y) = 0
[PROOFSTEP]
rw [mul_sub, sub_eq_zero]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x y✝ : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
i : G →* L
his : i ∈ s
y : G
hy : ↑i y ≠ ↑a y
h : g i • ↑i y = g i • ↑a y
⊢ g i * ↑i y = g i * ↑a y
[PROOFSTEP]
exact h
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x y : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
⊢ g a * 1 = (g a • ↑a) 1
[PROOFSTEP]
rw [← a.map_one]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x y : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
⊢ g a * ↑a 1 = (g a • ↑a) 1
[PROOFSTEP]
rfl
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x y : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
⊢ (g a • ↑a) 1 = Finset.sum (insert a s) (fun i => g i • ↑i) 1
[PROOFSTEP]
rw [Finset.sum_eq_single a]
[GOAL]
case h₀
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x y : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
⊢ ∀ (b : G →* L), b ∈ insert a s → b ≠ a → g b • ↑b = 0
[PROOFSTEP]
intro i his hia
[GOAL]
case h₀
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x y : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
i : G →* L
his : i ∈ insert a s
hia : i ≠ a
⊢ g i • ↑i = 0
[PROOFSTEP]
rw [Finset.mem_insert] at his 
[GOAL]
case h₀
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x y : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
i : G →* L
his : i = a ∨ i ∈ s
hia : i ≠ a
⊢ g i • ↑i = 0
[PROOFSTEP]
rw [h3 i (his.resolve_left hia), zero_smul]
[GOAL]
case h₁
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x y : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
⊢ ¬a ∈ insert a s → g a • ↑a = 0
[PROOFSTEP]
intro haas
[GOAL]
case h₁
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x y : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
haas : ¬a ∈ insert a s
⊢ g a • ↑a = 0
[PROOFSTEP]
exfalso
[GOAL]
case h₁.h
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x y : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
haas : ¬a ∈ insert a s
⊢ False
[PROOFSTEP]
apply haas
[GOAL]
case h₁.h
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x y : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
haas : ¬a ∈ insert a s
⊢ a ∈ insert a s
[PROOFSTEP]
exact Finset.mem_insert_self a s
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x y : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
⊢ Finset.sum (insert a s) (fun i => g i • ↑i) 1 = 0
[PROOFSTEP]
rw [hg]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M''
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M''
a✝ b : R
x y : M
G : Type u_8
inst✝² : Monoid G
L : Type u_9
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
⊢ OfNat.ofNat 0 1 = 0
[PROOFSTEP]
rfl
  -- Now we're done; the last two facts together imply that `g` vanishes on every element
          -- of `insert a s`.
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
s t u : Set M
hl : LinearIndependent R Subtype.val
hsu : s ⊆ u
htu : t ⊆ u
hst : span R s ≤ span R t
⊢ s ⊆ t
[PROOFSTEP]
have :=
  eq_of_linearIndependent_of_span_subtype (hl.mono (Set.union_subset hsu htu)) (Set.subset_union_right _ _)
    (Set.union_subset (Set.Subset.trans subset_span hst) subset_span)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
s t u : Set M
hl : LinearIndependent R Subtype.val
hsu : s ⊆ u
htu : t ⊆ u
hst : span R s ≤ span R t
this : s ∪ t = t
⊢ s ⊆ t
[PROOFSTEP]
rw [← this]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁷ : Ring R
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M'
inst✝⁴ : AddCommGroup M''
inst✝³ : Module R M
inst✝² : Module R M'
inst✝¹ : Module R M''
a b : R
x y : M
inst✝ : Nontrivial R
s t u : Set M
hl : LinearIndependent R Subtype.val
hsu : s ⊆ u
htu : t ⊆ u
hst : span R s ≤ span R t
this : s ∪ t = t
⊢ s ⊆ s ∪ t
[PROOFSTEP]
apply Set.subset_union_left
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁷ : Ring R
inst✝⁶ : Nontrivial R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M
inst✝² : NoZeroSMulDivisors R M
inst✝¹ : Module R M'
v✝ : ι → M
s t : Set M
x y z : M
v : ι → M
inst✝ : Unique ι
⊢ LinearIndependent R v ↔ v default ≠ 0
[PROOFSTEP]
simp only [linearIndependent_iff, Finsupp.total_unique, smul_eq_zero]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁷ : Ring R
inst✝⁶ : Nontrivial R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M
inst✝² : NoZeroSMulDivisors R M
inst✝¹ : Module R M'
v✝ : ι → M
s t : Set M
x y z : M
v : ι → M
inst✝ : Unique ι
⊢ (∀ (l : ι →₀ R), ↑l default = 0 ∨ v default = 0 → l = 0) ↔ v default ≠ 0
[PROOFSTEP]
refine' ⟨fun h hv => _, fun hv l hl => Finsupp.unique_ext <| hl.resolve_right hv⟩
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁷ : Ring R
inst✝⁶ : Nontrivial R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M
inst✝² : NoZeroSMulDivisors R M
inst✝¹ : Module R M'
v✝ : ι → M
s t : Set M
x y z : M
v : ι → M
inst✝ : Unique ι
h : ∀ (l : ι →₀ R), ↑l default = 0 ∨ v default = 0 → l = 0
hv : v default = 0
⊢ False
[PROOFSTEP]
have := h (Finsupp.single default 1) (Or.inr hv)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁷ : Ring R
inst✝⁶ : Nontrivial R
inst✝⁵ : AddCommGroup M
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M
inst✝² : NoZeroSMulDivisors R M
inst✝¹ : Module R M'
v✝ : ι → M
s t : Set M
x y z : M
v : ι → M
inst✝ : Unique ι
h : ∀ (l : ι →₀ R), ↑l default = 0 ∨ v default = 0 → l = 0
hv : v default = 0
this : Finsupp.single default 1 = 0
⊢ False
[PROOFSTEP]
exact one_ne_zero (Finsupp.single_eq_zero.1 this)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
⊢ x ∈ span K (insert y s) → ¬x ∈ span K s → y ∈ span K (insert x s)
[PROOFSTEP]
simp [mem_span_insert]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
⊢ ∀ (x_1 : K) (x_2 : V), x_2 ∈ span K s → x = x_1 • y + x_2 → ¬x ∈ span K s → ∃ a z, z ∈ span K s ∧ y = a • x + z
[PROOFSTEP]
rintro a z hz rfl h
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
y z✝ : V
a : K
z : V
hz : z ∈ span K s
h : ¬a • y + z ∈ span K s
⊢ ∃ a_1 z_1, z_1 ∈ span K s ∧ y = a_1 • (a • y + z) + z_1
[PROOFSTEP]
refine' ⟨a⁻¹, -a⁻¹ • z, smul_mem _ _ hz, _⟩
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
y z✝ : V
a : K
z : V
hz : z ∈ span K s
h : ¬a • y + z ∈ span K s
⊢ y = a⁻¹ • (a • y + z) + -a⁻¹ • z
[PROOFSTEP]
have a0 : a ≠ 0 := by
  rintro rfl
  simp_all
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
y z✝ : V
a : K
z : V
hz : z ∈ span K s
h : ¬a • y + z ∈ span K s
⊢ a ≠ 0
[PROOFSTEP]
rintro rfl
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
y z✝ z : V
hz : z ∈ span K s
h : ¬0 • y + z ∈ span K s
⊢ False
[PROOFSTEP]
simp_all
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
y z✝ : V
a : K
z : V
hz : z ∈ span K s
h : ¬a • y + z ∈ span K s
a0 : a ≠ 0
⊢ y = a⁻¹ • (a • y + z) + -a⁻¹ • z
[PROOFSTEP]
simp [a0, smul_add, smul_smul]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
⊢ LinearIndependent K v ↔ ∀ (i : ι), ¬v i ∈ span K (v '' (univ \ {i}))
[PROOFSTEP]
apply linearIndependent_iff_not_smul_mem_span.trans
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
⊢ (∀ (i : ι) (a : K), a • v i ∈ span K (v '' (univ \ {i})) → a = 0) ↔ ∀ (i : ι), ¬v i ∈ span K (v '' (univ \ {i}))
[PROOFSTEP]
constructor
[GOAL]
case mp
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
⊢ (∀ (i : ι) (a : K), a • v i ∈ span K (v '' (univ \ {i})) → a = 0) → ∀ (i : ι), ¬v i ∈ span K (v '' (univ \ {i}))
[PROOFSTEP]
intro h i h_in_span
[GOAL]
case mp
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
h : ∀ (i : ι) (a : K), a • v i ∈ span K (v '' (univ \ {i})) → a = 0
i : ι
h_in_span : v i ∈ span K (v '' (univ \ {i}))
⊢ False
[PROOFSTEP]
apply one_ne_zero (h i 1 (by simp [h_in_span]))
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
h : ∀ (i : ι) (a : K), a • v i ∈ span K (v '' (univ \ {i})) → a = 0
i : ι
h_in_span : v i ∈ span K (v '' (univ \ {i}))
⊢ 1 • v i ∈ span K (v '' (univ \ {i}))
[PROOFSTEP]
simp [h_in_span]
[GOAL]
case mpr
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
⊢ (∀ (i : ι), ¬v i ∈ span K (v '' (univ \ {i}))) → ∀ (i : ι) (a : K), a • v i ∈ span K (v '' (univ \ {i})) → a = 0
[PROOFSTEP]
intro h i a ha
[GOAL]
case mpr
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
h : ∀ (i : ι), ¬v i ∈ span K (v '' (univ \ {i}))
i : ι
a : K
ha : a • v i ∈ span K (v '' (univ \ {i}))
⊢ a = 0
[PROOFSTEP]
by_contra ha'
[GOAL]
case mpr
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
h : ∀ (i : ι), ¬v i ∈ span K (v '' (univ \ {i}))
i : ι
a : K
ha : a • v i ∈ span K (v '' (univ \ {i}))
ha' : ¬a = 0
⊢ False
[PROOFSTEP]
exact False.elim (h _ ((smul_mem_iff _ ha').1 ha))
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
hs : LinearIndependent K fun b => ↑b
hx : ¬x ∈ span K s
⊢ LinearIndependent K fun b => ↑b
[PROOFSTEP]
rw [← union_singleton]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
hs : LinearIndependent K fun b => ↑b
hx : ¬x ∈ span K s
⊢ LinearIndependent K fun b => ↑b
[PROOFSTEP]
have x0 : x ≠ 0 := mt (by rintro rfl; apply zero_mem (span K s)) hx
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
hs : LinearIndependent K fun b => ↑b
hx : ¬x ∈ span K s
⊢ x = 0 → x ∈ span K s
[PROOFSTEP]
rintro rfl
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
y z : V
hs : LinearIndependent K fun b => ↑b
hx : ¬0 ∈ span K s
⊢ 0 ∈ span K s
[PROOFSTEP]
apply zero_mem (span K s)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
hs : LinearIndependent K fun b => ↑b
hx : ¬x ∈ span K s
x0 : x ≠ 0
⊢ LinearIndependent K fun b => ↑b
[PROOFSTEP]
apply hs.union (linearIndependent_singleton x0)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
hs : LinearIndependent K fun b => ↑b
hx : ¬x ∈ span K s
x0 : x ≠ 0
⊢ Disjoint (span K s) (span K {x})
[PROOFSTEP]
rwa [disjoint_span_singleton' x0]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
⊢ (LinearIndependent K fun o => Option.casesOn' o x v) ↔ LinearIndependent K v ∧ ¬x ∈ span K (range v)
[PROOFSTEP]
rw [← linearIndependent_equiv (Equiv.optionEquivSumPUnit.{_, u'} ι).symm, linearIndependent_sum, @range_unique _ PUnit,
  @linearIndependent_unique_iff PUnit, disjoint_span_singleton]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
⊢ LinearIndependent K (((fun o => Option.casesOn' o x v) ∘ ↑(Equiv.optionEquivSumPUnit ι).symm) ∘ Sum.inl) ∧
      (((fun o => Option.casesOn' o x v) ∘ ↑(Equiv.optionEquivSumPUnit ι).symm) ∘ Sum.inr) default ≠ 0 ∧
        ((((fun o => Option.casesOn' o x v) ∘ ↑(Equiv.optionEquivSumPUnit ι).symm) ∘ Sum.inr) default ∈
            span K (range (((fun o => Option.casesOn' o x v) ∘ ↑(Equiv.optionEquivSumPUnit ι).symm) ∘ Sum.inl)) →
          (((fun o => Option.casesOn' o x v) ∘ ↑(Equiv.optionEquivSumPUnit ι).symm) ∘ Sum.inr) default = 0) ↔
    LinearIndependent K v ∧ ¬x ∈ span K (range v)
[PROOFSTEP]
dsimp [(· ∘ ·)]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
⊢ (LinearIndependent K fun x => v x) ∧ ¬x = 0 ∧ (x ∈ span K (range fun x => v x) → x = 0) ↔
    LinearIndependent K v ∧ ¬x ∈ span K (range v)
[PROOFSTEP]
refine' ⟨fun h => ⟨h.1, fun hx => h.2.1 <| h.2.2 hx⟩, fun h => ⟨h.1, _, fun hx => (h.2 hx).elim⟩⟩
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
h : LinearIndependent K v ∧ ¬x ∈ span K (range v)
⊢ ¬x = 0
[PROOFSTEP]
rintro rfl
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
y z : V
h : LinearIndependent K v ∧ ¬0 ∈ span K (range v)
⊢ False
[PROOFSTEP]
exact h.2 (zero_mem _)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
v : Option ι → V
⊢ LinearIndependent K v ↔ LinearIndependent K (v ∘ some) ∧ ¬v none ∈ span K (range (v ∘ some))
[PROOFSTEP]
simp only [← linearIndependent_option', Option.casesOn'_none_coe]
[GOAL]
ι✝ : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι✝ → V
s✝ t : Set V
x y z : V
ι : Type u_8
s : Set ι
a : ι
f : ι → V
has : ¬a ∈ s
⊢ (LinearIndependent K fun x => f ↑x) ↔ (LinearIndependent K fun x => f ↑x) ∧ ¬f a ∈ span K (f '' s)
[PROOFSTEP]
classical
rw [← linearIndependent_equiv ((Equiv.optionEquivSumPUnit _).trans (Equiv.Set.insert has).symm),
  linearIndependent_option]
  -- Porting note: `simp [(· ∘ ·), range_comp f]` → `simp [(· ∘ ·)]; erw [range_comp f ..]; simp`
    -- https://github.com/leanprover-community/mathlib4/issues/5164
simp only [(· ∘ ·)]
erw [range_comp f ((↑) : s → ι)]
simp
[GOAL]
ι✝ : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι✝ → V
s✝ t : Set V
x y z : V
ι : Type u_8
s : Set ι
a : ι
f : ι → V
has : ¬a ∈ s
⊢ (LinearIndependent K fun x => f ↑x) ↔ (LinearIndependent K fun x => f ↑x) ∧ ¬f a ∈ span K (f '' s)
[PROOFSTEP]
rw [← linearIndependent_equiv ((Equiv.optionEquivSumPUnit _).trans (Equiv.Set.insert has).symm),
  linearIndependent_option]
  -- Porting note: `simp [(· ∘ ·), range_comp f]` → `simp [(· ∘ ·)]; erw [range_comp f ..]; simp`
    -- https://github.com/leanprover-community/mathlib4/issues/5164
[GOAL]
ι✝ : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι✝ → V
s✝ t : Set V
x y z : V
ι : Type u_8
s : Set ι
a : ι
f : ι → V
has : ¬a ∈ s
⊢ LinearIndependent K (((fun x => f ↑x) ∘ ↑((Equiv.optionEquivSumPUnit ↑s).trans (Equiv.Set.insert has).symm)) ∘ some) ∧
      ¬((fun x => f ↑x) ∘ ↑((Equiv.optionEquivSumPUnit ↑s).trans (Equiv.Set.insert has).symm)) none ∈
          span K
            (range (((fun x => f ↑x) ∘ ↑((Equiv.optionEquivSumPUnit ↑s).trans (Equiv.Set.insert has).symm)) ∘ some)) ↔
    (LinearIndependent K fun x => f ↑x) ∧ ¬f a ∈ span K (f '' s)
[PROOFSTEP]
simp only [(· ∘ ·)]
[GOAL]
ι✝ : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι✝ → V
s✝ t : Set V
x y z : V
ι : Type u_8
s : Set ι
a : ι
f : ι → V
has : ¬a ∈ s
⊢ (LinearIndependent K fun x => f ↑(↑((Equiv.optionEquivSumPUnit ↑s).trans (Equiv.Set.insert has).symm) (some x))) ∧
      ¬f ↑(↑((Equiv.optionEquivSumPUnit ↑s).trans (Equiv.Set.insert has).symm) none) ∈
          span K (range fun x => f ↑(↑((Equiv.optionEquivSumPUnit ↑s).trans (Equiv.Set.insert has).symm) (some x))) ↔
    (LinearIndependent K fun x => f ↑x) ∧ ¬f a ∈ span K (f '' s)
[PROOFSTEP]
erw [range_comp f ((↑) : s → ι)]
[GOAL]
ι✝ : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι✝ → V
s✝ t : Set V
x y z : V
ι : Type u_8
s : Set ι
a : ι
f : ι → V
has : ¬a ∈ s
⊢ (LinearIndependent K fun x => f ↑(↑((Equiv.optionEquivSumPUnit ↑s).trans (Equiv.Set.insert has).symm) (some x))) ∧
      ¬f ↑(↑((Equiv.optionEquivSumPUnit ↑s).trans (Equiv.Set.insert has).symm) none) ∈ span K (f '' range Subtype.val) ↔
    (LinearIndependent K fun x => f ↑x) ∧ ¬f a ∈ span K (f '' s)
[PROOFSTEP]
simp
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
hxs : ¬x ∈ s
⊢ (LinearIndependent K fun x => id ↑x) ∧ ¬id x ∈ span K (id '' s) ↔ (LinearIndependent K fun b => ↑b) ∧ ¬x ∈ span K s
[PROOFSTEP]
simp
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
n : ℕ
v : Fin n → V
⊢ LinearIndependent K (Fin.cons x v) ↔ LinearIndependent K v ∧ ¬x ∈ span K (range v)
[PROOFSTEP]
rw [← linearIndependent_equiv (finSuccEquiv n).symm, linearIndependent_option]
  -- Porting note: `convert Iff.rfl; ...` → `exact Iff.rfl`
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
n : ℕ
v : Fin n → V
⊢ LinearIndependent K ((Fin.cons x v ∘ ↑(finSuccEquiv n).symm) ∘ some) ∧
      ¬(Fin.cons x v ∘ ↑(finSuccEquiv n).symm) none ∈ span K (range ((Fin.cons x v ∘ ↑(finSuccEquiv n).symm) ∘ some)) ↔
    LinearIndependent K v ∧ ¬x ∈ span K (range v)
[PROOFSTEP]
exact Iff.rfl
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
n : ℕ
v : Fin n → V
⊢ LinearIndependent K (Fin.snoc v x) ↔ LinearIndependent K v ∧ ¬x ∈ span K (range v)
[PROOFSTEP]
erw [Fin.snoc_eq_cons_rotate, linearIndependent_equiv, linearIndependent_fin_cons]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
n : ℕ
v : Fin (n + 1) → V
⊢ LinearIndependent K v ↔ LinearIndependent K (Fin.tail v) ∧ ¬v 0 ∈ span K (range (Fin.tail v))
[PROOFSTEP]
rw [← linearIndependent_fin_cons, Fin.cons_self_tail]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v✝ : ι → V
s t : Set V
x y z : V
n : ℕ
v : Fin (n + 1) → V
⊢ LinearIndependent K v ↔ LinearIndependent K (Fin.init v) ∧ ¬v (Fin.last n) ∈ span K (range (Fin.init v))
[PROOFSTEP]
rw [← linearIndependent_fin_snoc, Fin.snoc_init_self]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
f : Fin 2 → V
⊢ LinearIndependent K f ↔ f 1 ≠ 0 ∧ ∀ (a : K), a • f 1 ≠ f 0
[PROOFSTEP]
rw [linearIndependent_fin_succ, linearIndependent_unique_iff, range_unique, mem_span_singleton, not_exists,
  show Fin.tail f default = f 1 by rw [← Fin.succ_zero_eq_one]; rfl]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
f : Fin 2 → V
⊢ Fin.tail f default = f 1
[PROOFSTEP]
rw [← Fin.succ_zero_eq_one]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
f : Fin 2 → V
⊢ Fin.tail f default = f (Fin.succ 0)
[PROOFSTEP]
rfl
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
hs : LinearIndependent K Subtype.val
hst : s ⊆ t
⊢ ∃ b x, s ⊆ b ∧ t ⊆ ↑(span K b) ∧ LinearIndependent K Subtype.val
[PROOFSTEP]
have := by
  refine zorn_subset_nonempty {b | b ⊆ t ∧ LinearIndependent K ((↑) : b → V)} ?_ _ ⟨hst, hs⟩
  · refine' fun c hc cc _c0 => ⟨⋃₀ c, ⟨_, _⟩, fun x => _⟩
    · exact sUnion_subset fun x xc => (hc xc).1
    · exact linearIndependent_sUnion_of_directed cc.directedOn fun x xc => (hc xc).2
    · exact subset_sUnion_of_mem
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
hs : LinearIndependent K Subtype.val
hst : s ⊆ t
⊢ ?m.1310755
[PROOFSTEP]
refine zorn_subset_nonempty {b | b ⊆ t ∧ LinearIndependent K ((↑) : b → V)} ?_ _ ⟨hst, hs⟩
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
hs : LinearIndependent K Subtype.val
hst : s ⊆ t
⊢ ∀ (c : Set (Set V)),
    c ⊆ {b | b ⊆ t ∧ LinearIndependent K Subtype.val} →
      IsChain (fun x x_1 => x ⊆ x_1) c →
        Set.Nonempty c → ∃ ub, ub ∈ {b | b ⊆ t ∧ LinearIndependent K Subtype.val} ∧ ∀ (s : Set V), s ∈ c → s ⊆ ub
[PROOFSTEP]
refine' fun c hc cc _c0 => ⟨⋃₀ c, ⟨_, _⟩, fun x => _⟩
[GOAL]
case refine'_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
hs : LinearIndependent K Subtype.val
hst : s ⊆ t
c : Set (Set V)
hc : c ⊆ {b | b ⊆ t ∧ LinearIndependent K Subtype.val}
cc : IsChain (fun x x_1 => x ⊆ x_1) c
_c0 : Set.Nonempty c
⊢ ⋃₀ c ⊆ t
[PROOFSTEP]
exact sUnion_subset fun x xc => (hc xc).1
[GOAL]
case refine'_2
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
hs : LinearIndependent K Subtype.val
hst : s ⊆ t
c : Set (Set V)
hc : c ⊆ {b | b ⊆ t ∧ LinearIndependent K Subtype.val}
cc : IsChain (fun x x_1 => x ⊆ x_1) c
_c0 : Set.Nonempty c
⊢ LinearIndependent K Subtype.val
[PROOFSTEP]
exact linearIndependent_sUnion_of_directed cc.directedOn fun x xc => (hc xc).2
[GOAL]
case refine'_3
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x✝ y z : V
hs : LinearIndependent K Subtype.val
hst : s ⊆ t
c : Set (Set V)
hc : c ⊆ {b | b ⊆ t ∧ LinearIndependent K Subtype.val}
cc : IsChain (fun x x_1 => x ⊆ x_1) c
_c0 : Set.Nonempty c
x : Set V
⊢ x ∈ c → x ⊆ ⋃₀ c
[PROOFSTEP]
exact subset_sUnion_of_mem
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
hs : LinearIndependent K Subtype.val
hst : s ⊆ t
this :
  ∃ m,
    m ∈ {b | b ⊆ t ∧ LinearIndependent K Subtype.val} ∧
      s ⊆ m ∧ ∀ (a : Set V), a ∈ {b | b ⊆ t ∧ LinearIndependent K Subtype.val} → m ⊆ a → a = m
⊢ ∃ b x, s ⊆ b ∧ t ⊆ ↑(span K b) ∧ LinearIndependent K Subtype.val
[PROOFSTEP]
rcases this with ⟨b, ⟨bt, bi⟩, sb, h⟩
[GOAL]
case intro.intro.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
hs : LinearIndependent K Subtype.val
hst : s ⊆ t
b : Set V
bt : b ⊆ t
bi : LinearIndependent K Subtype.val
sb : s ⊆ b
h : ∀ (a : Set V), a ∈ {b | b ⊆ t ∧ LinearIndependent K Subtype.val} → b ⊆ a → a = b
⊢ ∃ b x, s ⊆ b ∧ t ⊆ ↑(span K b) ∧ LinearIndependent K Subtype.val
[PROOFSTEP]
refine' ⟨b, bt, sb, fun x xt => _, bi⟩
[GOAL]
case intro.intro.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x✝ y z : V
hs : LinearIndependent K Subtype.val
hst : s ⊆ t
b : Set V
bt : b ⊆ t
bi : LinearIndependent K Subtype.val
sb : s ⊆ b
h : ∀ (a : Set V), a ∈ {b | b ⊆ t ∧ LinearIndependent K Subtype.val} → b ⊆ a → a = b
x : V
xt : x ∈ t
⊢ x ∈ ↑(span K b)
[PROOFSTEP]
by_contra hn
[GOAL]
case intro.intro.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x✝ y z : V
hs : LinearIndependent K Subtype.val
hst : s ⊆ t
b : Set V
bt : b ⊆ t
bi : LinearIndependent K Subtype.val
sb : s ⊆ b
h : ∀ (a : Set V), a ∈ {b | b ⊆ t ∧ LinearIndependent K Subtype.val} → b ⊆ a → a = b
x : V
xt : x ∈ t
hn : ¬x ∈ ↑(span K b)
⊢ False
[PROOFSTEP]
apply hn
[GOAL]
case intro.intro.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x✝ y z : V
hs : LinearIndependent K Subtype.val
hst : s ⊆ t
b : Set V
bt : b ⊆ t
bi : LinearIndependent K Subtype.val
sb : s ⊆ b
h : ∀ (a : Set V), a ∈ {b | b ⊆ t ∧ LinearIndependent K Subtype.val} → b ⊆ a → a = b
x : V
xt : x ∈ t
hn : ¬x ∈ ↑(span K b)
⊢ x ∈ ↑(span K b)
[PROOFSTEP]
rw [← h _ ⟨insert_subset_iff.2 ⟨xt, bt⟩, bi.insert hn⟩ (subset_insert _ _)]
[GOAL]
case intro.intro.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x✝ y z : V
hs : LinearIndependent K Subtype.val
hst : s ⊆ t
b : Set V
bt : b ⊆ t
bi : LinearIndependent K Subtype.val
sb : s ⊆ b
h : ∀ (a : Set V), a ∈ {b | b ⊆ t ∧ LinearIndependent K Subtype.val} → b ⊆ a → a = b
x : V
xt : x ∈ t
hn : ¬x ∈ ↑(span K b)
⊢ x ∈ ↑(span K (insert x b))
[PROOFSTEP]
exact subset_span (mem_insert _ _)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
⊢ ∃ b x, span K b = span K t ∧ LinearIndependent K Subtype.val
[PROOFSTEP]
obtain ⟨b, hb₁, -, hb₂, hb₃⟩ := exists_linearIndependent_extension (linearIndependent_empty K V) (Set.empty_subset t)
[GOAL]
case intro.intro.intro.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
b : Set V
hb₁ : b ⊆ t
hb₂ : t ⊆ ↑(span K b)
hb₃ : LinearIndependent K Subtype.val
⊢ ∃ b x, span K b = span K t ∧ LinearIndependent K Subtype.val
[PROOFSTEP]
exact ⟨b, hb₁, (span_eq_of_le _ hb₂ (Submodule.span_mono hb₁)).symm, hb₃⟩
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝ : Set V
x y z : V
t : Finset V
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K ↑t)
⊢ ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card t
[PROOFSTEP]
classical
have :
  ∀ t : Finset V,
    ∀ s' : Finset V,
      ↑s' ⊆ s →
        s ∩ ↑t = ∅ →
          s ⊆ (span K ↑(s' ∪ t) : Submodule K V) → ∃ t' : Finset V, ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ t'.card = (s' ∪ t).card :=
  fun t =>
  Finset.induction_on t
    (fun s' hs' _ hss' =>
      have : s = ↑s' := eq_of_linearIndependent_of_span_subtype hs hs' <| by simpa using hss'
      ⟨s', by simp [this]⟩)
    fun b₁ t hb₁t ih s' hs' hst hss' =>
    have hb₁s : b₁ ∉ s := fun h =>
      by
      have : b₁ ∈ s ∩ ↑(insert b₁ t) := ⟨h, Finset.mem_insert_self _ _⟩
      rwa [hst] at this 
    have hb₁s' : b₁ ∉ s' := fun h => hb₁s <| hs' h
    have hst : s ∩ ↑t = ∅ :=
      eq_empty_of_subset_empty <|
        -- Porting note: `-inter_subset_left, -subset_inter_iff` required.Subset.trans
          (by simp [inter_subset_inter, Subset.refl, -inter_subset_left, -subset_inter_iff]) (le_of_eq hst)
    Classical.by_cases (p := s ⊆ (span K ↑(s' ∪ t) : Submodule K V))
      (fun this =>
        let ⟨u, hust, hsu, Eq⟩ := ih _ hs' hst this
        have hb₁u : b₁ ∉ u := fun h => (hust h).elim hb₁s hb₁t
        ⟨insert b₁ u, by simp [insert_subset_insert hust], Subset.trans hsu (by simp), by simp [Eq, hb₁t, hb₁s', hb₁u]⟩)
      fun this =>
      let ⟨b₂, hb₂s, hb₂t⟩ := not_subset.mp this
      have hb₂t' : b₂ ∉ s' ∪ t := fun h => hb₂t <| subset_span h
      have : s ⊆ (span K ↑(insert b₂ s' ∪ t) : Submodule K V) := fun b₃ hb₃ =>
        by
        have : ↑(s' ∪ insert b₁ t) ⊆ insert b₁ (insert b₂ ↑(s' ∪ t) : Set V) := by
          -- Porting note: Too many theorems to be excluded, so
                      --               `simp only` is shorter.simp only [insert_eq, union_subset_union, Subset.refl,
            subset_union_right, Finset.union_insert, Finset.coe_insert]
        have hb₃ : b₃ ∈ span K (insert b₁ (insert b₂ ↑(s' ∪ t) : Set V)) := span_mono this (hss' hb₃)
        have : s ⊆ (span K (insert b₁ ↑(s' ∪ t)) : Submodule K V) := by
          simpa [insert_eq, -singleton_union, -union_singleton] using hss'
        have hb₁ : b₁ ∈ span K (insert b₂ ↑(s' ∪ t)) := by exact mem_span_insert_exchange (this hb₂s) hb₂t
        rw [span_insert_eq_span hb₁] at hb₃ ; simpa using hb₃
      let ⟨u, hust, hsu, eq⟩ := ih _ (by simp [insert_subset_iff, hb₂s, hs']) hst this
      ⟨u, Subset.trans hust <| union_subset_union (Subset.refl _) (by simp [subset_insert]), hsu, by
        simp [eq, Finset.card_insert_of_not_mem hb₂t', hb₁t, hb₁s']⟩
have eq : ((t.filter fun x => x ∈ s) ∪ t.filter fun x => x ∉ s) = t :=
  by
  ext1 x
  by_cases x ∈ s <;> simp [*]
apply
  Exists.elim
    (this (t.filter fun x => x ∉ s) (t.filter fun x => x ∈ s) (by simp [Set.subset_def])
      (by simp (config := { contextual := true }) [Set.ext_iff]) (by rwa [eq]))
intro u h
exact
  ⟨u, Subset.trans h.1 (by simp (config := { contextual := true }) [subset_def, and_imp, or_imp]), h.2.1, by
    simp only [h.2.2, eq]⟩
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝ : Set V
x y z : V
t : Finset V
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K ↑t)
⊢ ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card t
[PROOFSTEP]
have :
  ∀ t : Finset V,
    ∀ s' : Finset V,
      ↑s' ⊆ s →
        s ∩ ↑t = ∅ →
          s ⊆ (span K ↑(s' ∪ t) : Submodule K V) → ∃ t' : Finset V, ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ t'.card = (s' ∪ t).card :=
  fun t =>
  Finset.induction_on t
    (fun s' hs' _ hss' =>
      have : s = ↑s' := eq_of_linearIndependent_of_span_subtype hs hs' <| by simpa using hss'
      ⟨s', by simp [this]⟩)
    fun b₁ t hb₁t ih s' hs' hst hss' =>
    have hb₁s : b₁ ∉ s := fun h =>
      by
      have : b₁ ∈ s ∩ ↑(insert b₁ t) := ⟨h, Finset.mem_insert_self _ _⟩
      rwa [hst] at this 
    have hb₁s' : b₁ ∉ s' := fun h => hb₁s <| hs' h
    have hst : s ∩ ↑t = ∅ :=
      eq_empty_of_subset_empty <|
        -- Porting note: `-inter_subset_left, -subset_inter_iff` required.Subset.trans
          (by simp [inter_subset_inter, Subset.refl, -inter_subset_left, -subset_inter_iff]) (le_of_eq hst)
    Classical.by_cases (p := s ⊆ (span K ↑(s' ∪ t) : Submodule K V))
      (fun this =>
        let ⟨u, hust, hsu, Eq⟩ := ih _ hs' hst this
        have hb₁u : b₁ ∉ u := fun h => (hust h).elim hb₁s hb₁t
        ⟨insert b₁ u, by simp [insert_subset_insert hust], Subset.trans hsu (by simp), by simp [Eq, hb₁t, hb₁s', hb₁u]⟩)
      fun this =>
      let ⟨b₂, hb₂s, hb₂t⟩ := not_subset.mp this
      have hb₂t' : b₂ ∉ s' ∪ t := fun h => hb₂t <| subset_span h
      have : s ⊆ (span K ↑(insert b₂ s' ∪ t) : Submodule K V) := fun b₃ hb₃ =>
        by
        have : ↑(s' ∪ insert b₁ t) ⊆ insert b₁ (insert b₂ ↑(s' ∪ t) : Set V) := by
          -- Porting note: Too many theorems to be excluded, so
                      --               `simp only` is shorter.simp only [insert_eq, union_subset_union, Subset.refl,
            subset_union_right, Finset.union_insert, Finset.coe_insert]
        have hb₃ : b₃ ∈ span K (insert b₁ (insert b₂ ↑(s' ∪ t) : Set V)) := span_mono this (hss' hb₃)
        have : s ⊆ (span K (insert b₁ ↑(s' ∪ t)) : Submodule K V) := by
          simpa [insert_eq, -singleton_union, -union_singleton] using hss'
        have hb₁ : b₁ ∈ span K (insert b₂ ↑(s' ∪ t)) := by exact mem_span_insert_exchange (this hb₂s) hb₂t
        rw [span_insert_eq_span hb₁] at hb₃ ; simpa using hb₃
      let ⟨u, hust, hsu, eq⟩ := ih _ (by simp [insert_subset_iff, hb₂s, hs']) hst this
      ⟨u, Subset.trans hust <| union_subset_union (Subset.refl _) (by simp [subset_insert]), hsu, by
        simp [eq, Finset.card_insert_of_not_mem hb₂t', hb₁t, hb₁s']⟩
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝¹ : Set V
x y z : V
t✝ : Finset V
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K ↑t✝)
t s' : Finset V
hs' : ↑s' ⊆ s
x✝ : s ∩ ↑∅ = ∅
hss' : s ⊆ ↑(span K ↑(s' ∪ ∅))
⊢ s ⊆ ↑(span K ↑s')
[PROOFSTEP]
simpa using hss'
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝¹ : Set V
x y z : V
t✝ : Finset V
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K ↑t✝)
t s' : Finset V
hs' : ↑s' ⊆ s
x✝ : s ∩ ↑∅ = ∅
hss' : s ⊆ ↑(span K ↑(s' ∪ ∅))
this : s = ↑s'
⊢ ↑s' ⊆ s ∪ ↑∅ ∧ s ⊆ ↑s' ∧ Finset.card s' = Finset.card (s' ∪ ∅)
[PROOFSTEP]
simp [this]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝² : Set V
x y z : V
t✝¹ : Finset V
hs : LinearIndependent K fun x => ↑x
hst✝ : s ⊆ ↑(span K ↑t✝¹)
t✝ : Finset V
b₁ : V
t : Finset V
hb₁t : ¬b₁ ∈ t
ih :
  ∀ (s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
s' : Finset V
hs' : ↑s' ⊆ s
hst : s ∩ ↑(insert b₁ t) = ∅
hss' : s ⊆ ↑(span K ↑(s' ∪ insert b₁ t))
h : b₁ ∈ s
⊢ False
[PROOFSTEP]
have : b₁ ∈ s ∩ ↑(insert b₁ t) := ⟨h, Finset.mem_insert_self _ _⟩
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝² : Set V
x y z : V
t✝¹ : Finset V
hs : LinearIndependent K fun x => ↑x
hst✝ : s ⊆ ↑(span K ↑t✝¹)
t✝ : Finset V
b₁ : V
t : Finset V
hb₁t : ¬b₁ ∈ t
ih :
  ∀ (s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
s' : Finset V
hs' : ↑s' ⊆ s
hst : s ∩ ↑(insert b₁ t) = ∅
hss' : s ⊆ ↑(span K ↑(s' ∪ insert b₁ t))
h : b₁ ∈ s
this : b₁ ∈ s ∩ ↑(insert b₁ t)
⊢ False
[PROOFSTEP]
rwa [hst] at this 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝² : Set V
x y z : V
t✝¹ : Finset V
hs : LinearIndependent K fun x => ↑x
hst✝ : s ⊆ ↑(span K ↑t✝¹)
t✝ : Finset V
b₁ : V
t : Finset V
hb₁t : ¬b₁ ∈ t
ih :
  ∀ (s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
s' : Finset V
hs' : ↑s' ⊆ s
hst : s ∩ ↑(insert b₁ t) = ∅
hss' : s ⊆ ↑(span K ↑(s' ∪ insert b₁ t))
hb₁s : ¬b₁ ∈ s
hb₁s' : ¬b₁ ∈ s'
⊢ s ∩ ↑t ⊆ s ∩ ↑(insert b₁ t)
[PROOFSTEP]
simp [inter_subset_inter, Subset.refl, -inter_subset_left, -subset_inter_iff]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝² : Set V
x y z : V
t✝¹ : Finset V
hs : LinearIndependent K fun x => ↑x
hst✝¹ : s ⊆ ↑(span K ↑t✝¹)
t✝ : Finset V
b₁ : V
t : Finset V
hb₁t : ¬b₁ ∈ t
ih :
  ∀ (s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
s' : Finset V
hs' : ↑s' ⊆ s
hst✝ : s ∩ ↑(insert b₁ t) = ∅
hss' : s ⊆ ↑(span K ↑(s' ∪ insert b₁ t))
hb₁s : ¬b₁ ∈ s
hb₁s' : ¬b₁ ∈ s'
hst : s ∩ ↑t = ∅
this : s ⊆ ↑(span K ↑(s' ∪ t))
u : Finset V
hust : ↑u ⊆ s ∪ ↑t
hsu : s ⊆ ↑u
Eq : Finset.card u = Finset.card (s' ∪ t)
hb₁u : ¬b₁ ∈ u
⊢ ↑(insert b₁ u) ⊆ s ∪ ↑(insert b₁ t)
[PROOFSTEP]
simp [insert_subset_insert hust]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝² : Set V
x y z : V
t✝¹ : Finset V
hs : LinearIndependent K fun x => ↑x
hst✝¹ : s ⊆ ↑(span K ↑t✝¹)
t✝ : Finset V
b₁ : V
t : Finset V
hb₁t : ¬b₁ ∈ t
ih :
  ∀ (s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
s' : Finset V
hs' : ↑s' ⊆ s
hst✝ : s ∩ ↑(insert b₁ t) = ∅
hss' : s ⊆ ↑(span K ↑(s' ∪ insert b₁ t))
hb₁s : ¬b₁ ∈ s
hb₁s' : ¬b₁ ∈ s'
hst : s ∩ ↑t = ∅
this : s ⊆ ↑(span K ↑(s' ∪ t))
u : Finset V
hust : ↑u ⊆ s ∪ ↑t
hsu : s ⊆ ↑u
Eq : Finset.card u = Finset.card (s' ∪ t)
hb₁u : ¬b₁ ∈ u
⊢ ↑u ⊆ ↑(insert b₁ u)
[PROOFSTEP]
simp
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝² : Set V
x y z : V
t✝¹ : Finset V
hs : LinearIndependent K fun x => ↑x
hst✝¹ : s ⊆ ↑(span K ↑t✝¹)
t✝ : Finset V
b₁ : V
t : Finset V
hb₁t : ¬b₁ ∈ t
ih :
  ∀ (s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
s' : Finset V
hs' : ↑s' ⊆ s
hst✝ : s ∩ ↑(insert b₁ t) = ∅
hss' : s ⊆ ↑(span K ↑(s' ∪ insert b₁ t))
hb₁s : ¬b₁ ∈ s
hb₁s' : ¬b₁ ∈ s'
hst : s ∩ ↑t = ∅
this : s ⊆ ↑(span K ↑(s' ∪ t))
u : Finset V
hust : ↑u ⊆ s ∪ ↑t
hsu : s ⊆ ↑u
Eq : Finset.card u = Finset.card (s' ∪ t)
hb₁u : ¬b₁ ∈ u
⊢ Finset.card (insert b₁ u) = Finset.card (s' ∪ insert b₁ t)
[PROOFSTEP]
simp [Eq, hb₁t, hb₁s', hb₁u]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝² : Set V
x y z : V
t✝¹ : Finset V
hs : LinearIndependent K fun x => ↑x
hst✝¹ : s ⊆ ↑(span K ↑t✝¹)
t✝ : Finset V
b₁ : V
t : Finset V
hb₁t : ¬b₁ ∈ t
ih :
  ∀ (s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
s' : Finset V
hs' : ↑s' ⊆ s
hst✝ : s ∩ ↑(insert b₁ t) = ∅
hss' : s ⊆ ↑(span K ↑(s' ∪ insert b₁ t))
hb₁s : ¬b₁ ∈ s
hb₁s' : ¬b₁ ∈ s'
hst : s ∩ ↑t = ∅
this : ¬s ⊆ ↑(span K ↑(s' ∪ t))
b₂ : V
hb₂s : b₂ ∈ s
hb₂t : ¬b₂ ∈ ↑(span K ↑(s' ∪ t))
hb₂t' : ¬b₂ ∈ s' ∪ t
b₃ : V
hb₃ : b₃ ∈ s
⊢ b₃ ∈ ↑(span K ↑(insert b₂ s' ∪ t))
[PROOFSTEP]
have : ↑(s' ∪ insert b₁ t) ⊆ insert b₁ (insert b₂ ↑(s' ∪ t) : Set V) := by
  -- Porting note: Too many theorems to be excluded, so
              --               `simp only` is shorter.simp only [insert_eq, union_subset_union, Subset.refl,
    subset_union_right, Finset.union_insert, Finset.coe_insert]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝² : Set V
x y z : V
t✝¹ : Finset V
hs : LinearIndependent K fun x => ↑x
hst✝¹ : s ⊆ ↑(span K ↑t✝¹)
t✝ : Finset V
b₁ : V
t : Finset V
hb₁t : ¬b₁ ∈ t
ih :
  ∀ (s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
s' : Finset V
hs' : ↑s' ⊆ s
hst✝ : s ∩ ↑(insert b₁ t) = ∅
hss' : s ⊆ ↑(span K ↑(s' ∪ insert b₁ t))
hb₁s : ¬b₁ ∈ s
hb₁s' : ¬b₁ ∈ s'
hst : s ∩ ↑t = ∅
this : ¬s ⊆ ↑(span K ↑(s' ∪ t))
b₂ : V
hb₂s : b₂ ∈ s
hb₂t : ¬b₂ ∈ ↑(span K ↑(s' ∪ t))
hb₂t' : ¬b₂ ∈ s' ∪ t
b₃ : V
hb₃ : b₃ ∈ s
⊢ ↑(s' ∪ insert b₁ t) ⊆ insert b₁ (insert b₂ ↑(s' ∪ t))
[PROOFSTEP]
simp only [insert_eq, union_subset_union, Subset.refl, subset_union_right, Finset.union_insert, Finset.coe_insert]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝² : Set V
x y z : V
t✝¹ : Finset V
hs : LinearIndependent K fun x => ↑x
hst✝¹ : s ⊆ ↑(span K ↑t✝¹)
t✝ : Finset V
b₁ : V
t : Finset V
hb₁t : ¬b₁ ∈ t
ih :
  ∀ (s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
s' : Finset V
hs' : ↑s' ⊆ s
hst✝ : s ∩ ↑(insert b₁ t) = ∅
hss' : s ⊆ ↑(span K ↑(s' ∪ insert b₁ t))
hb₁s : ¬b₁ ∈ s
hb₁s' : ¬b₁ ∈ s'
hst : s ∩ ↑t = ∅
this✝ : ¬s ⊆ ↑(span K ↑(s' ∪ t))
b₂ : V
hb₂s : b₂ ∈ s
hb₂t : ¬b₂ ∈ ↑(span K ↑(s' ∪ t))
hb₂t' : ¬b₂ ∈ s' ∪ t
b₃ : V
hb₃ : b₃ ∈ s
this : ↑(s' ∪ insert b₁ t) ⊆ insert b₁ (insert b₂ ↑(s' ∪ t))
⊢ b₃ ∈ ↑(span K ↑(insert b₂ s' ∪ t))
[PROOFSTEP]
have hb₃ : b₃ ∈ span K (insert b₁ (insert b₂ ↑(s' ∪ t) : Set V)) := span_mono this (hss' hb₃)
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝² : Set V
x y z : V
t✝¹ : Finset V
hs : LinearIndependent K fun x => ↑x
hst✝¹ : s ⊆ ↑(span K ↑t✝¹)
t✝ : Finset V
b₁ : V
t : Finset V
hb₁t : ¬b₁ ∈ t
ih :
  ∀ (s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
s' : Finset V
hs' : ↑s' ⊆ s
hst✝ : s ∩ ↑(insert b₁ t) = ∅
hss' : s ⊆ ↑(span K ↑(s' ∪ insert b₁ t))
hb₁s : ¬b₁ ∈ s
hb₁s' : ¬b₁ ∈ s'
hst : s ∩ ↑t = ∅
this✝ : ¬s ⊆ ↑(span K ↑(s' ∪ t))
b₂ : V
hb₂s : b₂ ∈ s
hb₂t : ¬b₂ ∈ ↑(span K ↑(s' ∪ t))
hb₂t' : ¬b₂ ∈ s' ∪ t
b₃ : V
hb₃✝ : b₃ ∈ s
this : ↑(s' ∪ insert b₁ t) ⊆ insert b₁ (insert b₂ ↑(s' ∪ t))
hb₃ : b₃ ∈ span K (insert b₁ (insert b₂ ↑(s' ∪ t)))
⊢ b₃ ∈ ↑(span K ↑(insert b₂ s' ∪ t))
[PROOFSTEP]
have : s ⊆ (span K (insert b₁ ↑(s' ∪ t)) : Submodule K V) := by
  simpa [insert_eq, -singleton_union, -union_singleton] using hss'
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝² : Set V
x y z : V
t✝¹ : Finset V
hs : LinearIndependent K fun x => ↑x
hst✝¹ : s ⊆ ↑(span K ↑t✝¹)
t✝ : Finset V
b₁ : V
t : Finset V
hb₁t : ¬b₁ ∈ t
ih :
  ∀ (s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
s' : Finset V
hs' : ↑s' ⊆ s
hst✝ : s ∩ ↑(insert b₁ t) = ∅
hss' : s ⊆ ↑(span K ↑(s' ∪ insert b₁ t))
hb₁s : ¬b₁ ∈ s
hb₁s' : ¬b₁ ∈ s'
hst : s ∩ ↑t = ∅
this✝ : ¬s ⊆ ↑(span K ↑(s' ∪ t))
b₂ : V
hb₂s : b₂ ∈ s
hb₂t : ¬b₂ ∈ ↑(span K ↑(s' ∪ t))
hb₂t' : ¬b₂ ∈ s' ∪ t
b₃ : V
hb₃✝ : b₃ ∈ s
this : ↑(s' ∪ insert b₁ t) ⊆ insert b₁ (insert b₂ ↑(s' ∪ t))
hb₃ : b₃ ∈ span K (insert b₁ (insert b₂ ↑(s' ∪ t)))
⊢ s ⊆ ↑(span K (insert b₁ ↑(s' ∪ t)))
[PROOFSTEP]
simpa [insert_eq, -singleton_union, -union_singleton] using hss'
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝² : Set V
x y z : V
t✝¹ : Finset V
hs : LinearIndependent K fun x => ↑x
hst✝¹ : s ⊆ ↑(span K ↑t✝¹)
t✝ : Finset V
b₁ : V
t : Finset V
hb₁t : ¬b₁ ∈ t
ih :
  ∀ (s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
s' : Finset V
hs' : ↑s' ⊆ s
hst✝ : s ∩ ↑(insert b₁ t) = ∅
hss' : s ⊆ ↑(span K ↑(s' ∪ insert b₁ t))
hb₁s : ¬b₁ ∈ s
hb₁s' : ¬b₁ ∈ s'
hst : s ∩ ↑t = ∅
this✝¹ : ¬s ⊆ ↑(span K ↑(s' ∪ t))
b₂ : V
hb₂s : b₂ ∈ s
hb₂t : ¬b₂ ∈ ↑(span K ↑(s' ∪ t))
hb₂t' : ¬b₂ ∈ s' ∪ t
b₃ : V
hb₃✝ : b₃ ∈ s
this✝ : ↑(s' ∪ insert b₁ t) ⊆ insert b₁ (insert b₂ ↑(s' ∪ t))
hb₃ : b₃ ∈ span K (insert b₁ (insert b₂ ↑(s' ∪ t)))
this : s ⊆ ↑(span K (insert b₁ ↑(s' ∪ t)))
⊢ b₃ ∈ ↑(span K ↑(insert b₂ s' ∪ t))
[PROOFSTEP]
have hb₁ : b₁ ∈ span K (insert b₂ ↑(s' ∪ t)) := by exact mem_span_insert_exchange (this hb₂s) hb₂t
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝² : Set V
x y z : V
t✝¹ : Finset V
hs : LinearIndependent K fun x => ↑x
hst✝¹ : s ⊆ ↑(span K ↑t✝¹)
t✝ : Finset V
b₁ : V
t : Finset V
hb₁t : ¬b₁ ∈ t
ih :
  ∀ (s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
s' : Finset V
hs' : ↑s' ⊆ s
hst✝ : s ∩ ↑(insert b₁ t) = ∅
hss' : s ⊆ ↑(span K ↑(s' ∪ insert b₁ t))
hb₁s : ¬b₁ ∈ s
hb₁s' : ¬b₁ ∈ s'
hst : s ∩ ↑t = ∅
this✝¹ : ¬s ⊆ ↑(span K ↑(s' ∪ t))
b₂ : V
hb₂s : b₂ ∈ s
hb₂t : ¬b₂ ∈ ↑(span K ↑(s' ∪ t))
hb₂t' : ¬b₂ ∈ s' ∪ t
b₃ : V
hb₃✝ : b₃ ∈ s
this✝ : ↑(s' ∪ insert b₁ t) ⊆ insert b₁ (insert b₂ ↑(s' ∪ t))
hb₃ : b₃ ∈ span K (insert b₁ (insert b₂ ↑(s' ∪ t)))
this : s ⊆ ↑(span K (insert b₁ ↑(s' ∪ t)))
⊢ b₁ ∈ span K (insert b₂ ↑(s' ∪ t))
[PROOFSTEP]
exact mem_span_insert_exchange (this hb₂s) hb₂t
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝² : Set V
x y z : V
t✝¹ : Finset V
hs : LinearIndependent K fun x => ↑x
hst✝¹ : s ⊆ ↑(span K ↑t✝¹)
t✝ : Finset V
b₁ : V
t : Finset V
hb₁t : ¬b₁ ∈ t
ih :
  ∀ (s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
s' : Finset V
hs' : ↑s' ⊆ s
hst✝ : s ∩ ↑(insert b₁ t) = ∅
hss' : s ⊆ ↑(span K ↑(s' ∪ insert b₁ t))
hb₁s : ¬b₁ ∈ s
hb₁s' : ¬b₁ ∈ s'
hst : s ∩ ↑t = ∅
this✝¹ : ¬s ⊆ ↑(span K ↑(s' ∪ t))
b₂ : V
hb₂s : b₂ ∈ s
hb₂t : ¬b₂ ∈ ↑(span K ↑(s' ∪ t))
hb₂t' : ¬b₂ ∈ s' ∪ t
b₃ : V
hb₃✝ : b₃ ∈ s
this✝ : ↑(s' ∪ insert b₁ t) ⊆ insert b₁ (insert b₂ ↑(s' ∪ t))
hb₃ : b₃ ∈ span K (insert b₁ (insert b₂ ↑(s' ∪ t)))
this : s ⊆ ↑(span K (insert b₁ ↑(s' ∪ t)))
hb₁ : b₁ ∈ span K (insert b₂ ↑(s' ∪ t))
⊢ b₃ ∈ ↑(span K ↑(insert b₂ s' ∪ t))
[PROOFSTEP]
rw [span_insert_eq_span hb₁] at hb₃ 
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝² : Set V
x y z : V
t✝¹ : Finset V
hs : LinearIndependent K fun x => ↑x
hst✝¹ : s ⊆ ↑(span K ↑t✝¹)
t✝ : Finset V
b₁ : V
t : Finset V
hb₁t : ¬b₁ ∈ t
ih :
  ∀ (s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
s' : Finset V
hs' : ↑s' ⊆ s
hst✝ : s ∩ ↑(insert b₁ t) = ∅
hss' : s ⊆ ↑(span K ↑(s' ∪ insert b₁ t))
hb₁s : ¬b₁ ∈ s
hb₁s' : ¬b₁ ∈ s'
hst : s ∩ ↑t = ∅
this✝¹ : ¬s ⊆ ↑(span K ↑(s' ∪ t))
b₂ : V
hb₂s : b₂ ∈ s
hb₂t : ¬b₂ ∈ ↑(span K ↑(s' ∪ t))
hb₂t' : ¬b₂ ∈ s' ∪ t
b₃ : V
hb₃✝ : b₃ ∈ s
this✝ : ↑(s' ∪ insert b₁ t) ⊆ insert b₁ (insert b₂ ↑(s' ∪ t))
hb₃ : b₃ ∈ span K (insert b₂ ↑(s' ∪ t))
this : s ⊆ ↑(span K (insert b₁ ↑(s' ∪ t)))
hb₁ : b₁ ∈ span K (insert b₂ ↑(s' ∪ t))
⊢ b₃ ∈ ↑(span K ↑(insert b₂ s' ∪ t))
[PROOFSTEP]
simpa using hb₃
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝² : Set V
x y z : V
t✝¹ : Finset V
hs : LinearIndependent K fun x => ↑x
hst✝¹ : s ⊆ ↑(span K ↑t✝¹)
t✝ : Finset V
b₁ : V
t : Finset V
hb₁t : ¬b₁ ∈ t
ih :
  ∀ (s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
s' : Finset V
hs' : ↑s' ⊆ s
hst✝ : s ∩ ↑(insert b₁ t) = ∅
hss' : s ⊆ ↑(span K ↑(s' ∪ insert b₁ t))
hb₁s : ¬b₁ ∈ s
hb₁s' : ¬b₁ ∈ s'
hst : s ∩ ↑t = ∅
this✝ : ¬s ⊆ ↑(span K ↑(s' ∪ t))
b₂ : V
hb₂s : b₂ ∈ s
hb₂t : ¬b₂ ∈ ↑(span K ↑(s' ∪ t))
hb₂t' : ¬b₂ ∈ s' ∪ t
this : s ⊆ ↑(span K ↑(insert b₂ s' ∪ t))
⊢ ↑(insert b₂ s') ⊆ s
[PROOFSTEP]
simp [insert_subset_iff, hb₂s, hs']
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝² : Set V
x y z : V
t✝¹ : Finset V
hs : LinearIndependent K fun x => ↑x
hst✝¹ : s ⊆ ↑(span K ↑t✝¹)
t✝ : Finset V
b₁ : V
t : Finset V
hb₁t : ¬b₁ ∈ t
ih :
  ∀ (s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
s' : Finset V
hs' : ↑s' ⊆ s
hst✝ : s ∩ ↑(insert b₁ t) = ∅
hss' : s ⊆ ↑(span K ↑(s' ∪ insert b₁ t))
hb₁s : ¬b₁ ∈ s
hb₁s' : ¬b₁ ∈ s'
hst : s ∩ ↑t = ∅
this✝ : ¬s ⊆ ↑(span K ↑(s' ∪ t))
b₂ : V
hb₂s : b₂ ∈ s
hb₂t : ¬b₂ ∈ ↑(span K ↑(s' ∪ t))
hb₂t' : ¬b₂ ∈ s' ∪ t
this : s ⊆ ↑(span K ↑(insert b₂ s' ∪ t))
u : Finset V
hust : ↑u ⊆ s ∪ ↑t
hsu : s ⊆ ↑u
eq : Finset.card u = Finset.card (insert b₂ s' ∪ t)
⊢ ↑t ⊆ ↑(insert b₁ t)
[PROOFSTEP]
simp [subset_insert]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝² : Set V
x y z : V
t✝¹ : Finset V
hs : LinearIndependent K fun x => ↑x
hst✝¹ : s ⊆ ↑(span K ↑t✝¹)
t✝ : Finset V
b₁ : V
t : Finset V
hb₁t : ¬b₁ ∈ t
ih :
  ∀ (s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
s' : Finset V
hs' : ↑s' ⊆ s
hst✝ : s ∩ ↑(insert b₁ t) = ∅
hss' : s ⊆ ↑(span K ↑(s' ∪ insert b₁ t))
hb₁s : ¬b₁ ∈ s
hb₁s' : ¬b₁ ∈ s'
hst : s ∩ ↑t = ∅
this✝ : ¬s ⊆ ↑(span K ↑(s' ∪ t))
b₂ : V
hb₂s : b₂ ∈ s
hb₂t : ¬b₂ ∈ ↑(span K ↑(s' ∪ t))
hb₂t' : ¬b₂ ∈ s' ∪ t
this : s ⊆ ↑(span K ↑(insert b₂ s' ∪ t))
u : Finset V
hust : ↑u ⊆ s ∪ ↑t
hsu : s ⊆ ↑u
eq : Finset.card u = Finset.card (insert b₂ s' ∪ t)
⊢ Finset.card u = Finset.card (s' ∪ insert b₁ t)
[PROOFSTEP]
simp [eq, Finset.card_insert_of_not_mem hb₂t', hb₁t, hb₁s']
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝ : Set V
x y z : V
t : Finset V
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K ↑t)
this :
  ∀ (t s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
⊢ ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card t
[PROOFSTEP]
have eq : ((t.filter fun x => x ∈ s) ∪ t.filter fun x => x ∉ s) = t :=
  by
  ext1 x
  by_cases x ∈ s <;> simp [*]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝ : Set V
x y z : V
t : Finset V
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K ↑t)
this :
  ∀ (t s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
⊢ Finset.filter (fun x => x ∈ s) t ∪ Finset.filter (fun x => ¬x ∈ s) t = t
[PROOFSTEP]
ext1 x
[GOAL]
case a
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝ : Set V
x✝ y z : V
t : Finset V
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K ↑t)
this :
  ∀ (t s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
x : V
⊢ x ∈ Finset.filter (fun x => x ∈ s) t ∪ Finset.filter (fun x => ¬x ∈ s) t ↔ x ∈ t
[PROOFSTEP]
by_cases x ∈ s
[GOAL]
case a
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝ : Set V
x✝ y z : V
t : Finset V
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K ↑t)
this :
  ∀ (t s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
x : V
⊢ x ∈ Finset.filter (fun x => x ∈ s) t ∪ Finset.filter (fun x => ¬x ∈ s) t ↔ x ∈ t
[PROOFSTEP]
by_cases x ∈ s
[GOAL]
case pos
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝ : Set V
x✝ y z : V
t : Finset V
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K ↑t)
this :
  ∀ (t s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
x : V
h : x ∈ s
⊢ x ∈ Finset.filter (fun x => x ∈ s) t ∪ Finset.filter (fun x => ¬x ∈ s) t ↔ x ∈ t
[PROOFSTEP]
simp [*]
[GOAL]
case neg
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝ : Set V
x✝ y z : V
t : Finset V
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K ↑t)
this :
  ∀ (t s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
x : V
h : ¬x ∈ s
⊢ x ∈ Finset.filter (fun x => x ∈ s) t ∪ Finset.filter (fun x => ¬x ∈ s) t ↔ x ∈ t
[PROOFSTEP]
simp [*]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝ : Set V
x y z : V
t : Finset V
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K ↑t)
this :
  ∀ (t s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
eq : Finset.filter (fun x => x ∈ s) t ∪ Finset.filter (fun x => ¬x ∈ s) t = t
⊢ ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card t
[PROOFSTEP]
apply
  Exists.elim
    (this (t.filter fun x => x ∉ s) (t.filter fun x => x ∈ s) (by simp [Set.subset_def])
      (by simp (config := { contextual := true }) [Set.ext_iff]) (by rwa [eq]))
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝ : Set V
x y z : V
t : Finset V
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K ↑t)
this :
  ∀ (t s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
eq : Finset.filter (fun x => x ∈ s) t ∪ Finset.filter (fun x => ¬x ∈ s) t = t
⊢ ↑(Finset.filter (fun x => x ∈ s) t) ⊆ s
[PROOFSTEP]
simp [Set.subset_def]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝ : Set V
x y z : V
t : Finset V
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K ↑t)
this :
  ∀ (t s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
eq : Finset.filter (fun x => x ∈ s) t ∪ Finset.filter (fun x => ¬x ∈ s) t = t
⊢ s ∩ ↑(Finset.filter (fun x => ¬x ∈ s) t) = ∅
[PROOFSTEP]
simp (config := { contextual := true }) [Set.ext_iff]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝ : Set V
x y z : V
t : Finset V
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K ↑t)
this :
  ∀ (t s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
eq : Finset.filter (fun x => x ∈ s) t ∪ Finset.filter (fun x => ¬x ∈ s) t = t
⊢ s ⊆ ↑(span K ↑(Finset.filter (fun x => x ∈ s) t ∪ Finset.filter (fun x => ¬x ∈ s) t))
[PROOFSTEP]
rwa [eq]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝ : Set V
x y z : V
t : Finset V
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K ↑t)
this :
  ∀ (t s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
eq : Finset.filter (fun x => x ∈ s) t ∪ Finset.filter (fun x => ¬x ∈ s) t = t
⊢ ∀ (a : Finset V),
    ↑a ⊆ s ∪ ↑(Finset.filter (fun x => ¬x ∈ s) t) ∧
        s ⊆ ↑a ∧ Finset.card a = Finset.card (Finset.filter (fun x => x ∈ s) t ∪ Finset.filter (fun x => ¬x ∈ s) t) →
      ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card t
[PROOFSTEP]
intro u h
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝ : Set V
x y z : V
t : Finset V
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K ↑t)
this :
  ∀ (t s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
eq : Finset.filter (fun x => x ∈ s) t ∪ Finset.filter (fun x => ¬x ∈ s) t = t
u : Finset V
h :
  ↑u ⊆ s ∪ ↑(Finset.filter (fun x => ¬x ∈ s) t) ∧
    s ⊆ ↑u ∧ Finset.card u = Finset.card (Finset.filter (fun x => x ∈ s) t ∪ Finset.filter (fun x => ¬x ∈ s) t)
⊢ ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card t
[PROOFSTEP]
exact
  ⟨u, Subset.trans h.1 (by simp (config := { contextual := true }) [subset_def, and_imp, or_imp]), h.2.1, by
    simp only [h.2.2, eq]⟩
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝ : Set V
x y z : V
t : Finset V
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K ↑t)
this :
  ∀ (t s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
eq : Finset.filter (fun x => x ∈ s) t ∪ Finset.filter (fun x => ¬x ∈ s) t = t
u : Finset V
h :
  ↑u ⊆ s ∪ ↑(Finset.filter (fun x => ¬x ∈ s) t) ∧
    s ⊆ ↑u ∧ Finset.card u = Finset.card (Finset.filter (fun x => x ∈ s) t ∪ Finset.filter (fun x => ¬x ∈ s) t)
⊢ s ∪ ↑(Finset.filter (fun x => ¬x ∈ s) t) ⊆ s ∪ ↑t
[PROOFSTEP]
simp (config := { contextual := true }) [subset_def, and_imp, or_imp]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t✝ : Set V
x y z : V
t : Finset V
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K ↑t)
this :
  ∀ (t s' : Finset V),
    ↑s' ⊆ s →
      s ∩ ↑t = ∅ → s ⊆ ↑(span K ↑(s' ∪ t)) → ∃ t', ↑t' ⊆ s ∪ ↑t ∧ s ⊆ ↑t' ∧ Finset.card t' = Finset.card (s' ∪ t)
eq : Finset.filter (fun x => x ∈ s) t ∪ Finset.filter (fun x => ¬x ∈ s) t = t
u : Finset V
h :
  ↑u ⊆ s ∪ ↑(Finset.filter (fun x => ¬x ∈ s) t) ∧
    s ⊆ ↑u ∧ Finset.card u = Finset.card (Finset.filter (fun x => x ∈ s) t ∪ Finset.filter (fun x => ¬x ∈ s) t)
⊢ Finset.card u = Finset.card t
[PROOFSTEP]
simp only [h.2.2, eq]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
ht : Set.Finite t
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K t)
⊢ s ⊆ ↑(span K ↑(Finite.toFinset ht))
[PROOFSTEP]
simp
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
ht : Set.Finite t
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K t)
⊢ s ⊆ ↑(span K t)
[PROOFSTEP]
assumption
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
ht : Set.Finite t
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K t)
this✝ : s ⊆ ↑(span K ↑(Finite.toFinset ht))
u : Finset V
_hust : ↑u ⊆ s ∪ ↑(Finite.toFinset ht)
hsu : s ⊆ ↑u
Eq : Finset.card u = Finset.card (Finite.toFinset ht)
this : Set.Finite s
⊢ Finset.card (Finite.toFinset this) ≤ Finset.card (Finite.toFinset ht)
[PROOFSTEP]
rw [← Eq]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
ht : Set.Finite t
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K t)
this✝ : s ⊆ ↑(span K ↑(Finite.toFinset ht))
u : Finset V
_hust : ↑u ⊆ s ∪ ↑(Finite.toFinset ht)
hsu : s ⊆ ↑u
Eq : Finset.card u = Finset.card (Finite.toFinset ht)
this : Set.Finite s
⊢ Finset.card (Finite.toFinset this) ≤ Finset.card u
[PROOFSTEP]
exact Finset.card_le_of_subset <| Finset.coe_subset.mp <| by simp [hsu]
[GOAL]
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
inst✝⁴ : DivisionRing K
inst✝³ : AddCommGroup V
inst✝² : AddCommGroup V'
inst✝¹ : Module K V
inst✝ : Module K V'
v : ι → V
s t : Set V
x y z : V
ht : Set.Finite t
hs : LinearIndependent K fun x => ↑x
hst : s ⊆ ↑(span K t)
this✝ : s ⊆ ↑(span K ↑(Finite.toFinset ht))
u : Finset V
_hust : ↑u ⊆ s ∪ ↑(Finite.toFinset ht)
hsu : s ⊆ ↑u
Eq : Finset.card u = Finset.card (Finite.toFinset ht)
this : Set.Finite s
⊢ ↑(Finite.toFinset this) ⊆ ↑u
[PROOFSTEP]
simp [hsu]
