Skip to content

Commit dce3794

Browse files
teorthxroblot
authored andcommitted
chore(Analysis/SumIntegralComparisons): golf proofs (leanprover-community#40655)
Golfed the existing code in `SumIntegralComparisons.lean`. I had also added some additional API lemmas, but this is now done in leanprover-community#40588 and I have removed the redundant additions to simplify the PR. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) Co-authored-by: Terence Tao <tao@math.ucla.edu>
1 parent a2beb1b commit dce3794

1 file changed

Lines changed: 88 additions & 204 deletions

File tree

Mathlib/Analysis/SumIntegralComparisons.lean

Lines changed: 88 additions & 204 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ At the moment it contains several lemmas in this direction, for antitone or mono
2525
## Main Results
2626
2727
* `AntitoneOn.integral_le_sum`: The integral of an antitone function is at most the sum of its
28-
values at integer steps aligning with the left-hand side of the interval
28+
values at integer steps aligning with the left-hand side of the interval.
2929
* `AntitoneOn.sum_le_integral`: The sum of an antitone function along integer steps aligning with
3030
the right-hand side of the interval is at most the integral of the function along that interval
3131
* `MonotoneOn.integral_le_sum`: The integral of a monotone function is at most the sum of its
32-
values at integer steps aligning with the right-hand side of the interval
32+
values at integer steps aligning with the right-hand side of the interval.
3333
* `MonotoneOn.sum_le_integral`: The sum of a monotone function along integer steps aligning with
3434
the left-hand side of the interval is at most the integral of the function along that interval
3535
* `sum_mul_Ico_le_integral_of_monotone_antitone`: the sum of `f i * g i` on an interval is bounded
@@ -44,248 +44,132 @@ analysis, comparison, asymptotics
4444

4545
public section
4646

47-
48-
open Set MeasureTheory MeasureSpace
47+
open Set MeasureTheory MeasureSpace intervalIntegral
4948

5049
variable {x₀ : ℝ} {a b : ℕ} {f g : ℝ → ℝ}
5150

52-
lemma sum_Ico_le_integral_of_le
53-
(hab : a ≤ b) (h : ∀ i ∈ Ico a b, ∀ x ∈ Ico (i : ℝ) (i + 1 : ℕ), f i ≤ g x)
54-
(hg : IntegrableOn g (Set.Ico a b)) :
55-
∑ i ∈ Finset.Ico a b, f i ≤ ∫ x in a..b, g x := by
56-
have A i (hi : i ∈ Finset.Ico a b) : IntervalIntegrable g volume i (i + 1 : ℕ) := by
51+
lemma sum_Ico_le_integral_of_le (hab : a ≤ b)
52+
(h : ∀ i ∈ Ico a b, ∀ x ∈ Ico (i : ℝ) ↑(i + 1), f i ≤ g x)
53+
(hg : IntegrableOn g (Ico a b)) : ∑ i ∈ .Ico a b, f i ≤ ∫ x in a..b, g x := by
54+
have A i (hi : i ∈ Finset.Ico a b) : IntervalIntegrable g volume i ↑(i + 1) := by
5755
rw [intervalIntegrable_iff_integrableOn_Ico_of_le (by simp)]
58-
apply hg.mono _ le_rfl
59-
rintro x ⟨hx, h'x⟩
60-
simp only [Finset.mem_Ico, mem_Ico] at hi ⊢
61-
exact ⟨le_trans (mod_cast hi.1) hx, h'x.trans_le (mod_cast hi.2)⟩
56+
simp only [Finset.mem_Ico, ← Nat.add_one_le_iff] at hi
57+
rify at hi
58+
exact hg.mono (by grind) le_rfl
6259
calc
63-
∑ i ∈ Finset.Ico a b, f i
64-
_ = ∑ i ∈ Finset.Ico a b, (∫ x in (i : ℝ)..(i + 1 : ℕ), f i) := by simp
65-
_ ≤ ∑ i ∈ Finset.Ico a b, (∫ x in (i : ℝ)..(i + 1 : ℕ), g x) := by
60+
_ = ∑ i ∈ .Ico a b, (∫ x in (i : ℝ)..↑(i + 1), f i) := by simp
61+
_ ≤ ∑ i ∈ .Ico a b, (∫ x in (i : ℝ)..↑(i + 1), g x) := by
6662
gcongr with i hi
67-
apply intervalIntegral.integral_mono_on_of_le_Ioo (by simp) (by simp) (A _ hi) (fun x hx ↦ ?_)
63+
apply integral_mono_on_of_le_Ioo (by simp) (by simp) (A _ hi) (fun x hx ↦ ?_)
6864
exact h _ (by simpa using hi) _ (Ioo_subset_Ico_self hx)
69-
_ = ∫ x in a..b, g x := by
70-
rw [intervalIntegral.sum_integral_adjacent_intervals_Ico (a := fun i ↦ i) hab]
71-
intro i hi
72-
exact A _ (by simpa using hi)
65+
_ = _ := by rw [sum_integral_adjacent_intervals_Ico (a := (↑·)) hab]; grind
66+
67+
lemma integral_le_sum_Ico_of_le (hab : a ≤ b)
68+
(h : ∀ i ∈ Ico a b, ∀ x ∈ Ico (i : ℝ) ↑(i + 1), g x ≤ f i)
69+
(hg : IntegrableOn g (Ico a b)) : ∫ x in a..b, g x ≤ ∑ i ∈ .Ico a b, f i := by
70+
convert! neg_le_neg (sum_Ico_le_integral_of_le (f := -f) (g := -g) hab
71+
(fun i hi x hx ↦ neg_le_neg (h i hi x hx)) hg.neg) <;> simp
7372

74-
lemma integral_le_sum_Ico_of_le
75-
(hab : a ≤ b) (h : ∀ i ∈ Ico a b, ∀ x ∈ Ico (i : ℝ) (i + 1 : ℕ), g x ≤ f i)
76-
(hg : IntegrableOn g (Set.Ico a b)) :
77-
∫ x in a..b, g x ≤ ∑ i ∈ Finset.Ico a b, f i := by
78-
convert!
79-
neg_le_neg
80-
(sum_Ico_le_integral_of_le (f := -f) (g := -g) hab (fun i hi x hx ↦ neg_le_neg (h i hi x hx))
81-
hg.neg) <;> simp
73+
private theorem AntitoneOn.intervalIntegrable_subset (hf : AntitoneOn f (Icc x₀ (x₀ + a)))
74+
(k : ℕ) (hk : k + 1 ≤ a) : IntervalIntegrable f volume (x₀ + k) (x₀ + ↑(k + 1)) := by
75+
refine (hf.mono ?_).intervalIntegrable
76+
rw [uIcc_of_le (by simp)]
77+
apply Icc_subset_Icc <;> simp [-Nat.cast_add, hk]
8278

8379
theorem AntitoneOn.integral_le_sum (hf : AntitoneOn f (Icc x₀ (x₀ + a))) :
84-
(∫ x in x₀..x₀ + a, f x) ≤ ∑ i ∈ Finset.range a, f (x₀ + i) := by
85-
have hint : ∀ k : ℕ, k < a → IntervalIntegrable f volume (x₀ + k) (x₀ + (k + 1 : ℕ)) := by
86-
intro k hk
87-
refine (hf.mono ?_).intervalIntegrable
88-
rw [uIcc_of_le]
89-
· apply Icc_subset_Icc
90-
· simp only [le_add_iff_nonneg_right, Nat.cast_nonneg]
91-
· simp only [add_le_add_iff_left, Nat.cast_le, Nat.succ_le_of_lt hk]
92-
· simp only [add_le_add_iff_left, Nat.cast_le, Nat.le_succ]
93-
calc
94-
∫ x in x₀..x₀ + a, f x = ∑ i ∈ Finset.range a, ∫ x in x₀ + i..x₀ + (i + 1 : ℕ), f x := by
95-
convert! (intervalIntegral.sum_integral_adjacent_intervals hint).symm
96-
simp only [Nat.cast_zero, add_zero]
97-
_ ≤ ∑ i ∈ Finset.range a, ∫ _ in x₀ + i..x₀ + (i + 1 : ℕ), f (x₀ + i) := by
98-
gcongr with i hi
99-
have ia : i < a := Finset.mem_range.1 hi
100-
refine intervalIntegral.integral_mono_on (by simp) (hint _ ia) (by simp) fun x hx => ?_
101-
apply hf _ _ hx.1
102-
· simp only [ia.le, mem_Icc, le_add_iff_nonneg_right, Nat.cast_nonneg, add_le_add_iff_left,
103-
Nat.cast_le, and_self_iff]
104-
· refine mem_Icc.2 ⟨le_trans (by simp) hx.1, le_trans hx.2 ?_⟩
105-
simp only [add_le_add_iff_left, Nat.cast_le, Nat.succ_le_of_lt ia]
106-
_ = ∑ i ∈ Finset.range a, f (x₀ + i) := by simp
80+
∫ x in x₀..x₀ + a, f x ≤ ∑ i ∈ .range a, f (x₀ + i) := calc
81+
_ = ∑ i ∈ .range a, ∫ x in x₀ + i..x₀ + ↑(i + 1), f x := by
82+
convert! (sum_integral_adjacent_intervals hf.intervalIntegrable_subset).symm
83+
simp
84+
_ ≤ ∑ i ∈ .range a, ∫ _ in x₀ + i..x₀ + ↑(i + 1), f (x₀ + i) := by
85+
gcongr with i hi
86+
rw [Finset.mem_range, ← Nat.add_one_le_iff] at hi
87+
have := hf.intervalIntegrable_subset _ hi
88+
rify at hi this ⊢
89+
refine integral_mono_on (by simp) this (by simp) fun _ _ ↦ by apply hf <;> grind
90+
_ = _ := by simp
10791

10892
theorem AntitoneOn.integral_le_sum_Ico (hab : a ≤ b) (hf : AntitoneOn f (Set.Icc a b)) :
109-
(∫ x in a..b, f x) ≤ ∑ x ∈ Finset.Ico a b, f x := by
110-
rw [(Nat.sub_add_cancel hab).symm, Nat.cast_add]
111-
conv =>
112-
congr
113-
congr
114-
· skip
115-
· skip
116-
rw [add_comm]
117-
· skip
118-
· skip
119-
congr
120-
congr
121-
rw [← zero_add a]
93+
∫ x in a..b, f x ≤ ∑ x ∈ .Ico a b, f x := by
94+
suffices ∫ x in a..a + ↑(b - a), f x ≤ ∑ x ∈ .Ico (0 + a) (b - a + a), f x by simp_all
12295
rw [← Finset.sum_Ico_add, Nat.Ico_zero_eq_range]
123-
conv =>
124-
rhs
125-
congr
126-
· skip
127-
ext
128-
rw [Nat.cast_add]
129-
apply AntitoneOn.integral_le_sum
130-
simp only [hf, hab, Nat.cast_sub, add_sub_cancel]
96+
suffices ∫ x in a..a + ↑(b - a), f x ≤ ∑ x ∈ .range (b - a), f (a + x) by simp_all
97+
exact AntitoneOn.integral_le_sum (by simp only [hf, hab, Nat.cast_sub, add_sub_cancel])
13198

13299
theorem AntitoneOn.sum_le_integral (hf : AntitoneOn f (Icc x₀ (x₀ + a))) :
133-
(∑ i ∈ Finset.range a, f (x₀ + (i + 1 : ℕ))) ≤ ∫ x in x₀..x₀ + a, f x := by
134-
have hint : ∀ k : ℕ, k < a → IntervalIntegrable f volume (x₀ + k) (x₀ + (k + 1 : ℕ)) := by
135-
intro k hk
136-
refine (hf.mono ?_).intervalIntegrable
137-
rw [uIcc_of_le]
138-
· apply Icc_subset_Icc
139-
· simp only [le_add_iff_nonneg_right, Nat.cast_nonneg]
140-
· simp only [add_le_add_iff_left, Nat.cast_le, Nat.succ_le_of_lt hk]
141-
· simp only [add_le_add_iff_left, Nat.cast_le, Nat.le_succ]
142-
calc
143-
(∑ i ∈ Finset.range a, f (x₀ + (i + 1 : ℕ))) =
144-
∑ i ∈ Finset.range a, ∫ _ in x₀ + i..x₀ + (i + 1 : ℕ), f (x₀ + (i + 1 : ℕ)) := by simp
145-
_ ≤ ∑ i ∈ Finset.range a, ∫ x in x₀ + i..x₀ + (i + 1 : ℕ), f x := by
146-
apply Finset.sum_le_sum fun i hi => ?_
147-
have ia : i + 1 ≤ a := Finset.mem_range.1 hi
148-
refine intervalIntegral.integral_mono_on (by simp) (by simp) (hint _ ia) fun x hx => ?_
149-
apply hf _ _ hx.2
150-
· refine mem_Icc.2 ⟨le_trans (le_add_of_nonneg_right (Nat.cast_nonneg _)) hx.1,
151-
le_trans hx.2 ?_⟩
152-
simp only [Nat.cast_le, add_le_add_iff_left, ia]
153-
· refine mem_Icc.2 ⟨le_add_of_nonneg_right (Nat.cast_nonneg _), ?_⟩
154-
simp only [add_le_add_iff_left, Nat.cast_le, ia]
155-
_ = ∫ x in x₀..x₀ + a, f x := by
156-
convert! intervalIntegral.sum_integral_adjacent_intervals hint
157-
simp only [Nat.cast_zero, add_zero]
158-
159-
theorem AntitoneOn.sum_le_integral_Ico (hab : a ≤ b) (hf : AntitoneOn f (Set.Icc a b)) :
160-
(∑ i ∈ Finset.Ico a b, f (i + 1 : ℕ)) ≤ ∫ x in a..b, f x := by
161-
rw [(Nat.sub_add_cancel hab).symm, Nat.cast_add]
162-
conv =>
163-
congr
164-
congr
165-
congr
166-
rw [← zero_add a]
167-
· skip
168-
· skip
169-
· skip
170-
rw [add_comm]
171-
rw [← Finset.sum_Ico_add, Nat.Ico_zero_eq_range]
172-
conv =>
173-
lhs
174-
congr
175-
congr
176-
· skip
177-
ext
178-
rw [add_assoc, Nat.cast_add]
179-
apply AntitoneOn.sum_le_integral
180-
simp only [hf, hab, Nat.cast_sub, add_sub_cancel]
100+
∑ i ∈ .range a, f (x₀ + ↑(i + 1)) ≤ ∫ x in x₀..x₀ + a, f x := calc
101+
_ = ∑ i ∈ .range a, ∫ _ in x₀ + i..x₀ + ↑(i + 1), f (x₀ + ↑(i + 1)) := by simp
102+
_ ≤ ∑ i ∈ .range a, ∫ x in x₀ + i..x₀ + ↑(i + 1), f x := by
103+
gcongr with i hi
104+
rw [Finset.mem_range, ← Nat.add_one_le_iff] at hi
105+
have := hf.intervalIntegrable_subset _ hi
106+
rify at hi this ⊢
107+
exact integral_mono_on (by simp) (by simp) this fun _ _ ↦ by apply hf <;> grind
108+
_ = _ := by
109+
convert! sum_integral_adjacent_intervals hf.intervalIntegrable_subset
110+
simp [-Nat.cast_add]
111+
112+
theorem AntitoneOn.sum_le_integral_Ico (hab : a ≤ b) (hf : AntitoneOn f (Icc a b)) :
113+
∑ i ∈ .Ico a b, f ↑(i + 1) ≤ ∫ x in a..b, f x := by
114+
suffices ∑ i ∈ .Ico (0 + a) (b - a + a), f ↑(i + 1) ≤ ∫ x in a..a + ↑(b - a), f x by simp_all
115+
simp_rw [← Finset.sum_Ico_add, Nat.Ico_zero_eq_range, add_assoc]
116+
suffices ∑ x ∈ .range (b - a), f (a + ↑(x + 1)) ≤ ∫ x in a..a + ↑(b - a), f x by simp_all
117+
exact AntitoneOn.sum_le_integral (by simp [hf, hab])
181118

182119
theorem MonotoneOn.sum_le_integral (hf : MonotoneOn f (Icc x₀ (x₀ + a))) :
183-
(∑ i ∈ Finset.range a, f (x₀ + i)) ≤ ∫ x in x₀..x₀ + a, f x := by
120+
∑ i ∈ .range a, f (x₀ + i) ≤ ∫ x in x₀..x₀ + a, f x := by
184121
rw [← neg_le_neg_iff, ← Finset.sum_neg_distrib, ← intervalIntegral.integral_neg]
185122
exact hf.neg.integral_le_sum
186123

187124
theorem MonotoneOn.sum_le_integral_Ico (hab : a ≤ b) (hf : MonotoneOn f (Set.Icc a b)) :
188-
∑ x ∈ Finset.Ico a b, f x ≤ ∫ x in a..b, f x := by
125+
∑ x ∈ .Ico a b, f x ≤ ∫ x in a..b, f x := by
189126
rw [← neg_le_neg_iff, ← Finset.sum_neg_distrib, ← intervalIntegral.integral_neg]
190127
exact hf.neg.integral_le_sum_Ico hab
191128

192129
theorem MonotoneOn.integral_le_sum (hf : MonotoneOn f (Icc x₀ (x₀ + a))) :
193-
(∫ x in x₀..x₀ + a, f x) ≤ ∑ i ∈ Finset.range a, f (x₀ + (i + 1 : ℕ)) := by
130+
∫ x in x₀..x₀ + a, f x ≤ ∑ i ∈ .range a, f (x₀ + (i + 1)) := by
194131
rw [← neg_le_neg_iff, ← Finset.sum_neg_distrib, ← intervalIntegral.integral_neg]
195132
exact hf.neg.sum_le_integral
196133

197134
theorem MonotoneOn.integral_le_sum_Ico (hab : a ≤ b) (hf : MonotoneOn f (Set.Icc a b)) :
198-
(∫ x in a..b, f x) ≤ ∑ i ∈ Finset.Ico a b, f (i + 1 : ℕ) := by
135+
∫ x in a..b, f x ≤ ∑ i ∈ .Ico a b, f (i + 1) := by
199136
rw [← neg_le_neg_iff, ← Finset.sum_neg_distrib, ← intervalIntegral.integral_neg]
200137
exact hf.neg.sum_le_integral_Ico hab
201138

202139
lemma sum_mul_Ico_le_integral_of_monotone_antitone
203140
(hab : a ≤ b) (hf : MonotoneOn f (Icc a b)) (hg : AntitoneOn g (Icc (a - 1) (b - 1)))
204141
(fpos : 0 ≤ f a) (gpos : 0 ≤ g (b - 1)) :
205-
∑ i ∈ Finset.Ico a b, f i * g i ≤ ∫ x in a..b, f x * g (x - 1) := by
142+
∑ i ∈ .Ico a b, f i * g i ≤ ∫ x in a..b, f x * g (x - 1) := by
206143
apply sum_Ico_le_integral_of_le (f := fun x ↦ f x * g x) hab
207144
· intro i hi x hx
208-
simp only [Nat.cast_add, Nat.cast_one, mem_Ico] at hx hi
209-
have I0 : (i : ℝ) ≤ b - 1 := by
210-
simp only [le_sub_iff_add_le]
211-
norm_cast
212-
lia
213-
have I1 : (i : ℝ) ∈ Icc (a - 1 : ℝ) (b - 1) := by
214-
simp only [mem_Icc, tsub_le_iff_right]
215-
exact ⟨by norm_cast; lia, I0⟩
216-
have I2 : x ∈ Icc (a : ℝ) b := by
217-
refine ⟨le_trans (mod_cast hi.1) hx.1, hx.2.le.trans ?_⟩
218-
norm_cast
219-
lia
220-
apply mul_le_mul
221-
· apply hf
222-
· simp only [mem_Icc, Nat.cast_le]
223-
exact ⟨hi.1, hi.2.le⟩
224-
· exact I2
225-
· exact hx.1
226-
· apply hg
227-
· simp only [mem_Icc, tsub_le_iff_right, sub_add_cancel]
228-
refine ⟨le_trans (mod_cast hi.1) hx.1, hx.2.le.trans ?_⟩
229-
norm_cast
230-
lia
231-
· exact I1
232-
· simpa [sub_le_iff_le_add] using hx.2.le
233-
· apply gpos.trans
234-
apply hg I1 (by simp [hab]) I0
235-
· apply fpos.trans
236-
apply hf (by simp [hab]) I2
237-
exact le_trans (mod_cast hi.1) hx.1
238-
· apply Integrable.mono_measure _ (Measure.restrict_mono_set _ Ico_subset_Icc_self)
239-
apply Integrable.mul_of_top_left
240-
· exact hf.integrableOn_isCompact isCompact_Icc
241-
· apply AntitoneOn.memLp_isCompact isCompact_Icc
242-
intro x hx y hy hxy
243-
apply hg
244-
· simpa using hx
245-
· simpa using hy
246-
· simpa using hxy
145+
simp only [Nat.cast_add, Nat.cast_one, mem_Ico, ← Nat.add_one_le_iff] at hx hi
146+
rify at hi
147+
gcongr
148+
· grw [gpos]; apply hg <;> grind
149+
· grw [fpos]; apply hf <;> grind
150+
· apply hf <;> grind
151+
· apply hg <;> grind
152+
· apply Integrable.mono_measure _ (volume.restrict_mono_set Ico_subset_Icc_self)
153+
apply (hf.integrableOn_isCompact isCompact_Icc).mul_of_top_left
154+
apply AntitoneOn.memLp_isCompact isCompact_Icc
155+
intro _ _ _ _ _
156+
apply hg <;> grind
247157

248158
lemma integral_le_sum_mul_Ico_of_antitone_monotone
249159
(hab : a ≤ b) (hf : AntitoneOn f (Icc a b)) (hg : MonotoneOn g (Icc (a - 1) (b - 1)))
250160
(fpos : 0 ≤ f b) (gpos : 0 ≤ g (a - 1)) :
251-
∫ x in a..b, f x * g (x - 1) ≤ ∑ i ∈ Finset.Ico a b, f i * g i := by
161+
∫ x in a..b, f x * g (x - 1) ≤ ∑ i ∈ .Ico a b, f i * g i := by
252162
apply integral_le_sum_Ico_of_le (f := fun x ↦ f x * g x) hab
253163
· intro i hi x hx
254-
simp only [Nat.cast_add, Nat.cast_one, mem_Ico] at hx hi
255-
have I0 : (i : ℝ) ≤ b - 1 := by
256-
simp only [le_sub_iff_add_le]
257-
norm_cast
258-
lia
259-
have I1 : (i : ℝ) ∈ Icc (a - 1 : ℝ) (b - 1) := by
260-
simp only [mem_Icc, tsub_le_iff_right]
261-
exact ⟨by norm_cast; lia, I0⟩
262-
have I2 : x ∈ Icc (a : ℝ) b := by
263-
refine ⟨le_trans (mod_cast hi.1) hx.1, hx.2.le.trans ?_⟩
264-
norm_cast
265-
lia
266-
apply mul_le_mul
267-
· apply hf
268-
· simp only [mem_Icc, Nat.cast_le]
269-
exact ⟨hi.1, hi.2.le⟩
270-
· exact I2
271-
· exact hx.1
272-
· apply hg
273-
· simp only [mem_Icc, tsub_le_iff_right, sub_add_cancel]
274-
refine ⟨le_trans (mod_cast hi.1) hx.1, hx.2.le.trans ?_⟩
275-
norm_cast
276-
lia
277-
· exact I1
278-
· simpa [sub_le_iff_le_add] using hx.2.le
279-
· apply gpos.trans
280-
apply hg (by simp [hab]) (by simpa using I2) (by simpa using I2.1)
281-
· apply fpos.trans
282-
apply hf ⟨mod_cast hi.1, mod_cast hi.2.le⟩ (by simpa using hab) (mod_cast hi.2.le)
283-
· apply Integrable.mono_measure _ (Measure.restrict_mono_set _ Ico_subset_Icc_self)
284-
apply Integrable.mul_of_top_left
285-
· exact hf.integrableOn_isCompact isCompact_Icc
286-
· apply MonotoneOn.memLp_isCompact isCompact_Icc
287-
intro x hx y hy hxy
288-
apply hg
289-
· simpa using hx
290-
· simpa using hy
291-
· simpa using hxy
164+
simp only [Nat.cast_add, Nat.cast_one, mem_Ico, ← Nat.add_one_le_iff] at hx hi
165+
rify at hi
166+
gcongr
167+
· grw [gpos]; apply hg <;> grind
168+
· grw [fpos]; apply hf <;> grind
169+
· apply hf <;> grind
170+
· apply hg <;> grind
171+
· apply Integrable.mono_measure _ (volume.restrict_mono_set Ico_subset_Icc_self)
172+
apply (hf.integrableOn_isCompact isCompact_Icc).mul_of_top_left
173+
apply MonotoneOn.memLp_isCompact isCompact_Icc
174+
intro _ _ _ _ _
175+
apply hg <;> grind

0 commit comments

Comments
 (0)