-- Mathlib/MeasureTheory/Group/FundamentalDomain.lean
@[to_additive]
lemma IsFundamentalDomain.quotientMeasure_eq [Countable G] [MeasurableSpace G] {s t : Set α}
    [SMulInvariantMeasure G α μ] [MeasurableSMul G α] (fund_dom_s : IsFundamentalDomain G s μ)
    (fund_dom_t : IsFundamentalDomain G t μ) :
    (μ.restrict s).map π = (μ.restrict t).map π

Proof state:
G : Type u_1
α : Type u_3
inst✝⁶ : Group G
inst✝⁵ : MulAction G α
inst✝⁴ : MeasurableSpace α
μ : Measure α
inst✝³ : Countable G
inst✝² : MeasurableSpace G
s t : Set α
inst✝¹ : SMulInvariantMeasure G α μ
inst✝ : MeasurableSMul G α
fund_dom_s : IsFundamentalDomain G s μ
fund_dom_t : IsFundamentalDomain G t μ
U : Set (Quotient α_mod_G)
meas_U : MeasurableSet U
g : G
x : α
⊢ ⟦g • x⟧ = ⟦x⟧

Tactic:
apply Quotient.sound

Result:
case a
G : Type u_1
α : Type u_3
inst✝⁶ : Group G
inst✝⁵ : MulAction G α
inst✝⁴ : MeasurableSpace α
μ : Measure α
inst✝³ : Countable G
inst✝² : MeasurableSpace G
s t : Set α
inst✝¹ : SMulInvariantMeasure G α μ
inst✝ : MeasurableSMul G α
fund_dom_s : IsFundamentalDomain G s μ
fund_dom_t : IsFundamentalDomain G t μ
U : Set (Quotient α_mod_G)
meas_U : MeasurableSet U
g : G
x : α
⊢ g • x ≈ x

Proof state:
case h.hA
G : Type u_1
α : Type u_3
inst✝⁶ : Group G
inst✝⁵ : MulAction G α
inst✝⁴ : MeasurableSpace α
μ : Measure α
inst✝³ : Countable G
inst✝² : MeasurableSpace G
s t : Set α
inst✝¹ : SMulInvariantMeasure G α μ
inst✝ : MeasurableSMul G α
fund_dom_s : IsFundamentalDomain G s μ
fund_dom_t : IsFundamentalDomain G t μ
U : Set (Quotient α_mod_G)
meas_U : MeasurableSet U
g : G
⊢ (fun x => g • x) ⁻¹' (Quotient.mk α_mod_G ⁻¹' U) = Quotient.mk α_mod_G ⁻¹' U

Tactic:
ext x

Result:
case h.hA.h
G : Type u_1
α : Type u_3
inst✝⁶ : Group G
inst✝⁵ : MulAction G α
inst✝⁴ : MeasurableSpace α
μ : Measure α
inst✝³ : Countable G
inst✝² : MeasurableSpace G
s t : Set α
inst✝¹ : SMulInvariantMeasure G α μ
inst✝ : MeasurableSMul G α
fund_dom_s : IsFundamentalDomain G s μ
fund_dom_t : IsFundamentalDomain G t μ
U : Set (Quotient α_mod_G)
meas_U : MeasurableSet U
g : G
x : α
⊢ x ∈ (fun x => g • x) ⁻¹' (Quotient.mk α_mod_G ⁻¹' U) ↔ x ∈ Quotient.mk α_mod_G ⁻¹' U

Proof state:
case h
G : Type u_1
α : Type u_3
inst✝⁶ : Group G
inst✝⁵ : MulAction G α
inst✝⁴ : MeasurableSpace α
μ : Measure α
inst✝³ : Countable G
inst✝² : MeasurableSpace G
s t : Set α
inst✝¹ : SMulInvariantMeasure G α μ
inst✝ : MeasurableSMul G α
fund_dom_s : IsFundamentalDomain G s μ
fund_dom_t : IsFundamentalDomain G t μ
U : Set (Quotient α_mod_G)
meas_U : MeasurableSet U
⊢ (Measure.map (Quotient.mk α_mod_G) (μ.restrict s)) U = (Measure.map (Quotient.mk α_mod_G) (μ.restrict t)) U

