Theorem: mem_convexHull_pi
File: Mathlib/Analysis/Convex/Combination.lean

Proof steps:
state_before: 𝕜 : 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)
state_after: 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: cases nonempty_fintype ι
state_before: 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)
state_after: 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)
tactic: wlog hs : s = Set.univ generalizing s t
state_before: 𝕜 : 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)
state_after: 𝕜 : 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: subst hs
state_before: 𝕜 : 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)
state_after: 𝕜 : 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)
tactic: simp only [Set.mem_univ, mem_convexHull_iff_exists_fintype, true_implies, Set.mem_pi] at h
state_before: 𝕜 : 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)
state_after: 𝕜 : 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
⊢ x ∈ (convexHull 𝕜) (Set.univ.pi t)
tactic: choose κ _ w f hw₀ hw₁ hft hf using h
state_before: 𝕜 : 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
⊢ x ∈ (convexHull 𝕜) (Set.univ.pi t)
state_after: case refine_1
𝕜 : 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, (fun k => ∏ i : ι, w i (k i)) i = 1

case refine_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 : (i : ι) → κ i, (fun k => ∏ i : ι, w i (k i)) i • (fun g i => f i (g i)) i = x
tactic: refine mem_convexHull_of_exists_fintype (fun k : Π i, κ i ↦ ∏ i, w i (k i)) (fun g i ↦ f _ (g i))
    (fun g ↦ prod_nonneg fun _ _ ↦ hw₀ _ _) ?_ (fun _ _ _ ↦ hft _ _) ?_
state_before: case refine_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 : (i : ι) → κ i, (fun k => ∏ i : ι, w i (k i)) i • (fun g i => f i (g i)) i = x
state_after: 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: ext i
state_before: 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
state_after: 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: 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 _
state_before: 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
state_after: 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
tactic: congr! with j _
state_before: 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
state_after: no goals
tactic: calc
    ∑ g : {g : ∀ k, κ k // g i = j}, ∏ k, w k (g.1 k)
      = ∑ g ∈ piFinset fun k ↦ if hk : k = i then hk ▸ {j} else univ, ∏ k, w k (g k) :=
      Finset.sum_bij' (fun g _ ↦ g) (fun g hg ↦ ⟨g, by simpa using mem_piFinset.1 hg i⟩)
        (by aesop) (by simp) (by simp) (by simp) (by simp)
    _ = w i j := by
      rw [← prod_univ_sum, ← prod_mul_prod_compl, Finset.prod_singleton, Finset.sum_eq_single,
        Finset.prod_eq_one, mul_one] <;> simp (config := { contextual := true }) [hw₁]