Theorem: MeasureTheory.Measure.map_linearMap_add_haar_eq_smul_add_haar
File: Mathlib/MeasureTheory/Measure/Lebesgue/EqHaar.lean

tactic: let ι := Fin (finrank ℝ E)
state_before: E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
hf : ↑LinearMap.det f ≠ 0
⊢ map (↑f) μ = ENNReal.ofReal (abs (↑LinearMap.det f)⁻¹) • μ

tactic: haveI : FiniteDimensional ℝ (ι → ℝ) := by infer_instance
state_before: E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
hf : ↑LinearMap.det f ≠ 0
ι : Type := Fin (finrank ℝ E)
⊢ map (↑f) μ = ENNReal.ofReal (abs (↑LinearMap.det f)⁻¹) • μ

tactic: have : finrank ℝ E = finrank ℝ (ι → ℝ) := by simp
state_before: E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
hf : ↑LinearMap.det f ≠ 0
ι : Type := Fin (finrank ℝ E)
this : FiniteDimensional ℝ (ι → ℝ)
⊢ map (↑f) μ = ENNReal.ofReal (abs (↑LinearMap.det f)⁻¹) • μ

tactic: have e : E ≃ₗ[ℝ] ι → ℝ := LinearEquiv.ofFinrankEq E (ι → ℝ) this
state_before: E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
hf : ↑LinearMap.det f ≠ 0
ι : Type := Fin (finrank ℝ E)
this✝ : FiniteDimensional ℝ (ι → ℝ)
this : finrank ℝ E = finrank ℝ (ι → ℝ)
⊢ map (↑f) μ = ENNReal.ofReal (abs (↑LinearMap.det f)⁻¹) • μ

tactic: obtain ⟨g, hg⟩ : ∃ g, g = (e : E →ₗ[ℝ] ι → ℝ).comp (f.comp (e.symm : (ι → ℝ) →ₗ[ℝ] E)) := ⟨_, rfl⟩
state_before: E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
hf : ↑LinearMap.det f ≠ 0
ι : Type := Fin (finrank ℝ E)
this✝ : FiniteDimensional ℝ (ι → ℝ)
this : finrank ℝ E = finrank ℝ (ι → ℝ)
e : E ≃ₗ[ℝ] ι → ℝ
⊢ map (↑f) μ = ENNReal.ofReal (abs (↑LinearMap.det f)⁻¹) • μ

tactic: have gdet : LinearMap.det g = LinearMap.det f := by rw [hg]; exact LinearMap.det_conj f e
state_before: case intro
E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
hf : ↑LinearMap.det f ≠ 0
ι : Type := Fin (finrank ℝ E)
this✝ : FiniteDimensional ℝ (ι → ℝ)
this : finrank ℝ E = finrank ℝ (ι → ℝ)
e : E ≃ₗ[ℝ] ι → ℝ
g : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hg : g = LinearMap.comp (↑e) (LinearMap.comp f ↑(LinearEquiv.symm e))
⊢ map (↑f) μ = ENNReal.ofReal (abs (↑LinearMap.det f)⁻¹) • μ

tactic: rw [← gdet] at hf ⊢
state_before: case intro
E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
hf : ↑LinearMap.det f ≠ 0
ι : Type := Fin (finrank ℝ E)
this✝ : FiniteDimensional ℝ (ι → ℝ)
this : finrank ℝ E = finrank ℝ (ι → ℝ)
e : E ≃ₗ[ℝ] ι → ℝ
g : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hg : g = LinearMap.comp (↑e) (LinearMap.comp f ↑(LinearEquiv.symm e))
gdet : ↑LinearMap.det g = ↑LinearMap.det f
⊢ map (↑f) μ = ENNReal.ofReal (abs (↑LinearMap.det f)⁻¹) • μ

tactic: have fg : f = (e.symm : (ι → ℝ) →ₗ[ℝ] E).comp (g.comp (e : E →ₗ[ℝ] ι → ℝ)) := by
  ext x
  simp only [LinearEquiv.coe_coe, Function.comp_apply, LinearMap.coe_comp,
    LinearEquiv.symm_apply_apply, hg]
state_before: case intro
E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
ι : Type := Fin (finrank ℝ E)
this✝ : FiniteDimensional ℝ (ι → ℝ)
this : finrank ℝ E = finrank ℝ (ι → ℝ)
e : E ≃ₗ[ℝ] ι → ℝ
g : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : ↑LinearMap.det g ≠ 0
hg : g = LinearMap.comp (↑e) (LinearMap.comp f ↑(LinearEquiv.symm e))
gdet : ↑LinearMap.det g = ↑LinearMap.det f
⊢ map (↑f) μ = ENNReal.ofReal (abs (↑LinearMap.det g)⁻¹) • μ

