Documentation

Tdaf.Analysis.Convex.Duality.Gauge

Gauges, polars of convex functions, and obverses #

The gauge of a set C is γ(x ∣ C) = inf {a ≥ 0 ∣ x ∈ a • C}: the least dilation of C that swallows x, and +∞ when none does. Gauges are exactly the nonnegative positively homogeneous convex functions vanishing at 0, and C ↦ γ(· ∣ C) is a bijection from closed convex sets containing 0 to closed gauges. Three polarity operations act here, each an involution on its class: the polar k°(y) = inf {μ ≥ 0 ∣ ⟨x, y⟩ ≤ μ k(x)} of a gauge, the polar f°(y) = inf {μ ≥ 0 ∣ ⟨x, y⟩ ≤ 1 + μ f(x)} of a nonnegative closed convex f with f 0 = 0, and the obverse fᵒ(x) = inf {λ > 0 ∣ λ f(x / λ) ≤ 1}. On a gauge the first two agree, and the obverse ties them to the Fenchel conjugate: f* = (f°)ᵒ. Two facts about polar sets are proved here too, because the gauge is what makes them short: the recession cone of a closed convex set containing the origin is the polar of its polar, and the polar of a sublevel set of a nonnegative convex function is within a factor of two of the corresponding sublevel set of the conjugate.

Main definitions #

Main results #

Implementation notes #

gaugeFn is EReal-valued and infimises over a ≥ 0, so it is +∞ off ⋃ a • C; that is what makes {γ ≤ c} equal c • C. Mathlib's gauge infimises over a > 0 into ℝ and returns 0 there instead — the two agree under absorbency (gaugeFn_eq_gauge) — while egauge is this same infimum taken in ℝ≥0∞, whereas every function in this library is EReal-valued.

The book's admissible set for f°, {μ ≥ 0 ∣ ⟨x, y⟩ ≤ 1 + μ f(x) ∀ x}, is not closed: at μ = 0 the convention 0 · (+∞) = 0 imposes ⟨x, y⟩ ≤ 1 where f x = +∞, which nearby positive μ do not. Quantifying over epi f gives a closed, upward closed set with the same infimum.

Divergences from the reference #

The sublevel-set inclusions are stated for any nonnegative convex f with f 0 ≤ 0, with no closedness. isNorm_iff uses AbsorbsAll C and RayFree C where the book has 0 ∈ int C and C bounded — equivalent readings in ℝⁿ — and does not assert that a norm is closed, which the book obtains from the continuity of a finite convex function on ℝⁿ. gaugeFn_level_one needs only nonnegativity, positive homogeneity and k 0 = 0, and gaugeFn_polarSet (γ(· ∣ C°) = δ*(· ∣ C)) needs only 0 ∈ C.

References #

[^1]: R. T. Rockafellar, Convex Analysis, Princeton University Press, 1970, §14 and §15.

Infima of upward closed sets of reals #

Every definition in this file is an infimum ⨅ a ∈ S, (a : EReal) of a set S ⊆ ℝ of admissible scalars, and every proof about it needs to convert ⨅ a ∈ S, a ≤ c into a statement about membership in S. The two lemmas here are that conversion: it is unconditional in the form "every d > c lies in S" once S is upward closed, and becomes "c ∈ S" once S is also closed.

S ⊆ ℝ is upward closed: the shape shared by the admissible-scalar sets of gaugeFn, polarGauge, polarFn and obverse.

