Skip to content

Commit 2fed563

Browse files
committed
refactor(Analysis/Convex/Cone): use PointedCone in Riesz extension theorem (#37053)
Change the statement of the Riesz extension theorem to take a `PointedCone` rather than a `ConvexCone`. This PR is part of a series replacing `ConvexCone` with `PointedCone`. https://leanprover.zulipchat.com/#narrow/channel/287929-mathlib4/topic/Replacing.20.60ConvexCone.60.20with.20.60PointedCone.60/near/581184307 Co-authored-by: artie2000 <artem.khovanov@gmail.com>
1 parent d52d26f commit 2fed563

2 files changed

Lines changed: 14 additions & 12 deletions

File tree

Mathlib/Analysis/Convex/Cone/Extension.lean

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Authors: Yury Kudryashov, Frédéric Dupuis
66
module
77

88
public import Mathlib.Algebra.Order.Archimedean.Real.Basic
9-
public import Mathlib.Geometry.Convex.Cone.Basic
9+
public import Mathlib.Geometry.Convex.Cone.Pointed
1010
public import Mathlib.LinearAlgebra.LinearPMap
1111

1212
/-!
@@ -56,7 +56,7 @@ namespace RieszExtension
5656

5757
open Submodule
5858

59-
variable (s : ConvexCone ℝ E) (f : E →ₗ.[ℝ] ℝ)
59+
variable (s : PointedCone ℝ E) (f : E →ₗ.[ℝ] ℝ)
6060

6161
/-- Induction step in M. Riesz extension theorem. Given a convex cone `s` in a vector space `E`,
6262
a partially defined linear map `f : f.domain → ℝ`, assume that `f` is nonnegative on `f.domain ∩ p`
@@ -142,7 +142,7 @@ end RieszExtension
142142
and a linear `f : p → ℝ`, assume that `f` is nonnegative on `p ∩ s` and `p + s = E`. Then
143143
there exists a globally defined linear function `g : E → ℝ` that agrees with `f` on `p`,
144144
and is nonnegative on `s`. -/
145-
theorem riesz_extension (s : ConvexCone ℝ E) (f : E →ₗ.[ℝ] ℝ)
145+
theorem riesz_extension (s : PointedCone ℝ E) (f : E →ₗ.[ℝ] ℝ)
146146
(nonneg : ∀ x : f.domain, (x : E) ∈ s → 0 ≤ f x)
147147
(dense : ∀ y, ∃ x : f.domain, (x : E) + y ∈ s) :
148148
∃ g : E →ₗ[ℝ] ℝ, (∀ x : f.domain, g x = f x) ∧ ∀ x ∈ s, 0 ≤ g x := by
@@ -160,21 +160,18 @@ theorem exists_extension_of_le_sublinear (f : E →ₗ.[ℝ] ℝ) (N : E → ℝ
160160
(N_hom : ∀ c : ℝ, 0 < c → ∀ x, N (c • x) = c * N x) (N_add : ∀ x y, N (x + y) ≤ N x + N y)
161161
(hf : ∀ x : f.domain, f x ≤ N x) :
162162
∃ g : E →ₗ[ℝ] ℝ, (∀ x : f.domain, g x = f x) ∧ ∀ x, g x ≤ N x := by
163-
let s : ConvexCone ℝ (E × ℝ) :=
163+
have N_0 : N 0 = 0 := by grind [N_hom 2 (by norm_num) 0, smul_zero]
164+
let s : PointedCone ℝ (E × ℝ) :=
164165
{ carrier := { p : E × ℝ | N p.1 ≤ p.2 }
165-
smul_mem' := fun c hc p hp =>
166-
calc
167-
N (c • p.1) = c * N p.1 := N_hom c hc p.1
168-
_ ≤ c * p.2 := by gcongr; exact hp
169-
add_mem' := fun x hx y hy => (N_add _ _).trans (add_le_add hx hy) }
166+
zero_mem' := by simp [N_0]
167+
smul_mem' := fun ⟨_, hc⟩ _ _ => by rcases eq_or_lt_of_le' hc <;> simp_all
168+
add_mem' := fun hx hy => (N_add _ _).trans (add_le_add hx hy) }
170169
set f' := (-f).coprod (LinearMap.id.toPMap ⊤)
171170
have hf'_nonneg : ∀ x : f'.domain, x.1 ∈ s → 0 ≤ f' x := fun x (hx : N x.1.1 ≤ x.1.2) ↦ by
172171
simpa [f'] using le_trans (hf ⟨x.1.1, x.2.1⟩) hx
173172
have hf'_dense : ∀ y : E × ℝ, ∃ x : f'.domain, ↑x + y ∈ s := by
174173
rintro ⟨x, y⟩
175-
refine ⟨⟨(0, N x - y), ⟨f.domain.zero_mem, trivial⟩⟩, ?_⟩
176-
simp only [s, ConvexCone.mem_mk, mem_setOf_eq, Prod.fst_add, Prod.snd_add, zero_add,
177-
sub_add_cancel, le_rfl]
174+
exact ⟨⟨(0, N x - y), ⟨f.domain.zero_mem, trivial⟩⟩, by simp [s]⟩
178175
obtain ⟨g, g_eq, g_nonneg⟩ := riesz_extension s f' hf'_nonneg hf'_dense
179176
replace g_eq : ∀ (x : f.domain) (y : ℝ), g (x, y) = y - f x := fun x y ↦
180177
(g_eq ⟨(x, y), ⟨x.2, trivial⟩⟩).trans (sub_eq_neg_add _ _).symm

Mathlib/Geometry/Convex/Cone/Pointed.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,11 @@ lemma convex (C : PointedCone R E) : Convex R (C : Set E) := C.toConvexCone.conv
129129
nonrec lemma smul_mem (C : PointedCone R E) (hr : 0 ≤ r) (hx : x ∈ C) : r • x ∈ C :=
130130
C.smul_mem ⟨r, hr⟩ hx
131131

132+
lemma smul_mem_iff {𝕜 M : Type*} [Field 𝕜] [LinearOrder 𝕜] [IsStrictOrderedRing 𝕜]
133+
[AddCommMonoid M] [Module 𝕜 M] (C : PointedCone 𝕜 M)
134+
{c : 𝕜} (hc : 0 < c) {x : M} : c • x ∈ C ↔ x ∈ C :=
135+
fun h => inv_smul_smul₀ hc.ne' x ▸ C.smul_mem (inv_pos.2 hc).le h, C.smul_mem hc.le⟩
136+
132137
/-- The `PointedCone` constructed from a pointed `ConvexCone`. -/
133138
def _root_.ConvexCone.toPointedCone (C : ConvexCone R E) (hC : C.Pointed) : PointedCone R E where
134139
carrier := C

0 commit comments

Comments
 (0)