l3lab/ntp-mathlib huggingface dataset:
/-- A weak version of Carathéodory's theorem. -/
theorem convexHull_eq_union_convexHull_finite_subsets (s : Set E) :
    convexHull R s = ⋃ (t : Finset E) (w : ↑t ⊆ s), convexHull R ↑t := by
  refine' Subset.antisymm _ _
  · rw [_root_.convexHull_eq]
    rintro x ⟨ι, t, w, z, hw₀, hw₁, hz, rfl⟩
    

Proof state:
case refine'_1.intro.intro.intro.intro.intro.intro.intro
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι✝ : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s✝ : Set E
i j : ι✝
c : R
t✝ : Finset ι✝
w✝ : ι✝ → R
z✝ : ι✝ → E
s : Set E
ι : Type
t : Finset ι
w : ι → R
z : ι → E
hw₀ : ∀ i ∈ t, 0 ≤ w i
hw₁ : ∑ i in t, w i = 1
hz : ∀ i ∈ t, z i ∈ s
⊢ centerMass t w z ∈ ⋃ t, ⋃ (_ : ↑t ⊆ s), (convexHull R) ↑t

Next tactic:
simp only [mem_iUnion]
/-- A weak version of Carathéodory's theorem. -/
theorem convexHull_eq_union_convexHull_finite_subsets (s : Set E) :
    convexHull R s = ⋃ (t : Finset E) (w : ↑t ⊆ s), convexHull R ↑t := by
  refine' Subset.antisymm _ _
  · rw [_root_.convexHull_eq]
    rintro x ⟨ι, t, w, z, hw₀, hw₁, hz, rfl⟩
    simp only [mem_iUnion]
    

Proof state:
case refine'_1.intro.intro.intro.intro.intro.intro.intro
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι✝ : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s✝ : Set E
i j : ι✝
c : R
t✝ : Finset ι✝
w✝ : ι✝ → R
z✝ : ι✝ → E
s : Set E
ι : Type
t : Finset ι
w : ι → R
z : ι → E
hw₀ : ∀ i ∈ t, 0 ≤ w i
hw₁ : ∑ i in t, w i = 1
hz : ∀ i ∈ t, z i ∈ s
⊢ ∃ i, ∃ (_ : ↑i ⊆ s), centerMass t w z ∈ (convexHull R) ↑i

Next tactic:
refine' ⟨t.image z, _, _⟩
/-- A weak version of Carathéodory's theorem. -/
theorem convexHull_eq_union_convexHull_finite_subsets (s : Set E) :
    convexHull R s = ⋃ (t : Finset E) (w : ↑t ⊆ s), convexHull R ↑t := by
  refine' Subset.antisymm _ _
  · rw [_root_.convexHull_eq]
    rintro x ⟨ι, t, w, z, hw₀, hw₁, hz, rfl⟩
    simp only [mem_iUnion]
    refine' ⟨t.image z, _, _⟩
    · 

Proof state:
case refine'_1.intro.intro.intro.intro.intro.intro.intro.refine'_1
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι✝ : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s✝ : Set E
i j : ι✝
c : R
t✝ : Finset ι✝
w✝ : ι✝ → R
z✝ : ι✝ → E
s : Set E
ι : Type
t : Finset ι
w : ι → R
z : ι → E
hw₀ : ∀ i ∈ t, 0 ≤ w i
hw₁ : ∑ i in t, w i = 1
hz : ∀ i ∈ t, z i ∈ s
⊢ ↑(Finset.image z t) ⊆ s

Next tactic:
rw [coe_image, Set.image_subset_iff]
/-- A weak version of Carathéodory's theorem. -/
theorem convexHull_eq_union_convexHull_finite_subsets (s : Set E) :
    convexHull R s = ⋃ (t : Finset E) (w : ↑t ⊆ s), convexHull R ↑t := by
  refine' Subset.antisymm _ _
  · rw [_root_.convexHull_eq]
    rintro x ⟨ι, t, w, z, hw₀, hw₁, hz, rfl⟩
    simp only [mem_iUnion]
    refine' ⟨t.image z, _, _⟩
    · rw [coe_image, Set.image_subset_iff]
      

