Theorem: Real.map_linearMap_volume_pi_eq_smul_volume_pi
File: Mathlib/MeasureTheory/Measure/Lebesgue/Basic.lean

tactic: classical
  let M := LinearMap.toMatrix' f
  have A : LinearMap.det f = det M := by simp only [M, LinearMap.det_toMatrix']
  have B : f = toLin' M := by simp only [M, toLin'_toMatrix']
  rw [A, B]
  apply map_matrix_volume_pi_eq_smul_volume_pi
  rwa [A] at hf
state_before: ι : Type u_1
inst✝ : Fintype ι
f : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : LinearMap.det f ≠ 0
⊢ Measure.map (⇑f) volume = ofReal |(LinearMap.det f)⁻¹| • volume
state_after: no goals

tactic: let M := LinearMap.toMatrix' f
state_before: ι : Type u_1
inst✝ : Fintype ι
f : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : LinearMap.det f ≠ 0
⊢ Measure.map (⇑f) volume = ofReal |(LinearMap.det f)⁻¹| • volume
state_after: ι : Type u_1
inst✝ : Fintype ι
f : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : LinearMap.det f ≠ 0
M : Matrix ι ι ℝ := LinearMap.toMatrix' f
⊢ Measure.map (⇑f) volume = ofReal |(LinearMap.det f)⁻¹| • volume

tactic: have A : LinearMap.det f = det M := by simp only [M, LinearMap.det_toMatrix']
state_before: ι : Type u_1
inst✝ : Fintype ι
f : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : LinearMap.det f ≠ 0
M : Matrix ι ι ℝ := LinearMap.toMatrix' f
⊢ Measure.map (⇑f) volume = ofReal |(LinearMap.det f)⁻¹| • volume
state_after: ι : Type u_1
inst✝ : Fintype ι
f : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : LinearMap.det f ≠ 0
M : Matrix ι ι ℝ := LinearMap.toMatrix' f
A : LinearMap.det f = M.det
⊢ Measure.map (⇑f) volume = ofReal |(LinearMap.det f)⁻¹| • volume

tactic: have B : f = toLin' M := by simp only [M, toLin'_toMatrix']
state_before: ι : Type u_1
inst✝ : Fintype ι
f : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : LinearMap.det f ≠ 0
M : Matrix ι ι ℝ := LinearMap.toMatrix' f
A : LinearMap.det f = M.det
⊢ Measure.map (⇑f) volume = ofReal |(LinearMap.det f)⁻¹| • volume
state_after: ι : Type u_1
inst✝ : Fintype ι
f : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : LinearMap.det f ≠ 0
M : Matrix ι ι ℝ := LinearMap.toMatrix' f
A : LinearMap.det f = M.det
B : f = toLin' M
⊢ Measure.map (⇑f) volume = ofReal |(LinearMap.det f)⁻¹| • volume

tactic: rw [A, B]
state_before: ι : Type u_1
inst✝ : Fintype ι
f : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : LinearMap.det f ≠ 0
M : Matrix ι ι ℝ := LinearMap.toMatrix' f
A : LinearMap.det f = M.det
B : f = toLin' M
⊢ Measure.map (⇑f) volume = ofReal |(LinearMap.det f)⁻¹| • volume
state_after: ι : Type u_1
inst✝ : Fintype ι
f : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : LinearMap.det f ≠ 0
M : Matrix ι ι ℝ := LinearMap.toMatrix' f
A : LinearMap.det f = M.det
B : f = toLin' M
⊢ Measure.map (⇑(toLin' M)) volume = ofReal |M.det⁻¹| • volume

tactic: apply map_matrix_volume_pi_eq_smul_volume_pi
state_before: ι : Type u_1
inst✝ : Fintype ι
f : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : LinearMap.det f ≠ 0
M : Matrix ι ι ℝ := LinearMap.toMatrix' f
A : LinearMap.det f = M.det
B : f = toLin' M
⊢ Measure.map (⇑(toLin' M)) volume = ofReal |M.det⁻¹| • volume
state_after: case hM
ι : Type u_1
inst✝ : Fintype ι
f : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : LinearMap.det f ≠ 0
M : Matrix ι ι ℝ := LinearMap.toMatrix' f
A : LinearMap.det f = M.det
B : f = toLin' M
⊢ M.det ≠ 0

tactic: rwa [A] at hf
state_before: case hM
ι : Type u_1
inst✝ : Fintype ι
f : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : LinearMap.det f ≠ 0
M : Matrix ι ι ℝ := LinearMap.toMatrix' f
A : LinearMap.det f = M.det
B : f = toLin' M
⊢ M.det ≠ 0
state_after: no goals

tactic: simp only [M, LinearMap.det_toMatrix']
state_before: ι : Type u_1
inst✝ : Fintype ι
f : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : LinearMap.det f ≠ 0
M : Matrix ι ι ℝ := LinearMap.toMatrix' f
⊢ LinearMap.det f = M.det
state_after: no goals

tactic: simp only [M, toLin'_toMatrix']
state_before: ι : Type u_1
inst✝ : Fintype ι
f : (ι → ℝ) →ₗ[ℝ] ι → ℝ
hf : LinearMap.det f ≠ 0
M : Matrix ι ι ℝ := LinearMap.toMatrix' f
A : LinearMap.det f = M.det
⊢ f = toLin' M
state_after: no goals