File: Mathlib/Analysis/Convex/Gauge.lean

full_name: gauge
code: /-- The Minkowski functional. Given a set `s` in a real vector space, `gauge s` is the functional
which sends `x : E` to the smallest `r : ℝ` such that `x` is in `s` scaled by `r`. -/
def gauge (s : Set E) (x : E) : ℝ 
goal: ℝ

full_name: gauge_def
code: theorem gauge_def : gauge s x = sInf ({ r ∈ Set.Ioi (0 : ℝ) | x ∈ r • s }) 
goal: gauge s x = sInf {r | r ∈ Set.Ioi 0 ∧ x ∈ r • s}

full_name: gauge_def'
code: /-- An alternative definition of the gauge using scalar multiplication on the element rather than on
the set. -/
theorem gauge_def' : gauge s x = sInf {r ∈ Set.Ioi (0 : ℝ) | r⁻¹ • x ∈ s} 
goal: gauge s x = sInf {r | r ∈ Set.Ioi 0 ∧ r⁻¹ • x ∈ s}

full_name: _private.Mathlib.Analysis.Convex.Gauge.0.gauge_set_bddBelow
code: private theorem gauge_set_bddBelow : BddBelow { r : ℝ | 0 < r ∧ x ∈ r • s } 
goal: BddBelow {r | 0 < r ∧ x ∈ r • s}

full_name: Absorbent.gauge_set_nonempty
code: /-- If the given subset is `Absorbent` then the set we take an infimum over in `gauge` is nonempty,
which is useful for proving many properties about the gauge.  -/
theorem Absorbent.gauge_set_nonempty (absorbs : Absorbent ℝ s) :
    { r : ℝ | 0 < r ∧ x ∈ r • s }.Nonempty 
goal: {r | 0 < r ∧ x ∈ r • s}.Nonempty

full_name: gauge_mono
code: theorem gauge_mono (hs : Absorbent ℝ s) (h : s ⊆ t) : gauge t ≤ gauge s 
goal: gauge t ≤ gauge s

full_name: exists_lt_of_gauge_lt
code: theorem exists_lt_of_gauge_lt (absorbs : Absorbent ℝ s) (h : gauge s x < a) :
    ∃ b, 0 < b ∧ b < a ∧ x ∈ b • s 
goal: ∃ b, 0 < b ∧ b < a ∧ x ∈ b • s

full_name: gauge_zero
code: /-- The gauge evaluated at `0` is always zero (mathematically this requires `0` to be in the set `s`
but, the real infimum of the empty set in Lean being defined as `0`, it holds unconditionally). -/
@[simp]
theorem gauge_zero : gauge s 0 = 0 
goal: gauge s 0 = 0

full_name: gauge_zero'
code: @[simp]
theorem gauge_zero' : gauge (0 : Set E) = 0 
goal: gauge 0 = 0

full_name: gauge_empty
code: @[simp]
theorem gauge_empty : gauge (∅ : Set E) = 0 
goal: gauge ∅ = 0

full_name: gauge_of_subset_zero
code: theorem gauge_of_subset_zero (h : s ⊆ 0) : gauge s = 0 
goal: gauge s = 0

full_name: gauge_nonneg
code: /-- The gauge is always nonnegative. -/
theorem gauge_nonneg (x : E) : 0 ≤ gauge s x 
goal: 0 ≤ gauge s x

full_name: gauge_neg
code: theorem gauge_neg (symmetric : ∀ x ∈ s, -x ∈ s) (x : E) : gauge s (-x) = gauge s x 
goal: gauge s (-x) = gauge s x

full_name: gauge_neg_set_neg
code: theorem gauge_neg_set_neg (x : E) : gauge (-s) (-x) = gauge s x 
goal: gauge (-s) (-x) = gauge s x

full_name: gauge_neg_set_eq_gauge_neg
code: theorem gauge_neg_set_eq_gauge_neg (x : E) : gauge (-s) x = gauge s (-x) 
goal: gauge (-s) x = gauge s (-x)

full_name: gauge_le_of_mem
code: theorem gauge_le_of_mem (ha : 0 ≤ a) (hx : x ∈ a • s) : gauge s x ≤ a 
goal: gauge s x ≤ a

