Documentation

Tdaf.Analysis.Convex.Duality.Polar

Polars of convex sets and convex cones #

The polar of a convex cone K is K° = {y ∣ ∀ x ∈ K, ⟨x, y⟩ ≤ 0}, and the polar of a convex set C containing the origin is C° = {y ∣ ∀ x ∈ C, ⟨x, y⟩ ≤ 1}. Polarity is what conjugacy becomes on indicator functions: the indicator of a cone is positively homogeneous, so its conjugate is again an indicator, and the set it indicates is the polar. The bipolar theorem K°° = cl K follows from that together with separation. The further polarity theorems need the recession function or the gauge and are proved in Recession/Conjugate.lean, Duality/HomConePolar.lean, Duality/Level.lean, Duality/Gauge.lean and Duality/PolarBounded.lean.

Main definitions #

Main results #

Implementation notes #

Every bipolar statement takes Convex ℝ K, ∀ a > 0, a • K = K and K.Nonempty separately, because that is the generality in which the separation argument runs; a PointedCone ℝ E supplies all three, and each statement has a _pointedCone companion. K°° = cl K, not K°° = K, is the theorem, and nonemptiness of K is genuinely needed: ∅° = F, and F° is the kernel of the pairing rather than cl ∅ = ∅. The adjunction L ⊆ K° ↔ K ⊆ L° makes K ↦ K°° a ClosureOperator (Set E), with the OrderDual on the codomain rather than the domain because the indicator embedding s ↦ δ(· ∣ s) is antitone.

Two Mathlib objects are close but different. PointedCone.dual is the inner dual, so K° = -(Kᵛ) (polarPointedCone_eq_dual_neg); the bipolar theorem proved here asks for IsCompatiblePairing rather than a perfect pairing, and closedness of the polar needs only IsContinuousPairing. LinearMap.polar is the absolute polar, which agrees with polarSet exactly on balanced sets (polarSet_eq_polar_of_balanced).

References #

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

Definitions #

