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

tactic: obtain ⟨κ, b⟩ := Module.Free.exists_basis (R := K) (M := V)
state_before: K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
⊢ Module.rank K V ≤ 1 ↔ ∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v
state_after: case intro.mk
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
⊢ Module.rank K V ≤ 1 ↔ ∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v

tactic: constructor
state_before: case intro.mk
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
⊢ Module.rank K V ≤ 1 ↔ ∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v
state_after: case intro.mk.mp
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
⊢ Module.rank K V ≤ 1 → ∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v

case intro.mk.mpr
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
⊢ (∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v) → Module.rank K V ≤ 1

tactic: intro hd
state_before: case intro.mk.mp
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
⊢ Module.rank K V ≤ 1 → ∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v
state_after: case intro.mk.mp
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Module.rank K V ≤ 1
⊢ ∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v

tactic: rw [← b.mk_eq_rank'', le_one_iff_subsingleton] at hd
state_before: case intro.mk.mp
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Module.rank K V ≤ 1
⊢ ∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v
state_after: case intro.mk.mp
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Subsingleton κ
⊢ ∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v

tactic: rcases isEmpty_or_nonempty κ with hb | ⟨⟨i⟩⟩
state_before: case intro.mk.mp
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Subsingleton κ
⊢ ∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v
state_after: case intro.mk.mp.inl
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Subsingleton κ
hb : IsEmpty κ
⊢ ∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v

case intro.mk.mp.inr.intro
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Subsingleton κ
i : κ
⊢ ∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v

tactic: use 0
state_before: case intro.mk.mp.inl
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Subsingleton κ
hb : IsEmpty κ
⊢ ∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v
state_after: case h
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Subsingleton κ
hb : IsEmpty κ
⊢ ∀ (v : V), ∃ r, r • 0 = v

tactic: have h' : ∀ v : V, v = 0 := by
  simpa [range_eq_empty, Submodule.eq_bot_iff] using b.span_eq.symm
state_before: case h
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Subsingleton κ
hb : IsEmpty κ
⊢ ∀ (v : V), ∃ r, r • 0 = v
state_after: case h
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Subsingleton κ
hb : IsEmpty κ
h' : ∀ (v : V), v = 0
⊢ ∀ (v : V), ∃ r, r • 0 = v

tactic: intro v
state_before: case h
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Subsingleton κ
hb : IsEmpty κ
h' : ∀ (v : V), v = 0
⊢ ∀ (v : V), ∃ r, r • 0 = v
state_after: case h
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Subsingleton κ
hb : IsEmpty κ
h' : ∀ (v : V), v = 0
v : V
⊢ ∃ r, r • 0 = v

tactic: simp [h' v]
state_before: case h
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Subsingleton κ
hb : IsEmpty κ
h' : ∀ (v : V), v = 0
v : V
⊢ ∃ r, r • 0 = v
state_after: no goals

tactic: simpa [range_eq_empty, Submodule.eq_bot_iff] using b.span_eq.symm
state_before: K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Subsingleton κ
hb : IsEmpty κ
⊢ ∀ (v : V), v = 0
state_after: no goals

tactic: use b i
state_before: case intro.mk.mp.inr.intro
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Subsingleton κ
i : κ
⊢ ∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v
state_after: case h
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Subsingleton κ
i : κ
⊢ ∀ (v : V), ∃ r, r • b i = v

tactic: have h' : (K ∙ b i) = ⊤ :=
  (subsingleton_range b).eq_singleton_of_mem (mem_range_self i) ▸ b.span_eq
state_before: case h
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Subsingleton κ
i : κ
⊢ ∀ (v : V), ∃ r, r • b i = v
state_after: case h
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Subsingleton κ
i : κ
h' : span K {b i} = ⊤
⊢ ∀ (v : V), ∃ r, r • b i = v

tactic: intro v
state_before: case h
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Subsingleton κ
i : κ
h' : span K {b i} = ⊤
⊢ ∀ (v : V), ∃ r, r • b i = v
state_after: case h
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Subsingleton κ
i : κ
h' : span K {b i} = ⊤
v : V
⊢ ∃ r, r • b i = v

tactic: have hv : v ∈ (⊤ : Submodule K V) := mem_top
state_before: case h
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Subsingleton κ
i : κ
h' : span K {b i} = ⊤
v : V
⊢ ∃ r, r • b i = v
state_after: case h
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Subsingleton κ
i : κ
h' : span K {b i} = ⊤
v : V
hv : v ∈ ⊤
⊢ ∃ r, r • b i = v

tactic: rwa [← h', mem_span_singleton] at hv
state_before: case h
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
hd : Subsingleton κ
i : κ
h' : span K {b i} = ⊤
v : V
hv : v ∈ ⊤
⊢ ∃ r, r • b i = v
state_after: no goals

tactic: rintro ⟨v₀, hv₀⟩
state_before: case intro.mk.mpr
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
⊢ (∃ v₀, ∀ (v : V), ∃ r, r • v₀ = v) → Module.rank K V ≤ 1
state_after: case intro.mk.mpr.intro
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
v₀ : V
hv₀ : ∀ (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 intro.mk.mpr.intro
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
v₀ : V
hv₀ : ∀ (v : V), ∃ r, r • v₀ = v
⊢ Module.rank K V ≤ 1
state_after: case intro.mk.mpr.intro
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
v₀ : V
hv₀ : ∀ (v : V), ∃ r, r • v₀ = v
h : span K {v₀} = ⊤
⊢ Module.rank K V ≤ 1

tactic: rw [← rank_top, ← h]
state_before: case intro.mk.mpr.intro
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
v₀ : V
hv₀ : ∀ (v : V), ∃ r, r • v₀ = v
h : span K {v₀} = ⊤
⊢ Module.rank K V ≤ 1
state_after: case intro.mk.mpr.intro
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
v₀ : V
hv₀ : ∀ (v : V), ∃ r, r • v₀ = v
h : span K {v₀} = ⊤
⊢ Module.rank K ↥(span K {v₀}) ≤ 1

tactic: refine (rank_span_le _).trans_eq ?_
state_before: case intro.mk.mpr.intro
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
v₀ : V
hv₀ : ∀ (v : V), ∃ r, r • v₀ = v
h : span K {v₀} = ⊤
⊢ Module.rank K ↥(span K {v₀}) ≤ 1
state_after: case intro.mk.mpr.intro
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
v₀ : V
hv₀ : ∀ (v : V), ∃ r, r • v₀ = v
h : span K {v₀} = ⊤
⊢ #↑{v₀} = 1

tactic: simp
state_before: case intro.mk.mpr.intro
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
v₀ : V
hv₀ : ∀ (v : V), ∃ r, r • v₀ = v
h : span K {v₀} = ⊤
⊢ #↑{v₀} = 1
state_after: no goals

tactic: ext
state_before: K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
v₀ : V
hv₀ : ∀ (v : V), ∃ r, r • v₀ = v
⊢ span K {v₀} = ⊤
state_after: case h
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
v₀ : V
hv₀ : ∀ (v : V), ∃ r, r • v₀ = v
x✝ : V
⊢ x✝ ∈ span K {v₀} ↔ x✝ ∈ ⊤

tactic: simp [mem_span_singleton, hv₀]
state_before: case h
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Module.Free K V
κ : Type v
b : Basis κ K V
v₀ : V
hv₀ : ∀ (v : V), ∃ r, r • v₀ = v
x✝ : V
⊢ x✝ ∈ span K {v₀} ↔ x✝ ∈ ⊤
state_after: no goals