-- Mathlib/Analysis/Convex/Combination.lean
lemma mem_convexHull_pi (h : ∀ i ∈ s, x i ∈ convexHull 𝕜 (t i)) : x ∈ convexHull 𝕜 (s.pi t)

Proof state:
𝕜 : Type u_1
ι : Type u_2
E : ι → Type u_3
inst✝³ : Finite ι
inst✝² : LinearOrderedField 𝕜
inst✝¹ : (i : ι) → AddCommGroup (E i)
inst✝ : (i : ι) → Module 𝕜 (E i)
s : Set ι
t✝ : (i : ι) → Set (E i)
x : (i : ι) → E i
val✝ : Fintype ι
t : (i : ι) → Set (E i)
κ : ι → Type
x✝ : (i : ι) → Fintype (κ i)
w : (i : ι) → κ i → 𝕜
f : (i : ι) → κ i → E i
hw₀ : ∀ (i : ι) (i_1 : κ i), 0 ≤ w i i_1
hw₁ : ∀ (i : ι), ∑ i_1 : κ i, w i i_1 = 1
hft : ∀ (i : ι) (i_1 : κ i), f i i_1 ∈ t i
hf : ∀ (i : ι), ∑ i_1 : κ i, w i i_1 • f i i_1 = x i
i : ι
j : κ i
a✝ : j ∈ Finset.univ
⊢ ∀ (a : (a : ι) → κ a) (ha : a ∈ piFinset fun k => if hk : k = i then ⋯ ▸ {j} else Finset.univ),
    (fun g hg => ⟨g, ⋯⟩) a ha ∈ Finset.univ

Tactic:
simp

Result:
no goals

Proof state:
𝕜 : Type u_1
ι : Type u_2
E : ι → Type u_3
inst✝³ : Finite ι
inst✝² : LinearOrderedField 𝕜
inst✝¹ : (i : ι) → AddCommGroup (E i)
inst✝ : (i : ι) → Module 𝕜 (E i)
s : Set ι
t✝ : (i : ι) → Set (E i)
x : (i : ι) → E i
val✝ : Fintype ι
t : (i : ι) → Set (E i)
κ : ι → Type
x✝ : (i : ι) → Fintype (κ i)
w : (i : ι) → κ i → 𝕜
f : (i : ι) → κ i → E i
hw₀ : ∀ (i : ι) (i_1 : κ i), 0 ≤ w i i_1
hw₁ : ∀ (i : ι), ∑ i_1 : κ i, w i i_1 = 1
hft : ∀ (i : ι) (i_1 : κ i), f i i_1 ∈ t i
hf : ∀ (i : ι), ∑ i_1 : κ i, w i i_1 • f i i_1 = x i
i : ι
⊢ (∑ i : (i : ι) → κ i, (fun k => ∏ i : ι, w i (k i)) i • (fun g i => f i (g i)) i) i =
    ∑ g : (i : ι) → κ i, (∏ i : ι, w i (g i)) • f i (g i)

Tactic:
simp only [Finset.sum_apply, Pi.smul_apply]

Result:
no goals

Proof state:
case neg
𝕜 : Type u_1
ι : Type u_2
E : ι → Type u_3
inst✝³ : Finite ι
inst✝² : LinearOrderedField 𝕜
inst✝¹ : (i : ι) → AddCommGroup (E i)
inst✝ : (i : ι) → Module 𝕜 (E i)
s : Set ι
t : (i : ι) → Set (E i)
x : (i : ι) → E i
h : ∀ i ∈ s, x i ∈ (convexHull 𝕜) (t i)
val✝ : Fintype ι
this :
  ∀ {s : Set ι} {t : (i : ι) → Set (E i)},
    (∀ i ∈ s, x i ∈ (convexHull 𝕜) (t i)) → s = Set.univ → x ∈ (convexHull 𝕜) (s.pi t)
hs : ¬s = Set.univ
i : ι
x✝ : i ∈ Set.univ
hi : i ∉ s
⊢ x i ∈ (convexHull 𝕜) Set.univ

Tactic:
simp

Result:
no goals