Tactic:
rw [measure_map_restrict_apply (meas_U := meas_U), measure_map_restrict_apply (meas_U := meas_U)]

Result:
case h
G : Type u_1
α : Type u_3
inst✝⁶ : Group G
inst✝⁵ : MulAction G α
inst✝⁴ : MeasurableSpace α
μ : Measure α
inst✝³ : Countable G
inst✝² : MeasurableSpace G
s t : Set α
inst✝¹ : SMulInvariantMeasure G α μ
inst✝ : MeasurableSMul G α
fund_dom_s : IsFundamentalDomain G s μ
fund_dom_t : IsFundamentalDomain G t μ
U : Set (Quotient α_mod_G)
meas_U : MeasurableSet U
⊢ μ (Quotient.mk α_mod_G ⁻¹' U ∩ s) = μ (Quotient.mk α_mod_G ⁻¹' U ∩ t)

Proof state:
G : Type u_1
α : Type u_3
inst✝⁶ : Group G
inst✝⁵ : MulAction G α
inst✝⁴ : MeasurableSpace α
μ : Measure α
inst✝³ : Countable G
inst✝² : MeasurableSpace G
s t : Set α
inst✝¹ : SMulInvariantMeasure G α μ
inst✝ : MeasurableSMul G α
fund_dom_s : IsFundamentalDomain G s μ
fund_dom_t : IsFundamentalDomain G t μ
⊢ Measure.map (Quotient.mk α_mod_G) (μ.restrict s) = Measure.map (Quotient.mk α_mod_G) (μ.restrict t)

Tactic:
ext U meas_U

Result:
case h
G : Type u_1
α : Type u_3
inst✝⁶ : Group G
inst✝⁵ : MulAction G α
inst✝⁴ : MeasurableSpace α
μ : Measure α
inst✝³ : Countable G
inst✝² : MeasurableSpace G
s t : Set α
inst✝¹ : SMulInvariantMeasure G α μ
inst✝ : MeasurableSMul G α
fund_dom_s : IsFundamentalDomain G s μ
fund_dom_t : IsFundamentalDomain G t μ
U : Set (Quotient α_mod_G)
meas_U : MeasurableSet U
⊢ (Measure.map (Quotient.mk α_mod_G) (μ.restrict s)) U = (Measure.map (Quotient.mk α_mod_G) (μ.restrict t)) U

Proof state:
case a
G : Type u_1
α : Type u_3
inst✝⁶ : Group G
inst✝⁵ : MulAction G α
inst✝⁴ : MeasurableSpace α
μ : Measure α
inst✝³ : Countable G
inst✝² : MeasurableSpace G
s t : Set α
inst✝¹ : SMulInvariantMeasure G α μ
inst✝ : MeasurableSMul G α
fund_dom_s : IsFundamentalDomain G s μ
fund_dom_t : IsFundamentalDomain G t μ
U : Set (Quotient α_mod_G)
meas_U : MeasurableSet U
g : G
x : α
⊢ g • x ≈ x

Tactic:
use g

Result:
no goals

