Theorem: atom_iff_nonzero_span
File: Mathlib/LinearAlgebra/Basis.lean

tactic: refine' ⟨fun h => _, fun h => _⟩
state_before: ι : Type ?u.1173697
ι' : Type ?u.1173700
R : Type ?u.1173703
R₂ : Type ?u.1173706
K : Type u_1
M : Type ?u.1173712
M' : Type ?u.1173715
M'' : Type ?u.1173718
V : Type u
V' : Type ?u.1173723
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
W : Submodule K V
⊢ IsAtom W ↔ ∃ v x, W = span K {v}

tactic: cases' h with hbot h
state_before: case refine'_1
ι : Type ?u.1173697
ι' : Type ?u.1173700
R : Type ?u.1173703
R₂ : Type ?u.1173706
K : Type u_1
M : Type ?u.1173712
M' : Type ?u.1173715
M'' : Type ?u.1173718
V : Type u
V' : Type ?u.1173723
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
W : Submodule K V
h : IsAtom W
⊢ ∃ v x, W = span K {v}

tactic: rcases(Submodule.ne_bot_iff W).1 hbot with ⟨v, ⟨hW, hv⟩⟩
state_before: case refine'_1.intro
ι : Type ?u.1173697
ι' : Type ?u.1173700
R : Type ?u.1173703
R₂ : Type ?u.1173706
K : Type u_1
M : Type ?u.1173712
M' : Type ?u.1173715
M'' : Type ?u.1173718
V : Type u
V' : Type ?u.1173723
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
W : Submodule K V
hbot : W ≠ ⊥
h : ∀ (b : Submodule K V), b < W → b = ⊥
⊢ ∃ v x, W = span K {v}

tactic: refine' ⟨v, ⟨hv, _⟩⟩
state_before: case refine'_1.intro.intro.intro
ι : Type ?u.1173697
ι' : Type ?u.1173700
R : Type ?u.1173703
R₂ : Type ?u.1173706
K : Type u_1
M : Type ?u.1173712
M' : Type ?u.1173715
M'' : Type ?u.1173718
V : Type u
V' : Type ?u.1173723
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
W : Submodule K V
hbot : W ≠ ⊥
h : ∀ (b : Submodule K V), b < W → b = ⊥
v : V
hW : v ∈ W
hv : v ≠ 0
⊢ ∃ v x, W = span K {v}

tactic: by_contra heq
state_before: case refine'_1.intro.intro.intro
ι : Type ?u.1173697
ι' : Type ?u.1173700
R : Type ?u.1173703
R₂ : Type ?u.1173706
K : Type u_1
M : Type ?u.1173712
M' : Type ?u.1173715
M'' : Type ?u.1173718
V : Type u
V' : Type ?u.1173723
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
W : Submodule K V
hbot : W ≠ ⊥
h : ∀ (b : Submodule K V), b < W → b = ⊥
v : V
hW : v ∈ W
hv : v ≠ 0
⊢ W = span K {v}

tactic: specialize h (span K {v})
state_before: case refine'_1.intro.intro.intro
ι : Type ?u.1173697
ι' : Type ?u.1173700
R : Type ?u.1173703
R₂ : Type ?u.1173706
K : Type u_1
M : Type ?u.1173712
M' : Type ?u.1173715
M'' : Type ?u.1173718
V : Type u
V' : Type ?u.1173723
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
W : Submodule K V
hbot : W ≠ ⊥
h : ∀ (b : Submodule K V), b < W → b = ⊥
v : V
hW : v ∈ W
hv : v ≠ 0
heq : ¬W = span K {v}
⊢ False

tactic: rw [span_singleton_eq_bot, lt_iff_le_and_ne] at h
state_before: case refine'_1.intro.intro.intro
ι : Type ?u.1173697
ι' : Type ?u.1173700
R : Type ?u.1173703
R₂ : Type ?u.1173706
K : Type u_1
M : Type ?u.1173712
M' : Type ?u.1173715
M'' : Type ?u.1173718
V : Type u
V' : Type ?u.1173723
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
W : Submodule K V
hbot : W ≠ ⊥
v : V
hW : v ∈ W
hv : v ≠ 0
heq : ¬W = span K {v}
h : span K {v} < W → span K {v} = ⊥
⊢ False

tactic: exact hv (h ⟨(span_singleton_le_iff_mem v W).2 hW, Ne.symm heq⟩)
state_before: case refine'_1.intro.intro.intro
ι : Type ?u.1173697
ι' : Type ?u.1173700
R : Type ?u.1173703
R₂ : Type ?u.1173706
K : Type u_1
M : Type ?u.1173712
M' : Type ?u.1173715
M'' : Type ?u.1173718
V : Type u
V' : Type ?u.1173723
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
W : Submodule K V
hbot : W ≠ ⊥
v : V
hW : v ∈ W
hv : v ≠ 0
heq : ¬W = span K {v}
h : span K {v} ≤ W ∧ span K {v} ≠ W → v = 0
⊢ False

tactic: rcases h with ⟨v, ⟨hv, rfl⟩⟩
state_before: case refine'_2
ι : Type ?u.1173697
ι' : Type ?u.1173700
R : Type ?u.1173703
R₂ : Type ?u.1173706
K : Type u_1
M : Type ?u.1173712
M' : Type ?u.1173715
M'' : Type ?u.1173718
V : Type u
V' : Type ?u.1173723
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
W : Submodule K V
h : ∃ v x, W = span K {v}
⊢ IsAtom W

tactic: exact nonzero_span_atom v hv
state_before: case refine'_2.intro.intro
ι : Type ?u.1173697
ι' : Type ?u.1173700
R : Type ?u.1173703
R₂ : Type ?u.1173706
K : Type u_1
M : Type ?u.1173712
M' : Type ?u.1173715
M'' : Type ?u.1173718
V : Type u
V' : Type ?u.1173723
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
hv : v ≠ 0
⊢ IsAtom (span K {v})