Convex Analysis (Rockafellar, 1970) -- Chapter 03 -- Section 15 -- Part 4

section Chap03section Section15open scoped BigOperatorsopen scoped Pointwiseopen scoped RealInnerProductSpace

Epigraph of the polar gauge as a sign-flipped inner-dual cone in Unknown identifier `H₂`H₂.

lemma epigraph_polarGauge_eq_preimage_innerDualCone_H2 {n : } {k : (Fin n ) EReal} (hk : IsGauge k) (xStar : Fin n ) (μ : ) : ((xStar, μ) epigraph (S := (Set.univ : Set (Fin n ))) (polarGauge k)) (let E₂ := EuclideanSpace (Fin n) let H₂ := WithLp 2 (E₂ × ) let eH := eH_transport_to_H2 n let σ₂ : H₂ H₂ := fun p => WithLp.toLp 2 (- (WithLp.ofLp p).1, (WithLp.ofLp p).2) let S₂ : Set H₂ := eH.symm '' epigraph (S := (Set.univ : Set (Fin n ))) k σ₂ (eH.symm (xStar, μ)) (ProperCone.innerDual (E := H₂) S₂ : Set H₂)) := by classical let E₂ := EuclideanSpace (Fin n) let H₂ := WithLp 2 (E₂ × ) let eH := eH_transport_to_H2 n let σ₂ : H₂ H₂ := fun p => WithLp.toLp 2 (- (WithLp.ofLp p).1, (WithLp.ofLp p).2) let S₂ : Set H₂ := eH.symm '' epigraph (S := (Set.univ : Set (Fin n ))) k constructor · intro hmem have : polarGauge k xStar (μ : EReal) := (mem_epigraph_univ_iff (f := polarGauge k) (x := xStar) (μ := μ)).1 hmem refine (ProperCone.mem_innerDual (E := H₂) (s := S₂) (y := σ₂ (eH.symm (xStar, μ)))).2 ?_ intro z hz rcases hz with p, hp, rfl rcases p with x, r have hx_le : k x (r : EReal) := (mem_epigraph_univ_iff (f := k) (x := x) (μ := r)).1 hp have hr0 : 0 r := mem_epigraph_snd_nonneg_of_isGauge (k := k) hk hp have hEps : ε > 0, dotProduct x xStar (μ + ε) * r := by intro ε have hlt : polarGauge k xStar < ((μ + ε : ) : EReal) := by have hltμ : (μ : EReal) < ((μ + ε : ) : EReal) := by exact (EReal.coe_lt_coe_iff).2 (by linarith) exact lt_of_le_of_lt hltμ obtain μ', hμ'mem, hμ'lt := (sInf_lt_iff).1 hlt have hineq1 : ((x ⬝ᵥ xStar : ) : EReal) μ' * k x := hμ'mem.2 x have hineq2 : μ' * k x μ' * (r : EReal) := mul_le_mul_of_nonneg_left hx_le hμ'mem.1 have hineq3 : μ' * (r : EReal) ((μ + ε : ) : EReal) * (r : EReal) := by have hμ'le : μ' ((μ + ε : ) : EReal) := le_of_lt hμ'lt exact mul_le_mul_of_nonneg_right hμ'le (by exact_mod_cast hr0) have hineq : ((x ⬝ᵥ xStar : ) : EReal) ((μ + ε : ) : EReal) * (r : EReal) := le_trans hineq1 (le_trans hineq2 hineq3) have hineq' : ((x ⬝ᵥ xStar : ) : EReal) ((μ + ε) * r : ) := by simpa [EReal.coe_mul, mul_comm, mul_left_comm, mul_assoc] using hineq exact (EReal.coe_le_coe_iff).1 hineq' have hdot : dotProduct x xStar μ * r := le_mul_of_forall_pos_add_mul hr0 hEps have hinner_nonneg : 0 - dotProduct x xStar + r * μ := by nlinarith [hdot] have hinner_eq : inner (𝕜 := ) (eH.symm (x, r)) (σ₂ (eH.symm (xStar, μ))) = - dotProduct x xStar + r * μ := by dsimp [eH, σ₂] exact (inner_eH_symm_signflip (n := n) (x := x) (xStar := xStar) (r := r) (μ := μ)) simpa [hinner_eq] using hinner_nonneg · intro hmem have hinner : x S₂, 0 inner (𝕜 := ) x (σ₂ (eH.symm (xStar, μ))) := (ProperCone.mem_innerDual (E := H₂) (s := S₂) (y := σ₂ (eH.symm (xStar, μ)))).1 hmem have hineq : {x : Fin n } {r : }, (x, r) epigraph (S := (Set.univ : Set (Fin n ))) k dotProduct x xStar μ * r := by intro x r hx have hz : eH.symm (x, r) S₂ := by exact (x, r), hx, rfl have hinner0 := hinner _ hz have hinner_eq : inner (𝕜 := ) (eH.symm (x, r)) (σ₂ (eH.symm (xStar, μ))) = - dotProduct x xStar + r * μ := by dsimp [eH, σ₂] exact (inner_eH_symm_signflip (n := n) (x := x) (xStar := xStar) (r := r) (μ := μ)) have hinner_nonneg : 0 - dotProduct x xStar + r * μ := by simpa [hinner_eq] using hinner0 nlinarith [hinner_nonneg] have hμ0 : 0 μ := by have h0mem : ((0 : Fin n ), (1 : )) epigraph (S := (Set.univ : Set (Fin n ))) k := by have h0le : k (0 : Fin n ) (1 : EReal) := by simp [hk.2.2.2] simpa [mem_epigraph_univ_iff] using h0le have h0 := hineq (x := 0) (r := (1 : )) h0mem simp at h0 exact h0 have hfeas : ε > 0, 0 ((μ + ε : ) : EReal) x : Fin n , ((x ⬝ᵥ xStar : ) : EReal) ((μ + ε : ) : EReal) * k x := by intro ε refine ?_, ?_ · exact_mod_cast (by linarith [hμ0, ]) · intro x by_cases hkx_top : k x = · have hpos : 0 < ((μ + ε : ) : EReal) := by exact_mod_cast (by linarith [hμ0, ]) have hmul : ((μ + ε : ) : EReal) * k x = := by simpa [hkx_top] using (EReal.mul_top_of_pos (x := ((μ + ε : ) : EReal)) hpos) have hle : ((x ⬝ᵥ xStar : ) : EReal) ((μ + ε : ) : EReal) * k x := by rw [hmul] exact le_top exact hle · have hkx_bot : k x := IsGauge.ne_bot hk x set r : := (k x).toReal have hkx_eq : k x = (r : EReal) := by simpa [r] using (EReal.coe_toReal (x := k x) hkx_top hkx_bot).symm have hr0 : 0 r := by have : (0 : EReal) (r : EReal) := by simpa [hkx_eq] using (hk.2.1 x) exact (EReal.coe_le_coe_iff).1 this have hforall : δ > 0, dotProduct x xStar μ * (r + δ) := by intro δ have hxr : (x, r + δ) epigraph (S := (Set.univ : Set (Fin n ))) k := by have hle : k x ((r + δ : ) : EReal) := by have : (r : EReal) ((r + δ : ) : EReal) := by exact_mod_cast (by linarith) simpa [hkx_eq] using this simpa [mem_epigraph_univ_iff] using hle have hineq' := hineq (x := x) (r := r + δ) hxr simpa [mul_comm, mul_left_comm, mul_assoc] using hineq' have hdot : dotProduct x xStar μ * r := by by_cases hμ0' : μ = 0 · have := hforall 1 (by linarith) simpa [hμ0'] using · have hμpos : 0 < μ := lt_of_le_of_ne hμ0 (Ne.symm hμ0') refine le_of_forall_pos_le_add ?_ intro δ have hδpos : 0 < δ / μ := div_pos hμpos have hδ' := hforall (δ / μ) hδpos have hcalc : μ * (r + δ / μ) = μ * r + δ := by calc μ * (r + δ / μ) = μ * r + μ * (δ / μ) := by ring _ = μ * r + δ := by have hμne : μ 0 := ne_of_gt hμpos field_simp [hμne] simpa [hcalc] using hδ' have hdot' : dotProduct x xStar (μ + ε) * r := by have hμle : μ μ + ε := by linarith have hmul : μ * r (μ + ε) * r := mul_le_mul_of_nonneg_right hμle hr0 exact le_trans hdot hmul have hdotE : ((x ⬝ᵥ xStar : ) : EReal) (((μ + ε) * r : ) : EReal) := by exact_mod_cast hdot' have hmulE : (((μ + ε) * r : ) : EReal) = ((μ + ε : ) : EReal) * k x := by simp [hkx_eq, EReal.coe_mul, mul_comm] simpa [hmulE] using hdotE have hle_eps : ε > 0, polarGauge k xStar ((μ + ε : ) : EReal) := by intro ε exact sInf_le (hfeas ε ) have htop : polarGauge k xStar := by intro htop have hle := hle_eps 1 (by linarith) have hle' : ( : EReal) ((μ + 1 : ) : EReal) := by simpa [htop] using hle exact (not_le_of_gt (EReal.coe_lt_top (μ + 1))) hle' have hbot : polarGauge k xStar := polarGauge_ne_bot (k := k) xStar set a : := (polarGauge k xStar).toReal have ha : polarGauge k xStar = (a : EReal) := by simpa [a] using (EReal.coe_toReal (x := polarGauge k xStar) htop hbot).symm have hale : a μ := by refine le_of_forall_pos_le_add ?_ intro ε have hle := hle_eps ε have hle' : (a : EReal) ((μ + ε : ) : EReal) := by simpa [ha] using hle exact (EReal.coe_le_coe_iff).1 hle' have hleE : polarGauge k xStar (μ : EReal) := by have hle' : (a : EReal) (μ : EReal) := (EReal.coe_le_coe_iff).2 hale simpa [ha] using hle' exact (mem_epigraph_univ_iff (f := polarGauge k) (x := xStar) (μ := μ)).2 hleE

