Theorem: Convex.convex_remove_iff_not_mem_convexHull_remove
File: Mathlib/Analysis/Convex/Hull.lean

tactic: constructor
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type ?u.27823
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
s✝ t : Set E
x✝ y : E
s : Set E
hs : Convex 𝕜 s
x : E
⊢ Convex 𝕜 (s \ {x}) ↔ ¬x ∈ ↑(convexHull 𝕜).toOrderHom (s \ {x})

tactic: rintro hx
state_before: case mpr
𝕜 : Type u_2
E : Type u_1
F : Type ?u.27823
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
s✝ t : Set E
x✝ y : E
s : Set E
hs : Convex 𝕜 s
x : E
⊢ ¬x ∈ ↑(convexHull 𝕜).toOrderHom (s \ {x}) → Convex 𝕜 (s \ {x})

tactic: suffices h : s \ {x} = convexHull 𝕜 (s \ {x})
state_before: case mpr
𝕜 : Type u_2
E : Type u_1
F : Type ?u.27823
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
s✝ t : Set E
x✝ y : E
s : Set E
hs : Convex 𝕜 s
x : E
hx : ¬x ∈ ↑(convexHull 𝕜).toOrderHom (s \ {x})
⊢ Convex 𝕜 (s \ {x})

tactic: exact
  Subset.antisymm (subset_convexHull 𝕜 _) fun y hy =>
    ⟨convexHull_min (diff_subset _ _) hs hy, by
      rintro (rfl : y = x)
      exact hx hy⟩
state_before: case h
𝕜 : Type u_2
E : Type u_1
F : Type ?u.27823
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
s✝ t : Set E
x✝ y : E
s : Set E
hs : Convex 𝕜 s
x : E
hx : ¬x ∈ ↑(convexHull 𝕜).toOrderHom (s \ {x})
⊢ s \ {x} = ↑(convexHull 𝕜).toOrderHom (s \ {x})

tactic: rintro hsx hx
state_before: case mp
𝕜 : Type u_2
E : Type u_1
F : Type ?u.27823
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
s✝ t : Set E
x✝ y : E
s : Set E
hs : Convex 𝕜 s
x : E
⊢ Convex 𝕜 (s \ {x}) → ¬x ∈ ↑(convexHull 𝕜).toOrderHom (s \ {x})

tactic: rw [hsx.convexHull_eq] at hx
state_before: case mp
𝕜 : Type u_2
E : Type u_1
F : Type ?u.27823
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
s✝ t : Set E
x✝ y : E
s : Set E
hs : Convex 𝕜 s
x : E
hsx : Convex 𝕜 (s \ {x})
hx : x ∈ ↑(convexHull 𝕜).toOrderHom (s \ {x})
⊢ False

tactic: exact hx.2 (mem_singleton _)
state_before: case mp
𝕜 : Type u_2
E : Type u_1
F : Type ?u.27823
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
s✝ t : Set E
x✝ y : E
s : Set E
hs : Convex 𝕜 s
x : E
hsx : Convex 𝕜 (s \ {x})
hx : x ∈ s \ {x}
⊢ False

tactic: rw [h]
state_before: case mpr
𝕜 : Type u_2
E : Type u_1
F : Type ?u.27823
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
s✝ t : Set E
x✝ y : E
s : Set E
hs : Convex 𝕜 s
x : E
hx : ¬x ∈ ↑(convexHull 𝕜).toOrderHom (s \ {x})
h : s \ {x} = ↑(convexHull 𝕜).toOrderHom (s \ {x})
⊢ Convex 𝕜 (s \ {x})

tactic: exact convex_convexHull 𝕜 _
state_before: case mpr
𝕜 : Type u_2
E : Type u_1
F : Type ?u.27823
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
s✝ t : Set E
x✝ y : E
s : Set E
hs : Convex 𝕜 s
x : E
hx : ¬x ∈ ↑(convexHull 𝕜).toOrderHom (s \ {x})
h : s \ {x} = ↑(convexHull 𝕜).toOrderHom (s \ {x})
⊢ Convex 𝕜 (↑(convexHull 𝕜).toOrderHom (s \ {x}))

tactic: rintro (rfl : y = x)
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type ?u.27823
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
s✝ t : Set E
x✝ y✝ : E
s : Set E
hs : Convex 𝕜 s
x : E
hx : ¬x ∈ ↑(convexHull 𝕜).toOrderHom (s \ {x})
y : E
hy : y ∈ ↑(convexHull 𝕜).toOrderHom (s \ {x})
⊢ ¬y ∈ {x}

tactic: exact hx hy
state_before: 𝕜 : Type u_2
E : Type u_1
F : Type ?u.27823
inst✝⁴ : OrderedSemiring 𝕜
inst✝³ : AddCommMonoid E
inst✝² : AddCommMonoid F
inst✝¹ : Module 𝕜 E
inst✝ : Module 𝕜 F
s✝ t : Set E
x y✝ : E
s : Set E
hs : Convex 𝕜 s
y : E
hx : ¬y ∈ ↑(convexHull 𝕜).toOrderHom (s \ {y})
hy : y ∈ ↑(convexHull 𝕜).toOrderHom (s \ {y})
⊢ False