This tutorial is probably also available as a Jupyter notebook in the demo
folder in the polymake source and on github.
Different versions of this tutorial: latest release, release 4.0, release 3.6, release 3.5, release 3.4, nightly master
Defect Polytopes and CounterExamples With polymake
This short tutorial explains the scripts and computations used in the note "Defect Polytopes and CounterExamples With polymake" (Joswig and Paffenholz).
Scripts used in the Paper
The scripts referenced in the paper are contained in this file . Save this file to a local directory and include them into a running polymake session via
script("<scriptfile>");
at the polymake prompt. The scripts use either Normaliz or LattE for the computation of the normalized volume and the Erhhart polynomial of a face of a polytope. A listing of the function ct_invariant
is here, the function f_poly_coeff
is here, and the rfold pyramids can be constructed with the script found here.
Introduction
Let P be a lattice polytope, i.e. a polytope whose vertices are contained in Z^{d}, and let F(P) be the set of nonempty faces of P, including P itself. Further, we let F_{P}(k) be the set of kdimensional faces of P. For t∈N we define a function c_{t} via

In the following we consider some conjectures about this invariant contained in the paper “Projective duality of toric manifolds and defect polytopes” by S. Di Rocco (Proc. Lond. Math. Soc., III. Ser. , 2006, 93, pages 85104).
Computations
We use the following script to compute c_{t}(P) for a polytope P. It takes two arguments: the polytope as the first, and the parameter t as the second argument.
ct_invariant
sub ct_invariant { my ($P, $t) = @_; my $v = $P>VERTICES; my $hd = $P>HASSE_DIAGRAM; my $sign = 1; my $c = new Integer(0); for (my $d = $P>DIM; $d > 0; $d) { foreach (@{$hd>nodes_of_dim($d)}) { my $F = new Polytope(VERTICES=> $v>minor($hd>FACES>[$_],All)); my $vol = $F>LATTICE_VOLUME; $c += $sign*fac($d+$t)/fac($d)*$vol; } $sign = $sign; } $c += $sign*fac($t)*$P>N_VERTICES; return $c; }
(You can either paste this into the shell, or save it to a file and load it via script<filename>
in the shell.) We can use this for some simple calculations:
polytope > $S = simplex(2); polytope > $P = prism($S); polytope > print $P>SMOOTH; 1 polytope > print ct_invariant($P,1); 0
We have first defined a 2dimensional standard unit simplex in the variable $S and then stroed the prism over $S in the variable $P. We compute that $P is a smooth polytope with c_{1}(P)=0. Another interesting example is the hypersimplex Δ(3,6). This polytope is not simple, so also not smooth.
polytope > print ct_invariant(hypersimplex(3,6),1); 136
Nevertheless, c_{1} is still positive. Note that the value given in the paper of Di Rocco is not correct. Conj. 4 in that paper asks whether this is true for any polytope. We can use polymake to disprove this.
Polytopes with Negative c<sub>1</sub>
A lattice pyramid over a polytope P is the polytope obtained by taking the convex hull of P embedded at height 0 in R^{d+1} together with a vertex of P embeeded at height 1. Repeating this r times gives the rfold pyramid. The following script does this in polymake:
r_fold_pyr
sub r_fold_pyr { my ($P, $r) = @_; for (; $r>0; $r) { $P = lattice_pyramid($P); } return $P; }
We can apply this to the 3dimensional standard unit cube:
polytope > $C=cube(3,0); polytope > print ct_invariant($C,0); 2 polytope > print ct_invariant($C,1); 4 polytope > print ct_invariant(r_fold_pyr($C,1),1); 1 polytope > print ct_invariant(r_fold_pyr($C,2),2); 2 polytope > print ct_invariant(r_fold_pyr($C,3),3); 6
Convolutions of Ehrhart Polynomials
We further define a polynomial f(P,t) via

In polymake, we can compute the coefficients of the Fpolynomial with the following script:
f_poly_coeff
sub f_poly_coeff { my ($P) = @_; my $d = $P>DIM; my $v = $P>VERTICES; my $hd = $P>HASSE_DIAGRAM; my $sign = 1; my $f = new Vector<Integer>($d+1); for (my $k = $d; $k > 0; $k) { foreach (@{$hd>nodes_of_dim($k)}) { my $q = new Polytope(VERTICES=> $v>minor($hd>FACES>[$_],All)); my $h = (zero_vector<Rational>($d$k)) $q>EHRHART_POLYNOMIAL_COEFF; $f += $sign*fac($k+1)*$h; } $sign = $sign; } $f += $sign*$P>N_VERTICES *unit_vector<Rational>($d+1,$d); return $f; }
Here ehr(F,t) is the Ehrhart polynomial of F, and the coefficients of f(P,t) are integral, as k!\ehr(F,k) has integral coefficients for any kdimensional lattice polytope. The returned vector lists the coefficients of the polynomial with increasing degree, i.e., the last entry is the leading coefficient of the polynomial.
Conj. 5 in the paper of Di Rocco asks whether all coefficients of this polynomial are nonnegative. We start out with the $3$dimensional unit cube stored in $C.
polytope > print f_poly_coeff($C); 24 36 24 4 polytope > print f_poly(lattice_pyramid($C)); 120 192 114 32 1
It is not hard to see that the leading coefficient of this polynomial coincides with c_{1}(P). Looking at iterated pyramids, by reusing our function r\_fold\_pyr
, we obtain:
polytope > print f_poly_coeff(r_fold_pyr($C,3)); 5040 9060 5538 1698 188 3 0 polytope > print f_poly_coeff(r_fold_pyr($C,5)); 362880 717696 491304 163056 28086 1490 15 0 0
We are not aware of an example where another but the leading coefficient of the polynomial is negative.
Cayley polytopes
It is finally asked in the paper of di Rocco whether c_{1}(P)=0 implies that P is a strict Cayley polytope. A strict Cayley polytope is a polytope that is affinely isomorphic to
Q_{0}★…★ Q_{k}=conv(Q_{0}×{e_{0}},… , Q_{k}×{e_{k}})
where e_{j} is a lattice basis of Z^{k+1} and Q_{0}, … , Q_{k} are strictly isomorphic lattice polytopes in R^{m} (i.e. having the same normal fan) such that dim(aff(Q_{0}, … , Q_{k}))=m. This is not true, as the example of a twofold pyramid over the unit square shows:
polytope > $Q=cube(2,0); polytope > print ct_invariant(r_fold_pyr($Q,2),1); 0
However, in the above definition for a Cayley polytope we could drop the condition that all factors have the same normal fan. With this slightly more general notion the $2$fold lattice pyramid over the $0/1$square is a nonstrict Cayley polytope of two segments and two points. On the other hand, it is known that the set of lattice points of a defect polytope is contained in two parallel hyperplanes with distance one, so any defect polytope is always a nonstrict Cayley polytope over a segment.
Conclusion
We could show with how little effort it is possible to address quite specific problems in toric
geometry with the software system polymake
. In fact, we answered three open questions by providing and
verifying explicit examples.