The epigraph of the polar gauge is closed.

lemma isClosed_epigraph_polarGauge {n : } {k : (Fin n ) EReal} (hk : IsGauge k) : IsClosed (epigraph (S := (Set.univ : Set (Fin n ))) (polarGauge k)) := by classical let E₂ := EuclideanSpace (Fin n) let H₂ := WithLp 2 (E₂ × ) let eH := eH_transport_to_H2 n let σ₂ : H₂ H₂ := fun p => WithLp.toLp 2 (- (WithLp.ofLp p).1, (WithLp.ofLp p).2) let S₂ : Set H₂ := eH.symm '' epigraph (S := (Set.univ : Set (Fin n ))) k let A : Set H₂ := σ₂ ⁻¹' (ProperCone.innerDual (E := H₂) S₂ : Set H₂) have hAeq : A = (ProperCone.innerDual (E := H₂) (σ₂ ⁻¹' S₂) : Set H₂) := by simpa [A, E₂, H₂, σ₂] using (innerDual_preimage_signflip (n := n) (A := S₂)).symm have hAclosed : IsClosed A := by simpa [hAeq] using (isClosed_innerDual_H2 (n := n) (S := σ₂ ⁻¹' S₂)) have hset : epigraph (S := (Set.univ : Set (Fin n ))) (polarGauge k) = (fun p => eH.symm p) ⁻¹' A := by ext p rcases p with xStar, μ simpa [A, E₂, H₂, eH, σ₂, S₂] using (epigraph_polarGauge_eq_preimage_innerDualCone_H2 (hk := hk) (xStar := xStar) (μ := μ)) have hpre : IsClosed ((fun p => eH.symm p) ⁻¹' A) := hAclosed.preimage eH.symm.continuous simpa [hset] using hpre
end Section15end Chap03