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

tactic: simp_rw [rank_le_one_iff, le_span_singleton_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.1061352
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
s : Submodule K V
⊢ Module.rank K { x // x ∈ s } ≤ 1 ↔ ∃ v₀, v₀ ∈ s ∧ s ≤ span K {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.1061352
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
s : Submodule K V
⊢ (∃ v₀, ∀ (v : { x // x ∈ s }), ∃ r, r • v₀ = v) ↔ ∃ v₀, v₀ ∈ s ∧ ∀ (v : V), v ∈ s → ∃ r, r • v₀ = v

tactic: rintro ⟨⟨v₀, hv₀⟩, h⟩
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.1061352
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
s : Submodule K V
⊢ (∃ v₀, ∀ (v : { x // x ∈ s }), ∃ r, r • v₀ = v) → ∃ v₀, v₀ ∈ s ∧ ∀ (v : V), v ∈ s → ∃ r, r • v₀ = v

tactic: use v₀, hv₀
state_before: case mp.intro.mk
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1061352
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
s : Submodule K V
v₀ : V
hv₀ : v₀ ∈ s
h : ∀ (v : { x // x ∈ s }), ∃ r, r • { val := v₀, property := hv₀ } = v
⊢ ∃ v₀, v₀ ∈ s ∧ ∀ (v : V), v ∈ s → ∃ r, r • v₀ = v

tactic: intro v hv
state_before: case mp.intro.mk
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1061352
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
s : Submodule K V
v₀ : V
hv₀ : v₀ ∈ s
h : ∀ (v : { x // x ∈ s }), ∃ r, r • { val := v₀, property := hv₀ } = v
⊢ ∀ (v : V), v ∈ s → ∃ r, r • v₀ = v

tactic: obtain ⟨r, hr⟩ := h ⟨v, hv⟩
state_before: case mp.intro.mk
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1061352
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
s : Submodule K V
v₀ : V
hv₀ : v₀ ∈ s
h : ∀ (v : { x // x ∈ s }), ∃ r, r • { val := v₀, property := hv₀ } = v
v : V
hv : v ∈ s
⊢ ∃ r, r • v₀ = v

tactic: use r
state_before: case mp.intro.mk.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.1061352
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
s : Submodule K V
v₀ : V
hv₀ : v₀ ∈ s
h : ∀ (v : { x // x ∈ s }), ∃ r, r • { val := v₀, property := hv₀ } = v
v : V
hv : v ∈ s
r : K
hr : r • { val := v₀, property := hv₀ } = { val := v, property := hv }
⊢ ∃ r, r • v₀ = v

tactic: simp_rw [Subtype.ext_iff, coe_smul] at hr
state_before: case mp.intro.mk.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.1061352
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
s : Submodule K V
v₀ : V
hv₀ : v₀ ∈ s
h : ∀ (v : { x // x ∈ s }), ∃ r, r • { val := v₀, property := hv₀ } = v
v : V
hv : v ∈ s
r : K
hr : r • { val := v₀, property := hv₀ } = { val := v, property := hv }
⊢ r • v₀ = v

tactic: exact hr
state_before: case mp.intro.mk.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.1061352
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
s : Submodule K V
v₀ : V
hv₀ : v₀ ∈ s
h : ∀ (v : { x // x ∈ s }), ∃ r, r • { val := v₀, property := hv₀ } = v
v : V
hv : v ∈ s
r : K
hr : r • v₀ = v
⊢ r • v₀ = v

tactic: rintro ⟨v₀, hv₀, h⟩
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.1061352
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
s : Submodule K V
⊢ (∃ v₀, v₀ ∈ s ∧ ∀ (v : V), v ∈ s → ∃ r, r • v₀ = v) → ∃ v₀, ∀ (v : { x // x ∈ s }), ∃ r, r • v₀ = v

tactic: use ⟨v₀, hv₀⟩
state_before: case mpr.intro.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.1061352
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
s : Submodule K V
v₀ : V
hv₀ : v₀ ∈ s
h : ∀ (v : V), v ∈ s → ∃ r, r • v₀ = v
⊢ ∃ v₀, ∀ (v : { x // x ∈ s }), ∃ r, r • v₀ = v

tactic: rintro ⟨v, hv⟩
state_before: case mpr.intro.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.1061352
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
s : Submodule K V
v₀ : V
hv₀ : v₀ ∈ s
h : ∀ (v : V), v ∈ s → ∃ r, r • v₀ = v
⊢ ∀ (v : { x // x ∈ s }), ∃ r, r • { val := v₀, property := hv₀ } = v

tactic: obtain ⟨r, hr⟩ := h v hv
state_before: case mpr.intro.intro.mk
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.1061352
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
s : Submodule K V
v₀ : V
hv₀ : v₀ ∈ s
h : ∀ (v : V), v ∈ s → ∃ r, r • v₀ = v
v : V
hv : v ∈ s
⊢ ∃ r, r • { val := v₀, property := hv₀ } = { val := v, property := hv }

tactic: use r
state_before: case mpr.intro.intro.mk.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.1061352
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
s : Submodule K V
v₀ : V
hv₀ : v₀ ∈ s
h : ∀ (v : V), v ∈ s → ∃ r, r • v₀ = v
v : V
hv : v ∈ s
r : K
hr : r • v₀ = v
⊢ ∃ r, r • { val := v₀, property := hv₀ } = { val := v, property := hv }

tactic: simp_rw [Subtype.ext_iff, coe_smul]
state_before: case mpr.intro.intro.mk.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.1061352
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
s : Submodule K V
v₀ : V
hv₀ : v₀ ∈ s
h : ∀ (v : V), v ∈ s → ∃ r, r • v₀ = v
v : V
hv : v ∈ s
r : K
hr : r • v₀ = v
⊢ r • { val := v₀, property := hv₀ } = { val := v, property := hv }

tactic: exact hr
state_before: case mpr.intro.intro.mk.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.1061352
inst✝⁶ : DivisionRing K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
inst✝³ : AddCommGroup V₁
inst✝² : Module K V₁
inst✝¹ : AddCommGroup V'
inst✝ : Module K V'
s : Submodule K V
v₀ : V
hv₀ : v₀ ∈ s
h : ∀ (v : V), v ∈ s → ∃ r, r • v₀ = v
v : V
hv : v ∈ s
r : K
hr : r • v₀ = v
⊢ r • v₀ = v