@@ -18,7 +18,7 @@ This is essentially the same argument as in
18
18
https://en.wikipedia.org/wiki/Haar_measure#A_construction_using_compact_subsets.
19
19
20
20
We construct the Haar measure first on compact sets. For this we define `(K : U)` as the (smallest)
21
- number of left-translates of `U` are needed to cover `K` (`index` in the formalization).
21
+ number of left-translates of `U` that are needed to cover `K` (`index` in the formalization).
22
22
Then we define a function `h` on compact sets as `lim_U (K : U) / (K₀ : U)`,
23
23
where `U` becomes a smaller and smaller open neighborhood of `1`, and `K₀` is a fixed compact set
24
24
with nonempty interior. This function is `chaar` in the formalization, and we define the limit
@@ -42,6 +42,10 @@ where `ᵒ` denotes the interior.
42
42
* `haar_measure_self`: the Haar measure is normalized.
43
43
* `is_left_invariant_haar_measure`: the Haar measure is left invariant.
44
44
* `regular_haar_measure`: the Haar measure is a regular measure.
45
+ * `is_haar_measure_haar_measure`: the Haar measure satisfies the `is_haar_measure` typeclass, i.e.,
46
+ it is invariant and gives finite mass to compact sets and positive mass to nonempty open sets.
47
+ * `haar` : some choice of a Haar measure, on a locally compact Hausdorff group, constructed as
48
+ `haar_measure K` where `K` is some arbitrary choice of a compact set with nonempty interior.
45
49
46
50
## References
47
51
* Paul Halmos (1950), Measure Theory, §53
@@ -54,7 +58,7 @@ where `ᵒ` denotes the interior.
54
58
noncomputable theory
55
59
56
60
open set has_inv function topological_space measurable_space
57
- open_locale nnreal classical ennreal pointwise
61
+ open_locale nnreal classical ennreal pointwise topological_space
58
62
59
63
variables {G : Type *} [group G]
60
64
@@ -506,24 +510,12 @@ scaled so that `add_haar_measure K₀ K₀ = 1`."]
506
510
def haar_measure (K₀ : positive_compacts G) : measure G :=
507
511
((haar_content K₀).outer_measure K₀.1 )⁻¹ • (haar_content K₀).measure
508
512
509
- -- Unfortunately we have to manually give the additive version here
510
- lemma add_haar_measure_apply {G : Type *} [add_group G] [topological_space G] [t2_space G]
511
- [topological_add_group G] [measurable_space G] [borel_space G] {K₀ : positive_compacts G}
512
- {s : set G} (hs : measurable_set s) : add_haar_measure K₀ s =
513
- (add_haar_content K₀).outer_measure s / (add_haar_content K₀).outer_measure K₀.1 :=
514
- begin
515
- delta add_haar_measure,
516
- simp only [hs, div_eq_mul_inv, mul_comm, content.measure_apply, algebra.id.smul_eq_mul,
517
- coe_smul, pi.smul_apply],
518
- end
519
-
520
513
@[to_additive]
521
514
lemma haar_measure_apply {K₀ : positive_compacts G} {s : set G} (hs : measurable_set s) :
522
515
haar_measure K₀ s = (haar_content K₀).outer_measure s / (haar_content K₀).outer_measure K₀.1 :=
523
516
begin
524
- delta haar_measure,
525
- simp only [hs, div_eq_mul_inv, mul_comm, content.measure_apply, algebra.id.smul_eq_mul,
526
- coe_smul, pi.smul_apply],
517
+ change (((haar_content K₀).outer_measure) K₀.val)⁻¹ * (haar_content K₀).measure s = _,
518
+ simp only [hs, div_eq_mul_inv, mul_comm, content.measure_apply],
527
519
end
528
520
529
521
@[to_additive]
@@ -538,38 +530,54 @@ begin
538
530
end
539
531
540
532
@[to_additive]
541
- lemma haar_measure_self [locally_compact_space G] {K₀ : positive_compacts G} :
533
+ lemma haar_measure_self {K₀ : positive_compacts G} :
542
534
haar_measure K₀ K₀.1 = 1 :=
543
535
begin
536
+ haveI : locally_compact_space G := K₀.locally_compact_space_of_group,
544
537
rw [haar_measure_apply K₀.2 .1 .measurable_set, ennreal.div_self],
545
538
{ rw [← pos_iff_ne_zero], exact haar_content_outer_measure_self_pos },
546
539
{ exact ne_of_lt (content.outer_measure_lt_top_of_is_compact _ K₀.2 .1 ) }
547
540
end
548
541
549
- @[to_additive]
550
- lemma haar_measure_pos_of_is_open [locally_compact_space G] {K₀ : positive_compacts G}
551
- {U : set G} (hU : is_open U) (h2U : U.nonempty) : 0 < haar_measure K₀ U :=
552
- begin
553
- rw [haar_measure_apply hU.measurable_set, ennreal.div_pos_iff],
554
- refine ⟨_, ne_of_lt $ content.outer_measure_lt_top_of_is_compact _ K₀.2 .1 ⟩,
555
- rw [← pos_iff_ne_zero],
556
- exact content.outer_measure_pos_of_is_mul_left_invariant _ is_left_invariant_haar_content
557
- ⟨K₀.1 , K₀.2 .1 ⟩ (by simpa only [haar_content_self] using one_ne_zero) hU h2U
558
- end
559
-
560
542
/-- The Haar measure is regular. -/
561
543
@[to_additive]
562
- instance regular_haar_measure [locally_compact_space G] {K₀ : positive_compacts G} :
544
+ instance regular_haar_measure {K₀ : positive_compacts G} :
563
545
(haar_measure K₀).regular :=
564
546
begin
547
+ haveI : locally_compact_space G := K₀.locally_compact_space_of_group,
565
548
apply regular.smul,
566
549
rw ennreal.inv_ne_top,
567
- exact haar_content_outer_measure_self_pos.ne'
550
+ exact haar_content_outer_measure_self_pos.ne',
568
551
end
569
552
553
+ /-- The Haar measure is sigma-finite in a second countable group. -/
554
+ @[to_additive]
555
+ instance sigma_finite_haar_measure [second_countable_topology G] {K₀ : positive_compacts G} :
556
+ sigma_finite (haar_measure K₀) :=
557
+ by { haveI : locally_compact_space G := K₀.locally_compact_space_of_group, apply_instance, }
558
+
559
+ /-- The Haar measure is a Haar measure, i.e., it is invariant and gives finite mass to compact
560
+ sets and positive mass to nonempty open sets. -/
561
+ @[to_additive]
562
+ instance is_haar_measure_haar_measure (K₀ : positive_compacts G) :
563
+ is_haar_measure (haar_measure K₀) :=
564
+ begin
565
+ apply is_haar_measure_of_is_compact_nonempty_interior _ (is_mul_left_invariant_haar_measure K₀)
566
+ K₀.1 K₀.2 .1 K₀.2 .2 ,
567
+ { simp only [haar_measure_self], exact one_ne_zero },
568
+ { simp only [haar_measure_self], exact ennreal.coe_ne_top },
569
+ end
570
+
571
+ /-- `haar` is some choice of a Haar measure, on a locally compact group. -/
572
+ @[reducible, to_additive " `add_haar` is some choice of a Haar measure, on a locally compact
573
+ additive group." ]
574
+ def haar [locally_compact_space G] : measure G :=
575
+ haar_measure $ classical.choice (topological_space.nonempty_positive_compacts G)
576
+
570
577
section unique
571
578
572
- variables [locally_compact_space G] [second_countable_topology G] {μ : measure G} [sigma_finite μ]
579
+ variables [second_countable_topology G] {μ : measure G} [sigma_finite μ]
580
+
573
581
/-- The Haar measure is unique up to scaling. More precisely: every σ-finite left invariant measure
574
582
is a scalar multiple of the Haar measure. -/
575
583
@[to_additive]
@@ -584,13 +592,78 @@ end
584
592
585
593
@[to_additive]
586
594
theorem regular_of_is_mul_left_invariant (hμ : is_mul_left_invariant μ) {K} (hK : is_compact K)
587
- (h2K : (interior K).nonempty) (hμK : μ K ≠ ∞) : regular μ :=
595
+ (h2K : (interior K).nonempty) (hμK : μ K ≠ ∞) :
596
+ regular μ :=
588
597
begin
589
598
rw [haar_measure_unique hμ ⟨K, hK, h2K⟩],
590
599
exact regular.smul hμK
591
600
end
592
601
593
602
end unique
594
603
604
+ @[to_additive is_add_haar_measure_eq_smul_is_add_haar_measure]
605
+ theorem is_haar_measure_eq_smul_is_haar_measure
606
+ [locally_compact_space G] [second_countable_topology G]
607
+ (μ ν : measure G) [is_haar_measure μ] [is_haar_measure ν] :
608
+ ∃ (c : ℝ≥0 ∞), (c ≠ 0 ) ∧ (c ≠ ∞) ∧ (μ = c • ν) :=
609
+ begin
610
+ have K : positive_compacts G := classical.choice (topological_space.nonempty_positive_compacts G),
611
+ have νpos : 0 < ν K.1 := haar_pos_of_nonempty_interior _ K.2 .2 ,
612
+ have νlt : ν K.1 < ∞ := is_compact.haar_lt_top _ K.2 .1 ,
613
+ refine ⟨μ K.1 / ν K.1 , _, _, _⟩,
614
+ { simp only [νlt.ne, (μ.haar_pos_of_nonempty_interior K.property.right).ne', ne.def,
615
+ ennreal.div_zero_iff, not_false_iff, or_self] },
616
+ { simp only [div_eq_mul_inv, νpos.ne', (is_compact.haar_lt_top μ K.property.left).ne, or_self,
617
+ ennreal.inv_eq_top, with_top.mul_eq_top_iff, ne.def, not_false_iff, and_false, false_and] },
618
+ { calc
619
+ μ = μ K.1 • haar_measure K : haar_measure_unique (is_mul_left_invariant_haar μ) K
620
+ ... = (μ K.1 / ν K.1 ) • (ν K.1 • haar_measure K) :
621
+ by rw [smul_smul, div_eq_mul_inv, mul_assoc, ennreal.inv_mul_cancel νpos.ne' νlt.ne, mul_one]
622
+ ... = (μ K.1 / ν K.1 ) • ν : by rw ← haar_measure_unique (is_mul_left_invariant_haar ν) K }
623
+ end
624
+
625
+ /-- Any Haar measure is invariant under inversion in a commutative group. -/
626
+ @[to_additive]
627
+ lemma map_haar_inv
628
+ {G : Type *} [comm_group G] [topological_space G] [topological_group G] [t2_space G]
629
+ [measurable_space G] [borel_space G] [locally_compact_space G] [second_countable_topology G]
630
+ (μ : measure G) [is_haar_measure μ] :
631
+ measure.map has_inv.inv μ = μ :=
632
+ begin
633
+ -- the image measure is a Haar measure. By uniqueness up to multiplication, it is of the form
634
+ -- `c μ`. Applying again inversion, one gets the measure `c^2 μ`. But since inversion is an
635
+ -- involution, this is also `μ`. Hence, `c^2 = 1`, which implies `c = 1`.
636
+ haveI : is_haar_measure (measure.map has_inv.inv μ) :=
637
+ is_haar_measure_map μ (mul_equiv.inv G) continuous_inv continuous_inv,
638
+ obtain ⟨c, cpos, clt, hc⟩ : ∃ (c : ℝ≥0 ∞), (c ≠ 0 ) ∧ (c ≠ ∞) ∧ (measure.map has_inv.inv μ = c • μ)
639
+ := is_haar_measure_eq_smul_is_haar_measure _ _,
640
+ have : map has_inv.inv (map has_inv.inv μ) = c^2 • μ,
641
+ by simp only [hc, smul_smul, pow_two, linear_map.map_smul],
642
+ have μeq : μ = c^2 • μ,
643
+ { rw [map_map continuous_inv.measurable continuous_inv.measurable] at this ,
644
+ { simpa only [inv_involutive, involutive.comp_self, map_id] },
645
+ all_goals { apply_instance } },
646
+ have K : positive_compacts G := classical.choice (topological_space.nonempty_positive_compacts G),
647
+ have : c^2 * μ K.1 = 1 ^2 * μ K.1 ,
648
+ by { conv_rhs { rw μeq },
649
+ -- use `change` instead of `simp` to avoid `to_additive` issues
650
+ change c ^ 2 * μ K.1 = 1 ^ 2 * (c ^ 2 * μ K.1 ),
651
+ rw [one_pow, one_mul] },
652
+ have : c^2 = 1 ^2 :=
653
+ (ennreal.mul_eq_mul_right (haar_pos_of_nonempty_interior _ K.2 .2 ).ne'
654
+ (is_compact.haar_lt_top _ K.2 .1 ).ne).1 this ,
655
+ have : c = 1 := (ennreal.pow_strict_mono two_ne_zero).injective this ,
656
+ rw [hc, this , one_smul]
657
+ end
658
+
659
+ @[simp, to_additive] lemma haar_preimage_inv
660
+ {G : Type *} [comm_group G] [topological_space G] [topological_group G] [t2_space G]
661
+ [measurable_space G] [borel_space G] [locally_compact_space G] [second_countable_topology G]
662
+ (μ : measure G) [is_haar_measure μ] (s : set G) :
663
+ μ (s⁻¹) = μ s :=
664
+ calc μ (s⁻¹) = measure.map (has_inv.inv) μ s :
665
+ ((homeomorph.inv G).to_measurable_equiv.map_apply s).symm
666
+ ... = μ s : by rw map_haar_inv
667
+
595
668
end measure
596
669
end measure_theory
0 commit comments