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

Commit 6b408eb

Browse files
urkudmergify[bot]
authored andcommitted
feat(data/real/nnreal): define nnreal.gi : galois_insertion of_real coe (#1699)
1 parent af43a2b commit 6b408eb

File tree

2 files changed

+27
-11
lines changed

2 files changed

+27
-11
lines changed

src/data/real/nnreal.lean

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ protected def of_real (r : ℝ) : ℝ≥0 := ⟨max r 0, le_max_right _ _⟩
3434
lemma coe_of_real (r : ℝ) (hr : 0 ≤ r) : (nnreal.of_real r : ℝ) = r :=
3535
max_eq_left hr
3636

37+
lemma le_coe_of_real (r : ℝ) : r ≤ nnreal.of_real r :=
38+
le_max_left r 0
39+
3740
lemma coe_nonneg (r : nnreal) : (0 : ℝ) ≤ r := r.2
3841

3942
instance : has_zero ℝ≥0 := ⟨⟨0, le_refl 0⟩⟩
@@ -93,6 +96,19 @@ decidable_linear_order.lift (coe : ℝ≥0 → ℝ) subtype.val_injective (by ap
9396
@[elim_cast] protected lemma coe_lt {r₁ r₂ : ℝ≥0} : (r₁ : ℝ) < r₂ ↔ r₁ < r₂ := iff.rfl
9497
@[elim_cast] protected lemma coe_pos {r : ℝ≥0} : (0 : ℝ) < r ↔ 0 < r := iff.rfl
9598

99+
protected lemma coe_mono : monotone (coe : ℝ≥0 → ℝ) := λ _ _, nnreal.coe_le.2
100+
101+
protected lemma of_real_mono : monotone nnreal.of_real :=
102+
λ x y h, max_le_max h (le_refl 0)
103+
104+
@[simp] lemma of_real_coe {r : ℝ≥0} : nnreal.of_real r = r :=
105+
nnreal.eq $ max_eq_left r.2
106+
107+
/-- `nnreal.of_real` and `coe : ℝ≥0 → ℝ` form a Galois insertion. -/
108+
protected def gi : galois_insertion nnreal.of_real coe :=
109+
galois_insertion.monotone_intro nnreal.coe_mono nnreal.of_real_mono
110+
le_coe_of_real (λ _, of_real_coe)
111+
96112
instance : order_bot ℝ≥0 :=
97113
{ bot := ⊥, bot_le := assume ⟨a, h⟩, h, .. nnreal.decidable_linear_order }
98114

@@ -246,9 +262,6 @@ by simpa [-of_real_pos] using (not_iff_not.2 (@of_real_pos r))
246262
lemma of_real_of_nonpos {r : ℝ} : r ≤ 0 → nnreal.of_real r = 0 :=
247263
of_real_eq_zero.2
248264

249-
@[simp] lemma of_real_coe {r : nnreal} : nnreal.of_real r = r :=
250-
nnreal.eq $ by simp [nnreal.of_real]
251-
252265
@[simp] lemma of_real_le_of_real_iff {r p : ℝ} (hp : 0 ≤ p) :
253266
nnreal.of_real r ≤ nnreal.of_real p ↔ r ≤ p :=
254267
by simp [nnreal.coe_le.symm, nnreal.of_real, hp]
@@ -270,19 +283,13 @@ lemma of_real_add_of_real {r p : ℝ} (hr : 0 ≤ r) (hp : 0 ≤ p) :
270283
(of_real_add hr hp).symm
271284

272285
lemma of_real_le_of_real {r p : ℝ} (h : r ≤ p) : nnreal.of_real r ≤ nnreal.of_real p :=
273-
nnreal.coe_le.2 $ max_le_max h $ le_refl _
286+
nnreal.of_real_mono h
274287

275288
lemma of_real_add_le {r p : ℝ} : nnreal.of_real (r + p) ≤ nnreal.of_real r + nnreal.of_real p :=
276289
nnreal.coe_le.1 $ max_le (add_le_add (le_max_left _ _) (le_max_left _ _)) nnreal.zero_le_coe
277290

278291
lemma of_real_le_iff_le_coe {r : ℝ} {p : nnreal} : nnreal.of_real r ≤ p ↔ r ≤ ↑p :=
279-
begin
280-
cases le_total 0 r,
281-
{ rw [← nnreal.coe_le, nnreal.coe_of_real r h] },
282-
{ rw [of_real_eq_zero.2 h], split,
283-
intro, exact le_trans h (coe_nonneg _),
284-
intro, exact zero_le _ }
285-
end
292+
nnreal.gi.gc r p
286293

287294
lemma le_of_real_iff_coe_le {r : nnreal} {p : ℝ} (hp : p ≥ 0) : r ≤ nnreal.of_real p ↔ ↑r ≤ p :=
288295
by rw [← nnreal.coe_le, nnreal.coe_of_real p hp]

src/order/galois_connection.lean

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,15 @@ structure galois_insertion {α β : Type*} [preorder α] [preorder β] (l : α
192192
(le_l_u : ∀x, x ≤ l (u x))
193193
(choice_eq : ∀a h, choice a h = l a)
194194

195+
/-- A constructor for a Galois insertion with the trivial `choice` function. -/
196+
def galois_insertion.monotone_intro {α β : Type*} [preorder α] [preorder β] {l : α → β} {u : β → α}
197+
(hu : monotone u) (hl : monotone l) (hul : ∀ a, a ≤ u (l a)) (hlu : ∀ b, l (u b) = b) :
198+
galois_insertion l u :=
199+
{ choice := λ x _, l x,
200+
gc := galois_connection.monotone_intro hu hl hul (λ b, le_of_eq (hlu b)),
201+
le_l_u := λ b, le_of_eq $ (hlu b).symm,
202+
choice_eq := λ _ _, rfl }
203+
195204
/-- Makes a Galois insertion from an order-preserving bijection. -/
196205
protected def order_iso.to_galois_insertion [preorder α] [preorder β] (oi : @order_iso α β (≤) (≤)) :
197206
@galois_insertion α β _ _ (oi) (oi.symm) :=

0 commit comments

Comments
 (0)