full_name: gauge_le_eq
code: theorem gauge_le_eq (hs₁ : Convex ℝ s) (hs₀ : (0 : E) ∈ s) (hs₂ : Absorbent ℝ s) (ha : 0 ≤ a) :
    { x | gauge s x ≤ a } = ⋂ (r : ℝ) (_ : a < r), r • s 
goal: {x | gauge s x ≤ a} = ⋂ r, ⋂ (_ : a < r), r • s

full_name: gauge_lt_eq'
code: theorem gauge_lt_eq' (absorbs : Absorbent ℝ s) (a : ℝ) :
    { x | gauge s x < a } = ⋃ (r : ℝ) (_ : 0 < r) (_ : r < a), r • s 
goal: {x | gauge s x < a} = ⋃ r, ⋃ (_ : 0 < r), ⋃ (_ : r < a), r • s

full_name: gauge_lt_eq
code: theorem gauge_lt_eq (absorbs : Absorbent ℝ s) (a : ℝ) :
    { x | gauge s x < a } = ⋃ r ∈ Set.Ioo 0 (a : ℝ), r • s 
goal: {x | gauge s x < a} = ⋃ r ∈ Set.Ioo 0 a, r • s

full_name: mem_openSegment_of_gauge_lt_one
code: theorem mem_openSegment_of_gauge_lt_one (absorbs : Absorbent ℝ s) (hgauge : gauge s x < 1) :
    ∃ y ∈ s, x ∈ openSegment ℝ 0 y 
goal: ∃ y ∈ s, x ∈ openSegment ℝ 0 y

full_name: gauge_lt_one_subset_self
code: theorem gauge_lt_one_subset_self (hs : Convex ℝ s) (h₀ : (0 : E) ∈ s) (absorbs : Absorbent ℝ s) :
    { x | gauge s x < 1 } ⊆ s 
goal: {x | gauge s x < 1} ⊆ s

full_name: gauge_le_one_of_mem
code: theorem gauge_le_one_of_mem {x : E} (hx : x ∈ s) : gauge s x ≤ 1 
goal: gauge s x ≤ 1

full_name: gauge_add_le
code: /-- Gauge is subadditive. -/
theorem gauge_add_le (hs : Convex ℝ s) (absorbs : Absorbent ℝ s) (x y : E) :
    gauge s (x + y) ≤ gauge s x + gauge s y 
goal: gauge s (x + y) ≤ gauge s x + gauge s y

full_name: self_subset_gauge_le_one
code: theorem self_subset_gauge_le_one : s ⊆ { x | gauge s x ≤ 1 } 
goal: s ⊆ {x | gauge s x ≤ 1}

full_name: Convex.gauge_le
code: theorem Convex.gauge_le (hs : Convex ℝ s) (h₀ : (0 : E) ∈ s) (absorbs : Absorbent ℝ s) (a : ℝ) :
    Convex ℝ { x | gauge s x ≤ a } 
goal: Convex ℝ {x | gauge s x ≤ a}

full_name: Balanced.starConvex
code: theorem Balanced.starConvex (hs : Balanced ℝ s) : StarConvex ℝ 0 s 
goal: StarConvex ℝ 0 s

full_name: le_gauge_of_not_mem
code: theorem le_gauge_of_not_mem (hs₀ : StarConvex ℝ 0 s) (hs₂ : Absorbs ℝ s {x}) (hx : x ∉ a • s) :
    a ≤ gauge s x 
goal: a ≤ gauge s x

full_name: one_le_gauge_of_not_mem
code: theorem one_le_gauge_of_not_mem (hs₁ : StarConvex ℝ 0 s) (hs₂ : Absorbs ℝ s {x}) (hx : x ∉ s) :
    1 ≤ gauge s x 
goal: 1 ≤ gauge s x

full_name: gauge_smul_of_nonneg
code: theorem gauge_smul_of_nonneg [MulActionWithZero α E] [IsScalarTower α ℝ (Set E)] {s : Set E} {a : α}
    (ha : 0 ≤ a) (x : E) : gauge s (a • x) = a • gauge s x 
goal: gauge s (a • x) = a • gauge s x

