File: Mathlib/Analysis/Convex/Cone/InnerDual.lean

full_name: Set.innerDualCone
code: /-- The dual cone is the cone consisting of all points `y` such that for
all points `x` in a given set `0 ≤ ⟪ x, y ⟫`. -/
def Set.innerDualCone (s : Set H) : ConvexCone ℝ H 
goal: ConvexCone ℝ H

full_name: mem_innerDualCone
code: @[simp]
theorem mem_innerDualCone (y : H) (s : Set H) : y ∈ s.innerDualCone ↔ ∀ x ∈ s, 0 ≤ ⟪x, y⟫ 
goal: y ∈ s.innerDualCone ↔ ∀ x ∈ s, 0 ≤ ⟪x, y⟫_ℝ

full_name: innerDualCone_empty
code: @[simp]
theorem innerDualCone_empty : (∅ : Set H).innerDualCone = ⊤ 
goal: ∅.innerDualCone = ⊤

full_name: innerDualCone_zero
code: /-- Dual cone of the convex cone {0} is the total space. -/
@[simp]
theorem innerDualCone_zero : (0 : Set H).innerDualCone = ⊤ 
goal: Set.innerDualCone 0 = ⊤

full_name: innerDualCone_univ
code: /-- Dual cone of the total space is the convex cone {0}. -/
@[simp]
theorem innerDualCone_univ : (univ : Set H).innerDualCone = 0 
goal: Set.univ.innerDualCone = 0

full_name: innerDualCone_le_innerDualCone
code: theorem innerDualCone_le_innerDualCone (h : t ⊆ s) : s.innerDualCone ≤ t.innerDualCone 
goal: s.innerDualCone ≤ t.innerDualCone

full_name: pointed_innerDualCone
code: theorem pointed_innerDualCone : s.innerDualCone.Pointed 
goal: s.innerDualCone.Pointed

full_name: innerDualCone_singleton
code: /-- The inner dual cone of a singleton is given by the preimage of the positive cone under the
linear map `fun y ↦ ⟪x, y⟫`. -/
theorem innerDualCone_singleton (x : H) :
    ({x} : Set H).innerDualCone = (ConvexCone.positive ℝ ℝ).comap (innerₛₗ ℝ x) 
goal: {x}.innerDualCone = ConvexCone.comap ((innerₛₗ ℝ) x) (ConvexCone.positive ℝ ℝ)

full_name: innerDualCone_union
code: theorem innerDualCone_union (s t : Set H) :
    (s ∪ t).innerDualCone = s.innerDualCone ⊓ t.innerDualCone 
goal: (s ∪ t).innerDualCone = s.innerDualCone ⊓ t.innerDualCone

full_name: innerDualCone_insert
code: theorem innerDualCone_insert (x : H) (s : Set H) :
    (insert x s).innerDualCone = Set.innerDualCone {x} ⊓ s.innerDualCone 
goal: (insert x s).innerDualCone = {x}.innerDualCone ⊓ s.innerDualCone

full_name: innerDualCone_iUnion
code: theorem innerDualCone_iUnion {ι : Sort*} (f : ι → Set H) :
    (⋃ i, f i).innerDualCone = ⨅ i, (f i).innerDualCone 
goal: (⋃ i, f i).innerDualCone = ⨅ i, (f i).innerDualCone

full_name: innerDualCone_sUnion
code: theorem innerDualCone_sUnion (S : Set (Set H)) :
    (⋃₀ S).innerDualCone = sInf (Set.innerDualCone '' S) 
goal: (⋃₀ S).innerDualCone = sInf (Set.innerDualCone '' S)

full_name: innerDualCone_eq_iInter_innerDualCone_singleton
code: /-- The dual cone of `s` equals the intersection of dual cones of the points in `s`. -/
theorem innerDualCone_eq_iInter_innerDualCone_singleton :
    (s.innerDualCone : Set H) = ⋂ i : s, (({↑i} : Set H).innerDualCone : Set H) 
goal: ↑s.innerDualCone = ⋂ i, ↑{↑i}.innerDualCone

full_name: isClosed_innerDualCone
code: theorem isClosed_innerDualCone : IsClosed (s.innerDualCone : Set H) 
goal: IsClosed ↑s.innerDualCone

full_name: ConvexCone.pointed_of_nonempty_of_isClosed
code: theorem ConvexCone.pointed_of_nonempty_of_isClosed (K : ConvexCone ℝ H) (ne : (K : Set H).Nonempty)
    (hc : IsClosed (K : Set H)) : K.Pointed 
goal: K.Pointed

full_name: ConvexCone.hyperplane_separation_of_nonempty_of_isClosed_of_nmem
code: /-- This is a stronger version of the Hahn-Banach separation theorem for closed convex cones. This
is also the geometric interpretation of Farkas' lemma. -/
theorem ConvexCone.hyperplane_separation_of_nonempty_of_isClosed_of_nmem (K : ConvexCone ℝ H)
    (ne : (K : Set H).Nonempty) (hc : IsClosed (K : Set H)) {b : H} (disj : b ∉ K) :
    ∃ y : H, (∀ x : H, x ∈ K → 0 ≤ ⟪x, y⟫_ℝ) ∧ ⟪y, b⟫_ℝ < 0 
goal: ∃ y, (∀ x ∈ K, 0 ≤ ⟪x, y⟫_ℝ) ∧ ⟪y, b⟫_ℝ < 0

full_name: ConvexCone.innerDualCone_of_innerDualCone_eq_self
code: /-- The inner dual of inner dual of a non-empty, closed convex cone is itself.  -/
theorem ConvexCone.innerDualCone_of_innerDualCone_eq_self (K : ConvexCone ℝ H)
    (ne : (K : Set H).Nonempty) (hc : IsClosed (K : Set H)) :
    ((K : Set H).innerDualCone : Set H).innerDualCone = K 
goal: (↑(↑K).innerDualCone).innerDualCone = K