Skip to content

Commit 23f454f

Browse files
committed
refactor(EReal): add add/sub lemmas and refactor limsup_add on EReal (#18879)
This PR : - adds a few lemmas about addition/subtraction in `Topology.Instances.EReal`. These are translations in `EReal` of similar lemmas about multiplication/division in `ENNReal` (see `Data.ENNReal.Inv`). - renames [EReal.add_le_of_forall_add_le](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Data/Real/EReal.html#EReal.add_le_of_forall_add_le), [EReal.le_add_of_forall_le_add](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Data/Real/EReal.html#EReal.le_add_of_forall_le_add) to bring them in line with similar lemmas in `Real`/`ENNReal` (see e.g. [add_le_of_forall_lt](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Algebra/Order/Group/DenselyOrdered.html#add_le_of_forall_lt)) - simplifies significantly the proofs of `add_le_of_forall_lt` and `le_add_of_forall_lt`. - renames [EReal.add_liminf_le_liminf_add](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Topology/Instances/EReal.html#EReal.add_liminf_le_liminf_add), [EReal.limsup_add_le_add_limsup](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Topology/Instances/EReal.html#EReal.limsup_add_le_add_limsup), [EReal.limsup_add_liminf_le_limsup_add](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Topology/Instances/EReal.html#EReal.limsup_add_liminf_le_limsup_add), [EReal.liminf_add_le_limsup_add_liminf](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Topology/Instances/EReal.html#EReal.liminf_add_le_limsup_add_liminf) to bring them in line with similar lemmas in `Real`/`ENNReal` (see e.g. [ENNReal.limsup_mul_le](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Order/Filter/ENNReal.html#ENNReal.limsup_mul_le)) - removes [EReal.le_of_forall_lt_iff_le](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Data/Real/EReal.html#EReal.le_of_forall_lt_iff_le), [EReal.ge_of_forall_gt_iff_ge](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Data/Real/EReal.html#EReal.ge_of_forall_gt_iff_ge), [EReal.limsup_le_iff](https://leanprover-community.github.io/mathlib4_docs/Mathlib/Topology/Instances/EReal.html#EReal.limsup_le_iff) which were very specialized lemmas used only in the older version of the proofs above.
1 parent 995c25c commit 23f454f

File tree

4 files changed

+138
-99
lines changed

4 files changed

+138
-99
lines changed

Mathlib/Data/Real/EReal.lean

Lines changed: 112 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -923,10 +923,16 @@ def negOrderIso : EReal ≃o ERealᵒᵈ :=
923923
invFun := fun x => -OrderDual.ofDual x
924924
map_rel_iff' := neg_le_neg_iff }
925925

926-
theorem neg_lt_iff_neg_lt {a b : EReal} : -a < b ↔ -b < a := by
926+
theorem neg_lt_comm {a b : EReal} : -a < b ↔ -b < a := by rw [← neg_lt_neg_iff, neg_neg]
927+
928+
@[deprecated (since := "2024-11-19")] alias neg_lt_iff_neg_lt := neg_lt_comm
929+
930+
theorem neg_lt_of_neg_lt {a b : EReal} (h : -a < b) : -b < a := neg_lt_comm.1 h
931+
932+
theorem lt_neg_comm {a b : EReal} : a < -b ↔ b < -a := by
927933
rw [← neg_lt_neg_iff, neg_neg]
928934

929-
theorem neg_lt_of_neg_lt {a b : EReal} (h : -a < b) : -b < a := neg_lt_iff_neg_lt.1 h
935+
theorem lt_neg_of_lt_neg {a b : EReal} (h : a < -b) : b < -a := lt_neg_comm.1 h
930936

931937
lemma neg_add {x y : EReal} (h1 : x ≠ ⊥ ∨ y ≠ ⊤) (h2 : x ≠ ⊤ ∨ y ≠ ⊥) :
932938
- (x + y) = - x - y := by
@@ -937,64 +943,6 @@ lemma neg_sub {x y : EReal} (h1 : x ≠ ⊥ ∨ y ≠ ⊥) (h2 : x ≠ ⊤ ∨ y
937943
- (x - y) = - x + y := by
938944
rw [sub_eq_add_neg, neg_add _ _, sub_eq_add_neg, neg_neg] <;> simp_all
939945

940-
/-! ### Addition and order -/
941-
942-
lemma le_of_forall_lt_iff_le {x y : EReal} : (∀ z : ℝ, x < z → y ≤ z) ↔ y ≤ x := by
943-
refine ⟨fun h ↦ WithBot.le_of_forall_lt_iff_le.1 ?_, fun h _ x_z ↦ h.trans x_z.le⟩
944-
rw [WithTop.forall]
945-
aesop
946-
947-
lemma ge_of_forall_gt_iff_ge {x y : EReal} : (∀ z : ℝ, z < y → z ≤ x) ↔ y ≤ x := by
948-
refine ⟨fun h ↦ WithBot.ge_of_forall_gt_iff_ge.1 ?_, fun h _ x_z ↦ x_z.le.trans h⟩
949-
rw [WithTop.forall]
950-
aesop
951-
952-
/-- This lemma is superseded by `add_le_of_forall_add_le`. -/
953-
private lemma top_add_le_of_forall_add_le {a b : EReal} (h : ∀ c < ⊤, ∀ d < a, c + d ≤ b) :
954-
⊤ + a ≤ b := by
955-
induction a with
956-
| h_bot => exact add_bot ⊤ ▸ bot_le
957-
| h_real a =>
958-
refine top_add_coe a ▸ le_of_forall_lt_iff_le.1 fun c b_c ↦ ?_
959-
specialize h (c - a + 1) (coe_lt_top (c - a + 1)) (a - 1)
960-
rw [← coe_one, ← coe_sub, ← coe_sub, ← coe_add, ← coe_add, add_add_sub_cancel, sub_add_cancel,
961-
EReal.coe_lt_coe_iff] at h
962-
exact (not_le_of_lt b_c (h (sub_one_lt a))).rec
963-
| h_top =>
964-
refine top_add_top ▸ le_of_forall_lt_iff_le.1 fun c b_c ↦ ?_
965-
specialize h c (coe_lt_top c) 0 zero_lt_top
966-
rw [add_zero] at h
967-
exact (not_le_of_lt b_c h).rec
968-
969-
lemma add_le_of_forall_add_le {a b c : EReal} (h : ∀ d < a, ∀ e < b, d + e ≤ c) : a + b ≤ c := by
970-
induction a with
971-
| h_bot => exact bot_add b ▸ bot_le
972-
| h_real a => induction b with
973-
| h_bot => exact add_bot (a : EReal) ▸ bot_le
974-
| h_real b =>
975-
refine (@ge_of_forall_gt_iff_ge c (a+b)).1 fun d d_ab ↦ ?_
976-
rw [← coe_add, EReal.coe_lt_coe_iff] at d_ab
977-
rcases exists_between d_ab with ⟨e, e_d, e_ab⟩
978-
have key₁ : (a + d - e : ℝ) < (a : EReal) := by apply EReal.coe_lt_coe_iff.2; linarith
979-
have key₂ : (e - a : ℝ) < (b : EReal) := by apply EReal.coe_lt_coe_iff.2; linarith
980-
apply le_of_eq_of_le _ (h (a + d - e) key₁ (e - a) key₂)
981-
rw [← coe_add, ← coe_sub, ← coe_sub, ← coe_add, sub_add_sub_cancel, add_sub_cancel_left]
982-
| h_top =>
983-
rw [add_comm (a : EReal) ⊤]
984-
exact top_add_le_of_forall_add_le fun d d_top e e_a ↦ (add_comm d e ▸ h e e_a d d_top)
985-
| h_top => exact top_add_le_of_forall_add_le h
986-
987-
lemma le_add_of_forall_le_add {a b c : EReal} (h₁ : a ≠ ⊥ ∨ b ≠ ⊤) (h₂ : a ≠ ⊤ ∨ b ≠ ⊥)
988-
(h : ∀ d > a, ∀ e > b, c ≤ d + e) :
989-
c ≤ a + b := by
990-
rw [← neg_le_neg_iff, neg_add h₁ h₂]
991-
refine add_le_of_forall_add_le fun d d_a e e_b ↦ ?_
992-
have h₃ : d ≠ ⊥ ∨ e ≠ ⊤ := Or.inr (ne_top_of_lt e_b)
993-
have h₄ : d ≠ ⊤ ∨ e ≠ ⊥ := Or.inl (ne_top_of_lt d_a)
994-
rw [← neg_neg d, neg_lt_iff_neg_lt, neg_neg a] at d_a
995-
rw [← neg_neg e, neg_lt_iff_neg_lt, neg_neg b] at e_b
996-
exact le_neg_of_le_neg <| neg_add h₃ h₄ ▸ h (- d) d_a (- e) e_b
997-
998946
/-!
999947
### Subtraction
1000948
@@ -1023,6 +971,12 @@ theorem top_sub_coe (x : ℝ) : (⊤ : EReal) - x = ⊤ :=
1023971
theorem coe_sub_bot (x : ℝ) : (x : EReal) - ⊥ = ⊤ :=
1024972
rfl
1025973

974+
lemma sub_bot {a : EReal} (h : a ≠ ⊥) : a - ⊥ = ⊤ := by
975+
induction a
976+
· simp only [ne_eq, not_true_eq_false] at h
977+
· rw [coe_sub_bot]
978+
· rw [top_sub_bot]
979+
1026980
theorem sub_le_sub {x y z t : EReal} (h : x ≤ y) (h' : t ≤ z) : x - z ≤ y - t :=
1027981
add_le_add h (neg_le_neg_iff.2 h')
1028982

@@ -1047,11 +1001,105 @@ theorem toReal_sub {x y : EReal} (hx : x ≠ ⊤) (h'x : x ≠ ⊥) (hy : y ≠
10471001
lift y to ℝ using ⟨hy, h'y⟩
10481002
rfl
10491003

1050-
lemma add_sub_cancel_right {a : EReal} {b : Real} : a + b - b = a := by
1004+
lemma sub_add_cancel_left {a : EReal} {b : Real} : a - b + b = a := by
10511005
induction a
1052-
· rw [bot_add b, bot_sub b]
1006+
· rw [bot_sub b, bot_add b]
10531007
· norm_cast; linarith
1054-
· rw [top_add_of_ne_bot (coe_ne_bot b), top_sub_coe]
1008+
· rw [top_sub_coe b, top_add_coe b]
1009+
1010+
lemma add_sub_cancel_right {a : EReal} {b : Real} : a + b - b = a := by
1011+
rw [sub_eq_add_neg, add_assoc, add_comm (b : EReal), ← add_assoc, ← sub_eq_add_neg]
1012+
exact sub_add_cancel_left
1013+
1014+
lemma le_sub_iff_add_le {a b c : EReal} (hb : b ≠ ⊥ ∨ c ≠ ⊥) (ht : b ≠ ⊤ ∨ c ≠ ⊤) :
1015+
a ≤ c - b ↔ a + b ≤ c := by
1016+
induction b with
1017+
| h_bot =>
1018+
simp only [ne_eq, not_true_eq_false, false_or] at hb
1019+
simp only [sub_bot hb, le_top, add_bot, bot_le]
1020+
| h_real b =>
1021+
rw [← (addLECancellable_coe b).add_le_add_iff_right, sub_add_cancel_left]
1022+
| h_top =>
1023+
simp only [ne_eq, not_true_eq_false, false_or, sub_top, le_bot_iff] at ht ⊢
1024+
refine ⟨fun h ↦ h ▸ (bot_add ⊤).symm ▸ bot_le, fun h ↦ ?_⟩
1025+
by_contra ha
1026+
exact (h.trans_lt (Ne.lt_top ht)).ne (add_top_iff_ne_bot.2 ha)
1027+
1028+
lemma sub_le_iff_le_add {a b c : EReal} (h₁ : b ≠ ⊥ ∨ c ≠ ⊤) (h₂ : b ≠ ⊤ ∨ c ≠ ⊥) :
1029+
a - b ≤ c ↔ a ≤ c + b := by
1030+
suffices a + (-b) ≤ c ↔ a ≤ c - (-b) by simpa [sub_eq_add_neg]
1031+
refine (le_sub_iff_add_le ?_ ?_).symm <;> simpa
1032+
1033+
protected theorem lt_sub_iff_add_lt {a b c : EReal} (h₁ : b ≠ ⊥ ∨ c ≠ ⊤) (h₂ : b ≠ ⊤ ∨ c ≠ ⊥) :
1034+
c < a - b ↔ c + b < a :=
1035+
lt_iff_lt_of_le_iff_le (sub_le_iff_le_add h₁ h₂)
1036+
1037+
theorem sub_le_of_le_add {a b c : EReal} (h : a ≤ b + c) : a - c ≤ b := by
1038+
induction c with
1039+
| h_bot => rw [add_bot, le_bot_iff] at h; simp only [h, bot_sub, bot_le]
1040+
| h_real c => exact (sub_le_iff_le_add (.inl (coe_ne_bot c)) (.inl (coe_ne_top c))).2 h
1041+
| h_top => simp only [sub_top, bot_le]
1042+
1043+
/-- See also `EReal.sub_le_of_le_add`.-/
1044+
theorem sub_le_of_le_add' {a b c : EReal} (h : a ≤ b + c) : a - b ≤ c :=
1045+
sub_le_of_le_add (add_comm b c ▸ h)
1046+
1047+
lemma add_le_of_le_sub {a b c : EReal} (h : a ≤ b - c) : a + c ≤ b := by
1048+
rw [← neg_neg c]
1049+
exact sub_le_of_le_add h
1050+
1051+
lemma sub_lt_iff {a b c : EReal} (h₁ : b ≠ ⊥ ∨ c ≠ ⊥) (h₂ : b ≠ ⊤ ∨ c ≠ ⊤) :
1052+
c - b < a ↔ c < a + b :=
1053+
lt_iff_lt_of_le_iff_le (le_sub_iff_add_le h₁ h₂)
1054+
1055+
lemma add_lt_of_lt_sub {a b c : EReal} (h : a < b - c) : a + c < b := by
1056+
contrapose! h
1057+
exact sub_le_of_le_add h
1058+
1059+
lemma sub_lt_of_lt_add {a b c : EReal} (h : a < b + c) : a - c < b :=
1060+
add_lt_of_lt_sub <| by rwa [sub_eq_add_neg, neg_neg]
1061+
1062+
/-- See also `EReal.sub_lt_of_lt_add`.-/
1063+
lemma sub_lt_of_lt_add' {a b c : EReal} (h : a < b + c) : a - b < c :=
1064+
sub_lt_of_lt_add <| by rwa [add_comm]
1065+
1066+
/-! ### Addition and order -/
1067+
1068+
lemma le_of_forall_lt_iff_le {x y : EReal} : (∀ z : ℝ, x < z → y ≤ z) ↔ y ≤ x := by
1069+
refine ⟨fun h ↦ WithBot.le_of_forall_lt_iff_le.1 ?_, fun h _ x_z ↦ h.trans x_z.le⟩
1070+
rw [WithTop.forall]
1071+
aesop
1072+
1073+
lemma ge_of_forall_gt_iff_ge {x y : EReal} : (∀ z : ℝ, z < y → z ≤ x) ↔ y ≤ x := by
1074+
refine ⟨fun h ↦ WithBot.ge_of_forall_gt_iff_ge.1 ?_, fun h _ x_z ↦ x_z.le.trans h⟩
1075+
rw [WithTop.forall]
1076+
aesop
1077+
1078+
private lemma exists_lt_add_left {a b c : EReal} (hc : c < a + b) : ∃ a' < a, c < a' + b := by
1079+
obtain ⟨a', hc', ha'⟩ := exists_between (sub_lt_of_lt_add hc)
1080+
refine ⟨a', ha', (sub_lt_iff (.inl ?_) (.inr hc.ne_top)).1 hc'⟩
1081+
contrapose! hc
1082+
exact hc ▸ (add_bot a).symm ▸ bot_le
1083+
1084+
private lemma exists_lt_add_right {a b c : EReal} (hc : c < a + b) : ∃ b' < b, c < a + b' := by
1085+
simp_rw [add_comm a] at hc ⊢; exact exists_lt_add_left hc
1086+
1087+
lemma add_le_of_forall_lt {a b c : EReal} (h : ∀ a' < a, ∀ b' < b, a' + b' ≤ c) : a + b ≤ c := by
1088+
refine le_of_forall_ge_of_dense fun d hd ↦ ?_
1089+
obtain ⟨a', ha', hd⟩ := exists_lt_add_left hd
1090+
obtain ⟨b', hb', hd⟩ := exists_lt_add_right hd
1091+
exact hd.le.trans (h _ ha' _ hb')
1092+
1093+
lemma le_add_of_forall_gt {a b c : EReal} (h₁ : a ≠ ⊥ ∨ b ≠ ⊤) (h₂ : a ≠ ⊤ ∨ b ≠ ⊥)
1094+
(h : ∀ a' > a, ∀ b' > b, c ≤ a' + b') : c ≤ a + b := by
1095+
rw [← neg_le_neg_iff, neg_add h₁ h₂]
1096+
exact add_le_of_forall_lt fun a' ha' b' hb' ↦ le_neg_of_le_neg
1097+
<| (h (-a') (lt_neg_of_lt_neg ha') (-b') (lt_neg_of_lt_neg hb')).trans_eq
1098+
(neg_add (.inr hb'.ne_top) (.inl ha'.ne_top)).symm
1099+
1100+
@[deprecated (since := "2024-11-19")] alias top_add_le_of_forall_add_le := add_le_of_forall_lt
1101+
@[deprecated (since := "2024-11-19")] alias add_le_of_forall_add_le := add_le_of_forall_lt
1102+
@[deprecated (since := "2024-11-19")] alias le_add_of_forall_le_add := le_add_of_forall_gt
10551103

10561104
lemma _root_.ENNReal.toEReal_sub {x y : ℝ≥0∞} (hy_top : y ≠ ∞) (h_le : y ≤ x) :
10571105
(x - y).toEReal = x.toEReal - y.toEReal := by
@@ -1576,7 +1624,7 @@ lemma div_right_distrib_of_nonneg {a b c : EReal} (h : 0 ≤ a) (h' : 0 ≤ b) :
15761624
(a + b) / c = (a / c) + (b / c) :=
15771625
EReal.right_distrib_of_nonneg h h'
15781626

1579-
/-! #### Division and Order s -/
1627+
/-! #### Division and Order -/
15801628

15811629
lemma monotone_div_right_of_nonneg {b : EReal} (h : 0 ≤ b) : Monotone fun a ↦ a / b :=
15821630
fun _ _ h' ↦ mul_le_mul_of_nonneg_right h' (inv_nonneg_of_nonneg h)

Mathlib/Dynamics/TopologicalEntropy/CoverEntropy.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,7 @@ lemma coverEntropyEntourage_le_log_coverMincard_div {T : X → X} {F : Set X} (F
483483
eventually_atTop.21, fun m m_pos ↦ log_coverMincard_le_add F_inv U_symm n_pos m_pos⟩
484484
apply ((limsup_le_limsup) key).trans
485485
suffices h : atTop.limsup v = 0 by
486-
have := @limsup_add_le_add_limsup ℕ atTop u v
486+
have := @limsup_add_le ℕ atTop u v
487487
rw [h, add_zero] at this
488488
specialize this (Or.inr EReal.zero_ne_top) (Or.inr EReal.zero_ne_bot)
489489
exact this.trans_eq (limsup_const (log (coverMincard T F U n) / n))

Mathlib/MeasureTheory/Integral/VitaliCaratheodory.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -527,7 +527,7 @@ theorem exists_upperSemicontinuous_lt_integral_gt [SigmaFinite μ] (f : α →
527527
rcases exists_lt_lowerSemicontinuous_integral_lt (fun x => -f x) hf.neg εpos with
528528
⟨g, g_lt_f, gcont, g_integrable, g_lt_top, gint⟩
529529
refine ⟨fun x => -g x, ?_, ?_, ?_, ?_, ?_⟩
530-
· exact fun x => EReal.neg_lt_iff_neg_lt.1 (by simpa only [EReal.coe_neg] using g_lt_f x)
530+
· exact fun x => EReal.neg_lt_comm.1 (by simpa only [EReal.coe_neg] using g_lt_f x)
531531
· exact
532532
continuous_neg.comp_lowerSemicontinuous_antitone gcont fun x y hxy =>
533533
EReal.neg_le_neg_iff.2 hxy

Mathlib/Topology/Instances/EReal.lean

Lines changed: 24 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -214,65 +214,56 @@ lemma liminf_neg : liminf (- v) f = - limsup v f :=
214214
lemma limsup_neg : limsup (- v) f = - liminf v f :=
215215
EReal.negOrderIso.liminf_apply.symm
216216

217-
lemma add_liminf_le_liminf_add : (liminf u f) + (liminf v f) ≤ liminf (u + v) f := by
218-
refine add_le_of_forall_add_le fun a a_u b b_v ↦ (le_liminf_iff).2 fun c c_ab ↦ ?_
217+
lemma le_liminf_add : (liminf u f) + (liminf v f) ≤ liminf (u + v) f := by
218+
refine add_le_of_forall_lt fun a a_u b b_v ↦ (le_liminf_iff).2 fun c c_ab ↦ ?_
219219
filter_upwards [eventually_lt_of_lt_liminf a_u, eventually_lt_of_lt_liminf b_v] with x a_x b_x
220-
exact lt_trans c_ab (add_lt_add a_x b_x)
220+
exact c_ab.trans (add_lt_add a_x b_x)
221221

222-
lemma limsup_add_le_add_limsup (h : limsup u f ≠ ⊥ ∨ limsup v f ≠ ⊤)
223-
(h' : limsup u f ≠ ⊤ ∨ limsup v f ≠ ⊥) :
222+
lemma limsup_add_le (h : limsup u f ≠ ⊥ ∨ limsup v f ≠ ⊤) (h' : limsup u f ≠ ⊤ ∨ limsup v f ≠ ⊥) :
224223
limsup (u + v) f ≤ (limsup u f) + (limsup v f) := by
225-
refine le_add_of_forall_le_add h h' fun a a_u b b_v ↦ (limsup_le_iff).2 fun c c_ab ↦ ?_
224+
refine le_add_of_forall_gt h h' fun a a_u b b_v ↦ (limsup_le_iff).2 fun c c_ab ↦ ?_
226225
filter_upwards [eventually_lt_of_limsup_lt a_u, eventually_lt_of_limsup_lt b_v] with x a_x b_x
227226
exact (add_lt_add a_x b_x).trans c_ab
228227

229-
lemma limsup_add_liminf_le_limsup_add : (limsup u f) + (liminf v f) ≤ limsup (u + v) f :=
230-
add_le_of_forall_add_le fun _ a_u _ b_v ↦ (le_limsup_iff).2 fun _ c_ab ↦
231-
Frequently.mono (Frequently.and_eventually ((frequently_lt_of_lt_limsup) a_u)
232-
((eventually_lt_of_lt_liminf) b_v)) fun _ ab_x ↦ c_ab.trans (add_lt_add ab_x.1 ab_x.2)
228+
lemma le_limsup_add : (limsup u f) + (liminf v f) ≤ limsup (u + v) f :=
229+
add_le_of_forall_lt fun _ a_u _ b_v ↦ (le_limsup_iff).2 fun _ c_ab ↦
230+
(((frequently_lt_of_lt_limsup) a_u).and_eventually ((eventually_lt_of_lt_liminf) b_v)).mono
231+
fun _ ab_x ↦ c_ab.trans (add_lt_add ab_x.1 ab_x.2)
233232

234-
lemma liminf_add_le_limsup_add_liminf (h : limsup u f ≠ ⊥ ∨ liminf v f ≠ ⊤)
235-
(h' : limsup u f ≠ ⊤ ∨ liminf v f ≠ ⊥) :
233+
lemma liminf_add_le (h : limsup u f ≠ ⊥ ∨ liminf v f ≠ ⊤) (h' : limsup u f ≠ ⊤ ∨ liminf v f ≠ ⊥) :
236234
liminf (u + v) f ≤ (limsup u f) + (liminf v f) :=
237-
le_add_of_forall_le_add h h' fun _ a_u _ b_v ↦ (liminf_le_iff).2 fun _ c_ab ↦
238-
Frequently.mono (Frequently.and_eventually ((frequently_lt_of_liminf_lt) b_v)
239-
((eventually_lt_of_limsup_lt) a_u)) fun _ ab_x ↦ (add_lt_add ab_x.2 ab_x.1).trans c_ab
235+
le_add_of_forall_gt h h' fun _ a_u _ b_v ↦ (liminf_le_iff).2 fun _ c_ab ↦
236+
(((frequently_lt_of_liminf_lt) b_v).and_eventually ((eventually_lt_of_limsup_lt) a_u)).mono
237+
fun _ ab_x ↦ (add_lt_add ab_x.2 ab_x.1).trans c_ab
238+
239+
@[deprecated (since := "2024-11-11")] alias add_liminf_le_liminf_add := le_liminf_add
240+
@[deprecated (since := "2024-11-11")] alias limsup_add_le_add_limsup := limsup_add_le
241+
@[deprecated (since := "2024-11-11")] alias limsup_add_liminf_le_limsup_add := le_limsup_add
242+
@[deprecated (since := "2024-11-11")] alias liminf_add_le_limsup_add_liminf := liminf_add_le
240243

241244
variable {a b : EReal}
242245

243246
lemma limsup_add_bot_of_ne_top (h : limsup u f = ⊥) (h' : limsup v f ≠ ⊤) :
244247
limsup (u + v) f = ⊥ := by
245-
apply le_bot_iff.1 (le_trans (limsup_add_le_add_limsup (Or.inr h') _) _)
246-
· rw [h]; exact Or.inl bot_ne_top
248+
apply le_bot_iff.1 ((limsup_add_le (.inr h') _).trans _)
249+
· rw [h]; exact .inl bot_ne_top
247250
· rw [h, bot_add]
248251

249252
lemma limsup_add_le_of_le (ha : limsup u f < a) (hb : limsup v f ≤ b) :
250253
limsup (u + v) f ≤ a + b := by
251-
rcases eq_top_or_lt_top b with (rfl | h)
254+
rcases eq_top_or_lt_top b with rfl | h
252255
· rw [add_top_of_ne_bot ha.ne_bot]; exact le_top
253-
· exact le_trans (limsup_add_le_add_limsup (Or.inr (lt_of_le_of_lt hb h).ne) (Or.inl ha.ne_top))
254-
(add_le_add ha.le hb)
256+
· exact (limsup_add_le (.inr (hb.trans_lt h).ne) (.inl ha.ne_top)).trans (add_le_add ha.le hb)
255257

256258
lemma liminf_add_gt_of_gt (ha : a < liminf u f) (hb : b < liminf v f) :
257259
a + b < liminf (u + v) f :=
258-
lt_of_lt_of_le (add_lt_add ha hb) add_liminf_le_liminf_add
260+
(add_lt_add ha hb).trans_le le_liminf_add
259261

260262
lemma liminf_add_top_of_ne_bot (h : liminf u f = ⊤) (h' : liminf v f ≠ ⊥) :
261263
liminf (u + v) f = ⊤ := by
262-
apply top_le_iff.1 (le_trans _ (add_liminf_le_liminf_add))
264+
apply top_le_iff.1 (le_trans _ le_liminf_add)
263265
rw [h, top_add_of_ne_bot h']
264266

265-
lemma limsup_le_iff {b : EReal} : limsup u f ≤ b ↔ ∀ c : ℝ, b < c → ∀ᶠ a : α in f, u a ≤ c := by
266-
rw [← le_of_forall_lt_iff_le]
267-
refine ⟨?_, ?_⟩ <;> intro h c b_c
268-
· rcases exists_between_coe_real b_c with ⟨d, b_d, d_c⟩
269-
apply mem_of_superset (eventually_lt_of_limsup_lt (lt_of_le_of_lt (h d b_d) d_c))
270-
rw [Set.setOf_subset_setOf]
271-
exact fun _ h' ↦ h'.le
272-
· rcases eq_or_neBot f with rfl | _
273-
· simp only [limsup_bot, bot_le]
274-
· exact (limsup_le_of_le) (h c b_c)
275-
276267
end LimInfSup
277268

278269
/-! ### Continuity of addition -/

0 commit comments

Comments
 (0)