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

Commit b1859b6

Browse files
committed
feat(measure_theory/measure/hausdorff): (μH[1] : measure ℝ) = volume (#18982)
And similarly for `(μH[2] : measure ℝ × ℝ) = volume`. This addresses the TODO comment in the docstring. The `hausdorff_measure_pi_real` proof has been moved to the bottom of the file so that it can be kept next to the new results.
1 parent f8c79b0 commit b1859b6

2 files changed

Lines changed: 151 additions & 108 deletions

File tree

src/measure_theory/measure/hausdorff.lean

Lines changed: 135 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,6 @@ sources only allow coverings by balls and use `r ^ d` instead of `(diam s) ^ d`.
9696
construction lead to different Hausdorff measures, they lead to the same notion of the Hausdorff
9797
dimension.
9898
99-
## TODO
100-
101-
* prove that `1`-dimensional Hausdorff measure on `ℝ` equals `volume`;
102-
* prove a similar statement for `ℝ × ℝ`.
103-
10499
## References
105100
106101
* [Herbert Federer, Geometric Measure Theory, Chapter 2.10][Federer1996]
@@ -693,108 +688,6 @@ end
693688

694689
end measure
695690

696-
open_locale measure_theory
697-
open measure
698-
699-
/-!
700-
### Hausdorff measure and Lebesgue measure
701-
-/
702-
703-
/-- In the space `ι → ℝ`, Hausdorff measure coincides exactly with Lebesgue measure. -/
704-
@[simp] theorem hausdorff_measure_pi_real {ι : Type*} [fintype ι] :
705-
(μH[fintype.card ι] : measure (ι → ℝ)) = volume :=
706-
begin
707-
classical,
708-
-- it suffices to check that the two measures coincide on products of rational intervals
709-
refine (pi_eq_generate_from (λ i, real.borel_eq_generate_from_Ioo_rat.symm)
710-
(λ i, real.is_pi_system_Ioo_rat) (λ i, real.finite_spanning_sets_in_Ioo_rat _)
711-
_).symm,
712-
simp only [mem_Union, mem_singleton_iff],
713-
-- fix such a product `s` of rational intervals, of the form `Π (a i, b i)`.
714-
intros s hs,
715-
choose a b H using hs,
716-
obtain rfl : s = λ i, Ioo (a i) (b i), from funext (λ i, (H i).2), replace H := λ i, (H i).1,
717-
apply le_antisymm _,
718-
-- first check that `volume s ≤ μH s`
719-
{ have Hle : volume ≤ (μH[fintype.card ι] : measure (ι → ℝ)),
720-
{ refine le_hausdorff_measure _ _ ∞ ennreal.coe_lt_top (λ s _, _),
721-
rw [ennreal.rpow_nat_cast],
722-
exact real.volume_pi_le_diam_pow s },
723-
rw [← volume_pi_pi (λ i, Ioo (a i : ℝ) (b i))],
724-
exact measure.le_iff'.1 Hle _ },
725-
/- For the other inequality `μH s ≤ volume s`, we use a covering of `s` by sets of small diameter
726-
`1/n`, namely cubes with left-most point of the form `a i + f i / n` with `f i` ranging between
727-
`0` and `⌈(b i - a i) * n⌉`. Their number is asymptotic to `n^d * Π (b i - a i)`. -/
728-
have I : ∀ i, 0 ≤ (b i : ℝ) - a i := λ i, by simpa only [sub_nonneg, rat.cast_le] using (H i).le,
729-
let γ := λ (n : ℕ), (Π (i : ι), fin ⌈((b i : ℝ) - a i) * n⌉₊),
730-
let t : Π (n : ℕ), γ n → set (ι → ℝ) :=
731-
λ n f, set.pi univ (λ i, Icc (a i + f i / n) (a i + (f i + 1) / n)),
732-
have A : tendsto (λ (n : ℕ), 1/(n : ℝ≥0∞)) at_top (𝓝 0),
733-
by simp only [one_div, ennreal.tendsto_inv_nat_nhds_zero],
734-
have B : ∀ᶠ n in at_top, ∀ (i : γ n), diam (t n i) ≤ 1 / n,
735-
{ apply eventually_at_top.21, λ n hn, _⟩,
736-
assume f,
737-
apply diam_pi_le_of_le (λ b, _),
738-
simp only [real.ediam_Icc, add_div, ennreal.of_real_div_of_pos (nat.cast_pos.mpr hn), le_refl,
739-
add_sub_add_left_eq_sub, add_sub_cancel', ennreal.of_real_one, ennreal.of_real_coe_nat] },
740-
have C : ∀ᶠ n in at_top, set.pi univ (λ (i : ι), Ioo (a i : ℝ) (b i)) ⊆ ⋃ (i : γ n), t n i,
741-
{ apply eventually_at_top.21, λ n hn, _⟩,
742-
have npos : (0 : ℝ) < n := nat.cast_pos.2 hn,
743-
assume x hx,
744-
simp only [mem_Ioo, mem_univ_pi] at hx,
745-
simp only [mem_Union, mem_Ioo, mem_univ_pi, coe_coe],
746-
let f : γ n := λ i, ⟨⌊(x i - a i) * n⌋₊,
747-
begin
748-
apply nat.floor_lt_ceil_of_lt_of_pos,
749-
{ refine (mul_lt_mul_right npos).2 _,
750-
simp only [(hx i).right, sub_lt_sub_iff_right] },
751-
{ refine mul_pos _ npos,
752-
simpa only [rat.cast_lt, sub_pos] using H i }
753-
end⟩,
754-
refine ⟨f, λ i, ⟨_, _⟩⟩,
755-
{ calc (a i : ℝ) + ⌊(x i - a i) * n⌋₊ / n
756-
≤ (a i : ℝ) + ((x i - a i) * n) / n :
757-
begin
758-
refine add_le_add le_rfl ((div_le_div_right npos).2 _),
759-
exact nat.floor_le (mul_nonneg (sub_nonneg.2 (hx i).1.le) npos.le),
760-
end
761-
... = x i : by field_simp [npos.ne'] },
762-
{ calc x i
763-
= (a i : ℝ) + ((x i - a i) * n) / n : by field_simp [npos.ne']
764-
... ≤ (a i : ℝ) + (⌊(x i - a i) * n⌋₊ + 1) / n :
765-
add_le_add le_rfl ((div_le_div_right npos).2 (nat.lt_floor_add_one _).le) } },
766-
calc μH[fintype.card ι] (set.pi univ (λ (i : ι), Ioo (a i : ℝ) (b i)))
767-
≤ liminf (λ (n : ℕ), ∑ (i : γ n), diam (t n i) ^ ↑(fintype.card ι)) at_top :
768-
hausdorff_measure_le_liminf_sum _ (set.pi univ (λ i, Ioo (a i : ℝ) (b i)))
769-
(λ (n : ℕ), 1/(n : ℝ≥0∞)) A t B C
770-
... ≤ liminf (λ (n : ℕ), ∑ (i : γ n), (1/n) ^ (fintype.card ι)) at_top :
771-
begin
772-
refine liminf_le_liminf _ (by is_bounded_default),
773-
filter_upwards [B] with _ hn,
774-
apply finset.sum_le_sum (λ i _, _),
775-
rw ennreal.rpow_nat_cast,
776-
exact pow_le_pow_of_le_left' (hn i) _,
777-
end
778-
... = liminf (λ (n : ℕ), ∏ (i : ι), (⌈((b i : ℝ) - a i) * n⌉₊ : ℝ≥0∞) / n) at_top :
779-
begin
780-
simp only [finset.card_univ, nat.cast_prod, one_mul, fintype.card_fin,
781-
finset.sum_const, nsmul_eq_mul, fintype.card_pi, div_eq_mul_inv, finset.prod_mul_distrib,
782-
finset.prod_const]
783-
end
784-
... = ∏ (i : ι), volume (Ioo (a i : ℝ) (b i)) :
785-
begin
786-
simp only [real.volume_Ioo],
787-
apply tendsto.liminf_eq,
788-
refine ennreal.tendsto_finset_prod_of_ne_top _ (λ i hi, _) (λ i hi, _),
789-
{ apply tendsto.congr' _ ((ennreal.continuous_of_real.tendsto _).comp
790-
((tendsto_nat_ceil_mul_div_at_top (I i)).comp tendsto_coe_nat_at_top_at_top)),
791-
apply eventually_at_top.21, λ n hn, _⟩,
792-
simp only [ennreal.of_real_div_of_pos (nat.cast_pos.mpr hn), comp_app,
793-
ennreal.of_real_coe_nat] },
794-
{ simp only [ennreal.of_real_ne_top, ne.def, not_false_iff] }
795-
end
796-
end
797-
798691
end measure_theory
799692

800693
/-!
@@ -964,4 +857,139 @@ e.isometry.hausdorff_measure_image (or.inr e.surjective) s
964857
μH[d] (e ⁻¹' s) = μH[d] s :=
965858
by rw [← e.image_symm, e.symm.hausdorff_measure_image]
966859

860+
@[simp] lemma map_hausdorff_measure (e : X ≃ᵢ Y) (d : ℝ) : measure.map e μH[d] = μH[d] :=
861+
by rw [e.isometry.map_hausdorff_measure (or.inr e.surjective), e.surjective.range_eq, restrict_univ]
862+
863+
lemma measure_preserving_hausdorff_measure (e : X ≃ᵢ Y) (d : ℝ) :
864+
measure_preserving e μH[d] μH[d] :=
865+
⟨e.continuous.measurable, map_hausdorff_measure _ _⟩
866+
967867
end isometry_equiv
868+
869+
namespace measure_theory
870+
871+
/-!
872+
### Hausdorff measure and Lebesgue measure
873+
-/
874+
875+
/-- In the space `ι → ℝ`, the Hausdorff measure coincides exactly with the Lebesgue measure. -/
876+
@[simp] theorem hausdorff_measure_pi_real {ι : Type*} [fintype ι] :
877+
(μH[fintype.card ι] : measure (ι → ℝ)) = volume :=
878+
begin
879+
classical,
880+
-- it suffices to check that the two measures coincide on products of rational intervals
881+
refine (pi_eq_generate_from (λ i, real.borel_eq_generate_from_Ioo_rat.symm)
882+
(λ i, real.is_pi_system_Ioo_rat) (λ i, real.finite_spanning_sets_in_Ioo_rat _)
883+
_).symm,
884+
simp only [mem_Union, mem_singleton_iff],
885+
-- fix such a product `s` of rational intervals, of the form `Π (a i, b i)`.
886+
intros s hs,
887+
choose a b H using hs,
888+
obtain rfl : s = λ i, Ioo (a i) (b i), from funext (λ i, (H i).2), replace H := λ i, (H i).1,
889+
apply le_antisymm _,
890+
-- first check that `volume s ≤ μH s`
891+
{ have Hle : volume ≤ (μH[fintype.card ι] : measure (ι → ℝ)),
892+
{ refine le_hausdorff_measure _ _ ∞ ennreal.coe_lt_top (λ s _, _),
893+
rw [ennreal.rpow_nat_cast],
894+
exact real.volume_pi_le_diam_pow s },
895+
rw [← volume_pi_pi (λ i, Ioo (a i : ℝ) (b i))],
896+
exact measure.le_iff'.1 Hle _ },
897+
/- For the other inequality `μH s ≤ volume s`, we use a covering of `s` by sets of small diameter
898+
`1/n`, namely cubes with left-most point of the form `a i + f i / n` with `f i` ranging between
899+
`0` and `⌈(b i - a i) * n⌉`. Their number is asymptotic to `n^d * Π (b i - a i)`. -/
900+
have I : ∀ i, 0 ≤ (b i : ℝ) - a i := λ i, by simpa only [sub_nonneg, rat.cast_le] using (H i).le,
901+
let γ := λ (n : ℕ), (Π (i : ι), fin ⌈((b i : ℝ) - a i) * n⌉₊),
902+
let t : Π (n : ℕ), γ n → set (ι → ℝ) :=
903+
λ n f, set.pi univ (λ i, Icc (a i + f i / n) (a i + (f i + 1) / n)),
904+
have A : tendsto (λ (n : ℕ), 1/(n : ℝ≥0∞)) at_top (𝓝 0),
905+
by simp only [one_div, ennreal.tendsto_inv_nat_nhds_zero],
906+
have B : ∀ᶠ n in at_top, ∀ (i : γ n), diam (t n i) ≤ 1 / n,
907+
{ apply eventually_at_top.21, λ n hn, _⟩,
908+
assume f,
909+
apply diam_pi_le_of_le (λ b, _),
910+
simp only [real.ediam_Icc, add_div, ennreal.of_real_div_of_pos (nat.cast_pos.mpr hn), le_refl,
911+
add_sub_add_left_eq_sub, add_sub_cancel', ennreal.of_real_one, ennreal.of_real_coe_nat] },
912+
have C : ∀ᶠ n in at_top, set.pi univ (λ (i : ι), Ioo (a i : ℝ) (b i)) ⊆ ⋃ (i : γ n), t n i,
913+
{ apply eventually_at_top.21, λ n hn, _⟩,
914+
have npos : (0 : ℝ) < n := nat.cast_pos.2 hn,
915+
assume x hx,
916+
simp only [mem_Ioo, mem_univ_pi] at hx,
917+
simp only [mem_Union, mem_Ioo, mem_univ_pi, coe_coe],
918+
let f : γ n := λ i, ⟨⌊(x i - a i) * n⌋₊,
919+
begin
920+
apply nat.floor_lt_ceil_of_lt_of_pos,
921+
{ refine (mul_lt_mul_right npos).2 _,
922+
simp only [(hx i).right, sub_lt_sub_iff_right] },
923+
{ refine mul_pos _ npos,
924+
simpa only [rat.cast_lt, sub_pos] using H i }
925+
end⟩,
926+
refine ⟨f, λ i, ⟨_, _⟩⟩,
927+
{ calc (a i : ℝ) + ⌊(x i - a i) * n⌋₊ / n
928+
≤ (a i : ℝ) + ((x i - a i) * n) / n :
929+
begin
930+
refine add_le_add le_rfl ((div_le_div_right npos).2 _),
931+
exact nat.floor_le (mul_nonneg (sub_nonneg.2 (hx i).1.le) npos.le),
932+
end
933+
... = x i : by field_simp [npos.ne'] },
934+
{ calc x i
935+
= (a i : ℝ) + ((x i - a i) * n) / n : by field_simp [npos.ne']
936+
... ≤ (a i : ℝ) + (⌊(x i - a i) * n⌋₊ + 1) / n :
937+
add_le_add le_rfl ((div_le_div_right npos).2 (nat.lt_floor_add_one _).le) } },
938+
calc μH[fintype.card ι] (set.pi univ (λ (i : ι), Ioo (a i : ℝ) (b i)))
939+
≤ liminf (λ (n : ℕ), ∑ (i : γ n), diam (t n i) ^ ↑(fintype.card ι)) at_top :
940+
hausdorff_measure_le_liminf_sum _ (set.pi univ (λ i, Ioo (a i : ℝ) (b i)))
941+
(λ (n : ℕ), 1/(n : ℝ≥0∞)) A t B C
942+
... ≤ liminf (λ (n : ℕ), ∑ (i : γ n), (1/n) ^ (fintype.card ι)) at_top :
943+
begin
944+
refine liminf_le_liminf _ (by is_bounded_default),
945+
filter_upwards [B] with _ hn,
946+
apply finset.sum_le_sum (λ i _, _),
947+
rw ennreal.rpow_nat_cast,
948+
exact pow_le_pow_of_le_left' (hn i) _,
949+
end
950+
... = liminf (λ (n : ℕ), ∏ (i : ι), (⌈((b i : ℝ) - a i) * n⌉₊ : ℝ≥0∞) / n) at_top :
951+
begin
952+
simp only [finset.card_univ, nat.cast_prod, one_mul, fintype.card_fin,
953+
finset.sum_const, nsmul_eq_mul, fintype.card_pi, div_eq_mul_inv, finset.prod_mul_distrib,
954+
finset.prod_const]
955+
end
956+
... = ∏ (i : ι), volume (Ioo (a i : ℝ) (b i)) :
957+
begin
958+
simp only [real.volume_Ioo],
959+
apply tendsto.liminf_eq,
960+
refine ennreal.tendsto_finset_prod_of_ne_top _ (λ i hi, _) (λ i hi, _),
961+
{ apply tendsto.congr' _ ((ennreal.continuous_of_real.tendsto _).comp
962+
((tendsto_nat_ceil_mul_div_at_top (I i)).comp tendsto_coe_nat_at_top_at_top)),
963+
apply eventually_at_top.21, λ n hn, _⟩,
964+
simp only [ennreal.of_real_div_of_pos (nat.cast_pos.mpr hn), comp_app,
965+
ennreal.of_real_coe_nat] },
966+
{ simp only [ennreal.of_real_ne_top, ne.def, not_false_iff] }
967+
end
968+
end
969+
970+
variables (ι X)
971+
972+
theorem hausdorff_measure_measure_preserving_fun_unique [unique ι]
973+
[topological_space.second_countable_topology X] (d : ℝ) :
974+
measure_preserving (measurable_equiv.fun_unique ι X) μH[d] μH[d] :=
975+
(isometry_equiv.fun_unique ι X).measure_preserving_hausdorff_measure _
976+
977+
theorem hausdorff_measure_measure_preserving_pi_fin_two (α : fin 2Type*)
978+
[Π i, measurable_space (α i)] [Π i, emetric_space (α i)] [Π i, borel_space (α i)]
979+
[Π i, topological_space.second_countable_topology (α i)] (d : ℝ) :
980+
measure_preserving (measurable_equiv.pi_fin_two α) μH[d] μH[d] :=
981+
(isometry_equiv.pi_fin_two α).measure_preserving_hausdorff_measure _
982+
983+
/-- In the space `ℝ`, the Hausdorff measure coincides exactly with the Lebesgue measure. -/
984+
@[simp] theorem hausdorff_measure_real : (μH[1] : measure ℝ) = volume :=
985+
by rw [←(volume_preserving_fun_unique unit ℝ).map_eq,
986+
←(hausdorff_measure_measure_preserving_fun_unique unit ℝ 1).map_eq,
987+
←hausdorff_measure_pi_real, fintype.card_unit, nat.cast_one]
988+
989+
/-- In the space `ℝ × ℝ`, the Hausdorff measure coincides exactly with the Lebesgue measure. -/
990+
@[simp] theorem hausdorff_measure_prod_real : (μH[2] : measure (ℝ × ℝ)) = volume :=
991+
by rw [←(volume_preserving_pi_fin_two (λ i, ℝ)).map_eq,
992+
←(hausdorff_measure_measure_preserving_pi_fin_two (λ i, ℝ) _).map_eq,
993+
←hausdorff_measure_pi_real, fintype.card_fin, nat.cast_two]
994+
995+
end measure_theory

src/topology/metric_space/isometry.lean

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ theory for `pseudo_metric_space` and we specialize to `metric_space` when needed
2323
noncomputable theory
2424

2525
universes u v w
26-
variables {α : Type u} {β : Type v} {γ : Type w}
26+
variables {ι : Type*} {α : Type u} {β : Type v} {γ : Type w}
2727

2828
open function set
2929
open_locale topology ennreal
@@ -431,6 +431,21 @@ complete_space_of_is_complete_univ $ is_complete_of_complete_image e.isometry.un
431431
lemma complete_space_iff (e : α ≃ᵢ β) : complete_space α ↔ complete_space β :=
432432
by { split; introI H, exacts [e.symm.complete_space, e.complete_space] }
433433

434+
variables (ι α)
435+
436+
/-- `equiv.fun_unique` as an `isometry_equiv`. -/
437+
@[simps]
438+
def fun_unique [unique ι] [fintype ι] : (ι → α) ≃ᵢ α :=
439+
{ to_equiv := equiv.fun_unique ι α,
440+
isometry_to_fun := λ x hx, by simp [edist_pi_def, finset.univ_unique, finset.sup_singleton] }
441+
442+
/-- `pi_fin_two_equiv` as an `isometry_equiv`. -/
443+
@[simps]
444+
def pi_fin_two (α : fin 2Type*) [Π i, pseudo_emetric_space (α i)] :
445+
(Π i, α i) ≃ᵢ α 0 × α 1 :=
446+
{ to_equiv := pi_fin_two_equiv α,
447+
isometry_to_fun := λ x hx, by simp [edist_pi_def, fin.univ_succ, prod.edist_eq] }
448+
434449
end pseudo_emetric_space
435450

436451
section pseudo_metric_space

0 commit comments

Comments
 (0)