Theorem: MeasureTheory.AddQuotientMeasureEqMeasurePreimage.vaddInvariantMeasure_quotient
File: Mathlib/MeasureTheory/Measure/Haar/Quotient.lean

Proof steps:
state_before: G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
inst✝⁵ : PolishSpace G
ν : Measure G
Γ : Subgroup G
inst✝⁴ : Countable ↥Γ
inst✝³ : T2Space (G ⧸ Γ)
inst✝² : SecondCountableTopology (G ⧸ Γ)
μ : Measure (G ⧸ Γ)
inst✝¹ : QuotientMeasureEqMeasurePreimage ν μ
inst✝ : ν.IsMulLeftInvariant
hasFun : HasFundamentalDomain (↥Γ.op) G ν
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
⊢ μ ((fun x => g • x) ⁻¹' A) = μ A
state_after: G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
inst✝⁵ : PolishSpace G
ν : Measure G
Γ : Subgroup G
inst✝⁴ : Countable ↥Γ
inst✝³ : T2Space (G ⧸ Γ)
inst✝² : SecondCountableTopology (G ⧸ Γ)
μ : Measure (G ⧸ Γ)
inst✝¹ : QuotientMeasureEqMeasurePreimage ν μ
inst✝ : ν.IsMulLeftInvariant
hasFun : HasFundamentalDomain (↥Γ.op) G ν
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
meas_π : Measurable QuotientGroup.mk
⊢ μ ((fun x => g • x) ⁻¹' A) = μ A
tactic: have meas_π : Measurable π := continuous_quotient_mk'.measurable
state_before: G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
inst✝⁵ : PolishSpace G
ν : Measure G
Γ : Subgroup G
inst✝⁴ : Countable ↥Γ
inst✝³ : T2Space (G ⧸ Γ)
inst✝² : SecondCountableTopology (G ⧸ Γ)
μ : Measure (G ⧸ Γ)
inst✝¹ : QuotientMeasureEqMeasurePreimage ν μ
inst✝ : ν.IsMulLeftInvariant
hasFun : HasFundamentalDomain (↥Γ.op) G ν
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
meas_π : Measurable QuotientGroup.mk
⊢ μ ((fun x => g • x) ⁻¹' A) = μ A
state_after: case intro
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
inst✝⁵ : PolishSpace G
ν : Measure G
Γ : Subgroup G
inst✝⁴ : Countable ↥Γ
inst✝³ : T2Space (G ⧸ Γ)
inst✝² : SecondCountableTopology (G ⧸ Γ)
μ : Measure (G ⧸ Γ)
inst✝¹ : QuotientMeasureEqMeasurePreimage ν μ
inst✝ : ν.IsMulLeftInvariant
hasFun : HasFundamentalDomain (↥Γ.op) G ν
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
meas_π : Measurable QuotientGroup.mk
𝓕 : Set G
h𝓕 : IsFundamentalDomain (↥Γ.op) 𝓕 ν
⊢ μ ((fun x => g • x) ⁻¹' A) = μ A
tactic: obtain ⟨𝓕, h𝓕⟩ := hasFun.ExistsIsFundamentalDomain
state_before: case intro
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
inst✝⁵ : PolishSpace G
ν : Measure G
Γ : Subgroup G
inst✝⁴ : Countable ↥Γ
inst✝³ : T2Space (G ⧸ Γ)
inst✝² : SecondCountableTopology (G ⧸ Γ)
μ : Measure (G ⧸ Γ)
inst✝¹ : QuotientMeasureEqMeasurePreimage ν μ
inst✝ : ν.IsMulLeftInvariant
hasFun : HasFundamentalDomain (↥Γ.op) G ν
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
meas_π : Measurable QuotientGroup.mk
𝓕 : Set G
h𝓕 : IsFundamentalDomain (↥Γ.op) 𝓕 ν
⊢ μ ((fun x => g • x) ⁻¹' A) = μ A
state_after: case intro
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
inst✝⁵ : PolishSpace G
ν : Measure G
Γ : Subgroup G
inst✝⁴ : Countable ↥Γ
inst✝³ : T2Space (G ⧸ Γ)
inst✝² : SecondCountableTopology (G ⧸ Γ)
μ : Measure (G ⧸ Γ)
inst✝¹ : QuotientMeasureEqMeasurePreimage ν μ
inst✝ : ν.IsMulLeftInvariant
hasFun : HasFundamentalDomain (↥Γ.op) G ν
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
meas_π : Measurable QuotientGroup.mk
𝓕 : Set G
h𝓕 : IsFundamentalDomain (↥Γ.op) 𝓕 ν
h𝓕_translate_fundom : IsFundamentalDomain (↥Γ.op) (g • 𝓕) ν
⊢ μ ((fun x => g • x) ⁻¹' A) = μ A
tactic: have h𝓕_translate_fundom : IsFundamentalDomain Γ.op (g • 𝓕) ν := h𝓕.smul_of_comm g
state_before: case intro
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
inst✝⁵ : PolishSpace G
ν : Measure G
Γ : Subgroup G
inst✝⁴ : Countable ↥Γ
inst✝³ : T2Space (G ⧸ Γ)
inst✝² : SecondCountableTopology (G ⧸ Γ)
μ : Measure (G ⧸ Γ)
inst✝¹ : QuotientMeasureEqMeasurePreimage ν μ
inst✝ : ν.IsMulLeftInvariant
hasFun : HasFundamentalDomain (↥Γ.op) G ν
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
meas_π : Measurable QuotientGroup.mk
𝓕 : Set G
h𝓕 : IsFundamentalDomain (↥Γ.op) 𝓕 ν
h𝓕_translate_fundom : IsFundamentalDomain (↥Γ.op) (g • 𝓕) ν
⊢ μ ((fun x => g • x) ⁻¹' A) = μ A
state_after: case intro
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
inst✝⁵ : PolishSpace G
ν : Measure G
Γ : Subgroup G
inst✝⁴ : Countable ↥Γ
inst✝³ : T2Space (G ⧸ Γ)
inst✝² : SecondCountableTopology (G ⧸ Γ)
μ : Measure (G ⧸ Γ)
inst✝¹ : QuotientMeasureEqMeasurePreimage ν μ
inst✝ : ν.IsMulLeftInvariant
hasFun : HasFundamentalDomain (↥Γ.op) G ν
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
meas_π : Measurable QuotientGroup.mk
𝓕 : Set G
h𝓕 : IsFundamentalDomain (↥Γ.op) 𝓕 ν
h𝓕_translate_fundom : IsFundamentalDomain (↥Γ.op) (g • 𝓕) ν
⊢ ν (Quotient.mk (MulAction.orbitRel (↥Γ.op) G) ⁻¹' ((fun x => g • x) ⁻¹' A) ∩ 𝓕) =
    ν (Quotient.mk (MulAction.orbitRel (↥Γ.op) G) ⁻¹' A ∩ g • 𝓕)
tactic: erw [h𝓕.projection_respects_measure_apply (μ := μ)
      (meas_π (measurableSet_preimage (measurable_const_smul g) hA)),
      h𝓕_translate_fundom.projection_respects_measure_apply (μ := μ) hA]
state_before: case intro
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
inst✝⁵ : PolishSpace G
ν : Measure G
Γ : Subgroup G
inst✝⁴ : Countable ↥Γ
inst✝³ : T2Space (G ⧸ Γ)
inst✝² : SecondCountableTopology (G ⧸ Γ)
μ : Measure (G ⧸ Γ)
inst✝¹ : QuotientMeasureEqMeasurePreimage ν μ
inst✝ : ν.IsMulLeftInvariant
hasFun : HasFundamentalDomain (↥Γ.op) G ν
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
meas_π : Measurable QuotientGroup.mk
𝓕 : Set G
h𝓕 : IsFundamentalDomain (↥Γ.op) 𝓕 ν
h𝓕_translate_fundom : IsFundamentalDomain (↥Γ.op) (g • 𝓕) ν
⊢ ν (Quotient.mk (MulAction.orbitRel (↥Γ.op) G) ⁻¹' ((fun x => g • x) ⁻¹' A) ∩ 𝓕) =
    ν (Quotient.mk (MulAction.orbitRel (↥Γ.op) G) ⁻¹' A ∩ g • 𝓕)
state_after: case intro
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
inst✝⁵ : PolishSpace G
ν : Measure G
Γ : Subgroup G
inst✝⁴ : Countable ↥Γ
inst✝³ : T2Space (G ⧸ Γ)
inst✝² : SecondCountableTopology (G ⧸ Γ)
μ : Measure (G ⧸ Γ)
inst✝¹ : QuotientMeasureEqMeasurePreimage ν μ
inst✝ : ν.IsMulLeftInvariant
hasFun : HasFundamentalDomain (↥Γ.op) G ν
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
meas_π : Measurable QuotientGroup.mk
𝓕 : Set G
h𝓕 : IsFundamentalDomain (↥Γ.op) 𝓕 ν
h𝓕_translate_fundom : IsFundamentalDomain (↥Γ.op) (g • 𝓕) ν
⊢ ν (QuotientGroup.mk ⁻¹' ((fun x => g • x) ⁻¹' A) ∩ 𝓕) = ν (QuotientGroup.mk ⁻¹' A ∩ g • 𝓕)
tactic: change ν ((π ⁻¹' _) ∩ _) = ν ((π ⁻¹' _) ∩ _)
state_before: case intro
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
inst✝⁵ : PolishSpace G
ν : Measure G
Γ : Subgroup G
inst✝⁴ : Countable ↥Γ
inst✝³ : T2Space (G ⧸ Γ)
inst✝² : SecondCountableTopology (G ⧸ Γ)
μ : Measure (G ⧸ Γ)
inst✝¹ : QuotientMeasureEqMeasurePreimage ν μ
inst✝ : ν.IsMulLeftInvariant
hasFun : HasFundamentalDomain (↥Γ.op) G ν
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
meas_π : Measurable QuotientGroup.mk
𝓕 : Set G
h𝓕 : IsFundamentalDomain (↥Γ.op) 𝓕 ν
h𝓕_translate_fundom : IsFundamentalDomain (↥Γ.op) (g • 𝓕) ν
⊢ ν (QuotientGroup.mk ⁻¹' ((fun x => g • x) ⁻¹' A) ∩ 𝓕) = ν (QuotientGroup.mk ⁻¹' A ∩ g • 𝓕)
state_after: case intro
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
inst✝⁵ : PolishSpace G
ν : Measure G
Γ : Subgroup G
inst✝⁴ : Countable ↥Γ
inst✝³ : T2Space (G ⧸ Γ)
inst✝² : SecondCountableTopology (G ⧸ Γ)
μ : Measure (G ⧸ Γ)
inst✝¹ : QuotientMeasureEqMeasurePreimage ν μ
inst✝ : ν.IsMulLeftInvariant
hasFun : HasFundamentalDomain (↥Γ.op) G ν
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
meas_π : Measurable QuotientGroup.mk
𝓕 : Set G
h𝓕 : IsFundamentalDomain (↥Γ.op) 𝓕 ν
h𝓕_translate_fundom : IsFundamentalDomain (↥Γ.op) (g • 𝓕) ν
π_preA : Set G := QuotientGroup.mk ⁻¹' A
⊢ ν (QuotientGroup.mk ⁻¹' ((fun x => g • x) ⁻¹' A) ∩ 𝓕) = ν (π_preA ∩ g • 𝓕)
tactic: set π_preA := π ⁻¹' A
state_before: case intro
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
inst✝⁵ : PolishSpace G
ν : Measure G
Γ : Subgroup G
inst✝⁴ : Countable ↥Γ
inst✝³ : T2Space (G ⧸ Γ)
inst✝² : SecondCountableTopology (G ⧸ Γ)
μ : Measure (G ⧸ Γ)
inst✝¹ : QuotientMeasureEqMeasurePreimage ν μ
inst✝ : ν.IsMulLeftInvariant
hasFun : HasFundamentalDomain (↥Γ.op) G ν
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
meas_π : Measurable QuotientGroup.mk
𝓕 : Set G
h𝓕 : IsFundamentalDomain (↥Γ.op) 𝓕 ν
h𝓕_translate_fundom : IsFundamentalDomain (↥Γ.op) (g • 𝓕) ν
π_preA : Set G := QuotientGroup.mk ⁻¹' A
this : QuotientGroup.mk ⁻¹' ((fun x => g • x) ⁻¹' A) = (fun x => g * x) ⁻¹' π_preA
⊢ ν (QuotientGroup.mk ⁻¹' ((fun x => g • x) ⁻¹' A) ∩ 𝓕) = ν (π_preA ∩ g • 𝓕)
state_after: case intro
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
inst✝⁵ : PolishSpace G
ν : Measure G
Γ : Subgroup G
inst✝⁴ : Countable ↥Γ
inst✝³ : T2Space (G ⧸ Γ)
inst✝² : SecondCountableTopology (G ⧸ Γ)
μ : Measure (G ⧸ Γ)
inst✝¹ : QuotientMeasureEqMeasurePreimage ν μ
inst✝ : ν.IsMulLeftInvariant
hasFun : HasFundamentalDomain (↥Γ.op) G ν
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
meas_π : Measurable QuotientGroup.mk
𝓕 : Set G
h𝓕 : IsFundamentalDomain (↥Γ.op) 𝓕 ν
h𝓕_translate_fundom : IsFundamentalDomain (↥Γ.op) (g • 𝓕) ν
π_preA : Set G := QuotientGroup.mk ⁻¹' A
this : QuotientGroup.mk ⁻¹' ((fun x => g • x) ⁻¹' A) = (fun x => g * x) ⁻¹' π_preA
⊢ ν ((fun x => g * x) ⁻¹' π_preA ∩ 𝓕) = ν (π_preA ∩ g • 𝓕)
tactic: rw [this]
state_before: case intro
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
inst✝⁵ : PolishSpace G
ν : Measure G
Γ : Subgroup G
inst✝⁴ : Countable ↥Γ
inst✝³ : T2Space (G ⧸ Γ)
inst✝² : SecondCountableTopology (G ⧸ Γ)
μ : Measure (G ⧸ Γ)
inst✝¹ : QuotientMeasureEqMeasurePreimage ν μ
inst✝ : ν.IsMulLeftInvariant
hasFun : HasFundamentalDomain (↥Γ.op) G ν
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
meas_π : Measurable QuotientGroup.mk
𝓕 : Set G
h𝓕 : IsFundamentalDomain (↥Γ.op) 𝓕 ν
h𝓕_translate_fundom : IsFundamentalDomain (↥Γ.op) (g • 𝓕) ν
π_preA : Set G := QuotientGroup.mk ⁻¹' A
this✝ : QuotientGroup.mk ⁻¹' ((fun x => g • x) ⁻¹' A) = (fun x => g * x) ⁻¹' π_preA
this : ν ((fun x => g * x) ⁻¹' π_preA ∩ 𝓕) = ν (π_preA ∩ (fun x => g⁻¹ * x) ⁻¹' 𝓕)
⊢ ν ((fun x => g * x) ⁻¹' π_preA ∩ 𝓕) = ν (π_preA ∩ g • 𝓕)
state_after: case intro
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
inst✝⁵ : PolishSpace G
ν : Measure G
Γ : Subgroup G
inst✝⁴ : Countable ↥Γ
inst✝³ : T2Space (G ⧸ Γ)
inst✝² : SecondCountableTopology (G ⧸ Γ)
μ : Measure (G ⧸ Γ)
inst✝¹ : QuotientMeasureEqMeasurePreimage ν μ
inst✝ : ν.IsMulLeftInvariant
hasFun : HasFundamentalDomain (↥Γ.op) G ν
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
meas_π : Measurable QuotientGroup.mk
𝓕 : Set G
h𝓕 : IsFundamentalDomain (↥Γ.op) 𝓕 ν
h𝓕_translate_fundom : IsFundamentalDomain (↥Γ.op) (g • 𝓕) ν
π_preA : Set G := QuotientGroup.mk ⁻¹' A
this✝ : QuotientGroup.mk ⁻¹' ((fun x => g • x) ⁻¹' A) = (fun x => g * x) ⁻¹' π_preA
this : ν ((fun x => g * x) ⁻¹' π_preA ∩ 𝓕) = ν (π_preA ∩ (fun x => g⁻¹ * x) ⁻¹' 𝓕)
⊢ ν (π_preA ∩ (fun x => g⁻¹ * x) ⁻¹' 𝓕) = ν (π_preA ∩ (fun x => g⁻¹ • x) ⁻¹' 𝓕)
tactic: rw [this, ← preimage_smul_inv]
state_before: case intro
G : Type u_1
inst✝¹⁰ : Group G
inst✝⁹ : MeasurableSpace G
inst✝⁸ : TopologicalSpace G
inst✝⁷ : TopologicalGroup G
inst✝⁶ : BorelSpace G
inst✝⁵ : PolishSpace G
ν : Measure G
Γ : Subgroup G
inst✝⁴ : Countable ↥Γ
inst✝³ : T2Space (G ⧸ Γ)
inst✝² : SecondCountableTopology (G ⧸ Γ)
μ : Measure (G ⧸ Γ)
inst✝¹ : QuotientMeasureEqMeasurePreimage ν μ
inst✝ : ν.IsMulLeftInvariant
hasFun : HasFundamentalDomain (↥Γ.op) G ν
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
meas_π : Measurable QuotientGroup.mk
𝓕 : Set G
h𝓕 : IsFundamentalDomain (↥Γ.op) 𝓕 ν
h𝓕_translate_fundom : IsFundamentalDomain (↥Γ.op) (g • 𝓕) ν
π_preA : Set G := QuotientGroup.mk ⁻¹' A
this✝ : QuotientGroup.mk ⁻¹' ((fun x => g • x) ⁻¹' A) = (fun x => g * x) ⁻¹' π_preA
this : ν ((fun x => g * x) ⁻¹' π_preA ∩ 𝓕) = ν (π_preA ∩ (fun x => g⁻¹ * x) ⁻¹' 𝓕)
⊢ ν (π_preA ∩ (fun x => g⁻¹ * x) ⁻¹' 𝓕) = ν (π_preA ∩ (fun x => g⁻¹ • x) ⁻¹' 𝓕)
state_after: no goals
tactic: rfl