Theorem: collinear_iff_of_mem
File: Mathlib/LinearAlgebra/AffineSpace/FiniteDimensional.lean

tactic: simp_rw [collinear_iff_rank_le_one, rank_submodule_le_one_iff', Submodule.le_span_singleton_iff]
state_before: k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
⊢ Collinear k s ↔ ∃ v, ∀ (p : P), p ∈ s → ∃ r, p = r • v +ᵥ p₀

tactic: constructor
state_before: k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
⊢ (∃ v₀, ∀ (v : V), v ∈ vectorSpan k s → ∃ r, r • v₀ = v) ↔ ∃ v, ∀ (p : P), p ∈ s → ∃ r, p = r • v +ᵥ p₀

tactic: rintro ⟨v₀, hv⟩
state_before: case mp
k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
⊢ (∃ v₀, ∀ (v : V), v ∈ vectorSpan k s → ∃ r, r • v₀ = v) → ∃ v, ∀ (p : P), p ∈ s → ∃ r, p = r • v +ᵥ p₀

tactic: use v₀
state_before: case mp.intro
k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
v₀ : V
hv : ∀ (v : V), v ∈ vectorSpan k s → ∃ r, r • v₀ = v
⊢ ∃ v, ∀ (p : P), p ∈ s → ∃ r, p = r • v +ᵥ p₀

tactic: intro p hp
state_before: case mp.intro
k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
v₀ : V
hv : ∀ (v : V), v ∈ vectorSpan k s → ∃ r, r • v₀ = v
⊢ ∀ (p : P), p ∈ s → ∃ r, p = r • v₀ +ᵥ p₀

tactic: obtain ⟨r, hr⟩ := hv (p -ᵥ p₀) (vsub_mem_vectorSpan k hp h)
state_before: case mp.intro
k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
v₀ : V
hv : ∀ (v : V), v ∈ vectorSpan k s → ∃ r, r • v₀ = v
p : P
hp : p ∈ s
⊢ ∃ r, p = r • v₀ +ᵥ p₀

tactic: use r
state_before: case mp.intro.intro
k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
v₀ : V
hv : ∀ (v : V), v ∈ vectorSpan k s → ∃ r, r • v₀ = v
p : P
hp : p ∈ s
r : k
hr : r • v₀ = p -ᵥ p₀
⊢ ∃ r, p = r • v₀ +ᵥ p₀

tactic: rw [eq_vadd_iff_vsub_eq]
state_before: case mp.intro.intro
k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
v₀ : V
hv : ∀ (v : V), v ∈ vectorSpan k s → ∃ r, r • v₀ = v
p : P
hp : p ∈ s
r : k
hr : r • v₀ = p -ᵥ p₀
⊢ p = r • v₀ +ᵥ p₀

tactic: exact hr.symm
state_before: case mp.intro.intro
k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
v₀ : V
hv : ∀ (v : V), v ∈ vectorSpan k s → ∃ r, r • v₀ = v
p : P
hp : p ∈ s
r : k
hr : r • v₀ = p -ᵥ p₀
⊢ p -ᵥ p₀ = r • v₀

tactic: rintro ⟨v, hp₀v⟩
state_before: case mpr
k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
⊢ (∃ v, ∀ (p : P), p ∈ s → ∃ r, p = r • v +ᵥ p₀) → ∃ v₀, ∀ (v : V), v ∈ vectorSpan k s → ∃ r, r • v₀ = v

tactic: use v
state_before: case mpr.intro
k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
v : V
hp₀v : ∀ (p : P), p ∈ s → ∃ r, p = r • v +ᵥ p₀
⊢ ∃ v₀, ∀ (v : V), v ∈ vectorSpan k s → ∃ r, r • v₀ = v

tactic: intro w hw
state_before: case mpr.intro
k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
v : V
hp₀v : ∀ (p : P), p ∈ s → ∃ r, p = r • v +ᵥ p₀
⊢ ∀ (v_1 : V), v_1 ∈ vectorSpan k s → ∃ r, r • v = v_1

tactic: have hs : vectorSpan k s ≤ k ∙ v := by
  rw [vectorSpan_eq_span_vsub_set_right k h, Submodule.span_le, Set.subset_def]
  intro x hx
  rw [SetLike.mem_coe, Submodule.mem_span_singleton]
  rw [Set.mem_image] at hx
  rcases hx with ⟨p, hp, rfl⟩
  rcases hp₀v p hp with ⟨r, rfl⟩
  use r
  simp
state_before: case mpr.intro
k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
v : V
hp₀v : ∀ (p : P), p ∈ s → ∃ r, p = r • v +ᵥ p₀
w : V
hw : w ∈ vectorSpan k s
⊢ ∃ r, r • v = w

tactic: have hw' := SetLike.le_def.1 hs hw
state_before: case mpr.intro
k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
v : V
hp₀v : ∀ (p : P), p ∈ s → ∃ r, p = r • v +ᵥ p₀
w : V
hw : w ∈ vectorSpan k s
hs : vectorSpan k s ≤ Submodule.span k {v}
⊢ ∃ r, r • v = w

tactic: rwa [Submodule.mem_span_singleton] at hw'
state_before: case mpr.intro
k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
v : V
hp₀v : ∀ (p : P), p ∈ s → ∃ r, p = r • v +ᵥ p₀
w : V
hw : w ∈ vectorSpan k s
hs : vectorSpan k s ≤ Submodule.span k {v}
hw' : w ∈ Submodule.span k {v}
⊢ ∃ r, r • v = w

tactic: rw [vectorSpan_eq_span_vsub_set_right k h, Submodule.span_le, Set.subset_def]
state_before: k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
v : V
hp₀v : ∀ (p : P), p ∈ s → ∃ r, p = r • v +ᵥ p₀
w : V
hw : w ∈ vectorSpan k s
⊢ vectorSpan k s ≤ Submodule.span k {v}

tactic: intro x hx
state_before: k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
v : V
hp₀v : ∀ (p : P), p ∈ s → ∃ r, p = r • v +ᵥ p₀
w : V
hw : w ∈ vectorSpan k s
⊢ ∀ (x : V), x ∈ (fun x => x -ᵥ p₀) '' s → x ∈ ↑(Submodule.span k {v})

tactic: rw [SetLike.mem_coe, Submodule.mem_span_singleton]
state_before: k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
v : V
hp₀v : ∀ (p : P), p ∈ s → ∃ r, p = r • v +ᵥ p₀
w : V
hw : w ∈ vectorSpan k s
x : V
hx : x ∈ (fun x => x -ᵥ p₀) '' s
⊢ x ∈ ↑(Submodule.span k {v})

tactic: rw [Set.mem_image] at hx
state_before: k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
v : V
hp₀v : ∀ (p : P), p ∈ s → ∃ r, p = r • v +ᵥ p₀
w : V
hw : w ∈ vectorSpan k s
x : V
hx : x ∈ (fun x => x -ᵥ p₀) '' s
⊢ ∃ a, a • v = x

tactic: rcases hx with ⟨p, hp, rfl⟩
state_before: k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
v : V
hp₀v : ∀ (p : P), p ∈ s → ∃ r, p = r • v +ᵥ p₀
w : V
hw : w ∈ vectorSpan k s
x : V
hx : ∃ x_1, x_1 ∈ s ∧ x_1 -ᵥ p₀ = x
⊢ ∃ a, a • v = x

tactic: rcases hp₀v p hp with ⟨r, rfl⟩
state_before: case intro.intro
k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
v : V
hp₀v : ∀ (p : P), p ∈ s → ∃ r, p = r • v +ᵥ p₀
w : V
hw : w ∈ vectorSpan k s
p : P
hp : p ∈ s
⊢ ∃ a, a • v = p -ᵥ p₀

tactic: use r
state_before: case intro.intro.intro
k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
v : V
hp₀v : ∀ (p : P), p ∈ s → ∃ r, p = r • v +ᵥ p₀
w : V
hw : w ∈ vectorSpan k s
r : k
hp : r • v +ᵥ p₀ ∈ s
⊢ ∃ a, a • v = r • v +ᵥ p₀ -ᵥ p₀

tactic: simp
state_before: case intro.intro.intro
k : Type u_2
V : Type u_3
P : Type u_1
ι : Type ?u.250748
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : Set P
p₀ : P
h : p₀ ∈ s
v : V
hp₀v : ∀ (p : P), p ∈ s → ∃ r, p = r • v +ᵥ p₀
w : V
hw : w ∈ vectorSpan k s
r : k
hp : r • v +ᵥ p₀ ∈ s
⊢ r • v = r • v +ᵥ p₀ -ᵥ p₀