Skip to content

Commit 5b548fc

Browse files
committed
refactor(MeasureTheory/Integral/IntervalAverage): prove interval average theorems from set average; rename of_noAtoms
1 parent 712f1da commit 5b548fc

1 file changed

Lines changed: 35 additions & 56 deletions

File tree

Mathlib/MeasureTheory/Integral/IntervalAverage.lean

Lines changed: 35 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@ Authors: Yury Kudryashov, Louis (Yiyang) Liu
55
-/
66
module
77

8+
public import Mathlib.MeasureTheory.Integral.Average.MeanValue
89
public import Mathlib.MeasureTheory.Integral.IntervalIntegral.Basic
9-
public import Mathlib.MeasureTheory.Integral.Average
10-
public import Mathlib.Topology.Order.IntermediateValue
1110

1211
/-!
1312
# Integral average over an interval
@@ -18,9 +17,12 @@ formulas for this average:
1817
1918
* `interval_average_eq`: `⨍ x in a..b, f x = (b - a)⁻¹ • ∫ x in a..b, f x`;
2019
* `interval_average_eq_div`: `⨍ x in a..b, f x = (∫ x in a..b, f x) / (b - a)`;
21-
* `exists_eq_interval_average_of_measure`: `∃ c, f c = ⨍ x in (uIoc a b), f x ∂μ`.
22-
* `exists_eq_interval_average_of_NoAtoms`: `∃ c, f c = ⨍ x in (uIoc a b), f x ∂μ`.
23-
* `exists_eq_interval_average`: `∃ c, f c = ⨍ (x : ℝ) in a..b, f x`.
20+
* `exists_eq_interval_average_of_measure`:
21+
`∃ c ∈ uIcc a b, f c = ⨍ x in (Ι a b), f x ∂μ`.
22+
* `exists_eq_interval_average_of_noAtoms`:
23+
`∃ c ∈ uIoo a b, f c = ⨍ x in (Ι a b), f x ∂μ`.
24+
* `exists_eq_interval_average`:
25+
`∃ c ∈ uIoo a b, f c = ⨍ (x : ℝ) in a..b, f x`.
2426
2527
We also prove that `⨍ x in a..b, f x = ⨍ x in b..a, f x`, see `interval_average_symm`.
2628
@@ -33,7 +35,7 @@ We also prove that `⨍ x in a..b, f x = ⨍ x in b..a, f x`, see `interval_aver
3335
@[expose] public section
3436

3537

36-
open MeasureTheory Set TopologicalSpace
38+
open MeasureTheory Set
3739

3840
open scoped Interval
3941

@@ -42,7 +44,7 @@ variable {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E]
4244
/-- `⨍ x in a..b, f x` is the average of `f` over the interval `Ι a b` w.r.t. the Lebesgue
4345
measure. -/
4446
notation3 "⨍ "(...)" in "a".."b",
45-
"r:60:(scoped f => average (Measure.restrict volume (uIoc a b)) f) => r
47+
"r:60:(scoped f => average (Measure.restrict volume (Ι a b)) f) => r
4648

4749
theorem interval_average_symm (f : ℝ → E) (a b : ℝ) : (⨍ x in a..b, f x) = ⨍ x in b..a, f x := by
4850
rw [setAverage_eq, setAverage_eq, uIoc_comm]
@@ -66,15 +68,16 @@ theorem intervalAverage_congr_codiscreteWithin {a b : ℝ} {f₁ f₂ : ℝ →
6668
rw [interval_average_eq, intervalIntegral.integral_congr_codiscreteWithin hf,
6769
← interval_average_eq]
6870

71+
variable {f : ℝ → ℝ} {a b : ℝ} {μ : Measure ℝ}
72+
6973
/-- If `f : ℝ → ℝ` is continuous on `uIcc a b`, the interval has finite and nonzero `μ`-measure,
7074
then there exists `c ∈ uIcc a b` such that
71-
`f c = ⨍ x in (uIoc a b), f x ∂μ`. -/
75+
`f c = ⨍ x in (Ι a b), f x ∂μ`. -/
7276
theorem exists_eq_interval_average_of_measure
73-
{f : ℝ → ℝ} {a b : ℝ} {μ : Measure ℝ}
7477
(hf : ContinuousOn f (uIcc a b))
75-
(hμfin : μ (uIoc a b) ≠ ⊤)
76-
(hμ0 : μ (uIoc a b) ≠ 0) :
77-
∃ c ∈ uIcc a b, f c = ⨍ x in (uIoc a b), f x ∂μ := by
78+
(hμfin : μ (Ι a b) ≠ ⊤)
79+
(hμ0 : μ (Ι a b) ≠ 0) :
80+
∃ c ∈ uIcc a b, f c = ⨍ x in (Ι a b), f x ∂μ := by
7881
wlog h : a ≤ b generalizing a b
7982
· simp at h
8083
specialize this
@@ -83,11 +86,8 @@ theorem exists_eq_interval_average_of_measure
8386
(h.le)
8487
rcases this with ⟨c, hc, hEq⟩
8588
refine ⟨c, by rwa [uIcc_comm], by rwa [uIoc_comm]⟩
86-
let ave := average (μ.restrict (uIoc a b)) f
87-
let S₁ := {x | x ∈ uIoc a b ∧ f x ≤ ave}
88-
let S₂ := {x | x ∈ uIoc a b ∧ ave ≤ f x}
89-
have hint : IntegrableOn f (uIoc a b) μ := by
90-
have hsubset : uIoc a b ⊆ uIcc a b := uIoc_subset_uIcc
89+
have hint : IntegrableOn f (Ι a b) μ := by
90+
have hsubset : Ι a b ⊆ uIcc a b := uIoc_subset_uIcc
9191
have hcomp : IsCompact (uIcc a b) := isCompact_uIcc
9292
obtain ⟨c, hc, hmax⟩ := hcomp.exists_isMaxOn nonempty_uIcc (hf.norm)
9393
apply IntegrableOn.of_bound ?_ ?_ (|f c|) ?_
@@ -100,42 +100,21 @@ theorem exists_eq_interval_average_of_measure
100100
intro m hm
101101
apply hmax
102102
exact hsubset hm
103-
have hS₁ : 0 < μ S₁ := measure_le_setAverage_pos hμ0 hμfin hint
104-
have hS₂ : 0 < μ S₂ := measure_setAverage_le_pos hμ0 hμfin hint
105-
have hS₁nonempty : S₁.Nonempty := nonempty_of_measure_ne_zero hS₁.ne'
106-
have hS₂nonempty : S₂.Nonempty := nonempty_of_measure_ne_zero hS₂.ne'
107-
rw [nonempty_def] at *
108-
rcases hS₁nonempty with ⟨c₁, hc₁⟩
109-
rcases hS₂nonempty with ⟨c₂, hc₂⟩
110-
have hc₁Ioc : c₁ ∈ Ioc a b := by
111-
simpa [h] using hc₁.1
112-
have hc₂Ioc : c₂ ∈ Ioc a b := by
113-
simpa [h] using hc₂.1
114-
have h_subset : uIcc c₁ c₂ ⊆ Icc a b := by
115-
intro x hx
116-
rw [mem_uIcc] at hx
117-
grind
118-
have h_ivt : ∃ c ∈ uIcc c₁ c₂, f c = ave := by
119-
apply intermediate_value_uIcc
120-
· refine ContinuousOn.mono hf ?_
121-
rwa [uIcc_of_le h]
122-
· rw [mem_uIcc]
123-
grind
124-
rcases h_ivt with ⟨c, hc_mem, hfc⟩
125-
refine ⟨c, ?_, hfc⟩
126-
rw [mem_uIcc]
127-
grind
103+
have hs_prec : IsPreconnected (Ι a b) := by simpa [h] using isPreconnected_Ioc
104+
have hs_nemp : (Ι a b).Nonempty := by exact nonempty_of_measure_ne_zero hμ0
105+
rcases exists_eq_setAverage
106+
⟨hs_nemp, hs_prec⟩ (hf.mono uIoc_subset_uIcc) hint hμfin hμ0 with ⟨c, hc, hfc⟩
107+
exact ⟨c, uIoc_subset_uIcc hc, hfc⟩
128108

129109
/-- If `f : ℝ → ℝ` is continuous on `uIcc a b`, the interval has finite and nonzero `μ`-measure,
130110
and `μ` has no atoms, then there exists `c ∈ uIoo a b` such that
131-
`f c = ⨍ x in (uIoc a b), f x ∂μ`. -/
132-
theorem exists_eq_interval_average_of_NoAtoms
133-
{f : ℝ → ℝ} {a b : ℝ}
134-
{μ : Measure ℝ} [NoAtoms μ]
111+
`f c = ⨍ x in (Ι a b), f x ∂μ`. -/
112+
theorem exists_eq_interval_average_of_noAtoms
113+
[NoAtoms μ]
135114
(hf : ContinuousOn f (uIcc a b))
136-
(hμfin : μ (uIoc a b) ≠ ⊤)
137-
(hμ0 : μ (uIoc a b) ≠ 0) :
138-
∃ c ∈ uIoo a b, f c = ⨍ x in (uIoc a b), f x ∂μ := by
115+
(hμfin : μ (Ι a b) ≠ ⊤)
116+
(hμ0 : μ (Ι a b) ≠ 0) :
117+
∃ c ∈ uIoo a b, f c = ⨍ x in (Ι a b), f x ∂μ := by
139118
wlog h : a ≤ b generalizing a b
140119
· simp at h
141120
specialize this
@@ -146,11 +125,11 @@ theorem exists_eq_interval_average_of_NoAtoms
146125
· simpa [uIoo_comm] using hc
147126
· have hswap : Ι a b = Ι b a := uIoc_comm a b
148127
rwa [hswap]
149-
let ave := average (μ.restrict (uIoc a b)) f
150-
let S₁ := {x | x ∈ uIoc a b ∧ f x ≤ ave}
151-
let S₂ := {x | x ∈ uIoc a b ∧ ave ≤ f x}
152-
have hint : IntegrableOn f (uIoc a b) μ := by
153-
have hsubset : uIoc a b ⊆ uIcc a b := uIoc_subset_uIcc
128+
let ave := ⨍ x in a b), f x ∂μ
129+
let S₁ := {x | x ∈ Ι a b ∧ f x ≤ ave}
130+
let S₂ := {x | x ∈ Ι a b ∧ ave ≤ f x}
131+
have hint : IntegrableOn f (Ι a b) μ := by
132+
have hsubset : Ι a b ⊆ uIcc a b := uIoc_subset_uIcc
154133
have hcomp : IsCompact (uIcc a b) := isCompact_uIcc
155134
obtain ⟨c, hc, hmax⟩ := hcomp.exists_isMaxOn nonempty_uIcc hf.norm
156135
apply IntegrableOn.of_bound ?_ ?_ (|f c|) ?_
@@ -203,14 +182,14 @@ theorem exists_eq_interval_average_of_NoAtoms
203182
There exists a point in an interval such that the mean of a continuous function over the interval
204183
equals the value of the function at the point. -/
205184
theorem exists_eq_interval_average
206-
{f : ℝ → ℝ} {a b : ℝ} (hab : a ≠ b) (hf : ContinuousOn f (uIcc a b)) :
185+
(hab : a ≠ b) (hf : ContinuousOn f (uIcc a b)) :
207186
∃ c ∈ uIoo a b, f c = ⨍ (x : ℝ) in a..b, f x := by
208187
wlog hle : a ≤ b generalizing a b
209188
· rw [uIoo_comm, uIoc_comm]
210189
apply this hab.symm ?_ (by grind)
211190
rwa [uIcc_comm]
212191
have : Ι a b = Ioc a b := uIoc_of_le hle
213-
apply exists_eq_interval_average_of_NoAtoms hf
192+
apply exists_eq_interval_average_of_noAtoms hf
214193
· simp [this]
215194
· apply ne_of_gt
216195
rw [this, Real.volume_Ioc, ENNReal.ofReal_pos]

0 commit comments

Comments
 (0)