@@ -80,7 +80,7 @@ variables {α : Type*} {β : Type*}
8080 semilattice_sup, distrib_lattice, order_bot, bounded_order,
8181 canonically_ordered_comm_semiring, complete_linear_order, densely_ordered, nontrivial,
8282 canonically_linear_ordered_add_monoid, has_sub, has_ordered_sub,
83- linear_ordered_add_comm_monoid_with_top] ]
83+ linear_ordered_add_comm_monoid_with_top, char_zero ] ]
8484def ennreal := with_top ℝ≥0
8585
8686localized " notation (name := ennreal) `ℝ≥0∞` := ennreal" in ennreal
@@ -222,7 +222,6 @@ lemma coe_mono : monotone (coe : ℝ≥0 → ℝ≥0∞) := λ _ _, coe_le_coe.2
222222@[simp, norm_cast] lemma zero_eq_coe : 0 = (↑r : ℝ≥0 ∞) ↔ 0 = r := coe_eq_coe
223223@[simp, norm_cast] lemma coe_eq_one : (↑r : ℝ≥0 ∞) = 1 ↔ r = 1 := coe_eq_coe
224224@[simp, norm_cast] lemma one_eq_coe : 1 = (↑r : ℝ≥0 ∞) ↔ 1 = r := coe_eq_coe
225- @[simp] lemma coe_nonneg : 0 ≤ (↑r : ℝ≥0 ∞) := coe_le_coe.2 $ zero_le _
226225@[simp, norm_cast] lemma coe_pos : 0 < (↑r : ℝ≥0 ∞) ↔ 0 < r := coe_lt_coe
227226lemma coe_ne_zero : (r : ℝ≥0 ∞) ≠ 0 ↔ r ≠ 0 := not_congr coe_eq_coe
228227
@@ -255,12 +254,9 @@ lemma to_real_eq_to_real_iff' {x y : ℝ≥0∞} (hx : x ≠ ⊤) (hy : y ≠
255254 x.to_real = y.to_real ↔ x = y :=
256255by simp only [ennreal.to_real, nnreal.coe_eq, to_nnreal_eq_to_nnreal_iff' hx hy]
257256
258- protected lemma zero_lt_one : 0 < (1 : ℝ≥0 ∞) := zero_lt_one
259-
260257@[simp] lemma one_lt_two : (1 : ℝ≥0 ∞) < 2 :=
261258coe_one ▸ coe_two ▸ by exact_mod_cast (one_lt_two : 1 < 2 )
262- @[simp] lemma zero_lt_two : (0 : ℝ≥0 ∞) < 2 := lt_trans zero_lt_one one_lt_two
263- lemma two_ne_zero : (2 : ℝ≥0 ∞) ≠ 0 := (ne_of_lt zero_lt_two).symm
259+
264260lemma two_ne_top : (2 : ℝ≥0 ∞) ≠ ∞ := coe_two ▸ coe_ne_top
265261
266262/-- `(1 : ℝ≥0∞) ≤ 1`, recorded as a `fact` for use with `Lp` spaces. -/
@@ -301,9 +297,6 @@ lemma supr_ennreal {α : Type*} [complete_lattice α] {f : ℝ≥0∞ → α} :
301297 (⨆ n, f n) = (⨆ n : ℝ≥0 , f n) ⊔ f ∞ :=
302298@infi_ennreal αᵒᵈ _ _
303299
304- @[simp] lemma add_top : a + ∞ = ∞ := add_top _
305- @[simp] lemma top_add : ∞ + a = ∞ := top_add _
306-
307300/-- Coercion `ℝ≥0 → ℝ≥0∞` as a `ring_hom`. -/
308301def of_nnreal_hom : ℝ≥0 →+* ℝ≥0 ∞ :=
309302⟨coe, coe_one, λ _ _, coe_mul, coe_zero, λ _ _, coe_add⟩
486479 ↑(s.sup f) = s.sup (λ x, (f x : ℝ≥0 ∞)) :=
487480finset.comp_sup_eq_sup_comp_of_is_total _ coe_mono rfl
488481
489- lemma pow_le_pow {n m : ℕ} (ha : 1 ≤ a) (h : n ≤ m) : a ^ n ≤ a ^ m :=
490- begin
491- cases a,
492- { cases m,
493- { rw eq_bot_iff.mpr h,
494- exact le_rfl },
495- { rw [none_eq_top, top_pow (nat.succ_pos m)],
496- exact le_top } },
497- { rw [some_eq_coe, ← coe_pow, ← coe_pow, coe_le_coe],
498- exact pow_le_pow (by simpa using ha) h }
499- end
500-
501- lemma one_le_pow_of_one_le (ha : 1 ≤ a) (n : ℕ) : 1 ≤ a ^ n :=
502- by simpa using pow_le_pow ha (zero_le n)
503-
504482@[simp] lemma max_eq_zero_iff : max a b = 0 ↔ a = 0 ∧ b = 0 :=
505483by simp only [nonpos_iff_eq_zero.symm, max_le_iff]
506484
@@ -592,15 +570,11 @@ begin
592570 exact tsub_add_cancel_of_le ad.le
593571end
594572
595- lemma coe_nat_lt_coe {n : ℕ} : (n : ℝ≥0 ∞) < r ↔ ↑n < r := ennreal.coe_nat n ▸ coe_lt_coe
596- lemma coe_lt_coe_nat {n : ℕ} : (r : ℝ≥0 ∞) < n ↔ r < n := ennreal.coe_nat n ▸ coe_lt_coe
597- @[simp, norm_cast] lemma coe_nat_lt_coe_nat {m n : ℕ} : (m : ℝ≥0 ∞) < n ↔ m < n :=
598- ennreal.coe_nat n ▸ coe_nat_lt_coe.trans nat.cast_lt
599- lemma coe_nat_mono : strict_mono (coe : ℕ → ℝ≥0 ∞) := λ _ _, coe_nat_lt_coe_nat.2
600- @[simp, norm_cast] lemma coe_nat_le_coe_nat {m n : ℕ} : (m : ℝ≥0 ∞) ≤ n ↔ m ≤ n :=
601- coe_nat_mono.le_iff_le
573+ @[simp, norm_cast] lemma coe_nat_lt_coe {n : ℕ} : (n : ℝ≥0 ∞) < r ↔ ↑n < r :=
574+ ennreal.coe_nat n ▸ coe_lt_coe
602575
603- instance : char_zero ℝ≥0 ∞ := ⟨coe_nat_mono.injective⟩
576+ @[simp, norm_cast] lemma coe_lt_coe_nat {n : ℕ} : (r : ℝ≥0 ∞) < n ↔ r < n :=
577+ ennreal.coe_nat n ▸ coe_lt_coe
604578
605579protected lemma exists_nat_gt {r : ℝ≥0 ∞} (h : r ≠ ∞) : ∃n:ℕ, r < n :=
606580begin
@@ -674,9 +648,6 @@ section complete_lattice
674648lemma coe_Sup {s : set ℝ≥0 } : bdd_above s → (↑(Sup s) : ℝ≥0 ∞) = (⨆a∈s, ↑a) := with_top.coe_Sup
675649lemma coe_Inf {s : set ℝ≥0 } : s.nonempty → (↑(Inf s) : ℝ≥0 ∞) = (⨅a∈s, ↑a) := with_top.coe_Inf
676650
677- @[simp] lemma top_mem_upper_bounds {s : set ℝ≥0 ∞} : ∞ ∈ upper_bounds s :=
678- assume x hx, le_top
679-
680651lemma coe_mem_upper_bounds {s : set ℝ≥0 } :
681652 ↑r ∈ upper_bounds ((coe : ℝ≥0 → ℝ≥0 ∞) '' s) ↔ r ∈ upper_bounds s :=
682653by simp [upper_bounds, ball_image_iff, -mem_image, *] {contextual := tt}
@@ -685,9 +656,6 @@ end complete_lattice
685656
686657section mul
687658
688- @[mono] lemma mul_le_mul : a ≤ b → c ≤ d → a * c ≤ b * d :=
689- mul_le_mul'
690-
691659@[mono] lemma mul_lt_mul (ac : a < c) (bd : b < d) : a * b < c * d :=
692660begin
693661 rcases lt_iff_exists_nnreal_btwn.1 ac with ⟨a', aa', a'c⟩,
@@ -698,12 +666,14 @@ begin
698666 calc ↑(a * b) < ↑(a' * b') :
699667 coe_lt_coe.2 (mul_lt_mul' aa'.le bb' (zero_le _) ((zero_le a).trans_lt aa'))
700668 ... = ↑a' * ↑b' : coe_mul
701- ... ≤ c * d : mul_le_mul a'c.le b'd.le
669+ ... ≤ c * d : mul_le_mul' a'c.le b'd.le
702670end
703671
704- lemma mul_left_mono : monotone ((*) a) := λ b c, mul_le_mul le_rfl
672+ -- TODO: generalize to `covariant_class α α (*) (≤)`
673+ lemma mul_left_mono : monotone ((*) a) := λ b c, mul_le_mul' le_rfl
705674
706- lemma mul_right_mono : monotone (λ x, x * a) := λ b c h, mul_le_mul h le_rfl
675+ -- TODO: generalize to `covariant_class α α (swap (*)) (≤)`
676+ lemma mul_right_mono : monotone (λ x, x * a) := λ b c h, mul_le_mul' h le_rfl
707677
708678lemma pow_strict_mono {n : ℕ} (hn : n ≠ 0 ) : strict_mono (λ (x : ℝ≥0 ∞), x^n) :=
709679begin
@@ -727,7 +697,7 @@ begin
727697 intros x y h,
728698 contrapose! h,
729699 simpa only [← mul_assoc, ← coe_mul, inv_mul_cancel h0, coe_one, one_mul]
730- using mul_le_mul' (le_refl ↑a⁻¹) h
700+ using mul_le_mul_left' h ( ↑a⁻¹)
731701end
732702
733703lemma mul_eq_mul_left (h₀ : a ≠ 0 ) (hinf : a ≠ ∞) : a * b = a * c ↔ b = c :=
@@ -974,7 +944,7 @@ lemma bit0_injective : function.injective (bit0 : ℝ≥0∞ → ℝ≥0∞) :=
974944@[simp] lemma bit0_inj : bit0 a = bit0 b ↔ a = b := bit0_injective.eq_iff
975945
976946@[simp] lemma bit0_eq_zero_iff : bit0 a = 0 ↔ a = 0 := bit0_injective.eq_iff' bit0_zero
977- @[simp] lemma bit0_top : bit0 ∞ = ∞ := add_top
947+ @[simp] lemma bit0_top : bit0 ∞ = ∞ := add_top _
978948@[simp] lemma bit0_eq_top_iff : bit0 a = ∞ ↔ a = ∞ := bit0_injective.eq_iff' bit0_top
979949
980950@[mono] lemma bit1_strict_mono : strict_mono (bit1 : ℝ≥0 ∞ → ℝ≥0 ∞) :=
@@ -1151,12 +1121,6 @@ def _root_.order_iso.inv_ennreal : ℝ≥0∞ ≃o ℝ≥0∞ᵒᵈ :=
11511121lemma _root_.order_iso.inv_ennreal_symm_apply :
11521122 order_iso.inv_ennreal.symm a = (order_dual.of_dual a)⁻¹ := rfl
11531123
1154- protected lemma pow_le_pow_of_le_one {n m : ℕ} (ha : a ≤ 1 ) (h : n ≤ m) : a ^ m ≤ a ^ n :=
1155- begin
1156- rw [←inv_inv a, ← ennreal.inv_pow, ← @ennreal.inv_pow a⁻¹, ennreal.inv_le_inv],
1157- exact pow_le_pow (ennreal.one_le_inv.2 ha) h
1158- end
1159-
11601124@[simp] lemma div_top : a / ∞ = 0 := by rw [div_eq_mul_inv, inv_top, mul_zero]
11611125
11621126@[simp] lemma top_div_coe : ∞ / p = ∞ := by simp [div_eq_mul_inv, top_mul]
@@ -1176,7 +1140,7 @@ lemma div_eq_top : a / b = ∞ ↔ (a ≠ 0 ∧ b = 0) ∨ (a = ∞ ∧ b ≠
11761140by simp [div_eq_mul_inv, ennreal.mul_eq_top]
11771141
11781142protected lemma le_div_iff_mul_le (h0 : b ≠ 0 ∨ c ≠ 0 ) (ht : b ≠ ∞ ∨ c ≠ ∞) :
1179- a ≤ c / b ↔ a * b ≤ c :=
1143+ a ≤ c / b ↔ a * b ≤ c :=
11801144begin
11811145 induction b using with_top.rec_top_coe,
11821146 { lift c to ℝ≥0 using ht.neg_resolve_left rfl,
@@ -1239,7 +1203,7 @@ end
12391203by rw [← one_div, ennreal.le_div_iff_mul_le]; { right, simp }
12401204
12411205protected lemma div_le_div (hab : a ≤ b) (hdc : d ≤ c) : a / c ≤ b / d :=
1242- div_eq_mul_inv b d ▸ div_eq_mul_inv a c ▸ ennreal. mul_le_mul hab (ennreal.inv_le_inv.mpr hdc)
1206+ div_eq_mul_inv b d ▸ div_eq_mul_inv a c ▸ mul_le_mul' hab (ennreal.inv_le_inv.mpr hdc)
12431207
12441208protected lemma div_le_div_left (h : a ≤ b) (c : ℝ≥0 ∞) : c / b ≤ c / a :=
12451209ennreal.div_le_div le_rfl h
@@ -1389,8 +1353,8 @@ lemma exists_nat_pos_mul_gt (ha : a ≠ 0) (hb : b ≠ ∞) :
13891353begin
13901354 have : b / a ≠ ∞, from mul_ne_top hb (inv_ne_top.2 ha),
13911355 refine (ennreal.exists_nat_gt this ).imp (λ n hn, _),
1392- have : ↑ 0 < (n : ℝ≥0 ∞), from lt_of_le_of_lt (by simp ) hn,
1393- refine ⟨coe_nat_lt_coe_nat .1 this , _⟩,
1356+ have : 0 < (n : ℝ≥0 ∞), from lt_of_le_of_lt (zero_le _ ) hn,
1357+ refine ⟨nat.cast_pos .1 this , _⟩,
13941358 rwa [← ennreal.div_lt_iff (or.inl ha) (or.inr hb)]
13951359end
13961360
@@ -1504,7 +1468,7 @@ begin
15041468 exact lt_of_lt_of_le (int.neg_succ_lt_zero _) (int.of_nat_nonneg _) },
15051469 { simp only [zpow_neg_succ_of_nat, int.of_nat_eq_coe, zpow_coe_nat],
15061470 refine (ennreal.inv_le_one.2 _).trans _;
1507- exact ennreal. one_le_pow_of_one_le hx _, },
1471+ exact one_le_pow_of_one_le' hx _, },
15081472 { simp only [zpow_neg_succ_of_nat, ennreal.inv_le_inv],
15091473 apply pow_le_pow hx,
15101474 simpa only [←int.coe_nat_le_coe_nat_iff, neg_le_neg_iff, int.coe_nat_add, int.coe_nat_one,
0 commit comments