Theorem: AffineBasis.convexHull_eq_nonneg_coord
File: Mathlib/Analysis/Convex/Combination.lean

tactic: rw [convexHull_range_eq_exists_affineCombination]
state_before: R : Type u_2
E : Type u_3
F : Type ?u.476113
ι✝ : Type ?u.476116
ι' : Type ?u.476119
α : Type ?u.476122
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
inst✝ : Fintype ι✝
f : ι✝ → R
ι : Type u_1
b : AffineBasis ι R E
⊢ ↑(convexHull R).toOrderHom (Set.range ↑b) = {x | ∀ (i : ι), 0 ≤ ↑(coord b i) x}

tactic: ext x
state_before: R : Type u_2
E : Type u_3
F : Type ?u.476113
ι✝ : Type ?u.476116
ι' : Type ?u.476119
α : Type ?u.476122
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
inst✝ : Fintype ι✝
f : ι✝ → R
ι : Type u_1
b : AffineBasis ι R E
⊢ {x | ∃ s w x_1 x_2, ↑(affineCombination R s ↑b) w = x} = {x | ∀ (i : ι), 0 ≤ ↑(coord b i) x}

tactic: refine' ⟨_, fun hx => _⟩
state_before: case h
R : Type u_2
E : Type u_3
F : Type ?u.476113
ι✝ : Type ?u.476116
ι' : Type ?u.476119
α : Type ?u.476122
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
inst✝ : Fintype ι✝
f : ι✝ → R
ι : Type u_1
b : AffineBasis ι R E
x : E
⊢ x ∈ {x | ∃ s w x_1 x_2, ↑(affineCombination R s ↑b) w = x} ↔ x ∈ {x | ∀ (i : ι), 0 ≤ ↑(coord b i) x}

tactic: rintro ⟨s, w, hw₀, hw₁, rfl⟩ i
state_before: case h.refine'_1
R : Type u_2
E : Type u_3
F : Type ?u.476113
ι✝ : Type ?u.476116
ι' : Type ?u.476119
α : Type ?u.476122
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
inst✝ : Fintype ι✝
f : ι✝ → R
ι : Type u_1
b : AffineBasis ι R E
x : E
⊢ x ∈ {x | ∃ s w x_1 x_2, ↑(affineCombination R s ↑b) w = x} → x ∈ {x | ∀ (i : ι), 0 ≤ ↑(coord b i) x}

tactic: by_cases hi : i ∈ s
state_before: case h.refine'_1.intro.intro.intro.intro
R : Type u_2
E : Type u_3
F : Type ?u.476113
ι✝ : Type ?u.476116
ι' : Type ?u.476119
α : Type ?u.476122
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
inst✝ : Fintype ι✝
f : ι✝ → R
ι : Type u_1
b : AffineBasis ι R E
s : Finset ι
w : ι → R
hw₀ : ∀ (i : ι), i ∈ s → 0 ≤ w i
hw₁ : Finset.sum s w = 1
i : ι
⊢ 0 ≤ ↑(coord b i) (↑(affineCombination R s ↑b) w)

tactic: rw [b.coord_apply_combination_of_mem hi hw₁]
state_before: case pos
R : Type u_2
E : Type u_3
F : Type ?u.476113
ι✝ : Type ?u.476116
ι' : Type ?u.476119
α : Type ?u.476122
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
inst✝ : Fintype ι✝
f : ι✝ → R
ι : Type u_1
b : AffineBasis ι R E
s : Finset ι
w : ι → R
hw₀ : ∀ (i : ι), i ∈ s → 0 ≤ w i
hw₁ : Finset.sum s w = 1
i : ι
hi : i ∈ s
⊢ 0 ≤ ↑(coord b i) (↑(affineCombination R s ↑b) w)

tactic: exact hw₀ i hi
state_before: case pos
R : Type u_2
E : Type u_3
F : Type ?u.476113
ι✝ : Type ?u.476116
ι' : Type ?u.476119
α : Type ?u.476122
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
inst✝ : Fintype ι✝
f : ι✝ → R
ι : Type u_1
b : AffineBasis ι R E
s : Finset ι
w : ι → R
hw₀ : ∀ (i : ι), i ∈ s → 0 ≤ w i
hw₁ : Finset.sum s w = 1
i : ι
hi : i ∈ s
⊢ 0 ≤ w i

tactic: rw [b.coord_apply_combination_of_not_mem hi hw₁]
state_before: case neg
R : Type u_2
E : Type u_3
F : Type ?u.476113
ι✝ : Type ?u.476116
ι' : Type ?u.476119
α : Type ?u.476122
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
inst✝ : Fintype ι✝
f : ι✝ → R
ι : Type u_1
b : AffineBasis ι R E
s : Finset ι
w : ι → R
hw₀ : ∀ (i : ι), i ∈ s → 0 ≤ w i
hw₁ : Finset.sum s w = 1
i : ι
hi : ¬i ∈ s
⊢ 0 ≤ ↑(coord b i) (↑(affineCombination R s ↑b) w)

tactic: have hx' : x ∈ affineSpan R (range b) := by
  rw [b.tot]
  exact AffineSubspace.mem_top R E x
state_before: case h.refine'_2
R : Type u_2
E : Type u_3
F : Type ?u.476113
ι✝ : Type ?u.476116
ι' : Type ?u.476119
α : Type ?u.476122
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
inst✝ : Fintype ι✝
f : ι✝ → R
ι : Type u_1
b : AffineBasis ι R E
x : E
hx : x ∈ {x | ∀ (i : ι), 0 ≤ ↑(coord b i) x}
⊢ x ∈ {x | ∃ s w x_1 x_2, ↑(affineCombination R s ↑b) w = x}

