Theorem: MeasureTheory.IsFundamentalDomain.isMulLeftInvariant_map
File: Mathlib/MeasureTheory/Measure/Haar/Quotient.lean

tactic: apply Measure.ext
state_before: G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
μ : Measure G
Γ : Subgroup G
𝓕 : Set G
h𝓕 : IsFundamentalDomain { x // x ∈ ↑Subgroup.opposite Γ } 𝓕
inst✝⁵ : Countable { x // x ∈ Γ }
inst✝⁴ : MeasurableSpace (G ⧸ Γ)
inst✝³ : BorelSpace (G ⧸ Γ)
inst✝² : Subgroup.Normal Γ
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
x : G ⧸ Γ
⊢ map (fun x_1 => x * x_1) (map (↑(QuotientGroup.mk' Γ)) (Measure.restrict μ 𝓕)) =
    map (↑(QuotientGroup.mk' Γ)) (Measure.restrict μ 𝓕)

tactic: intro A hA
state_before: case h
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
μ : Measure G
Γ : Subgroup G
𝓕 : Set G
h𝓕 : IsFundamentalDomain { x // x ∈ ↑Subgroup.opposite Γ } 𝓕
inst✝⁵ : Countable { x // x ∈ Γ }
inst✝⁴ : MeasurableSpace (G ⧸ Γ)
inst✝³ : BorelSpace (G ⧸ Γ)
inst✝² : Subgroup.Normal Γ
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
x : G ⧸ Γ
⊢ ∀ (s : Set (G ⧸ Γ)),
    MeasurableSet s →
      ↑↑(map (fun x_1 => x * x_1) (map (↑(QuotientGroup.mk' Γ)) (Measure.restrict μ 𝓕))) s =
        ↑↑(map (↑(QuotientGroup.mk' Γ)) (Measure.restrict μ 𝓕)) s

tactic: obtain ⟨x₁, h⟩ := @Quotient.exists_rep _ (QuotientGroup.leftRel Γ) x
state_before: case h
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
μ : Measure G
Γ : Subgroup G
𝓕 : Set G
h𝓕 : IsFundamentalDomain { x // x ∈ ↑Subgroup.opposite Γ } 𝓕
inst✝⁵ : Countable { x // x ∈ Γ }
inst✝⁴ : MeasurableSpace (G ⧸ Γ)
inst✝³ : BorelSpace (G ⧸ Γ)
inst✝² : Subgroup.Normal Γ
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
x : G ⧸ Γ
A : Set (G ⧸ Γ)
hA : MeasurableSet A
⊢ ↑↑(map (fun x_1 => x * x_1) (map (↑(QuotientGroup.mk' Γ)) (Measure.restrict μ 𝓕))) A =
    ↑↑(map (↑(QuotientGroup.mk' Γ)) (Measure.restrict μ 𝓕)) A

tactic: haveI := h𝓕.smulInvariantMeasure_map
state_before: case h.intro
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
μ : Measure G
Γ : Subgroup G
𝓕 : Set G
h𝓕 : IsFundamentalDomain { x // x ∈ ↑Subgroup.opposite Γ } 𝓕
inst✝⁵ : Countable { x // x ∈ Γ }
inst✝⁴ : MeasurableSpace (G ⧸ Γ)
inst✝³ : BorelSpace (G ⧸ Γ)
inst✝² : Subgroup.Normal Γ
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
x : G ⧸ Γ
A : Set (G ⧸ Γ)
hA : MeasurableSet A
x₁ : G
h : Quotient.mk (QuotientGroup.leftRel Γ) x₁ = x
⊢ ↑↑(map (fun x_1 => x * x_1) (map (↑(QuotientGroup.mk' Γ)) (Measure.restrict μ 𝓕))) A =
    ↑↑(map (↑(QuotientGroup.mk' Γ)) (Measure.restrict μ 𝓕)) A

tactic: convert measure_preimage_smul x₁ ((Measure.map QuotientGroup.mk) (μ.restrict 𝓕)) A using 1
state_before: case h.intro
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
μ : Measure G
Γ : Subgroup G
𝓕 : Set G
h𝓕 : IsFundamentalDomain { x // x ∈ ↑Subgroup.opposite Γ } 𝓕
inst✝⁵ : Countable { x // x ∈ Γ }
inst✝⁴ : MeasurableSpace (G ⧸ Γ)
inst✝³ : BorelSpace (G ⧸ Γ)
inst✝² : Subgroup.Normal Γ
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
x : G ⧸ Γ
A : Set (G ⧸ Γ)
hA : MeasurableSet A
x₁ : G
h : Quotient.mk (QuotientGroup.leftRel Γ) x₁ = x
this : SMulInvariantMeasure G (G ⧸ Γ) (map QuotientGroup.mk (Measure.restrict μ 𝓕))
⊢ ↑↑(map (fun x_1 => x * x_1) (map (↑(QuotientGroup.mk' Γ)) (Measure.restrict μ 𝓕))) A =
    ↑↑(map (↑(QuotientGroup.mk' Γ)) (Measure.restrict μ 𝓕)) A

tactic: rw [← h, Measure.map_apply]
state_before: case h.e'_2
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
μ : Measure G
Γ : Subgroup G
𝓕 : Set G
h𝓕 : IsFundamentalDomain { x // x ∈ ↑Subgroup.opposite Γ } 𝓕
inst✝⁵ : Countable { x // x ∈ Γ }
inst✝⁴ : MeasurableSpace (G ⧸ Γ)
inst✝³ : BorelSpace (G ⧸ Γ)
inst✝² : Subgroup.Normal Γ
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
x : G ⧸ Γ
A : Set (G ⧸ Γ)
hA : MeasurableSet A
x₁ : G
h : Quotient.mk (QuotientGroup.leftRel Γ) x₁ = x
this : SMulInvariantMeasure G (G ⧸ Γ) (map QuotientGroup.mk (Measure.restrict μ 𝓕))
⊢ ↑↑(map (fun x_1 => x * x_1) (map (↑(QuotientGroup.mk' Γ)) (Measure.restrict μ 𝓕))) A =
    ↑↑(map QuotientGroup.mk (Measure.restrict μ 𝓕)) ((fun x => x₁ • x) ⁻¹' A)

tactic: rfl
state_before: case h.e'_2
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
μ : Measure G
Γ : Subgroup G
𝓕 : Set G
h𝓕 : IsFundamentalDomain { x // x ∈ ↑Subgroup.opposite Γ } 𝓕
inst✝⁵ : Countable { x // x ∈ Γ }
inst✝⁴ : MeasurableSpace (G ⧸ Γ)
inst✝³ : BorelSpace (G ⧸ Γ)
inst✝² : Subgroup.Normal Γ
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
x : G ⧸ Γ
A : Set (G ⧸ Γ)
hA : MeasurableSet A
x₁ : G
h : Quotient.mk (QuotientGroup.leftRel Γ) x₁ = x
this : SMulInvariantMeasure G (G ⧸ Γ) (map QuotientGroup.mk (Measure.restrict μ 𝓕))
⊢ ↑↑(map (↑(QuotientGroup.mk' Γ)) (Measure.restrict μ 𝓕))
      ((fun x => Quotient.mk (QuotientGroup.leftRel Γ) x₁ * x) ⁻¹' A) =
    ↑↑(map QuotientGroup.mk (Measure.restrict μ 𝓕)) ((fun x => x₁ • x) ⁻¹' A)

tactic: exact measurable_const_mul _
state_before: case h.e'_2.hf
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
μ : Measure G
Γ : Subgroup G
𝓕 : Set G
h𝓕 : IsFundamentalDomain { x // x ∈ ↑Subgroup.opposite Γ } 𝓕
inst✝⁵ : Countable { x // x ∈ Γ }
inst✝⁴ : MeasurableSpace (G ⧸ Γ)
inst✝³ : BorelSpace (G ⧸ Γ)
inst✝² : Subgroup.Normal Γ
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
x : G ⧸ Γ
A : Set (G ⧸ Γ)
hA : MeasurableSet A
x₁ : G
h : Quotient.mk (QuotientGroup.leftRel Γ) x₁ = x
this : SMulInvariantMeasure G (G ⧸ Γ) (map QuotientGroup.mk (Measure.restrict μ 𝓕))
⊢ Measurable fun x => Quotient.mk (QuotientGroup.leftRel Γ) x₁ * x

tactic: exact hA
state_before: case h.e'_2.hs
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
μ : Measure G
Γ : Subgroup G
𝓕 : Set G
h𝓕 : IsFundamentalDomain { x // x ∈ ↑Subgroup.opposite Γ } 𝓕
inst✝⁵ : Countable { x // x ∈ Γ }
inst✝⁴ : MeasurableSpace (G ⧸ Γ)
inst✝³ : BorelSpace (G ⧸ Γ)
inst✝² : Subgroup.Normal Γ
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
x : G ⧸ Γ
A : Set (G ⧸ Γ)
hA : MeasurableSet A
x₁ : G
h : Quotient.mk (QuotientGroup.leftRel Γ) x₁ = x
this : SMulInvariantMeasure G (G ⧸ Γ) (map QuotientGroup.mk (Measure.restrict μ 𝓕))
⊢ MeasurableSet A