Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit fb16dbc

Browse files
feat(analysis/convex/cone): dual of a convex cone is closed (#15766)
We prove that the dual of a convex cone is always closed. Part of #15637 Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
1 parent 16cf14f commit fb16dbc

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

src/analysis/convex/cone.lean

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,8 @@ def comap (f : E →ₗ[𝕜] F) (S : convex_cone 𝕜 F) : convex_cone 𝕜 E :
208208
smul_mem' := λ c hc x hx, by { rw [mem_preimage, f.map_smul c], exact S.smul_mem hc hx },
209209
add_mem' := λ x hx y hy, by { rw [mem_preimage, f.map_add], exact S.add_mem hx hy } }
210210

211+
@[simp] lemma coe_comap (f : E →ₗ[𝕜] F) (S : convex_cone 𝕜 F) : (S.comap f : set E) = f ⁻¹' S := rfl
212+
211213
@[simp] lemma comap_id (S : convex_cone 𝕜 E) : S.comap linear_map.id = S :=
212214
set_like.coe_injective preimage_id
213215

@@ -640,8 +642,8 @@ def set.inner_dual_cone (s : set H) : convex_cone ℝ H :=
640642
exact add_nonneg (hu x hx) (hv x hx)
641643
end }
642644

643-
lemma mem_inner_dual_cone (y : H) (s : set H) :
644-
y ∈ s.inner_dual_cone ↔ ∀ x ∈ s, 0 ≤ ⟪ x, y ⟫ := by refl
645+
@[simp] lemma mem_inner_dual_cone (y : H) (s : set H) :
646+
y ∈ s.inner_dual_cone ↔ ∀ x ∈ s, 0 ≤ ⟪ x, y ⟫ := iff.rfl
645647

646648
@[simp] lemma inner_dual_cone_empty : (∅ : set H).inner_dual_cone = ⊤ :=
647649
eq_top_iff.mpr $ λ x hy y, false.elim
@@ -688,4 +690,21 @@ lemma inner_dual_cone_eq_Inter_inner_dual_cone_singleton :
688690
(s.inner_dual_cone : set H) = ⋂ i : s, (({i} : set H).inner_dual_cone : set H) :=
689691
by rw [←convex_cone.coe_infi, ←inner_dual_cone_Union, Union_of_singleton_coe]
690692

693+
lemma is_closed_inner_dual_cone : is_closed (s.inner_dual_cone : set H) :=
694+
begin
695+
-- reduce the problem to showing that dual cone of a singleton `{x}` is closed
696+
rw inner_dual_cone_eq_Inter_inner_dual_cone_singleton,
697+
apply is_closed_Inter,
698+
intros x,
699+
700+
-- the dual cone of a singleton `{x}` is the preimage of `[0, ∞)` under `inner x`
701+
have h : ↑({x} : set H).inner_dual_cone = (inner x : H → ℝ) ⁻¹' set.Ici 0,
702+
{ rw [inner_dual_cone_singleton, convex_cone.coe_comap, convex_cone.coe_positive,
703+
innerₛₗ_apply_coe] },
704+
705+
-- the preimage is closed as `inner x` is continuous and `[0, ∞)` is closed
706+
rw h,
707+
exact is_closed_Ici.preimage (by continuity),
708+
end
709+
691710
end dual

src/analysis/inner_product_space/basic.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2133,6 +2133,7 @@ lemma continuous_on.inner (hf : continuous_on f s) (hg : continuous_on g s) :
21332133
continuous_on (λ t, ⟪f t, g t⟫) s :=
21342134
λ x hx, (hf x hx).inner (hg x hx)
21352135

2136+
@[continuity]
21362137
lemma continuous.inner (hf : continuous f) (hg : continuous g) : continuous (λ t, ⟪f t, g t⟫) :=
21372138
continuous_iff_continuous_at.2 $ λ x, hf.continuous_at.inner hg.continuous_at
21382139

0 commit comments

Comments
 (0)