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

Proof steps:
state_before: 𝕜 : Type u_1
G : Type u_2
H✝ : Type u_3
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_4
inst✝³ : MeasurableSpace H
inst✝² : Mul H
inst✝¹ : MeasurableMul H
inst✝ : μ.IsMulLeftInvariant
f : G →ₙ* H
hf : Measurable ⇑f
h_surj : Surjective ⇑f
⊢ (Measure.map (⇑f) μ).IsMulLeftInvariant
state_after: 𝕜 : Type u_1
G : Type u_2
H✝ : Type u_3
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_4
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: refine ⟨fun h => ?_⟩
state_before: 𝕜 : Type u_1
G : Type u_2
H✝ : Type u_3
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_4
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) μ
state_after: 𝕜 : Type u_1
G : Type u_2
H✝ : Type u_3
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_4
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: rw [map_map (measurable_const_mul _) hf]
state_before: 𝕜 : Type u_1
G : Type u_2
H✝ : Type u_3
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_4
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) μ
state_after: case intro
𝕜 : Type u_1
G : Type u_2
H✝ : Type u_3
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_4
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: obtain ⟨g, rfl⟩ := h_surj h
state_before: case intro
𝕜 : Type u_1
G : Type u_2
H✝ : Type u_3
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_4
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) μ
state_after: case intro
𝕜 : Type u_1
G : Type u_2
H✝ : Type u_3
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_4
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: conv_rhs => rw [← map_mul_left_eq_self μ g]
state_before: case intro
𝕜 : Type u_1
G : Type u_2
H✝ : Type u_3
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_4
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) μ)
state_after: case intro
𝕜 : Type u_1
G : Type u_2
H✝ : Type u_3
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_4
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: rw [map_map hf (measurable_const_mul _)]
state_before: case intro
𝕜 : Type u_1
G : Type u_2
H✝ : Type u_3
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_4
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) μ
state_after: case intro.e_f
𝕜 : Type u_1
G : Type u_2
H✝ : Type u_3
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_4
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: congr 2
state_before: case intro.e_f
𝕜 : Type u_1
G : Type u_2
H✝ : Type u_3
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_4
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
state_after: case intro.e_f.h
𝕜 : Type u_1
G : Type u_2
H✝ : Type u_3
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_4
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
tactic: ext y
state_before: case intro.e_f.h
𝕜 : Type u_1
G : Type u_2
H✝ : Type u_3
inst✝⁷ : MeasurableSpace G
inst✝⁶ : MeasurableSpace H✝
inst✝⁵ : Mul G
μ : Measure G
inst✝⁴ : MeasurableMul G
H : Type u_4
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
state_after: no goals
tactic: simp only [comp_apply, map_mul]