Documentation

TauCeti.Geometry.Toric.Algebraic.Lattice

Integral lattices in a real vector space #

The combinatorics of a toric variety takes place in a real vector space V carrying a distinguished additive map i : N →+ V from an abelian group of integral vectors. For that picture to determine anything, N has to be finite free over ℤ and V has to be the real scalar extension of N along i: the latter is exactly Mathlib's IsBaseChange ℝ condition on the ℤ-linear map underlying i, and TauCeti.Toric.IsIntegralLattice is the name this development gives this interface.

Injectivity of i together with a full real span is strictly weaker and is not enough. The map ℤ² →+ ℝ, (a, b) ↦ a + √2 * b, is injective and its image spans ℝ, yet its image is dense, so its positive image has arbitrarily small elements and a ray has no least positive lattice vector to serve as its "primitive generator". The scalar-extension condition rules this out by forcing the integral and real ranks to agree.

Main declarations #

Implementation notes #

IsIntegralLattice packages finite freeness of the source with a named specialization of IsBaseChange: it fixes the ring extension ℤ → ℝ, takes the bare additive map i that the ambient cone geometry uses, and is the vocabulary in which toric cones, fans and their morphisms are stated. The IsIntegralLattice.isBaseChange projection is the interface that downstream modules use to reach the whole of Mathlib's base-change API.

References #

The mathematics is §1.2 of D. Cox, J. Little and H. Schenck, Toric Varieties, and §1.2 of W. Fulton, Introduction to Toric Varieties.

structure TauCeti.Toric.IsIntegralLattice {N : Type u_1} {V : Type u_2} [AddCommGroup N] [AddCommGroup V] [Module ℝ V] (i : N →+ V) :

An additive map i : N →+ V from a finite free ℤ-module into a real vector space is an integral lattice when it exhibits V as the extension of scalars of N from ℤ to ℝ.

