Documentation

Tdaf.Analysis.Convex.Bifunction.Cofinite

Co-finite bifunctions #

A convex bifunction is co-finite when every slice Fu is a co-finite convex function: closed, proper, convex, with an epigraph containing no non-vertical half-line. This is the condition under which the algebra of bifunctions loses its side conditions — a co-finite bifunction has all of U as its effective domain and an everywhere-finite inner product ⟨Fu, y⟩, so the relative-interior hypotheses become vacuous. The identity ⟨GFu, z⟩ = ⟨u, F* G* z⟩ lives here too, for the same reason: it needs a relative interior, hence a topology and a finite dimension.

Main definitions #

Main results #

Implementation notes #

Rockafellar defines co-finiteness for convex bifunctions only, and the convexity is genuinely extra data — the graph function of a bifunction all of whose slices are convex need not be convex on U × X — so CofiniteBifun carries ConvexBifun as a field.

Elsewhere the relative-interior conditions are carried as IsExactSum hypotheses; here they are discharged, because the functions being added are finite on the whole space and IsExactSum.of_relint applies at the origin. That is why this module is finite-dimensional.

References #

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

Co-finite bifunctions #

structure Tdaf.ConvexAnalysis.CofiniteBifun {U : Type u_1} {X : Type u_2} [AddCommGroup U] [Module ℝ U] [AddCommGroup X] [Module ℝ X] [TopologicalSpace X] (F : Bifun U X) :

A co-finite convex bifunction: every slice is a co-finite convex function. This forces dom F = U and makes F proper.

  • convexBifun : ConvexBifun F

    The bifunction is convex.

  • cofinite_apply (u : U) : Cofinite (F u)

    Every slice is a co-finite convex function.

