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

Commit cad35c7

Browse files
committed
feat(analysis/convex/cone): add convex_cone.strictly_positive and monotonicity lemmas (#15837)
The monotonicity lemmas transfer `poined`, `blunt`, `salient`, and `flat` across inequalities of cones. This also renames `convex_cone.positive_cone` to `convex_cone.positive` to reduce duplication.
1 parent f838fe8 commit cad35c7

File tree

1 file changed

+40
-11
lines changed

1 file changed

+40
-11
lines changed

src/analysis/convex/cone.lean

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,10 @@ lemma pointed_iff_not_blunt (S : convex_cone 𝕜 E) : S.pointed ↔ ¬S.blunt :
260260
lemma blunt_iff_not_pointed (S : convex_cone 𝕜 E) : S.blunt ↔ ¬S.pointed :=
261261
by rw [pointed_iff_not_blunt, not_not]
262262

263+
lemma pointed.mono {S T : convex_cone 𝕜 E} (h : S ≤ T) : S.pointed → T.pointed := @h _
264+
265+
lemma blunt.anti {S T : convex_cone 𝕜 E} (h : T ≤ S) : S.blunt → T.blunt := (∘ @@h)
266+
263267
end add_comm_monoid
264268

265269
section add_comm_group
@@ -282,6 +286,12 @@ begin
282286
exact h }
283287
end
284288

289+
lemma flat.mono {S T : convex_cone 𝕜 E} (h : S ≤ T) : S.flat → T.flat
290+
| ⟨x, hxS, hx, hnxS⟩ := ⟨x, h hxS, hx, h hnxS⟩
291+
292+
lemma salient.anti {S T : convex_cone 𝕜 E} (h : T ≤ S) : S.salient → T.salient :=
293+
λ hS x hxT hx hnT, hS x (h hxT) hx (h hnT)
294+
285295
/-- A flat cone is always pointed (contains `0`). -/
286296
lemma flat.pointed {S : convex_cone 𝕜 E} (hS : S.flat) : S.pointed :=
287297
begin
@@ -341,26 +351,45 @@ variables (𝕜 E) [ordered_semiring 𝕜] [ordered_add_comm_group E] [module
341351
The positive cone is the convex cone formed by the set of nonnegative elements in an ordered
342352
module.
343353
-/
344-
def positive_cone : convex_cone 𝕜 E :=
345-
{ carrier := {x | 0 ≤ x},
346-
smul_mem' :=
347-
begin
348-
rintro c hc x (hx : _ ≤ _),
349-
rw ←smul_zero c,
350-
exact smul_le_smul_of_nonneg hx hc.le,
351-
end,
354+
def positive : convex_cone 𝕜 E :=
355+
{ carrier := set.Ici 0,
356+
smul_mem' := λ c hc x (hx : _ ≤ _), smul_nonneg hc.le hx,
352357
add_mem' := λ x (hx : _ ≤ _) y (hy : _ ≤ _), add_nonneg hx hy }
353358

359+
@[simp] lemma mem_positive {x : E} : x ∈ positive 𝕜 E ↔ 0 ≤ x := iff.rfl
360+
@[simp] lemma coe_positive : ↑(positive 𝕜 E) = set.Ici (0 : E) := rfl
361+
354362
/-- The positive cone of an ordered module is always salient. -/
355-
lemma salient_positive_cone : salient (positive_cone 𝕜 E) :=
363+
lemma salient_positive : salient (positive 𝕜 E) :=
356364
λ x xs hx hx', lt_irrefl (0 : E)
357365
(calc
358366
0 < x : lt_of_le_of_ne xs hx.symm
359367
... ≤ x + (-x) : le_add_of_nonneg_right hx'
360368
... = 0 : add_neg_self x)
361369

362370
/-- The positive cone of an ordered module is always pointed. -/
363-
lemma pointed_positive_cone : pointed (positive_cone 𝕜 E) := le_refl 0
371+
lemma pointed_positive : pointed (positive 𝕜 E) := le_refl 0
372+
373+
/-- The cone of strictly positive elements.
374+
375+
Note that this naming diverges from the mathlib convention of `pos` and `nonneg` due to "positive
376+
cone" (`convex_cone.positive`) being established terminology for the non-negative elements. -/
377+
def strictly_positive : convex_cone 𝕜 E :=
378+
{ carrier := set.Ioi 0,
379+
smul_mem' := λ c hc x (hx : _ < _), smul_pos hc hx,
380+
add_mem' := λ x hx y hy, add_pos hx hy }
381+
382+
@[simp] lemma mem_strictly_positive {x : E} : x ∈ strictly_positive 𝕜 E ↔ 0 < x := iff.rfl
383+
@[simp] lemma coe_strictly_positive : ↑(strictly_positive 𝕜 E) = set.Ioi (0 : E) := rfl
384+
385+
lemma positive_le_strictly_positive : strictly_positive 𝕜 E ≤ positive 𝕜 E := λ x, le_of_lt
386+
387+
/-- The strictly positive cone of an ordered module is always salient. -/
388+
lemma salient_strictly_positive : salient (strictly_positive 𝕜 E) :=
389+
(salient_positive 𝕜 E).anti $ positive_le_strictly_positive 𝕜 E
390+
391+
/-- The strictly positive cone of an ordered module is always blunt. -/
392+
lemma blunt_strictly_positive : blunt (strictly_positive 𝕜 E) := lt_irrefl 0
364393

365394
end positive_cone
366395
end convex_cone
@@ -627,7 +656,7 @@ lemma pointed_inner_dual_cone : s.inner_dual_cone.pointed :=
627656
/-- The inner dual cone of a singleton is given by the preimage of the positive cone under the
628657
linear map `λ y, ⟪x, y⟫`. -/
629658
lemma inner_dual_cone_singleton (x : H) :
630-
({x} : set H).inner_dual_cone = (convex_cone.positive_cone ℝ ℝ).comap (innerₛₗ x) :=
659+
({x} : set H).inner_dual_cone = (convex_cone.positive ℝ ℝ).comap (innerₛₗ x) :=
631660
convex_cone.ext $ λ i, forall_eq
632661

633662
lemma inner_dual_cone_union (s t : set H) :

0 commit comments

Comments
 (0)