-- 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
h : ∀ i ∈ s, x i ∈ (convexHull 𝕜) (t i)
⊢ x ∈ (convexHull 𝕜) (s.pi t)

Tactic:
cases nonempty_fintype ι

Result:
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)

Proof state:
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
i : ι
x✝ : i ∈ Set.univ
⊢ x i ∈ (convexHull 𝕜) (if i ∈ s then t i else Set.univ)

Tactic:
split_ifs with hi

Result:
case pos
𝕜 : 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 𝕜) (t i)

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

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),
    (fun g x => ↑g) a ha ∈ piFinset fun k => if hk : k = i then ⋯ ▸ {j} else Finset.univ

Tactic:
aesop

Result:
no goals

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 : ι
⊢ (∑ i : (i : ι) → κ i, (fun k => ∏ i : ι, w i (k i)) i • (fun g i => f i (g i)) i) i = x i

Tactic:
calc
  _ = ∑ g : ∀ i, κ i, (∏ i, w i (g i)) • f i (g i) := by
    simp only [Finset.sum_apply, Pi.smul_apply]
  _ = ∑ j : κ i, ∑ g : {g : ∀ k, κ k // g i = j},
        (∏ k, w k (g.1 k)) • f i ((g : ∀ i, κ i) i) := by
    rw [← Fintype.sum_fiberwise fun g : ∀ k, κ k ↦ g i]
  _ = ∑ j : κ i, (∑ g : {g : ∀ k, κ k // g i = j}, ∏ k, w k (g.1 k)) • f i j := by
    simp_rw [sum_smul]
    congr! with j _ g _
    exact g.2
  _ = ∑ j : κ i, w i j • f i j := ?_
  _ = x i := hf _

Result:
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

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 : ι
⊢ ∑ g : (i : ι) → κ i, (∏ i : ι, w i (g i)) • f i (g i) =
    ∑ j : κ i, ∑ g : { g // g i = j }, (∏ k : ι, w k (↑g k)) • f i (↑g i)

Tactic:
rw [← Fintype.sum_fiberwise fun g : ∀ k, κ k ↦ g i]

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 ι
s : Set ι
t : (i : ι) → Set (E i)
h : ∀ i ∈ s, x i ∈ (convexHull 𝕜) (t i)
hs : s = Set.univ
⊢ x ∈ (convexHull 𝕜) (s.pi t)

Tactic:
subst hs

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 ∈ Set.univ, x i ∈ (convexHull 𝕜) (t i)
⊢ x ∈ (convexHull 𝕜) (Set.univ.pi t)

Proof state:
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 𝕜) (Set.univ.pi fun i => if i ∈ s then t i else Set.univ)

Tactic:
refine this (fun i _ ↦ ?_) rfl

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
i : ι
x✝ : i ∈ Set.univ
⊢ x i ∈ (convexHull 𝕜) (if i ∈ s then t i else Set.univ)