@@ -923,10 +923,16 @@ def negOrderIso : EReal ≃o ERealᵒᵈ :=
923
923
invFun := fun x => -OrderDual.ofDual x
924
924
map_rel_iff' := neg_le_neg_iff }
925
925
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
927
933
rw [← neg_lt_neg_iff, neg_neg]
928
934
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
930
936
931
937
lemma neg_add {x y : EReal} (h1 : x ≠ ⊥ ∨ y ≠ ⊤) (h2 : x ≠ ⊤ ∨ y ≠ ⊥) :
932
938
- (x + y) = - x - y := by
@@ -937,64 +943,6 @@ lemma neg_sub {x y : EReal} (h1 : x ≠ ⊥ ∨ y ≠ ⊥) (h2 : x ≠ ⊤ ∨ y
937
943
- (x - y) = - x + y := by
938
944
rw [sub_eq_add_neg, neg_add _ _, sub_eq_add_neg, neg_neg] <;> simp_all
939
945
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
-
998
946
/-!
999
947
### Subtraction
1000
948
@@ -1023,6 +971,12 @@ theorem top_sub_coe (x : ℝ) : (⊤ : EReal) - x = ⊤ :=
1023
971
theorem coe_sub_bot (x : ℝ) : (x : EReal) - ⊥ = ⊤ :=
1024
972
rfl
1025
973
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
+
1026
980
theorem sub_le_sub {x y z t : EReal} (h : x ≤ y) (h' : t ≤ z) : x - z ≤ y - t :=
1027
981
add_le_add h (neg_le_neg_iff.2 h')
1028
982
@@ -1047,11 +1001,105 @@ theorem toReal_sub {x y : EReal} (hx : x ≠ ⊤) (h'x : x ≠ ⊥) (hy : y ≠
1047
1001
lift y to ℝ using ⟨hy, h'y⟩
1048
1002
rfl
1049
1003
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
1051
1005
induction a
1052
- · rw [bot_add b, bot_sub b]
1006
+ · rw [bot_sub b, bot_add b]
1053
1007
· 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
1055
1103
1056
1104
lemma _root_.ENNReal.toEReal_sub {x y : ℝ≥0 ∞} (hy_top : y ≠ ∞) (h_le : y ≤ x) :
1057
1105
(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) :
1576
1624
(a + b) / c = (a / c) + (b / c) :=
1577
1625
EReal.right_distrib_of_nonneg h h'
1578
1626
1579
- /-! #### Division and Order s -/
1627
+ /-! #### Division and Order -/
1580
1628
1581
1629
lemma monotone_div_right_of_nonneg {b : EReal} (h : 0 ≤ b) : Monotone fun a ↦ a / b :=
1582
1630
fun _ _ h' ↦ mul_le_mul_of_nonneg_right h' (inv_nonneg_of_nonneg h)
0 commit comments