tactic: obtain ⟨s, w, hw₁, rfl⟩ := (mem_affineSpan_iff_eq_affineCombination R E).mp hx'
state_before: case h.refine'_2
R : Type u_2
E : Type u_3
F : Type ?u.476113
ι✝ : Type ?u.476116
ι' : Type ?u.476119
α : Type ?u.476122
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
inst✝ : Fintype ι✝
f : ι✝ → R
ι : Type u_1
b : AffineBasis ι R E
x : E
hx : x ∈ {x | ∀ (i : ι), 0 ≤ ↑(coord b i) x}
hx' : x ∈ affineSpan R (Set.range ↑b)
⊢ x ∈ {x | ∃ s w x_1 x_2, ↑(affineCombination R s ↑b) w = x}

tactic: refine' ⟨s, w, _, hw₁, rfl⟩
state_before: case h.refine'_2.intro.intro.intro
R : Type u_2
E : Type u_3
F : Type ?u.476113
ι✝ : Type ?u.476116
ι' : Type ?u.476119
α : Type ?u.476122
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
inst✝ : Fintype ι✝
f : ι✝ → R
ι : Type u_1
b : AffineBasis ι R E
s : Finset ι
w : ι → R
hw₁ : ∑ i in s, w i = 1
hx : ↑(affineCombination R s ↑b) w ∈ {x | ∀ (i : ι), 0 ≤ ↑(coord b i) x}
hx' : ↑(affineCombination R s ↑b) w ∈ affineSpan R (Set.range ↑b)
⊢ ↑(affineCombination R s ↑b) w ∈ {x | ∃ s w x_1 x_2, ↑(affineCombination R s ↑b) w = x}

tactic: intro i hi
state_before: case h.refine'_2.intro.intro.intro
R : Type u_2
E : Type u_3
F : Type ?u.476113
ι✝ : Type ?u.476116
ι' : Type ?u.476119
α : Type ?u.476122
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
inst✝ : Fintype ι✝
f : ι✝ → R
ι : Type u_1
b : AffineBasis ι R E
s : Finset ι
w : ι → R
hw₁ : ∑ i in s, w i = 1
hx : ↑(affineCombination R s ↑b) w ∈ {x | ∀ (i : ι), 0 ≤ ↑(coord b i) x}
hx' : ↑(affineCombination R s ↑b) w ∈ affineSpan R (Set.range ↑b)
⊢ ∀ (i : ι), i ∈ s → 0 ≤ w i

tactic: specialize hx i
state_before: case h.refine'_2.intro.intro.intro
R : Type u_2
E : Type u_3
F : Type ?u.476113
ι✝ : Type ?u.476116
ι' : Type ?u.476119
α : Type ?u.476122
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
inst✝ : Fintype ι✝
f : ι✝ → R
ι : Type u_1
b : AffineBasis ι R E
s : Finset ι
w : ι → R
hw₁ : ∑ i in s, w i = 1
hx : ↑(affineCombination R s ↑b) w ∈ {x | ∀ (i : ι), 0 ≤ ↑(coord b i) x}
hx' : ↑(affineCombination R s ↑b) w ∈ affineSpan R (Set.range ↑b)
i : ι
hi : i ∈ s
⊢ 0 ≤ w i

tactic: rw [b.coord_apply_combination_of_mem hi hw₁] at hx
state_before: case h.refine'_2.intro.intro.intro
R : Type u_2
E : Type u_3
F : Type ?u.476113
ι✝ : Type ?u.476116
ι' : Type ?u.476119
α : Type ?u.476122
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
inst✝ : Fintype ι✝
f : ι✝ → R
ι : Type u_1
b : AffineBasis ι R E
s : Finset ι
w : ι → R
hw₁ : ∑ i in s, w i = 1
hx' : ↑(affineCombination R s ↑b) w ∈ affineSpan R (Set.range ↑b)
i : ι
hi : i ∈ s
hx : 0 ≤ ↑(coord b i) (↑(affineCombination R s ↑b) w)
⊢ 0 ≤ w i

tactic: exact hx
state_before: case h.refine'_2.intro.intro.intro
R : Type u_2
E : Type u_3
F : Type ?u.476113
ι✝ : Type ?u.476116
ι' : Type ?u.476119
α : Type ?u.476122
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
inst✝ : Fintype ι✝
f : ι✝ → R
ι : Type u_1
b : AffineBasis ι R E
s : Finset ι
w : ι → R
hw₁ : ∑ i in s, w i = 1
hx' : ↑(affineCombination R s ↑b) w ∈ affineSpan R (Set.range ↑b)
i : ι
hi : i ∈ s
hx : 0 ≤ w i
⊢ 0 ≤ w i

tactic: rw [b.tot]
state_before: R : Type u_2
E : Type u_3
F : Type ?u.476113
ι✝ : Type ?u.476116
ι' : Type ?u.476119
α : Type ?u.476122
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
inst✝ : Fintype ι✝
f : ι✝ → R
ι : Type u_1
b : AffineBasis ι R E
x : E
hx : x ∈ {x | ∀ (i : ι), 0 ≤ ↑(coord b i) x}
⊢ x ∈ affineSpan R (Set.range ↑b)

tactic: exact AffineSubspace.mem_top R E x
state_before: R : Type u_2
E : Type u_3
F : Type ?u.476113
ι✝ : Type ?u.476116
ι' : Type ?u.476119
α : Type ?u.476122
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
inst✝ : Fintype ι✝
f : ι✝ → R
ι : Type u_1
b : AffineBasis ι R E
x : E
hx : x ∈ {x | ∀ (i : ι), 0 ≤ ↑(coord b i) x}
⊢ x ∈ ⊤