l3lab/ntp-mathlib huggingface dataset:
def union (self : UnionFind α) (x y : Fin self.size) : UnionFind α :=
  let ⟨self₁, rx, e, _⟩ := self.find x
  let ⟨self₂, ry, e, hry⟩ := self₁.find ⟨y, by rw [e]; exact y.2⟩
  self₂.link ⟨rx, by 

Proof state:
α : Type ?u.102659
self : UnionFind α
x y : Fin (size self)
self₁ : UnionFind α
rx : Fin (size self₁)
e✝ : size self₁ = size self
right✝ : (Array.get self₁.arr rx).parent = ↑rx
self₂ : UnionFind α
ry : Fin (size self₂)
e : size self₂ = size self₁
hry : (Array.get self₂.arr ry).parent = ↑ry
⊢ ↑rx < size self₂

Next tactic:
rw [e]
def union (self : UnionFind α) (x y : Fin self.size) : UnionFind α :=
  let ⟨self₁, rx, e, _⟩ := self.find x
  let ⟨self₂, ry, e, hry⟩ := self₁.find ⟨y, by rw [e]; exact y.2⟩
  self₂.link ⟨rx, by rw [e]; 

Proof state:
α : Type ?u.102659
self : UnionFind α
x y : Fin (size self)
self₁ : UnionFind α
rx : Fin (size self₁)
e✝ : size self₁ = size self
right✝ : (Array.get self₁.arr rx).parent = ↑rx
self₂ : UnionFind α
ry : Fin (size self₂)
e : size self₂ = size self₁
hry : (Array.get self₂.arr ry).parent = ↑ry
⊢ ↑rx < size self₁

Next tactic:
exact rx.2
/-- The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and right-
  invariant measure on `G` to a fundamental domain `𝓕` is a `G`-invariant measure on `G ⧸ Γ`. -/
