Theorem: interior_convexHull_nonempty_iff_affineSpan_eq_top
File: Mathlib/Analysis/NormedSpace/AddTorsorBases.lean

tactic: refine' ⟨affineSpan_eq_top_of_nonempty_interior, fun h => _⟩
state_before: V : Type u_1
P : Type ?u.98022
inst✝⁴ : NormedAddCommGroup V
inst✝³ : NormedSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
inst✝ : FiniteDimensional ℝ V
s : Set V
⊢ Set.Nonempty (interior (↑(convexHull ℝ).toOrderHom s)) ↔ affineSpan ℝ s = ⊤

tactic: obtain ⟨t, hts, b, hb⟩ := AffineBasis.exists_affine_subbasis h
state_before: V : Type u_1
P : Type ?u.98022
inst✝⁴ : NormedAddCommGroup V
inst✝³ : NormedSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
inst✝ : FiniteDimensional ℝ V
s : Set V
h : affineSpan ℝ s = ⊤
⊢ Set.Nonempty (interior (↑(convexHull ℝ).toOrderHom s))

tactic: suffices (interior (convexHull ℝ (range b))).Nonempty by
  rw [hb, Subtype.range_coe_subtype, setOf_mem_eq] at this
  refine' this.mono _
  mono*
state_before: case intro.intro.intro
V : Type u_1
P : Type ?u.98022
inst✝⁴ : NormedAddCommGroup V
inst✝³ : NormedSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
inst✝ : FiniteDimensional ℝ V
s : Set V
h : affineSpan ℝ s = ⊤
t : Set V
hts : t ⊆ s
b : AffineBasis ↑t ℝ V
hb : ↑b = Subtype.val
⊢ Set.Nonempty (interior (↑(convexHull ℝ).toOrderHom s))

tactic: lift t to Finset V using b.finite_set
state_before: case intro.intro.intro
V : Type u_1
P : Type ?u.98022
inst✝⁴ : NormedAddCommGroup V
inst✝³ : NormedSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
inst✝ : FiniteDimensional ℝ V
s : Set V
h : affineSpan ℝ s = ⊤
t : Set V
hts : t ⊆ s
b : AffineBasis ↑t ℝ V
hb : ↑b = Subtype.val
⊢ Set.Nonempty (interior (↑(convexHull ℝ).toOrderHom (range ↑b)))

tactic: exact ⟨_, b.centroid_mem_interior_convexHull⟩
state_before: case intro.intro.intro.intro
V : Type u_1
P : Type ?u.98022
inst✝⁴ : NormedAddCommGroup V
inst✝³ : NormedSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
inst✝ : FiniteDimensional ℝ V
s : Set V
h : affineSpan ℝ s = ⊤
t : Finset V
hts : ↑t ⊆ s
b : AffineBasis ↑↑t ℝ V
hb : ↑b = Subtype.val
⊢ Set.Nonempty (interior (↑(convexHull ℝ).toOrderHom (range ↑b)))

tactic: rw [hb, Subtype.range_coe_subtype, setOf_mem_eq] at this
state_before: V : Type u_1
P : Type ?u.98022
inst✝⁴ : NormedAddCommGroup V
inst✝³ : NormedSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
inst✝ : FiniteDimensional ℝ V
s : Set V
h : affineSpan ℝ s = ⊤
t : Set V
hts : t ⊆ s
b : AffineBasis ↑t ℝ V
hb : ↑b = Subtype.val
this : Set.Nonempty (interior (↑(convexHull ℝ).toOrderHom (range ↑b)))
⊢ Set.Nonempty (interior (↑(convexHull ℝ).toOrderHom s))

tactic: refine' this.mono _
state_before: V : Type u_1
P : Type ?u.98022
inst✝⁴ : NormedAddCommGroup V
inst✝³ : NormedSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
inst✝ : FiniteDimensional ℝ V
s : Set V
h : affineSpan ℝ s = ⊤
t : Set V
hts : t ⊆ s
b : AffineBasis ↑t ℝ V
hb : ↑b = Subtype.val
this : Set.Nonempty (interior (↑(convexHull ℝ).toOrderHom t))
⊢ Set.Nonempty (interior (↑(convexHull ℝ).toOrderHom s))

tactic: mono*
state_before: V : Type u_1
P : Type ?u.98022
inst✝⁴ : NormedAddCommGroup V
inst✝³ : NormedSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
inst✝ : FiniteDimensional ℝ V
s : Set V
h : affineSpan ℝ s = ⊤
t : Set V
hts : t ⊆ s
b : AffineBasis ↑t ℝ V
hb : ↑b = Subtype.val
this : Set.Nonempty (interior (↑(convexHull ℝ).toOrderHom t))
⊢ interior (↑(convexHull ℝ).toOrderHom t) ⊆ interior (↑(convexHull ℝ).toOrderHom s)