Proof state:
𝕜 : Type u_1
ι : Type u_2
E : ι → Type u_3
inst✝³ : Finite ι
inst✝² : LinearOrderedField 𝕜
inst✝¹ : (i : ι) → AddCommGroup (E i)
inst✝ : (i : ι) → Module 𝕜 (E i)
s : Set ι
t✝ : (i : ι) → Set (E i)
x : (i : ι) → E i
val✝ : Fintype ι
t : (i : ι) → Set (E i)
κ : ι → Type
x✝ : (i : ι) → Fintype (κ i)
w : (i : ι) → κ i → 𝕜
f : (i : ι) → κ i → E i
hw₀ : ∀ (i : ι) (i_1 : κ i), 0 ≤ w i i_1
hw₁ : ∀ (i : ι), ∑ i_1 : κ i, w i i_1 = 1
hft : ∀ (i : ι) (i_1 : κ i), f i i_1 ∈ t i
hf : ∀ (i : ι), ∑ i_1 : κ i, w i i_1 • f i i_1 = x i
i : ι
j : κ i
a✝ : j ∈ Finset.univ
⊢ ∀ (a : { g // g i = j }) (ha : a ∈ Finset.univ), ∏ k : ι, w k (↑a k) = ∏ k : ι, w k ((fun g x => ↑g) a ha k)

Tactic:
simp

Result:
no goals

Proof state:
case intro
𝕜 : Type u_1
ι : Type u_2
E : ι → Type u_3
inst✝³ : Finite ι
inst✝² : LinearOrderedField 𝕜
inst✝¹ : (i : ι) → AddCommGroup (E i)
inst✝ : (i : ι) → Module 𝕜 (E i)
s : Set ι
t : (i : ι) → Set (E i)
x : (i : ι) → E i
h : ∀ i ∈ s, x i ∈ (convexHull 𝕜) (t i)
val✝ : Fintype ι
⊢ x ∈ (convexHull 𝕜) (s.pi t)

Tactic:
wlog hs : s = Set.univ generalizing s t

Result:
case intro.inr
𝕜 : Type u_1
ι : Type u_2
E : ι → Type u_3
inst✝³ : Finite ι
inst✝² : LinearOrderedField 𝕜
inst✝¹ : (i : ι) → AddCommGroup (E i)
inst✝ : (i : ι) → Module 𝕜 (E i)
s : Set ι
t : (i : ι) → Set (E i)
x : (i : ι) → E i
h : ∀ i ∈ s, x i ∈ (convexHull 𝕜) (t i)
val✝ : Fintype ι
this :
  ∀ {s : Set ι} {t : (i : ι) → Set (E i)},
    (∀ i ∈ s, x i ∈ (convexHull 𝕜) (t i)) → s = Set.univ → x ∈ (convexHull 𝕜) (s.pi t)
hs : ¬s = Set.univ
⊢ x ∈ (convexHull 𝕜) (s.pi t)

𝕜 : Type u_1
ι : Type u_2
E : ι → Type u_3
inst✝³ : Finite ι
inst✝² : LinearOrderedField 𝕜
inst✝¹ : (i : ι) → AddCommGroup (E i)
inst✝ : (i : ι) → Module 𝕜 (E i)
s✝ : Set ι
t✝ : (i : ι) → Set (E i)
x : (i : ι) → E i
val✝ : Fintype ι
s : Set ι
t : (i : ι) → Set (E i)
h : ∀ i ∈ s, x i ∈ (convexHull 𝕜) (t i)
hs : s = Set.univ
⊢ x ∈ (convexHull 𝕜) (s.pi t)

Proof state:
𝕜 : Type u_1
ι : Type u_2
E : ι → Type u_3
inst✝³ : Finite ι
inst✝² : LinearOrderedField 𝕜
inst✝¹ : (i : ι) → AddCommGroup (E i)
inst✝ : (i : ι) → Module 𝕜 (E i)
s : Set ι
t✝ : (i : ι) → Set (E i)
x : (i : ι) → E i
val✝ : Fintype ι
t : (i : ι) → Set (E i)
h : ∀ i ∈ Set.univ, x i ∈ (convexHull 𝕜) (t i)
⊢ x ∈ (convexHull 𝕜) (Set.univ.pi t)

Tactic:
simp only [Set.mem_univ, mem_convexHull_iff_exists_fintype, true_implies, Set.mem_pi] at h

Result:
𝕜 : Type u_1
ι : Type u_2
E : ι → Type u_3
inst✝³ : Finite ι
inst✝² : LinearOrderedField 𝕜
inst✝¹ : (i : ι) → AddCommGroup (E i)
inst✝ : (i : ι) → Module 𝕜 (E i)
s : Set ι
t✝ : (i : ι) → Set (E i)
x : (i : ι) → E i
val✝ : Fintype ι
t : (i : ι) → Set (E i)
h :
  ∀ (i : ι),
    ∃ ι x_1 w z, (∀ (i : ι), 0 ≤ w i) ∧ ∑ i : ι, w i = 1 ∧ (∀ (i_1 : ι), z i_1 ∈ t i) ∧ ∑ i_1 : ι, w i_1 • z i_1 = x i
⊢ x ∈ (convexHull 𝕜) (Set.univ.pi t)

Proof state:
𝕜 : Type u_1
ι : Type u_2
E : ι → Type u_3
inst✝³ : Finite ι
inst✝² : LinearOrderedField 𝕜
inst✝¹ : (i : ι) → AddCommGroup (E i)
inst✝ : (i : ι) → Module 𝕜 (E i)
s : Set ι
t✝ : (i : ι) → Set (E i)
x : (i : ι) → E i
val✝ : Fintype ι
t : (i : ι) → Set (E i)
κ : ι → Type
x✝ : (i : ι) → Fintype (κ i)
w : (i : ι) → κ i → 𝕜
f : (i : ι) → κ i → E i
hw₀ : ∀ (i : ι) (i_1 : κ i), 0 ≤ w i i_1
hw₁ : ∀ (i : ι), ∑ i_1 : κ i, w i i_1 = 1
hft : ∀ (i : ι) (i_1 : κ i), f i i_1 ∈ t i
hf : ∀ (i : ι), ∑ i_1 : κ i, w i i_1 • f i i_1 = x i
i : ι
⊢ ∑ j : κ i, ∑ g : { g // g i = j }, (∏ k : ι, w k (↑g k)) • f i (↑g i) =
    ∑ x : κ i, ∑ i_1 : { g // g i = x }, (∏ k : ι, w k (↑i_1 k)) • f i x

Tactic:
congr! with j _ g _

Result:
case a.a.h.e'_6.h.e'_2
𝕜 : Type u_1
ι : Type u_2
E : ι → Type u_3
inst✝³ : Finite ι
inst✝² : LinearOrderedField 𝕜
inst✝¹ : (i : ι) → AddCommGroup (E i)
inst✝ : (i : ι) → Module 𝕜 (E i)
s : Set ι
t✝ : (i : ι) → Set (E i)
x : (i : ι) → E i
val✝ : Fintype ι
t : (i : ι) → Set (E i)
κ : ι → Type
x✝ : (i : ι) → Fintype (κ i)
w : (i : ι) → κ i → 𝕜
f : (i : ι) → κ i → E i
hw₀ : ∀ (i : ι) (i_1 : κ i), 0 ≤ w i i_1
hw₁ : ∀ (i : ι), ∑ i_1 : κ i, w i i_1 = 1
hft : ∀ (i : ι) (i_1 : κ i), f i i_1 ∈ t i
hf : ∀ (i : ι), ∑ i_1 : κ i, w i i_1 • f i i_1 = x i
i : ι
j : κ i
a✝¹ : j ∈ Finset.univ
g : { g // g i = j }
a✝ : g ∈ Finset.univ
⊢ ↑g i = j

Proof state:
case refine_2.h
𝕜 : Type u_1
ι : Type u_2
E : ι → Type u_3
inst✝³ : Finite ι
inst✝² : LinearOrderedField 𝕜
inst✝¹ : (i : ι) → AddCommGroup (E i)
inst✝ : (i : ι) → Module 𝕜 (E i)
s : Set ι
t✝ : (i : ι) → Set (E i)
x : (i : ι) → E i
val✝ : Fintype ι
t : (i : ι) → Set (E i)
κ : ι → Type
x✝ : (i : ι) → Fintype (κ i)
w : (i : ι) → κ i → 𝕜
f : (i : ι) → κ i → E i
hw₀ : ∀ (i : ι) (i_1 : κ i), 0 ≤ w i i_1
hw₁ : ∀ (i : ι), ∑ i_1 : κ i, w i i_1 = 1
hft : ∀ (i : ι) (i_1 : κ i), f i i_1 ∈ t i
hf : ∀ (i : ι), ∑ i_1 : κ i, w i i_1 • f i i_1 = x i
i : ι
⊢ ∑ j : κ i, (∑ g : { g // g i = j }, ∏ k : ι, w k (↑g k)) • f i j = ∑ j : κ i, w i j • f i j

Tactic:
congr! with j _

Result:
case refine_2.h.a.h.e'_5
𝕜 : Type u_1
ι : Type u_2
E : ι → Type u_3
inst✝³ : Finite ι
inst✝² : LinearOrderedField 𝕜
inst✝¹ : (i : ι) → AddCommGroup (E i)
inst✝ : (i : ι) → Module 𝕜 (E i)
s : Set ι
t✝ : (i : ι) → Set (E i)
x : (i : ι) → E i
val✝ : Fintype ι
t : (i : ι) → Set (E i)
κ : ι → Type
x✝ : (i : ι) → Fintype (κ i)
w : (i : ι) → κ i → 𝕜
f : (i : ι) → κ i → E i
hw₀ : ∀ (i : ι) (i_1 : κ i), 0 ≤ w i i_1
hw₁ : ∀ (i : ι), ∑ i_1 : κ i, w i i_1 = 1
hft : ∀ (i : ι) (i_1 : κ i), f i i_1 ∈ t i
hf : ∀ (i : ι), ∑ i_1 : κ i, w i i_1 • f i i_1 = x i
i : ι
j : κ i
a✝ : j ∈ Finset.univ
⊢ ∑ g : { g // g i = j }, ∏ k : ι, w k (↑g k) = w i j