Instances For

    An integral lattice, spelled by the scalar-extension equivalence it provides.

    theorem TauCeti.Toric.isIntegralLattice_of_basis {N : Type u_1} {V : Type u_2} [AddCommGroup N] [AddCommGroup V] [Module ℝ V] {i : N →+ V} {ι : Type u_3} [Finite ι] (b : Module.Basis ι ℤ N) (c : Module.Basis ι ℝ V) (hbc : ∀ (j : ι), i (b j) = c j) :

    An integral basis of N whose image under i is a real basis of V exhibits i as an integral lattice.

    An integral lattice is injective.

    When the real-linear map ℝ ⊗[ℤ] N →ₗ[ℝ] V induced by i is injective (for instance when i extends scalars from ℤ to ℝ, by IsBaseChange.liftBaseChange_injective), a family of integral vectors is linearly independent over ℤ exactly when its image under i is linearly independent over ℝ: a real linear relation among lattice vectors forces an integral one. The image of i need not span V.

    The image of an integral lattice spans the ambient real vector space.

    The integral rank of the lattice equals the real dimension of the ambient space.

    An integral lattice sits in a finite-dimensional real vector space.

    The range of an integral lattice is the ℤ-span of the real basis attached to an integral basis of N.

    theorem TauCeti.Toric.IsIntegralLattice.linearIndependent_basis {N : Type u_1} {V : Type u_2} [AddCommGroup N] [AddCommGroup V] [Module ℝ V] {i : N →+ V} {ι : Type u_3} (h : IsIntegralLattice i) (b : Module.Basis ι ℤ N) :
    LinearIndependent ℝ fun (j : ι) => i (b j)

    The images of the vectors of an integral basis of an integral lattice are linearly independent over the reals.

    Maps of lattices #

    noncomputable def TauCeti.Toric.IsIntegralLattice.extend {N : Type u_1} {N' : Type u_2} {V : Type u_4} {V' : Type u_5} [AddCommGroup N] [AddCommGroup N'] [AddCommGroup V] [AddCommGroup V'] [Module ℝ V] [Module ℝ V'] {i : N →+ V} (h : IsIntegralLattice i) (i' : N' →+ V') (f : N →+ N') :

    The real-linear map extending a map f : N →+ N' of integral vectors.

    Instances For
      @[simp]
      theorem TauCeti.Toric.IsIntegralLattice.extend_apply {N : Type u_1} {N' : Type u_2} {V : Type u_4} {V' : Type u_5} [AddCommGroup N] [AddCommGroup N'] [AddCommGroup V] [AddCommGroup V'] [Module ℝ V] [Module ℝ V'] {i : N →+ V} (h : IsIntegralLattice i) (i' : N' →+ V') (f : N →+ N') (n : N) :
      (h.extend i' f) (i n) = i' (f n)
      theorem TauCeti.Toric.IsIntegralLattice.eq_extend {N : Type u_1} {N' : Type u_2} {V : Type u_4} {V' : Type u_5} [AddCommGroup N] [AddCommGroup N'] [AddCommGroup V] [AddCommGroup V'] [Module ℝ V] [Module ℝ V'] {i : N →+ V} {i' : N' →+ V'} (h : IsIntegralLattice i) {f : N →+ N'} {g : V →ₗ[ℝ] V'} (hg : ∀ (n : N), g (i n) = i' (f n)) :
      g = h.extend i' f

      A real-linear map compatible with a map of integral vectors is the extension of it. This is what makes the real-linear part of a map of lattices determined rather than chosen.

      @[simp]
      theorem TauCeti.Toric.IsIntegralLattice.extend_comp {N : Type u_1} {N' : Type u_2} {N'' : Type u_3} {V : Type u_4} {V' : Type u_5} {V'' : Type u_6} [AddCommGroup N] [AddCommGroup N'] [AddCommGroup N''] [AddCommGroup V] [AddCommGroup V'] [AddCommGroup V''] [Module ℝ V] [Module ℝ V'] [Module ℝ V''] {i : N →+ V} {i' : N' →+ V'} {i'' : N'' →+ V''} (h : IsIntegralLattice i) (h' : IsIntegralLattice i') (f : N →+ N') (f' : N' →+ N'') :
      h'.extend i'' f' ∘ₗ h.extend i' f = h.extend i'' (f'.comp f)
      noncomputable def TauCeti.Toric.IsIntegralLattice.realCharacter {N : Type u_1} {V : Type u_4} [AddCommGroup N] [AddCommGroup V] [Module ℝ V] {i : N →+ V} (h : IsIntegralLattice i) :

      The real-linear extension of an integral character. Extension is additive in the character, so this is bundled as an additive homomorphism into the real dual space.

      Instances For
        @[simp]
        theorem TauCeti.Toric.IsIntegralLattice.realCharacter_apply {N : Type u_1} {V : Type u_4} [AddCommGroup N] [AddCommGroup V] [Module ℝ V] {i : N →+ V} (h : IsIntegralLattice i) (m : N →+ ℤ) (n : N) :
        (h.realCharacter m) (i n) = ↑(m n)

        Extending an integral character and evaluating it on a lattice point recovers the integer value of the character, viewed as a real number.

        theorem TauCeti.Toric.IsIntegralLattice.eq_realCharacter {N : Type u_1} {V : Type u_4} [AddCommGroup N] [AddCommGroup V] [Module ℝ V] {i : N →+ V} (h : IsIntegralLattice i) {m : N →+ ℤ} {φ : Module.Dual ℝ V} (hφ : ∀ (n : N), φ (i n) = ↑(m n)) :

        A real-linear functional agreeing with an integral character on lattice points is the real extension of that character.

        The real extension of an integral coordinate character is the corresponding coordinate of the real basis attached to an integral basis.

        theorem TauCeti.Toric.IsIntegralLattice.exists_realCharacter_eq_iff {N : Type u_1} {V : Type u_4} [AddCommGroup N] [AddCommGroup V] [Module ℝ V] {i : N →+ V} (h : IsIntegralLattice i) {φ : Module.Dual ℝ V} :
        (∃ (m : N →+ ℤ), h.realCharacter m = φ) ↔ ∀ (n : N), ∃ (k : ℤ), φ (i n) = ↑k

        A real-linear functional is the real extension of an integral character exactly when it takes integer values at every lattice point.

        Real extension of integral characters is injective.

        theorem TauCeti.Toric.IsIntegralLattice.exists_realCharacter_apply_eq {N : Type u_1} {V : Type u_4} [AddCommGroup N] [AddCommGroup V] [Module ℝ V] {i : N →+ V} (h : IsIntegralLattice i) (f : (N →+ ℤ) →+ ℝ) :
        ∃ (v : V), ∀ (m : N →+ ℤ), (h.realCharacter m) v = f m

        Every additive real-valued function on the integral characters is evaluation at a point of the ambient real space: the real extensions of the characters identify V with the real-valued additive functions on N →+ ℤ.

        theorem TauCeti.Toric.IsIntegralLattice.realCharacter_comp {N : Type u_1} {N' : Type u_2} {V : Type u_4} {V' : Type u_5} [AddCommGroup N] [AddCommGroup N'] [AddCommGroup V] [AddCommGroup V'] [Module ℝ V] [Module ℝ V'] {i : N →+ V} {i' : N' →+ V'} (h : IsIntegralLattice i) (h' : IsIntegralLattice i') (f : N →+ N') (g : V →ₗ[ℝ] V') (hfg : ∀ (n : N), g (i n) = i' (f n)) (m : N' →+ ℤ) :

        Real extension commutes with a compatible map of lattices.

        theorem TauCeti.Toric.isIntegralLattice_congr {N : Type u_1} {N' : Type u_2} {V : Type u_4} {V' : Type u_5} [AddCommGroup N] [AddCommGroup N'] [AddCommGroup V] [AddCommGroup V'] [Module ℝ V] [Module ℝ V'] {i : N →+ V} {i' : N' →+ V'} (f : N ≃+ N') (e : V ≃ₗ[ℝ] V') (hfe : ∀ (n : N), e (i n) = i' (f n)) :

        Being an integral lattice transfers along an isomorphism of the integral vectors together with a compatible real-linear equivalence.

        theorem TauCeti.Toric.IsIntegralLattice.prod {N : Type u_1} {N' : Type u_2} {V : Type u_4} {V' : Type u_5} [AddCommGroup N] [AddCommGroup N'] [AddCommGroup V] [AddCommGroup V'] [Module ℝ V] [Module ℝ V'] {i : N →+ V} {i' : N' →+ V'} (h : IsIntegralLattice i) (h' : IsIntegralLattice i') :

        The product of two integral lattices is an integral lattice for the componentwise map.

        @[simp]
        theorem TauCeti.Toric.IsIntegralLattice.realCharacter_coprod {N : Type u_1} {N' : Type u_2} {V : Type u_4} {V' : Type u_5} [AddCommGroup N] [AddCommGroup N'] [AddCommGroup V] [AddCommGroup V'] [Module ℝ V] [Module ℝ V'] {i : N →+ V} {i' : N' →+ V'} (h : IsIntegralLattice i) (h' : IsIntegralLattice i') (m : N →+ ℤ) (m' : N' →+ ℤ) :

        Real extension of the sum of characters on the two factors of a product lattice is the sum of their real extensions.

        Discreteness #

        The image of an integral lattice is a discrete subgroup of a normed real vector space; this is what fails for an injective map with dense image.

        The image of an integral lattice is a ℤ-lattice in Mathlib's sense.

        Conversely, a full ℤ-lattice in Mathlib's sense, in a finite-dimensional normed real vector space, is an integral lattice for its inclusion: the space is the real scalar extension of the lattice.

        The standard lattice #

        The standard lattice ℤ^n ⊆ ℝ^n given by the coordinatewise integer cast.