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

tactic: let b := Basis.ofVectorSpace K V
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.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
⊢ Module.rank K V ≤ 1 ↔ ∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v

tactic: constructor
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.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
⊢ Module.rank K V ≤ 1 ↔ ∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v

tactic: intro hd
state_before: case mp
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
⊢ Module.rank K V ≤ 1 → ∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v

tactic: rw [← b.mk_eq_rank'', Cardinal.le_one_iff_subsingleton, subsingleton_coe] at hd
state_before: case mp
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
hd : Module.rank K V ≤ 1
⊢ ∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v

tactic: rcases eq_empty_or_nonempty (ofVectorSpaceIndex K V) with (hb | ⟨⟨v₀, hv₀⟩⟩)
state_before: case mp
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
hd : Set.Subsingleton (ofVectorSpaceIndex K V)
⊢ ∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v

tactic: use 0
state_before: case mp.inl
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
hd : Set.Subsingleton (ofVectorSpaceIndex K V)
hb : ofVectorSpaceIndex K V = ∅
⊢ ∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v

tactic: have h' : ∀ v : V, v = 0 := by simpa [hb, Submodule.eq_bot_iff] using b.span_eq.symm
state_before: case mp.inl
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
hd : Set.Subsingleton (ofVectorSpaceIndex K V)
hb : ofVectorSpaceIndex K V = ∅
⊢ ∀ (v : V), ∃ r, r • 0 = v

tactic: intro v
state_before: case mp.inl
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
hd : Set.Subsingleton (ofVectorSpaceIndex K V)
hb : ofVectorSpaceIndex K V = ∅
h' : ∀ (v : V), v = 0
⊢ ∀ (v : V), ∃ r, r • 0 = v

tactic: simp [h' v]
state_before: case mp.inl
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
hd : Set.Subsingleton (ofVectorSpaceIndex K V)
hb : ofVectorSpaceIndex K V = ∅
h' : ∀ (v : V), v = 0
v : V
⊢ ∃ r, r • 0 = v

tactic: simpa [hb, Submodule.eq_bot_iff] using b.span_eq.symm
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.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
hd : Set.Subsingleton (ofVectorSpaceIndex K V)
hb : ofVectorSpaceIndex K V = ∅
⊢ ∀ (v : V), v = 0

tactic: use v₀
state_before: case mp.inr.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.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
hd : Set.Subsingleton (ofVectorSpaceIndex K V)
v₀ : V
hv₀ : v₀ ∈ ofVectorSpaceIndex K V
⊢ ∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v

tactic: have h' : (K ∙ v₀) = ⊤ := by simpa [hd.eq_singleton_of_mem hv₀] using b.span_eq
state_before: case mp.inr.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.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
hd : Set.Subsingleton (ofVectorSpaceIndex K V)
v₀ : V
hv₀ : v₀ ∈ ofVectorSpaceIndex K V
⊢ ∀ (v : V), ∃ r, r • v₀ = v

tactic: intro v
state_before: case mp.inr.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.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
hd : Set.Subsingleton (ofVectorSpaceIndex K V)
v₀ : V
hv₀ : v₀ ∈ ofVectorSpaceIndex K V
h' : span K {v₀} = ⊤
⊢ ∀ (v : V), ∃ r, r • v₀ = v

tactic: have hv : v ∈ (⊤ : Submodule K V) := mem_top
state_before: case mp.inr.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.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
hd : Set.Subsingleton (ofVectorSpaceIndex K V)
v₀ : V
hv₀ : v₀ ∈ ofVectorSpaceIndex K V
h' : span K {v₀} = ⊤
v : V
⊢ ∃ r, r • v₀ = v

tactic: rwa [← h', mem_span_singleton] at hv
state_before: case mp.inr.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.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
hd : Set.Subsingleton (ofVectorSpaceIndex K V)
v₀ : V
hv₀ : v₀ ∈ ofVectorSpaceIndex K V
h' : span K {v₀} = ⊤
v : V
hv : v ∈ ⊤
⊢ ∃ r, r • v₀ = v

tactic: simpa [hd.eq_singleton_of_mem hv₀] using b.span_eq
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.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
hd : Set.Subsingleton (ofVectorSpaceIndex K V)
v₀ : V
hv₀ : v₀ ∈ ofVectorSpaceIndex K V
⊢ span K {v₀} = ⊤

tactic: rintro ⟨v₀, hv₀⟩
state_before: case mpr
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
⊢ (∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v) → Module.rank K V ≤ 1

tactic: have h : (K ∙ v₀) = ⊤ := by
  ext
  simp [mem_span_singleton, hv₀]
state_before: case mpr.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.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
v₀ : V
hv₀ : ∀ (v : V), ∃ r, r • v₀ = v
⊢ Module.rank K V ≤ 1

tactic: rw [← rank_top, ← h]
state_before: case mpr.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.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
v₀ : V
hv₀ : ∀ (v : V), ∃ r, r • v₀ = v
h : span K {v₀} = ⊤
⊢ Module.rank K V ≤ 1

tactic: refine' (rank_span_le _).trans_eq _
state_before: case mpr.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.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
v₀ : V
hv₀ : ∀ (v : V), ∃ r, r • v₀ = v
h : span K {v₀} = ⊤
⊢ Module.rank K { x // x ∈ span K {v₀} } ≤ 1

tactic: simp
state_before: case mpr.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.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
v₀ : V
hv₀ : ∀ (v : V), ∃ r, r • v₀ = v
h : span K {v₀} = ⊤
⊢ (#↑{v₀}) = 1

tactic: ext
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.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
v₀ : V
hv₀ : ∀ (v : V), ∃ r, r • v₀ = v
⊢ span K {v₀} = ⊤

tactic: simp [mem_span_singleton, hv₀]
state_before: case 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.1044072
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
b : Basis (↑(ofVectorSpaceIndex K V)) K V := ofVectorSpace K V
v₀ : V
hv₀ : ∀ (v : V), ∃ r, r • v₀ = v
x✝ : V
⊢ x✝ ∈ span K {v₀} ↔ x✝ ∈ ⊤