Proof state:
case refine'_1.intro.intro.intro.intro.intro.intro.intro.refine'_1
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι✝ : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s✝ : Set E
i j : ι✝
c : R
t✝ : Finset ι✝
w✝ : ι✝ → R
z✝ : ι✝ → E
s : Set E
ι : Type
t : Finset ι
w : ι → R
z : ι → E
hw₀ : ∀ i ∈ t, 0 ≤ w i
hw₁ : ∑ i in t, w i = 1
hz : ∀ i ∈ t, z i ∈ s
⊢ ↑t ⊆ z ⁻¹' s

Next tactic:
exact hz
/-- A weak version of Carathéodory's theorem. -/
theorem convexHull_eq_union_convexHull_finite_subsets (s : Set E) :
    convexHull R s = ⋃ (t : Finset E) (w : ↑t ⊆ s), convexHull R ↑t := by
  refine' Subset.antisymm _ _
  · rw [_root_.convexHull_eq]
    rintro x ⟨ι, t, w, z, hw₀, hw₁, hz, rfl⟩
    simp only [mem_iUnion]
    refine' ⟨t.image z, _, _⟩
    · rw [coe_image, Set.image_subset_iff]
      exact hz
    · 

Proof state:
case refine'_1.intro.intro.intro.intro.intro.intro.intro.refine'_2
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι✝ : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s✝ : Set E
i j : ι✝
c : R
t✝ : Finset ι✝
w✝ : ι✝ → R
z✝ : ι✝ → E
s : Set E
ι : Type
t : Finset ι
w : ι → R
z : ι → E
hw₀ : ∀ i ∈ t, 0 ≤ w i
hw₁ : ∑ i in t, w i = 1
hz : ∀ i ∈ t, z i ∈ s
⊢ centerMass t w z ∈ (convexHull R) ↑(Finset.image z t)

Next tactic:
apply t.centerMass_mem_convexHull hw₀
/-- A weak version of Carathéodory's theorem. -/
theorem convexHull_eq_union_convexHull_finite_subsets (s : Set E) :
    convexHull R s = ⋃ (t : Finset E) (w : ↑t ⊆ s), convexHull R ↑t := by
  refine' Subset.antisymm _ _
  · rw [_root_.convexHull_eq]
    rintro x ⟨ι, t, w, z, hw₀, hw₁, hz, rfl⟩
    simp only [mem_iUnion]
    refine' ⟨t.image z, _, _⟩
    · rw [coe_image, Set.image_subset_iff]
      exact hz
    · apply t.centerMass_mem_convexHull hw₀
      · 

Proof state:
case refine'_1.intro.intro.intro.intro.intro.intro.intro.refine'_2.hws
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι✝ : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s✝ : Set E
i j : ι✝
c : R
t✝ : Finset ι✝
w✝ : ι✝ → R
z✝ : ι✝ → E
s : Set E
ι : Type
t : Finset ι
w : ι → R
z : ι → E
hw₀ : ∀ i ∈ t, 0 ≤ w i
hw₁ : ∑ i in t, w i = 1
hz : ∀ i ∈ t, z i ∈ s
⊢ 0 < ∑ i in t, w i

Next tactic:
simp only [hw₁, zero_lt_one]
/-- A weak version of Carathéodory's theorem. -/
theorem convexHull_eq_union_convexHull_finite_subsets (s : Set E) :
    convexHull R s = ⋃ (t : Finset E) (w : ↑t ⊆ s), convexHull R ↑t := by
  refine' Subset.antisymm _ _
  · rw [_root_.convexHull_eq]
    rintro x ⟨ι, t, w, z, hw₀, hw₁, hz, rfl⟩
    simp only [mem_iUnion]
    refine' ⟨t.image z, _, _⟩
    · rw [coe_image, Set.image_subset_iff]
      exact hz
    · apply t.centerMass_mem_convexHull hw₀
      · simp only [hw₁, zero_lt_one]
      · 

