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

Commit afdb4fa

Browse files
committed
feat(*/with_top): add lemmas about with_top/with_bot (#18487)
Backport leanprover-community/mathlib4#2406
1 parent 5be98b9 commit afdb4fa

File tree

15 files changed

+126
-104
lines changed

15 files changed

+126
-104
lines changed

src/algebra/big_operators/order.lean

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -602,34 +602,26 @@ namespace with_top
602602
open finset
603603

604604
/-- A product of finite numbers is still finite -/
605-
lemma prod_lt_top [canonically_ordered_comm_semiring R] [nontrivial R] [decidable_eq R]
606-
{s : finset ι} {f : ι → with_top R} (h : ∀ i ∈ s, f i ≠ ⊤) :
605+
lemma prod_lt_top [comm_monoid_with_zero R] [no_zero_divisors R] [nontrivial R] [decidable_eq R]
606+
[has_lt R] {s : finset ι} {f : ι → with_top R} (h : ∀ i ∈ s, f i ≠ ⊤) :
607607
∏ i in s, f i < ⊤ :=
608-
prod_induction f (λ a, a < ⊤) (λ a b h₁ h₂, mul_lt_top h₁.ne h₂.ne) (coe_lt_top 1) $
609-
λ a ha, lt_top_iff_ne_top.2 (h a ha)
610-
611-
/-- A sum of finite numbers is still finite -/
612-
lemma sum_lt_top [ordered_add_comm_monoid M] {s : finset ι} {f : ι → with_top M}
613-
(h : ∀ i ∈ s, f i ≠ ⊤) : (∑ i in s, f i) < ⊤ :=
614-
sum_induction f (λ a, a < ⊤) (λ a b h₁ h₂, add_lt_top.2 ⟨h₁, h₂⟩) zero_lt_top $
615-
λ i hi, lt_top_iff_ne_top.2 (h i hi)
608+
prod_induction f (λ a, a < ⊤) (λ a b h₁ h₂, mul_lt_top' h₁ h₂) (coe_lt_top 1) $
609+
λ a ha, with_top.lt_top_iff_ne_top.2 (h a ha)
616610

617611
/-- A sum of numbers is infinite iff one of them is infinite -/
618-
lemma sum_eq_top_iff [ordered_add_comm_monoid M] {s : finset ι} {f : ι → with_top M} :
612+
lemma sum_eq_top_iff [add_comm_monoid M] {s : finset ι} {f : ι → with_top M} :
619613
∑ i in s, f i = ⊤ ↔ ∃ i ∈ s, f i = ⊤ :=
620-
begin
621-
classical,
622-
split,
623-
{ contrapose!,
624-
exact λ h, (sum_lt_top $ λ i hi, (h i hi)).ne },
625-
{ rintro ⟨i, his, hi⟩,
626-
rw [sum_eq_add_sum_diff_singleton his, hi, top_add] }
627-
end
614+
by induction s using finset.cons_induction; simp [*, or_and_distrib_right, exists_or_distrib]
628615

629616
/-- A sum of finite numbers is still finite -/
630-
lemma sum_lt_top_iff [ordered_add_comm_monoid M] {s : finset ι} {f : ι → with_top M} :
617+
lemma sum_lt_top_iff [add_comm_monoid M] [has_lt M] {s : finset ι} {f : ι → with_top M} :
631618
∑ i in s, f i < ⊤ ↔ ∀ i ∈ s, f i < ⊤ :=
632-
by simp only [lt_top_iff_ne_top, ne.def, sum_eq_top_iff, not_exists]
619+
by simp only [with_top.lt_top_iff_ne_top, ne.def, sum_eq_top_iff, not_exists]
620+
621+
/-- A sum of finite numbers is still finite -/
622+
lemma sum_lt_top [add_comm_monoid M] [has_lt M] {s : finset ι} {f : ι → with_top M}
623+
(h : ∀ i ∈ s, f i ≠ ⊤) : (∑ i in s, f i) < ⊤ :=
624+
sum_lt_top_iff.2 $ λ i hi, with_top.lt_top_iff_ne_top.2 (h i hi)
633625

634626
end with_top
635627

@@ -640,13 +632,7 @@ variables {S : Type*}
640632
lemma absolute_value.sum_le [semiring R] [ordered_semiring S]
641633
(abv : absolute_value R S) (s : finset ι) (f : ι → R) :
642634
abv (∑ i in s, f i) ≤ ∑ i in s, abv (f i) :=
643-
begin
644-
letI := classical.dec_eq ι,
645-
refine finset.induction_on s _ (λ i s hi ih, _),
646-
{ simp },
647-
{ simp only [finset.sum_insert hi],
648-
exact (abv.add_le _ _).trans (add_le_add le_rfl ih) },
649-
end
635+
finset.le_sum_of_subadditive abv (map_zero _) abv.add_le _ _
650636

651637
lemma is_absolute_value.abv_sum [semiring R] [ordered_semiring S] (abv : R → S)
652638
[is_absolute_value abv] (f : ι → R) (s : finset ι) :

src/algebra/order/monoid/with_top.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ by cases a; cases b; simp [none_eq_top, some_eq_coe, ←with_top.coe_add]
7474
7575
lemma add_ne_top : a + b ≠ ⊤ ↔ a ≠ ⊤ ∧ b ≠ ⊤ := add_eq_top.not.trans not_or_distrib
7676
77-
lemma add_lt_top [partial_order α] {a b : with_top α} : a + b < ⊤ ↔ a < ⊤ ∧ b < ⊤ :=
78-
by simp_rw [lt_top_iff_ne_top, add_ne_top]
77+
lemma add_lt_top [has_lt α] {a b : with_top α} : a + b < ⊤ ↔ a < ⊤ ∧ b < ⊤ :=
78+
by simp_rw [with_top.lt_top_iff_ne_top, add_ne_top]
7979
8080
lemma add_eq_coe : ∀ {a b : with_top α} {c : α},
8181
a + b = c ↔ ∃ (a' b' : α), ↑a' = a ∧ ↑b' = b ∧ a' + b' = c
@@ -380,7 +380,7 @@ lemma coe_bit1 [has_one α] {a : α} : ((bit1 a : α) : with_bot α) = bit1 a :=
380380
@[simp] lemma add_eq_bot : a + b = ⊥ ↔ a = ⊥ ∨ b = ⊥ := with_top.add_eq_top
381381
lemma add_ne_bot : a + b ≠ ⊥ ↔ a ≠ ⊥ ∧ b ≠ ⊥ := with_top.add_ne_top
382382
383-
lemma bot_lt_add [partial_order α] {a b : with_bot α} : ⊥ < a + b ↔ ⊥ < a ∧ ⊥ < b :=
383+
lemma bot_lt_add [has_lt α] {a b : with_bot α} : ⊥ < a + b ↔ ⊥ < a ∧ ⊥ < b :=
384384
@with_top.add_lt_top αᵒᵈ _ _ _ _
385385
386386
lemma add_eq_coe : a + b = x ↔ ∃ (a' b' : α), ↑a' = a ∧ ↑b' = b ∧ a' + b' = x := with_top.add_eq_coe

src/algebra/order/ring/with_top.lean

Lines changed: 37 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,36 @@ instance : mul_zero_class (with_top α) :=
3636

3737
lemma mul_def {a b : with_top α} : a * b = if a = 0 ∨ b = 0 then 0 else option.map₂ (*) a b := rfl
3838

39-
@[simp] lemma mul_top {a : with_top α} (h : a 0) : a * ⊤ = ⊤ :=
40-
by cases a; simp [mul_def, h]; refl
39+
lemma mul_top' {a : with_top α} : a * ⊤ = if a = 0 then 0 else ⊤ :=
40+
by induction a using with_top.rec_top_coe; simp [mul_def]; refl
4141

42-
@[simp] lemma top_mul {a : with_top α} (h : a ≠ 0) : ⊤ * a = ⊤ :=
43-
by cases a; simp [mul_def, h]; refl
42+
@[simp] lemma mul_top {a : with_top α} (h : a ≠ 0) : a * ⊤ = ⊤ := by rw [mul_top', if_neg h]
43+
44+
lemma top_mul' {a : with_top α} : ⊤ * a = if a = 0 then 0 else ⊤ :=
45+
by induction a using with_top.rec_top_coe; simp [mul_def]; refl
46+
47+
@[simp] lemma top_mul {a : with_top α} (h : a ≠ 0) : ⊤ * a = ⊤ := by rw [top_mul', if_neg h]
4448

4549
@[simp] lemma top_mul_top : (⊤ * ⊤ : with_top α) = ⊤ :=
4650
top_mul top_ne_zero
4751

52+
theorem mul_eq_top_iff {a b : with_top α} : a * b = ⊤ ↔ a ≠ 0 ∧ b = ⊤ ∨ a = ⊤ ∧ b ≠ 0 :=
53+
begin
54+
rw [mul_def, ite_eq_iff, ← none_eq_top, option.map₂_eq_none_iff],
55+
have ha : a = 0 → a ≠ none := λ h, h.symm ▸ zero_ne_top,
56+
have hb : b = 0 → b ≠ none := λ h, h.symm ▸ zero_ne_top,
57+
tauto
58+
end
59+
60+
theorem mul_lt_top' [has_lt α] {a b : with_top α} (ha : a < ⊤) (hb : b < ⊤) : a * b < ⊤ :=
61+
begin
62+
rw [with_top.lt_top_iff_ne_top] at *,
63+
simp only [ne.def, mul_eq_top_iff, *, and_false, false_and, false_or, not_false_iff]
64+
end
65+
66+
theorem mul_lt_top [has_lt α] {a b : with_top α} (ha : a ≠ ⊤) (hb : b ≠ ⊤) : a * b < ⊤ :=
67+
mul_lt_top' (with_top.lt_top_iff_ne_top.2 ha) (with_top.lt_top_iff_ne_top.2 hb)
68+
4869
instance [no_zero_divisors α] : no_zero_divisors (with_top α) :=
4970
begin
5071
refine ⟨λ a b h₁, decidable.by_contradiction $ λ h₂, _⟩,
@@ -59,7 +80,7 @@ section mul_zero_class
5980

6081
variables [mul_zero_class α]
6182

62-
@[norm_cast] lemma coe_mul {a b : α} : (↑(a * b) : with_top α) = a * b :=
83+
@[simp, norm_cast] lemma coe_mul {a b : α} : (↑(a * b) : with_top α) = a * b :=
6384
decidable.by_cases (assume : a = 0, by simp [this]) $ assume ha,
6485
decidable.by_cases (assume : b = 0, by simp [this]) $ assume hb,
6586
by { simp [*, mul_def] }
@@ -69,22 +90,6 @@ lemma mul_coe {b : α} (hb : b ≠ 0) : ∀{a : with_top α}, a * b = a.bind (λ
6990
by simp [hb]
7091
| (some a) := show ↑a * ↑b = ↑(a * b), from coe_mul.symm
7192

72-
@[simp] lemma mul_eq_top_iff {a b : with_top α} : a * b = ⊤ ↔ (a ≠ 0 ∧ b = ⊤) ∨ (a = ⊤ ∧ b ≠ 0) :=
73-
begin
74-
cases a; cases b; simp only [none_eq_top, some_eq_coe],
75-
{ simp [← coe_mul] },
76-
{ by_cases hb : b = 0; simp [hb] },
77-
{ by_cases ha : a = 0; simp [ha] },
78-
{ simp [← coe_mul] }
79-
end
80-
81-
lemma mul_lt_top [preorder α] {a b : with_top α} (ha : a ≠ ⊤) (hb : b ≠ ⊤) : a * b < ⊤ :=
82-
begin
83-
lift a to α using ha,
84-
lift b to α using hb,
85-
simp only [← coe_mul, coe_lt_top]
86-
end
87-
8893
@[simp] lemma untop'_zero_mul (a b : with_top α) : (a * b).untop' 0 = a.untop' 0 * b.untop' 0 :=
8994
begin
9095
by_cases ha : a = 0, { rw [ha, zero_mul, ← coe_zero, untop'_coe, zero_mul] },
@@ -127,7 +132,7 @@ instance [mul_zero_one_class α] [nontrivial α] : mul_zero_one_class (with_top
127132
induction y using with_top.rec_top_coe,
128133
{ have : (f x : with_top S) ≠ 0, by simpa [hf.eq_iff' (map_zero f)] using hx,
129134
simp [hx, this] },
130-
simp [← coe_mul]
135+
simp only [← coe_mul, map_coe, map_mul]
131136
end,
132137
.. f.to_zero_hom.with_top_map, .. f.to_monoid_hom.to_one_hom.with_top_map }
133138

@@ -163,7 +168,7 @@ begin
163168
induction c using with_top.rec_top_coe,
164169
{ by_cases ha : a = 0; simp [ha] },
165170
{ by_cases hc : c = 0, { simp [hc] },
166-
simp [mul_coe hc], cases a; cases b,
171+
simp only [mul_coe hc], cases a; cases b,
167172
repeat { refl <|> exact congr_arg some (add_mul _ _ _) } }
168173
end
169174

@@ -216,6 +221,15 @@ with_top.top_mul h
216221
@[simp] lemma bot_mul_bot : (⊥ * ⊥ : with_bot α) = ⊥ :=
217222
with_top.top_mul_top
218223

224+
theorem mul_eq_bot_iff {a b : with_bot α} : a * b = ⊥ ↔ a ≠ 0 ∧ b = ⊥ ∨ a = ⊥ ∧ b ≠ 0 :=
225+
with_top.mul_eq_top_iff
226+
227+
theorem bot_lt_mul' [has_lt α] {a b : with_bot α} (ha : ⊥ < a) (hb : ⊥ < b) : ⊥ < a * b :=
228+
@with_top.mul_lt_top' αᵒᵈ _ _ _ _ _ _ ha hb
229+
230+
theorem bot_lt_mul [has_lt α] {a b : with_bot α} (ha : a ≠ ⊥) (hb : b ≠ ⊥) : ⊥ < a * b :=
231+
@with_top.mul_lt_top αᵒᵈ _ _ _ _ _ _ ha hb
232+
219233
end has_mul
220234

221235
section mul_zero_class
@@ -228,16 +242,6 @@ with_top.coe_mul
228242
lemma mul_coe {b : α} (hb : b ≠ 0) {a : with_bot α} : a * b = a.bind (λa:α, ↑(a * b)) :=
229243
with_top.mul_coe hb
230244

231-
@[simp] lemma mul_eq_bot_iff {a b : with_bot α} : a * b = ⊥ ↔ (a ≠ 0 ∧ b = ⊥) ∨ (a = ⊥ ∧ b ≠ 0) :=
232-
with_top.mul_eq_top_iff
233-
234-
lemma bot_lt_mul [preorder α] {a b : with_bot α} (ha : ⊥ < a) (hb : ⊥ < b) : ⊥ < a * b :=
235-
begin
236-
lift a to α using ne_bot_of_gt ha,
237-
lift b to α using ne_bot_of_gt hb,
238-
simp only [← coe_mul, bot_lt_coe],
239-
end
240-
241245
end mul_zero_class
242246

243247
/-- `nontrivial α` is needed here as otherwise we have `1 * ⊥ = ⊥` but also `= 0 * ⊥ = 0`. -/

src/algebra/order/sub/with_top.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ instance : has_sub (with_top α) :=
3333
@[simp] lemma top_sub_coe {a : α} : (⊤ : with_top α) - a = ⊤ := rfl
3434
@[simp] lemma sub_top {a : with_top α} : a - ⊤ = 0 := by { cases a; refl }
3535

36+
@[simp] theorem sub_eq_top_iff : ∀ {a b : with_top α}, a - b = ⊤ ↔ a = ⊤ ∧ b ≠ ⊤
37+
| _ ⊤ := by simp
38+
| ⊤ (b : α) := by simp
39+
| (a : α) (b : α) := by simp only [← coe_sub, coe_ne_top, false_and]
40+
3641
lemma map_sub [has_sub β] [has_zero β] {f : α → β} (h : ∀ x y, f (x - y) = f x - f y)
3742
(h₀ : f 0 = 0) :
3843
∀ x y : with_top α, (x - y).map f = x.map f - y.map f

src/analysis/bounded_variation.lean

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -933,12 +933,7 @@ lemma lipschitz_on_with.comp_has_bounded_variation_on {f : E → F} {C : ℝ≥0
933933
(hf : lipschitz_on_with C f t) {g : α → E} {s : set α} (hg : maps_to g s t)
934934
(h : has_bounded_variation_on g s) :
935935
has_bounded_variation_on (f ∘ g) s :=
936-
begin
937-
dsimp [has_bounded_variation_on] at h,
938-
apply ne_of_lt,
939-
apply (hf.comp_evariation_on_le hg).trans_lt,
940-
simp [lt_top_iff_ne_top, h],
941-
end
936+
ne_top_of_le_ne_top (ennreal.mul_ne_top ennreal.coe_ne_top h) (hf.comp_evariation_on_le hg)
942937

943938
lemma lipschitz_on_with.comp_has_locally_bounded_variation_on {f : E → F} {C : ℝ≥0} {t : set E}
944939
(hf : lipschitz_on_with C f t) {g : α → E} {s : set α} (hg : maps_to g s t)

src/analysis/mean_inequalities_pow.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ begin
198198
have hp_not_nonpos : ¬ p ≤ 0, by simp [hp_pos],
199199
have hp_not_neg : ¬ p < 0, by simp [hp_nonneg],
200200
have h_top_iff_rpow_top : ∀ (i : ι) (hi : i ∈ s), w i * z i = ⊤ ↔ w i * (z i) ^ p = ⊤,
201-
by simp [hp_pos, hp_nonneg, hp_not_nonpos, hp_not_neg],
201+
by simp [ennreal.mul_eq_top, hp_pos, hp_nonneg, hp_not_nonpos, hp_not_neg],
202202
refine le_of_top_imp_top_of_to_nnreal_le _ _,
203203
{ -- first, prove `(∑ i in s, w i * z i) ^ p = ⊤ → ∑ i in s, (w i * z i ^ p) = ⊤`
204204
rw [rpow_eq_top_iff, sum_eq_top_iff, sum_eq_top_iff],

src/analysis/p_series.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ begin
122122
split; intro h,
123123
{ replace hf : ∀ m n, 1 < m → m ≤ n → (f n : ℝ≥0∞) ≤ f m :=
124124
λ m n hm hmn, ennreal.coe_le_coe.2 (hf (zero_lt_one.trans hm) hmn),
125-
simpa [h, ennreal.add_eq_top] using (ennreal.tsum_condensed_le hf) },
125+
simpa [h, ennreal.add_eq_top, ennreal.mul_eq_top] using ennreal.tsum_condensed_le hf },
126126
{ replace hf : ∀ m n, 0 < m → m ≤ n → (f n : ℝ≥0∞) ≤ f m :=
127127
λ m n hm hmn, ennreal.coe_le_coe.2 (hf hm hmn),
128128
simpa [h, ennreal.add_eq_top] using (ennreal.le_tsum_condensed hf) }

src/data/real/ennreal.lean

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -720,35 +720,38 @@ mul_right_mono.map_max
720720
lemma mul_max : a * max b c = max (a * b) (a * c) :=
721721
mul_left_mono.map_max
722722

723-
lemma mul_eq_mul_left : a ≠ 0a ≠ ∞ → (a * b = a * c ↔ b = c) :=
723+
theorem mul_left_strictMono (h0 : a ≠ 0) (hinf : a ≠ ∞) : strict_mono ((*) a) :=
724724
begin
725-
cases a; cases b; cases c;
726-
simp [none_eq_top, some_eq_coe, mul_top, top_mul, -coe_mul, coe_mul.symm,
727-
nnreal.mul_eq_mul_left] {contextual := tt},
725+
lift a to ℝ≥0 using hinf,
726+
rw [coe_ne_zero] at h0,
727+
intros x y h,
728+
contrapose! h,
729+
simpa only [← mul_assoc, ← coe_mul, inv_mul_cancel h0, coe_one, one_mul]
730+
using mul_le_mul' (le_refl ↑a⁻¹) h
728731
end
729732

733+
lemma mul_eq_mul_left (h₀ : a ≠ 0) (hinf : a ≠ ∞) : a * b = a * c ↔ b = c :=
734+
(mul_left_strictMono h₀ hinf).injective.eq_iff
735+
730736
lemma mul_eq_mul_right : c ≠ 0 → c ≠ ∞ → (a * c = b * c ↔ a = b) :=
731737
mul_comm c a ▸ mul_comm c b ▸ mul_eq_mul_left
732738

733-
lemma mul_le_mul_left : a ≠ 0 → a ≠ ∞ → (a * b ≤ a * c ↔ b ≤ c) :=
734-
begin
735-
cases a; cases b; cases c;
736-
simp [none_eq_top, some_eq_coe, mul_top, top_mul, -coe_mul, coe_mul.symm] {contextual := tt},
737-
assume h, exact mul_le_mul_left (pos_iff_ne_zero.2 h)
738-
end
739+
lemma mul_le_mul_left (h₀ : a ≠ 0) (hinf : a ≠ ∞) : a * b ≤ a * c ↔ b ≤ c :=
740+
(mul_left_strictMono h₀ hinf).le_iff_le
739741

740742
lemma mul_le_mul_right : c ≠ 0 → c ≠ ∞ → (a * c ≤ b * c ↔ a ≤ b) :=
741743
mul_comm c a ▸ mul_comm c b ▸ mul_le_mul_left
742744

743-
lemma mul_lt_mul_left : a ≠ 0a ≠ ∞ → (a * b < a * c ↔ b < c) :=
744-
λ h0 ht, by simp only [mul_le_mul_left h0 ht, lt_iff_le_not_le]
745+
lemma mul_lt_mul_left (h₀ : a ≠ 0) (hinf : a ≠ ∞) : a * b < a * c ↔ b < c :=
746+
(mul_left_strictMono h₀ hinf).lt_iff_lt
745747

746748
lemma mul_lt_mul_right : c ≠ 0 → c ≠ ∞ → (a * c < b * c ↔ a < b) :=
747749
mul_comm c a ▸ mul_comm c b ▸ mul_lt_mul_left
748750

749751
end mul
750752

751753
section cancel
754+
752755
/-- An element `a` is `add_le_cancellable` if `a + b ≤ a + c` implies `b ≤ c` for all `b` and `c`.
753756
This is true in `ℝ≥0∞` for all elements except `∞`. -/
754757
lemma add_le_cancellable_iff_ne {a : ℝ≥0∞} : add_le_cancellable a ↔ a ≠ ∞ :=

src/data/real/ereal.lean

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,8 @@ by cases x; cases y; refl
405405
exact nnreal.coe_pos.2 (bot_lt_iff_ne_bot.2 h) },
406406
simp only [coe_nnreal_eq_coe_real, coe_ennreal_top, (*), ereal.mul, A, if_true] }
407407
end
408-
| (x : ℝ≥0) (y : ℝ≥0) := by simp [←ennreal.coe_mul, coe_nnreal_eq_coe_real]
408+
| (x : ℝ≥0) (y : ℝ≥0) := by simp only [← ennreal.coe_mul, coe_nnreal_eq_coe_real,
409+
nnreal.coe_mul, ereal.coe_mul]
409410

410411
@[norm_cast] lemma coe_ennreal_nsmul (n : ℕ) (x : ℝ≥0∞) : (↑(n • x) : ereal) = n • x :=
411412
map_nsmul (⟨coe, coe_ennreal_zero, coe_ennreal_add⟩ : ℝ≥0∞ →+ ereal) _ _

src/measure_theory/function/l1_space.lean

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,8 @@ has_finite_integral_congr' $ h.fun_comp norm
147147

148148
lemma has_finite_integral_const_iff {c : β} :
149149
has_finite_integral (λ x : α, c) μ ↔ c = 0 ∨ μ univ < ∞ :=
150-
by simp [has_finite_integral, lintegral_const, lt_top_iff_ne_top, or_iff_not_imp_left]
150+
by simp [has_finite_integral, lintegral_const, lt_top_iff_ne_top, ennreal.mul_eq_top,
151+
or_iff_not_imp_left]
151152

152153
lemma has_finite_integral_const [is_finite_measure μ] (c : β) :
153154
has_finite_integral (λ x : α, c) μ :=

0 commit comments

Comments
 (0)