Convex Analysis (Rockafellar, 1970) -- Chapter 06 -- Section 30 -- Part 7
section Chap06section Section30
Helper for Theorem 6.30.11: once a closed convex bifunction fails properness, its graph
function is an improper convex function on univ.
lemma helperForTheorem_6_30_11_improperConvexGraph_of_closed_not_proper
{m n : β}
{F : (Fin m β β) β (Fin n β β) β EReal}
(hClosed : ClosedConvexBifunction F)
(hNotProper : Β¬ ProperConvexBifunction F) :
ImproperConvexFunctionOn (Set.univ : Set (Fin (m + n) β β)) (bifunctionGraphFunction F) := by
refine β¨?_, ?_β©
Β· -- Closed convexity of the bifunction is exactly convexity of its graph function on `univ`.
simpa [ConvexBifunction] using hClosed.1
Β· intro hProperOn
have hProperGraph :
ProperConvexERealFunction (F := Fin (m + n) β β) (bifunctionGraphFunction F) :=
helperForTheorem_21_3_properConvexEReal_of_properConvexFunctionOn_univ
(f := bifunctionGraphFunction F) hProperOn
-- If the graph were proper on `univ`, the bifunction itself would be proper.
exact hNotProper β¨hClosed.1, hProperGraphβ©
Helper for Theorem 6.30.11: the concave bifunction closure fixes the constant β€
bifunction.
lemma helperForTheorem_6_30_11_concaveBifunctionClosure_eq_self_of_eq_const_top
{m n : β}
{G : (Fin m β β) β (Fin n β β) β EReal}
(hTop : G = fun _ _ => (β€ : EReal)) :
concaveBifunctionClosure G = G := by
subst G
funext u x
have hClosure :
convexFunctionClosure (fun _ : Fin (m + n) β β => (β₯ : EReal)) =
(fun _ : Fin (m + n) β β => (β₯ : EReal)) :=
convexFunctionClosure_eq_bot_of_exists_bot
(f := fun _ : Fin (m + n) β β => (β₯ : EReal)) β¨0, rflβ©
-- Negating the constant `β₯` closure recovers the constant `β€` bifunction.
simpa [concaveBifunctionClosure, concaveClosure, bifunctionGraphFunction] using
congrArg Neg.neg (congrFun hClosure (Fin.append u x))
Helper for Theorem 6.30.11: the concave bifunction closure fixes the constant β₯
bifunction.
lemma helperForTheorem_6_30_11_concaveBifunctionClosure_eq_self_of_eq_const_bot
{m n : β}
{G : (Fin m β β) β (Fin n β β) β EReal}
(hBot : G = fun _ _ => (β₯ : EReal)) :
concaveBifunctionClosure G = G := by
subst G
funext u x
-- Negating the constant `β€` closure recovers the constant `β₯` bifunction.
simpa [concaveBifunctionClosure, concaveClosure, bifunctionGraphFunction] using
congrArg Neg.neg (congrFun (convexFunctionClosure_const_top (n := m + n)) (Fin.append u x))
Helper for Theorem 6.30.11: once a closed concave bifunction fails properness, the negated
graph function is an improper convex function on univ.
lemma helperForTheorem_6_30_11_improperNegGraph_of_closed_not_proper
{m n : β}
{G : (Fin m β β) β (Fin n β β) β EReal}
(hClosed : ClosedConcaveBifunction G)
(hNotProper : Β¬ ProperConcaveBifunction G) :
ImproperConvexFunctionOn (Set.univ : Set (Fin (m + n) β β))
(fun z : Fin (m + n) β β => -bifunctionGraphFunction G z) := by
refine β¨?_, ?_β©
Β· -- Concavity means convexity of the negated graph function.
simpa [ConcaveBifunction] using hClosed.1
Β· intro hProperOn
have hProperNegGraph :
ProperConvexERealFunction (F := Fin (m + n) β β)
(fun z : Fin (m + n) β β => -bifunctionGraphFunction G z) :=
helperForTheorem_21_3_properConvexEReal_of_properConvexFunctionOn_univ
(f := fun z : Fin (m + n) β β => -bifunctionGraphFunction G z) hProperOn
-- Properness of the negated graph is exactly proper concavity of the original graph.
exact hNotProper β¨hClosed.1, by simpa [ProperConcaveERealFunction] using hProperNegGraphβ©
Helper for Theorem 6.30.11: a closed improper convex bifunction graph can only take the
values β€ and β₯.
lemma helperForTheorem_6_30_11_convexGraph_values_top_or_bot_of_closed_not_proper
{m n : β}
{F : (Fin m β β) β (Fin n β β) β EReal}
(hClosed : ClosedConvexBifunction F)
(hNotProper : Β¬ ProperConvexBifunction F) :
β z : Fin (m + n) β β,
bifunctionGraphFunction F z = (β€ : EReal) β¨ bifunctionGraphFunction F z = (β₯ : EReal) := by
have hImproperGraph :
ImproperConvexFunctionOn (Set.univ : Set (Fin (m + n) β β)) (bifunctionGraphFunction F) :=
helperForTheorem_6_30_11_improperConvexGraph_of_closed_not_proper
(F := F) hClosed hNotProper
-- Chapter 2 shows that a lower semicontinuous improper convex function has no finite values.
exact
lowerSemicontinuous_improperConvexFunction_no_finite_values
(f := bifunctionGraphFunction F) hImproperGraph hClosed.2.2
Helper for Theorem 6.30.11: once a closed concave bifunction is improper, its negated graph
also takes only the values β€ and β₯.
lemma helperForTheorem_6_30_11_negConcaveGraph_values_top_or_bot_of_closed_not_proper
{m n : β}
{G : (Fin m β β) β (Fin n β β) β EReal}
(hClosed : ClosedConcaveBifunction G)
(hNotProper : Β¬ ProperConcaveBifunction G) :
β z : Fin (m + n) β β,
(-bifunctionGraphFunction G z) = (β€ : EReal) β¨
(-bifunctionGraphFunction G z) = (β₯ : EReal) := by
have hImproperNegGraph :
ImproperConvexFunctionOn (Set.univ : Set (Fin (m + n) β β))
(fun z : Fin (m + n) β β => -bifunctionGraphFunction G z) :=
helperForTheorem_6_30_11_improperNegGraph_of_closed_not_proper
(G := G) hClosed hNotProper
-- Apply the same no-finite-values theorem to the negated graph function.
exact
lowerSemicontinuous_improperConvexFunction_no_finite_values
(f := fun z : Fin (m + n) β β => -bifunctionGraphFunction G z) hImproperNegGraph hClosed.2
Helper for Theorem 6.30.11: if an improper convex bifunction graph is fixed by the current
Chapter 2 closure, then the bifunction must already be constant β€ or constant β₯.
lemma helperForTheorem_6_30_11_improper_convex_fixed_point_eq_const_top_or_bot
{m n : β}
{F : (Fin m β β) β (Fin n β β) β EReal}
(hImproper :
ImproperConvexFunctionOn (Set.univ : Set (Fin (m + n) β β)) (bifunctionGraphFunction F))
(hFixed : convexBifunctionClosure F = F) :
F = (fun _ _ => (β€ : EReal)) β¨ F = (fun _ _ => (β₯ : EReal)) := by
have hGraphFixed :
convexFunctionClosure (bifunctionGraphFunction F) = bifunctionGraphFunction F := by
funext z
let u : Fin m β β := fun i => z (Fin.castAdd n i)
let x : Fin n β β := fun j => z (Fin.natAdd m j)
have hz : Fin.append u x = z := by
-- Reassemble the pair of coordinate blocks back into the original graph point.
funext i
by_cases hi : i.1 < m
Β· have hi' : Fin.castAdd n β¨i.1, hiβ© = i := by
ext
simp
rw [β hi']
simp [u, x, Fin.append, Fin.addCases, hi]
Β· let j : Fin n := β¨i.1 - m, by omegaβ©
have hj : Fin.natAdd m j = i := by
ext
simp [j]
omega
rw [β hj]
simp [u, x, Fin.append, Fin.addCases, j]
have hEval := congrFun (congrFun hFixed u) x
-- Evaluate the bifunction fixed-point identity on the coordinates extracted from `z`.
simpa [hz, u, x, convexBifunctionClosure, convexClosure, bifunctionGraphFunction] using hEval
have hGraphConst :
bifunctionGraphFunction F = (fun _ : Fin (m + n) β β => (β€ : EReal)) β¨
bifunctionGraphFunction F = (fun _ : Fin (m + n) β β => (β₯ : EReal)) :=
(closed_improperConvexFunction_eq_top_or_bot
(n := m + n) (f := bifunctionGraphFunction F)).1 β¨hGraphFixed, hImproperβ©
rcases hGraphConst with hGraphTop | hGraphBot
Β· left
funext u x
-- A constant graph function forces the original bifunction to be constant on every pair.
simpa [bifunctionGraphFunction] using congrFun hGraphTop (Fin.append u x)
Β· right
funext u x
-- The same graph evaluation recovers the constant `β₯` branch.
simpa [bifunctionGraphFunction] using congrFun hGraphBot (Fin.append u x)
Helper for Theorem 6.30.11: if the negated graph of an improper concave bifunction is fixed by
the current Chapter 2 closure, then the bifunction must already be constant β€ or constant β₯.
lemma helperForTheorem_6_30_11_improper_concave_fixed_point_eq_const_top_or_bot
{m n : β}
{G : (Fin m β β) β (Fin n β β) β EReal}
(hImproper :
ImproperConvexFunctionOn (Set.univ : Set (Fin (m + n) β β))
(fun z : Fin (m + n) β β => -bifunctionGraphFunction G z))
(hFixed : concaveBifunctionClosure G = G) :
G = (fun _ _ => (β€ : EReal)) β¨ G = (fun _ _ => (β₯ : EReal)) := by
have hNegGraphFixed :
convexFunctionClosure (fun z : Fin (m + n) β β => -bifunctionGraphFunction G z) =
(fun z : Fin (m + n) β β => -bifunctionGraphFunction G z) := by
funext z
let u : Fin m β β := fun i => z (Fin.castAdd n i)
let x : Fin n β β := fun j => z (Fin.natAdd m j)
have hz : Fin.append u x = z := by
-- Reassemble the split coordinates before comparing the graph functions pointwise.
funext i
by_cases hi : i.1 < m
Β· have hi' : Fin.castAdd n β¨i.1, hiβ© = i := by
ext
simp
rw [β hi']
simp [u, x, Fin.append, Fin.addCases, hi]
Β· let j : Fin n := β¨i.1 - m, by omegaβ©
have hj : Fin.natAdd m j = i := by
ext
simp [j]
omega
rw [β hj]
simp [u, x, Fin.append, Fin.addCases, j]
have hEval := congrFun (congrFun hFixed u) x
-- Negate the bifunction fixed-point identity to recover the graph-level convex closure.
simpa [hz, u, x, concaveBifunctionClosure, concaveClosure, convexClosure,
bifunctionGraphFunction] using congrArg Neg.neg hEval
have hNegGraphConst :
(fun z : Fin (m + n) β β => -bifunctionGraphFunction G z) =
(fun _ : Fin (m + n) β β => (β€ : EReal)) β¨
(fun z : Fin (m + n) β β => -bifunctionGraphFunction G z) =
(fun _ : Fin (m + n) β β => (β₯ : EReal)) :=
(closed_improperConvexFunction_eq_top_or_bot
(n := m + n) (f := fun z : Fin (m + n) β β => -bifunctionGraphFunction G z)).1
β¨hNegGraphFixed, hImproperβ©
rcases hNegGraphConst with hNegGraphTop | hNegGraphBot
Β· right
funext u x
have hEval : -G u x = (β€ : EReal) := by
simpa [bifunctionGraphFunction] using congrFun hNegGraphTop (Fin.append u x)
-- Negating the constant `β€` graph value gives the constant `β₯` bifunction.
simpa using congrArg Neg.neg hEval
Β· left
funext u x
have hEval : -G u x = (β₯ : EReal) := by
simpa [bifunctionGraphFunction] using congrFun hNegGraphBot (Fin.append u x)
-- Negating the constant `β₯` graph value gives the constant `β€` bifunction.
simpa using congrArg Neg.neg hEvalHelper for Theorem 6.30.11: in the closed improper nonconstant convex branch, the current Chapter 2 closure semantics force the failure of the desired fixed-point identity.
lemma helperForTheorem_6_30_11_convexBifunctionClosure_ne_self_of_closed_not_proper_nonconstant
{m n : β}
{F : (Fin m β β) β (Fin n β β) β EReal}
(hClosed : ClosedConvexBifunction F)
(hNotProper : Β¬ ProperConvexBifunction F)
(hNotTop : F β fun _ _ => (β€ : EReal))
(hNotBot : F β fun _ _ => (β₯ : EReal)) :
convexBifunctionClosure F β F := by
have hGraphValues :
β z : Fin (m + n) β β,
bifunctionGraphFunction F z = (β€ : EReal) β¨ bifunctionGraphFunction F z = (β₯ : EReal) :=
helperForTheorem_6_30_11_convexGraph_values_top_or_bot_of_closed_not_proper
(F := F) hClosed hNotProper
have hExistsTop : β u x, F u x = (β€ : EReal) := by
by_contra hNoTop
apply hNotBot
funext u x
-- If no point attains `β€`, the pointwise `β€`/`β₯` dichotomy forces the constant `β₯` branch.
rcases hGraphValues (Fin.append u x) with hValTop | hValBot
Β· exfalso
exact hNoTop β¨u, x, by simpa [bifunctionGraphFunction] using hValTopβ©
Β· simpa [bifunctionGraphFunction] using hValBot
have hExistsBot : β u x, F u x = (β₯ : EReal) := by
by_contra hNoBot
apply hNotTop
funext u x
-- Dually, if no point attains `β₯`, then every value is forced to be `β€`.
rcases hGraphValues (Fin.append u x) with hValTop | hValBot
Β· simpa [bifunctionGraphFunction] using hValTop
Β· exfalso
exact hNoBot β¨u, x, by simpa [bifunctionGraphFunction] using hValBotβ©
rcases hExistsTop with β¨uTop, xTop, hTopValβ©
rcases hExistsBot with β¨uBot, xBot, hBotValβ©
have hClosureBot :
convexFunctionClosure (bifunctionGraphFunction F) =
(fun _ : Fin (m + n) β β => (β₯ : EReal)) :=
convexFunctionClosure_eq_bot_of_exists_bot
(f := bifunctionGraphFunction F)
β¨Fin.append uBot xBot, by simpa [bifunctionGraphFunction] using hBotValβ©
intro hFixed
have hClosureAtTop : convexBifunctionClosure F uTop xTop = (β₯ : EReal) := by
-- One `β₯` point forces the Chapter 2 closure to collapse to the constant `β₯` function.
simpa [convexBifunctionClosure, convexClosure] using
congrFun hClosureBot (Fin.append uTop xTop)
have hFixedAtTop := congrFun (congrFun hFixed uTop) xTop
have hBotEqTop : (β₯ : EReal) = (β€ : EReal) := by
-- Evaluate the supposed fixed-point identity at a point where the original bifunction is `β€`.
calc
(β₯ : EReal) = convexBifunctionClosure F uTop xTop := hClosureAtTop.symm
_ = F uTop xTop := hFixedAtTop
_ = (β€ : EReal) := hTopVal
exact bot_ne_top hBotEqTopHelper for Theorem 6.30.11: in the closed improper nonconstant concave branch, the current Chapter 2 closure semantics force the failure of the desired fixed-point identity after negating the graph.
lemma helperForTheorem_6_30_11_concaveBifunctionClosure_ne_self_of_closed_not_proper_nonconstant
{m n : β}
{G : (Fin m β β) β (Fin n β β) β EReal}
(hClosed : ClosedConcaveBifunction G)
(hNotProper : Β¬ ProperConcaveBifunction G)
(hNotTop : G β fun _ _ => (β€ : EReal))
(hNotBot : G β fun _ _ => (β₯ : EReal)) :
concaveBifunctionClosure G β G := by
have hNegGraphValues :
β z : Fin (m + n) β β,
(-bifunctionGraphFunction G z) = (β€ : EReal) β¨
(-bifunctionGraphFunction G z) = (β₯ : EReal) :=
helperForTheorem_6_30_11_negConcaveGraph_values_top_or_bot_of_closed_not_proper
(G := G) hClosed hNotProper
have hValues : β u x, G u x = (β€ : EReal) β¨ G u x = (β₯ : EReal) := by
intro u x
-- Negating the graph converts the Chapter 2 `β€`/`β₯` dichotomy back to the original bifunction.
rcases hNegGraphValues (Fin.append u x) with hNegTop | hNegBot
Β· right
have hEval : -G u x = (β€ : EReal) := by
simpa [bifunctionGraphFunction] using hNegTop
simpa using congrArg Neg.neg hEval
Β· left
have hEval : -G u x = (β₯ : EReal) := by
simpa [bifunctionGraphFunction] using hNegBot
simpa using congrArg Neg.neg hEval
have hExistsTop : β u x, G u x = (β€ : EReal) := by
by_contra hNoTop
apply hNotBot
funext u x
-- If the bifunction never attains `β€`, the dichotomy above forces it to be constantly `β₯`.
rcases hValues u x with hValTop | hValBot
Β· exfalso
exact hNoTop β¨u, x, hValTopβ©
Β· exact hValBot
have hExistsBot : β u x, G u x = (β₯ : EReal) := by
by_contra hNoBot
apply hNotTop
funext u x
-- If the bifunction never attains `β₯`, the same dichotomy forces the constant `β€` branch.
rcases hValues u x with hValTop | hValBot
Β· exact hValTop
Β· exfalso
exact hNoBot β¨u, x, hValBotβ©
rcases hExistsTop with β¨uTop, xTop, hTopValβ©
rcases hExistsBot with β¨uBot, xBot, hBotValβ©
have hClosureBot :
convexFunctionClosure (fun z : Fin (m + n) β β => -bifunctionGraphFunction G z) =
(fun _ : Fin (m + n) β β => (β₯ : EReal)) :=
convexFunctionClosure_eq_bot_of_exists_bot
(f := fun z : Fin (m + n) β β => -bifunctionGraphFunction G z)
β¨Fin.append uTop xTop, by
have hEval : -G uTop xTop = (β₯ : EReal) := by
simpa using congrArg Neg.neg hTopVal
simpa [bifunctionGraphFunction] using hEvalβ©
intro hFixed
have hClosureAtBot : concaveBifunctionClosure G uBot xBot = (β€ : EReal) := by
-- After negation, the same one-point `β₯` witness forces the concave closure to be constant `β€`.
simpa [concaveBifunctionClosure, concaveClosure, convexClosure] using
congrArg Neg.neg (congrFun hClosureBot (Fin.append uBot xBot))
have hFixedAtBot := congrFun (congrFun hFixed uBot) xBot
have hTopEqBot : (β€ : EReal) = (β₯ : EReal) := by
-- Evaluate the supposed fixed-point identity at a point where the original bifunction is `β₯`.
calc
(β€ : EReal) = concaveBifunctionClosure G uBot xBot := hClosureAtBot.symm
_ = G uBot xBot := hFixedAtBot
_ = (β₯ : EReal) := hBotVal
exact top_ne_bot hTopEqBot
Helper for Theorem 6.30.11: a closed convex bifunction whose graph never attains β₯
is fixed by the canonical graph closure. This is the graph-level lift of the Chapter 2
fixed-point theorem in the non-β₯ branch supported by the current closure API.
lemma helperForTheorem_6_30_11_convexBifunctionClosure_eq_self_of_closed
{m n : β}
{F : (Fin m β β) β (Fin n β β) β EReal}
(hClosed : ClosedConvexBifunction F)
(hGraphNeBot : β z : Fin (m + n) β β, bifunctionGraphFunction F z β (β₯ : EReal)) :
convexBifunctionClosure F = F := by
-- Route correction: the unconditional closed-case claim is false in the current formalization,
-- so this repaired helper records exactly the stronger non-`β₯` hypothesis already supported.
exact
helperForTheorem_6_30_11_convexBifunctionClosure_eq_self_of_closed_of_graph_ne_bot
(F := F) hClosed hGraphNeBot
Helper for Theorem 6.30.11: a closed concave bifunction whose negated graph never attains
β₯ is fixed by the canonical concave graph closure. This is the concave counterpart of the
supported non-β₯ convex fixed-point theorem after negating the graph.
lemma helperForTheorem_6_30_11_concaveBifunctionClosure_eq_self_of_closed
{m n : β}
{G : (Fin m β β) β (Fin n β β) β EReal}
(hClosed : ClosedConcaveBifunction G)
(hNegGraphNeBot :
β z : Fin (m + n) β β, (-bifunctionGraphFunction G z) β (β₯ : EReal)) :
concaveBifunctionClosure G = G := by
-- Route correction: the unconditional closed-case claim is false after negation as well, so
-- this helper now states the precise non-`β₯` hypothesis that the existing graph lemma proves.
exact
helperForTheorem_6_30_11_concaveBifunctionClosure_eq_self_of_closed_of_neg_graph_ne_bot
(G := G) hClosed hNegGraphNeBot/-
An earlier local attempt to refute Theorem 6.30.11 by explicit improper counterexamples has been
removed. The statement below now follows the book verbatim, and any remaining work belongs in the
closure/adjoinment development itself rather than in theorem-local obstruction lemmas.
-/
Helper for Theorem 6.30.11: in the convex branch, once the closure identity cl F = F is
supplied, the biconjugation formula immediately collapses to the fixed-point statement
.
lemma helperForTheorem_6_30_11_convex_biadjoint_eq_self_of_closure_eq_self
{m n : β}
{F : (Fin m β β) β (Fin n β β) β EReal}
(hF : ConvexBifunction F)
(hClosureFixed : convexBifunctionClosure F = F) :
biadjointOfConvexBifunction β¨F, hFβ© = F := by
-- Rewrite the biadjoint as the canonical convex closure and then apply the fixed-point input.
rw [helperForTheorem_6_30_11_biadjointOfConvex_graph_eq_convexBifunctionClosure_via_coordinate_shuffle
(F := F) (hF := hF)]
exact hClosureFixed
Helper for Theorem 6.30.11: in the concave branch, the fixed-point clause follows by
rewriting the biadjoint as the canonical concave closure and then using cl F = F.
lemma helperForTheorem_6_30_11_concave_biadjoint_eq_self_of_closure_eq_self
{m n : β}
{F : (Fin m β β) β (Fin n β β) β EReal}
(hF : ConcaveBifunction F)
(hClosureFixed : concaveBifunctionClosure F = F) :
biadjointOfConcaveBifunction β¨F, hFβ© = F := by
-- The concave branch uses the same closure rewrite after negating the graph in the background.
rw [helperForTheorem_6_30_11_biadjointOfConcave_graph_eq_concaveBifunctionClosure_via_coordinate_shuffle
(G := F) (hG := hF)]
exact hClosureFixed-- Proof sketch: treat the convex and concave cases separately. In each case the adjoint has the
-- opposite type and is closed; properness is preserved by adjunction; the biadjoint identifies
-- with the closure of the graph function; closedness gives exact recovery from the biadjoint; and
-- the polyhedral case is stable under adjunction. The two branches together encode the
-- correspondence between closed proper bifunctions of opposite type.
Theorem 6.30.11: for a convex or concave bifunction , its adjoint is a
closed bifunction of the opposite type from β^n to β^m, it is proper exactly when F is
proper, and the biadjoint agrees with the appropriate closure of F. The textbook closed-case
conclusion is formalized here through the explicit fixed-point identity cl F = F, i.e. through
the closure operator appearing in the preceding biconjugation statement itself. Closed proper
convex and closed proper concave bifunctions still correspond through adjunction, and
polyhedrality is preserved by adjoints.
theorem adjoint_bifunction_closure_properness_biconjugation_and_polyhedrality {m n : β}
(F : (Fin m β β) β (Fin n β β) β EReal) :
(β hF : ConvexBifunction F,
ClosedConcaveBifunction (m := n) (n := m) (adjointOfConvexBifunction β¨F, hFβ©) β§
(ProperConcaveBifunction (m := n) (n := m) (adjointOfConvexBifunction β¨F, hFβ©) β
ProperConvexBifunction F) β§
biadjointOfConvexBifunction β¨F, hFβ© = convexBifunctionClosure F β§
(convexBifunctionClosure F = F β biadjointOfConvexBifunction β¨F, hFβ© = F) β§
(ClosedConvexBifunction F β§ ProperConvexBifunction F β
ClosedConcaveBifunction (m := n) (n := m) (adjointOfConvexBifunction β¨F, hFβ©) β§
ProperConcaveBifunction (m := n) (n := m) (adjointOfConvexBifunction β¨F, hFβ©)) β§
(PolyhedralConvexBifunction F β
PolyhedralConcaveBifunction (m := n) (n := m) (adjointOfConvexBifunction β¨F, hFβ©)))
β§
(β hF : ConcaveBifunction F,
ClosedConvexBifunction (m := n) (n := m) (adjointOfConcaveBifunction β¨F, hFβ©) β§
(ProperConvexBifunction (m := n) (n := m) (adjointOfConcaveBifunction β¨F, hFβ©) β
ProperConcaveBifunction F) β§
biadjointOfConcaveBifunction β¨F, hFβ© = concaveBifunctionClosure F β§
(concaveBifunctionClosure F = F β biadjointOfConcaveBifunction β¨F, hFβ© = F) β§
(ClosedConcaveBifunction F β§ ProperConcaveBifunction F β
ClosedConvexBifunction (m := n) (n := m) (adjointOfConcaveBifunction β¨F, hFβ©) β§
ProperConvexBifunction (m := n) (n := m) (adjointOfConcaveBifunction β¨F, hFβ©)) β§
(PolyhedralConcaveBifunction F β
PolyhedralConvexBifunction (m := n) (n := m) (adjointOfConcaveBifunction β¨F, hFβ©))) := by
constructor
Β· intro hF
rcases
helperForTheorem_6_30_11_convex_branch_except_closed_fixed_point
(F := F) (hF := hF) with
β¨hClosedAdj, hProperIff, hClosedProper, hPolyβ©
refine β¨hClosedAdj, hProperIff, ?_, ?_, hClosedProper, hPolyβ©
-- The biadjoint-to-closure identity is the standard adjoint-graph rewrite followed by
-- Fenchel biconjugation through the coordinate shuffle.
exact
helperForTheorem_6_30_11_biadjointOfConvex_graph_eq_convexBifunctionClosure_via_coordinate_shuffle
(F := F) (hF := hF)
intro hClosureFixed
-- Delegate the fixed-point corollary to the dedicated closure-to-biadjoint helper.
exact
helperForTheorem_6_30_11_convex_biadjoint_eq_self_of_closure_eq_self
(hF := hF) hClosureFixed
Β· intro hF
rcases
helperForTheorem_6_30_11_concave_branch_except_closed_fixed_point
(G := F) (hG := hF) with
β¨hClosedAdj, hProperIff, hClosedProper, hPolyβ©
refine β¨hClosedAdj, hProperIff, ?_, ?_, hClosedProper, hPolyβ©
-- The concave branch follows the same route after converting the negated adjoint graph into
-- a concave conjugate.
exact
helperForTheorem_6_30_11_biadjointOfConcave_graph_eq_concaveBifunctionClosure_via_coordinate_shuffle
(G := F) (hG := hF)
intro hClosureFixed
-- The concave fixed-point statement is the corresponding closure rewrite.
exact
helperForTheorem_6_30_11_concave_biadjoint_eq_self_of_closure_eq_self
(hF := hF) hClosureFixedend Section30end Chap06