Proof state:
case refine'_1.intro.intro.intro.intro.intro.intro.intro.refine'_2.hz
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι✝ : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s✝ : Set E
i j : ι✝
c : R
t✝ : Finset ι✝
w✝ : ι✝ → R
z✝ : ι✝ → E
s : Set E
ι : Type
t : Finset ι
w : ι → R
z : ι → E
hw₀ : ∀ i ∈ t, 0 ≤ w i
hw₁ : ∑ i in t, w i = 1
hz : ∀ i ∈ t, z i ∈ s
⊢ ∀ i ∈ t, z i ∈ ↑(Finset.image z t)

Next tactic:
exact fun i hi => Finset.mem_coe.2 (Finset.mem_image_of_mem _ hi)
/-- A weak version of Carathéodory's theorem. -/
theorem convexHull_eq_union_convexHull_finite_subsets (s : Set E) :
    convexHull R s = ⋃ (t : Finset E) (w : ↑t ⊆ s), convexHull R ↑t := by
  refine' Subset.antisymm _ _
  · rw [_root_.convexHull_eq]
    rintro x ⟨ι, t, w, z, hw₀, hw₁, hz, rfl⟩
    simp only [mem_iUnion]
    refine' ⟨t.image z, _, _⟩
    · rw [coe_image, Set.image_subset_iff]
      exact hz
    · apply t.centerMass_mem_convexHull hw₀
      · simp only [hw₁, zero_lt_one]
      · exact fun i hi => Finset.mem_coe.2 (Finset.mem_image_of_mem _ hi)
  · 

Proof state:
case refine'_2
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s✝ : Set E
i j : ι
c : R
t : Finset ι
w : ι → R
z : ι → E
s : Set E
⊢ ⋃ t, ⋃ (_ : ↑t ⊆ s), (convexHull R) ↑t ⊆ (convexHull R) s

Next tactic:
exact iUnion_subset fun i => iUnion_subset convexHull_mono
theorem mk_mem_convexHull_prod {t : Set F} {x : E} {y : F} (hx : x ∈ convexHull R s)
    (hy : y ∈ convexHull R t) : (x, y) ∈ convexHull R (s ×ˢ t) := by
  

Proof state:
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s : Set E
i j : ι
c : R
t✝ : Finset ι
w : ι → R
z : ι → E
t : Set F
x : E
y : F
hx : x ∈ (convexHull R) s
hy : y ∈ (convexHull R) t
⊢ (x, y) ∈ (convexHull R) (s ×ˢ t)

Next tactic:
rw [_root_.convexHull_eq] at hx hy ⊢
theorem mk_mem_convexHull_prod {t : Set F} {x : E} {y : F} (hx : x ∈ convexHull R s)
    (hy : y ∈ convexHull R t) : (x, y) ∈ convexHull R (s ×ˢ t) := by
  rw [_root_.convexHull_eq] at hx hy ⊢
  

Proof state:
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s : Set E
i j : ι
c : R
t✝ : Finset ι
w : ι → R
z : ι → E
t : Set F
x : E
y : F
hx : x ∈ {x | ∃ ι t w z, (∀ i ∈ t, 0 ≤ w i) ∧ ∑ i in t, w i = 1 ∧ (∀ i ∈ t, z i ∈ s) ∧ centerMass t w z = x}
hy : y ∈ {x | ∃ ι t_1 w z, (∀ i ∈ t_1, 0 ≤ w i) ∧ ∑ i in t_1, w i = 1 ∧ (∀ i ∈ t_1, z i ∈ t) ∧ centerMass t_1 w z = x}
⊢ (x, y) ∈
    {x | ∃ ι t_1 w z, (∀ i ∈ t_1, 0 ≤ w i) ∧ ∑ i in t_1, w i = 1 ∧ (∀ i ∈ t_1, z i ∈ s ×ˢ t) ∧ centerMass t_1 w z = x}

