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

Commit 5c75390

Browse files
committed
feat(data/real/ennreal): Order properties of addition (#13371)
Inherit algebraic order lemmas from `with_top`. Also protect `ennreal.add_lt_add_iff_left` and `ennreal.add_lt_add_iff_right`, as they should have been.
1 parent 546618e commit 5c75390

File tree

3 files changed

+26
-34
lines changed

3 files changed

+26
-34
lines changed

src/data/real/ennreal.lean

Lines changed: 24 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -84,16 +84,16 @@ def ennreal := with_top ℝ≥0
8484
localized "notation `ℝ≥0∞` := ennreal" in ennreal
8585
localized "notation `∞` := (⊤ : ennreal)" in ennreal
8686

87+
namespace ennreal
88+
variables {a b c d : ℝ≥0∞} {r p q : ℝ≥0}
89+
8790
-- TODO: why are the two covariant instances necessary? why aren't they inferred?
88-
instance covariant_class_mul : covariant_class ℝ≥0∞ ℝ≥0∞ (*) (≤) :=
91+
instance covariant_class_mul_le : covariant_class ℝ≥0∞ ℝ≥0∞ (*) (≤) :=
8992
canonically_ordered_comm_semiring.to_covariant_mul_le
9093

91-
instance covariant_class_add : covariant_class ℝ≥0∞ ℝ≥0∞ (+) (≤) :=
94+
instance covariant_class_add_le : covariant_class ℝ≥0∞ ℝ≥0∞ (+) (≤) :=
9295
ordered_add_comm_monoid.to_covariant_class_left ℝ≥0
9396

94-
namespace ennreal
95-
variables {a b c d : ℝ≥0∞} {r p q : ℝ≥0}
96-
9797
instance : inhabited ℝ≥0∞ := ⟨0
9898

9999
instance : has_coe ℝ≥0 ℝ≥0∞ := ⟨ option.some ⟩
@@ -484,23 +484,30 @@ by simpa only [pos_iff_ne_zero] using ennreal.pow_pos
484484

485485
@[simp] lemma not_lt_zero : ¬ a < 0 := by simp
486486

487-
lemma add_lt_add_iff_left (ha : a ≠ ∞) : a + c < a + b ↔ c < b :=
488-
with_top.add_lt_add_iff_left ha
489-
490-
lemma add_lt_add_left (ha : a ≠ ∞) (h : b < c) : a + b < a + c :=
491-
(add_lt_add_iff_left ha).2 h
492-
493-
lemma add_lt_add_iff_right (ha : a ≠ ∞) : c + a < b + a ↔ c < b :=
494-
with_top.add_lt_add_iff_right ha
495-
496-
lemma add_lt_add_right (ha : a ≠ ∞) (h : b < c) : b + a < c + a :=
497-
(add_lt_add_iff_right ha).2 h
487+
protected lemma le_of_add_le_add_left : a ≠ ∞ → a + b ≤ a + c → b ≤ c :=
488+
with_top.le_of_add_le_add_left
489+
protected lemma le_of_add_le_add_right : a ≠ ∞ → b + a ≤ c + a → b ≤ c :=
490+
with_top.le_of_add_le_add_right
491+
protected lemma add_lt_add_left : a ≠ ∞ → b < c → a + b < a + c := with_top.add_lt_add_left
492+
protected lemma add_lt_add_right : a ≠ ∞ → b < c → b + a < c + a := with_top.add_lt_add_right
493+
protected lemma add_le_add_iff_left : a ≠ ∞ → (a + b ≤ a + c ↔ b ≤ c) :=
494+
with_top.add_le_add_iff_left
495+
protected lemma add_le_add_iff_right : a ≠ ∞ → (b + a ≤ c + a ↔ b ≤ c) :=
496+
with_top.add_le_add_iff_right
497+
protected lemma add_lt_add_iff_left : a ≠ ∞ → (a + b < a + c ↔ b < c) :=
498+
with_top.add_lt_add_iff_left
499+
protected lemma add_lt_add_iff_right : a ≠ ∞ → (b + a < c + a ↔ b < c) :=
500+
with_top.add_lt_add_iff_right
501+
protected lemma add_lt_add_of_le_of_lt : a ≠ ∞ → a ≤ b → c < d → a + c < b + d :=
502+
with_top.add_lt_add_of_le_of_lt
503+
protected lemma add_lt_add_of_lt_of_le : c ≠ ∞ → a < b → c ≤ d → a + c < b + d :=
504+
with_top.add_lt_add_of_lt_of_le
498505

499506
instance contravariant_class_add_lt : contravariant_class ℝ≥0∞ ℝ≥0∞ (+) (<) :=
500507
with_top.contravariant_class_add_lt
501508

502509
lemma lt_add_right (ha : a ≠ ∞) (hb : b ≠ 0) : a < a + b :=
503-
by rwa [← pos_iff_ne_zero, ← add_lt_add_iff_left ha, add_zero] at hb
510+
by rwa [← pos_iff_ne_zero, ←ennreal.add_lt_add_iff_left ha, add_zero] at hb
504511

505512
lemma le_of_forall_pos_le_add : ∀{a b : ℝ≥0∞}, (∀ε : ℝ≥0, 0 < ε → b < ∞ → a ≤ b + ε) → a ≤ b
506513
| a none h := le_top
@@ -614,21 +621,6 @@ by simp [upper_bounds, ball_image_iff, -mem_image, *] {contextual := tt}
614621

615622
end complete_lattice
616623

617-
/-- `le_of_add_le_add_left` is normally applicable to `ordered_cancel_add_comm_monoid`,
618-
but it holds in `ℝ≥0∞` with the additional assumption that `a ≠ ∞`. -/
619-
lemma le_of_add_le_add_left {a b c : ℝ≥0∞} (ha : a ≠ ∞) :
620-
a + b ≤ a + c → b ≤ c :=
621-
begin
622-
lift a to ℝ≥0 using ha,
623-
cases b; cases c; simp [← ennreal.coe_add, ennreal.coe_le_coe]
624-
end
625-
626-
/-- `le_of_add_le_add_right` is normally applicable to `ordered_cancel_add_comm_monoid`,
627-
but it holds in `ℝ≥0∞` with the additional assumption that `a ≠ ∞`. -/
628-
lemma le_of_add_le_add_right {a b c : ℝ≥0∞} : a ≠ ∞ →
629-
b + a ≤ c + a → b ≤ c :=
630-
by simpa only [add_comm _ a] using le_of_add_le_add_left
631-
632624
section mul
633625

634626
@[mono] lemma mul_le_mul : a ≤ b → c ≤ d → a * c ≤ b * d :=

src/measure_theory/integral/lebesgue.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1116,7 +1116,7 @@ begin
11161116
rcases this with ⟨φ, hle : ∀ x, ↑(φ x) ≤ f x, b, hbφ, hb⟩,
11171117
refine ⟨φ, hle, λ ψ hψ, _⟩,
11181118
have : (map coe φ).lintegral μ ≠ ∞, from ne_top_of_le_ne_top h (le_supr₂ φ hle),
1119-
rw [← add_lt_add_iff_left this, ← add_lintegral, ← map_add @ennreal.coe_add],
1119+
rw [← ennreal.add_lt_add_iff_left this, ← add_lintegral, ← map_add @ennreal.coe_add],
11201120
refine (hb _ (λ x, le_trans _ (max_le (hle x) (hψ x)))).trans_lt hbφ,
11211121
norm_cast,
11221122
simp only [add_apply, sub_apply, add_tsub_eq_max]

src/order/filter/ennreal.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ begin
3030
{ rw eventually_countable_forall,
3131
refine λ n, eventually_lt_of_limsup_lt _,
3232
nth_rewrite 0 ←add_zero (f.limsup u),
33-
exact (add_lt_add_iff_left hx_top).mpr (by simp), },
33+
exact (ennreal.add_lt_add_iff_left hx_top).mpr (by simp), },
3434
refine h_forall_le.mono (λ y hy, le_of_forall_pos_le_add (λ r hr_pos hx_top, _)),
3535
have hr_ne_zero : (r : ℝ≥0∞) ≠ 0,
3636
{ rw [ne.def, coe_eq_zero],

0 commit comments

Comments
 (0)