1 \section{Implementation details
}
3 \subsection{An interior point of a polyhedron
}
6 We often need a point that lies in the interior of a polyhedron.
7 The function
\ai[\tt]{inner
\_point} implements the following algorithm.
8 Each polyhedron $P$ can be written as the sum of a polytope $P'$ and a cone $C$
9 (the
\ai{recession cone
} or
\ai{characteristic cone
} of $P$).
10 Adding a positive multiple of the sum of the extremal rays of $C$ to
13 \frac 1 N
\sum_i \vec v_i(
\vec p)
15 of $P'$, where $N$ is the number of vertices, results in a point
16 in the interior of $P$.
18 \subsection{The integer points in the fundamental parallelepiped of a simple cone
}
22 This section is based on
\shortciteN[Lemma
5.1]{Barvinok1992volume
} and
23 \shortciteN{Koeppe2006experiments
}.
28 \sindex{explicit
}{representation
}
29 In this section we will deal exclusively with
\ai{simple cone
}s,
30 i.e. $d$-dimensional cones with $d$ extremal rays and $d$ facets.
32 Some of the facets of these cones may be open.
33 Since we will mostly be dealing with cones in their
34 \ai{explicit representation
}, we will have occasion to speak of
35 ``
\ai{open ray
}s'', by which we will mean that the facet not
36 containing the ray is open. (There is only one such facet because the cone
39 \sindex{fundamental
}{parallelepiped
}
40 \begin{definition
}[Fundamental parallelepiped
]
41 Let $K =
\vec v +
\poshull \lb\,
\vec u_i \,
\rb$ be
42 a closed (shifted) cone, then the
\defindex{fundamental parallelepiped
} $
\Pi$
46 \lb\,
\sum_i \alpha_i \vec u_i
\mid 0 \leq \alpha_i <
1 \,
\rb
49 If some of the rays $
\vec u_i$ of $K$ are open, then the constraints on
50 the corresponding coefficient $
\alpha_i$ are such that $
0 <
\alpha_i \le 1$.
53 \begin{lemma
}[Integer points in the fundamental parallelepiped of a simple cone
]
55 Let $K =
\vec v +
\poshull \lb\,
\vec u_i \,
\rb$ be a closed simple cone
56 and let $A$ be the matrix with the generators $
\vec u_i$ of $K$
58 Furthermore let $V A W^
{-
1} = S =
\diag \vec s$ be the
\indac{SNF
} of $A$.
59 Then the integer points in the fundamental parallelepiped of $K$ are given
62 \label{eq:parallelepiped
}
63 \vec w^
\T & = &
\vec v^
\T +
\fractional{(
\vec k^
\T W -
\vec v^
\T) A^
{-
1}} A
69 \fractional{\sps{\sum_{j=
1}^d k_j
\vec w^
\T_j -
\vec v^
\T}{\vec u^*_i
}}
72 where $
\vec u^*_i$ are the columns of $A^
{-
1}$ and $k_j
\in \ZZ$ ranges
73 over $
0 \le k_j < s_j$.
77 Since $
0 \le \fractional{x
} <
1$, it is clear that each such $
\vec w$
78 lies inside the fundamental parallelepiped.
81 \vec w^
\T & = &
\vec v^
\T +
\fractional{(
\vec k^
\T W -
\vec v^
\T) A^
{-
1}} A
86 (
\vec k^
\T W -
\vec v^
\T) A^
{-
1} -
\floor{(
\vec k^
\T W -
\vec v^
\T) A^
{-
1}}
90 \underbrace{\vec k^
\T W
\mathstrut}_
{\in \ZZ^
{1\times d
}}
92 \underbrace{\floor{(
\vec k^
\T W -
\vec v^
\T) A^
{-
1}}}_
{\in \ZZ^
{1\times d
}}
93 \underbrace{A
\mathstrut}_
{\in \ZZ^
{d
\times d
}} \in \ZZ^
{1\times d
}.
95 Finally, if two such $
\vec w$ are equal, i.e., $
\vec w_1 =
\vec w_2$,
98 \vec 0^
\T =
\vec w_1^
\T -
\vec w_2^
\T
99 & = &
\vec k_1^
\T W -
\vec k_2^
\T W +
\vec p^
\T A
101 & = &
\left(
\vec k_1^
\T -
\vec k_2^
\T \right) W +
\vec p^
\T V^
{-
1} S W,
103 with $
\vec p
\in \ZZ^d$,
104 or $
\vec k_1
\equiv \vec k_2
\mod \vec s$, i.e., $
\vec k_1 =
\vec k_2$.
105 Since $
\det S =
\det A$, we obtain all points in the fundamental parallelepiped
106 by taking all $
\vec k
\in \ZZ^d$ satisfying $
0 \le k_j < s_j$.
109 If the cone $K$ is not closed then the coefficients of the open rays
110 should be in $(
0,
1]$ rather than in $
[0,
1)$.
111 In (
\ref{eq:parallelepiped
}),
112 we therefore need to replace the fractional part $
\fractional{x
} = x -
\floor{x
}$
113 by $
\cractional{x
} = x -
\ceil{x-
1}$ for the open rays.
118 <
\intercol,
0pt>:<
0pt,
\intercol>::
119 \POS@i@=
{(
0,-
3),(
0,
0),(
4,
2),(
4,-
3)
},
{0*
[grey
]\xypolyline{*
}}
120 \POS@i@=
{(
0,-
3),(
0,
0),(
4,
2)
},
{0*
[|(
2)
]\xypolyline{}}
123 \POS(
0,
0)
\ar@
[|(
3)
](
0,-
1)
124 \POS(
0,
0)
\ar@
[|(
3)
](
2,
1)
125 \POS(
0,-
1)
\ar@
{--
}@
[|(
2)
](
2,
0)
126 \POS(
2,
1)
\ar@
{--
}@
[|(
2)
](
2,
0)
130 \caption{The integer points in the fundamental parallelepiped of $K$
}
131 \label{f:parallelepiped
}
137 K =
\sm{0 \\
0} +
\poshull \lb\,
\sm{2 \\
1},
\sm{0 \\ -
1} \,
\rb
140 shown in Figure~
\ref{f:parallelepiped
}.
143 A =
\sm{2 &
1\
\0 & -
1} \qquad A^
{-
1} =
\sm{1/
2 &
1/
2 \\
0 & -
1 }
147 \sm{1 &
0 \\
1 &
1 } \sm{2 &
1\
\0 & -
1} =
\sm{1 &
0 \\
0 &
2} \sm{2 &
1 \\
1 &
0}.
149 We have $
\det A =
\det S =
2$ and
150 $
\vec k_1^
\T =
\sm{0 &
0}$ and $
\vec k_2^
\T =
\sm{0 &
1}$.
153 \vec w_1^
\T =
\fractional{\sm{0 &
0} \sm{2 &
1 \\
1 &
0} \sm{1/
2 &
1/
2 \\
0 & -
1 }}
154 \sm{2 &
1\
\0 & -
1} =
\sm{0 &
0}
159 \fractional{\sm{0 &
1} \sm{2 &
1 \\
1 &
0} \sm{1/
2 &
1/
2 \\
0 & -
1 }}
163 \sm{1/
2 &
1/
2} \sm{2 &
1\
\0 & -
1} =
\sm{1 &
0}.
170 \subsection{Barvinok's decomposition of simple cones in primal space
}
171 \label{s:decomposition
}
173 As described by
\shortciteN{DeLoera2003effective
}, the first
174 implementation of Barvinok's counting algorithm applied
175 \ai{Barvinok's decomposition
} \shortcite{Barvinok1994
} in the
\ai{dual space
}.
176 \ai{Brion's polarization trick
} \shortcite{Brion88
} then ensures that you
177 do not need to worry about lower-dimensional faces in the decomposition.
178 Another way of avoiding the lower-dimensional faces, in the
\ai{primal space
},
179 is to perturb the vertex of the cone such that none of the lower-dimensional
180 face encountered contain any integer points
\shortcite{Koeppe2006primal
}.
181 In this section, we describe another technique that is based on allowing
182 some of the facets of the cone to be open.
184 The basic step in Barvinok's decomposition is to replace a
185 $d$-dimensional simple cone
186 $K =
\poshull \lb\,
\vec u_i \,
\rb_{i=
1}^d
\subset \QQ^d$
187 by a signed sum of (at most) $d$ cones $K_j$
188 with a smaller determinant (in absolute value).
189 The cones are obtained by successively replacing each generator
190 of $K$ by an appropriately chosen
191 $
\vec w =
\sum_{i=
1}^d
\alpha_i \vec u_i$, i.e.,
195 \poshull \left(
\lb\,
\vec u_i \,
\rb_{i=
1}^d
196 \setminus \
{\,
\vec u_j \,\
} \cup \
{\,
\vec w \,\
}\right)
199 To see that we can use these $K_j$ to perform a decomposition,
200 rearrange the $
\vec u_i$ such that for all $
1 \le i
\le k$ we have
201 $
\alpha_i <
0$ and for all $k+
1 \le i
\le d'$ we have $
\alpha_i >
0$,
202 with $d - d'$ the number of zero $
\alpha_i$.
203 We may assume $k < d'$; otherwise replace $
\vec w
\in B$ by
204 $-
\vec w
\in B$. We have
206 \vec w +
\sum_{i=
1}^k (-
\alpha_i)
\vec u_i =
207 \sum_{i=k+
1}^
{d'
} \alpha_i \vec u_i
212 \sum_{i=
0}^k
\beta_i \vec u_i =
213 \sum_{i=k+
1}^
{d'
} \alpha_i \vec u_i
216 with $
\vec u_0 =
\vec w$, $
\beta_0 =
1$ and $
\beta_i = -
\alpha_i >
0$
217 for $
1 \le i
\le k$. Any two $
\vec u_j$ and $
\vec u_l$ on the same side
218 of the equality are on opposite sides of the linear hull $H$ of
219 the other $
\vec u_i$s since there exists a convex combination
220 of $
\vec u_j$ and $
\vec u_l$ on this hyperplane.
221 In particular, since $
\alpha_j$ and $
\alpha_l$ have the same sign,
225 \frac {\alpha_j}{\alpha_j+
\alpha_l} \vec u_j
227 \frac {\alpha_l}{\alpha_j+
\alpha_l} \vec u_l
229 \qquad\text{for $
\alpha_i \alpha_l >
0$
}
232 The corresponding cones $K_j$ and $K_l$ (with $K_0 = K$)
233 therefore intersect in a common face $F
\subset H$.
237 \poshull \left(
\lb\,
\vec u_i \,
\rb_{i=
1}^d
\cup \
{\,
\vec w \,\
}\right)
240 then any $
\vec x
\in K'$ lies both in some cone $K_i$ with
241 $
0 \le i
\le k$ and in some cone $K_i$ with $k+
1 \le i
\le d'$.
242 (Just subtract an appropriate multiple of Equation~(
\ref{eq:sub
}).)
244 $\
{\, K_i \,\
}_
{i=
0}^k$
246 $\
{\, K_i \,\
}_
{i=k+
1}^
{d'
}$
247 therefore both form a triangulation of $K'$ and hence
249 \label{eq:triangulations
}
252 \indf{K
} +
\sum_{i=
1}^k
\indf{K_i
} -
\sum_{j
\in J_1
} \indf{F_j
}
254 \sum_{i=k+
1}^
{d'
} \indf{K_i
} -
\sum_{j
\in J_2
} \indf{F_j
}
258 \label{eq:decomposition
}
259 \indf{K
} =
\sum_{i=
1}^
{d'
} \varepsilon_i \indf{K_i
} +
\sum_j \delta_j \indf{F_j
}
262 with $
\varepsilon_i = -
1$ for $
1 \le i
\le k$,
263 $
\varepsilon_i =
1$ for $k+
1 \le i
\le d'$,
264 $
\delta_j \in \
{ -
1,
1 \
}$ and $F_j$ some lower-dimensional faces.
265 Figure~
\ref{fig:w
} shows the possible configurations
266 in the case of a $
3$-dimensional cone.
271 \begin{minipage
}{0cm
}
273 <
\intercol,
0pt>:<
0pt,
\intercol>::
276 \POS(-
2,-
1)="a"*+!U
{+
}
279 \POS(
0,
0)="w"*+!DR
{\vec w
}
289 \POS(-
2,-
1)="a"*+!U
{+
}
292 \POS(-
3,
1)="w"*+!DR
{\vec w
}
302 \POS(-
2,-
1)="a"*+!U
{-
}
305 \POS(
5,-
1)="w"*+!L
{\vec w
}
316 \POS(-
2,-
1)="a"*+!U
{0}
319 \POS(
1,
1)="w"*+!DL
{\vec w
}
328 \POS(-
2,-
1)="a"*+!U
{0}
331 \POS(
4,-
2)="w"*+!L
{\vec w
}
341 \caption[Possible locations of the vector $
\vec w$ with respect to the rays
342 of a $
3$-dimensional cone.
]
343 {Possible locations of $
\vec w$ with respect to the rays
344 of a $
3$-dimensional cone. The figure shows a section of the cones.
}
348 As explained above there are several ways of avoiding the lower-dimensional
349 faces in (
\ref{eq:decomposition
}). Here we will apply the following proposition.
350 \begin{proposition
}[\shortciteN{Koeppe2007parametric
}]
351 \label{p:inclusion-exclusion
}
354 \label{eq:full-source-identity
}
355 \sum_{i
\in {I_1
}} \epsilon_i [P_i
] +
\sum_{i
\in {I_2
}} \delta_k [P_i
] =
0
357 be a (finite) linear identity of indicator functions of closed
358 polyhedra~$P_i
\subseteq\QQ^d$, where the
359 polyhedra~$P_i$ with $i
\in I_1$ are full-dimensional and those with $i
\in I_2$
360 lower-dimensional. Let each closed polyhedron be given as
362 P_i =
\left\
{\,
\vec x
\mid \sp{b^*_
{i,j
}}{x
} \ge \beta_{i,j
} \text{
363 for $j
\in J_i$
}\,
\right\
}
366 Let $
\vec y
\in\QQ^d$ be a vector such that $
\langle \vec b^*_
{i,j
},
\vec
367 y
\rangle \neq 0$ for all $i
\in I_1
\cup I_2$, $j
\in J_i$.
368 For each $i
\in I_1$, we define the half-open polyhedron
370 \label{eq:half-open-by-y
}
372 \tilde P_i =
\Bigl\
{\,
\vec x
\in\QQ^d
\mid {}&
373 \sp{b^*_
{i,j
}}{x
} \ge \beta_{i,j
}
374 \text{ for $j
\in J_i$ with $
\sp{b^*_
{i,j
}}{y
} >
0$,
} \\
375 &
\sp{b^*_
{i,j
}}{x
} >
\beta_{i,j
}
376 \text{ for $j
\in J_i$ with $
\sp{b^*_
{i,j
}}{y
} <
0$
} \,
\Bigr\
}.
381 \label{eq:target-identity
}
382 \sum_{i
\in I_1
} \epsilon_i [\tilde P_i
] =
0.
385 When applying this proposition to (
\ref{eq:decomposition
}), we obtain
387 \label{eq:decomposition:
2}
388 \indf{\tilde K
} =
\sum_{i=
1}^
{d'
} \varepsilon_i \indf{\tilde K_i
}
392 from a given $
\tilde K$, which may be $K$ itself, i.e., a fully closed cone,
393 or the result of a previous application of the proposition, either through
394 a triangulation (Section~
\ref{s:triangulation
}) or a previous decomposition.
395 In either case, a suitable $
\vec y$ is available, either as an interior
396 point of the cone or as the vector used in the previous application
397 (which may require a slight perturbation if it happens to lie on one of
398 the new facets of the cones $K_i$).
399 We are, however, free to construct a new $
\vec y$ on each application
401 In fact, we will not even construct such a vector explicitly, but
402 rather apply a set of rules that is equivalent to a valid choice of $
\vec y$.
403 Below, we will present an ``intuitive'' motivation for these rules.
404 For a more algebraic, shorter, and arguably simpler motivation we
405 refer to
\shortciteN{Koeppe2007parametric
}.
407 The vector $
\vec y$ has to satisfy $
\sp{b^*_j
}y >
0$ for normals $
\vec b^*_j$
408 of closed facets and $
\sp{b^*_j
}y <
0$ for normals $
\vec b^*_j$ of open facets of
410 These constraints delineate a non-empty open cone $R$ from which
411 $
\vec y$ should be selected. For some of the new facets of the cones
412 $
\tilde K_j$, the cone $R$ will not be cut by the affine hull of the facet.
413 The closedness of these facets is therefore predetermined by $
\tilde K$.
414 For the other facets, a choice will have to be made.
415 To be able to make the choice based on local information and without
416 computing an explicit vector $
\vec y$, we use the following convention.
417 We first assign an arbitrary total order to the rays.
418 If (the affine hull of) a facet separates the two rays not on the facet $
\vec u_i$
419 and $
\vec u_j$, i.e., $
\alpha_i \alpha_j >
0$ (
\ref{eq:opposite
}), then
420 we choose $
\vec y$ to lie on the side of the smallest ray, according
422 That is, $
\sp{{\tilde n
}_
{ij
}}y >
0$, for
423 $
\vec {\tilde n
}_
{ij
}$ the normal of the facet pointing towards this smallest ray.
424 Otherwise, i.e., if $
\alpha_i \alpha_j <
0$,
425 the interior of $K$ will lie on one side
426 of the facet and then we choose $
\vec y$ to lie on the other side.
427 That is, $
\sp{{\tilde n
}_
{ij
}}y >
0$, for
428 $
\vec {\tilde n
}_
{ij
}$ the normal of the facet pointing away from the cone $K$.
429 Figure~
\ref{fig:primal:examples
} shows some example decompositions with
430 an explicitly marked $
\vec y$.
436 <
\intercol,
0pt>:<
0pt,
\intercol>::
437 \POS(-
2,-
1)="a"*+!U
{+
}
440 \POS"a"
\ar@
{-
}@
[|(
3)
]"b"
441 \POS"b"
\ar@
{-
}@
[|(
3)
]"c"
442 \POS"c"
\ar@
{-
}@
[|(
3)
]"a"
443 \POS(
0.3,
0.6)*
{\bullet},*+!L
{\vec y
}
448 <
\intercol,
0pt>:<
0pt,
\intercol>::
451 \POS(
0,
0)="w"*+!DR
{\vec w
}
452 \POS"b"
\ar@
{-
}@
[|(
3)
]"c"
453 \POS"b"
\ar@
{-
}@
[|(
3)
]"w"
454 \POS"c"
\ar@
{-
}@
[|(
3)
]"w"
455 \POS(
0.3,
0.6)*
{\bullet},*+!L
{\vec y
}
459 <
\intercol,
0pt>:<
0pt,
\intercol>::
460 \POS(-
2,-
1)="a"*+!U
{+
}
462 \POS(
0,
0)="w"*+!DR
{\vec w
}
463 \POS"c"
\ar@
{-
}@
[|(
3)
]"a"
464 \POS"a"
\ar@
{-
}@
[|(
3)
]"w"
465 \POS"c"
\ar@
{--
}@
[|(
3)
]"w"
466 \POS(
0.3,
0.6)*
{\bullet},*+!L
{\vec y
}
470 <
\intercol,
0pt>:<
0pt,
\intercol>::
471 \POS(-
2,-
1)="a"*+!U
{+
}
473 \POS(
0,
0)="w"*+!DR
{\vec w
}
474 \POS"a"
\ar@
{-
}@
[|(
3)
]"b"
475 \POS"a"
\ar@
{--
}@
[|(
3)
]"w"
476 \POS"b"
\ar@
{--
}@
[|(
3)
]"w"
477 \POS(
0.3,
0.6)*
{\bullet},*+!L
{\vec y
}
482 <
\intercol,
0pt>:<
0pt,
\intercol>::
483 \POS(-
2,-
1)="a"*+!U
{+
}
486 \POS"a"
\ar@
{--
}@
[|(
3)
]"b"
487 \POS"b"
\ar@
{-
}@
[|(
3)
]"c"
488 \POS"c"
\ar@
{--
}@
[|(
3)
]"a"
489 \POS(-
2.5,-
1.5)*
{\bullet},*+!U
{\vec y
}
494 <
\intercol,
0pt>:<
0pt,
\intercol>::
497 \POS(
0,
0)="w"*+!DR
{\vec w
}
498 \POS"b"
\ar@
{-
}@
[|(
3)
]"c"
499 \POS"b"
\ar@
{--
}@
[|(
3)
]"w"
500 \POS"c"
\ar@
{--
}@
[|(
3)
]"w"
501 \POS(-
2.5,-
1.5)*
{\bullet},*+!U
{\vec y
}
505 <
\intercol,
0pt>:<
0pt,
\intercol>::
506 \POS(-
2,-
1)="a"*+!U
{+
}
508 \POS(
0,
0)="w"*+!DR
{\vec w
}
509 \POS"c"
\ar@
{--
}@
[|(
3)
]"a"
510 \POS"a"
\ar@
{--
}@
[|(
3)
]"w"
511 \POS"c"
\ar@
{-
}@
[|(
3)
]"w"
512 \POS(-
2.5,-
1.5)*
{\bullet},*+!U
{\vec y
}
516 <
\intercol,
0pt>:<
0pt,
\intercol>::
517 \POS(-
2,-
1)="a"*+!U
{+
}
519 \POS(
0,
0)="w"*+!DR
{\vec w
}
520 \POS"a"
\ar@
{--
}@
[|(
3)
]"b"
521 \POS"a"
\ar@
{-
}@
[|(
3)
]"w"
522 \POS"b"
\ar@
{-
}@
[|(
3)
]"w"
523 \POS(-
2.5,-
1.5)*
{\bullet},*+!U
{\vec y
}
528 <
\intercol,
0pt>:<
0pt,
\intercol>::
529 \POS(-
2,-
1)="a"*+!U
{+
}
532 \POS"a"
\ar@
{--
}@
[|(
3)
]"b"
533 \POS"b"
\ar@
{-
}@
[|(
3)
]"c"
534 \POS"c"
\ar@
{-
}@
[|(
3)
]"a"
535 \POS(
1,-
1.5)*
{\bullet},*+!L
{\vec y
}
540 <
\intercol,
0pt>:<
0pt,
\intercol>::
543 \POS(
0,
0)="w"*+!DR
{\vec w
}
544 \POS"b"
\ar@
{-
}@
[|(
3)
]"c"
545 \POS"b"
\ar@
{--
}@
[|(
3)
]"w"
546 \POS"c"
\ar@
{-
}@
[|(
3)
]"w"
547 \POS(
1,-
1.5)*
{\bullet},*+!L
{\vec y
}
551 <
\intercol,
0pt>:<
0pt,
\intercol>::
552 \POS(-
2,-
1)="a"*+!U
{+
}
554 \POS(
0,
0)="w"*+!DR
{\vec w
}
555 \POS"c"
\ar@
{-
}@
[|(
3)
]"a"
556 \POS"a"
\ar@
{--
}@
[|(
3)
]"w"
557 \POS"c"
\ar@
{--
}@
[|(
3)
]"w"
558 \POS(
1,-
1.5)*
{\bullet},*+!L
{\vec y
}
562 <
\intercol,
0pt>:<
0pt,
\intercol>::
563 \POS(-
2,-
1)="a"*+!U
{+
}
565 \POS(
0,
0)="w"*+!DR
{\vec w
}
566 \POS"a"
\ar@
{--
}@
[|(
3)
]"b"
567 \POS"a"
\ar@
{-
}@
[|(
3)
]"w"
568 \POS"b"
\ar@
{-
}@
[|(
3)
]"w"
569 \POS(
1,-
1.5)*
{\bullet},*+!L
{\vec y
}
574 <
\intercol,
0pt>:<
0pt,
\intercol>::
575 \POS(-
2,-
1)="a"*+!U
{0}
578 \POS"a"
\ar@
{-
}@
[|(
3)
]"b"
579 \POS"b"
\ar@
{-
}@
[|(
3)
]"c"
580 \POS"c"
\ar@
{-
}@
[|(
3)
]"a"
581 \POS(
1,
0.2)*
{\bullet},*+!R
{\vec y
}
586 <
\intercol,
0pt>:<
0pt,
\intercol>::
587 \POS(-
2,-
1)="a"*+!U
{0}
589 \POS(
1,
1)="w"*+!DL
{\vec w
}
590 \POS"a"
\ar@
{-
}@
[|(
3)
]"b"
591 \POS"a"
\ar@
{-
}@
[|(
3)
]"w"
592 \POS"b"
\ar@
{-
}@
[|(
3)
]"w"
593 \POS(
1,
0.2)*
{\bullet},*+!R
{\vec y
}
597 <
\intercol,
0pt>:<
0pt,
\intercol>::
598 \POS(-
2,-
1)="a"*+!U
{0}
600 \POS(
1,
1)="w"*+!DL
{\vec w
}
601 \POS"c"
\ar@
{-
}@
[|(
3)
]"a"
602 \POS"a"
\ar@
{--
}@
[|(
3)
]"w"
603 \POS"c"
\ar@
{-
}@
[|(
3)
]"w"
604 \POS(
1,
0.2)*
{\bullet},*+!R
{\vec y
}
609 <
\intercol,
0pt>:<
0pt,
\intercol>::
610 \POS(-
2,-
1)="a"*+!U
{0}
613 \POS"a"
\ar@
{-
}@
[|(
3)
]"b"
614 \POS"b"
\ar@
{--
}@
[|(
3)
]"c"
615 \POS"c"
\ar@
{-
}@
[|(
3)
]"a"
616 \POS(
1.5,
1.5)*
{\bullet},*+!D
{\vec y
}
621 <
\intercol,
0pt>:<
0pt,
\intercol>::
622 \POS(-
2,-
1)="a"*+!U
{0}
624 \POS(
4,-
2)="w"*+!L
{\vec w
}
625 \POS"c"
\ar@
{-
}@
[|(
3)
]"a"
626 \POS"a"
\ar@
{-
}@
[|(
3)
]"w"
627 \POS"c"
\ar@
{--
}@
[|(
3)
]"w"
628 \POS(
1.5,
1.5)*
{\bullet},*+!D
{\vec y
}
632 <
\intercol,
0pt>:<
0pt,
\intercol>::
633 \POS(-
2,-
1)="a"*+!U
{0}
635 \POS(
4,-
2)="w"*+!L
{\vec w
}
636 \POS"a"
\ar@
{--
}@
[|(
3)
]"b"
637 \POS"a"
\ar@
{-
}@
[|(
3)
]"w"
638 \POS"b"
\ar@
{--
}@
[|(
3)
]"w"
639 \POS(
1.5,
1.5)*
{\bullet},*+!D
{\vec y
}
644 <
\intercol,
0pt>:<
0pt,
\intercol>::
645 \POS(-
2,-
1)="a"*+!U
{0}
648 \POS"a"
\ar@
{--
}@
[|(
3)
]"b"
649 \POS"b"
\ar@
{--
}@
[|(
3)
]"c"
650 \POS"c"
\ar@
{-
}@
[|(
3)
]"a"
651 \POS(
4.7,-
2.5)*
{\bullet},*+!R
{\vec y
}
656 <
\intercol,
0pt>:<
0pt,
\intercol>::
657 \POS(-
2,-
1)="a"*+!U
{0}
659 \POS(
4,-
2)="w"*+!L
{\vec w
}
660 \POS"c"
\ar@
{-
}@
[|(
3)
]"a"
661 \POS"a"
\ar@
{--
}@
[|(
3)
]"w"
662 \POS"c"
\ar@
{--
}@
[|(
3)
]"w"
663 \POS(
4.7,-
2.5)*
{\bullet},*+!R
{\vec y
}
667 <
\intercol,
0pt>:<
0pt,
\intercol>::
668 \POS(-
2,-
1)="a"*+!U
{0}
670 \POS(
4,-
2)="w"*+!L
{\vec w
}
671 \POS"a"
\ar@
{-
}@
[|(
3)
]"b"
672 \POS"a"
\ar@
{--
}@
[|(
3)
]"w"
673 \POS"b"
\ar@
{--
}@
[|(
3)
]"w"
674 \POS(
4.7,-
2.5)*
{\bullet},*+!R
{\vec y
}
677 \caption{Examples of decompositions in primal space.
}
678 \label{fig:primal:examples
}
681 To see that there is a $
\vec y$ satisfying the above constraints,
682 we need to show that $R
\cap S$ is non-empty, with
683 $S = \
{ \vec y
\mid \sp{{\tilde n
}_
{i_kj_k
}}y >
0 \text{ for all $k$
}\
}$.
684 It will be easier to show this set is non-empty when the $
\vec u_i$ form
685 an orthogonal basis. Applying a non-singular linear transformation $T$
686 does not change the decomposition of $
\vec w$ in terms of the $
\vec u_i$ (i.e., the
687 $
\alpha_i$ remain unchanged), nor does this change
688 any of the scalar products in the constraints that define $R
\cap S$
689 (the normals are transformed by $
\left(T^
{-
1}\right)^
\T$).
690 Finding a vector $
\vec y
\in T(R
\cap S)$ ensures that
691 $T^
{-
1}(
\vec y)
\in R
\cap S$.
692 Without loss of generality, we can therefore assume for the purpose of
693 showing that $R
\cap S$ is non-empty that
694 the $
\vec u_i$ indeed form an orthogonal basis.
696 In the orthogonal basis, we have $
\vec b_i^* =
\vec u_i$
697 and the corresponding inward normal $
\vec N_i$ is either
698 $
\vec u_i$ or $-
\vec u_i$.
699 Furthermore, each normal of a facet of $S$ of the first type is of the
700 form $
\vec {\tilde n
}_
{i_kj_k
} = a_k
\vec u_
{i_k
} - b_k
\vec u_
{j_k
}$, with
701 $a_k, b_k >
0$ and $
{i_k
} <
{j_k
}$,
702 while for the second type each normal is of the form
703 $
\vec {\tilde n
}_
{i_kj_k
} = -a_k
\vec u_
{i_k
} - b_k
\vec u_
{j_k
}$, with
705 If $
\vec {\tilde n
}_
{i_kj_k
} = a_k
\vec u_
{i_k
} - b_k
\vec u_
{j_k
}$
706 is the normal of a facet of $S$
708 $(
\vec N_
{i_k
},
\vec N_
{j_k
}) = (
\vec u_
{i_k
},
\vec u_
{j_k
})$
710 $(
\vec N_
{i_k
},
\vec N_
{j_k
}) = (-
\vec u_
{i_k
}, -
\vec u_
{j_k
})$.
711 Otherwise, the facet would not cut $R$.
713 if $
\vec {\tilde n
}_
{i_kj_k
} = -a_k
\vec u_
{i_k
} - b_k
\vec u_
{j_k
}$
714 is the normal of a facet of $S$
716 $(
\vec N_
{i_k
},
\vec N_
{j_k
}) = (
\vec u_
{i_k
}, -
\vec u_
{j_k
})$
718 $(
\vec N_
{i_k
},
\vec N_
{j_k
}) = (-
\vec u_
{i_k
},
\vec u_
{j_k
})$.
719 Assume now that $R
\cap S$ is empty, then there exist
720 $
\lambda_k,
\mu_i \ge 0$ not all zero
722 $
\sum_k \lambda_k \vec {\tilde n
}_
{i_kj_k
} +
\sum_l \mu_i \vec N_i =
\vec 0$.
723 Assume $
\lambda_k >
0$ for some facet of the first type.
724 If $
\vec N_
{j_k
} = -
\vec u_
{j_k
}$, then $-b_k$ can only be canceled
725 by another facet $k'$ of the first type with $j_k = i_
{k'
}$, but then
726 also $
\vec N_
{j_
{k'
}} = -
\vec u_
{j_
{k'
}}$. Since the $j_k$ are strictly
727 increasing, this sequence has to stop with a strictly positive coefficient
728 for the largest $
\vec u_
{j_k
}$ in this sequence.
729 If, on the other hand, $
\vec N_
{i_k
} =
\vec u_
{i_k
}$, then $a_k$ can only
730 be canceled by the normal of a facet $k'$ of the second kind
731 with $i_k = j_
{k'
}$, but then
732 $
\vec N_
{i_
{k'
}} = -
\vec u_
{i_
{k'
}}$ and we return to the first case.
733 Finally, if $
\lambda_k >
0$ only for normals of facets of the second type,
734 then either $
\vec N_
{i_k
} = -
\vec u_
{i_k
}$ or $
\vec N_
{j_k
} = -
\vec u_
{j_k
}$
735 and so the coefficient of one of these basis vectors will be strictly
737 That is, the sum of the normals will never be zero and
738 the set $R
\cap S$ is non-empty.
740 For each ray $
\vec u_j$ of cone $K_i$, i.e., the cone with $
\vec u_i$ replaced
741 by $
\vec w$, we now need to determine whether the facet not containing this
742 ray is closed or not. We denote the (inward) normal of this cone by
743 $
\vec n_
{ij
}$. Note that cone $K_j$ (if it appears in (
\ref{eq:triangulations
}),
744 i.e., $
\alpha_j \ne 0$) has the same facet opposite $
\vec u_i$
745 and its normal $
\vec n_
{ji
}$ will be equal to either $
\vec n_
{ij
}$ or
746 $-
\vec n_
{ij
}$, depending on whether we are dealing with an ``external'' facet,
747 i.e., a facet of $K'$, or an ``internal'' facet.
748 If, on the other hand, $
\alpha_j =
0$, then $
\vec n_
{ij
} =
\vec n_
{0j
}$.
749 If $
\sp{n_
{ij
}}y >
0$, then the facet is closed.
750 Otherwise it is open.
751 It follows that the two (or more) occurrences of external facets are either all open
752 or all closed, while for internal facets, exactly one is closed.
754 First consider the facet not containing $
\vec u_0 =
\vec w$.
755 If $
\alpha_i >
0$, then $
\vec u_i$ and $
\vec w$ are on the same side of the facet
756 and so $
\vec n_
{i0
} =
\vec n_
{0i
}$. Otherwise, $
\vec n_
{i0
} = -
\vec n_
{i0
}$.
757 Second, if $
\alpha_j =
0$, then replacing $
\vec u_i$ by $
\vec w$ does not
758 change the affine hull of the facet and so $
\vec n_
{ij
} =
\vec n_
{0j
}$.
759 Now consider the case that $
\alpha_i \alpha_j <
0$, i.e., $
\vec u_i$
760 and $
\vec u_j$ are on the same side of the hyperplane through the other rays.
761 If we project $
\vec u_i$, $
\vec u_j$ and $
\vec w$ onto a plane orthogonal
762 to the ridge through the other rays, then the possible locations of $
\vec w$
763 with respect to $
\vec u_i$ and $
\vec u_j$ are shown in Figure~
\ref{fig:w:same
}.
764 If both $
\vec n_
{0i
}$ and $
\vec n_
{0j
}$ are closed then $
\vec y$ lies in region~
1
765 and therefore $
\vec n_
{ij
}$ (as well as $
\vec n_
{ji
}$) is closed too.
766 Similarly, if both $
\vec n_
{0i
}$ and $
\vec n_
{0j
}$ are open then so is
767 $
\vec n_
{ij
}$. If only one of the facets is closed, then, as explained above,
768 we choose $
\vec n_
{ij
}$ to be open, i.e., we take $
\vec y$ to lie in region~
3
770 Figure~
\ref{fig:w:opposite
} shows the possible configurations
771 for the case that $
\alpha_i \alpha_j >
0$.
772 If exactly one of $
\vec n_
{0i
}$ and $
\vec n_
{0j
}$ is closed, then
773 $
\vec y$ lies in region~
3 or region~
5 and therefore $
\vec n_
{ij
}$ is closed iff
774 $
\vec n_
{0j
}$ is closed.
775 Otherwise, as explained above, we choose $
\vec n_
{ij
}$ to be closed if $i < j$.
779 \begin{minipage
}{0cm
}
781 <
\intercol,
0pt>:<
0pt,
\intercol>::
782 \POS(-
4,
0)="a"
\ar@
[|(
2)
]@
{-
}(
4,
0)
783 \POS?(
0)/
\intercol/="b"
\POS(
2,
0)*
\xybox{"b"-"a":(
0,
0)
\ar^
{\vec n_
{0i
}}(
0,
0.75)
}
784 \POS(
2,
0)*
{\bullet},*+!U
{\vec u_j
}
785 \POS(-
2,-
3)="a"
\ar@
[|(
2)
]@
{-
}(
2,
3)
786 \POS?(
0)/
\intercol/="b"
\POS(
1,
1.5)*
\xybox{"b"-"a":(
0,
0)
\ar^
{\vec n_
{0j
}}(
0,-
0.75)
}
787 \POS(
1,
1.5)*
{\bullet},*+!R
{\vec u_i
}
788 \POS(-
2,
3)="a"
\ar@
{-
}(
2,-
3)
789 \POS?(
0)/
\intercol/="b"
\POS(
1.5,-
2.25)
790 *
\xybox{"b"-"a":(
0,
0)
\ar_{\vec n_
{ji
}}^
{\vec n_
{ij
}}(
0,+
0.75)
}
791 \POS(
1.5,-
2.25)*
{\bullet},*+!R
{\vec u_0 =
\vec w
}
793 \POS(
3,
1.5)*+
[o
][F
]{\scriptstyle 1}
794 \POS(
0,
2.5)*+
[o
][F
]{\scriptstyle 2}
795 \POS(-
3,
1.5)*+
[o
][F
]{\scriptstyle 3}
796 \POS(-
3,-
1.5)*+
[o
][F
]{\scriptstyle 4}
797 \POS(
0,-
3)*+
[o
][F
]{\scriptstyle 5}
798 \POS(
3,-
1.5)*+
[o
][F
]{\scriptstyle 6}
801 \begin{minipage
}{0cm
}
803 <
\intercol,
0pt>:<
0pt,
\intercol>::
804 \POS(-
4,
0)="a"
\ar@
[|(
2)
]@
{-
}(
4,
0)
805 \POS?(
0)/
\intercol/="b"
\POS(
2,
0)*
\xybox{"b"-"a":(
0,
0)
\ar^
{\vec n_
{0i
}}(
0,
0.75)
}
806 \POS(
2,
0)*
{\bullet},*+!U
{\vec u_j
}
807 \POS(-
2,-
3)="a"
\ar@
[|(
2)
]@
{-
}(
2,
3)
808 \POS?(
0)/
\intercol/="b"
\POS(
1,
1.5)*
\xybox{"b"-"a":(
0,
0)
\ar^
{\vec n_
{0j
}}(
0,-
0.75)
}
809 \POS(
1,
1.5)*
{\bullet},*+!R
{\vec u_i
}
810 \POS(-
2,
3)="a"
\ar@
{-
}(
2,-
3)
811 \POS?(
0)/
\intercol/="b"
\POS(-
1.5,
2.25)
812 *
\xybox{"b"-"a":(
0,
0)
\ar_{\vec n_
{ji
}}^
{\vec n_
{ij
}}(
0,+
0.75)
}
813 \POS(-
1.5,
2.25)*
{\bullet},*+!R
{\vec u_0 =
\vec w
}
815 \POS(
3,
1.5)*+
[o
][F
]{\scriptstyle 1}
816 \POS(
0,
2.5)*+
[o
][F
]{\scriptstyle 2}
817 \POS(-
3,
1.5)*+
[o
][F
]{\scriptstyle 3}
818 \POS(-
3,-
1.5)*+
[o
][F
]{\scriptstyle 4}
819 \POS(
0,-
3)*+
[o
][F
]{\scriptstyle 5}
820 \POS(
3,-
1.5)*+
[o
][F
]{\scriptstyle 6}
823 \caption{Possible locations of $
\vec w$ with respect to $
\vec u_i$ and
824 $
\vec u_j$, projected onto a plane orthogonal to the other rays, when
825 $
\alpha_i \alpha_j <
0$.
}
831 \begin{minipage
}{0cm
}
833 <
\intercol,
0pt>:<
0pt,
\intercol>::
834 \POS(-
4,
0)="a"
\ar@
[|(
2)
]@
{-
}(
4,
0)
835 \POS?(
0)/
\intercol/="b"
\POS(
2,
0)*
\xybox{"b"-"a":(
0,
0)
\ar^
{\vec n_
{0i
}}(
0,
0.75)
}
836 \POS(
2,
0)*
{\bullet},*+!U
{\vec u_j
}
837 \POS(-
2,
3)="a"
\ar@
[|(
2)
]@
{-
}(
2,-
3)
838 \POS?(
0)/
\intercol/="b"
\POS(-
1,
1.5)*
\xybox{"b"-"a":(
0,
0)
\ar^
{\vec n_
{0j
}}(
0,+
0.75)
}
839 \POS(-
1,
1.5)*
{\bullet},*+!R
{\vec u_i
}
840 \POS(-
2,-
3)="a"
\ar@
{-
}(
2,
3)
841 \POS?(
0)/
\intercol/="b"
\POS(
1.5,
2.25)
842 *
\xybox{"b"-"a":(
0,
0)
\ar^
{\vec n_
{ji
}}(
0,+
0.75)
843 \POS(
0,
0)
\ar_{\vec n_
{ij
}}(
0,-
0.75)
}
844 \POS(
1.5,
2.25)*
{\bullet},*+!L
{\vec u_0 =
\vec w
}
846 \POS(
3,
1.5)*+
[o
][F
]{\scriptstyle 1}
847 \POS(
0,
2.5)*+
[o
][F
]{\scriptstyle 2}
848 \POS(-
3,
1.5)*+
[o
][F
]{\scriptstyle 3}
849 \POS(-
3,-
1.5)*+
[o
][F
]{\scriptstyle 4}
850 \POS(
0,-
3)*+
[o
][F
]{\scriptstyle 5}
851 \POS(
3,-
1.5)*+
[o
][F
]{\scriptstyle 6}
854 \begin{minipage
}{0cm
}
856 <
\intercol,
0pt>:<
0pt,
\intercol>::
857 \POS(-
4,
0)="a"
\ar@
[|(
2)
]@
{-
}(
4,
0)
858 \POS?(
0)/
\intercol/="b"
\POS(
2,
0)*
\xybox{"b"-"a":(
0,
0)
\ar^
{\vec n_
{0i
}}(
0,
0.75)
}
859 \POS(
2,
0)*
{\bullet},*+!U
{\vec u_j
}
860 \POS(-
2,
3)="a"
\ar@
[|(
2)
]@
{-
}(
2,-
3)
861 \POS?(
0)/
\intercol/="b"
\POS(-
1,
1.5)*
\xybox{"b"-"a":(
0,
0)
\ar^
{\vec n_
{0j
}}(
0,+
0.75)
}
862 \POS(-
1,
1.5)*
{\bullet},*+!R
{\vec u_i
}
863 \POS(-
2,-
3)="a"
\ar@
{-
}(
2,
3)
864 \POS?(
0)/
\intercol/="b"
\POS(-
1.5,-
2.25)
865 *
\xybox{"b"-"a":(
0,
0)
\ar^
{\vec n_
{ji
}}(
0,+
0.75)
866 \POS(
0,
0)
\ar_{\vec n_
{ij
}}(
0,-
0.75)
}
867 \POS(-
1.5,-
2.25)*
{\bullet},*+!L
{\vec u_0 =
\vec w
}
869 \POS(
3,
1.5)*+
[o
][F
]{\scriptstyle 1}
870 \POS(
0,
2.5)*+
[o
][F
]{\scriptstyle 2}
871 \POS(-
3,
1.5)*+
[o
][F
]{\scriptstyle 3}
872 \POS(-
3,-
1.5)*+
[o
][F
]{\scriptstyle 4}
873 \POS(
0,-
3)*+
[o
][F
]{\scriptstyle 5}
874 \POS(
3,-
1.5)*+
[o
][F
]{\scriptstyle 6}
877 \caption{Possible locations of $
\vec w$ with respect to $
\vec u_i$ and
878 $
\vec u_j$, projected onto a plane orthogonal to the other rays, when
879 $
\alpha_i \alpha_j >
0$.
}
880 \label{fig:w:opposite
}
883 The algorithm is summarized in Algorithm~
\ref{alg:closed
}, where
884 we use the convention that in cone $K_i$, $
\vec u_i$ refers to
886 Note that we do not need any of the rays or normals in this code.
887 The only information we need is the closedness of the facets in the
888 original cone and the signs of the $
\alpha_i$.
892 next \= next \= next \=
\kill
894 \> closed
[$K_i$
][$
\vec u_j$
] := closed
[$
\tilde K$
][$
\vec u_j$
] \\
896 \> if $
\alpha_j >
0$ \\
897 \> \> closed
[$K_i$
][$
\vec u_j$
] := closed
[$
\tilde K$
][$
\vec u_j$
] \\
899 \> \> closed
[$K_i$
][$
\vec u_j$
] := $
\lnot$closed
[$
\tilde K$
][$
\vec u_j$
] \\
900 else if $
\alpha_i \alpha_j >
0$ \\
901 \> if closed
[$
\tilde K$
][$
\vec u_i$
] = closed
[$
\tilde K$
][$
\vec u_j$
] \\
902 \> \> closed
[$K_i$
][$
\vec u_j$
] := $i < j$ \\
904 \> \> closed
[$K_i$
][$
\vec u_j$
] := closed
[$
\tilde K$
][$
\vec u_j$
] \\
906 \> closed
[$K_i$
][$
\vec u_j$
] := closed
[$
\tilde K$
][$
\vec u_i$
] and
907 closed
[$
\tilde K$
][$
\vec u_j$
]
909 \caption{Determine whether the facet opposite $
\vec u_j$ is closed in $K_i$.
}
913 \subsection{Triangulation in primal space
}
914 \label{s:triangulation
}
916 As in the case for Barvinok's decomposition (Section~
\ref{s:decomposition
}),
917 we can transform a triangulation of a (closed) cone into closed simple cones
918 into a triangulation of half-open simple cones that fully partitions the
919 original cone, i.e., such that the half-open simple cones do not intersect at their
921 Again, we apply Proposition~
\ref{p:inclusion-exclusion
} with $
\vec y$
922 an interior point of the cone (Section~
\ref{s:interior
}).
923 Note that the interior point $
\vec y$ may still intersect
924 some of the internal facets, so we may need to perturb it slightly.
925 In practice, we apply a lexicographical rule: for such (internal)
926 facets, which always appear in pairs, we close the one with
927 a lexico-positive normal and open the one with a lexico-negative
930 \subsection{Multivariate quasi-polynomials as lists of polynomials
}
932 There are many definitions for a (univariate)
\ai{quasi-polynomial
}.
933 \shortciteN{Ehrhart1977
} uses a definition based on
{\em periodic number
}s.
937 A rational
\defindex{periodic number
} $U(p)$
938 is a function $
\ZZ \to \QQ$,
939 such that there exists a
\defindex{period
} $q$
940 such that $U(p) = U(p')$ whenever $p
\equiv p'
\mod q$.
946 \defindex{quasi-polynomial
}\/ $f$ of degree $d$ is
949 f(n) = c_d(n) \, n^d +
\cdots + c_1(n) \, n + c_0
952 where $c_i(n)$ are rational periodic numbers.
953 I.e., it is a polynomial expression of degree $d$
954 with rational periodic numbers for coefficients.
955 The
\defindex{period
} of a quasi-polynomial is the
\ac{lcm
}
956 of the periods of its coefficients.
959 Other authors (e.g.,
\shortciteNP{Stanley1986
})
960 use the following definition of a quasi-polynomial.
963 A function $f :
\ZZ \to \QQ$ is
964 a (univariate)
\defindex{quasi-polynomial
} of period $q$ if there
965 exists a list of $q$ polynomials $g_i
\in \QQ[T
]$ for $
0 \le i < q$ such
968 f (s) = g_i(s)
\qquad \hbox{if $s
\equiv i
\mod {q
}$
}
971 The functions $g_i$ are called the
{\em constituents
}.
975 In our implementation, we use Definition~
\ref{d:qp:
1},
977 \shortciteN{Ehrhart1977
} uses a list of $q$ rational
978 numbers enclosed in square brackets to represent periodic
979 numbers, our periodic numbers are polynomial expressions
980 in fractional parts (Section~
\ref{a:data
}).
981 These fractional parts naturally extend to multivariate
983 The bracketed (``explicit'') periodic numbers can
984 be extended to multiple variables by nesting them
985 (e.g.,
\shortciteNP{Loechner1999
}).
987 Definition~
\ref{d:qp:
1:list
} could be extended in a similar way
988 by having a constituent for each residue modulo a vector period $
\vec q$.
989 However, as pointed out by
\citeN{Woods2006personal
}, this may not result
990 in the minimum number of constituents.
991 A vector period can be considered as a lattice with orthogonal generators and
992 the number of constituents is equal to the index or determinant of that lattice.
993 By considering more general lattices, we can potentially reduce the number
997 A function $f :
\ZZ^n
\to \QQ$ is
998 a (multivariate)
\defindex{quasi-polynomial
} of period $L$ if there
999 exists a list of $
\det L$ polynomials $g_
{\vec i
} \in \QQ[T_1,
\ldots,T_n
]$
1000 for $
\vec i$ in the fundamental parallelepiped of $L$ such
1003 f (
\vec s) = g_
{\vec i
}(
\vec s)
\qquad \hbox{if $
\vec s
\equiv \vec i
\mod L$
}
1008 To compute the period lattice from a fractional representation, we compute
1009 the appropriate lattice for each fractional part and then take their intersection.
1010 Recall that the argument of each fractional part is an affine expression
1011 in the parameters $(
\sp a p + c)/m$,
1012 with $
\vec a
\in \ZZ^n$ and $c, m
\in \ZZ$.
1013 Such a fractional part is translation invariant over
1014 any (integer) value of $
\vec p$
1015 such that $
\sp a p + m t =
0$, for some $
\vec t
\in \ZZ$.
1016 Solving this homogeneous equation over the integers (in our implementation,
1017 we use
\PolyLib/'s
\ai[\tt]{SolveDiophantine
}) gives the general solution
1027 \qquad\text{for $
\vec x
\in \ZZ^n$
}
1030 The matrix $U_1
\in \ZZ^
{n
\times n
}$ then has the generators of
1031 the required lattice as columns.
1032 The constituents are computed by plugging in each integer point
1033 in the fundamental parallelepiped of the lattice.
1034 These points themselves are computed as explained in Section~
\ref{s:fundamental
}.
1035 Note that for computing the constituents, it is sufficient to take any
1036 representative of the residue class. For example, we could take
1037 $
\vec w^
\T =
\vec k^
\T W$ in the notations of Lemma~
\ref{l:fundamental
}.
1039 \begin{example
}[\shortciteN{Woods2006personal
}]
1040 Consider the parametric polytope
1042 P_
{s,t
}=\
{\, x
\mid 0 \le x
\le (s+t)/
2 \,\
}
1045 The enumerator of $P_
{s,t
}$ is
1048 \frac s
2 +
\frac t
2 +
1 &
1049 \text{if $
\begin{bmatrix
}s \\ t
\end{bmatrix
} \in
1059 \frac s
2 +
\frac t
2 +
\frac 1 2 &
1060 \text{if $
\begin{bmatrix
}s \\ t
\end{bmatrix
} \in
1072 The corresponding output of
\ai[\tt]{barvinok
\_enumerate} is
1082 (
1/
2 * s + (
1/
2 * t +
1 )
1085 (
1/
2 * s + (
1/
2 * t +
1/
2 )
1090 \subsection{Left inverse of an affine embedding
}
1093 We often map a polytope onto a lower dimensional space to remove possible
1094 equalities in the polytope. These maps are typically represented
1095 by the inverse, mapping the coordinates $
\vec x'$ of the lower-dimensional
1096 space to the coordinates $
\vec x$ of (an affine subspace of) the original space,
1104 T &
\vec v \\
\vec 0^
\T &
1
1111 where, as usual in
\PolyLib/, we work with homogeneous coordinates.
1112 To obtain the transformation that maps the coordinates of the original
1113 space to the coordinates of the lower dimensional space,
1114 we need to compute the
\ai{left inverse
} of the above
\ai{affine embedding
},
1115 i.e., an $A$, $
\vec b$ and $d$ such that
1123 A &
\vec b \\
\vec 0^
\T & d
1130 To compute this left inverse, we first compute the
1131 (right)
\indac{HNF
} of T,
1143 The left inverse is then simply
1146 d H^
{-
1}U_1 & -d H^
{-
1} \vec v \\
\vec 0^
\T & d
1150 We often also want a description of the affine subspace that is the range
1151 of the affine embedding and this is given by
1154 U_2 & - U_2
\vec v \\
\vec 0^T &
1
1163 This computation is implemented in
\ai[\tt]{left
\_inverse}.
1165 \subsection{Integral basis of the orthogonal complement of a linear subspace
}
1166 \label{s:completion
}
1168 Let $M_1
\in \ZZ^
{m
\times n
}$ be a basis of a linear subspace.
1169 We first extend $M_1$ with zero rows to obtain a square matrix $M'$
1170 and then compute the (left)
\indac{HNF
} of $M'$,
1184 The rows of $Q_2$ span the orthogonal complement of the given subspace.
1185 Since $Q_2$ can be extended to a unimodular matrix, these rows form
1188 If the entries on the diagonal of $H$ are all $
1$ then $M_1$
1189 can be extended to a unimodular matrix, by concatenating $M_1$ and $Q_2$.
1190 The resulting matrix is unimodular, since
1197 H &
0 \\
0 & I_
{n-m,n-m
}
1204 This method for extending a matrix of which
1205 only a few lines are known to a
\ai{unimodular matrix
}
1206 is more general than the method described by
\shortciteN{Bik1996PhD
},
1207 which only considers extending a matrix given by a single row.
1209 \subsection{Ensuring a polyhedron has only revlex-positive rays
}
1212 The
\ai[\tt]{barvinok
\_series\_with\_options} function and all
1213 further
\ai[\tt]{gen
\_fun} manipulations assume that the effective
1214 parameter domain has only
\ai{revlex-positive
} rays.
1215 When used to computer
\rgf/s, the
\ai[\tt]{barvinok
\_enumerate}
1216 application will therefore transform the effective parameter domain
1217 of a problem if it has revlex-negative rays.
1218 It will then not compute the generating function
1220 f(
\vec x) =
\sum_{\vec p
\in \ZZ^m
} \#(P_
{\vec p
} \cap \ZZ^d) \, x^
{\vec p
}
1225 g(
\vec z) =
\sum_{\vec p'
\in \ZZ^n
}
1226 \#(P_
{T
\vec p' +
\vec t
} \cap \ZZ^d) \, x^
{\vec p'
}
1228 instead, where $
\vec p = T
\vec p' +
\vec t$,
1229 with $T
\in \ZZ^
{m
\times n
}$ and $
\vec t
\in \ZZ^m$, is an affine transformation
1230 that maps the transformed parameter space back to the original parameter space.
1232 First assume that the parameter domain does not contain any lines and
1233 that there are no equalities in the description of $P_
{\vec p
}$ that force
1234 the values of $
\vec p$ for which $P_
{\vec p
}$ contains integer points
1235 to lie on a non-standard lattice.
1236 Let the effective parameter domain be given as
1238 \
{\,
\vec p
\mid A
\vec p +
\vec c
\ge \vec 0 \,\
}
1240 where $A
\in \ZZ^
{s
\times d
}$ of row rank $d$;
1241 otherwise the effective parameter domain would contain a line.
1242 Let $H$ be the (left)
\indac{HNF
} of $A$, i.e.,
1247 with $H$ lower-triangular with positive diagonal elements and
1249 Let $
\tilde Q$ be the matrix obtained from $Q$ by reversing its rows,
1250 and, similarly, $
\tilde H$ from $H$ by reversing the columns.
1251 After performing the transformation
1252 $
\vec p' =
\tilde Q
\vec p$, i.e.,
1253 $
\vec p =
\tilde Q^
{-
1} \vec p'$, the transformed parameter domain
1256 \
{\,
\vec p'
\mid A
\tilde Q^
{-
1} \vec p' +
\vec c
\ge \vec 0 \,\
}
1260 \
{\,
\vec p'
\mid \tilde H
\vec p' +
\vec c
\ge \vec 0 \,\
}
1263 The first constraint of this domain is
1264 $h_
{11} p'_m + c_1
\ge 0$. A ray with non-zero final coordinate
1265 therefore has a positive final coordinate.
1266 Similarly, the second constraint is
1267 $h_
{22} p'_
{m-
1} + h_
{21} p'_m + c_2
\ge 0$.
1268 A ray with zero $n$th coordinate, but non-zero $n-
1$st coordinate,
1269 will therefore have a positive $n-
1$st coordinate.
1270 Continuing this reasoning, we see that all rays in the transformed
1271 domain are revlex-positive.
1273 If the parameter domain does contains lines, but is not restricted
1274 to a non-standard lattice, then the number of points in the parametric
1275 polytope is invariant over a translation along the lines.
1276 It is therefore sufficient to compute the number of points in the
1277 orthogonal complement of the linear subspace spanned by the lines.
1278 That is, we apply a prior transformation that maps a reduced parameter
1279 domain to this subspace,
1281 \vec p = L^
\perp \vec p' =
1291 where $L$ has the lines as columns, and $L^
\perp$ an integral basis
1292 for the orthogonal complement (Section~
\ref{s:completion
}).
1293 Note that the inverse transformation
1306 has integral coefficients since $L^
\perp$ can be extended to a unimodular matrix.
1308 If the parameter values $
\vec p$ for which $P_
{\vec p
}$ contains integer points
1309 are restricted to a non-standard lattice, we first replace the parameters
1310 by a different set of parameters that lie on the standard lattice
1311 through ``
\ai{parameter compression
}''
\shortcite{Meister2004PhD
},
1316 The (left) inverse of $C$ can be computes as explained in
1317 Section~
\ref{s:inverse
}, giving
1319 \vec p' = C^
{-L
} \vec p
1322 We have to be careful to only apply this transformation when
1323 both the equalities computed in Section~
\ref{s:inverse
} are satisfied
1324 and some additional divisibility constraints.
1325 In particular if $
\vec a^
\T/d$ is a row of $C^
{-L
}$, with $
\vec a
\in \ZZ^
{n'
}$
1326 and $d
\in \ZZ$, the transformation can only be applied to parameter values
1327 $
\vec p$ such that $d$ divides $
\sp a p$.
1329 The complete transformation is given by
1331 \vec p = C L^
\perp \hat Q^
{-
1} \vec p'
1335 \vec p' =
\hat Q L^
{-
\perp} C^
{-L
} \vec p
1339 \subsection{Parametric Volume Computation
}
1341 The
\ai{volume
} of a (parametric) polytope can serve as an approximation
1342 for the number of integer points in the polytope.
1343 We basically follow the description of~
\shortciteN{Rabl2006
} here, except that we
1344 focus on volume computation for
{\em linearly
}
1345 parametrized polytopes, which we exploit to determine the sign
1346 of the determinants we compute, as explained below.
1349 the vertices of a linearly parametrized polytope are affine expressions
1350 in the parameters that may be valid only in parts (chambers)
1351 of the parameter domain.
1352 Since the volume computation is based on the (active) vertices, we perform
1353 the computation in each chamber separately.
1354 Also note that since the vertices are affine expressions, it is
1355 easy to check whether they belong to a facet.
1357 The volume of a $d$-simplex, i.e., a $d$-dimensional polytope with
1358 $d+
1$ vertices, is relatively easy to compute.
1359 In particular, if $
\vec v_i(
\vec p)$, for $
0 \le i
\le d$,
1360 are the (parametric) vertices
1361 of the simplex $P$ then
1369 v_
{11}(
\vec p) - v_
{01}(
\vec p) &
1370 v_
{12}(
\vec p) - v_
{02}(
\vec p) &
1372 v_
{1d
}(
\vec p) - v_
{0d
}(
\vec p)
1374 v_
{21}(
\vec p) - v_
{01}(
\vec p) &
1375 v_
{22}(
\vec p) - v_
{02}(
\vec p) &
1377 v_
{2d
}(
\vec p) - v_
{0d
}(
\vec p)
1379 \vdots &
\vdots &
\ddots &
\vdots
1381 v_
{d1
}(
\vec p) - v_
{01}(
\vec p) &
1382 v_
{d2
}(
\vec p) - v_
{02}(
\vec p) &
1384 v_
{dd
}(
\vec p) - v_
{0d
}(
\vec p)
1389 If $P$ is not a simplex, i.e., $N > d+
1$, with $N$ the number of
1390 vertices of $P$, then the standard way of computing the volume of $P$
1391 is to first
{\em triangulate
} $P$, i.e., subdivide $P$ into simplices,
1392 and then to compute and sum the volumes of the resulting simplices.
1393 One way of computing a triangulation is to
1394 compute the
\ai{barycenter
}
1396 \frac 1 N
\sum_i \vec v_i(
\vec p)
1399 and to perform a subdivision by computing the convex hulls
1400 of the barycenter with each of the facets of $P$.
1401 If a given facet of $P$ is itself a simplex, then this convex hull
1402 is also a simplex. Otherwise the facet is further subdivided.
1403 This recursive process terminates as every $
1$-dimensional polytope
1406 The triangulation described above is known as
1407 the boundary triangulation~
\shortcite{Bueler2000exact
} and is used
1408 by
\shortciteN{Rabl2006
} in his implementation.
1409 The Cohen-Hickey triangulation~
\shortcite{Cohen1979volumes,Bueler2000exact
}
1410 is a much more efficient variation and uses one of the vertices
1411 instead of the barycenter. The facets incident on the vertex
1412 do not have to be considered in this case because the resulting subpolytopes
1413 would have zero volume.
1414 Another possibility is to use a
1415 ``lifting'' triangulation~
\shortcite{Lee1991,DeLoera1995
}.
1416 In this triangulation, each vertex is assigned a (random) ``height'' in
1418 The projection of the ``lower envelope'' of the resulting polytope onto
1419 the original space results in a subdivision, which is a triangulation
1420 with very high probability.
1422 A complication with the lifting triangulation is that the constraint system
1423 of the lifted polytope will in general not be linearly parameterized,
1424 even if the original polytope is.
1425 It is, however, sufficient to perform the triangulation for a particular
1426 value of the parameters inside the chamber since the parametric polytope
1427 has the same combinatorial structure throughout the chamber.
1428 The triangulation obtained for the instantiated vertices can then
1429 be carried over to the corresponding parametric vertices.
1430 We only need to be careful to select a value for the parameters that
1431 does not lie on any facet of the chambers. On these chambers, some
1432 of the vertices may coincide.
1433 For linearly parametrized polytopes, it is easy to find a parameter
1434 point in the interior of a chamber, as explained in Section~
\ref{s:interior
}.
1435 Note that this point need not be integer.
1437 A direct application of the above algorithm, using any of the triangulations,
1438 would yield for each chamber
1439 a volume expressed as the sum of the absolute values of polynomials in
1440 the parameters. To remove the absolute value, we plug in a particular
1441 value of the parameters (not necessarily integer)
1442 belonging to the given chamber for which we know that the volume is non-zero.
1443 Again, it is sufficient to take any point in the interior of the chamber.
1444 The sign of the resulting value then determines the sign of the whole
1445 polynomial since polynomials are continuous functions and will not change
1446 sign without passing through zero.
1448 \subsection{Maclaurin series division
}
1451 If $P(t)$ and $Q(t)$ are two Maclaurin series
1453 P(t) & = a_0 + a_1 t + a_2 t^
2 +
\cdots \\
1454 Q(t) & = b_0 + b_1 t + b_2 t^
2 +
\cdots
1457 then, as outlined by
\shortciteN[241--
247]{Henrici1974
},
1458 we can compute the coefficients $c_l$ in
1460 \frac{P(t)
}{Q(t)
} =: c_0 + c_1 t + c_2 t^
2 +
\cdots
1462 by applying the recurrence relation
1464 c_l =
\frac 1 {b_0
} \left( a_l -
\sum_{i=
1}^l b_i c_
{l-i
} \right)
1467 To avoid dealing with denominators, we can also compute
1468 $d_l = b_0^
{l+
1} c_l$ instead as
1470 d_l = b_0^l a_l -
\sum_{i=
1}^l b_0^
{i-
1} b_i c_
{l-i
}
1473 The coefficients $c_l$ can then be directly read off as
1475 c_l =
\frac{d_l
}{b_0^
{l+
1}}
1479 \subsection{Specialization through exponential substitution
}
1481 This section draws heavily from
\shortciteN{Koeppe2006experiments
}.
1483 We define a ``short''
\defindex{\rgf/
} to be a function of the form
1487 \sum_{i
\in I
}\alpha_i
1488 \frac{\sum_{k=
1}^
{r
} \vec x^
{\vec w_
{ik
} }}
1489 {\prod_{j=
1}^
{k_i
}\left(
1-
\vec x^
{\vec b_
{ij
}}\right)
}
1492 with $
\vec x
\in \CC^d$, $
\alpha_i \in \QQ$,
1493 $
\vec w_
{i k
} \in \ZZ^d$ and $
\vec b_
{i j
} \in \ZZ^d
\setminus \
{\vec 0\
}$.
1495 After computing the
\rgf/~
\eqref{eq:rgf
} of a polytope
1496 (with $k_i = d$ for all $i$),
1497 the number of lattice points in the polytope can be obtained
1498 by evaluating $f(
\vec 1)$. Since $
\vec 1$ is a pole of each
1499 term, we need to compute the constant term in the Laurent expansions
1500 of each term in~
\eqref{eq:rgf
} about $
\vec 1$.
1501 Since it is easier to work with univariate series, a substitution is usually
1502 applied, either a
\ai{polynomial substitution
}
1504 \vec x = (
1+t)^
{\vec \lambda}
1507 as implemented in
\LattE/
\shortcite{latte1.1
},
1508 or an
\ai{exponential substitution
} (see, e.g.,
\shortciteNP{Barvinok1999
}),
1510 \vec x = e^
{t
\vec \lambda}
1513 as implemented in
\LattEmk/
\shortcite{latte-macchiato
}.
1514 In each case, $
\vec \lambda \in \ZZ^d$ is a vector that is not orthogonal
1515 to any of the $
\vec b_
{ij
}$.
1516 Both substitutions also transform the problem of computing the
1517 constant term in the Laurent expansions about $
\vec x =
\vec 1$
1518 to that of computing the constant term in the
1519 Laurent expansions about $t =
0$.
1521 Consider now one of the terms in~
\eqref{eq:rgf
},
1524 \frac{\sum_{k=
1}^
{r
} e^
{a_k t
}}
1525 {\prod_{j=
1}^
{d
}\left(
1-e^
{c_j t
}\right)
}
1528 with $a_k =
\sp{w_
{ik
}}{\lambda}$ and $c_j =
\sp{b_
{ij
}}{\lambda}$.
1529 We rewrite this equation as
1533 \frac{\sum_{k=
1}^
{r
} e^
{a_k t
}}
1534 {t^d
\prod_{j=
1}^d c_j
}
1535 \prod_{j=
1}^d
\frac{-c_j t
}
1539 The second factor is analytic in a neighborhood of the origin
1540 $x = c_1 =
\cdots = c_d =
0$ and therefore has a Taylor series expansion
1543 \prod_{j=
1}^d
\frac{-c_j t
}
1546 \sum_{m=
0}^
{\infty} \todd_m(-c_1,
\ldots, -c_d) t^m
1549 where $
\todd_m$ is a homogeneous polynomial of degree $m$ called
1550 the $m$-th
\ai{Todd polynomial
}~
\cite{Barvinok1999
}.
1551 Also expanding the numerator in the first factor, we find
1553 g(t) =
\frac{(-
1)^d
}{t^d
\prod_{j=
1}^d c_j
}
1555 \sum_{n=
0}^
{\infty}\frac{\sum_{k=
1}^
{r
} a_k^n
}{n!
}
1558 \sum_{m=
0}^
{\infty} \todd_m(-c_1,
\ldots, -c_d) t^m
1564 \label{eq:todd:constant
}
1565 \frac{(-
1)^d
}{t^d
\prod_{j=
1}^d c_j
}
1566 \left(
\sum_{i=
0}^d
\frac{\sum_{k=
1}^
{r
} a_k^i
}{i!
}
1567 \todd_{d-i
}(-c_1,
\ldots, -c_d)
\right)t^d
1569 \frac{(-
1)^d
}{\prod_{j=
1}^d c_j
}
1570 \sum_{i=
0}^d
\frac{\sum_{k=
1}^
{r
} a_k^i
}{i!
} \todd_{d-i
}(-c_1,
\ldots, -c_d)
1573 To compute the first $d+
1$ terms in the Taylor series~
\eqref{eq:todd
},
1574 we write down the truncated Taylor series
1576 \frac{e^t -
1}t
\equiv
1577 \sum_{i=
0}^d
\frac 1{(i+
1)!
} t^i
\equiv
1578 \frac 1 {(d+
1)!
} \sum_{i=
0}^d
\frac{(d+
1)!
}{(i+
1)!
} t^i
1584 \frac 1 {(d+
1)!
} \sum_{i=
0}^d
\frac{(d+
1)!
}{(i+
1)!
} t^i
1585 \in \frac 1{(d+
1)!
} \ZZ[t
]
1588 Computing the reciprocal as explained in Section~
\ref{s:division
},
1592 \frac{t
}{e^t-
1} =
\frac 1{\frac{e^t -
1}t
}
1593 \equiv (d+
1)!
\frac 1{\sum_{i=
0}^d
\frac{(d+
1)!
}{(i+
1)!
} t^i
}
1594 =:
\sum_{i=
0}^d b_i t^i
1597 Note that the constant term of the denominator is $
1/(d+
1)!$.
1598 The denominators of the quotient are therefore $((d+
1)!)^
{i+
1}/(d+
1)!$.
1599 Also note that the $b_i$ are independent of the generating function
1600 and can be computed in advance.
1601 An alternative way of computing the $b_i$ is to note that
1603 \frac{t
}{e^t-
1} =
\sum_{i=
0}^
\infty B_i
\frac{t^i
}{i!
}
1606 with $B_i = i! \, b_i$ the
\ai{Bernoulli number
}s, which can be computed
1607 using the recurrence~
\eqref{eq:Bernoulli
} (see Section~
\ref{s:nested
}).
1609 Substituting $t$ by $c_j t$ in~
\eqref{eq:t-exp-
1}, we have
1611 \frac{-c_j t
}{1-e^
{c_j t
}} =
\sum_{i=
0}^d b_i c_j^i t^i
1614 Multiplication of these truncated Taylor series for each $c_j$
1615 results in the first $d+
1$ terms of~
\eqref{eq:todd
},
1617 \sum_{m=
0}^
{d
} \todd_m(-c_1,
\ldots, -c_d) t^m
1619 \sum_{m=
0}^
{d
} \frac{\beta_m}{((d+
1)!)^m
} t^m
1623 it is easy to compute the constant term~
\eqref{eq:todd:constant
}.
1624 Note that this convolution can also be computed without the use
1625 of rational coefficients,
1627 \frac{(-
1)^d
}{\prod_{j=
1}^d c_j
}
1628 \sum_{i=
0}^d
\frac{\alpha_i}{i!
} \frac{\beta_{d-i
}}{((d+
1)!)^
{d-i
}}
1630 \frac{(-
1)^d
}{((d+
1)!)^d
\prod_{j=
1}^d c_j
}
1631 \sum_{i=
0}^d
\left(
\frac{((d+
1)!)^i
}{i!
}\alpha_i\right)
\beta_{d-i
}
1634 with $
\alpha_i =
\sum_{k=
1}^
{r
} a_k^i$.
1640 \frac{x_1^
2}{(
1-x_1^
{-
1})(
1-x_1^
{-
1}x_2)
}
1642 \frac{x_2^
2}{(
1-x_2^
{-
1})(
1-x_1 x_2^
{-
1})
}
1644 \frac1{(
1-x_1)(
1-x_2)
}
1646 from
\shortciteN[Example~
39]{Verdoolaege2005PhD
}.
1647 Since this is a
2-dimensional problem, we first compute the first
1648 3 Todd polynomials (evaluated at $-
1$),
1650 \frac{e^t -
1}t
\equiv
1651 1 +
\frac 1 2 t +
\frac 1 7 t^
2 =
1659 \frac t
{e^t -
1} \equiv
1661 \displaystyle\frac{-
1}{1} &
\displaystyle\frac{3}{6} &
\displaystyle\frac{-
3}{36}
1665 where we represent each truncated power series by a vector of its
1667 The vector $
\vec\lambda = (
1, -
1)$ is not
1668 orthogonal to any of the rays, so we can use the substitution
1669 $
\vec x = e^
{(
1, -
1)t
}$
1672 \frac{e^
{2t
}}{(
1-e^
{-t
})(
1-e^
{-
2t
})
}
1674 \frac{e^
{-
2t
}}{(
1-e^
{t
})(
1-e^
{2t
})
}
1676 \frac1{(
1-e^
{t
})(
1-e^
{-t
})
}
1681 \frac{t
}{1-e^
{- t
}} & =
1683 \displaystyle\frac{-
1}{1} &
\displaystyle\frac{-
3}{6} &
\displaystyle\frac{-
3}{36}
1686 \frac{2t
}{1-e^
{-
2 t
}} & =
1688 \displaystyle\frac{-
1}{1} &
\displaystyle\frac{-
6}{6} &
\displaystyle\frac{-
12}{36}
1691 \frac{-t
}{1-e^
{t
}} & =
1693 \displaystyle\frac{-
1}{1} &
\displaystyle\frac{3}{6} &
\displaystyle\frac{-
3}{36}
1696 \frac{-
2t
}{1-e^
{2t
}} & =
1698 \displaystyle\frac{-
1}{1} &
\displaystyle\frac{6}{6} &
\displaystyle\frac{-
12}{36}
1702 The first term in the
\rgf/ evaluates to
1705 \frac 1{-
1 \cdot -
2}
1707 \displaystyle\frac{1}{1} &
\displaystyle\frac{2}{1} &
\displaystyle\frac{4}{2}
1712 \displaystyle\frac{-
1}{1} &
\displaystyle\frac{-
3}{6} &
\displaystyle\frac{-
3}{36}
1715 \displaystyle\frac{-
1}{1} &
\displaystyle\frac{-
6}{6} &
\displaystyle\frac{-
12}{36}
1722 \displaystyle\frac{1}{1} &
\displaystyle\frac{2}{1} &
\displaystyle\frac{4}{2}
1726 \displaystyle\frac{1}{1} &
\displaystyle\frac{9}{6} &
\displaystyle\frac{33}{36}
1732 1 &
2 \cdot 6 &
4 \cdot 18
1738 =
\frac {213}{72} =
\frac{71}{24}
1741 Due to symmetry, the second term evaluates to the same value,
1742 while for the third term we find
1744 \frac{1}{-
1\cdot 1 \cdot 36}
1746 1 &
0 \cdot 6 &
0 \cdot 18
1753 \frac{-
3}{-
36} =
\frac 1{12}
1758 \frac{71}{24} +
\frac{71}{24} +
\frac 1{12} =
6
1763 Note that the run-time complexities of polynomial and exponential
1764 substitution are basically the same. The experiments of
1765 \citeN{Koeppe2006primal
} are somewhat misleading in this respect
1766 since the polynomial substitution (unlike the exponential
1767 substitution) had not been optimized to take full
1768 advantage of the stopped Barvinok decomposition.
1769 For comparison,
\autoref{t:hickerson
} shows running times
1770 for the same experiments of that paper, but using
1771 barvinok version
\verb+barvinok-
0.23-
47-gaa9024e+
1772 on an Athlon MP
1500+ with
512MiB internal memory.
1773 This machine appears to be slightly slower than the
1774 machine used in the experiments of
\citeN{Koeppe2006primal
}
1775 as computing
{\tt hickerson-
14} using the dual decomposition
1776 with polynomial substitution an maximal index
1
1777 took
2768 seconds on this machine using
\LattEmk/.
1778 At this stage, it is not clear yet why the number of
1779 cones in the dual decomposition of
{\tt hickerson-
13}
1780 differs from that of
\LattE/~
\shortcite{latte1.1
} and
1781 \LattEmk/~
\cite{latte-macchiato
}.
1782 We conclude from
\autoref{t:hickerson
} that (our implementation of)
1783 the exponential substitution is always slightly faster than
1784 (our implementation of) the polynomial substitution.
1785 The optimal maximal index for these examples is about
500,
1786 which agrees with the experiments of
\citeN{Koeppe2006primal
}.
1790 \begin{tabular
}{rrrrrrr
}
1793 \multicolumn{3}{c
}{Dual decomposition
} &
1794 \multicolumn{3}{c
}{Primal decomposition
}
1797 &
\multicolumn{2}{c
}{Time (s)
} &
1798 &
\multicolumn{2}{c
}{Time (s)
}
1802 Max.\ index & Cones & Poly & Exp & Cones & Poly & Exp \\
1804 \multicolumn{7}{c
}{{\tt hickerson-
12}}
1807 1 &
11625 &
9.24 &
8.90 &
7929 &
4.80 &
4.55
1809 10 &
4251 &
4.32 &
4.19 &
803 &
0.66 &
0.62
1811 100 &
980 &
1.42 &
1.35 &
84 &
0.13 &
0.12
1813 200 &
550 &
1.00 &
0.92 &
76 &
0.12 &
0.12
1815 300 &
474 &
0.93 &
0.86 &
58 &
0.12 &
0.10
1817 500 &
410 &
0.90 &
0.83 &
42 &
0.10 &
0.10
1819 1000 &
130 &
0.42 &
0.38 &
22 &
{\bf 0.10} &
{\bf 0.07}
1821 2000 &
10 &
{\bf 0.10} &
{\bf 0.10} &
22 &
0.10 &
0.09
1823 5000 &
7 &
0.12 &
0.11 &
7 &
0.12 &
0.10
1826 \multicolumn{7}{c
}{{\tt hickerson-
13}}
1829 1 &
494836 &
489 &
463 &
483507 &
339 &
315
1831 10 &
296151 &
325 &
309 &
55643 &
51 &
48
1833 100 &
158929 &
203 &
192 &
9158 &
11 &
10
1835 200 &
138296 &
184 &
173 &
6150 &
9 &
8
1837 300 &
110438 &
168 &
157 &
4674 &
8 &
7
1839 500 &
102403 &
163 &
151 &
3381 &
{\bf 8} &
{\bf 7}
1841 1000 &
83421 &
{\bf 163} &
{\bf 149} &
2490 &
8 &
7
1843 2000 &
77055 &
170 &
153 &
1857 &
10 &
8
1845 5000 &
57265 &
246 &
211 &
1488 &
13 &
11
1847 10000 &
50963 &
319 &
269 &
1011 &
26 &
21
1850 \multicolumn{7}{c
}{{\tt hickerson-
14}}
1853 1 &
1682743 &
2171 &
2064 &
552065 &
508 &
475
1855 10 &
1027619 &
1453 &
1385 &
49632 &
62 &
59
1857 100 &
455474 &
768 &
730 &
8470 &
14 &
13
1859 200 &
406491 &
699 &
661 &
5554 &
11 &
10
1861 300 &
328340 &
627 &
590 &
4332 &
11 &
9
1863 500 &
303566 &
605 &
565 &
3464 &
{\bf 11} &
{\bf 9}
1865 1000 &
232626 &
{\bf 581} &
{\bf 532} &
2384 &
12 &
10
1867 2000 &
195368 &
607 &
545 &
1792 &
14 &
12
1869 5000 &
147496 &
785 &
682 &
1276 &
19 &
16
1871 10000 &
128372 &
966 &
824 &
956 &
29 &
23
1875 \caption{Timing results of dual and primal decomposition with
1876 polynomial or exponential substitution on the Hickerson examples
}
1881 \subsection{Approximate Enumeration using Nested Sums
}
1884 If $P
\in \QQ^d$ is a polyhedron and $p(
\vec x)
\in \QQ[\vec x
]$ is a
1885 polynomial and we want to sum $p(
\vec x)$ over all integer values
1886 of (a subset of) the variables $
\vec x$, then we can do this incrementally
1887 by taking a variable $x_1$ with lower bound $L(
\vec{\hat x
})$
1888 and upper bound $U(
\vec{\hat x
})$, with $
\vec{\hat x
} = (x_2,
\ldots, x_d)$,
1891 \label{eq:nested:sum
}
1892 Q(
\vec{\hat x
}) =
\sum_{x_1 = L(
\vec{\hat x
})
}^
{U(
\vec{\hat x
})
} p(
\vec x)
1895 Since $P$ is a polytope, the lower bound is a maximum of affine expressions
1896 in the remaining variables, while the upper bound is a minimum of such expressions.
1897 If the coefficients in these expressions are all integer, then we can
1898 compute $Q(
\vec{\hat x
})$ exactly as a piecewise polynomial using formulas
1899 for sums of powers, as proposed by, e.g.,
1900 \shortciteN{Tawbi1994,Sakellariou1997sums,VanEngelen2004
}.
1901 If some of the coefficients are not integer, we can apply the same formulas
1902 to obtain an approximation, which can is some cases be shown
1903 to be an overapproximation~
\shortcite{VanEngelen2004
}.
1904 Note that if we take the initial polynomial to be the constant $
1$, then
1905 this gives us a method for computing an approximation of the number
1906 of integer points in a (parametric) polytope.
1908 The first step is to compute the chamber decomposition of $P$ when viewed
1909 as a
1-dimensional parametric polytope. That is, we need to partition
1910 the projection of $P$ onto the remaining variables into polyhedral cells
1911 such that in each cell, both the upper and the lower bound are described
1912 by a single affine expression. Basically, for each pair of lower and upper
1913 bound, we compute the cell where the chosen lower bound is (strictly)
1914 smaller than all other lower bounds and similarly for the upper bound.
1916 For any given pair of lower and upper bound $(l(
\vec {\hat x
}), u(
\vec{\hat x
}))$,
1917 the formula~
\eqref{eq:nested:sum
} is computed for each monomial of $p(
\vec x)$
1918 separately. For the constant term $
\alpha_0$, we have
1920 \sum_{x_1 = l(
\vec {\hat x
})
}^
{u(
\vec{\hat x
})
} \alpha_0(
\vec{\hat x
})
1921 =
\alpha_0(
\vec{\hat x
})
\left(u(
\vec{\hat x
}) - l(
\vec {\hat x
}) +
1\right)
1924 For the higher degree monomials, we use the formula
1926 \label{eq:summation
}
1927 \sum_{k=
0}^
{m-
1} k^n =
{1\over{n+
1}}\sum_{k=
0}^n
{n+
1\choose{k
}} B_k m^
{n+
1-k
}
1931 with $B_i$ the
\ai{Bernoulli number
}s, which can be computed
1932 using the recurrence
1934 \label{eq:Bernoulli
}
1935 \sum_{j=
0}^m
{m+
1\choose{j
}}B_j =
0
1939 Note that
\eqref{eq:summation
} is also valid if $m =
0$,
1940 i.e., $S_n(
0) =
0$, a fact
1941 that can be easily shown using Newton series~
\shortcite{VanEngelen2004
}.
1943 \newcounter{saveenumi
}
1945 Since we can only directly apply the summation formula when
1946 the lower bound is zero (or one), we need to consider several
1949 \item $l(
\vec {\hat x
})
\ge 1$
1952 \sum_{x_1 = l(
\vec {\hat x
})
}^
{u(
\vec{\hat x
})
} \alpha_n(
\vec{\hat x
}) \, x_1^n
1954 \alpha_n(
\vec{\hat x
})
1956 \sum_{x_1 =
1}^
{u(
\vec{\hat x
})
} x_1^n
1958 \sum_{x_1 =
1}^
{l(
\vec {\hat x
})-
1} x_1^n
1962 \alpha_n(
\vec{\hat x
})
1963 \left( S_n(u(
\vec{\hat x
})+
1) - S_n(l(
\vec {\hat x
}))
\right)
1966 \item $u(
\vec{\hat x
})
\le -
1$
1969 \sum_{x_1 = l(
\vec {\hat x
})
}^
{u(
\vec{\hat x
})
} \alpha_n(
\vec{\hat x
}) \, x_1^n
1971 \alpha_n(
\vec{\hat x
}) (-
1)^n
1972 \sum_{x_1 = -u(
\vec {\hat x
})
}^
{-l(
\vec{\hat x
})
} \alpha_n(
\vec{\hat x
}) \, x_1^n
1975 \alpha_n(
\vec{\hat x
}) (-
1)^n
1976 \left( S_n(-l(
\vec{\hat x
})+
1) - S_n(-u(
\vec {\hat x
}))
\right)
1979 \item $l(
\vec {\hat x
})
\le 0$ and $u(
\vec{\hat x
})
\ge 0$
1982 \sum_{x_1 = l(
\vec {\hat x
})
}^
{u(
\vec{\hat x
})
} \alpha_n(
\vec{\hat x
}) \, x_1^n
1984 \alpha_n(
\vec{\hat x
})
1986 \sum_{x_1 =
0}^
{u(
\vec{\hat x
})
} x_1^n
1989 \sum_{x_1 =
1}^
{-l(
\vec {\hat x
})
} x_1^n
1993 \alpha_n(
\vec{\hat x
})
1995 S_n(u(
\vec{\hat x
})+
1)
1998 S_n(-l(
\vec{\hat x
})+
1)
2002 \setcounter{saveenumi
}{\value{enumi
}}
2005 If the coefficients in the lower and upper bound are all
2006 integer, then the above
3 cases partition (the integer points in)
2007 the projection of $P$ onto the remaining variables.
2008 However, if some of the coefficients are rational, then the lower
2009 and upper bound can lie in the open interval $(
0,
1)$ for some
2010 values of $
\vec{\hat x
}$. We therefore also need to consider
2011 the following two cases.
2012 Note that the results will not be correct in these cases, but
2013 not taking them into account would lead to a greater loss in accuracy.
2016 \setcounter{enumi
}{\value{saveenumi
}}
2017 \item $
0 < l(
\vec {\hat x
}) <
1$
2020 \sum_{x_1 = l(
\vec {\hat x
})
}^
{u(
\vec{\hat x
})
} \alpha_n(
\vec{\hat x
}) \, x_1^n
2022 \alpha_n(
\vec{\hat x
})
2023 S_n(u(
\vec{\hat x
})+
1)
2026 \item $
0 < -u(
\vec {\hat x
}) <
1$ and $l(
\vec {\hat x
})
\le 0$
2029 \sum_{x_1 = l(
\vec {\hat x
})
}^
{u(
\vec{\hat x
})
} \alpha_n(
\vec{\hat x
}) \, x_1^n
2031 \alpha_n(
\vec{\hat x
})
2033 S_n(-l(
\vec{\hat x
})+
1)
2038 \subsection{Summation using local Euler-Maclaurin formula
}
2041 \sindex{local
}{Euler-Maclaurin formula
}
2042 In this section we provide some implementation details
2043 on using
\ai{local Euler-Maclaurin formula
} to compute
2044 the sum of a piecewise polynomial evaluated in all integer
2045 points of a two-dimensional parametric polytope.
2046 For the theory behind these formula and a discussion
2047 of the original implementation (for non-parametric simplices),
2048 we refer to
\shortciteN{Berline2006local
}.
2050 In particular, consider a parametric piecewise polynomial
2051 in $n$ parameters and $m$ variables
2052 $c :
\ZZ^n
\to \ZZ^m
\to \QQ :
\vec p
\mapsto c(
\vec p)$,
2053 with $c(
\vec p) :
\ZZ^m
\to \QQ :
\vec x
\mapsto c(
\vec p)(
\vec x)$
2056 c_
{\vec p
}(
\vec x) =
2058 c_1(
\vec p)(
\vec x) &
\text{if $
\vec x
\in D_1(
\vec p)$
}
2062 c_r(
\vec p)(
\vec x) &
\text{if $
\vec x
\in D_r(
\vec p)$
}
2066 with the $c_i$ polynomials, $c_i
\in (
\QQ[\vec p
])
[\vec x
]$, and
2067 the $D_i$ disjoint linearly parametric polytopes.
2070 g(
\vec p) =
\sum_{\vec x
\in \ZZ^m
} c(
\vec p)(
\vec x)
2074 \subsubsection{Reduction to the summation of a parametric polynomial
2075 over a parametric polytope with a fixed combinatorial structure
}
2077 Since the $D_i$ are disjoint, we can consider each
2078 $(c_i, D_i)$-pair individually and compute
2080 g(
\vec p) =
\sum_{i=
1}^r g_i(
\vec p) =
2081 \sum_{i=
1}^r
\sum_{\vec x
\in D_r(
\vec p)
\cap \ZZ^m
} c_r(
\vec p)(
\vec x)
2084 The second step is to compute the
\ai{chamber decomposition
}
2085 ~
\shortcite[Section
4.2.3]{Verdoolaege2005PhD
} of each parametric
2087 The result is a subdivision of the parameter space into chambers
2088 $C_
{ij
}$ such that $D_i$ has a fixed combinatorial structure,
2089 in particular a fixed set of parametric vertices,
2090 on (the interior of) each $C_
{ij
}$. Applying
\autoref{p:inclusion-exclusion
},
2091 this subdivision can be transformed into a partition
2092 $\
{\,
\tilde C_
{ij
} \,\
}$ by
2093 making some of the facets of the chambers open
%
2094 ~
\shortcite[Section~
3.2]{Koeppe2007parametric
}.
2095 Since we are only interested in integer parameter values,
2096 any of the resulting open facets $
\sp a p + c >
0$,
2097 with $
\vec a
\in \ZZ^n$ and $c
\in \ZZ$,
2098 can then be replaced by $
\sp a p + c-
1 \ge 0$.
2101 g_i(
\vec p) =
\sum_j g_
{ij
}(
\vec p) =
2102 \sum_j \sum_{\vec x
\in C_
{ij
}(
\vec p)
\cap \ZZ^m
} c_r(
\vec p)(
\vec x)
2106 After this reduction, the technique of
2107 \shortciteN{Berline2006local
} can be applied practically verbatim
2108 to the parametric polytope with a fixed combinatorial structure.
2109 In principle, we could also handle piecewise quasi-polynomials
2110 using the technique of
\shortciteN[Section~
4.5.4]{Verdoolaege2005PhD
},
2111 except that we only need to create an extra variable for each
2112 distinct floor expression in a monomial, rather than for each
2113 occurrence of a floor expression in a monomial.
2114 However, since we currently only support two-dimensional polytopes,
2115 this reduction has not been implemented yet.
2117 \subsubsection{Summation over a one-dimensional parametric polytope
}
2119 The basis for the summation technique is the local
2120 Euler-Maclaurin formula~
\cite[Theorem~
26]{Berline2006local
}
2123 \sum_{\vec x
\in P(
\vec p)
\cap \Lambda} h(
\vec p)(
\vec x)
2124 =
\sum_{F(
\vec p)
\in {\mathcal F
}(P(
\vec p))
}
2125 \int_{F(
\vec p)
} D_
{P(
\vec p),F(
\vec p)
} \cdot h(
\vec p)
2128 where $P(
\vec p)$ is a parametric polytope,
2129 $
\Lambda$ is a lattice, $
{\mathcal F
}(P(
\vec p))$
2130 are the faces of $P(
\vec p)$, $D_
{P(
\vec p),F(
\vec p)
}$ is a
2131 specific differential operator associated to the face of a polytope.
2132 The
\ai{Lebesgue measure
} used in the integral is such that the
2133 integral of the indicator function of a lattice element of
2134 the lattice $
\Lambda \cap (
\affhull(F(
\vec p)) - F(
\vec p))$ is
1,
2135 i.e., the intersection of $
\Lambda$ with the linear subspace
2136 parallel to the affine hull of the face $F(
\vec p)$.
2137 Note that the original theorem is formulated for a non-parametric
2138 polytope and a non-parametric polynomial. However, as we will see,
2139 in each of the steps in the computation, the parameters can be
2140 treated as symbolic constants without affecting the validity of the formula,
2141 see also~
\shortciteN[Section
6]{Berline2006local
}.
2143 The differential operator $D_
{P(
\vec p),F(
\vec p)
}$ is obtained
2144 by plugging in the vector $
\vec D=(D_1,
\ldots,D_m)$ of first
2145 order differential operators, i.e., $D_k$ is the first order
2146 differential operator in the $k$th variable,
2147 in the function $
\mu_{P(
\vec p),F(
\vec p)
}$.
2148 This function is determined by the
\defindex{transverse cone
}
2149 of the polyhedron $P(
\vec p)$ along its face $F(
\vec p)$,
2150 which is the
\ai{supporting cone
} of $P(
\vec p)$ along $F(
\vec p)$
2151 projected into the linear subspace orthogonal to $F(
\vec p)$.
2152 The lattice associated to this space is the projection of
2153 $
\Lambda$ into this space.
2155 In particular, for a zero-dimensional affine cone in the zero-dimensional
2156 space, we have $
\mu =
1$~
\cite[Proposition
12]{Berline2006local
},
2157 while for a one-dimensional affine
2158 cone $K = (-t +
\RR_+) r$ in the one-dimensional space, where
2159 $r$ is a primitive integer vector and $t
\in [0,
1)$,
2160 we have~
\cite[(
13)
]{Berline2006local
}
2163 \mu(K)(
\xi) =
\frac{e^
{t y
}}{1-e^y
} +
\frac 1{y
}
2164 = -
\sum_{n=
0}^
\infty \frac{b(n+
1, t)
}{(n+
1)!
} y^n
2167 with $y =
\sps \xi r$ and $b(n,t)$ the
\ai{Bernoulli polynomial
}s
2168 defined by the generating series
2170 \frac{e^
{ty
} y
}{e^y -
1} =
\sum_{n=
0}^
\infty \frac{b(n,t)
}{n!
} y^n
2173 The constant terms of these Bernoulli polynomials
2174 are the
\ai{Bernoulli number
}s.
2176 Applying
\eqref{eq:EML
} to a one-dimensional parametric polytope
2177 $P(
\vec p) =
[v_1(
\vec p), v_2(
\vec p)
]$, we find
2180 \sum_{x
\in P(
\vec p)
\cap \ZZ} h(
\vec p)(x)
2181 = &
\int_{P(
\vec p)
} D_
{P(
\vec p), P(
\vec p)
} \cdot h(
\vec p)
2183 & +
\int_{v_1(
\vec p)
} D_
{P(
\vec p), v_1(
\vec p)
} \cdot h(
\vec p)
2185 & +
\int_{v_2(
\vec p)
} D_
{P(
\vec p), v_2(
\vec p)
} \cdot h(
\vec p)
2189 The transverse cone of a polytope along the whole polytope is
2190 a zero-dimensional cone in a zero-dimensional space and so
2191 $D_
{P(
\vec p), P(
\vec p)
} =
\mu_{P(
\vec p), P(
\vec p)
}(D) =
1$.
2192 The transverse cone along $v_1(
\vec p)$ is $v_1(
\vec p) +
\RR_+$
2193 and so $D_
{P(
\vec p), v_1(
\vec p)
} =
\mu(v_1(
\vec p) +
\RR_+)(D)$
2194 as in
\eqref{eq:mu:
1}, with $y =
\sps D
1 = D$ and
2195 $t =
\ceil{v_1(
\vec p)
} - v_1(
\vec p) =
2196 \fractional{-v_1(
\vec p)
}$.
2198 $D_
{P(
\vec p), v_2(
\vec p)
} =
\mu(v_2(
\vec p) -
\RR_+)(D)$
2199 as in
\eqref{eq:mu:
1}, with $y =
\sps D
{-
1} = -D$ and
2200 $t = v_2(
\vec p) -
\floor{v_2(
\vec p)
} =
2201 \fractional{v_2(
\vec p)
}$.
2202 Summarizing, we find
2205 \sum_{x
\in P(
\vec p)
\cap \ZZ} h(
\vec p)(x)
2206 = &
\int_{v_1(
\vec p)
}^
{v_2(
\vec p)
} h(
\vec p)(t) \, dt
2208 & -
\sum_{n=
0}^
\infty \frac{b(n+
1,
\fractional{-v_1(
\vec p)
})
}{(n+
1)!
}
2209 (D^n h(
\vec p))(v_1(
\vec p))
2211 & -
\sum_{n=
0}^
\infty (-
1)^n
\frac{b(n+
1,
\fractional{v_2(
\vec p)
})
}{(n+
1)!
}
2212 (D^n h(
\vec p))(v_2(
\vec p))
2217 Note that in order to apply this formula, we need to verify
2218 first that $v_1(
\vec p)$ is indeed smaller than (or equal to)
2219 $v_2(
\vec p)$. Since the combinatorial structure of $P(
\vec p)$
2220 does not change throughout the interior of the chamber, we only
2221 need to check the order of the two vertices for one value
2222 of the parameters from the interior of the chamber, a point
2223 which we may compute as in
\autoref{s:interior
}.
2225 \subsubsection{Summation over a two-dimensional parametric polytope
}
2227 For two-dimensional polytope, formula~
\eqref{eq:EML
} has three kinds
2228 of contributions: the integral of the polynomial over the polytope,
2229 contributions along edges and contributions along vertices.
2230 As suggested by~
\citeN{Berline2007personal
}, the integral can be computed
2231 by applying the Green-Stokes theorem:
2234 \left(
\frac{\partial M
}{\partial x
} -
\frac{\partial L
}{\partial y
}\right) =
2235 \int_{\partial P(
\vec p)
} (L\, dx + M\, dy)
2238 In particular, if $M(
\vec p)(x,y)$ is such that
2239 $
\frac{\partial M
}{\partial x
}(
\vec p)(x,y) = h(
\vec p)(x,y)$
2242 \iint_{P(
\vec p)
} h(
\vec p)(x,y) =
2243 \int_{\partial P(
\vec p)
} M(
\vec p)(x,y) \, dy
2246 Care must be taken to integrate over the boundary in the positive
2247 direction. Assuming the vertices of the polygon are not given
2248 in a predetermined order, we can check the correct orientation
2249 of the vertices of each edge individually. Let $
\vec n = (n_1, n_2)$
2250 be the inner normal of a facet and let $
\vec v_1(
\vec p)$
2251 and $
\vec v_2(
\vec p)$ be the two vertices of the facet, then
2252 the vertices are in the correct order if
2255 v_
{2,
1}(
\vec p)-v_
{1,
1}(
\vec p) & n_1
2257 v_
{2,
2}(
\vec p)-v_
{1,
2}(
\vec p) & n_2
2262 Since these two vertices belong to the same edge, their order
2263 will not change within a chamber and so we can again perform
2264 this check for a single value of the parameters.
2265 To integrate $M$ over an edge $F$, let $
\vec f$ be a primitive
2266 integer vector in the direction of the edge.
2267 Then $
\vec v_2(
\vec p) =
\vec v_1(
\vec p) + k(
\vec p) \,
\vec f$
2268 and any point on the edge can be written as
2269 $
\vec v_1(
\vec p) +
\lambda \vec f$ with
2270 $
0 \le \lambda \le k(
\vec p)$.
2274 \int_F M(
\vec p)(x,y) \, dy
2277 M(
\vec p)(v_
{1,
1}(
\vec p) +
\lambda f_1,
2278 v_
{1,
2}(
\vec p) +
\lambda f_2)
2283 For the edges, we can again apply
\eqref{eq:mu:
1}, but we
2284 must first project the supporting cone at the edge into
2285 the linear subspace orthogonal to the edge.
2286 Let $
\vec n = (n_1, n_2)$ be the (primitive integer) inner normal
2287 of this facet $F(
\vec p)$, then $
\vec f = (-n_2, n_1)$ is parallel
2288 to the facet and we can write one of the vertices $
\vec v(
\vec p)$
2289 as a linear combination of these two vectors:
2291 \label{eq:EML:facet:coordinates
}
2307 \label{eq:EML:facet:coordinates:
2}
2322 with $d = n_1^
2+n_2^
2$.
2323 The lattice associated to the linear subspace orthogonal
2324 to the facet is the projection of $
\Lambda$ into this space.
2325 Since $
\vec n$ is primitive, a basis for this lattice can be
2326 identified with $
\vec n/d$.
2327 The coordinate of the whole facet in this space is therefore
2334 $, while the transverse cone is $d a_2(
\vec p) +
\RR_+$.
2335 Similarly, a linear functional $
\vec \xi'$ projects onto
2336 a linear functional $
\xi =
\sp {\xi'
} n/d$ in the linear subspace.
2337 Applying
\eqref{eq:mu:
1}, with $y =
\frac{n_1
}d D_1 +
\frac{n_2
}d D_2$
2338 and $t =
\fractional{- n_1 v_1(
\vec p) - n_2 v_2(
\vec p)
}$, we therefore
2341 D_
{P(
\vec p), F(
\vec p)
}
2344 \frac{b(n+
1,
\fractional{-n_1 v_1(
\vec p) - n_2 v_2(
\vec p)
})
}{(n+
1)!
}
2345 \left(
\frac{n_1
}d D_1 +
\frac{n_2
}d D_2
\right)^n
2348 -
\sum_{i=
0}^
\infty \sum_{j=
0}^
\infty
2349 \frac{b(i+j+
1,
\fractional{-n_1 v_1(
\vec p) - n_2 v_2(
\vec p)
})
}{(i+j+
1)!
}
2350 \frac{n_1^i n_2^j
}{d^
{i+j
}} D_1^i D_2^j
2353 After applying this differential operator to the polynomial
2354 $h(
\vec p)(
\vec x)$, the resulting polynomial
2356 h'(
\vec p)(
\vec x) = D_
{P(
\vec p), F(
\vec p)
} \cdot h(
\vec p)(
\vec x)
2358 needs to be integrated over the facet.
2359 The measure to be used is such that the integral of a lattice tile
2360 in the linear space parallel to the facet is
1, i.e.,
2362 \int_{\vec 0}^
{\vec f
} 1 =
\int_0^
1 1 dz =
1,
2364 with $z$ the coordinate along $
\vec f$.
2365 Referring to
\eqref{eq:EML:facet:coordinates
} and
2366 \eqref{eq:EML:facet:coordinates:
2}, all points of the facet
2367 have the form $
\vec x(
\vec p) = z \,
\vec f + a_2(
\vec p) \,
\vec n$,
2368 while the $z$-coordinate of the vertices $
\vec v_1(
\vec p)$
2369 and $
\vec v_2(
\vec p)$ are
2370 $(-n_2 v_
{1,
1} + n_1 v_
{1,
2})/d$
2372 $(-n_2 v_
{2,
1} + n_1 v_
{2,
2})/d$, respectively.
2373 That is, the contribution of the facet is equal to
2375 \int_{(-n_2 v_
{1,
1} + n_1 v_
{1,
2})/d
}^
{(-n_2 v_
{2,
1} + n_1 v_
{2,
2})/d
}
2376 h'(
\vec p)
\left(z \,
\vec f + a_2(
\vec p) \,
\vec n
\right) \, dz
2379 where, again, we need to ensure that the lower limit is smaller
2380 than the upper limit using the usual method of plugging in a
2381 particular value of the parameters.
2383 Finally, we consider the contributions of the vertices.
2384 The
\ai{transverse cone
}s are in this case simply the supporting cones.
2385 Since $
\mu$ is a valuation, we may apply
\ai{Barvinok's decomposition
}
2386 and assume that the cone is unimodular.
2389 K &=
\vec v(
\vec p) +
\RR_+
\vec r_1 +
\RR_+
\vec r_2
2391 &= (a_1(
\vec p) +
\RR_+)
\vec r_1 + (a_2(
\vec p) +
\RR_+)
\vec r_2,
2402 we have~
\cite[Proposition~
31]{Berline2006local
},
2407 \frac{e^
{t_1 y_1 + t_2 y_2
}}{(
1-e^
{y_1
})(
1-e^
{y_2
})
}
2408 +
\frac 1{y_1
}B(y_2 - C_1 y_1, t_2)
2409 +
\frac 1{y_2
}B(y_1 - C_2 y_2, t_1)
2415 \frac{e^
{t y
}}{1-e^y
} +
\frac 1{y
}
2416 = -
\sum_{n=
0}^
\infty \frac{b(n+
1, t)
}{(n+
1)!
} y^n
2419 $y_i =
\sps{\vec\xi}{\vec r_i
}$,
2420 $C_i =
\sps{\vec v_1
}{\vec v_2
}/
\sps{\vec v_i
}{\vec v_i
}$
2422 $t_i =
\fractional{-a_i(
\vec p)
}$.
2423 Expanding
\eqref{eq:mu:
2}, we find
2428 -
\frac{b(
0,t1)
}{y_1
} -
\sum_{n=
0}^
\infty \frac{b(n+
1,t_1)
}{(n+
1)!
} y_1^n
2431 -
\frac{b(
0,t2)
}{y_2
} -
\sum_{n=
0}^
\infty \frac{b(n+
1,t_2)
}{(n+
1)!
} y_2^n
2437 \sum_{n=
0}^
\infty \frac{b(n+
1,t_2)
}{(n+
1)!
} \frac{y_2^n
}{y_1
}
2439 \sum_{n=
0}^
\infty \frac{b(n+
1,t_2)
}{(n+
1)!
} \frac{(y_2-C_1 y_1)^n-y_2^n
}{y_1
}
2445 \sum_{n=
0}^
\infty \frac{b(n+
1,t_1)
}{(n+
1)!
} \frac{y_1^n
}{y_2
}
2447 \sum_{n=
0}^
\infty \frac{b(n+
1,t_1)
}{(n+
1)!
} \frac{(y_1-C_2 y_2)^n-y_1^n
}{y_2
}
2456 c(C_1, C_2, t_1, t_2; n_1, n_2) \, y_1^n y_2^n
2461 c(C_1, C_2, t_1, t_2; n_1, n_2)
2463 \frac{b(n_1+
1,t_1)
}{(n_1+
1)!
} \frac{b(n_2+
1,t_2)
}{(n_2+
1)!
}
2467 \frac{b(n_1+n_2+
1,t_2)
}{(n_1+n_2+
1)!
} {n_1+n_2+
1 \choose n_1+
1}
2468 \left(-C_1
\right)^
{n_1+
1}
2472 \frac{b(n_1+n_2+
1,t_1)
}{(n_1+n_2+
1)!
} {n_1+n_2+
1 \choose n_2+
1}
2473 \left(-C_2
\right)^
{n_2+
1}
2476 For $
\vec \xi =
\vec D$, we have
2480 \left( r_
{1,
1} D_1 + r_
{1,
2} D_2
\right)^
{n_1
}
2481 \left( r_
{2,
1} D_1 + r_
{2,
2} D_2
\right)^
{n_2
}
2485 \sum_{k=
0}^
{n_1
} r_
{1,
1}^k r_
{1,
2}^
{n_1 - k
} { n_1
\choose k
} D_1^k D_2^
{n_1-k
}
2488 \sum_{l=
0}^
{n_2
} r_
{2,
1}^l r_
{2,
2}^
{n_2 - l
} { n_2
\choose l
} D_1^l D_2^
{n_2-l
}
2493 D_
{P(
\vec p),
\vec v(
\vec p)
} =
\mu(K)(
\vec D)
2499 \sum_{\shortstack{$
\scriptstyle i+j = n_1+n_2$\\$
\scriptstyle n_1
\ge 0$\\$
\scriptstyle n_2
\ge 0$
}}
2500 \sum_{\shortstack{$
\scriptstyle k+l = i$\\$
\scriptstyle 0 \le k
\le n_1$\\$
\scriptstyle 0 \le l
\le n_2$
}}
2501 c(C_1, C_2, t_1, t_2; n_1, n_2)
2502 r_
{1,
1}^k r_
{1,
2}^
{n_1 - k
}
2503 r_
{2,
1}^l r_
{2,
2}^
{n_2 - l
}
2504 { n_1
\choose k
} { n_2
\choose l
} D_1^i D_2^j
2507 The contribution of this vertex is then
2509 h'(
\vec p)(
\vec v(
\vec p))
2513 h'(
\vec p)(
\vec x) = D_
{P(
\vec p),
\vec v(
\vec p)
} \cdot h(
\vec p)(
\vec x)
2517 As a simple example, consider the (non-parametric) triangle
2518 in
\autoref{f:EML:triangle
} and assume we want to compute
2520 \sum_{\vec x
\in T
\cap \ZZ^
2} x_1 x_2
2523 Since $T
\cap \ZZ^
2 = \
{\, (
2,
4), (
3,
4), (
2,
5) \, \
}$,
2524 the result should be
2526 2 \cdot 4 +
3 \cdot 4 +
2 \cdot 5 =
30
2533 <
\intercol,
0pt>:<
0pt,
\intercol>::
2534 \POS@i@=
{(
2,
4),(
3,
4),(
2,
5),(
2,
4)
},
{0*
[|(
2)
]\xypolyline{}}
2535 \POS(
2.35,
4.25)*
{x_1 x_2
}
2536 \POS(
2,
4)*+!U
{(
2,
4)
}
2537 \POS(
3,
4)*+!U
{(
3,
4)
}
2538 \POS(
2,
5)*+!D
{(
2,
5)
}
2543 \POS(
0,-
1)
\ar(
0,
5.5)
2545 \caption{Sum of polynomial $x_1 x_2$ over the integer points in a triangle $T$
}
2546 \label{f:EML:triangle
}
2549 Let us first consider the integral
2551 \iint_T x_1 x_2 =
\int_{\partial T
} \frac{x_1^
2 x_2
}2 \, d x_2
2554 Integration along each of the edges of the triangle yields
2560 <
\intercol,
0pt>:<
0pt,
\intercol>::
2562 \POS@i@=
{(
0,
0),(
1,
0),(
0,
1),(
0,
0)
},
{0*
\xypolyline{--
}}
2563 \POS(
0,
0)
\ar@
[|(
2)
](
1,
0)
2567 For the edge in the margin, we have $
\vec f = (
1,
0)$, i.e., $f_2 =
0$.
2568 The contribution of this edge to the integral is therefore zero.
2573 <
\intercol,
0pt>:<
0pt,
\intercol>::
2575 \POS@i@=
{(
0,
0),(
1,
0),(
0,
1),(
0,
0)
},
{0*
\xypolyline{--
}}
2576 \POS(
1,
0)
\ar@
[|(
2)
](
0,
1)
2580 For this edge, we have $
\vec f = (-
1,
1)$.
2581 The contribution of this edge to the integral is therefore
2583 \int_0^
1 \frac{(
3-
\lambda)^
2(
4+
\lambda)
}2 d
\lambda
2591 <
\intercol,
0pt>:<
0pt,
\intercol>::
2593 \POS@i@=
{(
0,
0),(
1,
0),(
0,
1),(
0,
0)
},
{0*
\xypolyline{--
}}
2594 \POS(
0,
1)
\ar@
[|(
2)
](
0,
0)
2598 For this edge, we have $
\vec f = (
0,-
1)$.
2599 The contribution of this edge to the integral is therefore
2601 \int_0^
1 \frac{2^
2(
5-
\lambda)
}2 (-
1) d
\lambda
2606 The total integral is therefore
2608 \int_{\partial T
} \frac{x_1^
2 x_2
}2 \, d x_2
2609 =
0 +
\frac{337}{24} -
9 =
\frac{121}{24}
2613 Now let us consider the contributions of the edges.
2614 We will need the following
\ai{Bernoulli number
}s in our
2617 b(
1,
0) & = -
\frac 1 2
2619 b(
2,
0) & =
\frac 1 6
2623 b(
4,
0) & = -
\frac 1 {30}
2629 <
\intercol,
0pt>:<
0pt,
\intercol>::
2631 \POS@i@=
{(
0,
0),(
1,
0),(
0,
1),(
0,
0)
},
{0*
\xypolyline{--
}}
2632 \POS(
0,
0)
\ar@
[|(
2)
]@
{-
}(
1,
0)
2633 \POS(
0.5,
0)
\ar(
0.5,
1)
2637 The normal to the facet $F_1$ in the margin is $
\vec n = (
0,
1)$.
2638 The vector $
\vec f = (-
1,
0)$ is parallel to the facet.
2653 \quad\text{and
}\quad
2668 Therefore $t =
\fractional{-
4} =
0$, $y = D_2$,
2672 -
\sum_{j=
0}^
\infty \frac{b(j+
1,
0)
}{(j+
1)!
} D_2^j
2675 -
\frac{b(
1,
0)
}1 -
\frac{b(
2,
0)
}2 D_2 +
\cdots
2680 D_
{T,F_1
} \cdot x_1 x_2 =
2681 \left(
\frac 1 2 -
\frac 1{12} D_2
\right)
\cdot x_1 x_2
2683 \frac 1 2 x_1 x_2 -
\frac 1{12} x_1
2686 With $x_1 = - z$ and $x_2 =
4$, the contribution of this facet
2689 \int_{-
3}^
{-
2} -
2 z +
\frac 1{12} z \, dz
2698 <
\intercol,
0pt>:<
0pt,
\intercol>::
2700 \POS@i@=
{(
0,
0),(
1,
0),(
0,
1),(
0,
0)
},
{0*
\xypolyline{--
}}
2701 \POS(
0,
0)
\ar@
[|(
2)
]@
{-
}(
0,
1)
2702 \POS(
0,
0.5)
\ar(
1,
0.5)
2706 The normal to the facet $F_2$ in the margin is $
\vec n = (
1,
0)$.
2707 The vector $
\vec f = (
0,
1)$ is parallel to the facet.
2722 \quad\text{and
}\quad
2737 Therefore $t =
\fractional{-
2} =
0$, $y = D_1$,
2741 -
\sum_{i=
0}^
\infty \frac{b(i+
1,
0)
}{(i+
1)!
} D_1^i
2744 -
\frac{b(
1,
0)
}1 -
\frac{b(
2,
0)
}2 D_1 +
\cdots
2749 D_
{T,F_2
} \cdot x_1 x_2 =
2750 \left(
\frac 1 2 -
\frac 1{12} D_1
\right)
\cdot x_1 x_2
2752 \frac 1 2 x_1 x_2 -
\frac 1{12} x_2
2755 With $x_1 =
2$ and $x_2 = z$, the contribution of this facet
2758 \int_{4}^
{5} z -
\frac 1{12} z \, dz
2767 <
\intercol,
0pt>:<
0pt,
\intercol>::
2769 \POS@i@=
{(
0,
0),(
1,
0),(
0,
1),(
0,
0)
},
{0*
\xypolyline{--
}}
2770 \POS(
1,
0)
\ar@
[|(
2)
]@
{-
}(
0,
1)
2771 \POS(
0.5,
0.5)
\ar(-
0.5,-
0.5)
2775 The normal to the facet $F_3$ in the margin is $
\vec n = (-
1,-
1)$.
2776 The vector $
\vec f = (
1,-
1)$ is parallel to the facet.
2791 \quad\text{and
}\quad
2806 Therefore $t =
\fractional{7} =
0$, $y = -
\frac 1 2 D_1 -
\frac 1 2 D_2$,
2810 -
\sum_{i=
0}^
\infty \sum_{j=
0}^
\infty
2811 \frac{b(i+j+
1,
0)
}{(i+j+
1)!
}
2812 \frac{(-
1)^
{i+j
}}{2^
{i+j
}} D_1^i D_2^j
2816 +
\frac 1 2 \frac{b(
2,
0)
}2 D_1
2817 +
\frac 1 2 \frac{b(
2,
0)
}2 D_2 +
\cdots
2822 D_
{T,F_4
} \cdot x_1 x_2 =
2823 \left(
\frac 1 2 +
\frac 1{24} D_1 +
\frac 1{24} D_2
\right)
\cdot x_1 x_2
2825 \frac 1 2 x_1 x_2 +
\frac 1{24} x_2 +
\frac 1{24} x_1
2828 With $x_1 = z +
\frac 7 2$ and $x_2 = -z +
\frac 7 2$,
2829 the contribution of this facet
2832 \int_{-
\frac 3 2}^
{-
\frac 1 2}
2833 \frac 1 2 (z +
\frac 7 2)(-z +
\frac 7 2)
2834 +
\frac 1{24}(-z +
\frac 7 2)
2835 +
\frac 1{24}(z +
\frac 7 2) \, dz
2841 The total contribution of the edges is therefore
2843 \frac{115}{24}+
\frac{33}8+
2844 \frac{47}{8} =
\frac{355}{24}
2848 Finally, we consider the contributions of the vertices.
2853 <
\intercol,
0pt>:<
0pt,
\intercol>::
2855 \POS@i@=
{(
0,
0),(
1,
0),(
0,
1),(
0,
0)
},
{0*
\xypolyline{--
}}
2856 \POS(
1,
0)
\ar@
[|(
2)
](
0,
1)
2857 \POS(
1,
0)
\ar@
[|(
2)
](
0,
0)
2861 For the vertex $
\vec v = (
3,
4)$, we have
2862 $
\vec r_1 = (-
1,
0)$ and $
\vec r_2 = (-
1,
1)$.
2863 Since $
\vec v$ is integer, we have $t_1 = t_2 =
0$.
2864 Also, $C_1 =
1$, $C_2 =
1/
2$, $y_1 = -D_1$ and $y_2 = -D_1 + D_2$.
2865 Since the total degree of the polynomial $x_1 x_2$ is two,
2866 we only need the coefficients of $
\mu(K)(
\vec \xi)$ up to
2870 \begin{tabular
}{c|c|c
}
2884 {1 \choose 1}(-
\frac 12)^
1
2898 {2 \choose 1}(-
\frac 12)^
1
2915 {2 \choose 2}(-
\frac 12)^
2
2932 {3 \choose 1}(-
\frac 12)^
1
2949 {3 \choose 2}(-
\frac 12)^
2
2969 {3 \choose 3}(-
\frac 12)^
3
2982 \frac 3 8 -
\frac 1{24} (-D_1) -
\frac 1{24} (-D_1 + D_2)
2983 +
\frac 7{576} (-D_1 D_2)
2984 -
\frac 5{1152} (-
2 D_1 D2)
2988 \frac 3 8 x_1 x_2 +
\frac 1{24} x_2 -
\frac 1{24} (-x_2 + x_1)
2990 -
\frac 5{1152} (-
2)
2993 The contribution of this vertex is therefore
2995 h'(
3,
4) =
\frac {1355}{288}
3002 <
\intercol,
0pt>:<
0pt,
\intercol>::
3004 \POS@i@=
{(
0,
0),(
1,
0),(
0,
1),(
0,
0)
},
{0*
\xypolyline{--
}}
3005 \POS(
0,
1)
\ar@
[|(
2)
](
1,
0)
3006 \POS(
0,
1)
\ar@
[|(
2)
](
0,
0)
3010 For the vertex $
\vec v = (
2,
5)$, we have
3011 $
\vec r_1 = (
0,-
1)$ and $
\vec r_2 = (
1,-
1)$.
3012 Since $
\vec v$ is integer, we have $t_1 = t_2 =
0$.
3013 Also, $C_1 =
1$, $C_2 =
1/
2$, $y_1 = -D_2$ and $y_2 = D_1 - D_2$.
3018 \frac 3 8 x_1 x_2 +
\frac 1{24} x_1 -
\frac 1{24} (x_2 - x_1)
3020 -
\frac 5{1152} (-
2)
3023 The contribution of this vertex is therefore
3025 h'(
2,
5) =
\frac {1067}{288}
3032 <
\intercol,
0pt>:<
0pt,
\intercol>::
3034 \POS@i@=
{(
0,
0),(
1,
0),(
0,
1),(
0,
0)
},
{0*
\xypolyline{--
}}
3035 \POS(
0,
0)
\ar@
[|(
2)
](
1,
0)
3036 \POS(
0,
0)
\ar@
[|(
2)
](
0,
1)
3040 For the vertex $
\vec v = (
2,
4)$, we have
3041 $
\vec r_1 = (
1,
0)$ and $
\vec r_2 = (
0,
1)$.
3042 Since $
\vec v$ is integer, we have $t_1 = t_2 =
0$.
3043 The computations are easier in this case since
3044 $C_1 = C_2 =
0$, $y_1 = D_1$ and $y_2 = D_2$.
3049 \frac 1 4 x_1 x_2 -
\frac 1{12} x_2 -
\frac 1{12} x_1
3053 The contribution of this vertex is therefore
3055 h'(
2,
4) =
\frac {253}{144}
3059 The total contribution of the vertices is then
3061 \frac {1355}{288} +
\frac {1067}{288} +
\frac {253}{144}
3064 and the total sum is
3066 \frac{121}{24}+
\frac{355}{24}+
\frac{61}6 =
30
3073 Consider the parametric polytope
3075 P(n) = \
{\,
\vec x
\mid x_1
\ge 2 \wedge 3 x_1
\le n +
9
3076 \wedge 4 \le x_2
\le 5 \,\
}
3079 If $n
\ge -
3$, then the vertices of this polytope are
3080 $(
2,
4)$, $(
2,
5)$, $(
3+n/
3,
4)$ and $(
3+n/
3,
5)$.
3081 The contributions of the faces of $P(n)$ to
3083 \sum_{\vec x
\in P(n)
\cap \ZZ^
2} x_1 x_2
3085 for the chamber $n
\ge -
3$ are shown in
\autoref{t:sum:rectangle
}.
3090 -
3 n
\fractional{\frac{ n
}{3}}
3092 +
\frac{9}{2} \fractional{\frac{ n
}{3}}^
2
3093 -
\frac{63}{2} \fractional{\frac{ n
}{3}}
3095 &
\text{if $ n+
3 \ge 0$
}.
3103 <
\intercol,
0pt>:<
0pt,
\intercol>::
3104 \POS(-
1,-
0.5)*
\xybox{
3105 \POS@i@=
{(
0,
0),(
1,
0),(
1,
1),(
0,
1),(
0,
0)
},
{0*
[|(
2)
]\xypolyline{}}
3106 \POS(
0,
1.1)*
{}\POS(
0,-
0.1)*
{}
3118 <
\intercol,
0pt>:<
0pt,
\intercol>::
3119 \POS(-
1,-
0.5)*
\xybox{
3120 \POS@i@=
{(
0,
0),(
1,
0),(
1,
1),(
0,
1),(
0,
0)
},
{0*
\xypolyline{--
}}
3121 \POS(
0,
0)
\ar@
[|(
2)
]@
{-
}(
0,
1)
3123 \POS(
0,
1.1)*
{}\POS(
0,-
0.1)*
{}
3133 <
\intercol,
0pt>:<
0pt,
\intercol>::
3134 \POS(-
1,-
0.5)*
\xybox{
3135 \POS@i@=
{(
0,
0),(
1,
0),(
1,
1),(
0,
1),(
0,
0)
},
{0*
\xypolyline{--
}}
3136 \POS(
1,
0)
\ar@
[|(
2)
]@
{-
}(
1,
1)
3137 \POS(
1,
0.5)*+!L
{3+n/
3}
3138 \POS(
0,
1.1)*
{}\POS(
0,-
0.1)*
{}
3144 -
\frac{3}{2} n
\fractional{\frac{ n
}{3}}
3146 +
\frac{9}{4} \fractional{\frac{ n
}{3}}^
2
3147 -
\frac{63}{4} \fractional{\frac{ n
}{3}}
3152 <
\intercol,
0pt>:<
0pt,
\intercol>::
3153 \POS(-
1,-
0.5)*
\xybox{
3154 \POS@i@=
{(
0,
0),(
1,
0),(
1,
1),(
0,
1),(
0,
0)
},
{0*
\xypolyline{--
}}
3155 \POS(
0,
0)
\ar@
[|(
2)
]@
{-
}(
1,
0)
3157 \POS(
0,
1.1)*
{}\POS(
0,-
0.1)*
{}
3169 <
\intercol,
0pt>:<
0pt,
\intercol>::
3170 \POS(-
1,-
0.5)*
\xybox{
3171 \POS@i@=
{(
0,
0),(
1,
0),(
1,
1),(
0,
1),(
0,
0)
},
{0*
\xypolyline{--
}}
3172 \POS(
0,
1)
\ar@
[|(
2)
]@
{-
}(
1,
1)
3174 \POS(
0,
1.1)*
{}\POS(
0,-
0.1)*
{}
3186 <
\intercol,
0pt>:<
0pt,
\intercol>::
3187 \POS(-
1,-
0.5)*
\xybox{
3188 \POS@i@=
{(
0,
0),(
1,
0),(
1,
1),(
0,
1),(
0,
0)
},
{0*
\xypolyline{--
}}
3189 \POS(
1,
1)
\ar@
[|(
2)
](
1,
0)
3190 \POS(
1,
1)
\ar@
[|(
2)
](
0,
1)
3191 \POS(
1,
1)*+!LU
{(
3+n/
3,
5)
}
3192 \POS(
0,
1.1)*
{}\POS(
0,-
0.1)*
{}
3198 -
\frac{31}{36} n
\fractional{\frac{ n
}{3}}
3200 +
\frac{31}{24} \fractional{\frac{ n
}{3}}^
2
3201 -
\frac{217}{24} \fractional{\frac{ n
}{3}}
3206 <
\intercol,
0pt>:<
0pt,
\intercol>::
3207 \POS(-
1,-
0.5)*
\xybox{
3208 \POS@i@=
{(
0,
0),(
1,
0),(
1,
1),(
0,
1),(
0,
0)
},
{0*
\xypolyline{--
}}
3209 \POS(
0,
1)
\ar@
[|(
2)
](
1,
1)
3210 \POS(
0,
1)
\ar@
[|(
2)
](
0,
0)
3211 \POS(
0,
1)*+!LU
{(
2,
5)
}
3212 \POS(
0,
1.1)*
{}\POS(
0,-
0.1)*
{}
3222 <
\intercol,
0pt>:<
0pt,
\intercol>::
3223 \POS(-
1,-
0.5)*
\xybox{
3224 \POS@i@=
{(
0,
0),(
1,
0),(
1,
1),(
0,
1),(
0,
0)
},
{0*
\xypolyline{--
}}
3225 \POS(
0,
0)
\ar@
[|(
2)
](
1,
0)
3226 \POS(
0,
0)
\ar@
[|(
2)
](
0,
1)
3227 \POS(
0,
0)*+!LD
{(
2,
4)
}
3228 \POS(
0,
1.1)*
{}\POS(
0,-
0.1)*
{}
3238 <
\intercol,
0pt>:<
0pt,
\intercol>::
3239 \POS(-
1,-
0.5)*
\xybox{
3240 \POS@i@=
{(
0,
0),(
1,
0),(
1,
1),(
0,
1),(
0,
0)
},
{0*
\xypolyline{--
}}
3241 \POS(
1,
0)
\ar@
[|(
2)
](
1,
1)
3242 \POS(
1,
0)
\ar@
[|(
2)
](
0,
0)
3243 \POS(
1,
0)*+!LD
{(
3+n/
3,
4)
}
3244 \POS(
0,
1.1)*
{}\POS(
0,-
0.1)*
{}
3250 -
\frac{23}{36} n
\fractional{\frac{ n
}{3}}
3252 +
\frac{23}{24} \fractional{\frac{ n
}{3}}^
2
3253 -
\frac{161}{24} \fractional{\frac{ n
}{3}}
3257 \caption{Contributions of the faces of $P(n)$ to the sum of $x_1 x_2$ over
3258 the integer points of $P(n)$
}
3259 \label{t:sum:rectangle
}
3265 \subsection{Conversion to ``standard form''
}
3268 Some algorithms or tools expect a polyhedron to be
3269 specified in ``
\ai{standard form
}'', i.e.,
3274 A
\vec x & =
\vec b \\
3280 Given an arbitrary (parametric) polyhedron
3282 \label{eq:non-standard
}
3285 A
\vec x +
\vec b(
\vec p)
\ge 0
3289 a conversion to standard form requires the introduction
3290 of
\ai{slack variable
}s and a way of dealing with variables
3291 of
\ai{unrestricted sign
}.
3292 In this section we will be satisfied with a reduction
3295 \label{eq:standard:
2}
3298 A
\vec x & =
\vec b \\
3299 D
\vec x &
\ge \vec c
3304 with $D$ a diagonal matrix with positive entries.
3305 That is, we do not necessarily make all variables non-negative,
3306 but we do ensure that they have a lower bound.
3307 If needed, a subsequent reduction can then be performed.
3309 The standard way of dealing with variables of unrestricted
3310 sign is to replace a variable $x$ of unknown sign by the
3311 difference ($x = x' - x''$) of two non-negative variables
3313 However, some algorithms are somewhat sensitive with respect
3314 to the number of variables and so we would prefer to introduce
3315 as few extra variables as possible.
3316 We will therefore apply a
\ai{unimodular transformation
}
3317 on the variables such that all transformed variables are known
3320 The first step is to compute the
\indac{HNF
} of A,
3321 i.e., a matrix $H = A U$, with $U$ unimodular,
3322 in column echelon form such that the
3323 first entry in each column is positive and the other entries
3324 on the corresponding row are non-negative and strictly smaller
3325 than this first entry.
3326 By reordering the rows we may assume that the top square part
3327 of $H$ is lower-triangular.
3328 By a further unimodular transformation, the entries
3329 below the diagonal can be made non-positive and strictly
3330 smaller (in absolute value) than the diagonal entry of the same row.
3332 For each of the new variables, we can take a positive
3333 combination of the corresponding row and the previous rows
3334 to obtain a positive multiple of the corresponding unit vector,
3335 implying that the variable has a lower bound.
3336 A slack variable can then be introduced for each of the
3337 rows in the top square part of $H'$ that is not already
3338 a positive multiple of a unit vector and for each of
3339 the rows below the top square part of $H'$.
3356 This cone is already situated in the first quadrant,
3357 but this may not be obvious from the constraints.
3358 Furthermore, directly adding slack variables would
3359 lead to a total of
4 variables, whereas we can also
3360 represent this cone in standard form with only
3 variables.
3380 Adding a slack variable for the second row of $H'$, we
3381 obtain the equivalent problem
3392 \vec x' &
\ge \vec 0
3408 A similar construction was used by
\shortciteN[Lemma~
3.10]{Eisenbrand2000PhD
}
3409 and
\shortciteN{Hung1990
}.
3411 \subsection{Using TOPCOM to compute Chamber Decompositions
}
3413 In this section, we describe how to use the correspondence
3414 between the
\ai{regular triangulation
}s of a point set
3415 and the chambers of the
\ai{Gale transform
}
3416 of the point set~
\shortcite{Gelfand1994
}
3417 to compute the chamber decomposition of a parametric polytope.
3418 This correspondence was also used by
\shortciteN{Pfeifle2003
}
3419 \shortciteN{Eisenschmidt2007integrally
}.
3421 Let us first assume that the parametric polytope can be written as
3423 \label{eq:TOPCOM:polytope
}
3428 A \,
\vec x &
\le \vec b(
\vec p)
3433 where the right hand side $
\vec b(
\vec p)$ is arbitrary and
3434 may depend on the parameters.
3435 The first step is to add slack variables $
\vec s$ to obtain
3436 the
\ai{vector partition
} problem
3440 A \,
\vec x + I \,
\vec s & =
\vec b(
\vec p)
3442 \vec x,
\vec s &
\ge 0
3447 with $I$ the identity matrix.
3448 Then we compute the (right) kernel $K$ of the matrix
3451 \end{bmatrix
}$, i.e.,
3460 and use
\ai[\tt]{TOPCOM
}'s
\ai[\tt]{points2triangs
} to
3461 compute the
\ai{regular triangulation
}s of the points specified
3463 Each of the resulting triangulations corresponds to a chamber
3464 in the chamber complex of the above vector partition problem.
3465 Each simplex in a triangulation corresponds to a parametric
3466 vertex active on the corresponding chamber and
3467 each point in the simplex (i.e., a row of $K$) corresponds
3468 to a variable ($x_j$ or $s_j$) that is set to zero to obtain
3469 this parametric vertex.
3470 In the original formulation of the problem~
\eqref{eq:TOPCOM:polytope
}
3471 each such variable set to zero reflects the saturation of the
3472 corresponding constraint ($x_j =
0$ for $x_j =
0$ and
3473 $
\sps {\vec a_j
}{\vec x
} = b_j(
\vec p)$ for $s_j =
0$).
3474 A description of the chamber can then be obtained by plugging
3475 in the parametric vertices in the remaining constraints.
3478 Consider the parametric polytope
3481 (i,j)
\mid 0 \le i
\le p
\wedge
3482 0 \le j
\le 2 i + q
\wedge
3483 0 \le k
\le i - p + r
\wedge
3490 The constraints involving the variables are
3551 1 &
0 &
0 &
1 &
0 &
0 \\
3552 -
1 &
0 &
1 &
0 &
1 &
0 \\
3553 -
2 &
1 &
0 &
0 &
0 &
1 \\
3566 Computing the
\ai{regular triangulation
}s of the rows of $K$
3567 using
\ai[\tt]{TOPCOM
}, we obtain
3578 > points2triangs --regular < e2.topcom
3579 T
[1]:=
{{0,
1,
2},
{1,
2,
3},
{0,
1,
4},
{1,
3,
4},
{0,
2,
5},
{2,
3,
5},
{0,
4,
5},
{3,
4,
5}};
3580 T
[2]:=
{{1,
2,
3},
{1,
3,
4},
{2,
3,
5},
{3,
4,
5},
{1,
2,
5},
{1,
4,
5}};
3581 T
[3]:=
{{1,
2,
3},
{1,
3,
4},
{2,
3,
5},
{3,
4,
5},
{1,
2,
4},
{2,
4,
5}};
3584 We see that we have three chambers in the decomposition,
3585 one with
8 vertices and two with
6 vertices.
3586 Take the second vertex (``
\verb+
{1,
2,
3}+'') of the first chamber.
3587 This vertex corresponds
3588 to the saturation of the constraints $j
\ge 0$, $k
\ge 0$
3589 and $i
\le p$, i.e., $(i,j,k) = (p,
0,
0)$. Plugging in this
3590 vertex in the remaining constraints, we see that it is only valid
3591 in case $p
\ge 0$, $r
\ge 0$ and $
2p + q
\ge 0$.
3592 For the remaining vertices of the first chamber, we similarly find
3594 \begin{tabular
}{ccc
}
3596 \verb+
{0,
1,
2}+ & $(
0,
0,
0)$ & $p
\ge 0$, $-q + r
\ge 0$ and $q
\ge 0$
3599 \verb+
{1,
2,
3}+ & $(p,
0,
0)$ & $p
\ge 0$, $r
\ge 0$ and $
2p + q
\ge 0$
3602 \verb+
{0,
1,
4}+ & $(
0,
0,-p+r)$ & $-q + r
\ge 0$, $p
\ge 0$ and $q
\ge 0$
3605 \verb+
{1,
3,
4}+ & $(p,
0,r)$ & $p
\ge 0$, $r
\ge 0$ and $
2p + q
\ge 0$
3608 \verb+
{0,
2,
5}+ & $(
0,q,
0)$ & $q
\ge 0$, $p
\ge 0$ and $-q + r
\ge 0$
3611 \verb+
{2,
3,
5}+ & $(p,
2p+q,
0)$ & $p
\ge 0$, $
2p + q
\ge 0$ and $r
\ge 0$
3614 \verb+
{0,
4,
5}+ & $(
0, q, -p+r)$ & $q
\ge 0$, $-q + r
\ge 0$ and $p
\ge 0$
3617 \verb+
{3,
4,
5}+ & $(p,
2p+q, r)$ & $p
\ge 0$, $
2p + q
\ge 0$ and $r
\ge 0$
3620 Combining these constraints with the initial constraints of the problem
3622 $p
\ge 0$, $q
\ge 0$ and $r
\ge 0$, we find the chamber
3625 (p,q,r)
\mid p
\ge 0 \wedge -p + r
\ge 0 \wedge q
\ge 0
3628 For the second chamber, we have
3630 \begin{tabular
}{ccc
}
3632 \verb+
{1,
2,
3}+ & $(p,
0,
0)$ & $p
\ge 0$, $r
\ge 0$ and $
2p + q
\ge 0$
3635 \verb+
{1,
3,
4}+ & $(p,
0,r)$ & $p
\ge 0$, $r
\ge 0$ and $
2p + q
\ge 0$
3638 \verb+
{2,
3,
5}+ & $(p,
2p+q,
0)$ & $p
\ge 0$, $
2p + q
\ge 0$ and $r
\ge 0$
3641 \verb+
{3,
4,
5}+ & $(p,
2p+q, r)$ & $p
\ge 0$, $
2p + q
\ge 0$ and $r
\ge 0$
3644 \verb+
{1,
2,
5}+ & $(-
\frac q
2,
0,
0)$ &
3645 $-q
\ge 0$, $
2p + q
\ge 0$ and $-
2p -q+
2r
\ge 0$
3648 \verb+
{1,
4,
5}+ & $(-
\frac q
2,
0,-p-
\frac q
2+r)$ &
3649 $-q
\ge 0$, $-
2p -q+
2r
\ge 0$ and $
2p + q
\ge 0$
3652 The chamber is therefore
3655 (p,q,r)
\mid q =
0 \wedge p
\ge 0 \wedge -p +r
\ge 0
3658 Note that by intersecting with the initial constraints this chamber
3659 is no longer full-dimensional and can therefore be discarded.
3660 Finally, for the third chamber, we have
3662 \begin{tabular
}{ccc
}
3664 \verb+
{1,
2,
3}+ & $(p,
0,
0)$ & $p
\ge 0$, $r
\ge 0$ and $
2p + q
\ge 0$
3667 \verb+
{1,
3,
4}+ & $(p,
0,r)$ & $p
\ge 0$, $r
\ge 0$ and $
2p + q
\ge 0$
3670 \verb+
{2,
3,
5}+ & $(p,
2p+q,
0)$ & $p
\ge 0$, $
2p + q
\ge 0$ and $r
\ge 0$
3673 \verb+
{3,
4,
5}+ & $(p,
2p+q, r)$ & $p
\ge 0$, $
2p + q
\ge 0$ and $r
\ge 0$
3676 \verb+
{1,
2,
4}+ & $(p-r,
0,
0)$ &
3677 $p -r
\ge 0$, $r
\ge 0$ and $
2p +q -
2r
\ge 0$
3680 \verb+
{2,
4,
5}+ & $(p-r,
2p+q-
2r,
0)$ &
3681 $p -r
\ge 0$, $
2p +q -
2r
\ge 0$ and $r
\ge 0$
3684 The chamber is therefore
3687 (p,q,r)
\mid p - r
\ge 0 \wedge q
\ge 0 \wedge r
\ge 0
3692 Now let us consider general parametric polytopes.
3693 First note that we can follow the same procedure as above
3694 if we replace $
\vec x$ by $
\vec x' -
\vec c(
\vec p)$
3695 in
\eqref{eq:TOPCOM:polytope
}, i.e.,
3696 if our problem has the form
3698 \label{eq:TOPCOM:polytope:
2}
3701 \vec x' &
\ge \vec c(
\vec p)
3703 A \,
\vec x' &
\le \vec b(
\vec p) + A
\vec c(
\vec p)
3708 as saturating a constraint $x_i =
0$ is equivalent
3709 to saturating the constraint $x_i' = c_i(
\vec p)$
3710 and, similarly, $
\sps {\vec a_j
}{\vec x
} = b_j(
\vec p)$
3712 $
\sps {\vec a_j
}{\vec x'
} = b_j(
\vec p) +
\sps {\vec a_j
}{\vec c(
\vec p)
}$.
3714 In the general case, the problem has the form
3716 A
\vec x
\ge \vec b(
\vec p)
3718 and then we apply the technique of
\autoref{s:standard
}.
3719 Let $A'$ be a non-singular square submatrix of $A$ with the same number
3720 of columns and compute the (left)
\indac{HNF
} $H = A' U$ with $U$ unimodular
3721 and $H$ lower-triangular with non-positive elements below the diagonal.
3722 Replacing $
\vec x$ by $U
\vec x'$, we obtain
3726 H
\vec x' &
\ge \vec b'(
\vec p)
3728 -A''U \,
\vec x' &
\le -
\vec b''(
\vec p)
3733 with $A''$ the remaining rows of $A$ and $
\vec b(
\vec p)$ split
3735 If $H$ happens to be the identity matrix, then our problem is
3736 of the form
\eqref{eq:TOPCOM:polytope:
2} and we already know how
3737 to solve this problem.
3738 Note that, again, saturating any of the transformed constraints
3739 in $
\vec x'$ is equivalent to saturating the corresponding constraint
3740 in $
\vec x$. We therefore only need to compute $-A'' U$ for the
3741 computation of the kernel $K$. To construct the parametric vertices
3742 in the original coordinate system, we can simply use the original
3744 The same reasoning holds if $H$ is any diagonal matrix, since
3745 we can virtually replace $H
\vec x$ by $
\vec x'$ without affecting
3746 the non-negativity of the variables.
3748 If $H$ is not diagonal, then we can introduce new constraints
3749 $x'_j
\ge d(
\vec p)$, where $d(
\vec p)$ is some symbolic constant.
3750 These constraints do not remove any solutions
3751 since each row in $H$ expresses that the corresponding variable is
3752 greater than or equal to a non-negative combination of the
3753 previous variables plus some constant.
3754 We can then proceed as before. However, to reduce unnecessary computations
3755 we may remove from $K$ the rows that correspond to these new rows.
3756 Any solution saturating the new constraint, would also saturate
3757 the corresponding constraint $
\vec h_j^
\T$ and all
3758 the constraints corresponding to the non-zero
3759 entries in $
\vec h_j^
\T$.
3760 If a chamber contains a vertex obtained by saturating such a new
3761 constraint, it would appear multiple times in the same chamber,
3762 each time combined with different constraints from the above set.
3763 Furthermore, there would also be another (as it turns out, identical)
3764 chamber where the vertex is only defined by the other constraints.
3767 Consider the parametric polytope
3771 1 \le i
\wedge 2 i
\le 3 j
\wedge j
\le n
3793 The top $
2 \times 2$ submatrix is already in
\indac{HNF
}.
3794 We have $
3 j
\ge 2i
\ge 2$, so we can add a constraint
3795 of the form $j
\ge c(n)$ and obtain
3808 while $K$ with $
\begin{bmatrix
}A & I
\end{bmatrix
} K =
0$ is given
3824 The second row of $K$ corresponds to the second variable,
3825 which in turn corresponds to the newly added constraint.
3826 Passing all rows of $K$ to
\ai[\tt]{TOPCOM
} we would get
3828 > points2triangs --regular <<EOF
3829 >
[[1 0],
[0,
1],
[0,-
1],
[-
2,
3]]
3831 T
[1]:=
{{0,
1},
{0,
2},
{1,
3},
{2,
3}};
3832 T
[2]:=
{{0,
2},
{2,
3},
{0,
3}};
3835 The first vertex in the first chamber saturates the second row
3836 (row
1) and therefore saturates both the first (
0) and fourth (
3)
3837 and it appears a second time as
\verb+
{1,
3}+. Combining
3838 these ``two'' vertices into one as
\verb+
{0,
3}+ results in the
3839 second (identical) chamber.
3840 Removing the row corresponding to the new constraint from $K$
3841 we remove the duplicates
3843 > points2triangs --regular <<EOF
3844 >
[[1 0],
[0,-
1],
[-
2,
3]]
3846 T
[1]:=
{{0,
1},
{1,
2},
{0,
2}};
3849 Note that in this example, we also could have interchanged
3850 the second and the third constraint and then have replaced $j$ by $-j'$.
3853 In practice, this method of computing a
\ai{chamber decomposition
}
3854 does not seem to perform very well, mostly because
3855 \ai[\tt]{TOPCOM
} can not exploit all available information
3856 about the parametric polytopes and will therefore compute
3857 many redundant triangulations/chambers.
3858 In particular, any chamber that does not intersect with
3859 the parameter domain of the parametric polytope, or only
3860 intersects in a face of this parameter domain, is completely redundant.
3861 Furthermore, if the parametric polytope is not simple, then many
3862 different combinations of the constraints will lead to the same parametric
3863 vertex. Many triangulations will therefore correspond to one and the
3864 same chamber in the chamber complex of the parametric polytope.
3865 For example, for a dilated octahedron,
\ai[\tt]{TOPCOM
} will
3866 compute
150 triangulations/chambers,
104 of which are empty,
3867 while the remaining
46 refer to the same single chamber.
3870 \subsection{Computing the Hilbert basis of a cone
}
3873 To compute the
\ai{Hilbert basis
} of a cone, we use
3874 the
\ai[\tt]{zsolve
} library from
\ai[\tt]{4ti2
} \shortcite{4ti2
},
3875 which implements the technique of
\shortciteN{Hemmecke2002Hilbert
}.
3876 We first remove all equalities from the cone through unimodular
3877 transformations and then apply the technique of
\autoref{s:standard
}
3878 to put the cone in ``standard form''. Note that for a (non-parametric)
3879 cone the constant term $
\vec b$ in
\eqref{eq:non-standard
} is $
\vec 0$.
3880 The constraints $D
\vec x
\ge \vec c =
\vec 0$ of
\eqref{eq:standard:
2}
3881 are therefore equivalent to $
\vec x
\ge \vec 0$.
3884 \subsection{Integer Feasibility
}
3885 \label{s:feasibility
}
3887 For testing whether a polytope $P
\subset \QQ^d$ contains any integer points,
3888 we use the technique of~
\shortciteN{Cook1993implementation
},
3889 based on
\ai{generalized basis reduction
}.
3891 The technique basically looks for a ``short vector'' $
\vec c$ in the
3892 lattice $
\ZZ^d$, where shortness is measured in terms of
3893 the
\ai{width
} of the polytope $P$ along that direction,
3897 \max \
{\,
\sp c x
\mid \vec x
\in P \,\
}
3899 \min \
{\,
\sp c x
\mid \vec x
\in P \,\
}
3902 \max \
{\,
\sps {\vec c
} {\vec x -
\vec y
} \mid \vec x,
\vec y
\in P \,\
}
3905 The
\defindex{lattice width
} is the minimum width over all
3906 non-zero integer directions:
3909 \min_{\vec c
\in \ZZ^d
\setminus \
{ \vec 0 \
} } \width_{\vec c
} P
3912 If the dimension $d$ is fixed then
3913 the lattice width of any polytope $P
\subset \QQ^d$
3914 containing no integer points is bounded by a constant
%
3915 ~
\shortcite{Lagarias90,Barvinok02,Banaszczyk1999flatness
}.
3916 If we slice the polytope using hyperplanes orthogonal
3917 to a short direction, i.e., a direction where the width
3918 is small, we will therefore only need to inspect
3919 ``few'' of them before either finding one with an integer point,
3920 or running out of hyperplanes, meaning that the
3921 polytope did not contain any integer points.
3922 Each slice is checked for integer points by applying
3923 the above method recursively.
3925 A nice feature of this technique is that it will
3926 not only tell you if there is any integer point
3927 in the given polytope, but it will actually compute
3928 one if there is any.
3930 The short vector is obtained as the first vector
3931 of a ``reduced basis'' of the lattice $
\ZZ^d$ with respect
3933 In particular, the first vector $
\vec b_1$ of this reduced basis
3939 {\left(
\frac 1 2 -
\varepsilon\right)^
{d-
1}}
3942 with $
0 <
\varepsilon <
1/
2$ a fixed constant.
3943 That is, the width in direction $
\vec b_1$ is no more than a constant
3944 factor bigger than the lattice width.
3945 See~
\shortcite{Cook1993implementation
} for details.
3946 In our implementation we use $
\varepsilon =
1/
4$.
3947 When used in the above integer feasibility testing algorithm,
3948 we will also terminate the reduced basis computation
3949 as soon as the width along the first basis vector is smaller than
2.
3950 This means that there will be at most
2 slices orthogonal to the chosen
3953 The computation of the above reduced basis requires the solution
3954 of many linear programs, for which we use any of the following
3957 \item \ai[\tt]{GLPK
}~
\shortcite{GLPK
}
3959 This solver is based on double precision floating point arithmetic and
3960 may therefore not be suitable if the coefficients of the constraints
3961 describing the polytope are large.
3963 \item \ai[\tt]{cdd
}~
\shortcite{cdd
}
3965 This solver is based on exact integer arithmetic.
3966 Note that you need version
\verb+cddlib
0.94e+ or newer.
3967 Earlier versions have
3968 a bug that may sometimes result in a polytope being
3969 reported as (rationally) empty even though it is not.
3971 \item \piplib/~
\shortcite{Feautrier:PIP
}
3973 This solver is also based on exact integer arithmetic
3974 and uses the
\ai{dual simplex
} method to solve a linear program.
3975 Two versions are available,
\ai[\tt]{pip
} will present the
3976 original program to
\piplib/, while
\ai[\tt]{pip-dual
} will present
3977 the dual program to
\piplib/, effectively having it apply the primal
3978 simplex method to the original problem.
3979 The latter may seem more appropriate since the computation
3980 of the reduced basis only requires the dual solution of
3981 any linear program. However, in practice, it appears
3982 that
\ai[\tt]{pip
} is often faster than
\ai[\tt]{pip-dual
}.
3984 The LP solver to use can be selected with the
\ai[\tt]{--gbr
} option.
3987 \subsection{Computing the integer hull of a polyhedron
}
3988 \label{s:integer:hull
}
3990 For computing the
\ai{integer hull
} of a polyhedron,
3991 we first describe how to compute the convex hull of a set
3992 given as an oracle for optimizing a linear objective
3993 function over the set and then
3994 we explain how to optimize a linear objective function over
3995 the integer points of a polyhedron.
3996 Applying the first with the second as
\ai{optimization oracle
}
3997 yields a method for computing the requested integer hull.
3999 \subsubsection{Computing the convex hull based on an optimization oracle
}
4001 The algorithm described below is presented by
4002 \shortciteN[Remark~
2.5]{Cook1992
} as an extension of the
4003 algorithm by
\shortciteN[Section~
3]{Edmonds82
} for computing
4004 the
{\em dimension
} of a polytope for which only an optimization oracle
4005 is available. The algorithm is described in a bit more detail
4006 by
\shortciteN{Eisenbrand2000PhD
} and reportedly stems from
4007 \shortciteN{Hartmann1989PhD
}.
4008 Essentially the same algorithm has also been implemented
4009 by
\shortciteN{Huggins06
}, citing
4010 \ai{beneath/beyond
}~
\shortcite{Preparata1985
} as his inspiration.
4012 The algorithm start out from an initial set of points from
4013 the set $S$. After computing the convex hull of this set
4014 of points, we take one of its bounding constraints and use
4015 the optimization oracle
4016 to compute an optimal point in $S$ (but on the other side
4017 of the bounding hyperplane) along the
4018 outer normal of this bounding constraint.
4019 If a new point is found, it is added to the set of points
4020 and a new convex hull is computed, or the old one is adapted
4021 in a beneath/beyond fashion. Otherwise, the chosen bounding constraint
4022 is also a bounding constraint of $S$ and need not be considered anymore.
4023 The process continues until all bounding constraints in the
4024 description of the current convex hull have been considered.
4026 In principle, the initial set of points in the above algorithm
4027 may be empty, with a ``convex hull'' described by a set of
4028 conflicting constraints and each equality in the description of any
4029 intermediate lower-dimensional convex hull being considered
4030 as a pair of bounding constraints with opposite outer normals.
4031 However, in our implementation, we have chosen to first compute
4032 a maximal set of affinely independent points by first taking any
4033 point from $S$ and then adding points from $S$ not on one of
4034 the equalities satisfied by all points found so far.
4035 This allows us to not have to worry about equalities in the
4037 In the case of the computation of the integer hull, finding
4038 these affinely independent points can be accomplished using the technique of
4039 \autoref{s:feasibility
}.
4044 <
\intercol,
0pt>:<
0pt,
\intercol>::
4046 \def\latticebody{\POS="c"+(
0,
0.5)
\ar@
{--
}"c"+(
0,
6.5)
}%
4047 \POS0,
{\xylattice{1}{6}00}%
4048 \def\latticebody{\POS="c"+(
0.5,
0)
\ar@
{--
}"c"+(
6.5,
0)
}%
4049 \POS0,
{\xylattice00{1}6}%
4050 \POS@i@=
{(
1.5,
2.75),(
5.75,
2.25),(
5.5,
5.25),(
2.75,
4.75),(
1.5,
2.75)
},
4052 \POS@i@=
{(
2,
3),(
3,
3),(
3,
4),(
2,
3)
},
{0*
[|(
3)
]\xypolyline{}}
4056 \POS(
3,
3.5)
\ar(
3.5,
3.5)
4062 \def\latticebody{\POS="c"+(
0,
0.5)
\ar@
{--
}"c"+(
0,
6.5)
}%
4063 \POS0,
{\xylattice{1}{6}00}%
4064 \def\latticebody{\POS="c"+(
0.5,
0)
\ar@
{--
}"c"+(
6.5,
0)
}%
4065 \POS0,
{\xylattice00{1}6}%
4066 \POS@i@=
{(
1.5,
2.75),(
5.75,
2.25),(
5.5,
5.25),(
2.75,
4.75),(
1.5,
2.75)
},
4068 \POS@i@=
{(
2,
3),(
5,
3),(
3,
4),(
2,
3)
},
{0*
[|(
3)
]\xypolyline{}}
4072 \POS(
4,
3.5)
\ar(
4.25,
4)
4076 \def\latticebody{\POS="c"+(
0,
0.5)
\ar@
{--
}"c"+(
0,
6.5)
}%
4077 \POS0,
{\xylattice{1}{6}00}%
4078 \def\latticebody{\POS="c"+(
0.5,
0)
\ar@
{--
}"c"+(
6.5,
0)
}%
4079 \POS0,
{\xylattice00{1}6}%
4080 \POS@i@=
{(
1.5,
2.75),(
5.75,
2.25),(
5.5,
5.25),(
2.75,
4.75),(
1.5,
2.75)
},
4082 \POS@i@=
{(
2,
3),(
5,
3),(
5,
5),(
3,
4),(
2,
3)
},
{0*
[|(
3)
]\xypolyline{}}
4089 \caption{The integer hull of a polytope
}
4090 \label{f:integer:hull
}
4094 Assume we want to compute the integer hull of the polytope in the left part
4095 of
\autoref{f:integer:hull
}.
4096 We first compute a set of three affinely independent points,
4097 shown in the same part of the figure.
4098 Of the three facets of the corresponding convex hull,
4099 optimization along the outer normal (depicted by an arrow in the figure)
4100 of only one facet will yield any additional points. The other two
4101 are therefore facets of the integer hull.
4102 Optimization along the above outer normal may yield any of the
4103 points marked by a $
\circ$.
4104 Assuming it is the bottom one, we end up with the updated
4105 convex hull in the middle of the figure. This convex hull
4106 has only one new facet. Adding the point found by optimizing
4107 over this facet's outer normal, we obtain the convex hull
4108 on the right of the figure.
4109 There are two new facets, but neither of them yields any
4110 further points. We have therefore found the integer hull
4114 \subsubsection{Optimization over the integer points of a polyhedron
}
4115 \label{s:optimization
}
4117 We assume that we want to find the
{\em minimum
} of
4118 some linear objective function. When used in the computation
4119 of the integer hull of some polytope, the objective function
4120 will therefore correspond to the inner normal of some facet.
4122 During our search for an optimal integer point with respect
4123 to some objective function, we will keep track of the best
4124 point so far as well as a lower bound $l$
4125 and an upper bound $u$ such that the value at the optimal point
4126 (if it is better than the current best) lies between those
4128 Initially, there is no best point yet and values for $l$ and $u$
4129 may be obtained from optimization over the linear relaxation.
4130 When used in the computation of the integer hull of some polytope,
4131 the upper bound $u$ is one less than the value attained on
4132 the given facet of the current approximation.
4134 As long as $l
\le u$, we perform the following steps
4136 \item use the integer feasibility technique of
\autoref{s:feasibility
}
4137 to test whether there is any integer point with value in
4138 $
[l,u'
]$, where $u'$ is
4140 \item $u$ if the previous test for an integer point did not produce a point
4141 \item $l+
\floor{\frac{u-l-
1}2}$
4142 if the previous test for an integer point
{\em did\/
} produce a point
4144 \item if a point is found, then remember it as the current best
4145 and replace $u$ by the value at this point minus one,
4146 \item otherwise, replace $l$ by $u'+
1$.
4148 When used in the computation of the integer hull of some polytope,
4149 it is useful to not only keep track of the best point so far,
4150 but of all points found.
4151 These points will all lie outside of the current approximation
4152 of the integer hull and adding them all instead of just one,
4153 will typically get us to the complete integer hull quicker.
4158 <
\intercol,
0pt>:<
0pt,
\intercol>::
4159 \POS(
0.5,
0)
\ar@
{-
}(
16.5,
0)
4160 \def\latticebody{\POS="c"+(
0,-
0.2)
\ar@
{--
}"c"+(
0,
0.2)
\POS"c"*++!D
{\the\latticeA}}%
4161 \POS0,
{\xylattice{1}{16}00}%
4162 \POS(
6,
0)*!C
{\bullet}
4165 \POS(
12,
0)*
{\bullet}
4166 \POS(
13,
0)*
{\bullet}
4167 \POS(
14,
0)*
{\bullet}
4168 \POS(
15,
0)*
{\bullet}
4169 \POS(
16,
0)*
{\bullet}
4170 \POS(
1,-
1)
\ar@
{-
}(
16,-
1)
4171 \POS(
8,-
1)*
{\bullet}
4172 \POS(
1,-
2)
\ar@
{-
}(
4,-
2)
4173 \POS(
5,-
3)
\ar@
{-
}(
7,-
3)
4174 \POS(
6,-
3)*
{\bullet}
4175 \POS(
4.9,-
4)
\ar@
{-
}(
5.1,-
4)
4177 \caption{The integer points of a polytope projected on an objective function
}
4178 \label{f:hull:projected
}
4182 \label{ex:hull:projected
}
4183 Assume that the values of some objective function attained
4184 by the integer points of some polytope are as shown in
4185 \autoref{f:hull:projected
} and assume we know that the optimal
4186 value lies between
1 and
16.
4187 In the first step we would look for a point attaining a value
4188 in the interval $
[1,
16]$. Suppose this yields a point attaining
4189 the value $
8$ (second line of the figure). We record this point
4190 as the current best and update the search interval to $
[1,
7]$.
4191 In the second step, we look for a point attaining a value
4192 in the interval $
[1,
4]$, but find nothing and set the search interval
4194 In the third step, we consider the interval $
[5,
7]$ and find
4195 a point attaining the value
6. We update the current best value
4196 and set the search interval to $
[5,
5]$.
4197 In the fourth step, we consider the interval $
[5,
5]$, find no
4198 points and update the interval to ``$
[6,
5]$''.
4199 Since the lower bound is now larger than the upper bound, the
4200 algorithm terminates, returning the best or all point(s) found.
4204 \subsection{Computing the integer hull of a truncated cone
}
4207 In
\autoref{s:width
} we will need to compute the
\ai{integer hull
}
4208 of a cone with the origin removed ($C
\setminus \
{ \vec 0 \
}$).
4210 \subsubsection{Using the Hilbert basis of the cone
}
4212 As proposed by
\shortciteN{Koeppe2007personal
},
4213 one way of computing this integer hull is to first compute
4214 the
\ai{Hilbert basis
} of $C$ (see
\autoref{s:hilbert
})
4215 and to then remove from that Hilbert basis the points that
4216 are not vertices of the integer hull of $C
\setminus \
{ \vec 0 \
}$.
4217 The Hilbert basis of $C$ is the minimal set of points
4218 $
\vec b_i
\in C
\cap \ZZ^d$ such that every integer point
4219 $
\vec x
\in C
\cap \ZZ^d$ can be written as a non-negative
4220 {\em integer
} combination of the $
\vec b_i$.
4221 The vertices $
\vec v_j$ of the integer hull of $C
\setminus \
{ \vec 0 \
}$
4222 are such that every integer point
4223 $
\vec x
\in (C
\cap \ZZ^d)
\setminus \
{ \vec 0 \
}$ can
4224 be written as s non-negative
{\em rational
} combination of $
\vec v_j$.
4225 Clearly, any $
\vec v_j$ is also a $
\vec b_i$ since $
\vec v_j$ can
4226 not be written as the sum of a (rational) convex combination of
4227 other integer points in $(C
\cap \ZZ^d)
\setminus \
{ \vec 0 \
}$
4228 and a non-negative combination of the extremal rays $
\vec r_k$ of $C$.
4229 A fortiori, it can therefore not be written as an integer combination
4230 of other integer points in $C$.
4231 To obtain the $
\vec v_j$ from the $
\vec b_i$ we therefore simply
4232 need to remove first $(
0,
0)$ and then those $
\vec b_i$ that are
4233 not an extremal ray and that
{\em can
} be written as a combination
4235 \vec b_i =
\sum_{j
\ne i
} \vec \alpha_j \vec b_j +
\sum_k \beta_k \vec r_k
4236 \qquad\text{with $
\alpha_j,
\beta_k \ge 0$ and $
\sum_{j
\ne i
} \alpha_j =
1$
}
4239 Since the $
\vec r_k$ are also among the $
\vec b_j$, this can
4240 be simplified to checking whether there exists a rational
4241 solution for $
\vec \alpha_j$ to
4243 \vec b_i =
\sum_{j
\ne i
} \vec \alpha_j \vec b_j
4244 \qquad\text{with $
\alpha_j \ge 0$ and $
\sum_{j
\ne i
} \alpha_j \ge 1$
}
4251 <
\intercol,
0pt>:<
0pt,
\intercol>::
4252 \POS@i@=
{(
3,-
4.5),(
2,-
3),(
1,-
1),(
1,
1),(
3,
4),(
4.125,
5.5),(
5.5,
5.5),(
5.5,-
4.5)
},
{0*
[grey
]\xypolyline{*
}}
4253 \def\latticebody{\POS="c"+(
0,-
4.5)
\ar@
{--
}"c"+(
0,
5.5)
}%
4254 \POS0,
{\xylattice{-
0}{5}00}%
4255 \def\latticebody{\POS="c"+(-
0.5,
0)
\ar@
{--
}"c"+(
5.5,
0)
}%
4256 \POS0,
{\xylattice00{-
4}5}%
4259 \POS(
2,-
3)*
{\bullet}
4262 \POS(
1,-
1)*
{\bullet}
4269 \caption{The Hilbert basis and the integer hull of a truncated cone
}
4270 \label{f:hilbert:hull
}
4273 \begin{example
} \label{ex:hilbert:hull
}
4276 C =
\poshull \,\
{(
2,-
3), (
3,
4)\
}
4279 shown in Figure~
\ref{f:hilbert:hull
}.
4280 The Hilbert basis of this cone is
4281 $$\
{(
0,
0),(
2,-
3),(
3,
4),(
1,
1),(
1,-
1),(
1,
0)\
}.$$
4282 We have $(
1,
0) =
\frac 1 2 (
1,
1) +
\frac 1 2 (
1,-
1)$,
4283 while $(
1,
1)$ and $(
1,-
1)$ can not be written as
4284 overconvex combinations of the other $
\vec b_i
\ne \vec 0$.
4285 The vertices of the integer hull of $C
\setminus \
{ \vec 0 \
}$
4287 $$\
{(
2,-
3),(
3,
4),(
1,
1),(
1,-
1)\
}.$$
4290 \subsubsection{Using generalized basis reduction
}
4291 \label{s:hull:cone:gbr
}
4293 Another way of computing the integer hull of a truncated cone is to apply
4294 the method of
\autoref{s:integer:hull
}.
4295 In this case, the initial set of points will consist
4296 of (the smallest integer representatives of) the extremal rays
4297 of the cone, together with the extremal rays themselves.
4298 That is, if $C =
\poshull \, \
{ \vec r_j \
}$ with
4299 $
\vec r_j
\in \ZZ^d$, then our initial approximation of the
4300 integer hull of $C
\setminus \
{ \vec 0 \
}$ is
4302 \convhull \, \
{ \vec r_j \
} +
\poshull \, \
{ \vec r_j \
}
4305 Furthermore, we need never consider any
4306 of the bounding constraints that are also bounding constraints
4307 of the original cone.
4308 When optimizing along the normal of any of the other facets, we can
4309 take the lower bound to be $
1$. This will ensure that
4310 the origin is excluded, without excluding any other integer points.
4315 <
\intercol,
0pt>:<
0pt,
\intercol>::
4317 \POS@i@=
{(
3,-
4.5),(
2,-
3),(
3,
4),(
4.125,
5.5),(
5.5,
5.5),(
5.5,-
4.5)
},
{0*
[grey
]\xypolyline{*
}}
4318 \def\latticebody{\POS="c"+(
0,-
4.5)
\ar@
{--
}"c"+(
0,
5.5)
}%
4319 \POS0,
{\xylattice{-
0}{5}00}%
4320 \def\latticebody{\POS="c"+(-
0.5,
0)
\ar@
{--
}"c"+(
5.5,
0)
}%
4321 \POS0,
{\xylattice00{-
4}5}%
4324 \POS(
2,-
3)*
{\bullet}
4329 \POS@i@=
{(
3,-
4.5),(
2,-
3),(
1,
1),(
3,
4),(
4.125,
5.5),(
5.5,
5.5),(
5.5,-
4.5)
},
{0*
[grey
]\xypolyline{*
}}
4330 \def\latticebody{\POS="c"+(
0,-
4.5)
\ar@
{--
}"c"+(
0,
5.5)
}%
4331 \POS0,
{\xylattice{-
0}{5}00}%
4332 \def\latticebody{\POS="c"+(-
0.5,
0)
\ar@
{--
}"c"+(
5.5,
0)
}%
4333 \POS0,
{\xylattice00{-
4}5}%
4336 \POS(
2,-
3)*
{\bullet}
4342 \POS@i@=
{(
3,-
4.5),(
2,-
3),(
1,-
1),(
1,
1),(
3,
4),(
4.125,
5.5),(
5.5,
5.5),(
5.5,-
4.5)
},
{0*
[grey
]\xypolyline{*
}}
4343 \def\latticebody{\POS="c"+(
0,-
4.5)
\ar@
{--
}"c"+(
0,
5.5)
}%
4344 \POS0,
{\xylattice{-
0}{5}00}%
4345 \def\latticebody{\POS="c"+(-
0.5,
0)
\ar@
{--
}"c"+(
5.5,
0)
}%
4346 \POS0,
{\xylattice00{-
4}5}%
4349 \POS(
2,-
3)*
{\bullet}
4352 \POS(
1,-
1)*
{\bullet}
4355 \caption{The integer hull of a truncated cone
}
4356 \label{f:cone:integer:hull
}
4360 Consider once more the cone
4362 C =
\poshull \,\
{(
2,-
3), (
3,
4)\
}
4364 from Example~
\ref{ex:hilbert:hull
}.
4365 The initial approximation is
4367 C =
\convhull \,\
{(
2,-
3), (
3,
4)\
} +
\poshull \,\
{(
2,-
3), (
3,
4)\
}
4370 which is shown on the left of
\autoref{f:cone:integer:hull
}.
4371 The only bounding constraint that does not correspond to a
4372 bounding constraint of $C$ is $
7 x - y
\ge 17$.
4373 In the first step, we will therefore look for a point
4374 minimizing $
7 x - y$ with values in the interval $
[1,
16]$.
4375 All values of this objective function in the given interval
4376 attained by points in $C$ are shown in
\autoref{f:hull:projected
}.
4377 From Example~
\ref{ex:hull:projected
}, we know that the optimal
4378 value is $
6$ and this corresponds to the point $(
1,
1)$.
4379 Adding this point to our hull, we obtain the approximation
4380 in the middle of
\autoref{f:cone:integer:hull
}.
4381 This approximation has two new facets.
4382 The bounding constraint $
3x -
2 y
\ge 1$ will not produce
4383 any new points since we would be looking for one in the
4384 interval ``$
[1,
0]$''.
4385 The other new bounding constraint is $
4x + y
\ge 5$.
4386 Minimizing $
4 x+ y$ with values in the interval $
[1,
4]$,
4387 we find the minimal value $
3$ corresponding to the point $(
1,-
1)$.
4388 Adding this point, we obtain the complete integer hull
4389 shown on the right of
\autoref{f:cone:integer:hull
}.
4390 Note that if in the first step we would have added not only
4391 the point corresponding to the optimal value, but instead
4392 all points found in Example~
\ref{ex:hull:projected
},
4393 then we would have obtained the complete integer hull directly.
4397 \subsection{Computing the lattice width of a parametric polytope
}
4400 To compute the
\ai{lattice width
} of a
\ai{parametric polytope
},
4401 we essentially use the technique of
\shortciteN{Eisenbrand2007parameterised
},
4402 which improves upon the technique of
\shortciteN{Kannan1992
}.
4403 Given a parametric polytope
4405 P(
\vec p) = \
{\,
\vec x
\mid A
\vec x +
\vec b(
\vec p)
\ge \vec 0 \,\
}
4408 the width along a direction $
\vec c$ is defined in the same
4409 way as for non-parametric polytopes (see
\autoref{s:feasibility
}),
4412 \width_{\vec c
} P(
\vec p)
4414 \max \
{\,
\sp c x
\mid \vec x
\in P(
\vec p) \,\
}
4416 \min \
{\,
\sp c x
\mid \vec x
\in P(
\vec p) \,\
}
4419 The
\defindex{lattice width
} is the minimum width over all
4420 non-zero integer directions:
4423 \min_{\vec c
\in \ZZ^d
\setminus \
{ \vec 0 \
} } \width_{\vec c
} P(
\vec p)
4426 We assume that the parameter domain $Q$ of $P(
\vec p)$, i.e., the
4427 set of parameter values for which $P(
\vec p)
\ne \emptyset$,
4428 is full-dimensional and that for each $
\vec p$ from the interior
4429 of $Q$, $P(
\vec p)$ is also full-dimensional.
4431 Clearly, for any given direction $
\vec c$, the minimum and
4432 maximum in
\eqref{eq:width
} are attained at (different)
4433 vertices of $P(
\vec p)$.
4434 The idea of the algorithm is then to consider all pairs
4435 of parametric vertices of $P(
\vec p)$, to compute all candidate
4436 integer directions for a given pair of vertices and then to
4437 compute the minimum width over all candidate integer directions
4440 For any given parametric vertex $
\vec v(
\vec p)$, the (rational)
4441 directions for which this vertex is minimal can be found as follows.
4442 Let $
\vec v(
\vec p) + C$ be the
\ai{vertex cone
} of $
\vec v(
\vec p)$.
4443 If $
\vec v(
\vec p)$ is minimal for $
\vec c$, then all other points
4444 in the vertex cone must yield a bigger or equal value, i.e.,
4445 $
\sp y c
\ge 0$ for all $
\vec y
\in C$.
4446 The set of directions is therefore the
\ai{polar cone
} $C^*$ of $C$.
4447 Note that, in principle, we should only do this for pairs
4448 of vertices that have a common activity domain, where the
4449 activity domains have been partially opened using the
4450 technique of
\autoref{p:inclusion-exclusion
} to avoid
4451 multiple vertices that coincide on a lower-dimensional
4452 chamber to all be considered on this intersection.
4453 However, this optimization has currently not been implemented.
4455 Given a pair of vertices $
\vec v_1(
\vec p)$ and $
\vec v_2(
\vec p)$,
4456 we may assume that $
\vec v_1(
\vec p)$ attains the minimum and
4457 $
\vec v_2(
\vec p)$ attains the maximum.
4458 If $
\vec v_1(
\vec p) + C_1$ and $
\vec v_2(
\vec p) + C_2$ are the
4459 corresponding vertex cones, then the set of (rational) directions for this
4462 C_
{1,
2} =
\left( C_1^*
\cap -C_2^*
\right)
\setminus \
{ \vec 0 \
}
4465 The set of candidate integer directions are therefore
4466 the vertices of the integer hull of $C_
{1,
2}$, which
4467 can be computed as explained in
\autoref{s:hull:cone
}.
4468 To see this, note that by construction
4469 $
\sps {\vec c
}{\vec v_1(
\vec p)
} \le \sps {\vec c
}{\vec v_2(
\vec p)
}$
4472 w_
{\vec c
}(
\vec p) =
\width_{\vec c
} P(
\vec p)
4473 =
\sps {\vec c
}{\vec v_2(
\vec p)-
\vec v_1(
\vec p)
} \ge 0
4476 Any integer direction in $C_
{1,
2}$ will therefore yield
4477 a width that is at least as large as that of one
4478 of the vertices of the integer hull.
4479 Note that when using generalized basis reduction
4480 to compute the integer hull of these cones as in
\autoref{s:hull:cone:gbr
},
4481 it can be helpful to use as vertices for the initial approximation
4482 not only the extremal rays of the cone, but also those vertices
4483 of previously computed integer hulls that are elements of the current cone.
4485 After computing a list of all possible candidate width directions
4486 $
\vec c_i$ and the corresponding widths $w_
{\vec c_i
}(
\vec p)$,
4487 we keep only a single direction of all those that yield
4488 the same width (as an affine function of the parameters).
4489 Then we construct the chambers where each of the widths is minimal,
4492 C_i = \
{\,
\vec p
\in Q
\mid \forall j :
4493 w_
{\vec c_i
}(
\vec p)
\le w_
{\vec c_j
}(
\vec p) \,\
}
4496 Note that many of the $C_i$ may be empty or of lower dimension
4497 than Q and that the other $C_i$ will intersect in common facets.
4498 To obtain a partition of partially-open full-dimensional chambers, we proceed
4499 as in
\autoref{s:triangulation
}.
4504 <
\intercol,
0pt>:<
0pt,
\intercol>::
4505 \def\latticebody{\POS="c"+(
0,-
0.5)
\ar@
{--
}"c"+(
0,
7.5)
}%
4506 \POS0,
{\xylattice{-
0}{10}00}%
4507 \def\latticebody{\POS="c"+(-
0.5,
0)
\ar@
{--
}"c"+(
10.5,
0)
}%
4508 \POS0,
{\xylattice00{-
0}7}%
4509 \POS@i@=
{(
0,
0),(
5,
3),(
9,
6),(
5,
4),(
0,
0)
},
{0*
[|(
2)
]\xypolyline{}}
4518 \POS(
9,
6);(
8.7,
6.4)**
{}?(
0)/
1.1cm/="a"
\POS(
9,
6)
\ar"a"
4519 \POS(
9,
6);(
9.1,
5.8)**
{}?(
0)/
1.1cm/="a"
\POS(
9,
6)
\ar"a"
4520 \POS(
5,
4);(
5.4,
3.5)**
{}?(
0)/
1.1cm/="a"
\POS(
5,
4)
\ar"a"
4521 \POS(
5,
4);(
5.1,
3.8)**
{}?(
0)/
1.1cm/="a"
\POS(
5,
4)
\ar"a"
4522 \POS(
0,
0);(
0.4,-
0.5)**
{}?(
0)/
1.1cm/="a"
\POS(
0,
0)
\ar"a"
4523 \POS(
0,
0);(-
0.3,
0.5)**
{}?(
0)/
1.1cm/="a"
\POS(
0,
0)
\ar"a"
4524 \POS(
5,
3);(
4.7,
3.5)**
{}?(
0)/
1.1cm/="a"
\POS(
5,
3)
\ar"a"
4525 \POS(
5,
3);(
4.7,
3.4)**
{}?(
0)/
1.1cm/="a"
\POS(
5,
3)
\ar"a"
4526 \POS(
9,
6)*+!DL
{\vec v_1
}
4527 \POS(
0,
0)*+!UR
{\vec v_3
}
4528 \POS(
5,
3)*+!UL
{\vec v_4
}
4529 \POS(
5,
4)*+!DR
{\vec v_2
}
4531 \caption{A polytope and its candidate width directions
}
4535 \begin{example
} \label{ex:width
}
4536 Consider the (non-parametric) polytope
4541 -
3 x_1 +
5 x_2 &
\ge 0 \\
4542 4 x_1 -
5 x_2 &
\ge 0 \\
4543 x_1 -
2 x_2 +
3 &
\ge 0 \\
4544 -
3 x_1 +
4 x_2 +
3 &
\ge 0
4548 shown in
\autoref{f:width
}. The polytope has four vertices
4551 \vec v_1 & = (
9,
6) \\
4552 \vec v_2 & = (
5,
4) \\
4553 \vec v_3 & = (
0,
0) \\
4558 The corresponding cones of directions (for
4559 the given vertex to attain the minimum), also shown
4560 in
\autoref{f:width
} are
4563 C^*_1 & =
\poshull \,\
{ (-
3,
4), (
1,-
2) \
} \\
4564 C^*_2 & =
\poshull \,\
{ (
4,-
5), (
1,-
2) \
} \\
4565 C^*_3 & =
\poshull \,\
{ (
4,-
5), (-
3,
5) \
} \\
4566 C^*_4 & =
\poshull \,\
{ (-
3,
5), (-
3,
4) \
}
4574 <
\intercol,
0pt>:<
0pt,
\intercol>::
4575 \def\latticebody{\POS="c"+(
0,-
6.5)
\ar@
{--
}"c"+(
0,
2.5)
}%
4576 \POS0,
{\xylattice{-
1}{5}00}%
4577 \def\latticebody{\POS="c"+(-
1.5,
0)
\ar@
{--
}"c"+(
5.5,
0)
}%
4578 \POS0,
{\xylattice00{-
6}2}%
4579 \POS0\ar@
{->
}(
3,-
4)
\POS?!
{(
0,-
6.5);(
1,-
6.5)
}="a"
4581 \POS0\ar@
{->
}(
4,-
5)
\POS?!
{(
0,-
6.5);(
1,-
6.5)
}="b"
4583 \POS@i@=
{"a",(
3,-
4),(
4,-
5),"b"
},
{0*
[grey
]\xypolyline{*
}}
4584 \POS0,
{\ellipse(
1.1)
(*0;(4,3)*),^,
(*0;(-2,-1)*){-
}}
4585 \POS0,
{\ellipse(
1)
(*0;(2,1)*),^,
(*0;(5,4)*){-
}}
4586 \POS0\ar@
{->
}(
3,-
4)
\POS?!
{(
0,-
6.5);(
1,-
6.5)
}="a"
4587 \POS0\ar@
{->
}(
4,-
5)
\POS?!
{(
0,-
6.5);(
1,-
6.5)
}="b"
4588 \POS(
4,-
5)*
{\bullet}
4589 \POS(
3,-
4)*
{\bullet}
4591 \caption{The cone of directions $C_
{2,
1}$
}
4598 <
\intercol,
0pt>:<
0pt,
\intercol>::
4599 \def\latticebody{\POS="c"+(
0,-
6.5)
\ar@
{--
}"c"+(
0,
5.5)
}%
4600 \POS0,
{\xylattice{-
3}{5}00}%
4601 \def\latticebody{\POS="c"+(-
3.5,
0)
\ar@
{--
}"c"+(
5.5,
0)
}%
4602 \POS0,
{\xylattice00{-
6}5}%
4604 \POS0\ar@
{->
}(-
1,
2)
\POS?!
{(
0,
5.5);(
1,
5.5)
}="a"
4605 \POS0\ar@
{->
}(
4,-
5)
\POS?!
{(
0,-
6.5);(
1,-
6.5)
}="b"
4607 \POS@i@=
{"b",(
4,-
5),(
1,-
1),(-
1,
2),"a",(
5.5,
5.5),(
5.5,-
6.5)
},
{0*
[grey
]\xypolyline{*
}}
4608 \POS0\ar@
{->
}(-
1,
2)
\POS?!
{(
0,
5.5);(
1,
5.5)
}="a"
4609 \POS0\ar@
{->
}(
4,-
5)
\POS?!
{(
0,-
6.5);(
1,-
6.5)
}="b"
4610 \POS0,
{\ellipse(
1.1)
(*0;(4,3)*),^,
(*0;(-2,-1)*){-
}}
4611 \POS0,
{\ellipse(
1)
(*0;(5,4)*),^,
(*0;(-5,-3)*){-
}}
4612 \POS(
1,-
1)*
{\bullet}
4613 \POS(
4,-
5)*
{\bullet}
4614 \POS(-
1,
2)*
{\bullet}
4616 \caption{The cone of directions $C_
{3,
1}$
}
4623 <
\intercol,
0pt>:<
0pt,
\intercol>::
4624 \def\latticebody{\POS="c"+(
0,-
4.5)
\ar@
{--
}"c"+(
0,
5.5)
}%
4625 \POS0,
{\xylattice{-
3}{3}00}%
4626 \def\latticebody{\POS="c"+(-
3.5,
0)
\ar@
{--
}"c"+(
3.5,
0)
}%
4627 \POS0,
{\xylattice00{-
4}5}%
4630 \POS0,
{\ellipse(
1.1)
(*0;(4,3)*),^,
(*0;(-2,-1)*){-
}}
4633 \POS0,
{\ellipse(
1)
(*0;(-5,-3)*),^,
(*0;(-4,-3)*){-
}}
4635 \caption{The cone of directions $C_
{4,
1}$
}
4639 Let us now consider the directions in which
4640 $
\vec v_2$ is minimal while $
\vec v_1$ is maximal.
4643 C_
{2,
1} =
\poshull \,\
{ (
4,-
5), (
3,-
4) \
} \setminus \
{ \vec 0 \
}
4646 as shown in
\autoref{f:C:
2:
1}.
4647 The vertices of the integer hull of $C_
{2,
1}$ are $(
4,-
5)$
4649 The corresponding widths are
4652 \vec c_1 &= (
4,-
5) & w_
{\vec c_1
} &=
6 \\
4653 \vec c_2 &= (
3,-
4) & w_
{\vec c_2
} &=
4
4659 C_
{3,
1} =
\poshull \,\
{ (
4,-
5), (-
1,
2) \
} \setminus \
{ \vec 0 \
}
4663 $
\poshull \,\
{ (
4,-
5), (-
1,
2), (
1,-
1) \
}$, shown
4664 in
\autoref{f:C:
3:
1}, yielding
4667 \vec c_3 &= (
4,-
5) & w_
{\vec c_3
} &=
6 \\
4668 \vec c_4 &= (-
1,
2) & w_
{\vec c_4
} &=
3 \\
4669 \vec c_5 &= (
1,-
1) & w_
{\vec c_5
} &=
3
4678 as shown in
\autoref{f:C:
4:
1} and so this combination
4679 does not yield any width direction candidates.
4680 The other pairs of vertices further yield
4683 \vec c_6 &= (-
1,
2) & w_
{\vec c_6
} &=
3 \\
4684 \vec c_7 &= (-
3,
5) & w_
{\vec c_7
} &=
5 \\
4685 \vec c_8 &= (-
3,
4) & w_
{\vec c_8
} &=
4 \\
4686 \vec c_9 &= (-
3,
5) & w_
{\vec c_9
} &=
5 \\
4687 \vec c_
{10} &= (-
2,
3) & w_
{\vec c_
{10}} &=
3
4691 Since the polytope under consideration is not parametric,
4692 there is only one (non-empty, $
0$-dimensional) chamber and
4693 it corresponds to one of the directions, say $
\vec c_4 = (-
1,
2)$,
4694 with width $
3$ (the other directions with the same width
4695 having been removed).
4700 <
\intercol,
0pt>:<
0pt,
\intercol>::
4701 \def\latticebody{\POS="c"+(
0,-
0.5)
\ar@
{--
}"c"+(
0,
7.5)
}%
4702 \POS0,
{\xylattice{-
0}{10}00}%
4703 \def\latticebody{\POS="c"+(-
0.5,
0)
\ar@
{--
}"c"+(
10.5,
0)
}%
4704 \POS0,
{\xylattice00{-
0}7}%
4705 \POS@i@=
{(
0,
0),(
5,
3),(
9,
6),(
5,
4),(
0,
0)
},
{0*
[|(
2)
]\xypolyline{}}
4706 \POS(-
0.5,-
0.5)
\ar@
{.
}(
7.5,
7.5)
4707 \POS(
0.5,-
0.5)
\ar@
{.
}(
8.5,
7.5)
4708 \POS(
1.5,-
0.5)
\ar@
{.
}(
9.5,
7.5)
4709 \POS(
2.5,-
0.5)
\ar@
{.
}(
10.5,
7.5)
4710 \POS(-
0.5,-
0.25)
\ar@
{-
}(
10.5,
5.25)
4711 \POS(-
0.5,
0.25)
\ar@
{-
}(
10.5,
5.75)
4712 \POS(-
0.5,
0.75)
\ar@
{-
}(
10.5,
6.25)
4713 \POS(-
0.5,
1.25)
\ar@
{-
}(
10.5,
6.75)
4714 \POS(-
0.25,-
0.5)
\ar@
{--
}(
10.5,
6.666)
4715 \POS(-
0.5,-
0.333)
\ar@
{--
}(
10.5,
7)
4716 \POS(-
0.5,
0)
\ar@
{--
}(
10.5,
7.333)
4717 \POS(-
0.5,
0.333)
\ar@
{--
}(
10.25,
7.5)
4727 \caption{A polytope and its lattice width directions
}
4731 Each of the three directions that yield the minimal
4732 width of
3 is shown in
\autoref{f:width:
2}.
4735 \begin{example
} \label{ex:width:
2}
4736 Consider the polytope
4741 -
2 x_1 + p +
5 &
\ge 0 \\
4742 2 x_1 + p +
5 &
\ge 0 \\
4743 -
2 x_2 - p +
5 &
\ge 0 \\
4744 2 x_2 - p +
5 &
\ge 0
4748 from
\shortciteN[Example~
2.1.7]{Woods2004PhD
}.
4749 The parametric vertices are
4752 \vec v_1(p) & =
\left(
\frac{p+
5}2,
\frac{-p+
5}2\right) \\
4753 \vec v_2(p) & =
\left(
\frac{p+
5}2,
\frac{p-
5}2\right) \\
4754 \vec v_3(p) & =
\left(
\frac{-p-
5}2,
\frac{-p+
5}2\right) \\
4755 \vec v_4(p) & =
\left(
\frac{-p-
5}2,
\frac{p-
5}2\right)
4759 We find two essentially different candidate width directions
4762 \vec c_1 &= (
0,
1) & w_
{\vec c_1
}(p) &=
5-p \\
4763 \vec c_2 &= (
1,
0) & w_
{\vec c_2
}(p) &=
5+p
4767 The first direction can be found by combining, say,
4768 $
\vec v_1(p)$ and $
\vec v_2(p)$, while the second direction can be
4769 found by combining, say, $
\vec v_1(p)$ and $
\vec v_3(p)$.
4770 The parameter domain for the parametric polytope $P(p)$ is
4772 Q = \
{\, p
\mid -
5 \le p
\le 5 \,\
}
4775 The two (closed) chambers are therefore
4778 C_1 &= \
{\, p
\in Q
\mid 5 - p
\le 5+p \,\
} \\
4779 C_2 &= \
{\, p
\in Q
\mid 5 + p
\le 5-p \,\
}
4783 To obtain a partition,
\autoref{s:interior
} gives
4784 the internal point $(
0,
0)$, which happens to meet
4785 the facets $p
\ge 0$ and $-p
\ge 0$. We therefore
4786 keep the facet with positive (inner) normal closed
4787 and open up the other facet. The result is
4790 \hat C_1 &= \
{\, p
\mid 0 \le p
\le 5 \,\
} \\
4791 \hat C_2 &= \
{\, p
\mid -
5 \le p <
0 \,\
}
4795 Since we are usually only interested in integer parameter
4796 values, the latter chamber would become
4797 $
\hat C_2 = \
{\, p
\mid -
5 \le p
\le -
1 \,\
}$.
4800 Our description differs slightly from that of
4801 of
\shortciteN{Eisenbrand2007parameterised
}.
4802 First, they consider all pairs of basic solutions instead
4803 of all pairs of vertices, which means that they may
4804 consider basic solutions that are never feasible and that,
4805 in case of a non-simple polytope,
4806 they may consider the same parametric vertex more than once.
4808 directions for a pair of vertices is the intersection of
4809 the sets of integer directions they obtain for each of
4810 the corresponding basic solutions.
4811 Second, they use a different method of creating a partition
4812 of partially-open chambers, which may lead to some lower-dimensional
4813 chambers surviving and hence to a larger total number of chambers.
4816 \subsection{Testing whether a set has an infinite number of points
}
4819 In some situation we are given the generating function of
4820 some integer set and we would like to know if the set is
4821 infinite or not. Typically, we want to know if the set
4822 is empty or not, but we cannot simply count the number of elements
4823 in the standard way since we may not have any guarantee that
4824 the set has only a finite number of elements.
4825 We will consider the slightly more general case where we are
4826 given a rational generating function $f(
\vec x)$ of the form~
\eqref{eq:rgf
}
4830 f(
\vec x) =
\sum_{\vec s
\in Q
\cap \ZZ^d
} c(
\vec s)\,
\vec x^
{\vec s
}
4832 converges on some nonempty open subset of $
\CC^d$, $Q$ is a pointed
4833 polyhedron and $c(
\vec s)
\ge 0$,
4834 and we want to compute
4837 S =
\sum_{\vec s
\in Q
\cap \ZZ^d
} c(
\vec s)
4840 where the sum may diverge, i.e., ``$S =
\infty$''.
4841 The following proposition shows that we can determine $S$
4843 For a sketch of an alternative technique, see
4844 \shortciteN[Proof of Lemma~
16]{Woods2005period
}.
4848 Given a
\rgf/ of the form~
\eqref{eq:rgf
} with $k_i
\le k$
4849 and a pointed polyhedron $Q
\subset \QQ^d$, then there is a
4850 polynomial time algorithm that determines for the corresponding
4851 function $c(
\vec s)$~
\eqref{eq:rgf:psp
} whether the sum~
\eqref{eq:psp:sum
}
4852 diverges and computes the value of $S$~
\eqref{eq:psp:sum
} if it does not.
4855 Since $Q$ is pointed, the series~
\eqref{eq:rgf:psp
} converges on a neighborhood
4856 of $e^
{\vec \ell} = (e^
{\ell_1},
\ldots, e^
{\ell_d})$ for any $
\vec \ell$
4857 such that $
\sps {\vec r_k
} {\vec \ell} <
0$ for
4858 any (extremal) ray $
\vec r_k$ of $Q$ and
4859 such that $
\sps {\vec b_
{i j
}} {\vec \ell} \ne 0$ for any
4860 $
\vec b_
{i j
}$ in~
\eqref{eq:rgf
}.
4861 Let $
\vec \alpha = -
\vec \ell$ and perform the substitution
4862 $
\vec x = t^
{\vec \alpha}$. The function $g(t) = f(t^
{\vec \alpha})$
4863 is then also a (short)
\rgf/ and
4865 g(t) =
\sum_{k
\in \sps {\vec\alpha} Q
\cap \ZZ}
4867 \sum_{\shortstack{$
\scriptstyle \vec s
\in Q
\cap \ZZ^d$\\
4868 $
\scriptstyle \sp \alpha s = k$
}} c(
\vec s)
4870 =:
\sum_{k
\in \sps {\vec\alpha} Q
\cap \ZZ} d(k) \, t^k
4873 with $
\sps {\vec\alpha} Q = \
{ \sp \alpha x
\mid \vec x
\in Q \
}$,
4874 converges in a neighborhood of $e^
{-
1}$, while
4876 S =
\sum_{k
\in \sps {\vec\alpha} Q
\cap \ZZ} d(k)
4879 Since $c(
\vec s)
\ge 0$, we have $d(k)
\ge 0$
4880 and the above sum diverges iff any of the coefficients of the
4881 negative powers of $t$ in the Laurent expansion of $g(t)$ is non-zero.
4882 If the sum converges, then the sum is simply the coefficient
4883 of the constant term in this expansion.
4885 It only remains to show now that we can compute a suitable $
\vec \alpha$
4886 in polynomial time, i.e., an $
\vec \alpha$ such that
4887 $
\sps {\vec r_k
} {\vec \alpha} >
0$ for any (extremal) ray $
\vec r_k$ of $Q$ and
4888 $
\sps {\vec b_
{i j
}} {\vec \alpha} \ne 0$ for any
4889 $
\vec b_
{i j
}$ in~
\eqref{eq:rgf
}.
4890 By adding the $
\vec r_k$ to the list of $
\vec b_
{i j
}$ if needed, we can relax
4891 the first set of constraints to $
\sps {\vec r_k
} {\vec \alpha} \ge 0$.
4892 Let $Q$ be described by the constraints $A
\vec x +
\vec c
\ge \vec 0$
4893 and let $B$ be $d
\times d$ non-singular submatrix of $A$, obtained
4894 by removing some of the rows of $A$. Such a $B$ exists since
4895 $Q$ does not contain any straight line.
4896 Clearly, $B
\vec r
\ge \vec 0$ for any ray $
\vec r$ of $Q$.
4897 Let $
\vec b'_
{i j
} = B
\vec b_
{i j
}$, then since $
\vec b_
{i j
} \ne \vec 0$
4898 and B is non-singular, we have $
\vec b'_
{i j
} \ne \vec 0$.
4899 We may therefore find in polynomial time a point $
\vec \alpha'
\ge \vec 0$
4900 on the ``
\ai{moment curve
}'' such that
4901 $
\sps {\vec b'_
{i j
}} {\vec \alpha'
} \ne 0$
4902 \shortcite[Algorithm~
5.2]{Barvinok1999
}.
4903 Let $
\vec \alpha = B^
\T \vec \alpha'$.
4906 \sps {\vec b_
{i j
}} {\vec \alpha}
4908 \sps {\vec b_
{i j
}} {B^
\T \vec \alpha'
}
4910 \sps {B
\vec b_
{i j
}} {\vec \alpha'
}
4912 \sps {\vec b'_
{i j
}} {\vec \alpha'
}
4917 \sps {\vec r_k
} {\vec \alpha}
4919 \sps {\vec r_k
} {B^
\T \vec \alpha'
}
4921 \sps {B
\vec r_k
} {\vec \alpha'
}
4926 Note that in practice, we would, as usual, first try a
4927 fixed number of random vectors $
\vec \alpha'
\ge \vec 0$
4928 before resorting to looking for a point on the moment curve.
4932 \subsection{Enumerating integer projections of parametric polytopes
}
4933 \label{s:projection
}
4935 In this section we are interested in computing
4937 \label{eq:count:projection
}
4938 c(
\vec s)=\#
\left\
{\vec t
\in\ZZ^
{d
} \mid \exists \vec u
\in\ZZ^
{m
}:
4939 (
\vec s,
\vec t,
\vec u)
\in P
\right\
}
4942 with $P
\subset \QQ^
{n
}\times\QQ^
{d
}\times\QQ^
{m
}$ a rational
4943 pointed polyhedron such that
4945 P_
{\vec s
}=
\left\
{(
\vec t,
\vec u)
\in\QQ^d
\times\QQ^m
4946 \mid (
\vec s,
\vec t,
\vec u)
\in P
\right\
}
4948 is a polytope for any $
\vec s$.
4949 This is equivalent to computing the number of points
4950 in the
\ai{integer projection
} of a parametric polytope
4952 c(
\vec s)=\#
\big(
\pi(P_
{\vec s
}\cap\ZZ^
{d+m
})
\big)
4955 with $
\pi:
\QQ^d
\times\QQ^m
\rightarrow\QQ^d$ defined by
4956 $
\pi(
\vec t,
\vec u)=
\vec t$.
4957 Exponential methods for computing $c(
\vec s)$ are
4958 described by
\shortciteN{Verdoolaege2005experiences
}
4959 and
\shortciteN{Seghir2006memory
}.
4960 Here, we provide some implementation details for the polynomial
4961 method of
\shortciteN[Theorem~
1.7]{Woods2003short
}, for
4962 computing the generating function, $
\sum_{\vec s
}c(
\vec s) \,
\vec x^
{\vec s
}$,
4963 which can then be converted into an explicit function $c(
\vec s)$
4964 \shortcite[Corollary~
1.11]{Verdoolaege2007counting
}.
4965 Note that in contrast to
\shortciteN[Theorem~
1.7]{Woods2003short
},
4966 we may allow $P$ to be an unbounded (but still pointed) polyhedron here
4967 (as long as $P_
{\vec s
}$ is bounded), since
4968 we replace their application of
4969 \shortciteN[Lemma~
3.1]{Kannan1992
}
4970 by
\shortciteN[Theorem~
5]{Eisenbrand2007parameterised
}.
4972 If there is only one existentially quantified variable ($m =
1$),
4973 then computing~
\eqref{eq:count:projection
} is easy.
4974 You simply shift $P$ by $
1$ in the $u$ direction and subtract
4975 this shifted copy from the original,
4977 D = P
\setminus (
\vec e_
{n+d+
1} + P)
4980 (See, e.g.,
\shortciteN[Figure~
1, page~
973]{Woods2003short
}
4981 or
\shortciteN[Figure~
4.33, page~
186]{Verdoolaege2005PhD
}.)
4982 In the difference $D$ there will be
{\em exactly
} one value of $u$
4983 for each value of the remaining variables for which there was
4984 {\em at least
} one value of $u$ in $P$,
4986 \forall (
\vec s,
\vec t):
4989 \exists u: (
\vec s,
\vec t, u)
\in P
4993 \exists! u: (
\vec s,
\vec t, u)
\in D
4997 The function $c(
\vec s)$ can then be computed by counting
4998 the number of elements in $D(
\vec s)$.
4999 These operations can be performed either in the space
5000 of (unions of) parametric polytopes or on generating functions.
5001 In the first case, $D(
\vec s)$ can be written as a disjoint union
5002 of parametric polytopes that can be enumerated separately.
5003 In the second case, we first compute the generating function
5004 $f(
\vec x,
\vec y)$ of the set
5008 (
\vec s,
\vec t)
\mid \exists u
\in \ZZ : (
\vec s,
\vec t, u)
\in P
5011 and then obtain the generating function $C(
\vec x)$ of $c(
\vec s)$
5012 as $C(
\vec x) = f(
\vec x,
\vec 1)$.
5013 In the remainder of this section, we will concentrate on the
5014 computation of the generating function of $S$.
5015 To compute this generating function in the current case where
5016 there is only one existentially quantified variable, we first
5017 compute the generating function $g(
\vec x,
\vec y, z)$ of
5018 $P(
\vec s,
\vec t, u)$, perform operations on the generating function
5019 equivalent to the set operations (see, e.g.,
5020 \shortciteN[Section~
4.5.3]{Verdoolaege2005PhD
}), resulting
5021 in a generating function $g'(
\vec x,
\vec y, z)$, and then sum
5022 over all values (at most one for each value of $
\vec s$
5023 and $
\vec t$) of $u$, i.e., $f(
\vec x,
\vec y) = g'(
\vec c,
\vec y,
1)$.
5028 <
\intercol,
0pt>:<
0pt,
\intercol>::
5029 \def\latticebody{\POS="c"+(
0,-
0.5)
\ar@
{--
}"c"+(
0,
7.5)
}%
5030 \POS0,
{\xylattice{-
0}{10}00}%
5031 \def\latticebody{\POS="c"+(-
0.5,
0)
\ar@
{--
}"c"+(
10.5,
0)
}%
5032 \POS0,
{\xylattice00{-
0}7}%
5033 \POS@i@=
{(
0,
0),(
5,
3),(
9,
6),(
5,
4),(
0,
0)
},
{0*
\xypolyline{}}
5034 \POS(
0,
0)*
[*
0.333]\xybox{
5035 \POS@i@=
{(
0,
0),(
5,
3),(
9,
6),(
5,
4),(
0,
0)
},
{0*
\xypolyline{--
}}
5045 \POS(-
1,-
0.5)
\ar@
{-
}(-
1,
7.5)
5046 \POS(-
1,
0)*
{\bullet}
5047 \POS(-
1,
3)*
{\bullet}
5048 \POS(-
1,
4)*
{\bullet}
5049 \POS(-
1,
6)*
{\bullet}
5050 \POS(-
1,
2)*
{\bullet}
5051 \POS(-
1,
3)*
{\bullet}
5052 \POS(-
1,
4)*
{\bullet}
5053 \POS(-
1,
5)*
{\bullet}
5054 \POS(-
0.5,-
1)
\ar@
{-
}(
10.5,-
1)
5055 \POS(
0,-
1)*+++!UR
{S
}
5056 \POS(
0,-
1)*
{\bullet}
5057 \POS(
5,-
1)*
{\bullet}
5058 \POS(
5,-
1)*
{\bullet}
5059 \POS(
9,-
1)*
{\bullet}
5060 \POS(
3,-
1)*
{\bullet}
5061 \POS(
4,-
1)*
{\bullet}
5062 \POS(
6,-
1)*
{\bullet}
5063 \POS(
7,-
1)*
{\bullet}
5065 \caption{A polytope and its integer projections
}
5066 \label{f:projection
}
5069 If there is more than one existentially quantified variable ($m >
1$),
5070 then we can in principle apply the above shifting and subtracting
5071 technique recursively to obtain a generating function
5072 $f(
\vec x,
\vec y)$ for the set
5074 \label{eq:projection:T
}
5077 (
\vec s,
\vec t)
\mid \exists \vec u
\in \ZZ^m : (
\vec s,
\vec t,
\vec u)
\in P
5080 and then compute $C(
\vec x) = f(
\vec x,
\vec 1)$.
5081 There are however some complications.
5082 Most notably, after applying the technique in one direction
5083 and projecting out the corresponding variable, the resulting set, i.e.,
5087 (
\vec s,
\vec t, u_1,
\ldots, u_
{m-
1})
\mid
5088 \exists u_m
\in \ZZ : (
\vec s,
\vec t,
\vec u)
\in P
5092 in general does not correspond to the integer points in some polytope.
5093 For example, assume that the polytope in
\autoref{f:projection
}
5094 contains the values of $
\vec u$ associated to a particular
5095 value of $(
\vec s,
\vec t)$. Since there are integer points
5096 in this polytope, we should count this value of $
\vec t$, but only once.
5097 If we apply the above technique in the vertical direction ($u_2$), then
5098 we can compute (a generating function for) the set $S$ shown
5099 on the bottom of the figure.
5100 Note, however, that there are ``gaps'' in this set, i.e.,
5101 if we compute $S
\setminus (
\vec e_
{n+d+
1} + S)$ then we will not
5102 end up with a single point (for this value of $(
\vec s,
\vec t)$).
5103 Since the biggest gap is three wide, we need
5107 \setminus (
\vec e_
{n+d+
1} + S)
5108 \setminus (
2 \vec e_
{n+d+
1} + S)
5109 \setminus (
3 \vec e_
{n+d+
1} + S)
5111 to obtain a single point.
5112 If we do the subtraction in the horizontal direction first,
5113 then we end up with a set (shown on the left) with gaps
5114 at most two wide, so afterwards we only need to subtract twice in the
5120 <
\intercol,
0pt>:<
0pt,
\intercol>::
5121 \def\latticebody{\POS="c"+(
0,-
0.5)
\ar@
{--
}"c"+(
0,
7.5)
}%
5122 \POS0,
{\xylattice{-
0}{4}00}%
5123 \def\latticebody{\POS="c"+(-
0.5,
0)
\ar@
{--
}"c"+(
4.5,
0)
}%
5124 \POS0,
{\xylattice00{-
0}7}%
5125 \POS@i@=
{(
0,
0),(
1,
3),(
3,
6),(
3,
4),(
0,
0)
},
{0*
\xypolyline{}}
5134 \POS(-
0.5,-
1)
\ar@
{-
}(
4.5,-
1)
5135 \POS(
0,-
1)*+++!UR
{S
}
5136 \POS(
0,-
1)*
{\bullet}
5137 \POS(
1,-
1)*
{\bullet}
5138 \POS(
2,-
1)*
{\bullet}
5139 \POS(
3,-
1)*
{\bullet}
5141 \caption{A transformed polytope and its integer projection
}
5142 \label{f:projection:
2}
5145 In general, there is no bound on the widths of the gaps we may
5146 encounter in any given direction. However, there are directions
5147 in which the gaps are known to be ``small''.
5148 In particular, if the dimension $m$ is fixed, then the lattice width
5149 (see
\autoref{s:width
}) of lattice point free polytopes
5150 is bounded by a constant $
\omega(m)$
%
5151 ~
\shortcite{Lagarias90,Barvinok02,Banaszczyk1999flatness
}.
5152 This means that in the direction of the lattice width of a polytope,
5153 the gaps will be not be larger than $
\omega(m)$
5154 \shortcite[Theorem~
4.3]{Woods2003short
}.
5155 Otherwise, we would be able to put a (uniformly) scaled down version
5156 of the polytope in the gap and it would contain no lattice points,
5157 which would contradict the fact that its lattice width is bounded
5159 \autoref{f:projection
} contains such a scaled down copy
5160 of the original polytope. However, neither the horizontal
5161 nor the vertical direction is a lattice width direction
5162 of this polytope. The actual lattice width of this
5163 polytope was computed in Example~
\ref{ex:width
} as $
3$
5164 with corresponding direction $
\vec c = (-
1,
2)$.
5165 \autoref{f:projection:
2} shows the result of applying
5166 the unimodular transformation
5173 to the polytope. Note that the horizontal direction
5174 now has gaps of width at most
1. After shifting, subtracting
5175 and projecting in the vertical direction, we therefore
5176 end up with a set $S$ with gaps of width
1 and we then
5177 only have to shift and subtract once in the remaining
5178 (horizontal) direction.
5180 In fact, for two-dimensional polytopes the gaps in the lattice
5181 width direction will always be one, as shown by the following lemma.
5184 For any rational polygon, the gaps in a lattice
5185 width direction are of width at most
1.
5188 We may assume that $x$ is the given lattice width direction of
5189 a given polygon $P$.
5190 If there is a gap of width
2, then there is an integer value $x_1$ of $x$
5192 $P
\cap \
{\, (x_1, y) \,\
} \ne \emptyset$,
5193 $P
\cap \
{\, (x_1+
2, y) \,\
} \ne \emptyset$,
5195 $P
\cap \
{\, (x_1+
1, y) \,\
} \cap \ZZ^
2 =
\emptyset$.
5196 Using
\shortciteN[Lemma~
4.2]{Woods2003short
}, we can put
5197 a scaled down copy $P'$ of $P$ between $x=x_1$ and $x=x_1+
2$
5198 (and inside of $P$).
5199 $P'$ meets the line $x=x_1+
1$ between two consecutive integer
5200 points, $y_1$ and $y_1+
1$. Let $P''$ be the polygon bounded by $x=x_1$ and
5201 $x=x_1+
2$ and two lines that separate $P'$ from these two
5203 $P''$ will have the same width (
2) in the
5204 $x$ direction, while $P'
\subset P''$.
5205 The $x$ direction is therefore also a lattice width direction of $P''$.
5206 $P''$ cannot intersect both $x=x_1$ and $x=x_1+
2$ in a segment of
5207 length greater than or equal to $
1$.
5208 Otherwise, it would also intersect $x=x_1+
1$ in a segment of length
5209 greater than or equal to $
1$.
5211 We may therefore assume that the length of the intersection
5212 of $P''$ with $x=x_1$ is smaller than $
1$.
5213 If this line segment contains an integer point, then call it $y_2$.
5214 Otherwise, let $y_2$ be the greatest integer smaller than the
5215 points in the line segment.
5216 We may assume that $y_1 = y_2$.
5217 Otherwise, we can apply the unimodular transformation
5234 without changing the width in direction $x$.
5235 If $P''$ contains $(x_1, y_1)$, it intersects $x=x_1$
5236 in a segment $
[y_1-
\alpha_1, y_1+
\alpha_2]$.
5237 We may then similarly assume that $
\alpha_2 \ge \alpha_1$.
5238 $P''$ will only cut $x=x_1+
2$ in points with $y$-coordinate
5239 smaller than $
2-
\alpha_2$. The width in the $y$ direction
5240 will therefore be smaller than $
2-
\alpha_2+
\alpha_1 \le 2$,
5241 contradicting that $x$ is a lattice width direction.
5242 If $P''$ does not contain $(x_1, y_1)$, then it only
5243 intersects $x=x_1$ in points with $y$-coordinate $y_1+
\alpha$
5244 with $
0 <
\alpha <
1$. Given any such point, it is clear
5245 that $P''$ intersects $x=x_1+
2$ only in points with $y$-coordinate
5246 strictly between $y_1-
\alpha$ and $y_1+
1-
\alpha$, again
5247 showing that the width in the $y$ direction is smaller than $
2$ and
5248 leading to the same contradiction.
5249 The contradiction shows that there can be no gaps
5250 of width
2 in the lattice width direction of $P$.
5252 Note that the $
\omega(
2)$ bound is too coarse to reach
5253 the above conclusion as $
\omega(
2) >
2$.
5254 An example of a polygon with lattice with greater than $
2$ is the polygon
5255 with vertices $(-
17/
110,
83/
110)$, $(
2/
10,-
9/
10)$ and $(
177/
90,
100/
90)$,
5256 shown in
\autoref{f:empty:width:
2}, which has width $
221/
110$.
5261 <
\intercol,
0pt>:<
0pt,
\intercol>::
5262 \def\latticebody{\POS="c"+(
0,-
1.5)
\ar@
{--
}"c"+(
0,
1.5)
}%
5263 \POS0,
{\xylattice{-
1}{2}00}%
5264 \def\latticebody{\POS="c"+(-
1.5,
0)
\ar@
{--
}"c"+(
2.5,
0)
}%
5265 \POS0,
{\xylattice00{-
1}1}%
5266 \POS@i@=
{(-
0.1545,
0.7545),(
0.2,-
0.9),(
1.966,
1.111),(-
0.1545,
0.74545)
},
{0*
\xypolyline{}}
5268 \caption{Lattice point free polygon with lattice width
2}
5269 \label{f:empty:width:
2}
5272 The idea of the projection algorithm
5273 is now to first find a direction in which the gaps
5274 are expected to be small and to unimodularly transform
5275 the existentially quantified variables such that this direction
5276 lies in the direction of one of the transformed variables.
5277 Then, the remaining existentially quantified variables are
5278 projected out by applying the technique recursively.
5279 The resulting generating function will have gaps at most
5280 $
\omega(m)$ wide and so we have to subtract at most
5281 $
\omega(m)$ shifted copies of this generating function
5282 before we can plug in
1 to project out the selected
5283 (and now only remaining) existentially quantified variable.
5284 We now look at each of these step in a bit more detail.
5286 We are given a polyhedron $P$ such that $P_
{\vec s
}$ is a polytope
5287 and we want to compute a generating function $f(
\vec x,
\vec y)$
5288 for the set $T$ in~
\eqref{eq:projection:T
}.
5289 We first compute the lattice width directions of
5290 the $m$-dimensional parametric polytope $P_
{\vec s,
\vec t
}$
5291 as in
\autoref{s:width
}.
5292 The result is a partition of the parameter domain, i.e.,
5293 the projection of $P$ onto the first $n+d$ coordinates,
5294 into partially open polyhedra $Q_i$, together with
5295 the lattice width direction $
\vec c_i$ corresponding to each $Q_i$.
5296 Since the generating functions only encode integer points,
5297 we can replace each open facet $
\sp a x + b >
0$ by the closed
5298 facet $
\sp a x + b -
1 \ge 0$ to obtain a collection of closed
5299 polyhedra $
\tilde Q_i$. Now let
5301 P_i = P
\cap \tilde Q_i
\times \QQ^m
5303 and let $f_i(
\vec x,
\vec y)$ be the generating function of the set
5307 (
\vec s,
\vec t)
\mid
5308 \exists \vec u
\in \ZZ^m : (
\vec s,
\vec t,
\vec u)
\in P_i
5314 f(
\vec x,
\vec y) =
\sum_i f_i(
\vec x,
\vec y)
5317 From now on, we will consider a particular $P_i$ with corresponding
5318 lattice width $
\vec c_i$ and drop the $i$ subscript.
5320 We are now given a polyhedron $P$ such that the lattice width
5321 direction of $P_
{\vec s,
\vec t
}$ is $
\vec c$.
5322 We first extend $
\vec c$ to an $m
\times m$ unimodular matrix $U$
5323 using the technique of
\autoref{s:completion
},
5348 (
\vec s,
\vec t)
\mid
5349 \exists \vec u'
\in \ZZ^m : (
\vec s,
\vec t,
\vec u')
\in P'
5353 i.e., we may have changed the values of the existentially
5354 quantified variables, but we have not changed the set $T$.
5355 Now consider the set
5359 (
\vec s,
\vec t, u_1')
\mid
5360 \exists (u_2',
\ldots,u_m')
\in \ZZ^
{m-
1} :
5361 (
\vec s,
\vec t,
\vec u')
\in P'
5365 This set has only $m-
1$ existentially quantified variables, so
5366 we may apply this projection algorithm recursively and obtain
5367 the generating function $f'(
\vec x,
\vec y, z)$ for $T'$.
5368 The set $T'$ may no longer correspond to the integer points
5369 in a polytope, but, by construction, the gaps in the final
5370 coordinate are small ($
\le \omega(m)$).
5372 By now we have a generating function $f'(
\vec x,
\vec y, z)$
5373 for the set $T'$ (with small
5374 gaps in the final coordinate) and we have to compute the
5375 generating function $f(
\vec x,
\vec y)$ for $T$.
5378 \label{eq:projection:omega
}
5379 f''(
\vec x,
\vec y, z) =
5380 f'(
\vec x,
\vec y, z)
\bigoplus_{k=
1}^
{\floor{\omega(m)
}}
5381 \left( z^k f'(
\vec x,
\vec y, z)
\right)
5384 where $
\oplus$ represents the operation on generating functions
5385 that corresponds to set difference on the corresponding sets,
5386 we obtain a generating for the set $T''$ where only
5387 the smallest value of $u_1'$ is retained.
5388 The total number of $u_1'$s associated to any $(
\vec s,
\vec t)$
5389 is therefore either zero or one and so the ``multiset'' defined
5390 by taking as many copies of $(
\vec s,
\vec t)$ as there are
5391 associated values of $u_1'$ is actually the set $T$.
5394 f(
\vec x,
\vec y) = f''(
\vec x,
\vec y,
1)
5398 The only remaining problem is that the ``$
\oplus$'' operation
5399 in~
\eqref{eq:projection:omega
} is fairly expensive.
5400 In particular, this operation is performed by first
5401 computing the
\ai{Hadamard product
} of the two generating functions
5402 (which corresponds to the intersection of the sets) and
5403 then subtracting the resulting generating function from this
5404 first generating function.
5405 The last operation is fairly cheap, but the Hadamard product
5406 has a time complexity which while polynomial if the dimension (in
5407 this case the maximum of $k_i$ in~
\eqref{eq:rgf
}) is fixed,
5408 is exponential in this dimension.
5409 Furthermore, this dimension increases by $
\max k_i - d$ on each
5410 successive application of the Hadamard product, while $
\max k_i > d$
5411 as soon as some projection is performed, which certainly happens in the
5412 recursive application of the algorithm.
5413 Now, the total number of Hadamard products is bounded by a constant
5414 $
\floor{\omega(m)
}$ and so the increase in dimension is also bounded
5415 by a constant, so the whole operation is still polynomial for
5417 Nevertheless, we do not want to perform any additional Hadamard
5418 products if we do not really have to.
5419 That is, we would like to be able to detect when we can stop
5420 performing these operations
{\em before
} reaching the upper
5421 bound $
\floor{\omega(m)
}$.
5423 Let $f'_0(
\vec x,
\vec y, z) = f'(
\vec x,
\vec y, z)$ and
5424 let $f'_k(
\vec x,
\vec y, z)$ be the result of applying
5425 the ``set difference'' in~
\eqref{eq:projection:omega
} $k$ times.
5426 Denote the corresponding sets by $T'_0$ and $T'_k$.
5427 We want to find the smallest $k$ such that
5428 $f''(
\vec x,
\vec y, z) = f'_k(
\vec x,
\vec y, z)$.
5429 Note that we are talking about equality of rational functions here.
5430 Any further application of the set difference operation will
5431 not change this rational function, but it
{\em will\/
} typically
5432 produce a different (more complex) representation.
5433 To check whether the current $k$ is sufficient, we are going to
5434 count how many times any element of $T'_k$ still appears in a
5435 shifted copy of $T'_0$, with shift greater than or equal to $k+
1$.
5436 If this number is zero, any further set difference will have no effect.
5437 That is, we want to compute
5441 T'_l
\cap \left(
\vec e_
{n+d+
1} + T'
\right)
5445 or, in terms of generating functions,
5447 h(
\vec x,
\vec y, z) =
\sum_{l=k+
1}^
\infty
5448 f_k'(
\vec x,
\vec y, z)
\star z^l \, f'(
\vec x,
\vec y, z)
5451 We should point out here that while the Hadamard product ($
\star$)
5452 corresponds to intersection when applied to generator functions
5453 of indicator functions (i.e., with coefficients one or zero),
5454 in general it will produce a generating function with coefficients
5455 that are the product of the corresponding coefficients in the two
5457 We can therefore rewrite the above equation as
5460 h(
\vec x,
\vec y, z) & =
\sum_{l=k+
1}^
\infty
5461 f_k'(
\vec x,
\vec y, z)
\star z^l \, f'(
\vec x,
\vec y, z)
5463 & = f_k'(
\vec x,
\vec y, z)
\star
5465 \sum_{l=k+
1}^
\infty z^l \, f'(
\vec x,
\vec y, z)
5468 & = f_k'(
\vec x,
\vec y, z)
\star
5469 \frac{z^
{k+
1} \, f'(
\vec x,
\vec y, z)
}{1-z
}
5473 Computing $h(
\vec x,
\vec y,
1)$ would give us a generating
5474 function with as coefficients how many times a point of $T'_k$
5475 still appears in a shifted copy of $T'_0$ for any particular
5476 value of $
\vec s$ and $
\vec t$.
5477 However, we want to know if this number is zero for
{\em all\/
}
5478 values of $
\vec s$ and $
\vec t$, so we compute $h(
\vec 1,
\vec 1,
1)$
5479 instead. We have to be careful here since we allow the polyhedron
5480 $P$ to be unbounded and so we should apply the technique
5481 of
\autoref{s:infinite
} with $Q$ the projection of $P$ on
5482 the remaining coordinates.
5484 Note that testing whether we can stop is more expensive
5485 than applying the next iteration (since we have an extra
5486 $(
1-z)$ factor in the denominator of one of the operands).
5487 However, we may save many iterations by stopping early
5488 and we will not needlessly replace a given representation
5489 of $f''(
\vec x,
\vec y, z)$ by a more complex representation
5490 (with more factors in the denominator).
5491 An alternative way of checking whether we can stop is to
5492 test whether $f'_k(
\vec x,
\vec y, z) = f'_
{k+
1}(
\vec x,
\vec y, z)$
5493 (as rational functions).
5494 To do so, we would need to check that both
5496 f'_k(
\vec x,
\vec y, z) -
5497 \left( f'_k(
\vec x,
\vec y, z)
\star f'_
{k+
1}(
\vec x,
\vec y, z)
\right)
5501 f'_
{k+
1}(
\vec x,
\vec y, z) -
5502 \left( f'_k(
\vec x,
\vec y, z)
\star f'_
{k+
1}(
\vec x,
\vec y, z)
\right)
5504 are zero and this Hadamard product is more expensive than
5510 <
\intercol,
0pt>:<
0pt,
\intercol>::
5511 \def\latticebody{\POS="c"+(
0,-
5.5)
\ar@
{--
}"c"+(
0,
5.5)
}%
5512 \POS0,
{\xylattice{-
5}{5}00}%
5513 \def\latticebody{\POS="c"+(-
5.5,
0)
\ar@
{--
}"c"+(
5.5,
0)
}%
5514 \POS0,
{\xylattice00{-
5}5}%
5515 \POS(
0,-
5.5)
\ar(
0,
5.5)
\POS(
0,
5.5)*+!UL
{x_2
}
5516 \POS(-
5.5,
0)
\ar(
5.5,
0)
\POS(
5.5,
0)*+!DR
{x_1
}
5517 \POS@i@=
{(-
5,
0),(
5,
0)
},
{0*
[|(
2)
]\xypolyline{}}
5518 \POS@i@=
{(-
4.5,
0.5),(
4.5,
0.5),(
4.5,-
0.5),(-
4.5,-
0.5),(-
4.5,
0.5)
},
{0*
[|(
2)
]\xypolyline{}}
5519 \POS@i@=
{(-
4,
1),(
4,
1),(
4,-
1),(-
4,-
1),(-
4,
1)
},
{0*
[|(
2)
]\xypolyline{}}
5520 \POS@i@=
{(-
3.5,
1.5),(
3.5,
1.5),(
3.5,-
1.5),(-
3.5,-
1.5),(-
3.5,
1.5)
},
{0*
[|(
2)
]\xypolyline{}}
5521 \POS@i@=
{(-
3,
2),(
3,
2),(
3,-
2),(-
3,-
2),(-
3,
2)
},
{0*
[|(
2)
]\xypolyline{}}
5522 \POS@i@=
{(-
2.5,
2.5),(
2.5,
2.5),(
2.5,-
2.5),(-
2.5,-
2.5),(-
2.5,
2.5)
},
{0*
[|(
2)
]\xypolyline{}}
5523 \POS@i@=
{(-
2,
3),(
2,
3),(
2,-
3),(-
2,-
3),(-
2,
3)
},
{0*
[|(
2)
]\xypolyline{}}
5524 \POS@i@=
{(-
1.5,
3.5),(
1.5,
3.5),(
1.5,-
3.5),(-
1.5,-
3.5),(-
1.5,
3.5)
},
{0*
[|(
2)
]\xypolyline{}}
5525 \POS@i@=
{(-
1,
4),(
1,
4),(
1,-
4),(-
1,-
4),(-
1,
4)
},
{0*
[|(
2)
]\xypolyline{}}
5526 \POS@i@=
{(-
0.5,
4.5),(
0.5,
4.5),(
0.5,-
4.5),(-
0.5,-
4.5),(-
0.5,
4.5)
},
{0*
[|(
2)
]\xypolyline{}}
5527 \POS@i@=
{(
0,-
5),(
0,
5)
},
{0*
[|(
2)
]\xypolyline{}}
5529 \POS(-
4.5,
0.5)*+!DR
{4}
5531 \POS(-
3.5,
1.5)*+!DR
{2}
5533 \POS(-
2.5,
2.5)*+!DR
{0}
5535 \POS(-
1.5,
3.5)*+!DR
{-
2}
5537 \POS(-
0.5,
4.5)*+!DR
{-
4}
5540 \caption{The parametric polytope from Example~
\ref{ex:projection
}
5541 for different values of the parameter
}
5542 \label{f:ex:projection
}
5545 \begin{example
} \label{ex:projection
}
5546 Consider once more the parametric polytope
5551 -
2 x_1 + p +
5 &
\ge 0 \\
5552 2 x_1 + p +
5 &
\ge 0 \\
5553 -
2 x_2 - p +
5 &
\ge 0 \\
5554 2 x_2 - p +
5 &
\ge 0
5558 from
\shortciteN[Example~
2.1.7]{Woods2004PhD
}
5559 and Example~
\ref{ex:width:
2} and assume we want to
5562 c(p) =
\left[ \exists \vec x
\in \ZZ^
2: (p,
\vec x)
\in P
\right]
5565 That is, we simply want to know for which values of $p$
5566 the polytope is non-empty.
5567 Now, there are more efficient ways of answering this particular question,
5568 but we will use it here as an example of the above algorithm.
5569 The polytope $P(p)$ is shown in
\autoref{f:ex:projection
} for
5570 all integer value of the parameter for which the polytope
5576 <
\intercol,
0pt>:<
0pt,
\intercol>::
5577 \def\latticebody{\POS="c"+(
0,-
5.5)
\ar@
{--
}"c"+(
0,
5.5)
}%
5578 \POS0,
{\xylattice{-
5}{5}00}%
5579 \def\latticebody{\POS="c"+(-
5.5,
0)
\ar@
{--
}"c"+(
5.5,
0)
}%
5580 \POS0,
{\xylattice00{-
5}5}%
5581 \POS(
0,-
5.5)
\ar(
0,
5.5)
\POS(
0,
5.5)*+!UL
{x_2
}
5582 \POS(-
5.5,
0)
\ar(
5.5,
0)
\POS(
5.5,
0)*+!DR
{x_1
}
5583 \POS@i@=
{(-
2.5,
2.5),(
2.5,
2.5),(
2.5,-
2.5),(-
2.5,-
2.5),(-
2.5,
2.5)
},
{0*
[|(
2)
]\xypolyline{}}
5584 \POS@i@=
{(-
2,
3),(
2,
3),(
2,-
3),(-
2,-
3),(-
2,
3)
},
{0*
[|(
2)
]\xypolyline{}}
5585 \POS@i@=
{(-
1.5,
3.5),(
1.5,
3.5),(
1.5,-
3.5),(-
1.5,-
3.5),(-
1.5,
3.5)
},
{0*
[|(
2)
]\xypolyline{}}
5586 \POS@i@=
{(-
1,
4),(
1,
4),(
1,-
4),(-
1,-
4),(-
1,
4)
},
{0*
[|(
2)
]\xypolyline{}}
5587 \POS@i@=
{(-
0.5,
4.5),(
0.5,
4.5),(
0.5,-
4.5),(-
0.5,-
4.5),(-
0.5,
4.5)
},
{0*
[|(
2)
]\xypolyline{}}
5588 \POS@i@=
{(
0,-
5),(
0,
5)
},
{0*
[|(
2)
]\xypolyline{}}
5589 \POS(-
2.5,
2.5)*+!DR
{0}
5591 \POS(-
1.5,
3.5)*+!DR
{2}
5593 \POS(-
0.5,
4.5)*+!DR
{4}
5595 \POS(
0,-
11.5)*
\xybox{
5596 \def\latticebody{\POS="c"+(
0,-
0.5)
\ar@
{--
}"c"+(
0,
5.5)
}%
5597 \POS0,
{\xylattice{-
5}{5}00}%
5598 \def\latticebody{\POS="c"+(-
5.5,
0)
\ar@
{--
}"c"+(
5.5,
0)
}%
5599 \POS0,
{\xylattice00{0}5}%
5600 \POS(
0,-
0.5)
\ar(
0,
5.5)
\POS(
0,
5.5)*+!UR
{p
}
5601 \POS(-
5.5,
0)
\ar(
5.5,
0)
\POS(
5.5,
0)*+!UR
{x_1
}
5602 \POS(-
2,
0)*
{\bullet}
5603 \POS(-
1,
0)*
{\bullet},*+!DL
{1}
5604 \POS(-
0,
0)*
{\bullet},*+!DL
{2}
5605 \POS(
1,
0)*
{\bullet},*+!DL
{3}
5606 \POS(
2,
0)*
{\bullet},*+!DL
{4}
5610 \POS(-
2,
1)*
{\bullet}
5611 \POS(-
1,
1)*
{\bullet},*+!DL
{1}
5612 \POS(-
0,
1)*
{\bullet},*+!DL
{2}
5613 \POS(
1,
1)*
{\bullet},*+!DL
{3}
5614 \POS(
2,
1)*
{\bullet},*+!DL
{4}
5618 \POS(-
1,
2)*
{\bullet}
5619 \POS(-
0,
2)*
{\bullet},*+!DL
{1}
5620 \POS(
1,
2)*
{\bullet},*+!DL
{2}
5625 \POS(-
1,
3)*
{\bullet}
5626 \POS(-
0,
3)*
{\bullet},*+!DL
{1}
5627 \POS(
1,
3)*
{\bullet},*+!DL
{2}
5632 \POS(-
0,
4)*
{\bullet}
5638 \POS(-
0,
5)*
{\bullet}
5644 \POS(-
6,-
0.5)
\ar(-
6,
5.5)
\POS(-
6,
5.5)*+!UL
{p
}
5645 \POS(-
6,
0)*
{\bullet}
5646 \POS(-
6,
1)*
{\bullet}
5647 \POS(-
6,
2)*
{\bullet}
5648 \POS(-
6,
3)*
{\bullet}
5649 \POS(-
6,
4)*
{\bullet}
5650 \POS(-
6,
5)*
{\bullet}
5653 \caption{The transformed parametric polytope from Example~
\ref{ex:projection
}
5654 for $
0 \le p
\le 5$
}
5655 \label{f:ex:projection:transformed
}
5658 The first step is to compute the lattice width of $P(p)$.
5659 In Example~
\ref{ex:width:
2}, we already obtained the decomposition
5660 of the parameter domain into
5663 \hat C_1 &= \
{\, p
\mid 0 \le p
\le 5 \,\
} \\
5664 \hat C_2 &= \
{\, p
\mid -
5 \le p
\le -
1 \,\
}
5668 with corresponding lattice widths and lattice width directions
5671 \vec c_1 &= (
0,
1) & w_
{\vec c_1
}(p) &=
5-p \\
5672 \vec c_2 &= (
1,
0) & w_
{\vec c_2
}(p) &=
5+p
5676 Note that in this example, the gaps in both coordinate directions
5677 are $
1$, so, in principle, there is no need to perform any unimodular
5678 transformation here. Nevertheless, we will apply the transformation
5679 that would be applied by the algorithm.
5680 On the first domain, we extend the lattice width direction
5681 to the unimodular matrix
5689 After application to the existentially quantified variables $
\vec x$,
5690 we obtain the parametric polytope
5695 -
2 x_2 + p +
5 &
\ge 0 \\
5696 2 x_2 + p +
5 &
\ge 0 \\
5697 -
2 x_1 - p +
5 &
\ge 0 \\
5698 2 x_1 - p +
5 &
\ge 0 \\
5703 shown in the top part of
\autoref{f:ex:projection:transformed
}.
5704 We now temporarily remove the existential quantification on $x_1$,
5707 T' = \
{ (p, x_1)
\in \ZZ^
2 \mid \exists x_2
\in \ZZ : (s,
\vec x)
\in P' \
}
5710 Since there is only one existentially quantified variable left,
5711 we know we only have to shift and subtract the set once to obtain
5712 a set with at most one value of $x_2$ associated to each value
5714 In particular, let $f(x,z_1,z_2)$ be the generating function
5715 of the integer points in $P'$. Then $g(x,z_1) = f'(x,z_1,
1)$, with
5716 $f'(x,z_1,z_2) = f(x,z_1,z_2) - f(x,z_1,z_2)
\star z_2 f(x,z_1,z_2)$,
5717 is the generating function of $T'$.
5719 To check whether we need to subtract any shifted copies of
5720 $g(x,z_1)$ from itself, we compute
5722 h(x,z_1) = g(x,z_1)
\star \frac{z_1 \, g(x,z_1)
}{1-z_1
}
5725 The second argument of this Hadamard product is depicted
5726 in
\autoref{f:ex:projection:transformed
} by its coefficients.
5727 The exponents in $h(x,z_1)$ that have a non-zero coefficient
5728 are therefore those marked by both a dot ($
\bullet$) and
5729 a number. The total sum can be computed as $h(
1,
1) =
26$,
5730 which is finite, but non-zero. We therefore need to subtract
5731 at least one shifted copy of $g(x,z_1)$.
5734 g'(x,z_1) = g(x,z_1) - g(x,z_1)
\star z_1 g(x,z_1)
5739 h'(x,z_1) = g'(x,z_1)
\star \frac{z_1^
2 \, g(x,z_1)
}{1-z_1
}
5742 we would find that $h'(
1,
1) =
0$ and so we do not need
5743 to shift and subtract any further.
5744 However, since we are dealing with a two-dimensional problem,
5745 we already know from
\autoref{l:gap
} that we can stop
5746 after one shift and subtract, so we do not even need
5747 to compute $h'(x,z_1)$ here.
5748 The function $g'(x,z_1)$ now only has non-zero coefficients
5749 for at most one exponent of $z_1$ for each exponent of $x$.
5750 We may therefore project down to obtain
5751 the function $g'(x,
1)$, which is the generating function
5752 of the set in the lower left part of
\autoref{f:ex:projection:transformed
}.
5754 For the chamber $
\hat C_2$ of the parameter domain, the computations
5755 are nearly identical and the final result is simply the sum
5756 of the two generating functions found for each of the two (disjoint)