@[to_additive "The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and
  right-invariant measure on an additive topological group `G` to a fundamental domain `𝓕` is a
  `G`-invariant measure on `G ⧸ Γ`."]
theorem MeasureTheory.IsFundamentalDomain.smulInvariantMeasure_map [μ.IsMulLeftInvariant]
    [μ.IsMulRightInvariant] :
    SMulInvariantMeasure G (G ⧸ Γ) (Measure.map QuotientGroup.mk (μ.restrict 𝓕)) where
  measure_preimage_smul g A hA := by
    

Proof state:
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 (↥(Subgroup.op Γ)) 𝓕
inst✝⁴ : Countable ↥Γ
inst✝³ : MeasurableSpace (G ⧸ Γ)
inst✝² : BorelSpace (G ⧸ Γ)
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
⊢ ↑↑(map QuotientGroup.mk (Measure.restrict μ 𝓕)) ((fun x => g • x) ⁻¹' A) =
    ↑↑(map QuotientGroup.mk (Measure.restrict μ 𝓕)) A

Next tactic:
let π : G → G ⧸ Γ := QuotientGroup.mk
/-- The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and right-
  invariant measure on `G` to a fundamental domain `𝓕` is a `G`-invariant measure on `G ⧸ Γ`. -/
@[to_additive "The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and
  right-invariant measure on an additive topological group `G` to a fundamental domain `𝓕` is a
  `G`-invariant measure on `G ⧸ Γ`."]
theorem MeasureTheory.IsFundamentalDomain.smulInvariantMeasure_map [μ.IsMulLeftInvariant]
    [μ.IsMulRightInvariant] :
    SMulInvariantMeasure G (G ⧸ Γ) (Measure.map QuotientGroup.mk (μ.restrict 𝓕)) where
  measure_preimage_smul g A hA := by
    let π : G → G ⧸ Γ := QuotientGroup.mk
    

Proof state:
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 (↥(Subgroup.op Γ)) 𝓕
inst✝⁴ : Countable ↥Γ
inst✝³ : MeasurableSpace (G ⧸ Γ)
inst✝² : BorelSpace (G ⧸ Γ)
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
π : G → G ⧸ Γ := QuotientGroup.mk
⊢ ↑↑(map QuotientGroup.mk (Measure.restrict μ 𝓕)) ((fun x => g • x) ⁻¹' A) =
    ↑↑(map QuotientGroup.mk (Measure.restrict μ 𝓕)) A

Next tactic:
have meas_π : Measurable π := continuous_quotient_mk'.measurable
/-- The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and right-
  invariant measure on `G` to a fundamental domain `𝓕` is a `G`-invariant measure on `G ⧸ Γ`. -/
@[to_additive "The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and
  right-invariant measure on an additive topological group `G` to a fundamental domain `𝓕` is a
  `G`-invariant measure on `G ⧸ Γ`."]
theorem MeasureTheory.IsFundamentalDomain.smulInvariantMeasure_map [μ.IsMulLeftInvariant]
    [μ.IsMulRightInvariant] :
    SMulInvariantMeasure G (G ⧸ Γ) (Measure.map QuotientGroup.mk (μ.restrict 𝓕)) where
  measure_preimage_smul g A hA := by
    let π : G → G ⧸ Γ := QuotientGroup.mk
    have meas_π : Measurable π := continuous_quotient_mk'.measurable
    

Proof state:
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 (↥(Subgroup.op Γ)) 𝓕
inst✝⁴ : Countable ↥Γ
inst✝³ : MeasurableSpace (G ⧸ Γ)
inst✝² : BorelSpace (G ⧸ Γ)
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
π : G → G ⧸ Γ := QuotientGroup.mk
meas_π : Measurable π
⊢ ↑↑(map QuotientGroup.mk (Measure.restrict μ 𝓕)) ((fun x => g • x) ⁻¹' A) =
    ↑↑(map QuotientGroup.mk (Measure.restrict μ 𝓕)) A

Next tactic:
have 𝓕meas : NullMeasurableSet 𝓕 μ := h𝓕.nullMeasurableSet
/-- The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and right-
  invariant measure on `G` to a fundamental domain `𝓕` is a `G`-invariant measure on `G ⧸ Γ`. -/
@[to_additive "The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and
  right-invariant measure on an additive topological group `G` to a fundamental domain `𝓕` is a
  `G`-invariant measure on `G ⧸ Γ`."]
theorem MeasureTheory.IsFundamentalDomain.smulInvariantMeasure_map [μ.IsMulLeftInvariant]
    [μ.IsMulRightInvariant] :
    SMulInvariantMeasure G (G ⧸ Γ) (Measure.map QuotientGroup.mk (μ.restrict 𝓕)) where
  measure_preimage_smul g A hA := by
    let π : G → G ⧸ Γ := QuotientGroup.mk
    have meas_π : Measurable π := continuous_quotient_mk'.measurable
    have 𝓕meas : NullMeasurableSet 𝓕 μ := h𝓕.nullMeasurableSet
    

Proof state:
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 (↥(Subgroup.op Γ)) 𝓕
inst✝⁴ : Countable ↥Γ
inst✝³ : MeasurableSpace (G ⧸ Γ)
inst✝² : BorelSpace (G ⧸ Γ)
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
π : G → G ⧸ Γ := QuotientGroup.mk
meas_π : Measurable π
𝓕meas : NullMeasurableSet 𝓕
⊢ ↑↑(map QuotientGroup.mk (Measure.restrict μ 𝓕)) ((fun x => g • x) ⁻¹' A) =
    ↑↑(map QuotientGroup.mk (Measure.restrict μ 𝓕)) A

Next tactic:
have meas_πA : MeasurableSet (π ⁻¹' A) := measurableSet_preimage meas_π hA
/-- The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and right-
  invariant measure on `G` to a fundamental domain `𝓕` is a `G`-invariant measure on `G ⧸ Γ`. -/
@[to_additive "The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and
  right-invariant measure on an additive topological group `G` to a fundamental domain `𝓕` is a
  `G`-invariant measure on `G ⧸ Γ`."]
theorem MeasureTheory.IsFundamentalDomain.smulInvariantMeasure_map [μ.IsMulLeftInvariant]
    [μ.IsMulRightInvariant] :
    SMulInvariantMeasure G (G ⧸ Γ) (Measure.map QuotientGroup.mk (μ.restrict 𝓕)) where
  measure_preimage_smul g A hA := by
    let π : G → G ⧸ Γ := QuotientGroup.mk
    have meas_π : Measurable π := continuous_quotient_mk'.measurable
    have 𝓕meas : NullMeasurableSet 𝓕 μ := h𝓕.nullMeasurableSet
    have meas_πA : MeasurableSet (π ⁻¹' A) := measurableSet_preimage meas_π hA
    

Proof state:
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 (↥(Subgroup.op Γ)) 𝓕
inst✝⁴ : Countable ↥Γ
inst✝³ : MeasurableSpace (G ⧸ Γ)
inst✝² : BorelSpace (G ⧸ Γ)
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
π : G → G ⧸ Γ := QuotientGroup.mk
meas_π : Measurable π
𝓕meas : NullMeasurableSet 𝓕
meas_πA : MeasurableSet (π ⁻¹' A)
⊢ ↑↑(map QuotientGroup.mk (Measure.restrict μ 𝓕)) ((fun x => g • x) ⁻¹' A) =
    ↑↑(map QuotientGroup.mk (Measure.restrict μ 𝓕)) A

Next tactic:
rw [Measure.map_apply meas_π hA,
      Measure.map_apply meas_π (measurableSet_preimage (measurable_const_smul g) hA),
      Measure.restrict_apply₀' 𝓕meas, Measure.restrict_apply₀' 𝓕meas]
/-- The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and right-
  invariant measure on `G` to a fundamental domain `𝓕` is a `G`-invariant measure on `G ⧸ Γ`. -/
@[to_additive "The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and
  right-invariant measure on an additive topological group `G` to a fundamental domain `𝓕` is a
  `G`-invariant measure on `G ⧸ Γ`."]
theorem MeasureTheory.IsFundamentalDomain.smulInvariantMeasure_map [μ.IsMulLeftInvariant]
    [μ.IsMulRightInvariant] :
    SMulInvariantMeasure G (G ⧸ Γ) (Measure.map QuotientGroup.mk (μ.restrict 𝓕)) where
  measure_preimage_smul g A hA := by
    let π : G → G ⧸ Γ := QuotientGroup.mk
    have meas_π : Measurable π := continuous_quotient_mk'.measurable
    have 𝓕meas : NullMeasurableSet 𝓕 μ := h𝓕.nullMeasurableSet
    have meas_πA : MeasurableSet (π ⁻¹' A) := measurableSet_preimage meas_π hA
    rw [Measure.map_apply meas_π hA,
      Measure.map_apply meas_π (measurableSet_preimage (measurable_const_smul g) hA),
      Measure.restrict_apply₀' 𝓕meas, Measure.restrict_apply₀' 𝓕meas]
    

Proof state:
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 (↥(Subgroup.op Γ)) 𝓕
inst✝⁴ : Countable ↥Γ
inst✝³ : MeasurableSpace (G ⧸ Γ)
inst✝² : BorelSpace (G ⧸ Γ)
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
π : G → G ⧸ Γ := QuotientGroup.mk
meas_π : Measurable π
𝓕meas : NullMeasurableSet 𝓕
meas_πA : MeasurableSet (π ⁻¹' A)
⊢ ↑↑μ (π ⁻¹' ((fun x => g • x) ⁻¹' A) ∩ 𝓕) = ↑↑μ (π ⁻¹' A ∩ 𝓕)

Next tactic:
set π_preA := π ⁻¹' A
/-- The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and right-
  invariant measure on `G` to a fundamental domain `𝓕` is a `G`-invariant measure on `G ⧸ Γ`. -/
@[to_additive "The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and
  right-invariant measure on an additive topological group `G` to a fundamental domain `𝓕` is a
  `G`-invariant measure on `G ⧸ Γ`."]
theorem MeasureTheory.IsFundamentalDomain.smulInvariantMeasure_map [μ.IsMulLeftInvariant]
    [μ.IsMulRightInvariant] :
    SMulInvariantMeasure G (G ⧸ Γ) (Measure.map QuotientGroup.mk (μ.restrict 𝓕)) where
  measure_preimage_smul g A hA := by
    let π : G → G ⧸ Γ := QuotientGroup.mk
    have meas_π : Measurable π := continuous_quotient_mk'.measurable
    have 𝓕meas : NullMeasurableSet 𝓕 μ := h𝓕.nullMeasurableSet
    have meas_πA : MeasurableSet (π ⁻¹' A) := measurableSet_preimage meas_π hA
    rw [Measure.map_apply meas_π hA,
      Measure.map_apply meas_π (measurableSet_preimage (measurable_const_smul g) hA),
      Measure.restrict_apply₀' 𝓕meas, Measure.restrict_apply₀' 𝓕meas]
    set π_preA := π ⁻¹' A
    

Proof state:
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 (↥(Subgroup.op Γ)) 𝓕
inst✝⁴ : Countable ↥Γ
inst✝³ : MeasurableSpace (G ⧸ Γ)
inst✝² : BorelSpace (G ⧸ Γ)
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
π : G → G ⧸ Γ := QuotientGroup.mk
meas_π : Measurable π
𝓕meas : NullMeasurableSet 𝓕
π_preA : Set G := π ⁻¹' A
meas_πA : MeasurableSet π_preA
⊢ ↑↑μ (π ⁻¹' ((fun x => g • x) ⁻¹' A) ∩ 𝓕) = ↑↑μ (π_preA ∩ 𝓕)

Next tactic:
have : π ⁻¹' ((fun x : G ⧸ Γ => g • x) ⁻¹' A) = (g * ·) ⁻¹' π_preA := by
      ext1; simp
/-- The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and right-
  invariant measure on `G` to a fundamental domain `𝓕` is a `G`-invariant measure on `G ⧸ Γ`. -/
@[to_additive "The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and
  right-invariant measure on an additive topological group `G` to a fundamental domain `𝓕` is a
  `G`-invariant measure on `G ⧸ Γ`."]
theorem MeasureTheory.IsFundamentalDomain.smulInvariantMeasure_map [μ.IsMulLeftInvariant]
    [μ.IsMulRightInvariant] :
    SMulInvariantMeasure G (G ⧸ Γ) (Measure.map QuotientGroup.mk (μ.restrict 𝓕)) where
  measure_preimage_smul g A hA := by
    let π : G → G ⧸ Γ := QuotientGroup.mk
    have meas_π : Measurable π := continuous_quotient_mk'.measurable
    have 𝓕meas : NullMeasurableSet 𝓕 μ := h𝓕.nullMeasurableSet
    have meas_πA : MeasurableSet (π ⁻¹' A) := measurableSet_preimage meas_π hA
    rw [Measure.map_apply meas_π hA,
      Measure.map_apply meas_π (measurableSet_preimage (measurable_const_smul g) hA),
      Measure.restrict_apply₀' 𝓕meas, Measure.restrict_apply₀' 𝓕meas]
    set π_preA := π ⁻¹' A
    have : π ⁻¹' ((fun x : G ⧸ Γ => g • x) ⁻¹' A) = (g * ·) ⁻¹' π_preA := by
      

Proof state:
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 (↥(Subgroup.op Γ)) 𝓕
inst✝⁴ : Countable ↥Γ
inst✝³ : MeasurableSpace (G ⧸ Γ)
inst✝² : BorelSpace (G ⧸ Γ)
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
π : G → G ⧸ Γ := QuotientGroup.mk
meas_π : Measurable π
𝓕meas : NullMeasurableSet 𝓕
π_preA : Set G := π ⁻¹' A
meas_πA : MeasurableSet π_preA
⊢ π ⁻¹' ((fun x => g • x) ⁻¹' A) = (fun x => g * x) ⁻¹' π_preA

Next tactic:
ext1
/-- The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and right-
  invariant measure on `G` to a fundamental domain `𝓕` is a `G`-invariant measure on `G ⧸ Γ`. -/
@[to_additive "The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and
  right-invariant measure on an additive topological group `G` to a fundamental domain `𝓕` is a
  `G`-invariant measure on `G ⧸ Γ`."]
theorem MeasureTheory.IsFundamentalDomain.smulInvariantMeasure_map [μ.IsMulLeftInvariant]
    [μ.IsMulRightInvariant] :
    SMulInvariantMeasure G (G ⧸ Γ) (Measure.map QuotientGroup.mk (μ.restrict 𝓕)) where
  measure_preimage_smul g A hA := by
    let π : G → G ⧸ Γ := QuotientGroup.mk
    have meas_π : Measurable π := continuous_quotient_mk'.measurable
    have 𝓕meas : NullMeasurableSet 𝓕 μ := h𝓕.nullMeasurableSet
    have meas_πA : MeasurableSet (π ⁻¹' A) := measurableSet_preimage meas_π hA
    rw [Measure.map_apply meas_π hA,
      Measure.map_apply meas_π (measurableSet_preimage (measurable_const_smul g) hA),
      Measure.restrict_apply₀' 𝓕meas, Measure.restrict_apply₀' 𝓕meas]
    set π_preA := π ⁻¹' A
    have : π ⁻¹' ((fun x : G ⧸ Γ => g • x) ⁻¹' A) = (g * ·) ⁻¹' π_preA := by
      ext1; 

Proof state:
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 (↥(Subgroup.op Γ)) 𝓕
inst✝⁴ : Countable ↥Γ
inst✝³ : MeasurableSpace (G ⧸ Γ)
inst✝² : BorelSpace (G ⧸ Γ)
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
π : G → G ⧸ Γ := QuotientGroup.mk
meas_π : Measurable π
𝓕meas : NullMeasurableSet 𝓕
π_preA : Set G := π ⁻¹' A
meas_πA : MeasurableSet π_preA
x✝ : G
⊢ x✝ ∈ π ⁻¹' ((fun x => g • x) ⁻¹' A) ↔ x✝ ∈ (fun x => g * x) ⁻¹' π_preA

Next tactic:
simp
/-- The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and right-
  invariant measure on `G` to a fundamental domain `𝓕` is a `G`-invariant measure on `G ⧸ Γ`. -/
@[to_additive "The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and
  right-invariant measure on an additive topological group `G` to a fundamental domain `𝓕` is a
  `G`-invariant measure on `G ⧸ Γ`."]
theorem MeasureTheory.IsFundamentalDomain.smulInvariantMeasure_map [μ.IsMulLeftInvariant]
    [μ.IsMulRightInvariant] :
    SMulInvariantMeasure G (G ⧸ Γ) (Measure.map QuotientGroup.mk (μ.restrict 𝓕)) where
  measure_preimage_smul g A hA := by
    let π : G → G ⧸ Γ := QuotientGroup.mk
    have meas_π : Measurable π := continuous_quotient_mk'.measurable
    have 𝓕meas : NullMeasurableSet 𝓕 μ := h𝓕.nullMeasurableSet
    have meas_πA : MeasurableSet (π ⁻¹' A) := measurableSet_preimage meas_π hA
    rw [Measure.map_apply meas_π hA,
      Measure.map_apply meas_π (measurableSet_preimage (measurable_const_smul g) hA),
      Measure.restrict_apply₀' 𝓕meas, Measure.restrict_apply₀' 𝓕meas]
    set π_preA := π ⁻¹' A
    have : π ⁻¹' ((fun x : G ⧸ Γ => g • x) ⁻¹' A) = (g * ·) ⁻¹' π_preA := by
      ext1; simp
    

Proof state:
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 (↥(Subgroup.op Γ)) 𝓕
inst✝⁴ : Countable ↥Γ
inst✝³ : MeasurableSpace (G ⧸ Γ)
inst✝² : BorelSpace (G ⧸ Γ)
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
π : G → G ⧸ Γ := QuotientGroup.mk
meas_π : Measurable π
𝓕meas : NullMeasurableSet 𝓕
π_preA : Set G := π ⁻¹' A
meas_πA : MeasurableSet π_preA
this : π ⁻¹' ((fun x => g • x) ⁻¹' A) = (fun x => g * x) ⁻¹' π_preA
⊢ ↑↑μ (π ⁻¹' ((fun x => g • x) ⁻¹' A) ∩ 𝓕) = ↑↑μ (π_preA ∩ 𝓕)

Next tactic:
rw [this]
/-- The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and right-
  invariant measure on `G` to a fundamental domain `𝓕` is a `G`-invariant measure on `G ⧸ Γ`. -/
@[to_additive "The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and
  right-invariant measure on an additive topological group `G` to a fundamental domain `𝓕` is a
  `G`-invariant measure on `G ⧸ Γ`."]
theorem MeasureTheory.IsFundamentalDomain.smulInvariantMeasure_map [μ.IsMulLeftInvariant]
    [μ.IsMulRightInvariant] :
    SMulInvariantMeasure G (G ⧸ Γ) (Measure.map QuotientGroup.mk (μ.restrict 𝓕)) where
  measure_preimage_smul g A hA := by
    let π : G → G ⧸ Γ := QuotientGroup.mk
    have meas_π : Measurable π := continuous_quotient_mk'.measurable
    have 𝓕meas : NullMeasurableSet 𝓕 μ := h𝓕.nullMeasurableSet
    have meas_πA : MeasurableSet (π ⁻¹' A) := measurableSet_preimage meas_π hA
    rw [Measure.map_apply meas_π hA,
      Measure.map_apply meas_π (measurableSet_preimage (measurable_const_smul g) hA),
      Measure.restrict_apply₀' 𝓕meas, Measure.restrict_apply₀' 𝓕meas]
    set π_preA := π ⁻¹' A
    have : π ⁻¹' ((fun x : G ⧸ Γ => g • x) ⁻¹' A) = (g * ·) ⁻¹' π_preA := by
      ext1; simp
    rw [this]
    

Proof state:
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 (↥(Subgroup.op Γ)) 𝓕
inst✝⁴ : Countable ↥Γ
inst✝³ : MeasurableSpace (G ⧸ Γ)
inst✝² : BorelSpace (G ⧸ Γ)
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
π : G → G ⧸ Γ := QuotientGroup.mk
meas_π : Measurable π
𝓕meas : NullMeasurableSet 𝓕
π_preA : Set G := π ⁻¹' A
meas_πA : MeasurableSet π_preA
this : π ⁻¹' ((fun x => g • x) ⁻¹' A) = (fun x => g * x) ⁻¹' π_preA
⊢ ↑↑μ ((fun x => g * x) ⁻¹' π_preA ∩ 𝓕) = ↑↑μ (π_preA ∩ 𝓕)

Next tactic:
have : μ ((g * ·) ⁻¹' π_preA ∩ 𝓕) = μ (π_preA ∩ (g⁻¹ * ·) ⁻¹' 𝓕) := by
      trans μ ((g * ·) ⁻¹' (π_preA ∩ (g⁻¹ * ·) ⁻¹' 𝓕))
      · rw [preimage_inter]
        congr 2
        simp [Set.preimage]
      rw [measure_preimage_mul]
/-- The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and right-
  invariant measure on `G` to a fundamental domain `𝓕` is a `G`-invariant measure on `G ⧸ Γ`. -/
@[to_additive "The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and
  right-invariant measure on an additive topological group `G` to a fundamental domain `𝓕` is a
  `G`-invariant measure on `G ⧸ Γ`."]
theorem MeasureTheory.IsFundamentalDomain.smulInvariantMeasure_map [μ.IsMulLeftInvariant]
    [μ.IsMulRightInvariant] :
    SMulInvariantMeasure G (G ⧸ Γ) (Measure.map QuotientGroup.mk (μ.restrict 𝓕)) where
  measure_preimage_smul g A hA := by
    let π : G → G ⧸ Γ := QuotientGroup.mk
    have meas_π : Measurable π := continuous_quotient_mk'.measurable
    have 𝓕meas : NullMeasurableSet 𝓕 μ := h𝓕.nullMeasurableSet
    have meas_πA : MeasurableSet (π ⁻¹' A) := measurableSet_preimage meas_π hA
    rw [Measure.map_apply meas_π hA,
      Measure.map_apply meas_π (measurableSet_preimage (measurable_const_smul g) hA),
      Measure.restrict_apply₀' 𝓕meas, Measure.restrict_apply₀' 𝓕meas]
    set π_preA := π ⁻¹' A
    have : π ⁻¹' ((fun x : G ⧸ Γ => g • x) ⁻¹' A) = (g * ·) ⁻¹' π_preA := by
      ext1; simp
    rw [this]
    have : μ ((g * ·) ⁻¹' π_preA ∩ 𝓕) = μ (π_preA ∩ (g⁻¹ * ·) ⁻¹' 𝓕) := by
      

Proof state:
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 (↥(Subgroup.op Γ)) 𝓕
inst✝⁴ : Countable ↥Γ
inst✝³ : MeasurableSpace (G ⧸ Γ)
inst✝² : BorelSpace (G ⧸ Γ)
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
π : G → G ⧸ Γ := QuotientGroup.mk
meas_π : Measurable π
𝓕meas : NullMeasurableSet 𝓕
π_preA : Set G := π ⁻¹' A
meas_πA : MeasurableSet π_preA
this : π ⁻¹' ((fun x => g • x) ⁻¹' A) = (fun x => g * x) ⁻¹' π_preA
⊢ ↑↑μ ((fun x => g * x) ⁻¹' π_preA ∩ 𝓕) = ↑↑μ (π_preA ∩ (fun x => g⁻¹ * x) ⁻¹' 𝓕)

Next tactic:
trans μ ((g * ·) ⁻¹' (π_preA ∩ (g⁻¹ * ·) ⁻¹' 𝓕))
/-- The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and right-
  invariant measure on `G` to a fundamental domain `𝓕` is a `G`-invariant measure on `G ⧸ Γ`. -/
@[to_additive "The pushforward to the coset space `G ⧸ Γ` of the restriction of a both left- and
  right-invariant measure on an additive topological group `G` to a fundamental domain `𝓕` is a
  `G`-invariant measure on `G ⧸ Γ`."]
theorem MeasureTheory.IsFundamentalDomain.smulInvariantMeasure_map [μ.IsMulLeftInvariant]
    [μ.IsMulRightInvariant] :
    SMulInvariantMeasure G (G ⧸ Γ) (Measure.map QuotientGroup.mk (μ.restrict 𝓕)) where
  measure_preimage_smul g A hA := by
    let π : G → G ⧸ Γ := QuotientGroup.mk
    have meas_π : Measurable π := continuous_quotient_mk'.measurable
    have 𝓕meas : NullMeasurableSet 𝓕 μ := h𝓕.nullMeasurableSet
    have meas_πA : MeasurableSet (π ⁻¹' A) := measurableSet_preimage meas_π hA
    rw [Measure.map_apply meas_π hA,
      Measure.map_apply meas_π (measurableSet_preimage (measurable_const_smul g) hA),
      Measure.restrict_apply₀' 𝓕meas, Measure.restrict_apply₀' 𝓕meas]
    set π_preA := π ⁻¹' A
    have : π ⁻¹' ((fun x : G ⧸ Γ => g • x) ⁻¹' A) = (g * ·) ⁻¹' π_preA := by
      ext1; simp
    rw [this]
    have : μ ((g * ·) ⁻¹' π_preA ∩ 𝓕) = μ (π_preA ∩ (g⁻¹ * ·) ⁻¹' 𝓕) := by
      trans μ ((g * ·) ⁻¹' (π_preA ∩ (g⁻¹ * ·) ⁻¹' 𝓕))
      · 

Proof state:
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 (↥(Subgroup.op Γ)) 𝓕
inst✝⁴ : Countable ↥Γ
inst✝³ : MeasurableSpace (G ⧸ Γ)
inst✝² : BorelSpace (G ⧸ Γ)
inst✝¹ : IsMulLeftInvariant μ
inst✝ : IsMulRightInvariant μ
g : G
A : Set (G ⧸ Γ)
hA : MeasurableSet A
π : G → G ⧸ Γ := QuotientGroup.mk
meas_π : Measurable π
𝓕meas : NullMeasurableSet 𝓕
π_preA : Set G := π ⁻¹' A
meas_πA : MeasurableSet π_preA
this : π ⁻¹' ((fun x => g • x) ⁻¹' A) = (fun x => g * x) ⁻¹' π_preA
⊢ ↑↑μ ((fun x => g * x) ⁻¹' π_preA ∩ 𝓕) = ↑↑μ ((fun x => g * x) ⁻¹' (π_preA ∩ (fun x => g⁻¹ * x) ⁻¹' 𝓕))

Next tactic:
rw [preimage_inter]