Next tactic:
obtain ⟨ι, a, w, S, hw, hw', hS, hSp⟩ := hx
theorem mk_mem_convexHull_prod {t : Set F} {x : E} {y : F} (hx : x ∈ convexHull R s)
    (hy : y ∈ convexHull R t) : (x, y) ∈ convexHull R (s ×ˢ t) := by
  rw [_root_.convexHull_eq] at hx hy ⊢
  obtain ⟨ι, a, w, S, hw, hw', hS, hSp⟩ := hx
  

Proof state:
case intro.intro.intro.intro.intro.intro.intro
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι✝ : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s : Set E
i j : ι✝
c : R
t✝ : Finset ι✝
w✝ : ι✝ → R
z : ι✝ → E
t : Set F
x : E
y : F
hy : y ∈ {x | ∃ ι t_1 w z, (∀ i ∈ t_1, 0 ≤ w i) ∧ ∑ i in t_1, w i = 1 ∧ (∀ i ∈ t_1, z i ∈ t) ∧ centerMass t_1 w z = x}
ι : Type
a : Finset ι
w : ι → R
S : ι → E
hw : ∀ i ∈ a, 0 ≤ w i
hw' : ∑ i in a, w i = 1
hS : ∀ i ∈ a, S i ∈ s
hSp : centerMass a w S = x
⊢ (x, y) ∈
    {x | ∃ ι t_1 w z, (∀ i ∈ t_1, 0 ≤ w i) ∧ ∑ i in t_1, w i = 1 ∧ (∀ i ∈ t_1, z i ∈ s ×ˢ t) ∧ centerMass t_1 w z = x}

Next tactic:
obtain ⟨κ, b, v, T, hv, hv', hT, hTp⟩ := hy
theorem mk_mem_convexHull_prod {t : Set F} {x : E} {y : F} (hx : x ∈ convexHull R s)
    (hy : y ∈ convexHull R t) : (x, y) ∈ convexHull R (s ×ˢ t) := by
  rw [_root_.convexHull_eq] at hx hy ⊢
  obtain ⟨ι, a, w, S, hw, hw', hS, hSp⟩ := hx
  obtain ⟨κ, b, v, T, hv, hv', hT, hTp⟩ := hy
  

Proof state:
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι✝ : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s : Set E
i j : ι✝
c : R
t✝ : Finset ι✝
w✝ : ι✝ → R
z : ι✝ → E
t : Set F
x : E
y : F
ι : Type
a : Finset ι
w : ι → R
S : ι → E
hw : ∀ i ∈ a, 0 ≤ w i
hw' : ∑ i in a, w i = 1
hS : ∀ i ∈ a, S i ∈ s
hSp : centerMass a w S = x
κ : Type
b : Finset κ
v : κ → R
T : κ → F
hv : ∀ i ∈ b, 0 ≤ v i
hv' : ∑ i in b, v i = 1
hT : ∀ i ∈ b, T i ∈ t
hTp : centerMass b v T = y
⊢ (x, y) ∈
    {x | ∃ ι t_1 w z, (∀ i ∈ t_1, 0 ≤ w i) ∧ ∑ i in t_1, w i = 1 ∧ (∀ i ∈ t_1, z i ∈ s ×ˢ t) ∧ centerMass t_1 w z = x}

