# mathlibdocumentation

measure_theory.measure.haar

# Haar measure #

In this file we prove the existence and uniqueness (up to scalar multiples) of Haar measure for a locally compact Hausdorff topological group.

For the construction, we follow the write-up by Jonathan Gleason, Existence and Uniqueness of Haar Measure. This is essentially the same argument as in https://en.wikipedia.org/wiki/Haar_measure#A_construction_using_compact_subsets.

We construct the Haar measure first on compact sets. For this we define `(K : U)` as the (smallest) number of left-translates of `U` that are needed to cover `K` (`index` in the formalization). Then we define a function `h` on compact sets as `lim_U (K : U) / (K₀ : U)`, where `U` becomes a smaller and smaller open neighborhood of `1`, and `K₀` is a fixed compact set with nonempty interior. This function is `chaar` in the formalization, and we define the limit formally using Tychonoff's theorem.

This function `h` forms a content, which we can extend to an outer measure and then a measure (`haar_measure`). We normalize the Haar measure so that the measure of `K₀` is `1`. We show that for second countable spaces any left invariant Borel measure is a scalar multiple of the Haar measure.

Note that `μ` need not coincide with `h` on compact sets, according to [halmos1950measure, ch. X, §53 p.233]. However, we know that `h(K)` lies between `μ(Kᵒ)` and `μ(K)`, where `ᵒ` denotes the interior.

## Main Declarations #

• `haar_measure`: the Haar measure on a locally compact Hausdorff group. This is a left invariant regular measure. It takes as argument a compact set of the group (with non-empty interior), and is normalized so that the measure of the given set is 1.
• `haar_measure_self`: the Haar measure is normalized.
• `is_left_invariant_haar_measure`: the Haar measure is left invariant.
• `regular_haar_measure`: the Haar measure is a regular measure.
• `is_haar_measure_haar_measure`: the Haar measure satisfies the `is_haar_measure` typeclass, i.e., it is invariant and gives finite mass to compact sets and positive mass to nonempty open sets.
• `haar` : some choice of a Haar measure, on a locally compact Hausdorff group, constructed as `haar_measure K` where `K` is some arbitrary choice of a compact set with nonempty interior.
• `haar_measure_unique`: Every σ-finite left invariant measure on a locally compact Hausdorff group is a scalar multiple of the Haar measure.

## References #

• Paul Halmos (1950), Measure Theory, §53
• Jonathan Gleason, Existence and Uniqueness of Haar Measure
• Note: step 9, page 8 contains a mistake: the last defined `μ` does not extend the `μ` on compact sets, see Halmos (1950) p. 233, bottom of the page. This makes some other steps (like step 11) invalid.
• https://en.wikipedia.org/wiki/Haar_measure

We put the internal functions in the construction of the Haar measure in a namespace, so that the chosen names don't clash with other declarations. We first define a couple of the functions before proving the properties (that require that `G` is a topological group).

noncomputable def measure_theory.measure.haar.index {G : Type u_1} [group G] (K V : set G) :

The index or Haar covering number or ratio of `K` w.r.t. `V`, denoted `(K : V)`: it is the smallest number of (left) translates of `V` that is necessary to cover `K`. It is defined to be 0 if no finite number of translates cover `K`.

Equations
noncomputable def measure_theory.measure.haar.add_index {G : Type u_1} [add_group G] (K V : set G) :

additive version of `measure_theory.measure.haar.index`

Equations
theorem measure_theory.measure.haar.index_empty {G : Type u_1} [group G] {V : set G} :
noncomputable def measure_theory.measure.haar.add_prehaar {G : Type u_1} [add_group G] (K₀ U : set G)  :

additive version of `measure_theory.measure.haar.prehaar`

Equations
noncomputable def measure_theory.measure.haar.prehaar {G : Type u_1} [group G] (K₀ U : set G)  :

`prehaar K₀ U K` is a weighted version of the index, defined as `(K : U)/(K₀ : U)`. In the applications `K₀` is compact with non-empty interior, `U` is open containing `1`, and `K` is any compact set. The argument `K` is a (bundled) compact set, so that we can consider `prehaar K₀ U` as an element of `haar_product` (below).

Equations
theorem measure_theory.measure.haar.prehaar_nonneg {G : Type u_1} [group G] {U : set G}  :

additive version of `measure_theory.measure.haar.haar_product`

Equations
def measure_theory.measure.haar.haar_product {G : Type u_1} [group G] (K₀ : set G) :

`haar_product K₀` is the product of intervals `[0, (K : K₀)]`, for all compact sets `K`. For all `U`, we can show that `prehaar K₀ U ∈ haar_product K₀`.

