ℤ-lattices #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
Let E
be a finite dimensional vector space over a normed_linear_ordered_field
K
with a solid
norm and that is also a floor_ring
, e.g. ℚ
or ℝ
. A (full) ℤ-lattice L
of E
is a discrete
subgroup of E
such that L
spans E
over K
.
The ℤ-lattice L
can be defined in two ways:
- For
b
a basis ofE
, thensubmodule.span ℤ (set.range b)
is a ℤ-lattice ofE
. - As an
add_subgroup E
with the additional properties:∀ r : ℝ, (L ∩ metric.closed_ball 0 r).finite
, that isL
is discretesubmodule.span ℝ (L : set E) = ⊤
, that isL
spansE
overK
.
Main result #
zspan.is_add_fundamental_domain
: for a ℤ-latticesubmodule.span ℤ (set.range b)
, proves that the set defined byzspan.fundamental_domain
is a fundamental domain.
The fundamental domain of the ℤ-lattice spanned by b
. See zspan.is_add_fundamental_domain
for the proof that it is the fundamental domain.
The map that sends a vector of E
to the element of the ℤ-lattice spanned by b
obtained
by rounding down its coordinates on the basis b
.
Equations
- zspan.floor b m = finset.univ.sum (λ (i : ι), ⌊⇑(⇑(b.repr) m) i⌋ • ⇑(basis.restrict_scalars ℤ b) i)
The map that sends a vector of E
to the element of the ℤ-lattice spanned by b
obtained
by rounding up its coordinates on the basis b
.
Equations
- zspan.ceil b m = finset.univ.sum (λ (i : ι), ⌈⇑(⇑(b.repr) m) i⌉ • ⇑(basis.restrict_scalars ℤ b) i)
The map that sends a vector E
to the fundamental domain of the lattice,
see zspan.fract_mem_fundamental_domain
.
Equations
- zspan.fract b m = m - ↑(zspan.floor b m)
For a ℤ-lattice submodule.span ℤ (set.range b)
, proves that the set defined
by zspan.fundamental_domain
is a fundamental domain.