Theorem: Zspan.fundamentalDomain_measurableSet
File: Mathlib/Algebra/Module/Zlattice.lean

tactic: haveI : FiniteDimensional ℝ E := FiniteDimensional.of_fintype_basis b
state_before: E : Type u_1
ι : Type u_2
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
b : Basis ι ℝ E
inst✝² : MeasurableSpace E
inst✝¹ : OpensMeasurableSpace E
inst✝ : Finite ι
⊢ MeasurableSet (fundamentalDomain b)

tactic: let f := (Finsupp.linearEquivFunOnFinite ℝ ℝ ι).toLinearMap.comp b.repr.toLinearMap
state_before: E : Type u_1
ι : Type u_2
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
b : Basis ι ℝ E
inst✝² : MeasurableSpace E
inst✝¹ : OpensMeasurableSpace E
inst✝ : Finite ι
this : FiniteDimensional ℝ E
⊢ MeasurableSet (fundamentalDomain b)

tactic: let D : Set (ι → ℝ) := Set.pi Set.univ fun _ : ι => Set.Ico (0 : ℝ) 1
state_before: E : Type u_1
ι : Type u_2
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
b : Basis ι ℝ E
inst✝² : MeasurableSpace E
inst✝¹ : OpensMeasurableSpace E
inst✝ : Finite ι
this : FiniteDimensional ℝ E
f : E →ₗ[ℝ] ι → ℝ := LinearMap.comp ↑(Finsupp.linearEquivFunOnFinite ℝ ℝ ι) ↑b.repr
⊢ MeasurableSet (fundamentalDomain b)

tactic: rw [(_ : fundamentalDomain b = f ⁻¹' D)]
state_before: E : Type u_1
ι : Type u_2
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
b : Basis ι ℝ E
inst✝² : MeasurableSpace E
inst✝¹ : OpensMeasurableSpace E
inst✝ : Finite ι
this : FiniteDimensional ℝ E
f : E →ₗ[ℝ] ι → ℝ := LinearMap.comp ↑(Finsupp.linearEquivFunOnFinite ℝ ℝ ι) ↑b.repr
D : Set (ι → ℝ) := Set.pi Set.univ fun x => Set.Ico 0 1
⊢ MeasurableSet (fundamentalDomain b)

tactic: refine measurableSet_preimage (LinearMap.continuous_of_finiteDimensional f).measurable ?_
state_before: E : Type u_1
ι : Type u_2
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
b : Basis ι ℝ E
inst✝² : MeasurableSpace E
inst✝¹ : OpensMeasurableSpace E
inst✝ : Finite ι
this : FiniteDimensional ℝ E
f : E →ₗ[ℝ] ι → ℝ := LinearMap.comp ↑(Finsupp.linearEquivFunOnFinite ℝ ℝ ι) ↑b.repr
D : Set (ι → ℝ) := Set.pi Set.univ fun x => Set.Ico 0 1
⊢ MeasurableSet (↑f ⁻¹' D)

tactic: exact MeasurableSet.pi Set.countable_univ fun _ _ => measurableSet_Ico
state_before: E : Type u_1
ι : Type u_2
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
b : Basis ι ℝ E
inst✝² : MeasurableSpace E
inst✝¹ : OpensMeasurableSpace E
inst✝ : Finite ι
this : FiniteDimensional ℝ E
f : E →ₗ[ℝ] ι → ℝ := LinearMap.comp ↑(Finsupp.linearEquivFunOnFinite ℝ ℝ ι) ↑b.repr
D : Set (ι → ℝ) := Set.pi Set.univ fun x => Set.Ico 0 1
⊢ MeasurableSet D

tactic: ext
state_before: E : Type u_1
ι : Type u_2
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
b : Basis ι ℝ E
inst✝² : MeasurableSpace E
inst✝¹ : OpensMeasurableSpace E
inst✝ : Finite ι
this : FiniteDimensional ℝ E
f : E →ₗ[ℝ] ι → ℝ := LinearMap.comp ↑(Finsupp.linearEquivFunOnFinite ℝ ℝ ι) ↑b.repr
D : Set (ι → ℝ) := Set.pi Set.univ fun x => Set.Ico 0 1
⊢ fundamentalDomain b = ↑f ⁻¹' D

tactic: simp only [fundamentalDomain, Set.mem_setOf_eq, LinearMap.coe_comp,
  LinearEquiv.coe_toLinearMap, Set.mem_preimage, Function.comp_apply, Set.mem_univ_pi,
  Finsupp.linearEquivFunOnFinite_apply]
state_before: case h
E : Type u_1
ι : Type u_2
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
b : Basis ι ℝ E
inst✝² : MeasurableSpace E
inst✝¹ : OpensMeasurableSpace E
inst✝ : Finite ι
this : FiniteDimensional ℝ E
f : E →ₗ[ℝ] ι → ℝ := LinearMap.comp ↑(Finsupp.linearEquivFunOnFinite ℝ ℝ ι) ↑b.repr
D : Set (ι → ℝ) := Set.pi Set.univ fun x => Set.Ico 0 1
x✝ : E
⊢ x✝ ∈ fundamentalDomain b ↔ x✝ ∈ ↑f ⁻¹' D