tactic: simp only [fg, LinearEquiv.coe_coe, LinearMap.coe_comp]
state_before: case intro
E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
ι : Type := Fin (finrank ℝ E)
this✝ : FiniteDimensional ℝ (ι → ℝ)
this : finrank ℝ E = finrank ℝ (ι → ℝ)
e : E ≃ₗ[ℝ] ι → ℝ
g : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : ↑LinearMap.det g ≠ 0
hg : g = LinearMap.comp (↑e) (LinearMap.comp f ↑(LinearEquiv.symm e))
gdet : ↑LinearMap.det g = ↑LinearMap.det f
fg : f = LinearMap.comp (↑(LinearEquiv.symm e)) (LinearMap.comp g ↑e)
⊢ map (↑f) μ = ENNReal.ofReal (abs (↑LinearMap.det g)⁻¹) • μ

tactic: have Ce : Continuous e := (e : E →ₗ[ℝ] ι → ℝ).continuous_of_finiteDimensional
state_before: case intro
E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
ι : Type := Fin (finrank ℝ E)
this✝ : FiniteDimensional ℝ (ι → ℝ)
this : finrank ℝ E = finrank ℝ (ι → ℝ)
e : E ≃ₗ[ℝ] ι → ℝ
g : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : ↑LinearMap.det g ≠ 0
hg : g = LinearMap.comp (↑e) (LinearMap.comp f ↑(LinearEquiv.symm e))
gdet : ↑LinearMap.det g = ↑LinearMap.det f
fg : f = LinearMap.comp (↑(LinearEquiv.symm e)) (LinearMap.comp g ↑e)
⊢ map (↑(LinearEquiv.symm e) ∘ ↑g ∘ ↑e) μ = ENNReal.ofReal (abs (↑LinearMap.det g)⁻¹) • μ

tactic: have Cg : Continuous g := LinearMap.continuous_of_finiteDimensional g
state_before: case intro
E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
ι : Type := Fin (finrank ℝ E)
this✝ : FiniteDimensional ℝ (ι → ℝ)
this : finrank ℝ E = finrank ℝ (ι → ℝ)
e : E ≃ₗ[ℝ] ι → ℝ
g : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : ↑LinearMap.det g ≠ 0
hg : g = LinearMap.comp (↑e) (LinearMap.comp f ↑(LinearEquiv.symm e))
gdet : ↑LinearMap.det g = ↑LinearMap.det f
fg : f = LinearMap.comp (↑(LinearEquiv.symm e)) (LinearMap.comp g ↑e)
Ce : Continuous ↑e
⊢ map (↑(LinearEquiv.symm e) ∘ ↑g ∘ ↑e) μ = ENNReal.ofReal (abs (↑LinearMap.det g)⁻¹) • μ

tactic: have Cesymm : Continuous e.symm := (e.symm : (ι → ℝ) →ₗ[ℝ] E).continuous_of_finiteDimensional
state_before: case intro
E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
ι : Type := Fin (finrank ℝ E)
this✝ : FiniteDimensional ℝ (ι → ℝ)
this : finrank ℝ E = finrank ℝ (ι → ℝ)
e : E ≃ₗ[ℝ] ι → ℝ
g : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : ↑LinearMap.det g ≠ 0
hg : g = LinearMap.comp (↑e) (LinearMap.comp f ↑(LinearEquiv.symm e))
gdet : ↑LinearMap.det g = ↑LinearMap.det f
fg : f = LinearMap.comp (↑(LinearEquiv.symm e)) (LinearMap.comp g ↑e)
Ce : Continuous ↑e
Cg : Continuous ↑g
⊢ map (↑(LinearEquiv.symm e) ∘ ↑g ∘ ↑e) μ = ENNReal.ofReal (abs (↑LinearMap.det g)⁻¹) • μ

tactic: rw [← map_map Cesymm.measurable (Cg.comp Ce).measurable, ← map_map Cg.measurable Ce.measurable]
state_before: case intro
E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
ι : Type := Fin (finrank ℝ E)
this✝ : FiniteDimensional ℝ (ι → ℝ)
this : finrank ℝ E = finrank ℝ (ι → ℝ)
e : E ≃ₗ[ℝ] ι → ℝ
g : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : ↑LinearMap.det g ≠ 0
hg : g = LinearMap.comp (↑e) (LinearMap.comp f ↑(LinearEquiv.symm e))
gdet : ↑LinearMap.det g = ↑LinearMap.det f
fg : f = LinearMap.comp (↑(LinearEquiv.symm e)) (LinearMap.comp g ↑e)
Ce : Continuous ↑e
Cg : Continuous ↑g
Cesymm : Continuous ↑(LinearEquiv.symm e)
⊢ map (↑(LinearEquiv.symm e) ∘ ↑g ∘ ↑e) μ = ENNReal.ofReal (abs (↑LinearMap.det g)⁻¹) • μ

