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

Proof steps:
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_2
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace ℝ F
inst✝⁶ : CompleteSpace F
s : Set E
ι : Type u_3
G : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : DecidableEq ι
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace ℝ G
inst✝¹ : MeasurableSpace G
inst✝ : BorelSpace G
b : Basis ι ℝ G
v : ι → G
⊢ b.addHaar (parallelepiped v) = ENNReal.ofReal |b.det v|
state_after: 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_2
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace ℝ F
inst✝⁶ : CompleteSpace F
s : Set E
ι : Type u_3
G : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : DecidableEq ι
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace ℝ G
inst✝¹ : MeasurableSpace G
inst✝ : BorelSpace G
b : Basis ι ℝ G
v : ι → G
this : FiniteDimensional ℝ G
⊢ b.addHaar (parallelepiped v) = ENNReal.ofReal |b.det v|
tactic: have : FiniteDimensional ℝ G := FiniteDimensional.of_fintype_basis b
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_2
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace ℝ F
inst✝⁶ : CompleteSpace F
s : Set E
ι : Type u_3
G : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : DecidableEq ι
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace ℝ G
inst✝¹ : MeasurableSpace G
inst✝ : BorelSpace G
b : Basis ι ℝ G
v : ι → G
this : FiniteDimensional ℝ G
⊢ b.addHaar (parallelepiped v) = ENNReal.ofReal |b.det v|
state_after: 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_2
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace ℝ F
inst✝⁶ : CompleteSpace F
s : Set E
ι : Type u_3
G : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : DecidableEq ι
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace ℝ G
inst✝¹ : MeasurableSpace G
inst✝ : BorelSpace G
b : Basis ι ℝ G
v : ι → G
this : FiniteDimensional ℝ G
A : parallelepiped v = ⇑((b.constr ℕ) v) '' parallelepiped ⇑b
⊢ b.addHaar (parallelepiped v) = ENNReal.ofReal |b.det v|
tactic: have A : parallelepiped v = b.constr ℕ v '' parallelepiped b := by
    rw [image_parallelepiped]
    -- Porting note: was `congr 1 with i` but Lean 4 `congr` applies `ext` first
    refine congr_arg _ <| funext fun i ↦ ?_
    exact (b.constr_basis ℕ v i).symm
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_2
inst✝⁸ : NormedAddCommGroup F
inst✝⁷ : NormedSpace ℝ F
inst✝⁶ : CompleteSpace F
s : Set E
ι : Type u_3
G : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : DecidableEq ι
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace ℝ G
inst✝¹ : MeasurableSpace G
inst✝ : BorelSpace G
b : Basis ι ℝ G
v : ι → G
this : FiniteDimensional ℝ G
A : parallelepiped v = ⇑((b.constr ℕ) v) '' parallelepiped ⇑b
⊢ b.addHaar (parallelepiped v) = ENNReal.ofReal |b.det v|
state_after: no goals
tactic: rw [A, addHaar_image_linearMap, b.addHaar_self, mul_one, ← LinearMap.det_toMatrix b,
    ← Basis.toMatrix_eq_toMatrix_constr, Basis.det_apply]