This manual describes the **toric** package for working with toric varieties in **GAP**. Toric varieties can be dealt with more easily than general varieties since often times questions about a toric variety can be reformulated in terms of combinatorial geometry. Some coding theory commands related to toric varieties are contained in the error-correcting codes **GUAVA** package (for example, the command `ToricCode`

). We refer to the **GUAVA** manual [CM09] and the expository paper [JV02] for more details.

The **toric** package also contains several commands unrelated to toric varieties (mostly for list manipulations). These will not be described in this documention but they are briefly documented in the `lib/util.gd`

file.

**toric** is implemented in the **GAP** language, and runs on any system supporting **GAP**4.3 and above. The **toric** package is loaded with the command

gap> LoadPackage( "toric" );

Please send bug reports, suggestions and other comments about **toric** to support@gap-system.org.

Rather than sketch the theory of toric varieties, we refer to [JV02] and [Ful93] for details. However, we briefly describe some terminology and notation.

Let F denote a field and R=F [x_1,...,x_n] be a ring in n variables. A **binomial equation** in R is one of the form

x_1^{k_1}...x_n^{k_n}=x_1^{\ell_1}...x_n^{\ell_n},

where k_i ≥ 0, ℓ_j ≥ 0 are integers. A binomial variety is a subvariety of affine n-space A_F^n defined by a finite set of binomial equations (such a variety need not be normal). A typical ``toric variety'' is binomial, though they will be introduced via an *a priori* independent construction. The basic idea of the construction is to replace each such binomial equation as above by a relation in a semigroup contained in a lattice and replace R by the ``group algebra'' of this semigroup. By the way, a toric variety is always normal (see for example, [Ful93], page 29).

Let Q denote the field of rational numbers and Z denote the set of integers. Let n>1 denote an integer.

Let V=Q^n having basis f_1=(1,0,...,0), ..., f_n=(0,...,0,1). Let L_0=Z^n⊂ V be the standard lattice in V. We identify V and L_0⊗_Z Q. We use ⟨ , ⟩ to denote the (standard) inner product on V. Let

L_0^*={\rm Hom}(L_0,Z)=\{ v\in V\ |\ \langle v,w \rangle \in Z, \ \forall w\in L_0\}

denote the **dual lattice**, so (fixing the standard basis e_1^*,...,e_n^* dual to the f_1,...,f_n) L_0^* may be identified with Z^n.

A **cone** in V is a set σ of the form

\sigma=\{a_1v_1+...+a_mv_m\ |\ a_i\geq 0\}\subset V,

where v_1,...,v_m ∈ V is a given collection of vectors, called (semigroup) **generators** of σ. A **rational cone** is one where v_1,...,v_m ∈ L_0. A **strongly convex** cone is one which contains no lines through the origin.

* By abuse of terminology, from now on a cone of L_0 is a strongly convex rational cone. *

A **face** of a cone σ is either σ itself or a subset of the form H∩ σ, where H is a codimension one subspace of V which intersects the cone non-trivially and such that the cone is contained in exactly one of the two half-spaces determined by H. A **ray** (or edge) of a cone is a one-dimensional face. Typically, cones are represented in **toric** by the list of vectors defining their rays. The **dimension** of a cone is the dimension of the vector space it spans. The **toric** package can test if a given vector is in a given cone (see `InsideCone`

).

If σ is a cone then the **dual cone** is defined by

\sigma^* =\{w \in L_0^*\otimes Q \ |\ \langle v,w \rangle \geq 0,\ \forall v\in \sigma\}.

The **toric** package can test if a vector is in the dual of a given cone (see `InDualCone`

).

Associate to the dual cone σ^* is the semigroup

S_\sigma =\sigma^*\cap L_0^* =\{w\in L_0^* \ |\ \langle v,w\rangle \geq 0,\ \forall v\in \sigma\}.

Though L_0^* has $n$ generators *as a lattice*, typically S_σ will have more than n generators *as a semigroup*. The **toric** package can compute a minimal list of semigroup generators of S_σ (see `DualSemigroupGenerators`

).

A fan is a collection of cones which ``fit together'' well. A **fan** in L_0 is a set ∆={σ } of rational strongly convex cones in V= L_0 ⊗ Q such that

if σ ∈ ∆ and τ ⊂ σ is a face of σ then τ ∈ ∆,

if σ_1, σ_2 ∈ ∆ then the intersection σ_1 ∩ σ_2 is a face of both σ_1 and σ_2 (and hence belongs to ∆).

In particular, the face of a cone in a fan is a cone is the fan.

If V is the (set-theoretic) union of the cones in ∆ then we call the fan **complete**. We shall assume that all fans are finite. A fan is determined by its list of maximal cones.

*Notation*: A fan ∆ is represented in **toric** as a set of maximal cones. For example, if ∆ is the fan with maximal cones σ_1=Q_+⋅ f_1+Q_+⋅ (-f_1+f_2), σ_2=Q_+⋅ (-f_1+f_2)+Q_+⋅ (-f_1-f_2), σ_3=Q_+⋅ (-f_1-f_2)+Q_+⋅ f_1, then ∆ is represented by [[[1,0],[-1,1]],[[-1,1],[-1,-1]],[[-1,-1],[1,0]]].

