Theorem: NumberField.mixedEmbedding.volume_fundamentalDomain_fractionalIdealLatticeBasis
File: Mathlib/NumberTheory/NumberField/CanonicalEmbedding/ConvexBody.lean

tactic: let e : (Module.Free.ChooseBasisIndex ℤ I) ≃ (Module.Free.ChooseBasisIndex ℤ (𝓞 K)) := by
  refine Fintype.equivOfCardEq ?_
  rw [← finrank_eq_card_chooseBasisIndex, ← finrank_eq_card_chooseBasisIndex,
    fractionalIdeal_rank]
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
I : (FractionalIdeal (𝓞 K)⁰ K)ˣ
⊢ volume (fundamentalDomain (fractionalIdealLatticeBasis K I)) =
    ENNReal.ofReal ↑(FractionalIdeal.absNorm ↑I) * volume (fundamentalDomain (latticeBasis K))
state_after: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
I : (FractionalIdeal (𝓞 K)⁰ K)ˣ
e : Module.Free.ChooseBasisIndex ℤ ↥↑↑I ≃ Module.Free.ChooseBasisIndex ℤ (𝓞 K) := Fintype.equivOfCardEq ⋯
⊢ volume (fundamentalDomain (fractionalIdealLatticeBasis K I)) =
    ENNReal.ofReal ↑(FractionalIdeal.absNorm ↑I) * volume (fundamentalDomain (latticeBasis K))

tactic: rw [← fundamentalDomain_reindex (fractionalIdealLatticeBasis K I) e,
  measure_fundamentalDomain ((fractionalIdealLatticeBasis K I).reindex e)]
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
I : (FractionalIdeal (𝓞 K)⁰ K)ˣ
e : Module.Free.ChooseBasisIndex ℤ ↥↑↑I ≃ Module.Free.ChooseBasisIndex ℤ (𝓞 K) := Fintype.equivOfCardEq ⋯
⊢ volume (fundamentalDomain (fractionalIdealLatticeBasis K I)) =
    ENNReal.ofReal ↑(FractionalIdeal.absNorm ↑I) * volume (fundamentalDomain (latticeBasis K))
state_after: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
I : (FractionalIdeal (𝓞 K)⁰ K)ˣ
e : Module.Free.ChooseBasisIndex ℤ ↥↑↑I ≃ Module.Free.ChooseBasisIndex ℤ (𝓞 K) := Fintype.equivOfCardEq ⋯
⊢ ENNReal.ofReal |?b₀.det ⇑((fractionalIdealLatticeBasis K I).reindex e)| * volume (fundamentalDomain ?b₀) =
    ENNReal.ofReal ↑(FractionalIdeal.absNorm ↑I) * volume (fundamentalDomain (latticeBasis K))

