Theorem: MeasureTheory.isMulLeftInvariant_map
File: Mathlib/MeasureTheory/Group/Measure.lean

tactic: refine' ⟨fun h => _⟩
state_before: 𝕜 : Type ?u.240117
G : Type u_2
H✝ : Type ?u.240123
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_1
inst✝³ : MeasurableSpace H
inst✝² : Mul H
inst✝¹ : MeasurableMul H
inst✝ : IsMulLeftInvariant μ
f : G →ₙ* H
hf : Measurable ↑f
h_surj : Surjective ↑f
⊢ IsMulLeftInvariant (Measure.map (↑f) μ)

tactic: rw [map_map (measurable_const_mul _) hf]
state_before: 𝕜 : Type ?u.240117
G : Type u_2
H✝ : Type ?u.240123
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_1
inst✝³ : MeasurableSpace H
inst✝² : Mul H
inst✝¹ : MeasurableMul H
inst✝ : IsMulLeftInvariant μ
f : G →ₙ* H
hf : Measurable ↑f
h_surj : Surjective ↑f
h : H
⊢ Measure.map (fun x => h * x) (Measure.map (↑f) μ) = Measure.map (↑f) μ

tactic: obtain ⟨g, rfl⟩ := h_surj h
state_before: 𝕜 : Type ?u.240117
G : Type u_2
H✝ : Type ?u.240123
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_1
inst✝³ : MeasurableSpace H
inst✝² : Mul H
inst✝¹ : MeasurableMul H
inst✝ : IsMulLeftInvariant μ
f : G →ₙ* H
hf : Measurable ↑f
h_surj : Surjective ↑f
h : H
⊢ Measure.map ((fun x => h * x) ∘ ↑f) μ = Measure.map (↑f) μ

tactic: conv_rhs => rw [← map_mul_left_eq_self μ g]
state_before: case intro
𝕜 : Type ?u.240117
G : Type u_2
H✝ : Type ?u.240123
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_1
inst✝³ : MeasurableSpace H
inst✝² : Mul H
inst✝¹ : MeasurableMul H
inst✝ : IsMulLeftInvariant μ
f : G →ₙ* H
hf : Measurable ↑f
h_surj : Surjective ↑f
g : G
⊢ Measure.map ((fun x => ↑f g * x) ∘ ↑f) μ = Measure.map (↑f) μ

tactic: rw [map_map hf (measurable_const_mul _)]
state_before: case intro
𝕜 : Type ?u.240117
G : Type u_2
H✝ : Type ?u.240123
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_1
inst✝³ : MeasurableSpace H
inst✝² : Mul H
inst✝¹ : MeasurableMul H
inst✝ : IsMulLeftInvariant μ
f : G →ₙ* H
hf : Measurable ↑f
h_surj : Surjective ↑f
g : G
⊢ Measure.map ((fun x => ↑f g * x) ∘ ↑f) μ = Measure.map (↑f) (Measure.map (fun x => g * x) μ)

tactic: congr 2
state_before: case intro
𝕜 : Type ?u.240117
G : Type u_2
H✝ : Type ?u.240123
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_1
inst✝³ : MeasurableSpace H
inst✝² : Mul H
inst✝¹ : MeasurableMul H
inst✝ : IsMulLeftInvariant μ
f : G →ₙ* H
hf : Measurable ↑f
h_surj : Surjective ↑f
g : G
⊢ Measure.map ((fun x => ↑f g * x) ∘ ↑f) μ = Measure.map (↑f ∘ fun x => g * x) μ

tactic: ext y
state_before: case intro.e_f
𝕜 : Type ?u.240117
G : Type u_2
H✝ : Type ?u.240123
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_1
inst✝³ : MeasurableSpace H
inst✝² : Mul H
inst✝¹ : MeasurableMul H
inst✝ : IsMulLeftInvariant μ
f : G →ₙ* H
hf : Measurable ↑f
h_surj : Surjective ↑f
g : G
⊢ (fun x => ↑f g * x) ∘ ↑f = ↑f ∘ fun x => g * x

tactic: simp only [comp_apply, map_mul]
state_before: case intro.e_f.h
𝕜 : Type ?u.240117
G : Type u_2
H✝ : Type ?u.240123
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_1
inst✝³ : MeasurableSpace H
inst✝² : Mul H
inst✝¹ : MeasurableMul H
inst✝ : IsMulLeftInvariant μ
f : G →ₙ* H
hf : Measurable ↑f
h_surj : Surjective ↑f
g y : G
⊢ ((fun x => ↑f g * x) ∘ ↑f) y = (↑f ∘ fun x => g * x) y