Equations
Instances For
    theorem Tdaf.ConvexAnalysis.biInf_coe_le_coe_iff_forall_lt {S : Set ℝ} (hS : UpClosed S) (c : ℝ) :
    ⨅ a ∈ S, ↑a ≤ ↑c ↔ ∀ (d : ℝ), c < d → d ∈ S

    The infimum of an upward closed set of reals is ≤ c exactly when every d > c belongs to it.

    theorem Tdaf.ConvexAnalysis.biInf_coe_le_coe_iff {S : Set ℝ} (hS : UpClosed S) (hcl : IsClosed S) (c : ℝ) :
    ⨅ a ∈ S, ↑a ≤ ↑c ↔ c ∈ S

    For a closed upward closed set of reals, the infimum is ≤ c exactly when c belongs to it.

    theorem Tdaf.ConvexAnalysis.zero_le_biInf_coe {S : Set ℝ} (h : ∀ a ∈ S, 0 ≤ a) :
    0 ≤ ⨅ a ∈ S, ↑a

    The infimum of a nonempty upward closed set of reals bounded below by 0 is nonnegative.

    theorem Tdaf.ConvexAnalysis.le_coe_of_forall_gt_le {z : EReal} {r : ℝ} (h : ∀ (d : ℝ), r < d → z ≤ ↑d) :
    z ≤ ↑r

    If z ≤ d for every real d above r, then z ≤ r. The ≤ companion of Tdaf.EReal.le_coe_of_forall_lt.

    The gauge of a convex set #

    γ(x | C) = inf {a ≥ 0 | x ∈ a • C}. The scalar 0 is admitted, and 0 • C = {0} for nonempty C, so γ(0 | C) = 0 for every nonempty C — that is what makes a gauge vanish at the origin even when C does not contain it.

    noncomputable def Tdaf.ConvexAnalysis.gaugeFn {E : Type u_1} [AddCommGroup E] [Module ℝ E] (C : Set E) :
    E → EReal

    The gauge of a set C: γ(x | C) = inf {a ≥ 0 | x ∈ a • C}.

    Named gaugeFn because it is neither of Mathlib's two Minkowski functionals; gaugeFn_eq_gauge and gaugeFn_eq_egauge are the bridges, and the module docstring says why the EReal-valued version is the one this development needs.

    Equations
    Instances For
      theorem Tdaf.ConvexAnalysis.gaugeFn_apply {E : Type u_1} [AddCommGroup E] [Module ℝ E] (C : Set E) (x : E) :
      gaugeFn C x = ⨅ a ∈ {a : ℝ | 0 ≤ a ∧ x ∈ a • C}, ↑a
      theorem Tdaf.ConvexAnalysis.gaugeFn_le_of_mem_smul {E : Type u_1} [AddCommGroup E] [Module ℝ E] {C : Set E} {x : E} {a : ℝ} (ha : 0 ≤ a) (h : x ∈ a • C) :
      gaugeFn C x ≤ ↑a
      theorem Tdaf.ConvexAnalysis.gaugeFn_nonneg {E : Type u_1} [AddCommGroup E] [Module ℝ E] (C : Set E) (x : E) :
      0 ≤ gaugeFn C x
      theorem Tdaf.ConvexAnalysis.gaugeFn_ne_bot {E : Type u_1} [AddCommGroup E] [Module ℝ E] (C : Set E) (x : E) :
      theorem Tdaf.ConvexAnalysis.gaugeFn_lt_iff {E : Type u_1} [AddCommGroup E] [Module ℝ E] {C : Set E} {x : E} {z : EReal} :
      gaugeFn C x < z ↔ ∃ (a : ℝ), 0 ≤ a ∧ x ∈ a • C ∧ ↑a < z

      The witness extractor: a strict upper bound for the gauge is witnessed by an admissible scalar. The infimum is not attained in general, so this is the only way in.

      theorem Tdaf.ConvexAnalysis.gaugeFn_anti {E : Type u_1} [AddCommGroup E] [Module ℝ E] {C D : Set E} (h : C ⊆ D) :
      @[simp]
      theorem Tdaf.ConvexAnalysis.gaugeFn_empty {E : Type u_1} [AddCommGroup E] [Module ℝ E] :
      gaugeFn ∅ = fun (x : E) => ⊤
      @[simp]
      theorem Tdaf.ConvexAnalysis.gaugeFn_zero {E : Type u_1} [AddCommGroup E] [Module ℝ E] {C : Set E} (hne : C.Nonempty) :
      gaugeFn C 0 = 0

      A gauge vanishes at the origin: 0 ∈ 0 • C as soon as C is nonempty.

      theorem Tdaf.ConvexAnalysis.gaugeFn_smul_le {E : Type u_1} [AddCommGroup E] [Module ℝ E] {t : ℝ} (ht : 0 < t) (C : Set E) (x : E) :
      gaugeFn C (t • x) ≤ ↑t * gaugeFn C x

      Gauges #

      A gauge is a nonnegative positively homogeneous convex function vanishing at the origin — equivalently, a function whose epigraph is a convex cone containing the origin and no (x, μ) with μ < 0. isGauge_iff is the other description: the gauges are exactly the γ(· | C) for nonempty convex C.

      structure Tdaf.ConvexAnalysis.IsGauge {E : Type u_1} [AddCommGroup E] [Module ℝ E] (k : E → EReal) :

      A gauge: a nonnegative positively homogeneous convex function that vanishes at the origin.

      • nonneg (x : E) : 0 ≤ k x

        A gauge is nonnegative.

      • posHomogeneous : PosHomogeneous k

        A gauge is positively homogeneous.

      • convexFn : ConvexFn k

        A gauge is convex.

      • map_zero : k 0 = 0

        A gauge vanishes at the origin. This is a genuine extra condition: it rules out k ≡ +∞, which satisfies the other three.

      Instances For
        theorem Tdaf.ConvexAnalysis.IsGauge.ne_bot {E : Type u_1} [AddCommGroup E] [Module ℝ E] {k : E → EReal} (hk : IsGauge k) (x : E) :
        k x ≠ ⊥
        theorem Tdaf.ConvexAnalysis.isGauge_gaugeFn {E : Type u_1} [AddCommGroup E] [Module ℝ E] {C : Set E} (hC : Convex ℝ C) (hne : C.Nonempty) :
        theorem Tdaf.ConvexAnalysis.IsGauge.convex_level_one {E : Type u_1} [AddCommGroup E] [Module ℝ E] {k : E → EReal} (hk : IsGauge k) :
        Convex ℝ {x : E | k x ≤ 1}
        theorem Tdaf.ConvexAnalysis.IsGauge.zero_mem_level_one {E : Type u_1} [AddCommGroup E] [Module ℝ E] {k : E → EReal} (hk : IsGauge k) :
        0 ∈ {x : E | k x ≤ 1}
        theorem Tdaf.ConvexAnalysis.gaugeFn_level_one {E : Type u_1} [AddCommGroup E] [Module ℝ E] {k : E → EReal} (hnn : ∀ (x : E), 0 ≤ k x) (hph : PosHomogeneous k) (h0 : k 0 = 0) :
        gaugeFn {x : E | k x ≤ 1} = k

        A gauge is the gauge of its own unit level set: γ(· | {k ≤ 1}) = k. Convexity is not used — only nonnegativity, positive homogeneity, and k 0 = 0.

        This is the half of the gauge/set correspondence that needs no topology; the other half, level_one_gaugeFn, does.

        theorem Tdaf.ConvexAnalysis.isGauge_iff {E : Type u_1} [AddCommGroup E] [Module ℝ E] {k : E → EReal} :
        IsGauge k ↔ ∃ (C : Set E), C.Nonempty ∧ Convex ℝ C ∧ k = gaugeFn C

        The gauges are exactly the gauge functions of the nonempty convex sets. {x | k x ≤ 1} is the canonical choice of set, and it is the only closed one containing the origin (gaugeEquiv).

        Gauges of sets containing the origin #

        The admissible-scalar set {a ≥ 0 | x ∈ a • C} is upward closed exactly because a • C ⊆ b • C for 0 ≤ a ≤ b when C is convex and contains the origin. Everything quantitative about gaugeFn goes through that.

        theorem Tdaf.ConvexAnalysis.smul_subset_smul_of_le {E : Type u_1} [AddCommGroup E] [Module ℝ E] {C : Set E} {a b : ℝ} (hC : Convex ℝ C) (h0 : 0 ∈ C) (ha : 0 ≤ a) (hab : a ≤ b) :
        a • C ⊆ b • C
        theorem Tdaf.ConvexAnalysis.upClosed_gaugeSet {E : Type u_1} [AddCommGroup E] [Module ℝ E] {C : Set E} (hC : Convex ℝ C) (h0 : 0 ∈ C) (x : E) :
        UpClosed {a : ℝ | 0 ≤ a ∧ x ∈ a • C}

        The admissible-scalar set of the gauge is upward closed, for a convex set containing the origin.

        theorem Tdaf.ConvexAnalysis.gaugeFn_le_coe_iff_forall_lt {E : Type u_1} [AddCommGroup E] [Module ℝ E] {C : Set E} {x : E} {c : ℝ} (hC : Convex ℝ C) (h0 : 0 ∈ C) (hc : 0 ≤ c) :
        gaugeFn C x ≤ ↑c ↔ ∀ (d : ℝ), c < d → x ∈ d • C

        The level sets of a gauge, without closedness. γ(x | C) ≤ c exactly when x ∈ d • C for every d > c.

        theorem Tdaf.ConvexAnalysis.setOf_gaugeFn_le {E : Type u_1} [AddCommGroup E] [Module ℝ E] {C : Set E} {c : ℝ} (hC : Convex ℝ C) (h0 : 0 ∈ C) (hc : 0 ≤ c) :
        {x : E | gaugeFn C x ≤ ↑c} = ⋂ d ∈ Set.Ioi c, d • C

        The sublevel sets of a gauge, as intersections of dilates.

        Closed gauges #

        For a closed convex set containing the origin the level sets of the gauge are the dilates themselves, {x | γ(x | C) ≤ c} = c • C for c > 0, and the gauge is closed. gaugeEquiv packages the resulting one-to-one correspondence.

        theorem Tdaf.ConvexAnalysis.gaugeFn_le_coe_iff {E : Type u_1} [AddCommGroup E] [Module ℝ E] [TopologicalSpace E] [ContinuousSMul ℝ E] {C : Set E} {x : E} {c : ℝ} (hC : Convex ℝ C) (h0 : 0 ∈ C) (hcl : IsClosed C) (hc : 0 < c) :
        gaugeFn C x ≤ ↑c ↔ x ∈ c • C

        The level sets of a closed gauge are the dilates. γ(x | C) ≤ c exactly when x ∈ c • C, for c > 0 and C closed convex containing the origin.

        The restriction to c > 0 is essential: {x | γ(x | C) ≤ 0} is the recession cone of C, not 0 • C = {0}.

        theorem Tdaf.ConvexAnalysis.setOf_gaugeFn_le_pos {E : Type u_1} [AddCommGroup E] [Module ℝ E] [TopologicalSpace E] [ContinuousSMul ℝ E] {C : Set E} {c : ℝ} (hC : Convex ℝ C) (h0 : 0 ∈ C) (hcl : IsClosed C) (hc : 0 < c) :
        {x : E | gaugeFn C x ≤ ↑c} = c • C

        The sublevel sets of a closed gauge, for a positive level.

        theorem Tdaf.ConvexAnalysis.setOf_gaugeFn_le_one {E : Type u_1} [AddCommGroup E] [Module ℝ E] [TopologicalSpace E] [ContinuousSMul ℝ E] {C : Set E} (hC : Convex ℝ C) (h0 : 0 ∈ C) (hcl : IsClosed C) :
        {x : E | gaugeFn C x ≤ 1} = C

        The unit level set of the gauge recovers the set: {x | γ(x | C) ≤ 1} = C for a closed convex set containing the origin. Together with gaugeFn_level_one this is the one-to-one correspondence between closed gauges and closed convex sets containing the origin.

        The gauge of a closed convex set containing the origin is lower semicontinuous: each of its sublevel sets is an intersection of dilates of C.

        The gauge correspondence: the closed gauges on E are in bijection with the closed convex subsets of E containing the origin, by C ↦ γ(· | C) and k ↦ {x | k x ≤ 1}.

        This is the gauge analogue of supportEquiv (Duality/Support.lean).

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For

          The gauge of a polar set #

          The gauge of C° is the support function of C. The book states this for a closed convex C containing the origin, as part of the polarity theorem; only 0 ∈ C is used.

          theorem Tdaf.ConvexAnalysis.gaugeFn_polarSet {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {C : Set E} (h0 : 0 ∈ C) :

          The gauge of the polar set is the support function: γ(· | C°) = δ*(· | C).

          Only 0 ∈ C is needed — neither convexity nor closedness — because 0 ∈ C is exactly what makes δ*(· | C) nonnegative, and the two infima then agree scalar by scalar.

          The recession cone and the lineality space as polars #

          0⁺C and the closed convex cone generated by C° are polar to each other, and the lineality space of C is the annihilator of C°. The classical proof reads the recession cone off as the largest closed convex cone inside C; the argument here identifies it directly as a polar, which needs only the bipolar theorem.

          The easy half: a recession direction of a set containing the origin is nonpositively paired with every element of the polar.

          The recession cone is the polar of the polar set, for a closed convex set containing the origin.

          The recession cone of a polar set is a polar cone: 0⁺(C°) = C° read as a cone polar rather than a set polar, for a closed convex C containing the origin.

          The previous result applied to C°, whose bipolar is C (polarSet_polarSet). Both spaces are topologised here, because the recession cone being computed lives in F.

          The recession cone of C and the closed convex cone generated by C° are polar to each other.

          The lineality space of a closed convex set containing the origin is the annihilator of its polar.

          The polar of the lineality space of C is the closed subspace generated by C°, the dual form of the previous result.

          The dimension relations for a polar set #

          dim C° = n - lin C and lin C° = n - dim C. They are the orthogonality above read through finrank: the polar of a subspace is its annihilator, and the annihilator of a subspace of a finite-dimensional space has the complementary dimension.

          vectorSpan_eq_span_of_zero_mem — the affine and linear hulls of a set through the origin agree — is Tdaf.vectorSpan_eq_span_of_zero_mem in Tdaf/LinearAlgebra/Subspace.lean. It has no convexity in it and three unrelated developments want it.

          The polar of a subspace has the complementary dimension. This is rank–nullity for the map F → M* that a compatible pairing induces: it is onto because B.flip is onto E* (compatibility, plus the automatic continuity of a functional in finite dimensions) and restriction E* → M* is onto, and its kernel is the polar of M.

          dim C° = n - lin C for a closed convex set containing the origin, stated without truncated subtraction, as dim C° + lin C = n.

          The subspace generated by C° is the polar of the lineality space of C (polarCone_linealitySpace; the closure there is redundant in finite dimensions), and the affine hull of C° is its linear hull because 0 ∈ C°.

          lin C° = n - dim C, again without truncated subtraction. It is the first relation applied to the polar pair the other way round, using C°° = C.

          The book's third relation, rank C° = rank C, is the difference of the two: both dim C° + lin C and dim C + lin C° equal n.

          The polar of a sublevel set #

          For a nonnegative convex function vanishing at the origin, the polar of a sublevel set and the corresponding sublevel set of the conjugate are within a factor of 2 of each other.

          theorem Tdaf.ConvexAnalysis.ConvexFn.smul_le_coe {E : Type u_1} [AddCommGroup E] [Module ℝ E] {f : E → EReal} (hconv : ConvexFn f) (h0 : f 0 ≤ 0) {t r : ℝ} (ht0 : 0 ≤ t) (ht1 : t ≤ 1) {x : E} (hx : f x ≤ ↑r) :
          f (t • x) ≤ ↑(t * r)

          A convex function that is nonpositive at the origin is subhomogeneous for factors in [0, 1]: f (t • x) ≤ t * r whenever f x ≤ r.

          theorem Tdaf.ConvexAnalysis.zero_le_conj {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {f : E → EReal} (h0 : f 0 ≤ 0) (y : F) :
          0 ≤ conj B f y

          The conjugate of a function that is nonpositive at the origin is nonnegative.

          theorem Tdaf.ConvexAnalysis.conj_zero_eq_zero {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {f : E → EReal} (hnn : ∀ (x : E), 0 ≤ f x) (h0 : f 0 ≤ 0) :
          conj B f 0 = 0

          The conjugate of a nonnegative function vanishing at the origin again vanishes at the origin.

          theorem Tdaf.ConvexAnalysis.smul_polarSet_setOf_le_subset {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {f : E → EReal} {α : ℝ} (hconv : ConvexFn f) (hnn : ∀ (x : E), 0 ≤ f x) (h0 : f 0 ≤ 0) (hα : 0 < α) :
          α • polarSet B {x : E | f x ≤ ↑α} ⊆ {y : F | conj B f y ≤ ↑α}

          The first inclusion (in scaled form): α • {f ≤ α}° ⊆ {f* ≤ α}.

          The book proves this through the positively homogeneous function generated by f* + α. The direct argument is shorter: for f x > α the point (α / f x) • x lies in the sublevel set, and rescaling the inequality it satisfies gives ⟨x, y⟩ ≤ f x.

          theorem Tdaf.ConvexAnalysis.setOf_conj_le_subset_smul_polarSet {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {f : E → EReal} {α : ℝ} (hnn : ∀ (x : E), 0 ≤ f x) (hα : 0 < α) :
          {y : F | conj B f y ≤ ↑α} ⊆ (2 * α) • polarSet B {x : E | f x ≤ ↑α}

          The second inclusion (in scaled form): {f* ≤ α} ⊆ (2α) • {f ≤ α}°. This half is Fenchel's inequality and nothing else.

          theorem Tdaf.ConvexAnalysis.polarSet_setOf_le_subset_and_subset {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {f : E → EReal} {α : ℝ} (hconv : ConvexFn f) (hnn : ∀ (x : E), 0 ≤ f x) (h0 : f 0 ≤ 0) (hα : 0 < α) :
          polarSet B {x : E | f x ≤ ↑α} ⊆ α⁻¹ • {y : F | conj B f y ≤ ↑α} ∧ α⁻¹ • {y : F | conj B f y ≤ ↑α} ⊆ 2 • polarSet B {x : E | f x ≤ ↑α}

          The two inclusions together: {f ≤ α}° ⊆ α⁻¹ • {f* ≤ α} ⊆ 2 • {f ≤ α}°.

          The polar of a gauge #

          k°(y) = inf {μ ≥ 0 | ⟨x, y⟩ ≤ μ k(x) for all x}. The content of this section is that k° is the support function of {k ≤ 1}, hence a closed gauge, and that it is γ(· | C°) whenever k = γ(· | C).

          noncomputable def Tdaf.ConvexAnalysis.polarGauge {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (k : E → EReal) :
          F → EReal

          The polar of a gauge: k°(y) = inf {μ ≥ 0 | ⟨x, y⟩ ≤ μ k(x) for every x}.

          The product μ * k x is EReal multiplication, so 0 * (+∞) = 0; that makes μ = 0 admissible only when ⟨·, y⟩ ≤ 0 everywhere, which is the classical reading of the μ* = 0 case. The infimum is insensitive to the convention, since the admissible set is an up-set in [0, ∞).

          Equations
          Instances For
            theorem Tdaf.ConvexAnalysis.polarGauge_apply {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (k : E → EReal) (y : F) :
            polarGauge B k y = ⨅ μ ∈ {μ : ℝ | 0 ≤ μ ∧ ∀ (x : E), ↑((B x) y) ≤ ↑μ * k x}, ↑μ
            theorem Tdaf.ConvexAnalysis.polarGauge_le_of_forall {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {k : E → EReal} {y : F} {μ : ℝ} (hμ : 0 ≤ μ) (h : ∀ (x : E), ↑((B x) y) ≤ ↑μ * k x) :
            polarGauge B k y ≤ ↑μ
            theorem Tdaf.ConvexAnalysis.polarGauge_nonneg {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (k : E → EReal) (y : F) :
            0 ≤ polarGauge B k y
            theorem Tdaf.ConvexAnalysis.polarGauge_eq_supportFn {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {k : E → EReal} (hnn : ∀ (x : E), 0 ≤ k x) (hph : PosHomogeneous k) (h0 : k 0 = 0) :
            polarGauge B k = supportFn B {x : E | k x ≤ 1}

            The polar of a gauge is the support function of its unit level set.

            Convexity of k is not used; nonnegativity, positive homogeneity and k 0 = 0 are.

            theorem Tdaf.ConvexAnalysis.isGauge_polarGauge {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {k : E → EReal} (hnn : ∀ (x : E), 0 ≤ k x) (hph : PosHomogeneous k) (h0 : k 0 = 0) :

            The polar of a gauge is a gauge.

            theorem Tdaf.ConvexAnalysis.closedFn_polarGauge {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {k : E → EReal} [TopologicalSpace F] [IsTopologicalAddGroup F] [IsContinuousPairing B.flip] (hnn : ∀ (x : E), 0 ≤ k x) (hph : PosHomogeneous k) (h0 : k 0 = 0) :

            The polar of a gauge is a closed gauge.

            theorem Tdaf.ConvexAnalysis.polarGauge_gaugeFn {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {C : Set E} (hC : Convex ℝ C) (hne : C.Nonempty) :

            Polarity of gauges is polarity of sets: if k = γ(· | C) for a nonempty convex set C, then k° = γ(· | C°).

            C is neither required to contain the origin nor to be closed — the polar set does not distinguish C from {x | γ(x | C) ≤ 1}, which does contain the origin.

            theorem Tdaf.ConvexAnalysis.polarGauge_gaugeFn_eq_supportFn {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {C : Set E} (hC : Convex ℝ C) (h0 : 0 ∈ C) :

            For a convex set containing the origin, the gauge function and the support function of C are gauges polar to each other.

            The pairing of E × ℝ with F × ℝ #

            Polarity of a function is polarity of its epigraph, one dimension higher, so it needs a pairing of E × ℝ with F × ℝ. prodPairing (Duality/Pairing.lean) supplies it once ℝ is paired with itself, and mulPairing is that self-pairing.

            The self-pairing of ℝ by multiplication.

            Equations
            Instances For
              @[simp]
              @[reducible, inline]

              The pairing under which epigraphs are polarised: ⟨(x, ν), (y, μ)⟩ = ⟨x, y⟩ + ν μ.

              An abbrev so that the prodPairing instances of Duality/Pairing.lean remain visible to instance search (a def would hide them — LinearMap.flip is the same trap).

              Equations
              Instances For
                @[simp]
                theorem Tdaf.ConvexAnalysis.epiPairing_apply {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (p : E × ℝ) (q : F × ℝ) :
                ((epiPairing B) p) q = (B p.1) q.1 + p.2 * q.2

                Vertical reflection: (x, μ) ↦ (x, -μ).

                Equations
                Instances For
                  @[simp]
                  theorem Tdaf.ConvexAnalysis.vNeg_apply (X : Type u_3) [AddCommGroup X] [Module ℝ X] (p : X × ℝ) :
                  (vNeg X) p = (p.1, -p.2)
                  @[simp]
                  theorem Tdaf.ConvexAnalysis.vNeg_vNeg (X : Type u_3) [AddCommGroup X] [Module ℝ X] (p : X × ℝ) :
                  (vNeg X) ((vNeg X) p) = p
                  theorem Tdaf.ConvexAnalysis.image_vNeg_eq_preimage (X : Type u_3) [AddCommGroup X] [Module ℝ X] (S : Set (X × ℝ)) :
                  ⇑(vNeg X) '' S = ⇑(vNeg X) ⁻¹' S
                  @[simp]
                  theorem Tdaf.ConvexAnalysis.image_vNeg_image_vNeg (X : Type u_3) [AddCommGroup X] [Module ℝ X] (S : Set (X × ℝ)) :
                  ⇑(vNeg X) '' ⇑(vNeg X) '' S = S
                  theorem Tdaf.ConvexAnalysis.polarSet_image_vNeg {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (S : Set (E × ℝ)) :
                  polarSet (epiPairing B) (⇑(vNeg E) '' S) = ⇑(vNeg F) '' polarSet (epiPairing B) S

                  Polarity commutes with vertical reflection: (A S)° = A (S°), because A is self-adjoint for epiPairing.

                  The polar of a nonnegative convex function #

                  f°(y) = inf {μ ≥ 0 | ⟨x, y⟩ ≤ 1 + μ f(x) for all x}. The definition below is the ∞-free reading of that formula, quantifying over the epigraph of f rather than over f itself: μ is admissible when ⟨x, y⟩ - ν μ ≤ 1 for every (x, ν) ∈ epi f. This says exactly that (y, -μ) lies in the polar of epi f, which is what the classical proof uses, and polarFn_apply_eq shows it agrees with the original formula.

                  noncomputable def Tdaf.ConvexAnalysis.polarFn {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (f : E → EReal) :
                  F → EReal

                  The polar of a nonnegative convex function vanishing at the origin: f°(y) = inf {μ ≥ 0 | ⟨x, y⟩ ≤ 1 + μ f(x) for all x}, in the epigraph form.

                  Equations
                  Instances For
                    def Tdaf.ConvexAnalysis.polarFnSet {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (f : E → EReal) (y : F) :
                    Equations
                    Instances For
                      theorem Tdaf.ConvexAnalysis.polarFn_apply {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (f : E → EReal) (y : F) :
                      polarFn B f y = ⨅ μ ∈ polarFnSet B f y, ↑μ
                      theorem Tdaf.ConvexAnalysis.upClosed_polarFnSet {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {f : E → EReal} (hnn : ∀ (x : E), 0 ≤ f x) (y : F) :

                      The admissible-multiplier set is upward closed: the vertical coordinates of epi f are nonnegative because f is.

                      theorem Tdaf.ConvexAnalysis.isClosed_polarFnSet {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (f : E → EReal) (y : F) :

                      The admissible-multiplier set is closed: it is an intersection of closed half-lines.

                      theorem Tdaf.ConvexAnalysis.polarFn_le_coe_iff {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {f : E → EReal} {y : F} {μ : ℝ} (hnn : ∀ (x : E), 0 ≤ f x) :
                      polarFn B f y ≤ ↑μ ↔ ∀ (x : E) (ν : ℝ), f x ≤ ↑ν → (B x) y - ν * μ ≤ 1

                      The defining inequality of polarFn.

                      theorem Tdaf.ConvexAnalysis.polarFn_nonneg {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {f : E → EReal} (h0 : f 0 ≤ 0) (y : F) :
                      0 ≤ polarFn B f y
                      @[simp]
                      theorem Tdaf.ConvexAnalysis.polarFn_zero {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (f : E → EReal) (h0 : f 0 ≤ 0) :
                      polarFn B f 0 = 0

                      The polar of a function vanishes at the origin.

                      theorem Tdaf.ConvexAnalysis.polarFn_apply_eq {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {f : E → EReal} (hnn : ∀ (x : E), 0 ≤ f x) (h0 : f 0 ≤ 0) (y : F) :
                      polarFn B f y = ⨅ μ ∈ {μ : ℝ | 0 ≤ μ ∧ ∀ (x : E), ↑((B x) y) ≤ 1 + ↑μ * f x}, ↑μ

                      The original formula for the polar, recovered from the epigraph form: f°(y) is the infimum of the μ ≥ 0 with ⟨x, y⟩ ≤ 1 + μ f(x) for every x.

                      The two admissible sets differ only at μ = 0, where the convention 0 · (+∞) = 0 imposes a condition off dom f that the epigraph form does not; since both are up-sets in [0, ∞), the infima agree.

                      Closures of nonnegative functions #

                      A nonnegative function has a nonnegative lower semicontinuous hull, so the exceptional ⊥ branch of clFn never fires and cl f is computed by the closure of the epigraph.

                      theorem Tdaf.ConvexAnalysis.nonneg_of_mem_closure_epi {E : Type u_1} [TopologicalSpace E] {f : E → EReal} (hnn : ∀ (x : E), 0 ≤ f x) {p : E × ℝ} (hp : p ∈ closure (epi f)) :
                      0 ≤ p.2

                      The closure of the epigraph of a nonnegative function stays in the upper half-space.

                      theorem Tdaf.ConvexAnalysis.lscHull_nonneg {E : Type u_1} [TopologicalSpace E] {f : E → EReal} (hnn : ∀ (x : E), 0 ≤ f x) (x : E) :
                      0 ≤ lscHull f x
                      theorem Tdaf.ConvexAnalysis.clFn_eq_lscHull_of_nonneg {E : Type u_1} [TopologicalSpace E] {f : E → EReal} (hnn : ∀ (x : E), 0 ≤ f x) :

                      For a nonnegative function the closure is the lower semicontinuous hull: the exceptional branch of clFn cannot fire.

                      theorem Tdaf.ConvexAnalysis.clFn_nonneg {E : Type u_1} [TopologicalSpace E] {f : E → EReal} (hnn : ∀ (x : E), 0 ≤ f x) (x : E) :
                      0 ≤ clFn f x
                      theorem Tdaf.ConvexAnalysis.closedFn_of_isClosed_epi {E : Type u_1} [TopologicalSpace E] {f : E → EReal} (hnn : ∀ (x : E), 0 ≤ f x) (hcl : IsClosed (epi f)) :

                      A nonnegative function with a closed epigraph is closed.

                      theorem Tdaf.ConvexAnalysis.epi_clFn_of_nonneg {E : Type u_1} [TopologicalSpace E] [AddCommGroup E] [IsTopologicalAddGroup E] {f : E → EReal} (hnn : ∀ (x : E), 0 ≤ f x) :
                      epi (clFn f) = closure (epi f)

                      For a nonnegative function the epigraph of the closure is the closure of the epigraph.

                      theorem Tdaf.ConvexAnalysis.isClosed_epi_of_closedFn {E : Type u_1} [TopologicalSpace E] [AddCommGroup E] [IsTopologicalAddGroup E] {f : E → EReal} (hnn : ∀ (x : E), 0 ≤ f x) (hcl : ClosedFn f) :

                      A nonnegative closed function has a closed epigraph.

                      theorem Tdaf.ConvexAnalysis.closedFn_iff_isClosed_epi {E : Type u_1} [TopologicalSpace E] [AddCommGroup E] [IsTopologicalAddGroup E] {f : E → EReal} (hnn : ∀ (x : E), 0 ≤ f x) :

                      Closedness of a nonnegative function, as a statement about its epigraph.

                      The bipolar of a function #

                      The epigraph of f° is the vertical reflection of the polar of the epigraph of f, so the bipolar theorem of Duality/Polar.lean, applied in E × ℝ, gives f°° = cl f at once.

                      theorem Tdaf.ConvexAnalysis.epi_polarFn {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {f : E → EReal} (hnn : ∀ (x : E), 0 ≤ f x) :
                      epi (polarFn B f) = ⇑(vNeg F) '' polarSet (epiPairing B) (epi f)

                      The epigraph of the polar: epi f° = A ((epi f)°), where A is the vertical reflection vNeg.

                      theorem Tdaf.ConvexAnalysis.convexFn_polarFn {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {f : E → EReal} (hnn : ∀ (x : E), 0 ≤ f x) :

                      The polar of a nonnegative function is convex, being cut out by a polar set.

                      theorem Tdaf.ConvexAnalysis.closedFn_polarFn {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] [TopologicalSpace F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} [IsContinuousPairing B.flip] {f : E → EReal} (hnn : ∀ (x : E), 0 ≤ f x) (h0 : f 0 ≤ 0) :

                      The polar of a nonnegative function vanishing at the origin is closed, because polar sets are closed.

                      theorem Tdaf.ConvexAnalysis.polarFn_polarFn {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [TopologicalSpace E] [IsTopologicalAddGroup E] [ContinuousSMul ℝ E] [LocallyConvexSpace ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} [IsCompatiblePairing B] {f : E → EReal} (hconv : ConvexFn f) (hnn : ∀ (x : E), 0 ≤ f x) (h0 : f 0 ≤ 0) :

                      The bipolar is the closure: for a nonnegative convex function vanishing at the origin, f°° = cl f.

                      The outer polar is taken with respect to B.flip, since f° lives on F.

                      The class on which the polar is an involution #

                      The nonnegative closed convex functions that vanish at the origin.

                      The nonnegative closed convex functions vanishing at the origin. These are exactly the functions that arise as polars (isPolarFn_polarFn and polarFn_polarFn), and f ↦ f° is an involution on them.

                      • nonneg (x : E) : 0 ≤ f x

                        A polar is nonnegative.

                      • map_zero : f 0 = 0

                        A polar vanishes at the origin.

                      • convexFn : ConvexFn f

                        A polar is convex.

                      • closedFn : ClosedFn f

                        A polar is closed.

                      Instances For
                        theorem Tdaf.ConvexAnalysis.IsGauge.isPolarFn {E : Type u_1} [AddCommGroup E] [Module ℝ E] [TopologicalSpace E] {f : E → EReal} (h : IsGauge f) (hcl : ClosedFn f) :

                        A closed gauge is an IsPolarFn.

                        The polar of an IsPolarFn is again one: the four conditions are inherited.

                        f ↦ f° is a symmetric one-to-one correspondence on the nonnegative closed convex functions vanishing at the origin.

                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For

                          The involution k°° = cl k #

                          The book derives this from polarity of the unit level set. Here it is a special case of polarFn_polarFn instead: on a gauge the two polar operations agree (polarFn_eq_polarGauge), because the 1 + in the definition of f° is invisible to a positively homogeneous function.

                          theorem Tdaf.ConvexAnalysis.polarFn_eq_polarGauge {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {k : E → EReal} (hnn : ∀ (x : E), 0 ≤ k x) (hph : PosHomogeneous k) (h0 : k 0 = 0) :

                          The two polar operations agree on gauges: the 1 + in the definition of f° is invisible to a positively homogeneous f.

                          The admissible set of polarGauge is contained in that of polarFn, and the two differ at most at 0; since both are up-sets in [0, ∞), the infima agree.

                          Polarity as a correspondence, for gauges and for sets #

                          k ↦ k° is a symmetric one-to-one correspondence on the closed gauges.

                          Equations
                          • One or more equations did not get rendered due to their size.
                          Instances For
                            theorem Tdaf.ConvexAnalysis.polarSet_eq_iff_polarGauge_gaugeFn_eq {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] [TopologicalSpace F] [ContinuousSMul ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) [IsContinuousPairing B.flip] {C : Set E} {D : Set F} (hC : Convex ℝ C) (h0 : 0 ∈ C) (hD : Convex ℝ D) (hDcl : IsClosed D) (hD0 : 0 ∈ D) :

                            Two closed convex sets containing the origin are polar to each other exactly when their gauges are.

                            The obverse #

                            g(x) = inf {λ > 0 | (fλ)(x) ≤ 1}. The observation that replaces the geometric argument of the book is that this is a gauge value one dimension higher: g(x) = γ((x, 1) | epi f). Everything about the obverse then follows from the gauge API.

                            theorem Tdaf.ConvexAnalysis.mk_mem_smul_epi_iff {E : Type u_1} [AddCommGroup E] [Module ℝ E] {a : ℝ} (ha : 0 < a) (f : E → EReal) (x : E) (r : ℝ) :
                            (x, r) ∈ a • epi f ↔ f (a⁻¹ • x) ≤ ↑(a⁻¹ * r)
                            theorem Tdaf.ConvexAnalysis.mk_one_mem_epi_iff {E : Type u_1} (f : E → EReal) (x : E) :
                            (x, 1) ∈ epi f ↔ f x ≤ 1
                            noncomputable def Tdaf.ConvexAnalysis.obverse {E : Type u_1} [AddCommGroup E] [Module ℝ E] (f : E → EReal) :
                            E → EReal

                            The obverse of f, Rockafellar's term: g(x) = inf {λ > 0 | (fλ)(x) ≤ 1}.

                            Equations
                            Instances For
                              theorem Tdaf.ConvexAnalysis.obverse_apply {E : Type u_1} [AddCommGroup E] [Module ℝ E] (f : E → EReal) (x : E) :
                              obverse f x = ⨅ l ∈ {l : ℝ | 0 < l ∧ smulRight f l x ≤ 1}, ↑l
                              theorem Tdaf.ConvexAnalysis.obverseSet_eq {E : Type u_1} [AddCommGroup E] [Module ℝ E] (f : E → EReal) (x : E) :
                              {l : ℝ | 0 < l ∧ smulRight f l x ≤ 1} = {a : ℝ | 0 ≤ a ∧ (x, 1) ∈ a • epi f}

                              The admissible set of the obverse is the admissible set of the gauge of epi f at height one: the scalar 0 is never admissible, because (x, 1) ∉ 0 • S.

                              theorem Tdaf.ConvexAnalysis.obverse_eq_gaugeFn {E : Type u_1} [AddCommGroup E] [Module ℝ E] (f : E → EReal) (x : E) :
                              obverse f x = gaugeFn (epi f) (x, 1)

                              The obverse is a gauge value one dimension up: g(x) = γ((x, 1) | epi f).

                              theorem Tdaf.ConvexAnalysis.epi_obverse {E : Type u_1} [AddCommGroup E] [Module ℝ E] (f : E → EReal) :
                              epi (obverse f) = (fun (p : E × ℝ) => ((p.1, 1), p.2)) ⁻¹' epi (gaugeFn (epi f))

                              The epigraph of the obverse is a slice of the epigraph of the gauge of epi f.

                              theorem Tdaf.ConvexAnalysis.obverse_nonneg {E : Type u_1} [AddCommGroup E] [Module ℝ E] (f : E → EReal) (x : E) :
                              0 ≤ obverse f x
                              theorem Tdaf.ConvexAnalysis.obverse_ne_bot {E : Type u_1} [AddCommGroup E] [Module ℝ E] (f : E → EReal) (x : E) :

                              Two EReal lemmas used for the obverse #

                              theorem Tdaf.ConvexAnalysis.biInf_coe_pos_ge_eq {z : EReal} (hz : 0 ≤ z) :
                              ⨅ ν ∈ {ν : ℝ | 0 < ν ∧ z ≤ ↑ν}, ↑ν = z
                              theorem Tdaf.ConvexAnalysis.eq_of_forall_pos_le_iff {A B : EReal} (hA : 0 ≤ A) (hB : 0 ≤ B) (h : ∀ (ν : ℝ), 0 < ν → (A ≤ ↑ν ↔ B ≤ ↑ν)) :
                              A = B

                              The obverse of a nonnegative closed convex function #

                              The epigraph of an IsPolarFn is convex, closed, and contains the origin — the hypotheses of the closed gauge theory.

                              theorem Tdaf.ConvexAnalysis.obverse_le_coe_iff {E : Type u_1} [AddCommGroup E] [Module ℝ E] [TopologicalSpace E] [ContinuousSMul ℝ E] [IsTopologicalAddGroup E] {f : E → EReal} {ν : ℝ} (h : IsPolarFn f) (hν : 0 < ν) (z : E) :
                              obverse f z ≤ ↑ν ↔ f (ν⁻¹ • z) ≤ ↑ν⁻¹

                              The defining inequality of the obverse, for an IsPolarFn: g(x) ≤ ν exactly when (fν)(x) ≤ 1, for ν > 0.

                              @[simp]

                              The obverse vanishes at the origin.

                              The obverse of a nonnegative closed convex function vanishing at the origin is another one.

                              The obverse is an involution: f is the obverse of its obverse.

                              The polar, the conjugate and the obverse #

                              The book obtains these from the symmetry of a closed convex cone in R^(n+2) under exchanging two coordinates. Here the single computation f* = (f°)ᵒ (conj_eq_obverse_polarFn) does the work: it is a level-set comparison, and everything else follows from it together with obverse_obverse and polarFn_polarFn.

                              theorem Tdaf.ConvexAnalysis.conj_le_coe_iff_epi {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {f : E → EReal} {y : F} (hnn : ∀ (x : E), 0 ≤ f x) {ν : ℝ} :
                              conj B f y ≤ ↑ν ↔ ∀ (x : E) (α : ℝ), f x ≤ ↑α → (B x) y - α ≤ ν

                              f*(y) ≤ ν read off the epigraph of f: the ⊤ value of f imposes no condition.

                              The conjugate of an IsPolarFn is again one: nonnegativity, vanishing at the origin, convexity and closedness are all apparent from the definition of f*.

                              The conjugate is the obverse of the polar: f* = (f°)ᵒ.

                              Both sides are nonnegative, so it suffices to compare them against the positive reals, and there the statement unwinds to ⟨x, y⟩ - α ≤ ν for every (x, α) ∈ epi f.

                              The polar is the obverse of the conjugate: f° = (f*)ᵒ. Together with conj_eq_obverse_polarFn, f° and f* are the obverses of each other.

                              The obverse of f is f*°, the expression from which the book derives the formula g(x) = inf {λ > 0 | (fλ)(x) ≤ 1}.

                              theorem Tdaf.ConvexAnalysis.setOf_obverse_le {E : Type u_1} [AddCommGroup E] [Module ℝ E] [TopologicalSpace E] [IsTopologicalAddGroup E] [ContinuousSMul ℝ E] {f : E → EReal} (h : IsPolarFn f) {α : ℝ} (hα : 0 < α) :
                              {x : E | obverse f x ≤ ↑α} = α • {x : E | f x ≤ ↑α⁻¹}

                              The level sets of the obverse: {g ≤ α} = α {f ≤ α⁻¹} for α > 0.

                              theorem Tdaf.ConvexAnalysis.setOf_polarFn_le {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [TopologicalSpace E] [AddCommGroup F] [Module ℝ F] [TopologicalSpace F] [IsTopologicalAddGroup F] [ContinuousSMul ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} [IsCompatiblePairing B.flip] {f : E → EReal} (h : IsPolarFn f) {α : ℝ} (hα : 0 < α) :
                              {y : F | polarFn B f y ≤ ↑α⁻¹} = α⁻¹ • {y : F | conj B f y ≤ ↑α}

                              The level sets of the polar and of the conjugate: {f° ≤ α⁻¹} = α⁻¹ {f* ≤ α} for α > 0. This is the middle set of polarSet_setOf_le_subset_and_subset.

                              Norms #

                              A gauge that is finite everywhere, symmetric, and positive away from the origin is a norm. The book states the correspondence with the symmetric closed bounded convex sets C with 0 ∈ int C. Two of those three conditions on C are the finite-dimensional readings of conditions that make sense in general, and it is the general readings that are proved here:

                              Closedness is not part of the correspondence here. The book gets it from the continuity of a finite convex function on Rⁿ, which is genuinely finite-dimensional; in an infinite-dimensional space a finite symmetric positive gauge need not be lower semicontinuous.

                              C absorbs every point: every x lies in some nonnegative dilate of C. This is the elementary form in which absorbency enters the gauge; absorbsAll_of_absorbent relates it to Mathlib's Absorbent.

                              Equations
                              Instances For

                                C contains no ray: for every x ≠ 0 some positive multiple of x is outside C.

                                Equations
                                Instances For
                                  structure Tdaf.ConvexAnalysis.IsNorm {E : Type u_1} [AddCommGroup E] [Module ℝ E] (k : E → EReal) extends Tdaf.ConvexAnalysis.IsGauge k :

                                  A norm in Rockafellar's sense: a gauge that is finite everywhere, symmetric, and positive away from the origin.

                                  Instances For
                                    theorem Tdaf.ConvexAnalysis.gaugeFn_neg_set {E : Type u_1} [AddCommGroup E] [Module ℝ E] (C : Set E) (x : E) :
                                    gaugeFn (-C) x = gaugeFn C (-x)
                                    theorem Tdaf.ConvexAnalysis.gaugeFn_map_neg {E : Type u_1} [AddCommGroup E] [Module ℝ E] {C : Set E} (hsymm : -C = C) (x : E) :
                                    gaugeFn C (-x) = gaugeFn C x
                                    theorem Tdaf.ConvexAnalysis.gaugeFn_ne_top_iff {E : Type u_1} [AddCommGroup E] [Module ℝ E] (C : Set E) (x : E) :
                                    gaugeFn C x ≠ ⊤ ↔ ∃ (a : ℝ), 0 ≤ a ∧ x ∈ a • C

                                    The gauge is finite at x exactly when some dilate of C contains x.

                                    theorem Tdaf.ConvexAnalysis.gaugeFn_eq_zero_iff {E : Type u_1} [AddCommGroup E] [Module ℝ E] {C : Set E} (hC : Convex ℝ C) (h0 : 0 ∈ C) (x : E) :
                                    gaugeFn C x = 0 ↔ ∀ (l : ℝ), 0 < l → l • x ∈ C

                                    The gauge vanishes exactly on the rays inside C.

                                    theorem Tdaf.ConvexAnalysis.isNorm_gaugeFn {E : Type u_1} [AddCommGroup E] [Module ℝ E] {C : Set E} (hC : Convex ℝ C) (h0 : 0 ∈ C) (hsymm : -C = C) (habs : AbsorbsAll C) (hray : RayFree C) :

                                    The gauge of a symmetric convex set that absorbs every point and contains no ray is a norm.

                                    theorem Tdaf.ConvexAnalysis.IsNorm.level_one {E : Type u_1} [AddCommGroup E] [Module ℝ E] {k : E → EReal} (hk : IsNorm k) :
                                    Convex ℝ {x : E | k x ≤ 1} ∧ 0 ∈ {x : E | k x ≤ 1} ∧ -{x : E | k x ≤ 1} = {x : E | k x ≤ 1} ∧ AbsorbsAll {x : E | k x ≤ 1} ∧ RayFree {x : E | k x ≤ 1}

                                    The unit level set of a norm is a symmetric convex set that absorbs every point and contains no ray.

                                    theorem Tdaf.ConvexAnalysis.isNorm_iff {E : Type u_1} [AddCommGroup E] [Module ℝ E] {k : E → EReal} :
                                    IsNorm k ↔ ∃ (C : Set E), Convex ℝ C ∧ 0 ∈ C ∧ -C = C ∧ AbsorbsAll C ∧ RayFree C ∧ k = gaugeFn C

                                    The norms are exactly the gauges of the symmetric convex sets that absorb every point and contain no ray.

                                    A norm is a Seminorm #

                                    Mathlib's Seminorm 𝕜 E is purely algebraic — subadditive, absolutely homogeneous, and nothing about a topology — so a Rockafellar norm is one on the nose. It is not a NormedSpace norm unless it happens to be continuous, which in general it is not; that is the distinction, and it is the only one.

                                    theorem Tdaf.ConvexAnalysis.IsNorm.coe_toReal {E : Type u_1} [AddCommGroup E] [Module ℝ E] {k : E → EReal} (hk : IsNorm k) (x : E) :
                                    ↑(k x).toReal = k x
                                    theorem Tdaf.ConvexAnalysis.IsNorm.apply_smul {E : Type u_1} [AddCommGroup E] [Module ℝ E] {k : E → EReal} (hk : IsNorm k) (a : ℝ) (x : E) :
                                    k (a • x) = ↑|a| * k x

                                    A norm is absolutely homogeneous, not merely positively homogeneous: symmetry upgrades k (a • x) = a * k x for a > 0 to k (a • x) = |a| * k x for every real a.

                                    noncomputable def Tdaf.ConvexAnalysis.IsNorm.toSeminorm {E : Type u_1} [AddCommGroup E] [Module ℝ E] {k : E → EReal} (hk : IsNorm k) :

                                    A Rockafellar norm is a Seminorm. Seminorm ℝ E asks for subadditivity (which follows from convexity and positive homogeneity), invariance under negation, and absolute homogeneity — all three of which IsNorm carries, and none of which mentions a topology.

                                    This is the bridge that lets a surface over ℝⁿ hand a Rockafellar norm to Mathlib's seminorm API. What it does not give is a NormedSpace: for that the norm must be continuous, and continuity of a finite convex function is a finite-dimensional fact.

                                    Equations
                                    • hk.toSeminorm = { toFun := fun (x : E) => (k x).toReal, map_zero' := ⋯, add_le' := ⋯, neg' := ⋯, smul' := ⋯ }
                                    Instances For
                                      @[simp]
                                      theorem Tdaf.ConvexAnalysis.IsNorm.coe_toSeminorm {E : Type u_1} [AddCommGroup E] [Module ℝ E] {k : E → EReal} (hk : IsNorm k) (x : E) :
                                      ↑(hk.toSeminorm x) = k x

                                      The Seminorm really is k.

                                      The polar of a norm #

                                      theorem Tdaf.ConvexAnalysis.polarSet_neg_eq {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {C : Set E} (hsymm : -C = C) :
                                      theorem Tdaf.ConvexAnalysis.absorbsAll_polarSet {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {C : Set E} (hbdd : ∀ (y : F), ∃ (c : ℝ), ∀ x ∈ C, (B x) y ≤ c) :

                                      The polar of a set on which every ⟨·, y⟩ is bounded above absorbs every point.

                                      theorem Tdaf.ConvexAnalysis.rayFree_polarSet {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {C : Set E} (hsymm : -C = C) (hsep : ∀ (y : F), y ≠ 0 → ∃ x ∈ C, (B x) y ≠ 0) :

                                      If the pairing separates the points of F using C alone, the polar of C contains no ray.

                                      theorem Tdaf.ConvexAnalysis.isNorm_polarGauge_gaugeFn {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {C : Set E} (hC : Convex ℝ C) (h0 : 0 ∈ C) (hsymm : -C = C) (hbdd : ∀ (y : F), ∃ (c : ℝ), ∀ x ∈ C, (B x) y ≤ c) (hsep : ∀ (y : F), y ≠ 0 → ∃ x ∈ C, (B x) y ≠ 0) :

                                      The polar of a norm is a norm.

                                      The two hypotheses are the general forms of "C is bounded" and "0 ∈ int C": boundedness in the pairing sense makes the polar absorbing, and separation of F by C makes the polar ray-free.

                                      Bridge to Mathlib's gauge #

                                      theorem Tdaf.ConvexAnalysis.gaugeFn_eq_gauge {E : Type u_1} [AddCommGroup E] [Module ℝ E] {C : Set E} (hC : Absorbent ℝ C) (x : E) :
                                      gaugeFn C x = ↑(gauge C x)

                                      gaugeFn is Mathlib's gauge, wherever the latter is meaningful. Mathlib's gauge takes the infimum over positive scalars in ℝ, so on a set that does not absorb x it returns sInf ∅ = 0 rather than +∞; under an absorbency hypothesis the two agree.

                                      theorem Tdaf.ConvexAnalysis.gaugeFn_lt_top_of_absorbent {E : Type u_1} [AddCommGroup E] [Module ℝ E] {C : Set E} (hC : Absorbent ℝ C) (x : E) :

                                      An absorbent set has a finite gauge.

                                      Mathlib's Absorbent implies the elementary absorbency AbsorbsAll.