case b₀
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
I : (FractionalIdeal (𝓞 K)⁰ K)ˣ
e : Module.Free.ChooseBasisIndex ℤ ↥↑↑I ≃ Module.Free.ChooseBasisIndex ℤ (𝓞 K) := Fintype.equivOfCardEq ⋯
⊢ Basis (Module.Free.ChooseBasisIndex ℤ (𝓞 K)) ℝ (({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ))

tactic: refine Fintype.equivOfCardEq ?_
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
I : (FractionalIdeal (𝓞 K)⁰ K)ˣ
⊢ Module.Free.ChooseBasisIndex ℤ ↥↑↑I ≃ Module.Free.ChooseBasisIndex ℤ (𝓞 K)
state_after: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
I : (FractionalIdeal (𝓞 K)⁰ K)ˣ
⊢ Fintype.card (Module.Free.ChooseBasisIndex ℤ ↥↑↑I) = Fintype.card (Module.Free.ChooseBasisIndex ℤ (𝓞 K))

tactic: rw [← finrank_eq_card_chooseBasisIndex, ← finrank_eq_card_chooseBasisIndex,
  fractionalIdeal_rank]
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
I : (FractionalIdeal (𝓞 K)⁰ K)ˣ
⊢ Fintype.card (Module.Free.ChooseBasisIndex ℤ ↥↑↑I) = Fintype.card (Module.Free.ChooseBasisIndex ℤ (𝓞 K))
state_after: no goals

tactic: rw [show (fractionalIdealLatticeBasis K I).reindex e = (mixedEmbedding K) ∘
    (basisOfFractionalIdeal K I) ∘ e.symm by
  ext1; simp only [Basis.coe_reindex, Function.comp_apply, fractionalIdealLatticeBasis_apply]]
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
I : (FractionalIdeal (𝓞 K)⁰ K)ˣ
e : Module.Free.ChooseBasisIndex ℤ ↥↑↑I ≃ Module.Free.ChooseBasisIndex ℤ (𝓞 K) := Fintype.equivOfCardEq ⋯
⊢ ENNReal.ofReal |?b₀.det ⇑((fractionalIdealLatticeBasis K I).reindex e)| * volume (fundamentalDomain ?b₀) =
    ENNReal.ofReal ↑(FractionalIdeal.absNorm ↑I) * volume (fundamentalDomain (latticeBasis K))
state_after: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
I : (FractionalIdeal (𝓞 K)⁰ K)ˣ
e : Module.Free.ChooseBasisIndex ℤ ↥↑↑I ≃ Module.Free.ChooseBasisIndex ℤ (𝓞 K) := Fintype.equivOfCardEq ⋯
⊢ ENNReal.ofReal |?b₀.det (⇑(mixedEmbedding K) ∘ ⇑(basisOfFractionalIdeal K I) ∘ ⇑e.symm)| *
      volume (fundamentalDomain ?b₀) =
    ENNReal.ofReal ↑(FractionalIdeal.absNorm ↑I) * volume (fundamentalDomain (latticeBasis K))

tactic: rw [mixedEmbedding.det_basisOfFractionalIdeal_eq_norm]
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
I : (FractionalIdeal (𝓞 K)⁰ K)ˣ
e : Module.Free.ChooseBasisIndex ℤ ↥↑↑I ≃ Module.Free.ChooseBasisIndex ℤ (𝓞 K) := Fintype.equivOfCardEq ⋯
⊢ ENNReal.ofReal |?b₀.det (⇑(mixedEmbedding K) ∘ ⇑(basisOfFractionalIdeal K I) ∘ ⇑e.symm)| *
      volume (fundamentalDomain ?b₀) =
    ENNReal.ofReal ↑(FractionalIdeal.absNorm ↑I) * volume (fundamentalDomain (latticeBasis K))
state_after: no goals

tactic: ext1
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
I : (FractionalIdeal (𝓞 K)⁰ K)ˣ
e : Module.Free.ChooseBasisIndex ℤ ↥↑↑I ≃ Module.Free.ChooseBasisIndex ℤ (𝓞 K) := Fintype.equivOfCardEq ⋯
⊢ ⇑((fractionalIdealLatticeBasis K I).reindex e) = ⇑(mixedEmbedding K) ∘ ⇑(basisOfFractionalIdeal K I) ∘ ⇑e.symm
state_after: case h
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
I : (FractionalIdeal (𝓞 K)⁰ K)ˣ
e : Module.Free.ChooseBasisIndex ℤ ↥↑↑I ≃ Module.Free.ChooseBasisIndex ℤ (𝓞 K) := Fintype.equivOfCardEq ⋯
x✝ : Module.Free.ChooseBasisIndex ℤ (𝓞 K)
⊢ ((fractionalIdealLatticeBasis K I).reindex e) x✝ = (⇑(mixedEmbedding K) ∘ ⇑(basisOfFractionalIdeal K I) ∘ ⇑e.symm) x✝

tactic: simp only [Basis.coe_reindex, Function.comp_apply, fractionalIdealLatticeBasis_apply]
state_before: case h
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
I : (FractionalIdeal (𝓞 K)⁰ K)ˣ
e : Module.Free.ChooseBasisIndex ℤ ↥↑↑I ≃ Module.Free.ChooseBasisIndex ℤ (𝓞 K) := Fintype.equivOfCardEq ⋯
x✝ : Module.Free.ChooseBasisIndex ℤ (𝓞 K)
⊢ ((fractionalIdealLatticeBasis K I).reindex e) x✝ = (⇑(mixedEmbedding K) ∘ ⇑(basisOfFractionalIdeal K I) ∘ ⇑e.symm) x✝
state_after: no goals