tactic: haveI : IsAddHaarMeasure (map e μ) := (e : E ≃+ (ι → ℝ)).isAddHaarMeasure_map μ Ce Cesymm
state_before: case intro
E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
ι : Type := Fin (finrank ℝ E)
this✝ : FiniteDimensional ℝ (ι → ℝ)
this : finrank ℝ E = finrank ℝ (ι → ℝ)
e : E ≃ₗ[ℝ] ι → ℝ
g : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : ↑LinearMap.det g ≠ 0
hg : g = LinearMap.comp (↑e) (LinearMap.comp f ↑(LinearEquiv.symm e))
gdet : ↑LinearMap.det g = ↑LinearMap.det f
fg : f = LinearMap.comp (↑(LinearEquiv.symm e)) (LinearMap.comp g ↑e)
Ce : Continuous ↑e
Cg : Continuous ↑g
Cesymm : Continuous ↑(LinearEquiv.symm e)
⊢ map (↑(LinearEquiv.symm e)) (map (↑g) (map (↑e) μ)) = ENNReal.ofReal (abs (↑LinearMap.det g)⁻¹) • μ

tactic: have ecomp : e.symm ∘ e = id := by
  ext x; simp only [id.def, Function.comp_apply, LinearEquiv.symm_apply_apply]
state_before: case intro
E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
ι : Type := Fin (finrank ℝ E)
this✝¹ : FiniteDimensional ℝ (ι → ℝ)
this✝ : finrank ℝ E = finrank ℝ (ι → ℝ)
e : E ≃ₗ[ℝ] ι → ℝ
g : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : ↑LinearMap.det g ≠ 0
hg : g = LinearMap.comp (↑e) (LinearMap.comp f ↑(LinearEquiv.symm e))
gdet : ↑LinearMap.det g = ↑LinearMap.det f
fg : f = LinearMap.comp (↑(LinearEquiv.symm e)) (LinearMap.comp g ↑e)
Ce : Continuous ↑e
Cg : Continuous ↑g
Cesymm : Continuous ↑(LinearEquiv.symm e)
this : IsAddHaarMeasure (map (↑e) μ)
⊢ map (↑(LinearEquiv.symm e)) (map (↑g) (map (↑e) μ)) = ENNReal.ofReal (abs (↑LinearMap.det g)⁻¹) • μ

tactic: rw [map_linearMap_add_haar_pi_eq_smul_add_haar hf (map e μ), Measure.map_smul,
  map_map Cesymm.measurable Ce.measurable, ecomp, Measure.map_id]
state_before: case intro
E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
ι : Type := Fin (finrank ℝ E)
this✝¹ : FiniteDimensional ℝ (ι → ℝ)
this✝ : finrank ℝ E = finrank ℝ (ι → ℝ)
e : E ≃ₗ[ℝ] ι → ℝ
g : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : ↑LinearMap.det g ≠ 0
hg : g = LinearMap.comp (↑e) (LinearMap.comp f ↑(LinearEquiv.symm e))
gdet : ↑LinearMap.det g = ↑LinearMap.det f
fg : f = LinearMap.comp (↑(LinearEquiv.symm e)) (LinearMap.comp g ↑e)
Ce : Continuous ↑e
Cg : Continuous ↑g
Cesymm : Continuous ↑(LinearEquiv.symm e)
this : IsAddHaarMeasure (map (↑e) μ)
ecomp : ↑(LinearEquiv.symm e) ∘ ↑e = id
⊢ map (↑(LinearEquiv.symm e)) (map (↑g) (map (↑e) μ)) = ENNReal.ofReal (abs (↑LinearMap.det g)⁻¹) • μ

tactic: infer_instance
state_before: E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
hf : ↑LinearMap.det f ≠ 0
ι : Type := Fin (finrank ℝ E)
⊢ FiniteDimensional ℝ (ι → ℝ)

tactic: simp
state_before: E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
hf : ↑LinearMap.det f ≠ 0
ι : Type := Fin (finrank ℝ E)
this : FiniteDimensional ℝ (ι → ℝ)
⊢ finrank ℝ E = finrank ℝ (ι → ℝ)

tactic: rw [hg]
state_before: E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
hf : ↑LinearMap.det f ≠ 0
ι : Type := Fin (finrank ℝ E)
this✝ : FiniteDimensional ℝ (ι → ℝ)
this : finrank ℝ E = finrank ℝ (ι → ℝ)
e : E ≃ₗ[ℝ] ι → ℝ
g : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hg : g = LinearMap.comp (↑e) (LinearMap.comp f ↑(LinearEquiv.symm e))
⊢ ↑LinearMap.det g = ↑LinearMap.det f

