Theorem: eq_pos_convex_span_of_mem_convexHull
File: Mathlib/Analysis/Convex/Caratheodory.lean

tactic: rw [convexHull_eq_union] at hx
state_before: 𝕜 : Type u_1
E : Type u
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s : Set E
x : E
hx : x ∈ ↑(convexHull 𝕜).toOrderHom s
⊢ ∃ ι x_1 z w x_2 x_3 x_4, ∑ i : ι, w i = 1 ∧ ∑ i : ι, w i • z i = x

tactic: simp only [exists_prop, Set.mem_iUnion] at hx
state_before: 𝕜 : Type u_1
E : Type u
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s : Set E
x : E
hx : x ∈ ⋃ (t : Finset E) (_ : ↑t ⊆ s) (_ : AffineIndependent 𝕜 Subtype.val), ↑(convexHull 𝕜).toOrderHom ↑t
⊢ ∃ ι x_1 z w x_2 x_3 x_4, ∑ i : ι, w i = 1 ∧ ∑ i : ι, w i • z i = x

tactic: obtain ⟨t, ht₁, ht₂, ht₃⟩ := hx
state_before: 𝕜 : Type u_1
E : Type u
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s : Set E
x : E
hx : ∃ i, ↑i ⊆ s ∧ AffineIndependent 𝕜 Subtype.val ∧ x ∈ ↑(convexHull 𝕜).toOrderHom ↑i
⊢ ∃ ι x_1 z w x_2 x_3 x_4, ∑ i : ι, w i = 1 ∧ ∑ i : ι, w i • z i = x

tactic: simp only [t.convexHull_eq, exists_prop, Set.mem_setOf_eq] at ht₃
state_before: case intro.intro.intro
𝕜 : Type u_1
E : Type u
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s : Set E
x : E
t : Finset E
ht₁ : ↑t ⊆ s
ht₂ : AffineIndependent 𝕜 Subtype.val
ht₃ : x ∈ ↑(convexHull 𝕜).toOrderHom ↑t
⊢ ∃ ι x_1 z w x_2 x_3 x_4, ∑ i : ι, w i = 1 ∧ ∑ i : ι, w i • z i = x

tactic: obtain ⟨w, hw₁, hw₂, hw₃⟩ := ht₃
state_before: case intro.intro.intro
𝕜 : Type u_1
E : Type u
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s : Set E
x : E
t : Finset E
ht₁ : ↑t ⊆ s
ht₂ : AffineIndependent 𝕜 Subtype.val
ht₃ : ∃ w, (∀ (y : E), y ∈ t → 0 ≤ w y) ∧ ∑ y in t, w y = 1 ∧ centerMass t w id = x
⊢ ∃ ι x_1 z w x_2 x_3 x_4, ∑ i : ι, w i = 1 ∧ ∑ i : ι, w i • z i = x

tactic: let t' := t.filter fun i => w i ≠ 0
state_before: case intro.intro.intro.intro.intro.intro
𝕜 : Type u_1
E : Type u
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s : Set E
x : E
t : Finset E
ht₁ : ↑t ⊆ s
ht₂ : AffineIndependent 𝕜 Subtype.val
w : E → 𝕜
hw₁ : ∀ (y : E), y ∈ t → 0 ≤ w y
hw₂ : ∑ y in t, w y = 1
hw₃ : centerMass t w id = x
⊢ ∃ ι x_1 z w x_2 x_3 x_4, ∑ i : ι, w i = 1 ∧ ∑ i : ι, w i • z i = x