full_name: gauge_smul_left_of_nonneg
code: theorem gauge_smul_left_of_nonneg [MulActionWithZero α E] [SMulCommClass α ℝ ℝ]
    [IsScalarTower α ℝ ℝ] [IsScalarTower α ℝ E] {s : Set E} {a : α} (ha : 0 ≤ a) :
    gauge (a • s) = a⁻¹ • gauge s 
goal: gauge (a • s) = a⁻¹ • gauge s

full_name: gauge_smul_left
code: theorem gauge_smul_left [Module α E] [SMulCommClass α ℝ ℝ] [IsScalarTower α ℝ ℝ]
    [IsScalarTower α ℝ E] {s : Set E} (symmetric : ∀ x ∈ s, -x ∈ s) (a : α) :
    gauge (a • s) = |a|⁻¹ • gauge s 
goal: gauge (a • s) = |a|⁻¹ • gauge s

full_name: gauge_norm_smul
code: theorem gauge_norm_smul (hs : Balanced 𝕜 s) (r : 𝕜) (x : E) :
    gauge s (‖r‖ • x) = gauge s (r • x) 
goal: gauge s (‖r‖ • x) = gauge s (r • x)

full_name: gauge_smul
code: /-- If `s` is balanced, then the Minkowski functional is ℂ-homogeneous. -/
theorem gauge_smul (hs : Balanced 𝕜 s) (r : 𝕜) (x : E) : gauge s (r • x) = ‖r‖ * gauge s x 
goal: gauge s (r • x) = ‖r‖ * gauge s x

full_name: comap_gauge_nhds_zero_le
code: theorem comap_gauge_nhds_zero_le (ha : Absorbent ℝ s) (hb : Bornology.IsVonNBounded ℝ s) :
    comap (gauge s) (𝓝 0) ≤ 𝓝 0 
goal: Filter.comap (gauge s) (𝓝 0) ≤ 𝓝 0

full_name: gauge_eq_zero
code: theorem gauge_eq_zero (hs : Absorbent ℝ s) (hb : Bornology.IsVonNBounded ℝ s) :
    gauge s x = 0 ↔ x = 0 
goal: gauge s x = 0 ↔ x = 0

full_name: gauge_pos
code: theorem gauge_pos (hs : Absorbent ℝ s) (hb : Bornology.IsVonNBounded ℝ s) :
    0 < gauge s x ↔ x ≠ 0 
goal: 0 < gauge s x ↔ x ≠ 0

full_name: interior_subset_gauge_lt_one
code: theorem interior_subset_gauge_lt_one (s : Set E) : interior s ⊆ { x | gauge s x < 1 } 
goal: interior s ⊆ {x | gauge s x < 1}

full_name: gauge_lt_one_eq_self_of_isOpen
code: theorem gauge_lt_one_eq_self_of_isOpen (hs₁ : Convex ℝ s) (hs₀ : (0 : E) ∈ s) (hs₂ : IsOpen s) :
    { x | gauge s x < 1 } = s 
goal: {x | gauge s x < 1} = s

full_name: gauge_lt_one_of_mem_of_isOpen
code: theorem gauge_lt_one_of_mem_of_isOpen (hs₂ : IsOpen s) {x : E} (hx : x ∈ s) :
    gauge s x < 1 
goal: gauge s x < 1

full_name: gauge_lt_of_mem_smul
code: theorem gauge_lt_of_mem_smul (x : E) (ε : ℝ) (hε : 0 < ε) (hs₂ : IsOpen s) (hx : x ∈ ε • s) :
    gauge s x < ε 
goal: gauge s x < ε

full_name: mem_closure_of_gauge_le_one
code: theorem mem_closure_of_gauge_le_one (hc : Convex ℝ s) (hs₀ : 0 ∈ s) (ha : Absorbent ℝ s)
    (h : gauge s x ≤ 1) : x ∈ closure s 
goal: x ∈ closure s

full_name: mem_frontier_of_gauge_eq_one
code: theorem mem_frontier_of_gauge_eq_one (hc : Convex ℝ s) (hs₀ : 0 ∈ s) (ha : Absorbent ℝ s)
    (h : gauge s x = 1) : x ∈ frontier s 
goal: x ∈ frontier s