The **toric** package can compute all cones in a fan of a given dimension (see `ConesOfFan`

). Moreover, **toric** can compute the set of all normal vectors to the faces (i.e., hyperplanes) of a cone (see `Faces`

).

The **star** of a cone σ in a fan ∆ is the set ∆_σ of cones in ∆ containing σ as a face. The **toric** package can compute stars (see `ToricStar`

).

Let

R_\sigma = F [S_\sigma]

denote the ``group algebra'' of this semigroup. It is a finitely generated commutative F-algebra. It is in fact integrally closed ([Ful93], page 29). We may interprete R_σ as a subring of R=F [x_1,...,x_n] as follows: First, identify each e_i^* with the variable x_i. If S_σ is generated as a semigroup by vectors of the form ℓ_1 e_1^*+...+ℓ_n e_n^*, where ℓ_i is an integer, then its image in R is generated by monomials of the form x_1^ℓ_1dots x_n^ℓ_n. The **toric** package can compute these generating monomials (see `EmbeddingAffineToricVariety`

). See Lemma 2.14 in [JV02] for more details. This embedding can also be used to resolve singularities - see section 5 of [JV02] for more details.

Let

U_\sigma={\rm Spec}\ R_\sigma.

This defines an **affine toric variety** (associated to σ). It is known that the coordinate ring R_σ of the affine toric variety U_σ has the form R_σ = F[x_1,...,x_n]/J, where J is an ideal. The **toric** package can compute generators of this ideal by using the `DualSemigroupGenerators`

and the `EmbeddingAffineToricVariety`

commands.

Roughly speaking, the toric variety X(∆) associated to the fan ∆ is given by a collection of affine pieces $U_{\sigma_1},U_{\sigma_2},\dots,U_{\sigma_d}$ which ``glue'' together (where ∆ = {σ_i}). The affine pieces are given by the zero sets of polynomial equations in some affine spaces and the gluings are given by maps ϕ_i,j : U_σ_i → U_σ_j which are defined by ratios of polynomials on open subsets of the $U_{\sigma_i}$. The **toric** package does *not* compute these gluings or work directly with these (non-affine) varieties X(∆).

A cone σ ⊂ V is said to be **nonsingular** if it is generated by part of a basis for the lattice L_0. A fan ∆ of cones is said to be **nonsingular** if all its cones are nonsingular. It is known that U_σ is nonsingular if and only if σ is nonsingular (Proposition 2.1 in [Ful93]).

**Example:** In three dimensions, consider the cones σ_ϵ_1,ϵ_2,ϵ_3,i,j generated by (ϵ_1⋅ 1,ϵ_2⋅ 1,ϵ_3⋅ 1) and the standard basis vectors f_i,f_j, where ϵ_i=± 1 and 1≤ inot= j≤ 3. There are 8 cones per octant, for a total of 64 cones. Let ∆ denote the fan in V=Q^3 determined by these maximal cones. The toric variety X(∆) is nonsingular.

Although the **toric** package does not work directly with the toric varieties X(∆), it can compute objects associated with it. For example, it can compute the Euler characteristic (see `EulerCharacteristic`

), Betti numbers (see `BettiNumberToric`

), and the number of GF(q)-rational points (see `CardinalityOfToricVariety`

) of X(∆), * provided ∆ is nonsingular.*

For an algebraic variety X the group of **Weil divisors** on X is the abelian group Div(X) generated (additively) by the irreducible subvarieties of X of codimension 1. For a toric variety X(∆) with dense open torus T, a Weil divisor D is **T-invariant** if D=T⋅ D. The group of T-invariant Weil divisors is denoted TDiv(X). This is finitely generated by an explicitly given finite set of divisors {D_1,...,D_r} which correspond naturally to certain cones in ∆ (see [Ful93] for details). In particular, we may represent such a divisor D in TDiv(X) by an k-tuple (d_1,...,d_k) of integers.

Let ∆ denote a fan in V=Q^n with rays (or edges) τ_i, 1≤ i≤ k, and let v_i denote the first lattice point on τ_i. Associated to the T-invariant Weil divisor D=d_1D_1+...+d_kD_k, is the **polytope**

P_D = \{ x=(x_1,...,x_n)\ |\ \langle x,v_i \rangle \geq -d_i, \ \forall 1 \leq i \leq k\}.

The **toric** package can compute P_D (see `DivisorPolytope`

), as well as the set of all lattice points contained in this polytope (see `DivisorPolytopeLatticePoints`

). Also associated to the T-invariant Weil divisor D=d_1D_1+...+d_kD_k, is the Riemann-Roch space, L(D). This is a space of functions on X(∆) whose zeros and poles are ``controlled'' by D (for a more precise definition, see [Ful93]). The **toric** package can compute a basis for L(D) (see `RiemannRochBasis`

), * provided ∆ is complete and nonsingular.*

generated by GAPDoc2HTML