def Tdaf.ConvexAnalysis.polarCone {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (K : Set E) :
Set F

The polar of a convex cone: K° = {y | ∀ x ∈ K, ⟨x, y⟩ ≤ 0}. This is a one-sided polar, neither Mathlib's absolute polar LinearMap.polar nor its inner dual cone, of which it is the negative (polarPointedCone_eq_dual_neg).

Equations
Instances For
    def Tdaf.ConvexAnalysis.polarSet {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (C : Set E) :
    Set F

    Rockafellar's polar of a convex set containing the origin: C° = {y | ∀ x ∈ C, ⟨x, y⟩ ≤ 1}.

    Equations
    Instances For
      @[simp]
      theorem Tdaf.ConvexAnalysis.mem_polarCone {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {K : Set E} {y : F} :
      y ∈ polarCone B K ↔ ∀ x ∈ K, (B x) y ≤ 0
      @[simp]
      theorem Tdaf.ConvexAnalysis.mem_polarSet {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {C : Set E} {y : F} :
      y ∈ polarSet B C ↔ ∀ x ∈ C, (B x) y ≤ 1
      theorem Tdaf.ConvexAnalysis.polarCone_anti {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {K L : Set E} (h : K ⊆ L) :
      polarCone B L ⊆ polarCone B K
      theorem Tdaf.ConvexAnalysis.polarSet_anti {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {C D : Set E} (h : C ⊆ D) :
      polarSet B D ⊆ polarSet B C
      @[simp]
      @[simp]

      The polar cone is contained in the polar set, since 0 ≤ 1.

      theorem Tdaf.ConvexAnalysis.polarCone_iUnion {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {ι : Sort u_3} (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (u : ι → Set E) :
      polarCone B (⋃ (i : ι), u i) = ⋂ (i : ι), polarCone B (u i)
      theorem Tdaf.ConvexAnalysis.polarSet_iUnion {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {ι : Sort u_3} (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (u : ι → Set E) :
      polarSet B (⋃ (i : ι), u i) = ⋂ (i : ι), polarSet B (u i)
      theorem Tdaf.ConvexAnalysis.polarCone_eq_polarSet_of_isCone {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {K : Set E} (hK : ∀ (a : ℝ), 0 < a → a • K = K) :

      For a cone the two polars coincide, because the half-space {x | ⟨x, y⟩ ≤ 1} contains a cone exactly when {x | ⟨x, y⟩ ≤ 0} does.

      theorem Tdaf.ConvexAnalysis.subset_polarCone_comm {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {K : Set E} {L : Set F} :
      L ⊆ polarCone B K ↔ K ⊆ polarCone B.flip L

      The polarity adjunction: L ⊆ K° and K ⊆ L° both say that ⟨x, y⟩ ≤ 0 for every x ∈ K and y ∈ L.

      theorem Tdaf.ConvexAnalysis.subset_polarSet_comm {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {C : Set E} {L : Set F} :
      L ⊆ polarSet B C ↔ C ⊆ polarSet B.flip L

      The unit of the polarity adjunction: every set is contained in its bipolar.

      Polarity as a Galois connection #

      Polarity of cones is an antitone Galois connection between Set E and Set F.

      Polarity of sets is an antitone Galois connection between Set E and Set F.

      The bipolar operator K ↦ K°° as a ClosureOperator on Set E. Its closed elements are, by polarCone_polarCone_of_isClosed, the nonempty closed convex cones.

      Equations
      Instances For

        The bipolar operator C ↦ C°° as a ClosureOperator on Set E. Its closed elements are, by polarSet_polarSet, the closed convex sets containing the origin.

        Equations
        Instances For

          Polarity is unchanged by taking the bipolar first — the triangle identity of the adjunction, and Rockafellar's (cl K)° = K° in its purely algebraic form.

          Polarity is an order anti-isomorphism between the bipolar-closed sets. The bipolar theorem with its order structure and with no topology; once E and F carry compatible topologies the bipolar-closed sets are exactly the closed convex cones containing the origin.

          Equations
          Instances For

            The same for polars of sets, in order form.

            Equations
            Instances For

              The polar cone as a PointedCone #

              The polar of an arbitrary set is a pointed convex cone — the first assertion of the bipolar theorem, before any topology enters. Bundling it makes the PointedCone API available.

              Equations
              Instances For
                @[simp]
                theorem Tdaf.ConvexAnalysis.mem_polarPointedCone {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {K : Set E} {y : F} :
                y ∈ polarPointedCone B K ↔ ∀ x ∈ K, (B x) y ≤ 0
                theorem Tdaf.ConvexAnalysis.convex_setOf_pairing_le_coe {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (y : F) (c : ℝ) :
                Convex ℝ {x : E | (B x) y ≤ c}

                A closed half-space of the pairing is convex, in the real-valued form that cuts out a polar set; convex_setOf_pairing_le is the EReal form.

                @[simp]

                Polarity does not see the convex hull: the polar is cut out by the convex half-spaces {x | ⟨x, y⟩ ≤ 1}. The polarCone counterpart is polarCone_hull.

                theorem Tdaf.ConvexAnalysis.polarSet_smul {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) {a : ℝ} (ha : 0 < a) (C : Set E) :

                Dilating a set inverts the dilation of its polar: (aC)° = a⁻¹ C° for a > 0.

                theorem Tdaf.ConvexAnalysis.polarCone_add {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) {K L : Set E} (hK : 0 ∈ K) (hL : 0 ∈ L) :

                The polar of a sum is the intersection of the polars, for sets containing the origin — the additive counterpart of polarCone_union.

                theorem Tdaf.ConvexAnalysis.smul_coe_pointedCone {E : Type u_1} [AddCommGroup E] [Module ℝ E] (K : PointedCone ℝ E) (a : ℝ) (ha : 0 < a) :
                a • ↑K = ↑K
                theorem Tdaf.ConvexAnalysis.smul_coe_submodule {E : Type u_1} [AddCommGroup E] [Module ℝ E] (M : Submodule ℝ E) {a : ℝ} (ha : 0 < a) :
                a • ↑M = ↑M
                theorem Tdaf.ConvexAnalysis.smul_polarCone {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (K : Set E) (a : ℝ) (ha : 0 < a) :
                theorem Tdaf.ConvexAnalysis.polarCone_neg {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (K : Set E) :

                Negating the cone negates its polar: (-K)° = -(K°). With the bipolar theorem this makes the dual cone K* = -K° an involution (neg_polarCone_neg_polarCone).

                theorem Tdaf.ConvexAnalysis.smul_neg_polarCone {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (K : Set E) (a : ℝ) (ha : 0 < a) :

                Bridges to Mathlib #

                Mathlib's dual cone is the inner one. PointedCone.dual B s = {y | ∀ x ∈ s, 0 ≤ ⟨x, y⟩}, so Rockafellar's polar is its negative — equivalently, the dual of -K.

                Mathlib's LinearMap.polar is the absolute polar {y | ∀ x ∈ C, ‖⟨x, y⟩‖ ≤ 1}. It agrees with Rockafellar's one-sided polar exactly on balanced sets, where x ∈ C implies -x ∈ C.

                The polar cone and the conjugate of an indicator #

                This computation needs no topology: the indicator of a cone is positively homogeneous, so its conjugate is again an indicator (conj_eq_indicatorFn_of_posHomogeneous), and the set it indicates is the polar.

                @[simp]

                The set that the conjugate of an indicator function indicates is the polar cone.

                theorem Tdaf.ConvexAnalysis.conj_indicatorFn_eq_indicatorFn_polarCone {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {K : Set E} (hK : ∀ (a : ℝ), 0 < a → a • K = K) (hne : K.Nonempty) :

                The indicator functions of a nonempty convex cone and of its polar are conjugate to each other.

                theorem Tdaf.ConvexAnalysis.supportFn_eq_indicatorFn_polarCone {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} {K : Set E} (hK : ∀ (a : ℝ), 0 < a → a • K = K) (hne : K.Nonempty) :

                The support function of a nonempty convex cone is the indicator of its polar.

                The polar is the zero sublevel set of the support function: ⟨x, y⟩ ≤ 0 for every x ∈ K says exactly that δ*(y | K) ≤ 0. Holds for an arbitrary set K, and is what turns a theorem computing a support function into a theorem computing a polar.

                Closedness of the polar #

                The polar of any set is closed, being an intersection of homogeneous closed half-spaces.

                The polar does not see the closure: (cl K)° = K°.

                The polar does not see the closure, in the polarSet sense — the companion of polarCone_closure.

                The bipolar theorem #

                Separation supplies the only nontrivial half.

                theorem Tdaf.ConvexAnalysis.polarCone_polarCone {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] [TopologicalSpace E] [IsTopologicalAddGroup E] [ContinuousSMul ℝ E] [LocallyConvexSpace ℝ E] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} [IsCompatiblePairing B] {K : Set E} (hconv : Convex ℝ K) (hcone : ∀ (a : ℝ), 0 < a → a • K = K) (hne : K.Nonempty) :

                The bipolar of a nonempty convex cone is its closure.

                A point outside cl K is strongly separated from it by a continuous linear functional; because cl K is a nonempty cone, that functional is ≤ 0 on it and the separating constant is nonnegative, so the y representing it lies in K° and detects the point.

                theorem Tdaf.ConvexAnalysis.polarCone_polarCone_of_isClosed {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] [TopologicalSpace E] [IsTopologicalAddGroup E] [ContinuousSMul ℝ E] [LocallyConvexSpace ℝ E] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} [IsCompatiblePairing B] {K : Set E} (hconv : Convex ℝ K) (hcone : ∀ (a : ℝ), 0 < a → a • K = K) (hne : K.Nonempty) (hcl : IsClosed K) :

                For a nonempty closed convex cone the polarity correspondence is an involution: K°° = K.

                The same for a bundled cone: for a closed PointedCone, K°° = K. All three hypotheses of the previous statement are supplied by the bundling.

                theorem Tdaf.ConvexAnalysis.neg_polarCone_neg_polarCone {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] [TopologicalSpace E] [IsTopologicalAddGroup E] [ContinuousSMul ℝ E] [LocallyConvexSpace ℝ E] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} [IsCompatiblePairing B] {K : Set E} (hconv : Convex ℝ K) (hcone : ∀ (a : ℝ), 0 < a → a • K = K) (hne : K.Nonempty) (hcl : IsClosed K) :

                The bipolar theorem in its dual-cone form: K** = K for a nonempty closed convex cone, where K* = -K° is the dual cone.

                theorem Tdaf.ConvexAnalysis.conj_indicatorFn_polarCone {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] [TopologicalSpace E] [IsTopologicalAddGroup E] [ContinuousSMul ℝ E] [LocallyConvexSpace ℝ E] {B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ} [IsCompatiblePairing B] {K : Set E} (hconv : Convex ℝ K) (hcone : ∀ (a : ℝ), 0 < a → a • K = K) (hne : K.Nonempty) (hcl : IsClosed K) :

                The conjugacy of indicators in the remaining direction: for a nonempty closed convex cone the indicator of K° conjugates back to the indicator of K.

                The bipolar of a set containing the origin #

                C°° = C for a closed convex set containing the origin. The separation argument is the same as for cones, with the constant normalised to 1 instead of 0.

                The polar of a closed convex set containing the origin is another such set, and C°° = C. Containment of the origin is what makes the separating constant positive, so that the separating functional can be rescaled to have value exactly 1.

                Examples #

                The polar of a subspace is its annihilator — the book's "orthogonally complementary subspace". Under the pairing this is Submodule.dualAnnihilator pulled back along B.flip.

                theorem Tdaf.ConvexAnalysis.polarCone_coe_submodule' {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (M : Submodule ℝ E) :
                polarCone B ↑M = {y : F | ∀ x ∈ M, (B x) y = 0}
                noncomputable def Tdaf.ConvexAnalysis.polarSubmodule {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (M : Submodule ℝ E) :

                The polar of a subspace, bundled as a submodule of F: the annihilator of M pulled back along B.flip. Its carrier is polarCone B M (polarCone_coe_submodule).

                Equations
                Instances For
                  @[simp]

                  The polar does not see the cone generated: a polar cone cannot tell a set from the cone it generates.

                  theorem Tdaf.ConvexAnalysis.polarCone_hull_range {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] {ι : Sort u_3} (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (a : ι → E) :
                  polarCone B ↑(PointedCone.hull ℝ (Set.range a)) = {y : F | ∀ (i : ι), (B (a i)) y ≤ 0}

                  The polar of the convex cone generated by a family aᵢ is the solution set of the homogeneous inequalities ⟨aᵢ, y⟩ ≤ 0.

                  Partial affine functions #

                  A partial affine function is a proper convex function whose effective domain is an affine set and which is affine on it; every such function is δ(· | L + a) + ⟨·, a*⟩ + α for a subspace L. Conjugacy exchanges L with its polar, a with a*, and α with -α - ⟨a, a*⟩, so partial affine functions, like subspaces, come in dual pairs. The formula is the conjugacy rule for h(Ax) + ⟨x, b⟩ + α at h = δ(· | L), fed by conj_indicatorFn_eq_indicatorFn_polarCone.

                  noncomputable def Tdaf.ConvexAnalysis.partialAffineFn {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (L : Submodule ℝ E) (a : E) (b : F) (α : ℝ) :
                  E → EReal

                  A partial affine function in Rockafellar's normal form: δ(· | L + a) + ⟨·, b⟩ + α, for a subspace L, vectors a and b, and a real α.

                  Equations
                  Instances For
                    theorem Tdaf.ConvexAnalysis.partialAffineFn_apply {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (L : Submodule ℝ E) (a : E) (b : F) (α : ℝ) (x : E) :
                    partialAffineFn B L a b α x = indicatorFn (a +ᵥ ↑L) x + ↑((B x) b) + ↑α
                    theorem Tdaf.ConvexAnalysis.conj_partialAffineFn {E : Type u_1} {F : Type u_2} [AddCommGroup E] [Module ℝ E] [AddCommGroup F] [Module ℝ F] (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) (L : Submodule ℝ E) (a : E) (b : F) (α : ℝ) :
                    conj B (partialAffineFn B L a b α) = partialAffineFn B.flip (polarSubmodule B L) b a (-α - (B a) b)

                    The conjugate of a partial affine function: (δ(· | L + a) + ⟨·, a*⟩ + α)* = δ(· | L^⊥ + a*) + ⟨a, ·⟩ + α*, where α* is -α - ⟨a, a*⟩.

                    Dually: the polar of the solution set of the homogeneous inequalities ⟨aᵢ, y⟩ ≤ 0 is the closure of the convex cone generated by the aᵢ.

                    The nonnegative orthant #

                    The book's second example, for a real inner-product space paired with itself.

                    theorem Tdaf.ConvexAnalysis.polarCone_nonnegOrthant {ι : Type u_1} [Fintype ι] :
                    polarCone (innerₗ (EuclideanSpace ℝ ι)) {x : EuclideanSpace ℝ ι | ∀ (i : ι), 0 ≤ x.ofLp i} = {y : EuclideanSpace ℝ ι | ∀ (i : ι), y.ofLp i ≤ 0}

                    The polar of the nonnegative orthant is the nonpositive orthant.