Theorem: LinearIsometryEquiv.measurePreserving
File: Mathlib/MeasureTheory/Measure/Haar/InnerProductSpace.lean

tactic: refine ⟨f.continuous.measurable, ?_⟩
state_before: ι : Type u_1
E : Type u_2
F : Type u_3
inst✝¹⁰ : Fintype ι
inst✝⁹ : NormedAddCommGroup F
inst✝⁸ : InnerProductSpace ℝ F
inst✝⁷ : FiniteDimensional ℝ F
inst✝⁶ : MeasurableSpace F
inst✝⁵ : BorelSpace F
inst✝⁴ : NormedAddCommGroup E
inst✝³ : InnerProductSpace ℝ E
inst✝² : FiniteDimensional ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
f : E ≃ₗᵢ[ℝ] F
⊢ MeasurePreserving (⇑f) volume volume
state_after: ι : Type u_1
E : Type u_2
F : Type u_3
inst✝¹⁰ : Fintype ι
inst✝⁹ : NormedAddCommGroup F
inst✝⁸ : InnerProductSpace ℝ F
inst✝⁷ : FiniteDimensional ℝ F
inst✝⁶ : MeasurableSpace F
inst✝⁵ : BorelSpace F
inst✝⁴ : NormedAddCommGroup E
inst✝³ : InnerProductSpace ℝ E
inst✝² : FiniteDimensional ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
f : E ≃ₗᵢ[ℝ] F
⊢ map (⇑f) volume = volume

tactic: rcases exists_orthonormalBasis ℝ E with ⟨w, b, _hw⟩
state_before: ι : Type u_1
E : Type u_2
F : Type u_3
inst✝¹⁰ : Fintype ι
inst✝⁹ : NormedAddCommGroup F
inst✝⁸ : InnerProductSpace ℝ F
inst✝⁷ : FiniteDimensional ℝ F
inst✝⁶ : MeasurableSpace F
inst✝⁵ : BorelSpace F
inst✝⁴ : NormedAddCommGroup E
inst✝³ : InnerProductSpace ℝ E
inst✝² : FiniteDimensional ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
f : E ≃ₗᵢ[ℝ] F
⊢ map (⇑f) volume = volume
state_after: case intro.intro
ι : Type u_1
E : Type u_2
F : Type u_3
inst✝¹⁰ : Fintype ι
inst✝⁹ : NormedAddCommGroup F
inst✝⁸ : InnerProductSpace ℝ F
inst✝⁷ : FiniteDimensional ℝ F
inst✝⁶ : MeasurableSpace F
inst✝⁵ : BorelSpace F
inst✝⁴ : NormedAddCommGroup E
inst✝³ : InnerProductSpace ℝ E
inst✝² : FiniteDimensional ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
f : E ≃ₗᵢ[ℝ] F
w : Finset E
b : OrthonormalBasis { x // x ∈ w } ℝ E
_hw : ⇑b = Subtype.val
⊢ map (⇑f) volume = volume

tactic: erw [← OrthonormalBasis.addHaar_eq_volume b, ← OrthonormalBasis.addHaar_eq_volume (b.map f),
  Basis.map_addHaar _ f.toContinuousLinearEquiv]
state_before: case intro.intro
ι : Type u_1
E : Type u_2
F : Type u_3
inst✝¹⁰ : Fintype ι
inst✝⁹ : NormedAddCommGroup F
inst✝⁸ : InnerProductSpace ℝ F
inst✝⁷ : FiniteDimensional ℝ F
inst✝⁶ : MeasurableSpace F
inst✝⁵ : BorelSpace F
inst✝⁴ : NormedAddCommGroup E
inst✝³ : InnerProductSpace ℝ E
inst✝² : FiniteDimensional ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
f : E ≃ₗᵢ[ℝ] F
w : Finset E
b : OrthonormalBasis { x // x ∈ w } ℝ E
_hw : ⇑b = Subtype.val
⊢ map (⇑f) volume = volume
state_after: case intro.intro
ι : Type u_1
E : Type u_2
F : Type u_3
inst✝¹⁰ : Fintype ι
inst✝⁹ : NormedAddCommGroup F
inst✝⁸ : InnerProductSpace ℝ F
inst✝⁷ : FiniteDimensional ℝ F
inst✝⁶ : MeasurableSpace F
inst✝⁵ : BorelSpace F
inst✝⁴ : NormedAddCommGroup E
inst✝³ : InnerProductSpace ℝ E
inst✝² : FiniteDimensional ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
f : E ≃ₗᵢ[ℝ] F
w : Finset E
b : OrthonormalBasis { x // x ∈ w } ℝ E
_hw : ⇑b = Subtype.val
⊢ (b.toBasis.map f.toContinuousLinearEquiv.toLinearEquiv).addHaar = (b.map f).toBasis.addHaar

tactic: congr
state_before: case intro.intro
ι : Type u_1
E : Type u_2
F : Type u_3
inst✝¹⁰ : Fintype ι
inst✝⁹ : NormedAddCommGroup F
inst✝⁸ : InnerProductSpace ℝ F
inst✝⁷ : FiniteDimensional ℝ F
inst✝⁶ : MeasurableSpace F
inst✝⁵ : BorelSpace F
inst✝⁴ : NormedAddCommGroup E
inst✝³ : InnerProductSpace ℝ E
inst✝² : FiniteDimensional ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
f : E ≃ₗᵢ[ℝ] F
w : Finset E
b : OrthonormalBasis { x // x ∈ w } ℝ E
_hw : ⇑b = Subtype.val
⊢ (b.toBasis.map f.toContinuousLinearEquiv.toLinearEquiv).addHaar = (b.map f).toBasis.addHaar
state_after: no goals