Skip to content

Commit f19297b

Browse files
feat(MeasureTheory): FTC and integration by parts for absolutely continuous functions (leanprover-community#29508)
Prove Fundamental Theorem of Calculus and integration by parts for absolutely continuous functions. Part of originally planned leanprover-community#29092. Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
1 parent 0c771f3 commit f19297b

8 files changed

Lines changed: 317 additions & 20 deletions

File tree

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5068,6 +5068,7 @@ public import Mathlib.MeasureTheory.Integral.Indicator
50685068
public import Mathlib.MeasureTheory.Integral.IntegrableOn
50695069
public import Mathlib.MeasureTheory.Integral.IntegralEqImproper
50705070
public import Mathlib.MeasureTheory.Integral.IntervalAverage
5071+
public import Mathlib.MeasureTheory.Integral.IntervalIntegral.AbsolutelyContinuousFun
50715072
public import Mathlib.MeasureTheory.Integral.IntervalIntegral.Basic
50725073
public import Mathlib.MeasureTheory.Integral.IntervalIntegral.ContDiff
50735074
public import Mathlib.MeasureTheory.Integral.IntervalIntegral.DerivIntegrable

Mathlib/Algebra/BigOperators/Group/Finset/Gaps.lean

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,29 +35,33 @@ variable {α β : Type*} [LinearOrder α] [CommGroup β]
3535
(F : Finset (α × α)) {k : ℕ} (h : F.card = k) {a b : α}
3636
(g : α → β)
3737

38+
@[to_additive]
39+
theorem Finset.prod_eq_prod_range_intervalGapsWithin (f : α → α → β) :
40+
∏ z ∈ F, f z.1 z.2 = ∏ i ∈ range k,
41+
f (F.intervalGapsWithin h a b i).2 (F.intervalGapsWithin h a b i.succ).1 := by
42+
set p := F.intervalGapsWithin h a b
43+
symm
44+
apply prod_bij (fun (i : ℕ) hi ↦ ((p i).2, (p i.succ).1))
45+
· exact fun i _ ↦ F.intervalGapsWithin_mapsTo h a b (x := i) (by grind)
46+
· intro i hi j hj hij
47+
rw [mem_range] at hi hj
48+
apply F.intervalGapsWithin_injOn h a b <;> grind
49+
· intro z hz
50+
obtain ⟨i, hi₁, hi₂⟩ := F.intervalGapsWithin_surjOn h a b hz
51+
exact ⟨i, by grind, hi₂⟩
52+
· simp
53+
3854
@[to_additive]
3955
theorem Finset.prod_intervalGapsWithin_mul_prod_eq_div :
4056
(∏ i ∈ Finset.range (k + 1),
4157
g (F.intervalGapsWithin h a b i).2 / g (F.intervalGapsWithin h a b i).1) *
4258
∏ z ∈ F, g z.2 / g z.1 = g b / g a := by
43-
set p := F.intervalGapsWithin h a b
44-
have : ∏ z ∈ F, g z.2 / g z.1 = ∏ i ∈ range k, g (p i.succ).1 / g (p i).2 := by
45-
symm
46-
apply prod_bij (fun (i : ℕ) hi ↦ ((p i).2, (p i.succ).1))
47-
· exact fun i _ ↦ F.intervalGapsWithin_mapsTo h a b (x := i) (by grind)
48-
· intro i hi j hj hij
49-
rw [mem_range] at hi hj
50-
apply F.intervalGapsWithin_injOn h a b <;> grind
51-
· intro z hz
52-
obtain ⟨i, hi₁, hi₂⟩ := F.intervalGapsWithin_surjOn h a b hz
53-
exact ⟨i, by grind, hi₂⟩
54-
· simp
55-
rw [this, mul_comm,
59+
rw [F.prod_eq_prod_range_intervalGapsWithin h (fun x y ↦ g y / g x), mul_comm,
5660
prod_range_succ, ← mul_assoc,
5761
← prod_mul_distrib,
5862
prod_congr rfl (fun _ _ ↦ div_mul_div_cancel _ _ _),
5963
prod_range_div (fun i ↦ g (F.intervalGapsWithin h a b i).1)]
60-
simp [p]
64+
simp
6165

6266
@[to_additive]
6367
theorem Finset.prod_intervalGapsWithin_eq_div_div_prod :

Mathlib/Analysis/Analytic/OfScalars.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ theorem ofScalars_radius_eq_top_of_tendsto (hc : ∀ᶠ n in atTop, c n ≠ 0)
259259
refine radius_eq_top_of_summable_norm _ fun r' ↦ ?_
260260
by_cases hrz : r' = 0
261261
· apply Summable.comp_nat_add (k := 1)
262-
simpa [hrz] using (summable_const_iff 0).mpr rfl
262+
simp [hrz]
263263
· refine Summable.of_norm_bounded_eventually (g := fun n ↦ ‖‖c n‖ * r' ^ n‖) ?_ ?_
264264
· apply summable_of_ratio_test_tendsto_lt_one zero_lt_one (hc.mp (Eventually.of_forall ?_))
265265
· simp only [norm_norm]

Mathlib/Analysis/Real/OfDigits.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ theorem summable_ofDigitsTerm {b : ℕ} {digits : ℕ → Fin b} :
5656
Summable (ofDigitsTerm digits) := by
5757
refine Summable.of_nonneg_of_le (fun _ ↦ ofDigitsTerm_nonneg) (fun _ ↦ ofDigitsTerm_le) ?_
5858
obtain rfl | hb := (Nat.one_le_of_lt (b_pos digits)).eq_or_lt
59-
· simpa using summable_zero
59+
· simp
6060
simp_rw [pow_succ', mul_inv, ← inv_pow, ← mul_assoc]
6161
refine Summable.mul_left _ (summable_geometric_of_lt_one (by positivity) ?_)
6262
simp [inv_lt_one_iff₀, hb]

Mathlib/MeasureTheory/Covering/Vitali.lean

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,33 @@ theorem exists_disjoint_covering_ae
386386
_ ≤ C * (ε / C) := by gcongr
387387
_ ≤ ε := ENNReal.mul_div_le
388388

389+
/-- The measurable **Vitali covering theorem**, filter version.
390+
391+
Assume one is given a family `t` of closed sets with nonempty interior, such that each `a ∈ t` is
392+
included in a ball `B (x, r)` and covers a definite proportion of the ball `B (x, 3 r)` for a given
393+
measure `μ` (think of the situation where `μ` is a doubling measure and `t` is a family of balls).
394+
Consider a (possibly non-measurable) set `s` at which the family is fine, i.e., every point of `s`
395+
belongs to arbitrarily small elements of `t`. Then one can extract from `t` a disjoint subfamily
396+
that covers almost all `s`.
397+
398+
For more flexibility, we give a statement with a parameterized family of sets.
399+
-/
400+
theorem exists_disjoint_covering_ae'
401+
[PseudoMetricSpace α] [MeasurableSpace α] [OpensMeasurableSpace α]
402+
[SecondCountableTopology α] (μ : Measure α) [IsLocallyFiniteMeasure μ] (s : Set α) (t : Set ι)
403+
(C : ℝ≥0) (r : ι → ℝ) (c : ι → α) (B : ι → Set α) (hB : ∀ a ∈ t, B a ⊆ closedBall (c a) (r a))
404+
(μB : ∀ a ∈ t, μ (closedBall (c a) (3 * r a)) ≤ C * μ (B a))
405+
(ht : ∀ a ∈ t, (interior (B a)).Nonempty) (h't : ∀ a ∈ t, IsClosed (B a))
406+
(hf : ∀ x ∈ s, ∃ᶠ ε in 𝓝[>] 0, ∃ a ∈ t, r a = ε ∧ c a = x) :
407+
∃ u ⊆ t, u.Countable ∧ u.PairwiseDisjoint B ∧ μ (s \ ⋃ a ∈ u, B a) = 0 := by
408+
suffices ∀ x ∈ s, ∀ ε > (0 : ℝ), ∃ a ∈ t, r a ≤ ε ∧ c a = x from
409+
exists_disjoint_covering_ae μ s t C r c B hB μB ht h't this
410+
intro x hx ε hε
411+
specialize hf x hx
412+
rw [frequently_nhdsWithin_iff, frequently_nhds_iff] at hf
413+
obtain ⟨_, _, ⟨a, ha₁, ha₂, ha₃⟩, _⟩ := hf (Ioo (-ε) ε) (by grind) isOpen_Ioo
414+
exact ⟨a, ha₁, by grind, ha₃⟩
415+
389416
/-- Assume that around every point there are arbitrarily small scales at which the measure is
390417
doubling. Then the set of closed sets `a` with nonempty interior contained in `closedBall x r` and
391418
covering a fixed proportion `1/C` of the ball `closedBall x (3 * r)` forms a Vitali family.

0 commit comments

Comments
 (0)