Proof state:
case h.hA₀
G : Type u_1
α : Type u_3
inst✝⁶ : Group G
inst✝⁵ : MulAction G α
inst✝⁴ : MeasurableSpace α
μ : Measure α
inst✝³ : Countable G
inst✝² : MeasurableSpace G
s t : Set α
inst✝¹ : SMulInvariantMeasure G α μ
inst✝ : MeasurableSMul G α
fund_dom_s : IsFundamentalDomain G s μ
fund_dom_t : IsFundamentalDomain G t μ
U : Set (Quotient α_mod_G)
meas_U : MeasurableSet U
⊢ MeasurableSet (Quotient.mk α_mod_G ⁻¹' U)

Tactic:
exact measurableSet_quotient.mp meas_U

Result:
no goals

Proof state:
case h.hA
G : Type u_1
α : Type u_3
inst✝⁶ : Group G
inst✝⁵ : MulAction G α
inst✝⁴ : MeasurableSpace α
μ : Measure α
inst✝³ : Countable G
inst✝² : MeasurableSpace G
s t : Set α
inst✝¹ : SMulInvariantMeasure G α μ
inst✝ : MeasurableSMul G α
fund_dom_s : IsFundamentalDomain G s μ
fund_dom_t : IsFundamentalDomain G t μ
U : Set (Quotient α_mod_G)
meas_U : MeasurableSet U
⊢ ∀ (g : G), (fun x => g • x) ⁻¹' (Quotient.mk α_mod_G ⁻¹' U) = Quotient.mk α_mod_G ⁻¹' U

Tactic:
intro g

Result:
case h.hA
G : Type u_1
α : Type u_3
inst✝⁶ : Group G
inst✝⁵ : MulAction G α
inst✝⁴ : MeasurableSpace α
μ : Measure α
inst✝³ : Countable G
inst✝² : MeasurableSpace G
s t : Set α
inst✝¹ : SMulInvariantMeasure G α μ
inst✝ : MeasurableSMul G α
fund_dom_s : IsFundamentalDomain G s μ
fund_dom_t : IsFundamentalDomain G t μ
U : Set (Quotient α_mod_G)
meas_U : MeasurableSet U
g : G
⊢ (fun x => g • x) ⁻¹' (Quotient.mk α_mod_G ⁻¹' U) = Quotient.mk α_mod_G ⁻¹' U

Proof state:
case h
G : Type u_1
α : Type u_3
inst✝⁶ : Group G
inst✝⁵ : MulAction G α
inst✝⁴ : MeasurableSpace α
μ : Measure α
inst✝³ : Countable G
inst✝² : MeasurableSpace G
s t : Set α
inst✝¹ : SMulInvariantMeasure G α μ
inst✝ : MeasurableSMul G α
fund_dom_s : IsFundamentalDomain G s μ
fund_dom_t : IsFundamentalDomain G t μ
U : Set (Quotient α_mod_G)
meas_U : MeasurableSet U
⊢ μ (Quotient.mk α_mod_G ⁻¹' U ∩ s) = μ (Quotient.mk α_mod_G ⁻¹' U ∩ t)

Tactic:
apply MeasureTheory.IsFundamentalDomain.measure_set_eq fund_dom_s fund_dom_t

Result:
case h.hA₀
G : Type u_1
α : Type u_3
inst✝⁶ : Group G
inst✝⁵ : MulAction G α
inst✝⁴ : MeasurableSpace α
μ : Measure α
inst✝³ : Countable G
inst✝² : MeasurableSpace G
s t : Set α
inst✝¹ : SMulInvariantMeasure G α μ
inst✝ : MeasurableSMul G α
fund_dom_s : IsFundamentalDomain G s μ
fund_dom_t : IsFundamentalDomain G t μ
U : Set (Quotient α_mod_G)
meas_U : MeasurableSet U
⊢ MeasurableSet (Quotient.mk α_mod_G ⁻¹' U)

case h.hA
G : Type u_1
α : Type u_3
inst✝⁶ : Group G
inst✝⁵ : MulAction G α
inst✝⁴ : MeasurableSpace α
μ : Measure α
inst✝³ : Countable G
inst✝² : MeasurableSpace G
s t : Set α
inst✝¹ : SMulInvariantMeasure G α μ
inst✝ : MeasurableSMul G α
fund_dom_s : IsFundamentalDomain G s μ
fund_dom_t : IsFundamentalDomain G t μ
U : Set (Quotient α_mod_G)
meas_U : MeasurableSet U
⊢ ∀ (g : G), (fun x => g • x) ⁻¹' (Quotient.mk α_mod_G ⁻¹' U) = Quotient.mk α_mod_G ⁻¹' U