Instances For

    Co-finiteness forces a full effective domain: every slice is proper.

    theorem Tdaf.ConvexAnalysis.CofiniteBifun.ne_bot {U : Type u_1} {X : Type u_2} [AddCommGroup U] [Module ℝ U] [AddCommGroup X] [Module ℝ X] [TopologicalSpace X] {F : Bifun U X} (hF : CofiniteBifun F) (u : U) (x : X) :
    F u x ≠ ⊥

    Finiteness of the inner product #

    theorem Tdaf.ConvexAnalysis.CofiniteBifun.bracket_ne_bot {U : Type u_1} {X : Type u_2} {Y : Type u_3} [AddCommGroup U] [Module ℝ U] [AddCommGroup X] [Module ℝ X] [TopologicalSpace X] [AddCommGroup Y] [Module ℝ Y] {Bx : X →ₗ[ℝ] Y →ₗ[ℝ] ℝ} {F : Bifun U X} (hF : CofiniteBifun F) (u : U) (y : Y) :
    bracket Bx F u y ≠ ⊥

    With CofiniteBifun.bracket_lt_top: ⟨Fu, y⟩ is finite, every slice being proper.

    For a co-finite bifunction the inner product ⟨Fu, y⟩ is never +∞. This is the finiteness criterion for the conjugate of a co-finite function, read at the slice Fu.

    The converse: closed proper convex slices and a finite ⟨Fu, y⟩ give co-finiteness.

    Infimal convolution of co-finite functions #

    The conjugate of a co-finite function is finite everywhere.

    The conjugates of two co-finite functions add exactly: their effective domains are the whole space, so the relative-interior condition for an exact sum holds at the origin.

    The infimal convolution of two co-finite functions is a conjugate, namely the conjugate of f* + g*. This is what makes it closed.

    The infimal convolution of two co-finite convex functions is co-finite: f □ g is the conjugate of f* + g*, hence closed proper convex, and its own conjugate is f* + g*, which is finite everywhere.

    Infimal convolution of co-finite bifunctions #

    Slice by slice this is cofinite_infConv; convexity of F₁ □ F₂ is convexBifun_infConvBifun.

    The two brackets add exactly, both being finite everywhere. This is what makes adjointBifun_infConvBifun unconditional for co-finite bifunctions.

    (F₁ □ F₂)* = F₁* □ F₂* for co-finite bifunctions, with the exactness hypothesis discharged.

    For a co-finite bifunction the two inner products agree at every u, ⟨Fu, y⟩ = ⟨u, F* y⟩. They agree on ri (dom F), and dom F is all of U.

    Right scalar multiplication of co-finite functions #

    theorem Tdaf.ConvexAnalysis.smulRight_eq_conj_smul {E : Type u_1} {F : Type u_2} [NormedAddCommGroup E] [NormedSpace ℝ E] [NormedAddCommGroup F] [NormedSpace ℝ F] {f : E → EReal} {a : ℝ} (B : E →ₗ[ℝ] F →ₗ[ℝ] ℝ) [IsCompatiblePairing B] [IsCompatiblePairing B.flip] (hc : ConvexFn f) (hcl : ClosedFn f) (ha : 0 < a) :
    smulRight f a = conj B.flip fun (y : F) => ↑a * conj B f y

    fa is the conjugate of a f*, for a > 0 and closed convex f: the conjugation rule conj_smul at g = f*, with Fenchel–Moreau turning f** back into f. It supplies closedness of fa, which the epigraph-image definition of smulRight does not see.

    fa is closed when f is closed convex and a > 0. It is a conjugate (smulRight_eq_conj_smul).

    theorem Tdaf.ConvexAnalysis.coe_mul_ne_bot {a : ℝ} (ha : 0 < a) {u : EReal} (hu : u ≠ ⊥) :
    ↑a * u ≠ ⊥
    theorem Tdaf.ConvexAnalysis.proper_smulRight {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {f : E → EReal} {a : ℝ} (hf : Proper f) (ha : 0 < a) :

    fa is proper when f is and a > 0.

    Right scalar multiplication preserves co-finiteness, for a > 0.

    Right scalar multiplication, and the co-finiteness criterion #

    F ↦ Fλ preserves co-finiteness for λ > 0. Slice by slice this is cofinite_smulRight; the convexity of Fλ is convexBifun_smulRightBifun.

    dom F* = Y, the half of the co-finiteness criterion needing no closedness: ⟨F·, y⟩ is a finite concave function on U, so its negative is proper convex and its conjugate is proper; the sign dictionary carries that back to F* y.

    The substantial direction: dom F = U makes every bracket ⟨Fu, y⟩ finite below, and dom F* = Y makes it finite above — if ⟨Fu₀, y⟩ = +∞ for a single u₀ then F* y ≡ -∞. The finiteness criterion for conjugates, slice by slice, does the rest.

    A closed proper convex bifunction is co-finite iff dom F = U and dom F* = Y. The proof here is the finiteness criterion for conjugates, slice by slice.

    The inner product of a product of bifunctions #

    theorem Tdaf.ConvexAnalysis.bracket_compBifun_eq_concaveBracket_concaveCompBifun {U : Type u_1} {V : Type u_2} {X : Type u_3} {W : Type u_4} {Y : Type u_5} {Z : Type u_6} [NormedAddCommGroup U] [NormedSpace ℝ U] [FiniteDimensional ℝ U] [AddCommGroup V] [Module ℝ V] [AddCommGroup X] [Module ℝ X] [AddCommGroup W] [Module ℝ W] [AddCommGroup Y] [Module ℝ Y] [AddCommGroup Z] [Module ℝ Z] {F : Bifun U X} {G : Bifun X Y} (Bu : U →ₗ[ℝ] V →ₗ[ℝ] ℝ) [IsCompatiblePairing Bu] (Bx : X →ₗ[ℝ] W →ₗ[ℝ] ℝ) (By : Y →ₗ[ℝ] Z →ₗ[ℝ] ℝ) (hbF : ∀ (u : U) (x : X), F u x ≠ ⊥) (hGF : ConvexBifun (compBifun G F)) {u : U} (hu : u ∈ intrinsicInterior ℝ (domBifun (compBifun G F))) {z : Z} (hex : ∀ (v : V), IsExactSum Bx (concaveBracket Bu.flip (inverseBifun F) v) fun (x : X) => -bracket By G x z) :
    bracket By (compBifun G F) u z = concaveBracket Bu (concaveCompBifun (adjointBifun Bx By G) (adjointBifun Bu Bx F)) u z

    ⟨GFu, z⟩ = ⟨u, F* G* z⟩. The two brackets of GF agree at a relative interior point of dom (GF), and adjointBifun_compBifun rewrites (GF)* as F* G*. The companion equality ⟨GFu, z⟩ = ⟨Fu, G* z⟩ is bracket_compBifun_eq_fenchelPairing.