tactic: refine' ⟨t', t'.fintypeCoeSort, ((↑) : t' → E), w ∘ ((↑) : t' → E), _, _, _, _, _⟩
state_before: case intro.intro.intro.intro.intro.intro
𝕜 : Type u_1
E : Type u
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s : Set E
x : E
t : Finset E
ht₁ : ↑t ⊆ s
ht₂ : AffineIndependent 𝕜 Subtype.val
w : E → 𝕜
hw₁ : ∀ (y : E), y ∈ t → 0 ≤ w y
hw₂ : ∑ y in t, w y = 1
hw₃ : centerMass t w id = x
t' : Finset E := filter (fun i => w i ≠ 0) t
⊢ ∃ ι x_1 z w x_2 x_3 x_4, ∑ i : ι, w i = 1 ∧ ∑ i : ι, w i • z i = x

tactic: rw [Subtype.range_coe_subtype]
state_before: case intro.intro.intro.intro.intro.intro.refine'_1
𝕜 : Type u_1
E : Type u
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s : Set E
x : E
t : Finset E
ht₁ : ↑t ⊆ s
ht₂ : AffineIndependent 𝕜 Subtype.val
w : E → 𝕜
hw₁ : ∀ (y : E), y ∈ t → 0 ≤ w y
hw₂ : ∑ y in t, w y = 1
hw₃ : centerMass t w id = x
t' : Finset E := filter (fun i => w i ≠ 0) t
⊢ Set.range Subtype.val ⊆ s

tactic: exact Subset.trans (Finset.filter_subset _ t) ht₁
state_before: case intro.intro.intro.intro.intro.intro.refine'_1
𝕜 : Type u_1
E : Type u
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s : Set E
x : E
t : Finset E
ht₁ : ↑t ⊆ s
ht₂ : AffineIndependent 𝕜 Subtype.val
w : E → 𝕜
hw₁ : ∀ (y : E), y ∈ t → 0 ≤ w y
hw₂ : ∑ y in t, w y = 1
hw₃ : centerMass t w id = x
t' : Finset E := filter (fun i => w i ≠ 0) t
⊢ {x | x ∈ t'} ⊆ s

tactic: exact ht₂.comp_embedding ⟨_, inclusion_injective (Finset.filter_subset (fun i => w i ≠ 0) t)⟩
state_before: case intro.intro.intro.intro.intro.intro.refine'_2
𝕜 : Type u_1
E : Type u
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s : Set E
x : E
t : Finset E
ht₁ : ↑t ⊆ s
ht₂ : AffineIndependent 𝕜 Subtype.val
w : E → 𝕜
hw₁ : ∀ (y : E), y ∈ t → 0 ≤ w y
hw₂ : ∑ y in t, w y = 1
hw₃ : centerMass t w id = x
t' : Finset E := filter (fun i => w i ≠ 0) t
⊢ AffineIndependent 𝕜 Subtype.val

tactic: exact fun i =>
  (hw₁ _ (Finset.mem_filter.mp i.2).1).lt_of_ne (Finset.mem_filter.mp i.property).2.symm
state_before: case intro.intro.intro.intro.intro.intro.refine'_3
𝕜 : Type u_1
E : Type u
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s : Set E
x : E
t : Finset E
ht₁ : ↑t ⊆ s
ht₂ : AffineIndependent 𝕜 Subtype.val
w : E → 𝕜
hw₁ : ∀ (y : E), y ∈ t → 0 ≤ w y
hw₂ : ∑ y in t, w y = 1
hw₃ : centerMass t w id = x
t' : Finset E := filter (fun i => w i ≠ 0) t
⊢ ∀ (i : { x // x ∈ t' }), 0 < (w ∘ Subtype.val) i

tactic: erw [Finset.sum_attach, Finset.sum_filter_ne_zero, hw₂]
state_before: case intro.intro.intro.intro.intro.intro.refine'_4
𝕜 : Type u_1
E : Type u
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s : Set E
x : E
t : Finset E
ht₁ : ↑t ⊆ s
ht₂ : AffineIndependent 𝕜 Subtype.val
w : E → 𝕜
hw₁ : ∀ (y : E), y ∈ t → 0 ≤ w y
hw₂ : ∑ y in t, w y = 1
hw₃ : centerMass t w id = x
t' : Finset E := filter (fun i => w i ≠ 0) t
⊢ ∑ i : { x // x ∈ t' }, (w ∘ Subtype.val) i = 1

tactic: change (∑ i : t' in t'.attach, (fun e => w e • e) ↑i) = x
state_before: case intro.intro.intro.intro.intro.intro.refine'_5
𝕜 : Type u_1
E : Type u
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s : Set E
x : E
t : Finset E
ht₁ : ↑t ⊆ s
ht₂ : AffineIndependent 𝕜 Subtype.val
w : E → 𝕜
hw₁ : ∀ (y : E), y ∈ t → 0 ≤ w y
hw₂ : ∑ y in t, w y = 1
hw₃ : centerMass t w id = x
t' : Finset E := filter (fun i => w i ≠ 0) t
⊢ ∑ i : { x // x ∈ t' }, (w ∘ Subtype.val) i • ↑i = x

tactic: erw [Finset.sum_attach (f := fun e => w e • e), Finset.sum_filter_of_ne]
state_before: case intro.intro.intro.intro.intro.intro.refine'_5
𝕜 : Type u_1
E : Type u
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s : Set E
x : E
t : Finset E
ht₁ : ↑t ⊆ s
ht₂ : AffineIndependent 𝕜 Subtype.val
w : E → 𝕜
hw₁ : ∀ (y : E), y ∈ t → 0 ≤ w y
hw₂ : ∑ y in t, w y = 1
hw₃ : centerMass t w id = x
t' : Finset E := filter (fun i => w i ≠ 0) t
⊢ ∑ i in attach t', (fun e => w e • e) ↑i = x

tactic: rw [t.centerMass_eq_of_sum_1 id hw₂] at hw₃
state_before: case intro.intro.intro.intro.intro.intro.refine'_5
𝕜 : Type u_1
E : Type u
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s : Set E
x : E
t : Finset E
ht₁ : ↑t ⊆ s
ht₂ : AffineIndependent 𝕜 Subtype.val
w : E → 𝕜
hw₁ : ∀ (y : E), y ∈ t → 0 ≤ w y
hw₂ : ∑ y in t, w y = 1
hw₃ : centerMass t w id = x
t' : Finset E := filter (fun i => w i ≠ 0) t
⊢ ∑ x in t, w x • x = x

tactic: exact hw₃
state_before: case intro.intro.intro.intro.intro.intro.refine'_5
𝕜 : Type u_1
E : Type u
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s : Set E
x : E
t : Finset E
ht₁ : ↑t ⊆ s
ht₂ : AffineIndependent 𝕜 Subtype.val
w : E → 𝕜
hw₁ : ∀ (y : E), y ∈ t → 0 ≤ w y
hw₂ : ∑ y in t, w y = 1
hw₃ : ∑ i in t, w i • id i = x
t' : Finset E := filter (fun i => w i ≠ 0) t
⊢ ∑ x in t, w x • x = x

tactic: intro e _ hwe contra
state_before: case intro.intro.intro.intro.intro.intro.refine'_5
𝕜 : Type u_1
E : Type u
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s : Set E
x : E
t : Finset E
ht₁ : ↑t ⊆ s
ht₂ : AffineIndependent 𝕜 Subtype.val
w : E → 𝕜
hw₁ : ∀ (y : E), y ∈ t → 0 ≤ w y
hw₂ : ∑ y in t, w y = 1
hw₃ : centerMass t w id = x
t' : Finset E := filter (fun i => w i ≠ 0) t
⊢ ∀ (x : E), x ∈ t → w x • x ≠ 0 → w x ≠ 0

tactic: apply hwe
state_before: case intro.intro.intro.intro.intro.intro.refine'_5
𝕜 : Type u_1
E : Type u
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s : Set E
x : E
t : Finset E
ht₁ : ↑t ⊆ s
ht₂ : AffineIndependent 𝕜 Subtype.val
w : E → 𝕜
hw₁ : ∀ (y : E), y ∈ t → 0 ≤ w y
hw₂ : ∑ y in t, w y = 1
hw₃ : centerMass t w id = x
t' : Finset E := filter (fun i => w i ≠ 0) t
e : E
a✝ : e ∈ t
hwe : w e • e ≠ 0
contra : w e = 0
⊢ False

tactic: rw [contra, zero_smul]
state_before: case intro.intro.intro.intro.intro.intro.refine'_5
𝕜 : Type u_1
E : Type u
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s : Set E
x : E
t : Finset E
ht₁ : ↑t ⊆ s
ht₂ : AffineIndependent 𝕜 Subtype.val
w : E → 𝕜
hw₁ : ∀ (y : E), y ∈ t → 0 ≤ w y
hw₂ : ∑ y in t, w y = 1
hw₃ : centerMass t w id = x
t' : Finset E := filter (fun i => w i ≠ 0) t
e : E
a✝ : e ∈ t
hwe : w e • e ≠ 0
contra : w e = 0
⊢ w e • e = 0