Theorem: exists_affineIndependent
File: Mathlib/LinearAlgebra/AffineSpace/Independent.lean

tactic: rcases s.eq_empty_or_nonempty with (rfl | ⟨p, hp⟩)
state_before: k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.401520
s : Set P
⊢ ∃ t x, affineSpan k t = affineSpan k s ∧ AffineIndependent k Subtype.val

tactic: obtain ⟨b, hb₁, hb₂, hb₃⟩ := exists_linearIndependent k ((Equiv.vaddConst p).symm '' s)
state_before: case inr.intro
k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.401520
s : Set P
p : P
hp : p ∈ s
⊢ ∃ t x, affineSpan k t = affineSpan k s ∧ AffineIndependent k Subtype.val

tactic: have hb₀ : ∀ v : V, v ∈ b → v ≠ 0 := fun v hv => hb₃.ne_zero (⟨v, hv⟩ : b)
state_before: case inr.intro.intro.intro.intro
k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.401520
s : Set P
p : P
hp : p ∈ s
b : Set V
hb₁ : b ⊆ ↑(Equiv.vaddConst p).symm '' s
hb₂ : Submodule.span k b = Submodule.span k (↑(Equiv.vaddConst p).symm '' s)
hb₃ : LinearIndependent k Subtype.val
⊢ ∃ t x, affineSpan k t = affineSpan k s ∧ AffineIndependent k Subtype.val

tactic: rw [linearIndependent_set_iff_affineIndependent_vadd_union_singleton k hb₀ p] at hb₃
state_before: case inr.intro.intro.intro.intro
k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.401520
s : Set P
p : P
hp : p ∈ s
b : Set V
hb₁ : b ⊆ ↑(Equiv.vaddConst p).symm '' s
hb₂ : Submodule.span k b = Submodule.span k (↑(Equiv.vaddConst p).symm '' s)
hb₃ : LinearIndependent k Subtype.val
hb₀ : ∀ (v : V), v ∈ b → v ≠ 0
⊢ ∃ t x, affineSpan k t = affineSpan k s ∧ AffineIndependent k Subtype.val

tactic: refine' ⟨{p} ∪ Equiv.vaddConst p '' b, _, _, hb₃⟩
state_before: case inr.intro.intro.intro.intro
k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.401520
s : Set P
p : P
hp : p ∈ s
b : Set V
hb₁ : b ⊆ ↑(Equiv.vaddConst p).symm '' s
hb₂ : Submodule.span k b = Submodule.span k (↑(Equiv.vaddConst p).symm '' s)
hb₃ : AffineIndependent k fun p_1 => ↑p_1
hb₀ : ∀ (v : V), v ∈ b → v ≠ 0
⊢ ∃ t x, affineSpan k t = affineSpan k s ∧ AffineIndependent k Subtype.val

tactic: exact ⟨∅, Set.empty_subset ∅, rfl, affineIndependent_of_subsingleton k _⟩
state_before: case inl
k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.401520
⊢ ∃ t x, affineSpan k t = affineSpan k ∅ ∧ AffineIndependent k Subtype.val

tactic: apply Set.union_subset (Set.singleton_subset_iff.mpr hp)
state_before: case inr.intro.intro.intro.intro.refine'_1
k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.401520
s : Set P
p : P
hp : p ∈ s
b : Set V
hb₁ : b ⊆ ↑(Equiv.vaddConst p).symm '' s
hb₂ : Submodule.span k b = Submodule.span k (↑(Equiv.vaddConst p).symm '' s)
hb₃ : AffineIndependent k fun p_1 => ↑p_1
hb₀ : ∀ (v : V), v ∈ b → v ≠ 0
⊢ {p} ∪ ↑(Equiv.vaddConst p) '' b ⊆ s