Next tactic:
have h_sum : ∑ i : ι × κ in a ×ˢ b, w i.fst * v i.snd = 1 := by
    rw [Finset.sum_product, ← hw']
    congr
    ext i
    have : ∑ y : κ in b, w i * v y = ∑ y : κ in b, v y * w i := by
      congr
      ext
      simp [mul_comm]
    rw [this, ← Finset.sum_mul, hv']
    simp
theorem mk_mem_convexHull_prod {t : Set F} {x : E} {y : F} (hx : x ∈ convexHull R s)
    (hy : y ∈ convexHull R t) : (x, y) ∈ convexHull R (s ×ˢ t) := by
  rw [_root_.convexHull_eq] at hx hy ⊢
  obtain ⟨ι, a, w, S, hw, hw', hS, hSp⟩ := hx
  obtain ⟨κ, b, v, T, hv, hv', hT, hTp⟩ := hy
  have h_sum : ∑ i : ι × κ in a ×ˢ b, w i.fst * v i.snd = 1 := by
    

Proof state:
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι✝ : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s : Set E
i j : ι✝
c : R
t✝ : Finset ι✝
w✝ : ι✝ → R
z : ι✝ → E
t : Set F
x : E
y : F
ι : Type
a : Finset ι
w : ι → R
S : ι → E
hw : ∀ i ∈ a, 0 ≤ w i
hw' : ∑ i in a, w i = 1
hS : ∀ i ∈ a, S i ∈ s
hSp : centerMass a w S = x
κ : Type
b : Finset κ
v : κ → R
T : κ → F
hv : ∀ i ∈ b, 0 ≤ v i
hv' : ∑ i in b, v i = 1
hT : ∀ i ∈ b, T i ∈ t
hTp : centerMass b v T = y
⊢ ∑ i in a ×ˢ b, w i.1 * v i.2 = 1

Next tactic:
rw [Finset.sum_product, ← hw']
theorem mk_mem_convexHull_prod {t : Set F} {x : E} {y : F} (hx : x ∈ convexHull R s)
    (hy : y ∈ convexHull R t) : (x, y) ∈ convexHull R (s ×ˢ t) := by
  rw [_root_.convexHull_eq] at hx hy ⊢
  obtain ⟨ι, a, w, S, hw, hw', hS, hSp⟩ := hx
  obtain ⟨κ, b, v, T, hv, hv', hT, hTp⟩ := hy
  have h_sum : ∑ i : ι × κ in a ×ˢ b, w i.fst * v i.snd = 1 := by
    rw [Finset.sum_product, ← hw']
    

Proof state:
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι✝ : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s : Set E
i j : ι✝
c : R
t✝ : Finset ι✝
w✝ : ι✝ → R
z : ι✝ → E
t : Set F
x : E
y : F
ι : Type
a : Finset ι
w : ι → R
S : ι → E
hw : ∀ i ∈ a, 0 ≤ w i
hw' : ∑ i in a, w i = 1
hS : ∀ i ∈ a, S i ∈ s
hSp : centerMass a w S = x
κ : Type
b : Finset κ
v : κ → R
T : κ → F
hv : ∀ i ∈ b, 0 ≤ v i
hv' : ∑ i in b, v i = 1
hT : ∀ i ∈ b, T i ∈ t
hTp : centerMass b v T = y
⊢ ∑ x in a, ∑ y in b, w (x, y).1 * v (x, y).2 = ∑ i in a, w i

Next tactic:
congr
theorem mk_mem_convexHull_prod {t : Set F} {x : E} {y : F} (hx : x ∈ convexHull R s)
    (hy : y ∈ convexHull R t) : (x, y) ∈ convexHull R (s ×ˢ t) := by
  rw [_root_.convexHull_eq] at hx hy ⊢
  obtain ⟨ι, a, w, S, hw, hw', hS, hSp⟩ := hx
  obtain ⟨κ, b, v, T, hv, hv', hT, hTp⟩ := hy
  have h_sum : ∑ i : ι × κ in a ×ˢ b, w i.fst * v i.snd = 1 := by
    rw [Finset.sum_product, ← hw']
    congr
    

Proof state:
case e_f
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι✝ : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s : Set E
i j : ι✝
c : R
t✝ : Finset ι✝
w✝ : ι✝ → R
z : ι✝ → E
t : Set F
x : E
y : F
ι : Type
a : Finset ι
w : ι → R
S : ι → E
hw : ∀ i ∈ a, 0 ≤ w i
hw' : ∑ i in a, w i = 1
hS : ∀ i ∈ a, S i ∈ s
hSp : centerMass a w S = x
κ : Type
b : Finset κ
v : κ → R
T : κ → F
hv : ∀ i ∈ b, 0 ≤ v i
hv' : ∑ i in b, v i = 1
hT : ∀ i ∈ b, T i ∈ t
hTp : centerMass b v T = y
⊢ (fun x => ∑ y in b, w (x, y).1 * v (x, y).2) = fun i => w i

Next tactic:
ext i
theorem mk_mem_convexHull_prod {t : Set F} {x : E} {y : F} (hx : x ∈ convexHull R s)
    (hy : y ∈ convexHull R t) : (x, y) ∈ convexHull R (s ×ˢ t) := by
  rw [_root_.convexHull_eq] at hx hy ⊢
  obtain ⟨ι, a, w, S, hw, hw', hS, hSp⟩ := hx
  obtain ⟨κ, b, v, T, hv, hv', hT, hTp⟩ := hy
  have h_sum : ∑ i : ι × κ in a ×ˢ b, w i.fst * v i.snd = 1 := by
    rw [Finset.sum_product, ← hw']
    congr
    ext i
    

Proof state:
case e_f.h
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι✝ : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s : Set E
i✝ j : ι✝
c : R
t✝ : Finset ι✝
w✝ : ι✝ → R
z : ι✝ → E
t : Set F
x : E
y : F
ι : Type
a : Finset ι
w : ι → R
S : ι → E
hw : ∀ i ∈ a, 0 ≤ w i
hw' : ∑ i in a, w i = 1
hS : ∀ i ∈ a, S i ∈ s
hSp : centerMass a w S = x
κ : Type
b : Finset κ
v : κ → R
T : κ → F
hv : ∀ i ∈ b, 0 ≤ v i
hv' : ∑ i in b, v i = 1
hT : ∀ i ∈ b, T i ∈ t
hTp : centerMass b v T = y
i : ι
⊢ ∑ y in b, w (i, y).1 * v (i, y).2 = w i

Next tactic:
have : ∑ y : κ in b, w i * v y = ∑ y : κ in b, v y * w i := by
      congr
      ext
      simp [mul_comm]
theorem mk_mem_convexHull_prod {t : Set F} {x : E} {y : F} (hx : x ∈ convexHull R s)
    (hy : y ∈ convexHull R t) : (x, y) ∈ convexHull R (s ×ˢ t) := by
  rw [_root_.convexHull_eq] at hx hy ⊢
  obtain ⟨ι, a, w, S, hw, hw', hS, hSp⟩ := hx
  obtain ⟨κ, b, v, T, hv, hv', hT, hTp⟩ := hy
  have h_sum : ∑ i : ι × κ in a ×ˢ b, w i.fst * v i.snd = 1 := by
    rw [Finset.sum_product, ← hw']
    congr
    ext i
    have : ∑ y : κ in b, w i * v y = ∑ y : κ in b, v y * w i := by
      

Proof state:
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι✝ : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s : Set E
i✝ j : ι✝
c : R
t✝ : Finset ι✝
w✝ : ι✝ → R
z : ι✝ → E
t : Set F
x : E
y : F
ι : Type
a : Finset ι
w : ι → R
S : ι → E
hw : ∀ i ∈ a, 0 ≤ w i
hw' : ∑ i in a, w i = 1
hS : ∀ i ∈ a, S i ∈ s
hSp : centerMass a w S = x
κ : Type
b : Finset κ
v : κ → R
T : κ → F
hv : ∀ i ∈ b, 0 ≤ v i
hv' : ∑ i in b, v i = 1
hT : ∀ i ∈ b, T i ∈ t
hTp : centerMass b v T = y
i : ι
⊢ ∑ y in b, w i * v y = ∑ y in b, v y * w i

Next tactic:
congr
theorem mk_mem_convexHull_prod {t : Set F} {x : E} {y : F} (hx : x ∈ convexHull R s)
    (hy : y ∈ convexHull R t) : (x, y) ∈ convexHull R (s ×ˢ t) := by
  rw [_root_.convexHull_eq] at hx hy ⊢
  obtain ⟨ι, a, w, S, hw, hw', hS, hSp⟩ := hx
  obtain ⟨κ, b, v, T, hv, hv', hT, hTp⟩ := hy
  have h_sum : ∑ i : ι × κ in a ×ˢ b, w i.fst * v i.snd = 1 := by
    rw [Finset.sum_product, ← hw']
    congr
    ext i
    have : ∑ y : κ in b, w i * v y = ∑ y : κ in b, v y * w i := by
      congr
      

Proof state:
case e_f
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι✝ : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s : Set E
i✝ j : ι✝
c : R
t✝ : Finset ι✝
w✝ : ι✝ → R
z : ι✝ → E
t : Set F
x : E
y : F
ι : Type
a : Finset ι
w : ι → R
S : ι → E
hw : ∀ i ∈ a, 0 ≤ w i
hw' : ∑ i in a, w i = 1
hS : ∀ i ∈ a, S i ∈ s
hSp : centerMass a w S = x
κ : Type
b : Finset κ
v : κ → R
T : κ → F
hv : ∀ i ∈ b, 0 ≤ v i
hv' : ∑ i in b, v i = 1
hT : ∀ i ∈ b, T i ∈ t
hTp : centerMass b v T = y
i : ι
⊢ (fun y => w i * v y) = fun y => v y * w i

Next tactic:
ext
theorem mk_mem_convexHull_prod {t : Set F} {x : E} {y : F} (hx : x ∈ convexHull R s)
    (hy : y ∈ convexHull R t) : (x, y) ∈ convexHull R (s ×ˢ t) := by
  rw [_root_.convexHull_eq] at hx hy ⊢
  obtain ⟨ι, a, w, S, hw, hw', hS, hSp⟩ := hx
  obtain ⟨κ, b, v, T, hv, hv', hT, hTp⟩ := hy
  have h_sum : ∑ i : ι × κ in a ×ˢ b, w i.fst * v i.snd = 1 := by
    rw [Finset.sum_product, ← hw']
    congr
    ext i
    have : ∑ y : κ in b, w i * v y = ∑ y : κ in b, v y * w i := by
      congr
      ext
      

Proof state:
case e_f.h
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι✝ : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s : Set E
i✝ j : ι✝
c : R
t✝ : Finset ι✝
w✝ : ι✝ → R
z : ι✝ → E
t : Set F
x : E
y : F
ι : Type
a : Finset ι
w : ι → R
S : ι → E
hw : ∀ i ∈ a, 0 ≤ w i
hw' : ∑ i in a, w i = 1
hS : ∀ i ∈ a, S i ∈ s
hSp : centerMass a w S = x
κ : Type
b : Finset κ
v : κ → R
T : κ → F
hv : ∀ i ∈ b, 0 ≤ v i
hv' : ∑ i in b, v i = 1
hT : ∀ i ∈ b, T i ∈ t
hTp : centerMass b v T = y
i : ι
x✝ : κ
⊢ w i * v x✝ = v x✝ * w i

Next tactic:
simp [mul_comm]
theorem mk_mem_convexHull_prod {t : Set F} {x : E} {y : F} (hx : x ∈ convexHull R s)
    (hy : y ∈ convexHull R t) : (x, y) ∈ convexHull R (s ×ˢ t) := by
  rw [_root_.convexHull_eq] at hx hy ⊢
  obtain ⟨ι, a, w, S, hw, hw', hS, hSp⟩ := hx
  obtain ⟨κ, b, v, T, hv, hv', hT, hTp⟩ := hy
  have h_sum : ∑ i : ι × κ in a ×ˢ b, w i.fst * v i.snd = 1 := by
    rw [Finset.sum_product, ← hw']
    congr
    ext i
    have : ∑ y : κ in b, w i * v y = ∑ y : κ in b, v y * w i := by
      congr
      ext
      simp [mul_comm]
    

Proof state:
case e_f.h
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι✝ : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s : Set E
i✝ j : ι✝
c : R
t✝ : Finset ι✝
w✝ : ι✝ → R
z : ι✝ → E
t : Set F
x : E
y : F
ι : Type
a : Finset ι
w : ι → R
S : ι → E
hw : ∀ i ∈ a, 0 ≤ w i
hw' : ∑ i in a, w i = 1
hS : ∀ i ∈ a, S i ∈ s
hSp : centerMass a w S = x
κ : Type
b : Finset κ
v : κ → R
T : κ → F
hv : ∀ i ∈ b, 0 ≤ v i
hv' : ∑ i in b, v i = 1
hT : ∀ i ∈ b, T i ∈ t
hTp : centerMass b v T = y
i : ι
this : ∑ y in b, w i * v y = ∑ y in b, v y * w i
⊢ ∑ y in b, w (i, y).1 * v (i, y).2 = w i

Next tactic:
rw [this, ← Finset.sum_mul, hv']
theorem mk_mem_convexHull_prod {t : Set F} {x : E} {y : F} (hx : x ∈ convexHull R s)
    (hy : y ∈ convexHull R t) : (x, y) ∈ convexHull R (s ×ˢ t) := by
  rw [_root_.convexHull_eq] at hx hy ⊢
  obtain ⟨ι, a, w, S, hw, hw', hS, hSp⟩ := hx
  obtain ⟨κ, b, v, T, hv, hv', hT, hTp⟩ := hy
  have h_sum : ∑ i : ι × κ in a ×ˢ b, w i.fst * v i.snd = 1 := by
    rw [Finset.sum_product, ← hw']
    congr
    ext i
    have : ∑ y : κ in b, w i * v y = ∑ y : κ in b, v y * w i := by
      congr
      ext
      simp [mul_comm]
    rw [this, ← Finset.sum_mul, hv']
    

Proof state:
case e_f.h
R : Type u_1
R' : Type u_2
E : Type u_3
F : Type u_4
ι✝ : Type u_5
ι' : Type u_6
α : Type u_7
inst✝⁸ : LinearOrderedField R
inst✝⁷ : LinearOrderedField R'
inst✝⁶ : AddCommGroup E
inst✝⁵ : AddCommGroup F
inst✝⁴ : LinearOrderedAddCommGroup α
inst✝³ : Module R E
inst✝² : Module R F
inst✝¹ : Module R α
inst✝ : OrderedSMul R α
s : Set E
i✝ j : ι✝
c : R
t✝ : Finset ι✝
w✝ : ι✝ → R
z : ι✝ → E
t : Set F
x : E
y : F
ι : Type
a : Finset ι
w : ι → R
S : ι → E
hw : ∀ i ∈ a, 0 ≤ w i
hw' : ∑ i in a, w i = 1
hS : ∀ i ∈ a, S i ∈ s
hSp : centerMass a w S = x
κ : Type
b : Finset κ
v : κ → R
T : κ → F
hv : ∀ i ∈ b, 0 ≤ v i
hv' : ∑ i in b, v i = 1
hT : ∀ i ∈ b, T i ∈ t
hTp : centerMass b v T = y
i : ι
this : ∑ y in b, w i * v y = ∑ y in b, v y * w i
⊢ 1 * w i = w i

Next tactic:
simp