full_name: tendsto_gauge_nhds_zero'
code: theorem tendsto_gauge_nhds_zero' (hs : s ∈ 𝓝 0) : Tendsto (gauge s) (𝓝 0) (𝓝[≥] 0) 
goal: Filter.Tendsto (gauge s) (𝓝 0) (𝓝[≥] 0)

full_name: tendsto_gauge_nhds_zero
code: theorem tendsto_gauge_nhds_zero (hs : s ∈ 𝓝 0) : Tendsto (gauge s) (𝓝 0) (𝓝 0) 
goal: Filter.Tendsto (gauge s) (𝓝 0) (𝓝 0)

full_name: continuousAt_gauge_zero
code: /-- If `s` is a neighborhood of the origin, then `gauge s` is continuous at the origin.
See also `continuousAt_gauge`. -/
theorem continuousAt_gauge_zero (hs : s ∈ 𝓝 0) : ContinuousAt (gauge s) 0 
goal: ContinuousAt (gauge s) 0

full_name: comap_gauge_nhds_zero
code: theorem comap_gauge_nhds_zero (hb : Bornology.IsVonNBounded ℝ s) (h₀ : s ∈ 𝓝 0) :
    comap (gauge s) (𝓝 0) = 𝓝 0 
goal: Filter.comap (gauge s) (𝓝 0) = 𝓝 0

full_name: continuousAt_gauge
code: /-- If `s` is a convex neighborhood of the origin in a topological real vector space, then `gauge s`
is continuous. If the ambient space is a normed space, then `gauge s` is Lipschitz continuous, see
`Convex.lipschitz_gauge`. -/
theorem continuousAt_gauge (hc : Convex ℝ s) (hs₀ : s ∈ 𝓝 0) : ContinuousAt (gauge s) x 
goal: ContinuousAt (gauge s) x

full_name: continuous_gauge
code: /-- If `s` is a convex neighborhood of the origin in a topological real vector space, then `gauge s`
is continuous. If the ambient space is a normed space, then `gauge s` is Lipschitz continuous, see
`Convex.lipschitz_gauge`. -/
@[continuity]
theorem continuous_gauge (hc : Convex ℝ s) (hs₀ : s ∈ 𝓝 0) : Continuous (gauge s) 
goal: Continuous (gauge s)

full_name: gauge_lt_one_eq_interior
code: theorem gauge_lt_one_eq_interior (hc : Convex ℝ s) (hs₀ : s ∈ 𝓝 0) :
    { x | gauge s x < 1 } = interior s 
goal: {x | gauge s x < 1} = interior s

full_name: gauge_lt_one_iff_mem_interior
code: theorem gauge_lt_one_iff_mem_interior (hc : Convex ℝ s) (hs₀ : s ∈ 𝓝 0) :
    gauge s x < 1 ↔ x ∈ interior s 
goal: gauge s x < 1 ↔ x ∈ interior s

full_name: gauge_le_one_iff_mem_closure
code: theorem gauge_le_one_iff_mem_closure (hc : Convex ℝ s) (hs₀ : s ∈ 𝓝 0) :
    gauge s x ≤ 1 ↔ x ∈ closure s 
goal: gauge s x ≤ 1 ↔ x ∈ closure s

full_name: gauge_eq_one_iff_mem_frontier
code: theorem gauge_eq_one_iff_mem_frontier (hc : Convex ℝ s) (hs₀ : s ∈ 𝓝 0) :
    gauge s x = 1 ↔ x ∈ frontier s 
goal: gauge s x = 1 ↔ x ∈ frontier s

full_name: gaugeSeminorm
code: /-- `gauge s` as a seminorm when `s` is balanced, convex and absorbent. -/
@[simps!]
def gaugeSeminorm (hs₀ : Balanced 𝕜 s) (hs₁ : Convex ℝ s) (hs₂ : Absorbent ℝ s) : Seminorm 𝕜 E 
goal: Seminorm 𝕜 E

full_name: gaugeSeminorm_toFun
code: /-- `gauge s` as a seminorm when `s` is balanced, convex and absorbent. -/
@[simps!]
def gaugeSeminorm (hs₀ : Balanced 𝕜 s) (hs₁ : Convex ℝ s) (hs₂ : Absorbent ℝ s) : Seminorm 𝕜 E 
goal: (gaugeSeminorm hs₀ hs₁ hs₂) x = gauge s x

