@@ -6,6 +6,8 @@ Authors: Yury Kudryashov
6
6
import topology.metric_space.metric_separated
7
7
import measure_theory.constructions.borel_space
8
8
import analysis.special_functions.pow
9
+ import measure_theory.measure.lebesgue
10
+ import data.equiv.list
9
11
10
12
/-!
11
13
# Hausdorff measure and metric (outer) measures
@@ -65,7 +67,7 @@ Hausdorff measure, Hausdorff dimension, dimension, measure, metric measure
65
67
66
68
open_locale nnreal ennreal topological_space big_operators
67
69
68
- open emetric set function filter
70
+ open emetric set function filter encodable
69
71
70
72
noncomputable theory
71
73
@@ -357,6 +359,16 @@ begin
357
359
simp
358
360
end
359
361
362
+ lemma le_mk_metric (m : ℝ≥0 ∞ → ℝ≥0 ∞) (μ : outer_measure X) (hμ : ∀ x, μ {x} = 0 )
363
+ (r : ℝ≥0 ∞) (h0 : 0 < r) (hr : ∀ s, diam s ≤ r → ¬s.subsingleton → μ s ≤ m (diam s)) :
364
+ μ ≤ mk_metric m :=
365
+ le_bsupr_of_le r h0 $ mk_metric'.le_pre.2 $ λ s hs,
366
+ begin
367
+ by_cases h : s.subsingleton,
368
+ exacts [h.induction_on (μ.empty'.trans_le (zero_le _)) (λ x, ((hμ x).trans_le (zero_le _))),
369
+ le_supr_of_le h (hr _ hs h)]
370
+ end
371
+
360
372
end outer_measure
361
373
362
374
/-!
@@ -449,6 +461,14 @@ begin
449
461
exact ⟨x, hx⟩ }
450
462
end
451
463
464
+ lemma le_mk_metric (m : ℝ≥0 ∞ → ℝ≥0 ∞) (μ : measure X) [has_no_atoms μ] (ε : ℝ≥0 ∞) (h₀ : 0 < ε)
465
+ (h : ∀ s : set X, diam s ≤ ε → ¬s.subsingleton → μ s ≤ m (diam s)) :
466
+ μ ≤ mk_metric m :=
467
+ begin
468
+ rw [← to_outer_measure_le, mk_metric_to_outer_measure],
469
+ exact outer_measure.le_mk_metric m μ.to_outer_measure measure_singleton ε h₀ h
470
+ end
471
+
452
472
/-!
453
473
### Hausdorff measure and Hausdorff dimension
454
474
-/
@@ -458,6 +478,11 @@ def hausdorff_measure (d : ℝ) : measure X := mk_metric (λ r, r ^ d)
458
478
459
479
localized " notation `μH[` d `]` := measure_theory.measure.hausdorff_measure d" in measure_theory
460
480
481
+ lemma le_hausdorff_measure (d : ℝ) (μ : measure X) [has_no_atoms μ] (ε : ℝ≥0 ∞) (h₀ : 0 < ε)
482
+ (h : ∀ s : set X, diam s ≤ ε → ¬s.subsingleton → μ s ≤ diam s ^ d) :
483
+ μ ≤ μH[d] :=
484
+ le_mk_metric _ μ ε h₀ h
485
+
461
486
/-- A formula for `μH[d] s` that works for all `d`. In case of a positive `d` a simpler formula
462
487
is available as `measure_theory.measure.hausdorff_measure_apply`. -/
463
488
lemma hausdorff_measure_apply' (d : ℝ) (s : set X) :
@@ -481,6 +506,50 @@ begin
481
506
{ refl }
482
507
end
483
508
509
+ /-- To bound the Hausdorff measure of a set, one may use coverings with maximum diameter tending
510
+ to `0`, indexed by any sequence of encodable types. -/
511
+ lemma hausdorff_measure_le {β : Type *} {ι : β → Type *} [hι : ∀ n, encodable (ι n)]
512
+ {d : ℝ} (hd : 0 < d) (s : set X)
513
+ {l : filter β} (r : β → ℝ≥0 ∞) (hr : tendsto r l (𝓝 0 )) (t : Π (n : β), ι n → set X)
514
+ (ht : ∀ᶠ n in l, ∀ i, diam (t n i) ≤ r n) (hst : ∀ᶠ n in l, s ⊆ ⋃ i, t n i) :
515
+ μH[d] s ≤ liminf l (λ n, ∑' i, diam (t n i) ^ d) :=
516
+ begin
517
+ classical,
518
+ rw hausdorff_measure_apply hd,
519
+ refine le_of_forall_le_of_dense (λ c hc, _),
520
+ refine supr_le (λ i, supr_le (λ hi, _)),
521
+ rcases ((frequently_lt_of_liminf_lt (by is_bounded_default) hc).and_eventually
522
+ ((((tendsto_order.1 hr).2 _ hi)).and (ht.and hst))).exists with ⟨n, hn, hrn, htn, hstn⟩,
523
+ let u : ℕ → set X := λ j, option.elim (decode₂ (ι n) j) ∅ (t n),
524
+ refine (infi_le _ u).trans _,
525
+ have : s ⊆ ⋃ j, u j,
526
+ { assume x hx,
527
+ rcases mem_Union.1 (hstn hx) with ⟨w, hw⟩,
528
+ apply mem_Union.2 ⟨encode w, _⟩,
529
+ simp only [u],
530
+ rw encodek₂ w,
531
+ simpa },
532
+ refine (infi_le _ this ).trans _,
533
+ have : ∀ (j : ℕ), diam (u j) ≤ i,
534
+ { assume j,
535
+ apply le_trans _ hrn.le,
536
+ simp only [u],
537
+ generalize : decode₂ (ι n) j = e,
538
+ cases e,
539
+ { simp },
540
+ { simp [htn e] } },
541
+ refine (infi_le _ this ).trans _,
542
+ have A : ∀ (j : ℕ), j ∉ range (encode : ι n → ℕ) → diam (u j) ^ d = 0 ,
543
+ { assume j hj,
544
+ have : decode₂ (ι n) j = none, by simpa [← decode₂_ne_none_iff] using hj,
545
+ simp [u, this , hd] },
546
+ have B : has_sum ((λ (j : ℕ), diam (u j) ^ d) ∘ (encode : ι n → ℕ)) (∑' i, diam (t n i) ^ d),
547
+ by simp only [u, comp, encodek₂, ennreal.summable.has_sum, option.elim],
548
+ rw function.injective.has_sum_iff encode_injective A at B,
549
+ rw [B.tsum_eq],
550
+ exact hn.le
551
+ end
552
+
484
553
/-- If `d₁ < d₂`, then for any set `s` we have either `μH[d₂] s = 0`, or `μH[d₁] s = ∞`. -/
485
554
lemma hausdorff_measure_zero_or_top {d₁ d₂ : ℝ} (h : d₁ < d₂) (s : set X) :
486
555
μH[d₂] s = 0 ∨ μH[d₁] s = ∞ :=
@@ -597,4 +666,110 @@ by rw [sUnion_eq_bUnion, dimH_bUnion hS]
597
666
@[simp] lemma dimH_union (s t : set X) : dimH (s ∪ t) = max (dimH s) (dimH t) :=
598
667
by rw [union_eq_Union, dimH_Union, supr_bool_eq, cond, cond, ennreal.sup_eq_max]
599
668
669
+ /-!
670
+ ### Hausdorff measure and Lebesgue measure
671
+ -/
672
+
673
+ /-- In the space `ι → ℝ`, Hausdorff measure coincides exactly with Lebesgue measure. -/
674
+ theorem hausdorff_measure_pi_real {ι : Type *} [fintype ι] [nonempty ι] :
675
+ (μH[fintype.card ι] : measure (ι → ℝ)) = volume :=
676
+ begin
677
+ classical,
678
+ -- it suffices to check that the two measures coincide on products of rational intervals
679
+ refine (pi_eq_generate_from (λ i, real.borel_eq_generate_from_Ioo_rat.symm)
680
+ (λ i, real.is_pi_system_Ioo_rat) (λ i, real.finite_spanning_sets_in_Ioo_rat _)
681
+ _).symm,
682
+ simp only [mem_Union, mem_singleton_iff],
683
+ -- fix such a product `s` of rational intervals, of the form `Π (a i, b i)`.
684
+ intros s hs,
685
+ choose a b H using hs,
686
+ obtain rfl : s = λ i, Ioo (a i) (b i), from funext (λ i, (H i).2 ), replace H := λ i, (H i).1 ,
687
+ apply le_antisymm _,
688
+ -- first check that `volume s ≤ μH s`
689
+ { have Hle : volume ≤ (μH[fintype.card ι] : measure (ι → ℝ)),
690
+ { refine le_hausdorff_measure _ _ ∞ ennreal.coe_lt_top (λ s h₁ h₂, _),
691
+ rw [ennreal.rpow_nat_cast],
692
+ exact real.volume_pi_le_diam_pow s },
693
+ rw [← volume_pi_pi (λ i, Ioo (a i : ℝ) (b i)) (λ i, measurable_set_Ioo)],
694
+ exact measure.le_iff'.1 Hle _ },
695
+ /- For the other inequality `μH s ≤ volume s`, we use a covering of `s` by sets of small diameter
696
+ `1/n`, namely cubes with left-most point of the form `a i + f i / n` with `f i` ranging between
697
+ `0` and `⌈(b i - a i) * n⌉`. Their number is asymptotic to `n^d * Π (b i - a i)`. -/
698
+ have Hpos' : 0 < fintype.card ι := fintype.card_pos_iff.2 ‹nonempty ι›,
699
+ have Hpos : 0 < (fintype.card ι : ℝ), by simp only [Hpos', nat.cast_pos],
700
+ have I : ∀ i, 0 ≤ (b i : ℝ) - a i := λ i, by simpa only [sub_nonneg, rat.cast_le] using (H i).le,
701
+ let γ := λ (n : ℕ), (Π (i : ι), fin ⌈((b i : ℝ) - a i) * n⌉₊),
702
+ haveI : ∀ n, encodable (γ n) := λ n, (fintype_pi ι (λ (i : ι), fin _)).out,
703
+ let t : Π (n : ℕ), γ n → set (ι → ℝ) :=
704
+ λ n f, set.pi univ (λ i, Icc (a i + f i / n) (a i + (f i + 1 ) / n)),
705
+ have A : tendsto (λ (n : ℕ), 1 /(n : ℝ≥0 ∞)) at_top (𝓝 0 ),
706
+ by simp only [one_div, ennreal.tendsto_inv_nat_nhds_zero],
707
+ have B : ∀ᶠ n in at_top, ∀ (i : γ n), diam (t n i) ≤ 1 / n,
708
+ { apply eventually_at_top.2 ⟨1 , λ n hn, _⟩,
709
+ assume f,
710
+ apply diam_pi_le_of_le (λ b, _),
711
+ simp only [real.ediam_Icc, add_div, ennreal.of_real_div_of_pos (nat.cast_pos.mpr hn), le_refl,
712
+ add_sub_add_left_eq_sub, add_sub_cancel', ennreal.of_real_one, ennreal.of_real_coe_nat] },
713
+ have C : ∀ᶠ n in at_top, set.pi univ (λ (i : ι), Ioo (a i : ℝ) (b i)) ⊆ ⋃ (i : γ n), t n i,
714
+ { apply eventually_at_top.2 ⟨1 , λ n hn, _⟩,
715
+ have npos : (0 : ℝ) < n := nat.cast_pos.2 hn,
716
+ assume x hx,
717
+ simp only [mem_Ioo, mem_univ_pi] at hx,
718
+ simp only [mem_Union, mem_Ioo, mem_univ_pi, coe_coe],
719
+ let f : γ n := λ i, ⟨⌊(x i - a i) * n⌋₊,
720
+ begin
721
+ apply nat_floor_lt_nat_ceil_of_lt_of_pos,
722
+ { refine (mul_lt_mul_right npos).2 _,
723
+ simp only [(hx i).right, sub_lt_sub_iff_right] },
724
+ { refine mul_pos _ npos,
725
+ simpa only [rat.cast_lt, sub_pos] using H i }
726
+ end ⟩,
727
+ refine ⟨f, λ i, ⟨_, _⟩⟩,
728
+ { calc (a i : ℝ) + ⌊(x i - a i) * n⌋₊ / n
729
+ ≤ (a i : ℝ) + ((x i - a i) * n) / n :
730
+ begin
731
+ refine add_le_add le_rfl ((div_le_div_right npos).2 _),
732
+ exact nat_floor_le (mul_nonneg (sub_nonneg.2 (hx i).1 .le) npos.le),
733
+ end
734
+ ... = x i : by field_simp [npos.ne'] },
735
+ { calc x i
736
+ = (a i : ℝ) + ((x i - a i) * n) / n : by field_simp [npos.ne']
737
+ ... ≤ (a i : ℝ) + (⌊(x i - a i) * n⌋₊ + 1 ) / n :
738
+ add_le_add le_rfl ((div_le_div_right npos).2 (lt_nat_floor_add_one _).le) } },
739
+ calc μH[fintype.card ι] (set.pi univ (λ (i : ι), Ioo (a i : ℝ) (b i)))
740
+ ≤ liminf at_top (λ (n : ℕ), ∑' (i : γ n), diam (t n i) ^ ↑(fintype.card ι)) :
741
+ hausdorff_measure_le Hpos (set.pi univ (λ i, Ioo (a i : ℝ) (b i)))
742
+ (λ (n : ℕ), 1 /(n : ℝ≥0 ∞)) A t B C
743
+ ... ≤ liminf at_top (λ (n : ℕ), ∑' (i : γ n), (1 /n) ^ (fintype.card ι)) :
744
+ begin
745
+ refine liminf_le_liminf _ (by is_bounded_default),
746
+ filter_upwards [B],
747
+ assume n hn,
748
+ apply ennreal.tsum_le_tsum (λ i, _),
749
+ simp only [← ennreal.rpow_nat_cast],
750
+ exact ennreal.rpow_le_rpow (hn i) Hpos.le,
751
+ end
752
+ ... = liminf at_top (λ (n : ℕ), ∏ (i : ι), (⌈((b i : ℝ) - a i) * n⌉₊ : ℝ≥0 ∞) / n) :
753
+ begin
754
+ congr' 1 ,
755
+ ext1 n,
756
+ simp only [tsum_fintype, finset.card_univ, nat.cast_prod, one_div, fintype.card_fin,
757
+ finset.sum_const, nsmul_eq_mul, fintype.card_pi],
758
+ simp_rw [← finset.card_univ, ← finset.prod_const, ← finset.prod_mul_distrib],
759
+ refl,
760
+ end
761
+ ... = ∏ (i : ι), volume (Ioo (a i : ℝ) (b i)) :
762
+ begin
763
+ simp only [real.volume_Ioo],
764
+ apply tendsto.liminf_eq,
765
+ refine ennreal.tendsto_finset_prod_of_ne_top _ (λ i hi, _) (λ i hi, _),
766
+ { apply tendsto.congr' _ ((ennreal.continuous_of_real.tendsto _).comp
767
+ ((tendsto_nat_ceil_mul_div_at_top (I i)).comp tendsto_coe_nat_at_top_at_top)),
768
+ apply eventually_at_top.2 ⟨1 , λ n hn, _⟩,
769
+ simp only [ennreal.of_real_div_of_pos (nat.cast_pos.mpr hn), comp_app,
770
+ ennreal.of_real_coe_nat] },
771
+ { simp only [ennreal.of_real_ne_top, ne.def, not_false_iff] }
772
+ end
773
+ end
774
+
600
775
end measure_theory
0 commit comments