Theorem: union_support_maximal_linearIndependent_eq_range_basis
File: Mathlib/LinearAlgebra/Dimension.lean

tactic: by_contra h
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
⊢ (⋃ (k : κ), ↑(↑b.repr (v k)).support) = Set.univ

tactic: simp only [← Ne.def, ne_univ_iff_exists_not_mem, mem_iUnion, not_exists_not,
  Finsupp.mem_support_iff, Finset.mem_coe] at h
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
h : ¬(⋃ (k : κ), ↑(↑b.repr (v k)).support) = Set.univ
⊢ False

tactic: obtain ⟨b', w⟩ := h
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
h : ∃ a, ∀ (x : κ), ↑(↑b.repr (v x)) a = 0
⊢ False

tactic: let v' : Option κ → M := fun o => o.elim (b b') v
state_before: case intro
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
⊢ False

tactic: have r : range v ⊆ range v' := by
  rintro - ⟨k, rfl⟩
  use some k
  rfl
state_before: case intro
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
⊢ False

tactic: have r' : b b' ∉ range v := by
  rintro ⟨k, p⟩
  simpa [w] using congr_arg (fun m => (b.repr m) b') p
state_before: case intro
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
⊢ False

tactic: have r'' : range v ≠ range v' := by
  intro e
  have p : b b' ∈ range v' := by
    use none
    rfl
  rw [← e] at p
  exact r' p
state_before: case intro
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
⊢ False

tactic: dsimp [LinearIndependent.Maximal] at m
state_before: case intro
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
i' : LinearIndependent R Subtype.val
⊢ False

tactic: specialize m (range v') i' r
state_before: case intro
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : ∀ (s : Set M), LinearIndependent R Subtype.val → range v ⊆ s → range v = s
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
i' : LinearIndependent R Subtype.val
⊢ False

tactic: exact r'' m
state_before: case intro
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
i' : LinearIndependent R Subtype.val
m : range v = range v'
⊢ False

tactic: rintro - ⟨k, rfl⟩
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
⊢ range v ⊆ range v'

tactic: use some k
state_before: case intro
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
k : κ
⊢ v k ∈ range v'

tactic: rfl
state_before: case intro
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
k : κ
⊢ v' (some k) = v k

tactic: rintro ⟨k, p⟩
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
⊢ ¬↑b b' ∈ range v

tactic: simpa [w] using congr_arg (fun m => (b.repr m) b') p
state_before: case intro
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
k : κ
p : v k = ↑b b'
⊢ False

tactic: intro e
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
⊢ range v ≠ range v'

tactic: have p : b b' ∈ range v' := by
  use none
  rfl
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
e : range v = range v'
⊢ False

tactic: rw [← e] at p
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
e : range v = range v'
p : ↑b b' ∈ range v'
⊢ False

tactic: exact r' p
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
e : range v = range v'
p : ↑b b' ∈ range v
⊢ False

tactic: use none
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
e : range v = range v'
⊢ ↑b b' ∈ range v'

tactic: rfl
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
e : range v = range v'
⊢ v' none = ↑b b'

tactic: rintro (_ | k) (_ | k) z
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
⊢ Injective v'

tactic: rfl
state_before: case none.none
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
z : v' none = v' none
⊢ none = none

tactic: exfalso
state_before: case none.some
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
k : κ
z : v' none = v' (some k)
⊢ none = some k

tactic: exact r' ⟨k, z.symm⟩
state_before: case none.some.h
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
k : κ
z : v' none = v' (some k)
⊢ False

tactic: exfalso
state_before: case some.none
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
k : κ
z : v' (some k) = v' none
⊢ some k = none

tactic: exact r' ⟨k, z⟩
state_before: case some.none.h
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
k : κ
z : v' (some k) = v' none
⊢ False

tactic: congr
state_before: case some.some
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
k✝ k : κ
z : v' (some k✝) = v' (some k)
⊢ some k✝ = some k

tactic: exact i.injective z
state_before: case some.some.e_val
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
k✝ k : κ
z : v' (some k✝) = v' (some k)
⊢ k✝ = k

tactic: rw [linearIndependent_subtype_range inj', linearIndependent_iff]
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
⊢ LinearIndependent R Subtype.val

tactic: intro l z
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
⊢ ∀ (l : Option κ →₀ R), ↑(Finsupp.total (Option κ) M R v') l = 0 → l = 0

tactic: rw [Finsupp.total_option] at z
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
l : Option κ →₀ R
z : ↑(Finsupp.total (Option κ) M R v') l = 0
⊢ l = 0

tactic: simp only [Option.elim'] at z
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
l : Option κ →₀ R
z : ↑l none • v' none + ↑(Finsupp.total κ M R (v' ∘ some)) (Finsupp.some l) = 0
⊢ l = 0

tactic: change _ + Finsupp.total κ M R v l.some = 0 at z
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
l : Option κ →₀ R
z :
  ↑l none • Option.elim none (↑b b') v +
      ↑(Finsupp.total κ M R ((fun o => Option.elim o (↑b b') v) ∘ some)) (Finsupp.some l) =
    0
⊢ l = 0

tactic: have l₀ : l none = 0 := by
  rw [← eq_neg_iff_add_eq_zero] at z
  replace z := neg_eq_iff_eq_neg.mpr z
  apply_fun fun x => b.repr x b'  at z
  simp only [repr_self, LinearEquiv.map_smul, mul_one, Finsupp.single_eq_same, Pi.neg_apply,
    Finsupp.smul_single', LinearEquiv.map_neg, Finsupp.coe_neg] at z
  erw [FunLike.congr_fun (Finsupp.apply_total R (b.repr : M →ₗ[R] ι →₀ R) v l.some) b'] at z
  simpa [Finsupp.total_apply, w] using z
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
l : Option κ →₀ R
z : ↑l none • Option.elim none (↑b b') v + ↑(Finsupp.total κ M R v) (Finsupp.some l) = 0
⊢ l = 0

tactic: have l₁ : l.some = 0 := by
  rw [l₀, zero_smul, zero_add] at z
  exact linearIndependent_iff.mp i _ z
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
l : Option κ →₀ R
z : ↑l none • Option.elim none (↑b b') v + ↑(Finsupp.total κ M R v) (Finsupp.some l) = 0
l₀ : ↑l none = 0
⊢ l = 0

tactic: ext (_ | a)
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
l : Option κ →₀ R
z : ↑l none • Option.elim none (↑b b') v + ↑(Finsupp.total κ M R v) (Finsupp.some l) = 0
l₀ : ↑l none = 0
l₁ : Finsupp.some l = 0
⊢ l = 0

tactic: rw [← eq_neg_iff_add_eq_zero] at z
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
l : Option κ →₀ R
z : ↑l none • Option.elim none (↑b b') v + ↑(Finsupp.total κ M R v) (Finsupp.some l) = 0
⊢ ↑l none = 0

tactic: replace z := neg_eq_iff_eq_neg.mpr z
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
l : Option κ →₀ R
z : ↑l none • Option.elim none (↑b b') v = -↑(Finsupp.total κ M R v) (Finsupp.some l)
⊢ ↑l none = 0

tactic: apply_fun fun x => b.repr x b'  at z
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
l : Option κ →₀ R
z : -(↑l none • Option.elim none (↑b b') v) = ↑(Finsupp.total κ M R v) (Finsupp.some l)
⊢ ↑l none = 0

tactic: simp only [repr_self, LinearEquiv.map_smul, mul_one, Finsupp.single_eq_same, Pi.neg_apply,
  Finsupp.smul_single', LinearEquiv.map_neg, Finsupp.coe_neg] at z
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
l : Option κ →₀ R
z : ↑(↑b.repr (-(↑l none • Option.elim none (↑b b') v))) b' = ↑(↑b.repr (↑(Finsupp.total κ M R v) (Finsupp.some l))) b'
⊢ ↑l none = 0

tactic: erw [FunLike.congr_fun (Finsupp.apply_total R (b.repr : M →ₗ[R] ι →₀ R) v l.some) b'] at z
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
l : Option κ →₀ R
z : -↑(↑l none • ↑b.repr (Option.elim none (↑b b') v)) b' = ↑(↑b.repr (↑(Finsupp.total κ M R v) (Finsupp.some l))) b'
⊢ ↑l none = 0

tactic: simpa [Finsupp.total_apply, w] using z
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
l : Option κ →₀ R
z :
  -↑(↑l none • ↑b.repr (Option.elim none (↑b b') v)) b' =
    ↑(↑(Finsupp.total κ (ι →₀ R) R (↑↑b.repr ∘ v)) (Finsupp.some l)) b'
⊢ ↑l none = 0

tactic: rw [l₀, zero_smul, zero_add] at z
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
l : Option κ →₀ R
z : ↑l none • Option.elim none (↑b b') v + ↑(Finsupp.total κ M R v) (Finsupp.some l) = 0
l₀ : ↑l none = 0
⊢ Finsupp.some l = 0

tactic: exact linearIndependent_iff.mp i _ z
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
l : Option κ →₀ R
z : ↑(Finsupp.total κ M R v) (Finsupp.some l) = 0
l₀ : ↑l none = 0
⊢ Finsupp.some l = 0

tactic: simp only [l₀, Finsupp.coe_zero, Pi.zero_apply]
state_before: case h.none
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
l : Option κ →₀ R
z : ↑l none • Option.elim none (↑b b') v + ↑(Finsupp.total κ M R v) (Finsupp.some l) = 0
l₀ : ↑l none = 0
l₁ : Finsupp.some l = 0
⊢ ↑l none = ↑0 none

tactic: erw [FunLike.congr_fun l₁ a]
state_before: case h.some
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
l : Option κ →₀ R
z : ↑l none • Option.elim none (↑b b') v + ↑(Finsupp.total κ M R v) (Finsupp.some l) = 0
l₀ : ↑l none = 0
l₁ : Finsupp.some l = 0
a : κ
⊢ ↑l (some a) = ↑0 (some a)

tactic: simp only [Finsupp.coe_zero, Pi.zero_apply]
state_before: case h.some
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι✝ : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.160592
R : Type u
inst✝⁷ : Ring R
M : Type v
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
M' : Type v'
inst✝⁴ : AddCommGroup M'
inst✝³ : Module R M'
M₁ : Type v
inst✝² : AddCommGroup M₁
inst✝¹ : Module R M₁
inst✝ : Nontrivial R
ι : Type w
b : Basis ι R M
κ : Type w'
v : κ → M
i : LinearIndependent R v
m : LinearIndependent.Maximal i
b' : ι
w : ∀ (x : κ), ↑(↑b.repr (v x)) b' = 0
v' : Option κ → M := fun o => Option.elim o (↑b b') v
r : range v ⊆ range v'
r' : ¬↑b b' ∈ range v
r'' : range v ≠ range v'
inj' : Injective v'
l : Option κ →₀ R
z : ↑l none • Option.elim none (↑b b') v + ↑(Finsupp.total κ M R v) (Finsupp.some l) = 0
l₀ : ↑l none = 0
l₁ : Finsupp.some l = 0
a : κ
⊢ ↑0 a = ↑0 (some a)