full_name: gaugeSeminorm_lt_one_of_isOpen
code: theorem gaugeSeminorm_lt_one_of_isOpen (hs : IsOpen s) {x : E} (hx : x ∈ s) :
    gaugeSeminorm hs₀ hs₁ hs₂ x < 1 
goal: (gaugeSeminorm hs₀ hs₁ hs₂) x < 1

full_name: gaugeSeminorm_ball_one
code: theorem gaugeSeminorm_ball_one (hs : IsOpen s) : (gaugeSeminorm hs₀ hs₁ hs₂).ball 0 1 = s 
goal: (gaugeSeminorm hs₀ hs₁ hs₂).ball 0 1 = s

full_name: Seminorm.gauge_ball
code: /-- Any seminorm arises as the gauge of its unit ball. -/
@[simp]
protected theorem Seminorm.gauge_ball (p : Seminorm ℝ E) : gauge (p.ball 0 1) = p 
goal: gauge (p.ball 0 1) = ⇑p

full_name: Seminorm.gaugeSeminorm_ball
code: theorem Seminorm.gaugeSeminorm_ball (p : Seminorm ℝ E) :
    gaugeSeminorm (p.balanced_ball_zero 1) (p.convex_ball 0 1) (p.absorbent_ball_zero zero_lt_one) =
      p 
goal: gaugeSeminorm ⋯ ⋯ ⋯ = p

full_name: gauge_unit_ball
code: theorem gauge_unit_ball (x : E) : gauge (ball (0 : E) 1) x = ‖x‖ 
goal: gauge (Metric.ball 0 1) x = ‖x‖

full_name: gauge_ball
code: theorem gauge_ball (hr : 0 ≤ r) (x : E) : gauge (ball (0 : E) r) x = ‖x‖ / r 
goal: gauge (Metric.ball 0 r) x = ‖x‖ / r

full_name: gauge_ball'
code: @[deprecated gauge_ball (since := "2023-07-24")]
theorem gauge_ball' (hr : 0 < r) (x : E) : gauge (ball (0 : E) r) x = ‖x‖ / r 
goal: gauge (Metric.ball 0 r) x = ‖x‖ / r

full_name: gauge_closure_zero
code: @[simp]
theorem gauge_closure_zero : gauge (closure (0 : Set E)) = 0 
goal: gauge (closure 0) = 0

full_name: gauge_closedBall
code: @[simp]
theorem gauge_closedBall (hr : 0 ≤ r) (x : E) : gauge (closedBall (0 : E) r) x = ‖x‖ / r 
goal: gauge (Metric.closedBall 0 r) x = ‖x‖ / r

full_name: mul_gauge_le_norm
code: theorem mul_gauge_le_norm (hs : Metric.ball (0 : E) r ⊆ s) : r * gauge s x ≤ ‖x‖ 
goal: r * gauge s x ≤ ‖x‖

full_name: Convex.lipschitzWith_gauge
code: theorem Convex.lipschitzWith_gauge {r : ℝ≥0} (hc : Convex ℝ s) (hr : 0 < r)
    (hs : Metric.ball (0 : E) r ⊆ s) : LipschitzWith r⁻¹ (gauge s) 
goal: LipschitzWith r⁻¹ (gauge s)

full_name: Convex.lipschitz_gauge
code: theorem Convex.lipschitz_gauge (hc : Convex ℝ s) (h₀ : s ∈ 𝓝 (0 : E)) :
    ∃ K, LipschitzWith K (gauge s) 
goal: ∃ K, LipschitzWith K (gauge s)

full_name: Convex.uniformContinuous_gauge
code: theorem Convex.uniformContinuous_gauge (hc : Convex ℝ s) (h₀ : s ∈ 𝓝 (0 : E)) :
    UniformContinuous (gauge s) 
goal: UniformContinuous (gauge s)

full_name: le_gauge_of_subset_closedBall
code: theorem le_gauge_of_subset_closedBall (hs : Absorbent ℝ s) (hr : 0 ≤ r) (hsr : s ⊆ closedBall 0 r) :
    ‖x‖ / r ≤ gauge s x 
goal: ‖x‖ / r ≤ gauge s x