Equations
@[simp]
theorem measure_theory.measure.haar.mem_prehaar_empty {G : Type u_1} [group G] {K₀ : set G} {f : } :
(K : , f K
@[simp]
theorem measure_theory.measure.haar.mem_add_prehaar_empty {G : Type u_1} [add_group G] {K₀ : set G} {f : } :
(K : , f K

additive version of `measure_theory.measure.haar.cl_prehaar`

Equations
def measure_theory.measure.haar.cl_prehaar {G : Type u_1} [group G] (K₀ : set G)  :

The closure of the collection of elements of the form `prehaar K₀ U`, for `U` open neighbourhoods of `1`, contained in `V`. The closure is taken in the space `compacts G → ℝ`, with the topology of pointwise convergence. We show that the intersection of all these sets is nonempty, and the Haar measure on compact sets is defined to be an element in the closure of this intersection.

Equations

### Lemmas about `index`#

theorem measure_theory.measure.haar.index_defined {G : Type u_1} [group G] {K V : set G} (hK : is_compact K) (hV : (interior V).nonempty) :
(n : ), n finset.card '' {t : | K (g : G) (H : g t), (λ (h : G), g * h) ⁻¹' V}

If `K` is compact and `V` has nonempty interior, then the index `(K : V)` is well-defined, there is a finite set `t` satisfying the desired properties.

theorem measure_theory.measure.haar.add_index_defined {G : Type u_1} [add_group G] {K V : set G} (hK : is_compact K) (hV : (interior V).nonempty) :
(n : ), n finset.card '' {t : | K (g : G) (H : g t), (λ (h : G), g + h) ⁻¹' V}

If `K` is compact and `V` has nonempty interior, then the index `(K : V)` is well-defined, there is a finite set `t` satisfying the desired properties.

theorem measure_theory.measure.haar.add_index_elim {G : Type u_1} [add_group G] {K V : set G} (hK : is_compact K) (hV : (interior V).nonempty) :
(t : finset G), (K (g : G) (H : g t), (λ (h : G), g + h) ⁻¹' V)
theorem measure_theory.measure.haar.index_elim {G : Type u_1} [group G] {K V : set G} (hK : is_compact K) (hV : (interior V).nonempty) :
(t : finset G), (K (g : G) (H : g t), (λ (h : G), g * h) ⁻¹' V)
theorem measure_theory.measure.haar.le_index_mul {G : Type u_1} [group G] {V : set G} (hV : (interior V).nonempty) :
theorem measure_theory.measure.haar.index_pos {G : Type u_1} [group G] {V : set G} (hV : (interior V).nonempty) :
theorem measure_theory.measure.haar.add_index_mono {G : Type u_1} [add_group G] {K K' V : set G} (hK' : is_compact K') (h : K K') (hV : (interior V).nonempty) :
theorem measure_theory.measure.haar.index_mono {G : Type u_1} [group G] {K K' V : set G} (hK' : is_compact K') (h : K K') (hV : (interior V).nonempty) :
theorem measure_theory.measure.haar.index_union_le {G : Type u_1} [group G] (K₁ K₂ : topological_space.compacts G) {V : set G} (hV : (interior V).nonempty) :
theorem measure_theory.measure.haar.add_index_union_eq {G : Type u_1} [add_group G] (K₁ K₂ : topological_space.compacts G) {V : set G} (hV : (interior V).nonempty) (h : disjoint (K₁.carrier + -V) (K₂.carrier + -V)) :
theorem measure_theory.measure.haar.index_union_eq {G : Type u_1} [group G] (K₁ K₂ : topological_space.compacts G) {V : set G} (hV : (interior V).nonempty) (h : disjoint (K₁.carrier * V⁻¹) (K₂.carrier * V⁻¹)) :
theorem measure_theory.measure.haar.mul_left_index_le {G : Type u_1} [group G] {K : set G} (hK : is_compact K) {V : set G} (hV : (interior V).nonempty) (g : G) :
measure_theory.measure.haar.index ((λ (h : G), g * h) '' K) V
theorem measure_theory.measure.haar.add_left_add_index_le {G : Type u_1} [add_group G] {K : set G} (hK : is_compact K) {V : set G} (hV : (interior V).nonempty) (g : G) :
theorem measure_theory.measure.haar.is_left_invariant_add_index {G : Type u_1} [add_group G] {K : set G} (hK : is_compact K) (g : G) {V : set G} (hV : (interior V).nonempty) :
measure_theory.measure.haar.add_index ((λ (h : G), g + h) '' K) V =
theorem measure_theory.measure.haar.is_left_invariant_index {G : Type u_1} [group G] {K : set G} (hK : is_compact K) (g : G) {V : set G} (hV : (interior V).nonempty) :
measure_theory.measure.haar.index ((λ (h : G), g * h) '' K) V =

### Lemmas about `prehaar`#

theorem measure_theory.measure.haar.prehaar_le_index {G : Type u_1} [group G] {U : set G} (hU : (interior U).nonempty) :
theorem measure_theory.measure.haar.add_prehaar_pos {G : Type u_1} [add_group G] {U : set G} (hU : (interior U).nonempty) {K : set G} (h1K : is_compact K) (h2K : (interior K).nonempty) :
0 < {carrier := K, is_compact' := h1K}
theorem measure_theory.measure.haar.prehaar_pos {G : Type u_1} [group G] {U : set G} (hU : (interior U).nonempty) {K : set G} (h1K : is_compact K) (h2K : (interior K).nonempty) :
0 < {carrier := K, is_compact' := h1K}
theorem measure_theory.measure.haar.add_prehaar_mono {G : Type u_1} [add_group G] {U : set G} (hU : (interior U).nonempty) {K₁ K₂ : topological_space.compacts G} (h : K₁ K₂.carrier) :
theorem measure_theory.measure.haar.prehaar_mono {G : Type u_1} [group G] {U : set G} (hU : (interior U).nonempty) {K₁ K₂ : topological_space.compacts G} (h : K₁ K₂.carrier) :
theorem measure_theory.measure.haar.prehaar_self {G : Type u_1} [group G] {U : set G} (hU : (interior U).nonempty) :
theorem measure_theory.measure.haar.add_prehaar_sup_le {G : Type u_1} [add_group G] {U : set G} (K₁ K₂ : topological_space.compacts G) (hU : (interior U).nonempty) :
(K₁ K₂)
theorem measure_theory.measure.haar.prehaar_sup_le {G : Type u_1} [group G] {U : set G} (K₁ K₂ : topological_space.compacts G) (hU : (interior U).nonempty) :
(K₁ K₂)
theorem measure_theory.measure.haar.prehaar_sup_eq {G : Type u_1} [group G] {U : set G} {K₁ K₂ : topological_space.compacts G} (hU : (interior U).nonempty) (h : disjoint (K₁.carrier * U⁻¹) (K₂.carrier * U⁻¹)) :
(K₁ K₂) =
theorem measure_theory.measure.haar.add_prehaar_sup_eq {G : Type u_1} [add_group G] {U : set G} {K₁ K₂ : topological_space.compacts G} (hU : (interior U).nonempty) (h : disjoint (K₁.carrier + -U) (K₂.carrier + -U)) :
(K₁ K₂) =
theorem measure_theory.measure.haar.is_left_invariant_prehaar {G : Type u_1} [group G] {U : set G} (hU : (interior U).nonempty) (g : G)  :
(topological_space.compacts.map (λ (b : G), g * b) _ K) =
theorem measure_theory.measure.haar.is_left_invariant_add_prehaar {G : Type u_1} [add_group G] {U : set G} (hU : (interior U).nonempty) (g : G)  :
(topological_space.compacts.map (λ (b : G), g + b) _ K) =

### Lemmas about `chaar`#

noncomputable def measure_theory.measure.haar.chaar {G : Type u_1} [group G]  :

This is the "limit" of `prehaar K₀ U K` as `U` becomes a smaller and smaller open neighborhood of `(1 : G)`. More precisely, it is defined to be an arbitrary element in the intersection of all the sets `cl_prehaar K₀ V` in `haar_product K₀`. This is roughly equal to the Haar measure on compact sets, but it can differ slightly. We do know that `haar_measure K₀ (interior K) ≤ chaar K₀ K ≤ haar_measure K₀ K`.

Equations

additive version of `measure_theory.measure.haar.chaar`

Equations
theorem measure_theory.measure.haar.chaar_mono {G : Type u_1} [group G] {K₁ K₂ : topological_space.compacts G} (h : K₁ K₂) :
theorem measure_theory.measure.haar.add_chaar_mono {G : Type u_1} [add_group G] {K₁ K₂ : topological_space.compacts G} (h : K₁ K₂) :
theorem measure_theory.measure.haar.chaar_sup_le {G : Type u_1} [group G] (K₁ K₂ : topological_space.compacts G) :
(K₁ K₂)
theorem measure_theory.measure.haar.chaar_sup_eq {G : Type u_1} [group G] [t2_space G] {K₁ K₂ : topological_space.compacts G} (h : K₂.carrier) :
(K₁ K₂) =
theorem measure_theory.measure.haar.is_left_invariant_chaar {G : Type u_1} [group G] (g : G)  :
(topological_space.compacts.map (λ (b : G), g * b) _ K) =
noncomputable def measure_theory.measure.haar.haar_content {G : Type u_1} [group G] [t2_space G]  :

The function `chaar` interpreted in `ℝ≥0`, as a content

Equations
noncomputable def measure_theory.measure.haar.add_haar_content {G : Type u_1} [add_group G] [t2_space G]  :

additive version of `measure_theory.measure.haar.haar_content`

Equations

We only prove the properties for `haar_content` that we use at least twice below.

The variant of `add_chaar_self` for `add_haar_content`.

The variant of `chaar_self` for `haar_content`

The variant of `is_left_invariant_add_chaar` for `add_haar_content`

The variant of `is_left_invariant_chaar` for `haar_content`

### The Haar measure #

noncomputable def measure_theory.measure.haar_measure {G : Type u_1} [group G] [t2_space G] [borel_space G]  :

The Haar measure on the locally compact group `G`, scaled so that `haar_measure K₀ K₀ = 1`.

Equations
Instances for `measure_theory.measure.haar_measure`
noncomputable def measure_theory.measure.add_haar_measure {G : Type u_1} [add_group G] [t2_space G] [borel_space G]  :

The Haar measure on the locally compact additive group `G`, scaled so that `add_haar_measure K₀ K₀ = 1`.

Equations
Instances for `measure_theory.measure.add_haar_measure`
@[protected, instance]
@[protected, instance]
@[protected, instance]

The Haar measure is regular.

@[protected, instance]

The additive Haar measure is regular.

@[protected, instance]

The Haar measure is sigma-finite in a second countable group.

@[protected, instance]

The additive Haar measure is sigma-finite in a second countable group.

@[protected, instance]

The additive Haar measure is an additive Haar measure, i.e., it is invariant and gives finite mass to compact sets and positive mass to nonempty open sets.

@[protected, instance]

The Haar measure is a Haar measure, i.e., it is invariant and gives finite mass to compact sets and positive mass to nonempty open sets.

@[reducible]
noncomputable def measure_theory.measure.add_haar {G : Type u_1} [add_group G] [t2_space G] [borel_space G]  :

`add_haar` is some choice of a Haar measure, on a locally compact additive group.

Equations
@[reducible]
noncomputable def measure_theory.measure.haar {G : Type u_1} [group G] [t2_space G] [borel_space G]  :

`haar` is some choice of a Haar measure, on a locally compact group.

Equations

The additive Haar measure is unique up to scaling. More precisely: every σ-finite left invariant measure is a scalar multiple of the additive Haar measure. This is slightly weaker than assuming that `μ` is an additive Haar measure (in particular we don't require `μ ≠ 0`).

The Haar measure is unique up to scaling. More precisely: every σ-finite left invariant measure is a scalar multiple of the Haar measure. This is slightly weaker than assuming that `μ` is a Haar measure (in particular we don't require `μ ≠ 0`).

To show that an invariant σ-finite measure is regular it is sufficient to show that it is finite on some compact set with non-empty interior.

theorem measure_theory.measure.regular_of_is_mul_left_invariant {G : Type u_1} [group G] [t2_space G] [borel_space G] {μ : measure_theory.measure G} {K : set G} (hK : is_compact K) (h2K : (interior K).nonempty) (hμK : μ K ) :

To show that an invariant σ-finite measure is regular it is sufficient to show that it is finite on some compact set with non-empty interior.

@[protected, instance]
theorem measure_theory.measure.div_mem_nhds_one_of_haar_pos {G : Type u_1} [group G] [t2_space G] [borel_space G] (μ : measure_theory.measure G) [μ.is_haar_measure] (E : set G) (hE : measurable_set E) (hEpos : 0 < μ E) :
E / E nhds 1

Steinhaus Theorem In any locally compact group `G` with a haar measure `μ`, for any measurable set `E` of positive measure, the set `E / E` is a neighbourhood of `1`.

theorem measure_theory.measure.sub_mem_nhds_zero_of_add_haar_pos {G : Type u_1} [add_group G] [t2_space G] [borel_space G] (μ : measure_theory.measure G) (E : set G) (hE : measurable_set E) (hEpos : 0 < μ E) :
E - E nhds 0

Steinhaus Theorem In any locally compact group `G` with a haar measure `μ`, for any measurable set `E` of positive measure, the set `E - E` is a neighbourhood of `0`.

@[protected, instance]

Any Haar measure is invariant under inversion in an abelian group.

@[protected, instance]

Any additive Haar measure is invariant under negation in an abelian group.

theorem measure_theory.measure.measure_preserving.zsmul {G : Type u_1} [t2_space G] [borel_space G] (μ : measure_theory.measure G) [ ] {n : } (hn : n 0) {X : Type u_2} {μ' : measure_theory.measure X} {f : X G} (hf : μ) :
measure_theory.measure_preserving (λ (x : X), n f x) μ' μ
theorem measure_theory.measure.measure_preserving.zpow {G : Type u_1} [comm_group G] [t2_space G] [borel_space G] (μ : measure_theory.measure G) [μ.is_haar_measure] [ ] {n : } (hn : n 0) {X : Type u_2} {μ' : measure_theory.measure X} {f : X G} (hf : μ) :
measure_theory.measure_preserving (λ (x : X), f x ^ n) μ' μ