tactic: exact LinearMap.det_conj f e
state_before: E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
hf : ↑LinearMap.det f ≠ 0
ι : Type := Fin (finrank ℝ E)
this✝ : FiniteDimensional ℝ (ι → ℝ)
this : finrank ℝ E = finrank ℝ (ι → ℝ)
e : E ≃ₗ[ℝ] ι → ℝ
g : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hg : g = LinearMap.comp (↑e) (LinearMap.comp f ↑(LinearEquiv.symm e))
⊢ ↑LinearMap.det (LinearMap.comp (↑e) (LinearMap.comp f ↑(LinearEquiv.symm e))) = ↑LinearMap.det f

tactic: ext x
state_before: E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
ι : Type := Fin (finrank ℝ E)
this✝ : FiniteDimensional ℝ (ι → ℝ)
this : finrank ℝ E = finrank ℝ (ι → ℝ)
e : E ≃ₗ[ℝ] ι → ℝ
g : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : ↑LinearMap.det g ≠ 0
hg : g = LinearMap.comp (↑e) (LinearMap.comp f ↑(LinearEquiv.symm e))
gdet : ↑LinearMap.det g = ↑LinearMap.det f
⊢ f = LinearMap.comp (↑(LinearEquiv.symm e)) (LinearMap.comp g ↑e)

tactic: simp only [LinearEquiv.coe_coe, Function.comp_apply, LinearMap.coe_comp,
  LinearEquiv.symm_apply_apply, hg]
state_before: case h
E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
ι : Type := Fin (finrank ℝ E)
this✝ : FiniteDimensional ℝ (ι → ℝ)
this : finrank ℝ E = finrank ℝ (ι → ℝ)
e : E ≃ₗ[ℝ] ι → ℝ
g : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : ↑LinearMap.det g ≠ 0
hg : g = LinearMap.comp (↑e) (LinearMap.comp f ↑(LinearEquiv.symm e))
gdet : ↑LinearMap.det g = ↑LinearMap.det f
x : E
⊢ ↑f x = ↑(LinearMap.comp (↑(LinearEquiv.symm e)) (LinearMap.comp g ↑e)) x

tactic: ext x
state_before: E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
ι : Type := Fin (finrank ℝ E)
this✝¹ : FiniteDimensional ℝ (ι → ℝ)
this✝ : finrank ℝ E = finrank ℝ (ι → ℝ)
e : E ≃ₗ[ℝ] ι → ℝ
g : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : ↑LinearMap.det g ≠ 0
hg : g = LinearMap.comp (↑e) (LinearMap.comp f ↑(LinearEquiv.symm e))
gdet : ↑LinearMap.det g = ↑LinearMap.det f
fg : f = LinearMap.comp (↑(LinearEquiv.symm e)) (LinearMap.comp g ↑e)
Ce : Continuous ↑e
Cg : Continuous ↑g
Cesymm : Continuous ↑(LinearEquiv.symm e)
this : IsAddHaarMeasure (map (↑e) μ)
⊢ ↑(LinearEquiv.symm e) ∘ ↑e = id

tactic: simp only [id.def, Function.comp_apply, LinearEquiv.symm_apply_apply]
state_before: case h
E : Type u_1
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : MeasurableSpace E
inst✝⁵ : BorelSpace E
inst✝⁴ : FiniteDimensional ℝ E
μ : Measure E
inst✝³ : IsAddHaarMeasure μ
F : Type ?u.986679
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
inst✝ : CompleteSpace F
f : E →ₗ[ℝ] E
ι : Type := Fin (finrank ℝ E)
this✝¹ : FiniteDimensional ℝ (ι → ℝ)
this✝ : finrank ℝ E = finrank ℝ (ι → ℝ)
e : E ≃ₗ[ℝ] ι → ℝ
g : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : ↑LinearMap.det g ≠ 0
hg : g = LinearMap.comp (↑e) (LinearMap.comp f ↑(LinearEquiv.symm e))
gdet : ↑LinearMap.det g = ↑LinearMap.det f
fg : f = LinearMap.comp (↑(LinearEquiv.symm e)) (LinearMap.comp g ↑e)
Ce : Continuous ↑e
Cg : Continuous ↑g
Cesymm : Continuous ↑(LinearEquiv.symm e)
this : IsAddHaarMeasure (map (↑e) μ)
x : E
⊢ (↑(LinearEquiv.symm e) ∘ ↑e) x = id x