tactic: rwa [← (Equiv.vaddConst p).subset_image' b s]
state_before: case inr.intro.intro.intro.intro.refine'_1
k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.401520
s : Set P
p : P
hp : p ∈ s
b : Set V
hb₁ : b ⊆ ↑(Equiv.vaddConst p).symm '' s
hb₂ : Submodule.span k b = Submodule.span k (↑(Equiv.vaddConst p).symm '' s)
hb₃ : AffineIndependent k fun p_1 => ↑p_1
hb₀ : ∀ (v : V), v ∈ b → v ≠ 0
⊢ ↑(Equiv.vaddConst p) '' b ⊆ s

tactic: rw [Equiv.coe_vaddConst_symm, ← vectorSpan_eq_span_vsub_set_right k hp] at hb₂
state_before: case inr.intro.intro.intro.intro.refine'_2
k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.401520
s : Set P
p : P
hp : p ∈ s
b : Set V
hb₁ : b ⊆ ↑(Equiv.vaddConst p).symm '' s
hb₂ : Submodule.span k b = Submodule.span k (↑(Equiv.vaddConst p).symm '' s)
hb₃ : AffineIndependent k fun p_1 => ↑p_1
hb₀ : ∀ (v : V), v ∈ b → v ≠ 0
⊢ affineSpan k ({p} ∪ ↑(Equiv.vaddConst p) '' b) = affineSpan k s

tactic: apply AffineSubspace.ext_of_direction_eq
state_before: case inr.intro.intro.intro.intro.refine'_2
k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.401520
s : Set P
p : P
hp : p ∈ s
b : Set V
hb₁ : b ⊆ ↑(Equiv.vaddConst p).symm '' s
hb₂ : Submodule.span k b = vectorSpan k s
hb₃ : AffineIndependent k fun p_1 => ↑p_1
hb₀ : ∀ (v : V), v ∈ b → v ≠ 0
⊢ affineSpan k ({p} ∪ ↑(Equiv.vaddConst p) '' b) = affineSpan k s

tactic: have : Submodule.span k b = Submodule.span k (insert 0 b) := by simp
state_before: case inr.intro.intro.intro.intro.refine'_2.hd
k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.401520
s : Set P
p : P
hp : p ∈ s
b : Set V
hb₁ : b ⊆ ↑(Equiv.vaddConst p).symm '' s
hb₂ : Submodule.span k b = vectorSpan k s
hb₃ : AffineIndependent k fun p_1 => ↑p_1
hb₀ : ∀ (v : V), v ∈ b → v ≠ 0
⊢ AffineSubspace.direction (affineSpan k ({p} ∪ ↑(Equiv.vaddConst p) '' b)) = AffineSubspace.direction (affineSpan k s)

tactic: simp only [direction_affineSpan, ← hb₂, Equiv.coe_vaddConst, Set.singleton_union,
  vectorSpan_eq_span_vsub_set_right k (Set.mem_insert p _), this]
state_before: case inr.intro.intro.intro.intro.refine'_2.hd
k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.401520
s : Set P
p : P
hp : p ∈ s
b : Set V
hb₁ : b ⊆ ↑(Equiv.vaddConst p).symm '' s
hb₂ : Submodule.span k b = vectorSpan k s
hb₃ : AffineIndependent k fun p_1 => ↑p_1
hb₀ : ∀ (v : V), v ∈ b → v ≠ 0
this : Submodule.span k b = Submodule.span k (insert 0 b)
⊢ AffineSubspace.direction (affineSpan k ({p} ∪ ↑(Equiv.vaddConst p) '' b)) = AffineSubspace.direction (affineSpan k s)

tactic: congr
state_before: case inr.intro.intro.intro.intro.refine'_2.hd
k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.401520
s : Set P
p : P
hp : p ∈ s
b : Set V
hb₁ : b ⊆ ↑(Equiv.vaddConst p).symm '' s
hb₂ : Submodule.span k b = vectorSpan k s
hb₃ : AffineIndependent k fun p_1 => ↑p_1
hb₀ : ∀ (v : V), v ∈ b → v ≠ 0
this : Submodule.span k b = Submodule.span k (insert 0 b)
⊢ Submodule.span k ((fun x => x -ᵥ p) '' insert p ((fun a => a +ᵥ p) '' b)) = Submodule.span k (insert 0 b)

tactic: change (Equiv.vaddConst p).symm '' insert p (Equiv.vaddConst p '' b) = _
state_before: case inr.intro.intro.intro.intro.refine'_2.hd.e_s
k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.401520
s : Set P
p : P
hp : p ∈ s
b : Set V
hb₁ : b ⊆ ↑(Equiv.vaddConst p).symm '' s
hb₂ : Submodule.span k b = vectorSpan k s
hb₃ : AffineIndependent k fun p_1 => ↑p_1
hb₀ : ∀ (v : V), v ∈ b → v ≠ 0
this : Submodule.span k b = Submodule.span k (insert 0 b)
⊢ (fun x => x -ᵥ p) '' insert p ((fun a => a +ᵥ p) '' b) = insert 0 b

tactic: rw [Set.image_insert_eq, ← Set.image_comp]
state_before: case inr.intro.intro.intro.intro.refine'_2.hd.e_s
k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.401520
s : Set P
p : P
hp : p ∈ s
b : Set V
hb₁ : b ⊆ ↑(Equiv.vaddConst p).symm '' s
hb₂ : Submodule.span k b = vectorSpan k s
hb₃ : AffineIndependent k fun p_1 => ↑p_1
hb₀ : ∀ (v : V), v ∈ b → v ≠ 0
this : Submodule.span k b = Submodule.span k (insert 0 b)
⊢ ↑(Equiv.vaddConst p).symm '' insert p (↑(Equiv.vaddConst p) '' b) = insert 0 b

tactic: simp
state_before: case inr.intro.intro.intro.intro.refine'_2.hd.e_s
k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.401520
s : Set P
p : P
hp : p ∈ s
b : Set V
hb₁ : b ⊆ ↑(Equiv.vaddConst p).symm '' s
hb₂ : Submodule.span k b = vectorSpan k s
hb₃ : AffineIndependent k fun p_1 => ↑p_1
hb₀ : ∀ (v : V), v ∈ b → v ≠ 0
this : Submodule.span k b = Submodule.span k (insert 0 b)
⊢ insert (↑(Equiv.vaddConst p).symm p) (↑(Equiv.vaddConst p).symm ∘ ↑(Equiv.vaddConst p) '' b) = insert 0 b

tactic: simp
state_before: k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.401520
s : Set P
p : P
hp : p ∈ s
b : Set V
hb₁ : b ⊆ ↑(Equiv.vaddConst p).symm '' s
hb₂ : Submodule.span k b = vectorSpan k s
hb₃ : AffineIndependent k fun p_1 => ↑p_1
hb₀ : ∀ (v : V), v ∈ b → v ≠ 0
⊢ Submodule.span k b = Submodule.span k (insert 0 b)

tactic: use p
state_before: case inr.intro.intro.intro.intro.refine'_2.hn
k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.401520
s : Set P
p : P
hp : p ∈ s
b : Set V
hb₁ : b ⊆ ↑(Equiv.vaddConst p).symm '' s
hb₂ : Submodule.span k b = vectorSpan k s
hb₃ : AffineIndependent k fun p_1 => ↑p_1
hb₀ : ∀ (v : V), v ∈ b → v ≠ 0
⊢ Set.Nonempty (↑(affineSpan k ({p} ∪ ↑(Equiv.vaddConst p) '' b)) ∩ ↑(affineSpan k s))

tactic: simp only [Equiv.coe_vaddConst, Set.singleton_union, Set.mem_inter_iff, coe_affineSpan]
state_before: case inr.intro.intro.intro.intro.refine'_2.hn
k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.401520
s : Set P
p : P
hp : p ∈ s
b : Set V
hb₁ : b ⊆ ↑(Equiv.vaddConst p).symm '' s
hb₂ : Submodule.span k b = vectorSpan k s
hb₃ : AffineIndependent k fun p_1 => ↑p_1
hb₀ : ∀ (v : V), v ∈ b → v ≠ 0
⊢ p ∈ ↑(affineSpan k ({p} ∪ ↑(Equiv.vaddConst p) '' b)) ∩ ↑(affineSpan k s)

tactic: exact ⟨mem_spanPoints k _ _ (Set.mem_insert p _), mem_spanPoints k _ _ hp⟩
state_before: case inr.intro.intro.intro.intro.refine'_2.hn
k : Type u_2
V : Type u_3
P : Type u_1
inst✝³ : DivisionRing k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
ι : Type ?u.401520
s : Set P
p : P
hp : p ∈ s
b : Set V
hb₁ : b ⊆ ↑(Equiv.vaddConst p).symm '' s
hb₂ : Submodule.span k b = vectorSpan k s
hb₃ : AffineIndependent k fun p_1 => ↑p_1
hb₀ : ∀ (v : V), v ∈ b → v ≠ 0
⊢ p ∈ spanPoints k (insert p ((fun a => a +ᵥ p) '' b)) ∧ p ∈ spanPoints k s