doc: document new options and new applications
[barvinok.git] / doc / implementation.tex
blob28f32256ebf1aae483307afcacbd9823afd5b260
1 \section{Implementation details}
3 \subsection{An interior point of a polyhedron}
4 \label{s:interior}
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
11 the \ai{barycenter}
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}
20 \label{s:fundamental}
22 This section is based on \shortciteN[Lemma 5.1]{Barvinok1992volume} and
23 \shortciteN{Koeppe2006experiments}.
25 \sindex{simple}{cone}
26 \sindex{open}{facet}
27 \sindex{open}{ray}
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.
31 \index{open facet}%
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
37 is simple.)
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$
43 of $K$ is
45 \Pi = \vec v +
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$.
51 \end{definition}
53 \begin{lemma}[Integer points in the fundamental parallelepiped of a simple cone]
54 \label{l:fundamental}
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$
57 as rows.
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
61 \begin{eqnarray}
62 \label{eq:parallelepiped}
63 \vec w^\T & = & \vec v^\T + \fractional{(\vec k^\T W - \vec v^\T) A^{-1}} A
65 \nonumber
66 & = &
67 \vec v^\T +
68 \sum_{i=1}^d
69 \fractional{\sps{\sum_{j=1}^d k_j \vec w^\T_j - \vec v^\T}{\vec u^*_i}}
70 \vec u_i^\T,
71 \end{eqnarray}
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$.
74 \end{lemma}
76 \begin{proof}
77 Since $0 \le \fractional{x} < 1$, it is clear that each such $\vec w$
78 lies inside the fundamental parallelepiped.
79 Furthermore,
80 \begin{eqnarray*}
81 \vec w^\T & = & \vec v^\T + \fractional{(\vec k^\T W - \vec v^\T) A^{-1}} A
83 & = &
84 \vec v^T +
85 \left(
86 (\vec k^\T W - \vec v^\T) A^{-1} - \floor{(\vec k^\T W - \vec v^\T) A^{-1}}
87 \right) A
89 & = &
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}.
94 \end{eqnarray*}
95 Finally, if two such $\vec w$ are equal, i.e., $\vec w_1 = \vec w_2$,
96 then
97 \begin{eqnarray*}
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,
102 \end{eqnarray*}
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$.
107 \end{proof}
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.
115 \begin{figure}
116 \intercol=1.2cm
117 \begin{xy}
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{}}
121 \POS(-1,0)\ar(4.5,0)
122 \POS(0,-3)\ar(0,3)
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)
127 \POS(0,0)*{\bullet}
128 \POS(1,0)*{\bullet}
129 \end{xy}
130 \caption{The integer points in the fundamental parallelepiped of $K$}
131 \label{f:parallelepiped}
132 \end{figure}
134 \begin{example}
135 Let $K$ be the cone
137 K = \sm{0 \\ 0} + \poshull \lb\, \sm{2 \\ 1}, \sm{0 \\ -1} \,\rb
140 shown in Figure~\ref{f:parallelepiped}.
141 Then
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}$.
151 Therefore,
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}
157 \begin{eqnarray*}
158 \vec w_2^\T & = &
159 \fractional{\sm{0 & 1} \sm{2 & 1 \\ 1 & 0} \sm{1/2 & 1/2 \\ 0 & -1 }}
160 \sm{2 & 1\\0 & -1}
162 & = &
163 \sm{1/2 & 1/2} \sm{2 & 1\\0 & -1} = \sm{1 & 0}.
164 \end{eqnarray*}
165 \end{example}
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.,
192 \begin{equation}
193 \label{eq:K_j}
194 K_j =
195 \poshull \left(\lb\, \vec u_i \,\rb_{i=1}^d
196 \setminus \{\, \vec u_j \,\} \cup \{\, \vec w \,\}\right)
198 \end{equation}
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
210 \begin{equation}
211 \label{eq:sub}
212 \sum_{i=0}^k \beta_i \vec u_i =
213 \sum_{i=k+1}^{d'} \alpha_i \vec u_i
215 \end{equation}
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,
222 we have
223 \begin{equation}
224 \label{eq:opposite}
225 \frac {\alpha_j}{\alpha_j+\alpha_l} \vec u_j
227 \frac {\alpha_l}{\alpha_j+\alpha_l} \vec u_l
228 \in H
229 \qquad\text{for $\alpha_i \alpha_l > 0$}
231 \end{equation}
232 The corresponding cones $K_j$ and $K_l$ (with $K_0 = K$)
233 therefore intersect in a common face $F \subset H$.
234 Let
236 K' :=
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}).)
243 The cones
244 $\{\, K_i \,\}_{i=0}^k$
246 $\{\, K_i \,\}_{i=k+1}^{d'}$
247 therefore both form a triangulation of $K'$ and hence
248 \begin{equation}
249 \label{eq:triangulations}
250 \indf{K'}
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}
255 \end{equation}
257 \begin{equation}
258 \label{eq:decomposition}
259 \indf{K} = \sum_{i=1}^{d'} \varepsilon_i \indf{K_i} + \sum_j \delta_j \indf{F_j}
261 \end{equation}
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.
268 \begin{figure}
269 \intercol=0.48cm
270 \begin{center}
271 \begin{minipage}{0cm}
272 \begin{xy}
273 <\intercol,0pt>:<0pt,\intercol>::
275 \xybox{
276 \POS(-2,-1)="a"*+!U{+}
277 \POS(2,0)="b"*+!L{+}
278 \POS(0,2)="c"*+!D{+}
279 \POS(0,0)="w"*+!DR{\vec w}
280 \POS"a"\ar@{-}"b"
281 \POS"b"\ar@{-}"c"
282 \POS"c"\ar@{-}"a"
283 \POS"a"\ar@{--}"w"
284 \POS"b"\ar@{--}"w"
285 \POS"c"\ar@{--}"w"
286 }="a"
287 +R+(2,0)*!L
288 \xybox{
289 \POS(-2,-1)="a"*+!U{+}
290 \POS(2,0)="b"*+!L{-}
291 \POS(0,2)="c"*+!D{+}
292 \POS(-3,1)="w"*+!DR{\vec w}
293 \POS"a"\ar@{-}"b"
294 \POS"b"\ar@{-}"c"
295 \POS"c"\ar@{-}"a"
296 \POS"a"\ar@{--}"w"
297 \POS"b"\ar@{--}"w"
298 \POS"c"\ar@{--}"w"
299 }="b"
300 +R+(2,0)*!L
301 \xybox{
302 \POS(-2,-1)="a"*+!U{-}
303 \POS(2,0)="b"*+!U{+}
304 \POS(0,2)="c"*+!D{-}
305 \POS(5,-1)="w"*+!L{\vec w}
306 \POS"a"\ar@{-}"b"
307 \POS"b"\ar@{-}"c"
308 \POS"c"\ar@{-}"a"
309 \POS"a"\ar@{--}"w"
310 \POS"b"\ar@{--}"w"
311 \POS"c"\ar@{--}"w"
313 \POS"a"
314 +D-(0,1)*!U
315 \xybox{
316 \POS(-2,-1)="a"*+!U{0}
317 \POS(2,0)="b"*+!L{+}
318 \POS(0,2)="c"*+!D{+}
319 \POS(1,1)="w"*+!DL{\vec w}
320 \POS"a"\ar@{-}"b"
321 \POS"b"\ar@{-}"c"
322 \POS"c"\ar@{-}"a"
323 \POS"a"\ar@{--}"w"
325 \POS"b"
326 +DL-(0,1)*!UL
327 \xybox{
328 \POS(-2,-1)="a"*+!U{0}
329 \POS(2,0)="b"*+!U{+}
330 \POS(0,2)="c"*+!D{-}
331 \POS(4,-2)="w"*+!L{\vec w}
332 \POS"a"\ar@{-}"b"
333 \POS"b"\ar@{-}"c"
334 \POS"c"\ar@{-}"a"
335 \POS"a"\ar@{--}"w"
336 \POS"b"\ar@{--}"w"
338 \end{xy}
339 \end{minipage}
340 \end{center}
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.}
345 \label{fig:w}
346 \end{figure}
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}
352 Let
353 \begin{equation}
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
356 \end{equation}
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
369 \begin{equation}
370 \label{eq:half-open-by-y}
371 \begin{aligned}
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\}.
377 \end{aligned}
378 \end{equation}
379 Then
380 \begin{equation}
381 \label{eq:target-identity}
382 \sum_{i\in I_1} \epsilon_i [\tilde P_i] = 0.
383 \end{equation}
384 \end{proposition}
385 When applying this proposition to (\ref{eq:decomposition}), we obtain
386 \begin{equation}
387 \label{eq:decomposition:2}
388 \indf{\tilde K} = \sum_{i=1}^{d'} \varepsilon_i \indf{\tilde K_i}
390 \end{equation}
391 where we start out
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
400 of the proposition.
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
409 $\tilde K$.
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
421 to the chosen order.
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$.
432 \begin{figure}
433 \begin{align*}
434 \intercol=0.48cm
435 \begin{xy}
436 <\intercol,0pt>:<0pt,\intercol>::
437 \POS(-2,-1)="a"*+!U{+}
438 \POS(2,0)="b"*+!L{+}
439 \POS(0,2)="c"*+!D{+}
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}
444 \end{xy}
446 \intercol=0.48cm
447 \begin{xy}
448 <\intercol,0pt>:<0pt,\intercol>::
449 \POS(2,0)="b"*+!L{+}
450 \POS(0,2)="c"*+!D{+}
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}
456 \end{xy}
458 \begin{xy}
459 <\intercol,0pt>:<0pt,\intercol>::
460 \POS(-2,-1)="a"*+!U{+}
461 \POS(0,2)="c"*+!D{+}
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}
467 \end{xy}
469 \begin{xy}
470 <\intercol,0pt>:<0pt,\intercol>::
471 \POS(-2,-1)="a"*+!U{+}
472 \POS(2,0)="b"*+!L{+}
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}
478 \end{xy}
480 \intercol=0.48cm
481 \begin{xy}
482 <\intercol,0pt>:<0pt,\intercol>::
483 \POS(-2,-1)="a"*+!U{+}
484 \POS(2,0)="b"*+!L{+}
485 \POS(0,2)="c"*+!D{+}
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}
490 \end{xy}
492 \intercol=0.48cm
493 \begin{xy}
494 <\intercol,0pt>:<0pt,\intercol>::
495 \POS(2,0)="b"*+!L{+}
496 \POS(0,2)="c"*+!D{+}
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}
502 \end{xy}
504 \begin{xy}
505 <\intercol,0pt>:<0pt,\intercol>::
506 \POS(-2,-1)="a"*+!U{+}
507 \POS(0,2)="c"*+!D{+}
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}
513 \end{xy}
515 \begin{xy}
516 <\intercol,0pt>:<0pt,\intercol>::
517 \POS(-2,-1)="a"*+!U{+}
518 \POS(2,0)="b"*+!L{+}
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}
524 \end{xy}
526 \intercol=0.48cm
527 \begin{xy}
528 <\intercol,0pt>:<0pt,\intercol>::
529 \POS(-2,-1)="a"*+!U{+}
530 \POS(2,0)="b"*+!L{+}
531 \POS(0,2)="c"*+!D{+}
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}
536 \end{xy}
538 \intercol=0.48cm
539 \begin{xy}
540 <\intercol,0pt>:<0pt,\intercol>::
541 \POS(2,0)="b"*+!L{+}
542 \POS(0,2)="c"*+!D{+}
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}
548 \end{xy}
550 \begin{xy}
551 <\intercol,0pt>:<0pt,\intercol>::
552 \POS(-2,-1)="a"*+!U{+}
553 \POS(0,2)="c"*+!D{+}
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}
559 \end{xy}
561 \begin{xy}
562 <\intercol,0pt>:<0pt,\intercol>::
563 \POS(-2,-1)="a"*+!U{+}
564 \POS(2,0)="b"*+!L{+}
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}
570 \end{xy}
572 \intercol=0.48cm
573 \begin{xy}
574 <\intercol,0pt>:<0pt,\intercol>::
575 \POS(-2,-1)="a"*+!U{0}
576 \POS(2,0)="b"*+!L{+}
577 \POS(0,2)="c"*+!D{+}
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}
582 \end{xy}
584 \intercol=0.48cm
585 \begin{xy}
586 <\intercol,0pt>:<0pt,\intercol>::
587 \POS(-2,-1)="a"*+!U{0}
588 \POS(2,0)="b"*+!L{+}
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}
594 \end{xy}
596 \begin{xy}
597 <\intercol,0pt>:<0pt,\intercol>::
598 \POS(-2,-1)="a"*+!U{0}
599 \POS(0,2)="c"*+!D{+}
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}
605 \end{xy}
607 \intercol=0.48cm
608 \begin{xy}
609 <\intercol,0pt>:<0pt,\intercol>::
610 \POS(-2,-1)="a"*+!U{0}
611 \POS(2,0)="b"*+!U{+}
612 \POS(0,2)="c"*+!D{-}
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}
617 \end{xy}
619 \intercol=0.48cm
620 \begin{xy}
621 <\intercol,0pt>:<0pt,\intercol>::
622 \POS(-2,-1)="a"*+!U{0}
623 \POS(0,2)="c"*+!D{-}
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}
629 \end{xy}
631 \begin{xy}
632 <\intercol,0pt>:<0pt,\intercol>::
633 \POS(-2,-1)="a"*+!U{0}
634 \POS(2,0)="b"*+!U{+}
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}
640 \end{xy}
642 \intercol=0.48cm
643 \begin{xy}
644 <\intercol,0pt>:<0pt,\intercol>::
645 \POS(-2,-1)="a"*+!U{0}
646 \POS(2,0)="b"*+!U{+}
647 \POS(0,2)="c"*+!D{-}
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}
652 \end{xy}
654 \intercol=0.48cm
655 \begin{xy}
656 <\intercol,0pt>:<0pt,\intercol>::
657 \POS(-2,-1)="a"*+!U{0}
658 \POS(0,2)="c"*+!D{-}
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}
664 \end{xy}
666 \begin{xy}
667 <\intercol,0pt>:<0pt,\intercol>::
668 \POS(-2,-1)="a"*+!U{0}
669 \POS(2,0)="b"*+!U{+}
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}
675 \end{xy}
676 \end{align*}
677 \caption{Examples of decompositions in primal space.}
678 \label{fig:primal:examples}
679 \end{figure}
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
704 $a_k, b_k > 0$.
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$
707 then either
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$.
712 Similarly,
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$
715 then either
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
721 such that
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
736 negative.
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
769 or~5.
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$.
777 \begin{figure}
778 \intercol=0.7cm
779 \begin{minipage}{0cm}
780 \begin{xy}
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}
792 \POS(0,0)*{\bullet}
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}
799 \end{xy}
800 \end{minipage}
801 \begin{minipage}{0cm}
802 \begin{xy}
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}
814 \POS(0,0)*{\bullet}
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}
821 \end{xy}
822 \end{minipage}
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$.}
826 \label{fig:w:same}
827 \end{figure}
829 \begin{figure}
830 \intercol=0.7cm
831 \begin{minipage}{0cm}
832 \begin{xy}
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}
845 \POS(0,0)*{\bullet}
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}
852 \end{xy}
853 \end{minipage}
854 \begin{minipage}{0cm}
855 \begin{xy}
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}
868 \POS(0,0)*{\bullet}
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}
875 \end{xy}
876 \end{minipage}
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}
881 \end{figure}
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
885 $\vec u_0 = \vec w$.
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$.
890 \begin{algorithm}
891 \begin{tabbing}
892 next \= next \= next \= \kill
893 if $\alpha_j = 0$ \\
894 \> closed[$K_i$][$\vec u_j$] := closed[$\tilde K$][$\vec u_j$] \\
895 else if $i = j$ \\
896 \> if $\alpha_j > 0$ \\
897 \> \> closed[$K_i$][$\vec u_j$] := closed[$\tilde K$][$\vec u_j$] \\
898 \> else \\
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$ \\
903 \> else \\
904 \> \> closed[$K_i$][$\vec u_j$] := closed[$\tilde K$][$\vec u_j$] \\
905 else \\
906 \> closed[$K_i$][$\vec u_j$] := closed[$\tilde K$][$\vec u_i$] and
907 closed[$\tilde K$][$\vec u_j$]
908 \end{tabbing}
909 \caption{Determine whether the facet opposite $\vec u_j$ is closed in $K_i$.}
910 \label{alg:closed}
911 \end{algorithm}
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
920 facets.
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
928 normal.
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.
935 \begin{definition}
936 \label{d:periodic:1}
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$.
941 \end{definition}
943 \begin{definition}
944 \label{d:qp:1}
945 A (univariate)
946 \defindex{quasi-polynomial}\/ $f$ of degree $d$ is
947 a function
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.
957 \end{definition}
959 Other authors (e.g., \shortciteNP{Stanley1986})
960 use the following definition of a quasi-polynomial.
961 \begin{definition}
962 \label{d:qp:1:list}
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
966 that
968 f (s) = g_i(s) \qquad \hbox{if $s \equiv i \mod {q}$}
971 The functions $g_i$ are called the {\em constituents}.
972 \index{constituent}
973 \end{definition}
975 In our implementation, we use Definition~\ref{d:qp:1},
976 but whereas
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
982 quasi-polynomials.
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
994 of constituents.
995 \begin{definition}
996 \label{d:qp}
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
1001 that
1003 f (\vec s) = g_{\vec i}(\vec s) \qquad \hbox{if $\vec s \equiv \vec i \mod L$}
1006 \end{definition}
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
1019 \begin{bmatrix}
1020 \vec p \\ t
1021 \end{bmatrix}
1023 \begin{bmatrix}
1024 U_1 \\ U_2
1025 \end{bmatrix}
1026 \vec x
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
1047 \begin{cases}
1048 \frac s 2 + \frac t 2 + 1 &
1049 \text{if $\begin{bmatrix}s \\ t \end{bmatrix} \in
1050 \begin{bmatrix}
1051 -1 & -2 \\ 1 & 0
1052 \end{bmatrix}
1053 \ZZ^2 +
1054 \begin{bmatrix}
1055 0 \\ 0
1056 \end{bmatrix}
1059 \frac s 2 + \frac t 2 + \frac 1 2 &
1060 \text{if $\begin{bmatrix}s \\ t \end{bmatrix} \in
1061 \begin{bmatrix}
1062 -1 & -2 \\ 1 & 0
1063 \end{bmatrix}
1064 \ZZ^2 +
1065 \begin{bmatrix}
1066 -1 \\ 0
1067 \end{bmatrix}
1070 \end{cases}
1072 The corresponding output of \ai[\tt]{barvinok\_enumerate} is
1073 \begin{verbatim}
1074 s + t >= 0
1075 1 >= 0
1077 Lattice:
1078 [[-1 1]
1079 [-2 0]
1081 [0 0]
1082 ( 1/2 * s + ( 1/2 * t + 1 )
1084 [-1 0]
1085 ( 1/2 * s + ( 1/2 * t + 1/2 )
1087 \end{verbatim}
1088 \end{example}
1090 \subsection{Left inverse of an affine embedding}
1091 \label{s:inverse}
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,
1097 i.e.,
1099 \begin{bmatrix}
1100 \vec x \\ 1
1101 \end{bmatrix}
1103 \begin{bmatrix}
1104 T & \vec v \\ \vec 0^\T & 1
1105 \end{bmatrix}
1106 \begin{bmatrix}
1107 \vec x' \\ 1
1108 \end{bmatrix}
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
1118 \begin{bmatrix}
1119 \vec x' \\ 1
1120 \end{bmatrix}
1122 \begin{bmatrix}
1123 A & \vec b \\ \vec 0^\T & d
1124 \end{bmatrix}
1125 \begin{bmatrix}
1126 \vec x \\ 1
1127 \end{bmatrix}
1130 To compute this left inverse, we first compute the
1131 (right) \indac{HNF} of T,
1133 \begin{bmatrix}
1134 U_1 \\ U_2
1135 \end{bmatrix}
1138 \begin{bmatrix}
1139 H \\ 0
1140 \end{bmatrix}
1143 The left inverse is then simply
1145 \begin{bmatrix}
1146 d H^{-1}U_1 & -d H^{-1} \vec v \\ \vec 0^\T & d
1147 \end{bmatrix}
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
1153 \begin{bmatrix}
1154 U_2 & - U_2 \vec v \\ \vec 0^T & 1
1155 \end{bmatrix}
1156 \begin{bmatrix}
1157 \vec x \\ 1
1158 \end{bmatrix}
1160 \vec 0
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'$,
1172 \begin{bmatrix}
1173 M_1 \\ 0
1174 \end{bmatrix}
1176 \begin{bmatrix}
1177 H & 0 \\ 0 & 0
1178 \end{bmatrix}
1179 \begin{bmatrix}
1180 Q_1 \\ Q_2
1181 \end{bmatrix}
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
1186 an integral basis.
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
1192 \begin{bmatrix}
1193 M_1 \\ Q_2
1194 \end{bmatrix}
1196 \begin{bmatrix}
1197 H & 0 \\ 0 & I_{n-m,n-m}
1198 \end{bmatrix}
1199 \begin{bmatrix}
1200 Q_1 \\ Q_2
1201 \end{bmatrix}
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}
1210 \label{s:revlexpos}
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.,
1244 A = H Q
1247 with $H$ lower-triangular with positive diagonal elements and
1248 $Q$ unimodular.
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
1254 is given by
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' =
1282 \begin{bmatrix}
1283 L & L^\perp
1284 \end{bmatrix}
1285 \begin{bmatrix}
1286 0 \\ I
1287 \end{bmatrix}
1288 \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
1295 \vec p' =
1296 L^{-\perp}
1297 \vec p =
1298 \begin{bmatrix}
1299 0 & I
1300 \end{bmatrix}
1301 \begin{bmatrix}
1302 L & L^\perp
1303 \end{bmatrix}^{-1}
1304 \vec p
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},
1313 \vec p = C \vec p'
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.
1348 Note first that
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
1362 \begin{equation}
1363 \label{eq:volume}
1364 \vol P =
1365 \frac 1 {d!}
1366 \left|
1367 \det
1368 \begin{bmatrix}
1369 v_{11}(\vec p) - v_{01}(\vec p) &
1370 v_{12}(\vec p) - v_{02}(\vec p) &
1371 \ldots &
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) &
1376 \ldots &
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) &
1383 \ldots &
1384 v_{dd}(\vec p) - v_{0d}(\vec p)
1385 \end{bmatrix}
1386 \right|.
1387 \end{equation}
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)
1398 of $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
1404 is a simplex.
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
1417 an extra dimension.
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}
1449 \label{s:division}
1451 If $P(t)$ and $Q(t)$ are two Maclaurin series
1452 \begin{align*}
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
1456 \end{align*}
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
1484 \begin{equation}
1485 \label{eq:rgf}
1486 f(\vec x)=
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)}
1491 \end{equation}
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},
1523 g(t) =
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
1531 g(t) =
1532 (-1)^d
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}
1536 {1-e^{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
1541 \begin{equation}
1542 \label{eq:todd}
1543 \prod_{j=1}^d \frac{-c_j t}
1544 {1-e^{c_j t}}
1546 \sum_{m=0}^{\infty} \todd_m(-c_1, \ldots, -c_d) t^m
1548 \end{equation}
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}
1554 \left(
1555 \sum_{n=0}^{\infty}\frac{\sum_{k=1}^{r} a_k^n}{n!}
1556 \right)
1557 \left(
1558 \sum_{m=0}^{\infty} \todd_m(-c_1, \ldots, -c_d) t^m
1559 \right)
1562 with constant term
1563 \begin{multline}
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
1568 = \\
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)
1572 \end{multline}
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
1579 \mod t^{d+1}
1582 where we have
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},
1589 we find
1590 \begin{equation}
1591 \label{eq:t-exp-1}
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
1596 \end{equation}
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
1622 from which
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$.
1636 \begin{example}
1637 Consider the \rgf/
1638 \begin{multline*}
1639 \f T x =
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})}
1643 + {} \\
1644 \frac1{(1-x_1)(1-x_2)}
1645 \end{multline*}
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 =
1652 \frac 1 6
1653 \begin{bmatrix}
1654 6 & 3 & 1
1655 \end{bmatrix}
1659 \frac t{e^t -1} \equiv
1660 \begin{bmatrix}
1661 \displaystyle\frac{-1}{1} & \displaystyle\frac{3}{6} & \displaystyle\frac{-3}{36}
1662 \end{bmatrix}
1665 where we represent each truncated power series by a vector of its
1666 coefficients.
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}$
1670 and obtain
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})}
1679 We have
1680 \begin{align*}
1681 \frac{t}{1-e^{- t}} & =
1682 \begin{bmatrix}
1683 \displaystyle\frac{-1}{1} & \displaystyle\frac{-3}{6} & \displaystyle\frac{-3}{36}
1684 \end{bmatrix}
1686 \frac{2t}{1-e^{-2 t}} & =
1687 \begin{bmatrix}
1688 \displaystyle\frac{-1}{1} & \displaystyle\frac{-6}{6} & \displaystyle\frac{-12}{36}
1689 \end{bmatrix}
1691 \frac{-t}{1-e^{t}} & =
1692 \begin{bmatrix}
1693 \displaystyle\frac{-1}{1} & \displaystyle\frac{3}{6} & \displaystyle\frac{-3}{36}
1694 \end{bmatrix}
1696 \frac{-2t}{1-e^{2t}} & =
1697 \begin{bmatrix}
1698 \displaystyle\frac{-1}{1} & \displaystyle\frac{6}{6} & \displaystyle\frac{-12}{36}
1699 \end{bmatrix}
1701 \end{align*}
1702 The first term in the \rgf/ evaluates to
1703 \begin{align*}
1705 \frac 1{-1 \cdot -2}
1706 \begin{bmatrix}
1707 \displaystyle\frac{1}{1} & \displaystyle\frac{2}{1} & \displaystyle\frac{4}{2}
1708 \end{bmatrix}
1710 \left(
1711 \begin{bmatrix}
1712 \displaystyle\frac{-1}{1} & \displaystyle\frac{-3}{6} & \displaystyle\frac{-3}{36}
1713 \end{bmatrix}
1714 \begin{bmatrix}
1715 \displaystyle\frac{-1}{1} & \displaystyle\frac{-6}{6} & \displaystyle\frac{-12}{36}
1716 \end{bmatrix}
1717 \right)
1719 = {} &
1720 \frac 1{2}
1721 \begin{bmatrix}
1722 \displaystyle\frac{1}{1} & \displaystyle\frac{2}{1} & \displaystyle\frac{4}{2}
1723 \end{bmatrix}
1725 \begin{bmatrix}
1726 \displaystyle\frac{1}{1} & \displaystyle\frac{9}{6} & \displaystyle\frac{33}{36}
1727 \end{bmatrix}
1729 = {} &
1730 \frac 1{72}
1731 \begin{bmatrix}
1732 1 & 2 \cdot 6 & 4 \cdot 18
1733 \end{bmatrix}
1735 \begin{bmatrix}
1736 1 & 9 & 33
1737 \end{bmatrix}
1738 = \frac {213}{72} = \frac{71}{24}
1740 \end{align*}
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}
1745 \begin{bmatrix}
1746 1 & 0 \cdot 6 & 0 \cdot 18
1747 \end{bmatrix}
1749 \begin{bmatrix}
1750 1 & 0 & -3
1751 \end{bmatrix}
1753 \frac{-3}{-36} = \frac 1{12}
1756 The sum is
1758 \frac{71}{24} + \frac{71}{24} + \frac 1{12} = 6
1761 \end{example}
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}.
1788 \begin{table}
1789 \begin{center}
1790 \begin{tabular}{rrrrrrr}
1791 \hline
1793 \multicolumn{3}{c}{Dual decomposition} &
1794 \multicolumn{3}{c}{Primal decomposition}
1797 & \multicolumn{2}{c}{Time (s)} &
1798 & \multicolumn{2}{c}{Time (s)}
1800 \cline{3-4}
1801 \cline{6-7}
1802 Max.\ index & Cones & Poly & Exp & Cones & Poly & Exp \\
1803 \hline
1804 \multicolumn{7}{c}{{\tt hickerson-12}}
1806 \hline
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
1825 \hline
1826 \multicolumn{7}{c}{{\tt hickerson-13}}
1828 \hline
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
1849 \hline
1850 \multicolumn{7}{c}{{\tt hickerson-14}}
1852 \hline
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
1873 \hline
1874 \end{tabular}
1875 \caption{Timing results of dual and primal decomposition with
1876 polynomial or exponential substitution on the Hickerson examples}
1877 \label{t:hickerson}
1878 \end{center}
1879 \end{table}
1881 \subsection{Approximate Enumeration using Nested Sums}
1882 \label{s:nested}
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)$,
1889 and computing
1890 \begin{equation}
1891 \label{eq:nested:sum}
1892 Q(\vec{\hat x}) = \sum_{x_1 = L(\vec{\hat x})}^{U(\vec{\hat x})} p(\vec x)
1894 \end{equation}
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
1925 \begin{equation}
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}
1928 =: S_n(m)
1930 \end{equation}
1931 with $B_i$ the \ai{Bernoulli number}s, which can be computed
1932 using the recurrence
1933 \begin{equation}
1934 \label{eq:Bernoulli}
1935 \sum_{j=0}^m{m+1\choose{j}}B_j = 0
1936 \qquad B_0 = 1
1938 \end{equation}
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
1947 cases.
1948 \begin{enumerate}
1949 \item $l(\vec {\hat x}) \ge 1$
1951 \begin{align*}
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})
1955 \left(
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
1959 \right)
1962 \alpha_n(\vec{\hat x})
1963 \left( S_n(u(\vec{\hat x})+1) - S_n(l(\vec {\hat x})) \right)
1964 \end{align*}
1966 \item $u(\vec{\hat x}) \le -1$
1968 \begin{align*}
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)
1977 \end{align*}
1979 \item $l(\vec {\hat x}) \le 0$ and $u(\vec{\hat x}) \ge 0$
1981 \begin{align*}
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})
1985 \left(
1986 \sum_{x_1 = 0}^{u(\vec{\hat x})} x_1^n
1988 (-1)^n
1989 \sum_{x_1 = 1}^{-l(\vec {\hat x})} x_1^n
1990 \right)
1993 \alpha_n(\vec{\hat x})
1994 \left(
1995 S_n(u(\vec{\hat x})+1)
1997 (-1)^n
1998 S_n(-l(\vec{\hat x})+1)
1999 \right)
2000 \end{align*}
2002 \setcounter{saveenumi}{\value{enumi}}
2003 \end{enumerate}
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.
2015 \begin{enumerate}
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})
2032 (-1)^n
2033 S_n(-l(\vec{\hat x})+1)
2036 \end{enumerate}
2038 \subsection{Summation using local Euler-Maclaurin formula}
2039 \label{s:euler}
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) =
2057 \begin{cases}
2058 c_1(\vec p)(\vec x) & \text{if $\vec x \in D_1(\vec p)$}
2060 \vdots
2062 c_r(\vec p)(\vec x) & \text{if $\vec x \in D_r(\vec p)$}
2064 \end{cases}
2066 with the $c_i$ polynomials, $c_i \in (\QQ[\vec p])[\vec x]$, and
2067 the $D_i$ disjoint linearly parametric polytopes.
2068 We want to compute
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
2086 polytope $D_i$.
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$.
2099 Again, we have
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}
2121 \begin{equation}
2122 \label{eq:EML}
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)
2127 \end{equation}
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}
2161 \begin{equation}
2162 \label{eq:mu:1}
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
2166 \end{equation}
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
2179 \begin{aligned}
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)
2187 \end{aligned}
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)}$.
2197 Similarly we find
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
2204 \begin{aligned}
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))
2214 \end{aligned}
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:
2233 \iint_{P(\vec p)}
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)$
2240 then
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
2254 \begin{vmatrix}
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
2258 \end{vmatrix}
2259 \ge 0
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)$.
2271 That is,
2272 \begin{equation}
2273 \label{eq:EML:int}
2274 \int_F M(\vec p)(x,y) \, dy
2276 \int_0^{k(\vec p)}
2277 M(\vec p)(v_{1,1}(\vec p) + \lambda f_1,
2278 v_{1,2}(\vec p) + \lambda f_2)
2279 f_2 \, d\lambda
2281 \end{equation}
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:
2290 \begin{equation}
2291 \label{eq:EML:facet:coordinates}
2292 \vec v(\vec p)
2294 \begin{bmatrix}
2295 \vec f & \vec n
2296 \end{bmatrix}
2297 \vec a(\vec p)
2299 \begin{bmatrix}
2300 -n_2 & n_1 \\
2301 n_1 & n_2
2302 \end{bmatrix}
2303 \vec a(\vec p)
2304 \end{equation}
2306 \begin{equation}
2307 \label{eq:EML:facet:coordinates:2}
2308 \vec a(\vec p)
2310 \begin{bmatrix}
2311 -n_2 & n_1 \\
2312 n_1 & n_2
2313 \end{bmatrix}^{-1}
2314 \vec v(\vec p)
2316 \begin{bmatrix}
2317 -n_2/d & n_1/d \\
2318 n_1/d & n_2/d
2319 \end{bmatrix}
2320 \vec v(\vec p),
2321 \end{equation}
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
2329 d a_2(\vec p) =
2330 \begin{bmatrix}
2331 n_1 & n_2
2332 \end{bmatrix}
2333 \vec v(\vec p)
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
2339 find
2340 \begin{align*}
2341 D_{P(\vec p), F(\vec p)}
2343 -\sum_{n=0}^\infty
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
2352 \end{align*}
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.
2387 For an affine cone
2388 \begin{align*}
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,
2392 \end{align*}
2393 with
2395 \vec a(\vec p) =
2396 \begin{bmatrix}
2397 \vec r_1 & \vec r_2
2398 \end{bmatrix}^{-1}
2399 \vec v(\vec p)
2402 we have~\cite[Proposition~31]{Berline2006local},
2403 \begin{equation}
2404 \label{eq:mu:2}
2405 \mu(K)(\vec\xi)
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)
2410 - \frac 1{y_1 y_2},
2411 \end{equation}
2412 with
2414 B(y,t) =
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
2424 \begin{align*}
2425 \mu(K)(\vec\xi)
2427 \left(
2428 -\frac{b(0,t1)}{y_1} - \sum_{n=0}^\infty \frac{b(n+1,t_1)}{(n+1)!} y_1^n
2429 \right)
2430 \left(
2431 -\frac{b(0,t2)}{y_2} - \sum_{n=0}^\infty \frac{b(n+1,t_2)}{(n+1)!} y_2^n
2432 \right)
2434 & \phantom{=}
2436 \left(
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}
2440 \right)
2442 & \phantom{=}
2444 \left(
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}
2448 \right)
2450 & \phantom{=}
2451 - \frac 1{y_1 y_2}
2454 \sum_{n_1=0}^\infty
2455 \sum_{n_2=0}^\infty
2456 c(C_1, C_2, t_1, t_2; n_1, n_2) \, y_1^n y_2^n
2458 \end{align*}
2459 with
2460 \begin{align*}
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}
2475 \end{align*}
2476 For $\vec \xi = \vec D$, we have
2477 \begin{align*}
2478 y_1^n y_2^n
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}
2484 \left(
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}
2486 \right)
2487 \left(
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}
2489 \right)
2490 \end{align*}
2491 and so
2493 D_{P(\vec p), \vec v(\vec p)} = \mu(K)(\vec D)
2497 \sum_{i=0}^\infty
2498 \sum_{j=0}^\infty
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))
2512 with $
2513 h'(\vec p)(\vec x) = D_{P(\vec p), \vec v(\vec p)} \cdot h(\vec p)(\vec x)
2516 \begin{example}
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
2530 \begin{figure}
2531 \intercol=1.2cm
2532 \begin{xy}
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)}
2539 \POS(2,4)*{\cdot}
2540 \POS(3,4)*{\cdot}
2541 \POS(2,5)*{\cdot}
2542 \POS(-1,0)\ar(4,0)
2543 \POS(0,-1)\ar(0,5.5)
2544 \end{xy}
2545 \caption{Sum of polynomial $x_1 x_2$ over the integer points in a triangle $T$}
2546 \label{f:EML:triangle}
2547 \end{figure}
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
2555 the following.
2557 \marginpar{%
2558 \intercol=1cm
2559 \begin{xy}
2560 <\intercol,0pt>:<0pt,\intercol>::
2561 \POS(0,-1)*\xybox{
2562 \POS@i@={(0,0),(1,0),(0,1),(0,0)},{0*\xypolyline{--}}
2563 \POS(0,0)\ar@[|(2)](1,0)
2565 \end{xy}
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.
2570 \marginpar{%
2571 \intercol=1cm
2572 \begin{xy}
2573 <\intercol,0pt>:<0pt,\intercol>::
2574 \POS(0,-1)*\xybox{
2575 \POS@i@={(0,0),(1,0),(0,1),(0,0)},{0*\xypolyline{--}}
2576 \POS(1,0)\ar@[|(2)](0,1)
2578 \end{xy}
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
2584 = \frac{337}{24}
2588 \marginpar{%
2589 \intercol=1cm
2590 \begin{xy}
2591 <\intercol,0pt>:<0pt,\intercol>::
2592 \POS(0,-1)*\xybox{
2593 \POS@i@={(0,0),(1,0),(0,1),(0,0)},{0*\xypolyline{--}}
2594 \POS(0,1)\ar@[|(2)](0,0)
2596 \end{xy}
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
2602 = -9
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
2615 computations.
2616 \begin{align*}
2617 b(1,0) & = - \frac 1 2
2619 b(2,0) & = \frac 1 6
2621 b(3,0) & = 0
2623 b(4,0) & = -\frac 1 {30}
2624 \end{align*}
2626 \marginpar{%
2627 \intercol=1cm
2628 \begin{xy}
2629 <\intercol,0pt>:<0pt,\intercol>::
2630 \POS(0,-1)*\xybox{
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)
2635 \end{xy}
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.
2639 We have
2641 \begin{bmatrix}
2642 2 \\ 4
2643 \end{bmatrix}
2646 \begin{bmatrix}
2647 -1 \\ 0
2648 \end{bmatrix}
2650 \begin{bmatrix}
2651 0 \\ 1
2652 \end{bmatrix}
2653 \quad\text{and}\quad
2654 \begin{bmatrix}
2655 3 \\ 4
2656 \end{bmatrix}
2659 \begin{bmatrix}
2660 -1 \\ 0
2661 \end{bmatrix}
2663 \begin{bmatrix}
2664 0 \\ 1
2665 \end{bmatrix}
2668 Therefore $t = \fractional{-4} = 0$, $y = D_2$,
2669 \begin{align*}
2670 D_{T,F_1}
2671 & =
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
2676 \end{align*}
2679 h'(\vec x) =
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
2691 \frac{115}{24}
2695 \marginpar{%
2696 \intercol=1cm
2697 \begin{xy}
2698 <\intercol,0pt>:<0pt,\intercol>::
2699 \POS(0,-1)*\xybox{
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)
2704 \end{xy}
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.
2708 We have
2710 \begin{bmatrix}
2711 2 \\ 4
2712 \end{bmatrix}
2715 \begin{bmatrix}
2716 0 \\ 1
2717 \end{bmatrix}
2719 \begin{bmatrix}
2720 1 \\ 0
2721 \end{bmatrix}
2722 \quad\text{and}\quad
2723 \begin{bmatrix}
2724 2 \\ 5
2725 \end{bmatrix}
2728 \begin{bmatrix}
2729 0 \\ 1
2730 \end{bmatrix}
2732 \begin{bmatrix}
2733 1 \\ 0
2734 \end{bmatrix}
2737 Therefore $t = \fractional{-2} = 0$, $y = D_1$,
2738 \begin{align*}
2739 D_{T,F_2}
2740 & =
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
2745 \end{align*}
2748 h'(\vec x) =
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
2760 \frac{33}{8}
2764 \marginpar{%
2765 \intercol=1cm
2766 \begin{xy}
2767 <\intercol,0pt>:<0pt,\intercol>::
2768 \POS(0,-1)*\xybox{
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)
2773 \end{xy}
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.
2777 We have
2779 \begin{bmatrix}
2780 3 \\ 4
2781 \end{bmatrix}
2783 -\frac 1 2
2784 \begin{bmatrix}
2785 1 \\ -1
2786 \end{bmatrix}
2787 -\frac 7 2
2788 \begin{bmatrix}
2789 -1 \\ -1
2790 \end{bmatrix}
2791 \quad\text{and}\quad
2792 \begin{bmatrix}
2793 2 \\ 5
2794 \end{bmatrix}
2796 -\frac 3 2
2797 \begin{bmatrix}
2798 1 \\ -1
2799 \end{bmatrix}
2800 -\frac 7 2
2801 \begin{bmatrix}
2802 -1 \\ -1
2803 \end{bmatrix}
2806 Therefore $t = \fractional{7} = 0$, $y = -\frac 1 2 D_1 -\frac 1 2 D_2$,
2807 \begin{align*}
2808 D_{T,F_3}
2809 & =
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
2815 - \frac{b(1,0)}1
2816 + \frac 1 2 \frac{b(2,0)}2 D_1
2817 + \frac 1 2 \frac{b(2,0)}2 D_2 + \cdots
2818 \end{align*}
2821 h'(\vec x) =
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
2837 \frac{47}{8}
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.
2850 \marginpar{%
2851 \intercol=1cm
2852 \begin{xy}
2853 <\intercol,0pt>:<0pt,\intercol>::
2854 \POS(0,-1)*\xybox{
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)
2859 \end{xy}
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
2867 $n_1+n_2 = 2$.
2869 \noindent
2870 \begin{tabular}{c|c|c}
2871 $n_1$ & $n_2$
2873 \hline
2874 0 & 0 &
2876 \left(
2877 \frac{b(1,0)}{1!}
2878 \frac{b(1,0)}{1!}
2880 \frac{b(2,0)}{2!}
2881 {1 \choose 1}(-1)^1
2883 \frac{b(2,0)}{2!}
2884 {1 \choose 1}(-\frac 12)^1
2885 \right)
2888 1 & 0 &
2890 \left(
2891 \frac{b(2,0)}{2!}
2892 \frac{b(1,0)}{1!}
2894 \frac{b(3,0)}{3!}
2895 {2 \choose 2}(-1)^2
2897 \frac{b(3,0)}{3!}
2898 {2 \choose 1}(-\frac 12)^1
2899 \right)
2900 \left(
2901 -D_1
2902 \right)
2905 0 & 1 &
2907 \left(
2908 \frac{b(1,0)}{1!}
2909 \frac{b(2,0)}{2!}
2911 \frac{b(3,0)}{3!}
2912 {2 \choose 1}(-1)^1
2914 \frac{b(3,0)}{3!}
2915 {2 \choose 2}(-\frac 12)^2
2916 \right)
2917 \left(
2918 -D_1 + D_2
2919 \right)
2922 2 & 0 &
2924 \left(
2925 \frac{b(3,0)}{3!}
2926 \frac{b(1,0)}{1!}
2928 \frac{b(4,0)}{4!}
2929 {3 \choose 3}(-1)^3
2931 \frac{b(4,0)}{4!}
2932 {3 \choose 1}(-\frac 12)^1
2933 \right)
2934 \left(
2935 -D_1
2936 \right)^2
2939 1 & 1 &
2941 \left(
2942 \frac{b(2,0)}{2!}
2943 \frac{b(2,0)}{2!}
2945 \frac{b(4,0)}{4!}
2946 {3 \choose 2}(-1)^2
2948 \frac{b(4,0)}{4!}
2949 {3 \choose 2}(-\frac 12)^2
2950 \right)
2951 \left(
2952 -D_1
2953 \right)
2954 \left(
2955 -D_1 + D_2
2956 \right)
2959 0 & 2 &
2961 \left(
2962 \frac{b(1,0)}{1!}
2963 \frac{b(3,0)}{3!}
2965 \frac{b(4,0)}{4!}
2966 {3 \choose 1}(-1)^1
2968 \frac{b(4,0)}{4!}
2969 {3 \choose 3}(-\frac 12)^3
2970 \right)
2971 \left(
2972 -D_1 + D_2
2973 \right)^2
2975 \end{tabular}
2977 We find
2978 \begin{align*}
2979 h'(\vec x)
2981 \left(
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)
2985 \right) x_1 x_2
2988 \frac 3 8 x_1 x_2 + \frac 1{24} x_2 - \frac 1{24} (-x_2 + x_1)
2989 + \frac 7{576} (-1)
2990 - \frac 5{1152} (-2)
2992 \end{align*}
2993 The contribution of this vertex is therefore
2995 h'(3,4) = \frac {1355}{288}
2999 \marginpar{%
3000 \intercol=1cm
3001 \begin{xy}
3002 <\intercol,0pt>:<0pt,\intercol>::
3003 \POS(0,-1)*\xybox{
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)
3008 \end{xy}
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$.
3014 We similarly find
3016 h'(\vec x)
3018 \frac 3 8 x_1 x_2 + \frac 1{24} x_1 - \frac 1{24} (x_2 - x_1)
3019 + \frac 7{576} (-1)
3020 - \frac 5{1152} (-2)
3023 The contribution of this vertex is therefore
3025 h'(2,5) = \frac {1067}{288}
3029 \marginpar{%
3030 \intercol=1cm
3031 \begin{xy}
3032 <\intercol,0pt>:<0pt,\intercol>::
3033 \POS(0,-1)*\xybox{
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)
3038 \end{xy}
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$.
3045 We find
3047 h'(\vec x)
3049 \frac 1 4 x_1 x_2 - \frac 1{12} x_2 - \frac 1{12} x_1
3050 + \frac 1{144} (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}
3062 = \frac {61}6
3064 and the total sum is
3066 \frac{121}{24}+\frac{355}{24}+\frac{61}6 = 30
3070 \end{example}
3072 \begin{example}
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}.
3086 The final result is
3088 \begin{cases}
3089 \frac{ n^2}{2}
3090 - 3 n \fractional{\frac{ n}{3}}
3091 + \frac{21}{2} n
3092 + \frac{9}{2} \fractional{\frac{ n}{3}}^2
3093 - \frac{63}{2} \fractional{\frac{ n}{3}}
3094 + 45
3095 & \text{if $ n+3 \ge 0$}.
3096 \end{cases}
3099 \begin{table}
3100 \intercol=1cm
3101 \begin{tabular}{lc}
3102 \begin{xy}
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)*{}
3108 \end{xy}
3111 \displaystyle
3112 \frac{ n^2}{4}
3113 + \frac{9}{2} n
3114 + \frac{45}{4}
3117 \begin{xy}
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)
3122 \POS(0,0.5)*+!L{2}
3123 \POS(0,1.1)*{}\POS(0,-0.1)*{}
3125 \end{xy}
3128 \displaystyle
3129 \frac{33}{8}
3132 \begin{xy}
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)*{}
3140 \end{xy}
3143 \displaystyle
3144 - \frac{3}{2} n \fractional{\frac{ n}{3}}
3145 + \frac{3}{4} n
3146 + \frac{9}{4} \fractional{\frac{ n}{3}}^2
3147 - \frac{63}{4} \fractional{\frac{ n}{3}}
3148 + \frac{57}{8}
3151 \begin{xy}
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)
3156 \POS(0.5,0)*+!D{4}
3157 \POS(0,1.1)*{}\POS(0,-0.1)*{}
3159 \end{xy}
3162 \displaystyle
3163 \frac{23}{216} n^2
3164 + \frac{23}{12} n
3165 + \frac{115}{24}
3168 \begin{xy}
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)
3173 \POS(0.5,1)*+!U{5}
3174 \POS(0,1.1)*{}\POS(0,-0.1)*{}
3176 \end{xy}
3179 \displaystyle
3180 \frac{31}{216} n^2
3181 + \frac{31}{12} n
3182 + \frac{155}{24}
3185 \begin{xy}
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)*{}
3194 \end{xy}
3197 \displaystyle
3198 - \frac{31}{36} n \fractional{\frac{ n}{3}}
3199 + \frac{31}{72} n
3200 + \frac{31}{24} \fractional{\frac{ n}{3}}^2
3201 - \frac{217}{24} \fractional{\frac{ n}{3}}
3202 + \frac{589}{144}
3205 \begin{xy}
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)*{}
3214 \end{xy}
3217 \displaystyle
3218 \frac{341}{144}
3221 \begin{xy}
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)*{}
3230 \end{xy}
3233 \displaystyle
3234 \frac{253}{144}
3237 \begin{xy}
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)*{}
3246 \end{xy}
3249 \displaystyle
3250 - \frac{23}{36} n \fractional{\frac{ n}{3}}
3251 + \frac{23}{72} n
3252 + \frac{23}{24} \fractional{\frac{ n}{3}}^2
3253 - \frac{161}{24} \fractional{\frac{ n}{3}}
3254 + \frac{437}{144}
3256 \end{tabular}
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}
3260 \end{table}
3262 \end{example}
3265 \subsection{Conversion to ``standard form''}
3266 \label{s:standard}
3268 Some algorithms or tools expect a polyhedron to be
3269 specified in ``\ai{standard form}'', i.e.,
3270 \begin{equation}
3271 \label{eq:standard}
3272 \begin{cases}
3273 \begin{aligned}
3274 A \vec x & = \vec b \\
3275 \vec x & \ge \vec 0
3277 \end{aligned}
3278 \end{cases}
3279 \end{equation}
3280 Given an arbitrary (parametric) polyhedron
3281 \begin{equation}
3282 \label{eq:non-standard}
3283 \{\,
3284 \vec x \mid
3285 A \vec x + \vec b(\vec p) \ge 0
3286 \,\}
3288 \end{equation}
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
3293 to the form
3294 \begin{equation}
3295 \label{eq:standard:2}
3296 \begin{cases}
3297 \begin{aligned}
3298 A \vec x & = \vec b \\
3299 D \vec x & \ge \vec c
3301 \end{aligned}
3302 \end{cases}
3303 \end{equation}
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
3312 ($x', x'' \ge 0$).
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
3318 to be non-negative.
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'$.
3341 \begin{example}
3342 Consider the cone
3344 \left\{\,
3345 \vec x \mid
3346 \begin{bmatrix}
3347 67 & -13 \\
3348 -52 & 53
3349 \end{bmatrix}
3350 \vec x
3352 \vec 0
3353 \,\right\}
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.
3361 We have
3363 H' =
3364 \begin{bmatrix}
3365 1 & 0 \\
3366 -1331 & 2875
3367 \end{bmatrix}
3369 \begin{bmatrix}
3370 67 & -13 \\
3371 -52 & 53
3372 \end{bmatrix}
3373 \begin{bmatrix}
3374 -6 & 13 \\
3375 -31 & 57
3376 \end{bmatrix}
3377 = A U'
3380 Adding a slack variable for the second row of $H'$, we
3381 obtain the equivalent problem
3383 \begin{cases}
3384 \begin{aligned}
3385 \begin{bmatrix}
3386 -1331 & 2875 & -1
3387 \end{bmatrix}
3388 \vec x'
3390 \vec 0
3392 \vec x' & \ge \vec 0
3393 \end{aligned}
3394 \end{cases}
3396 with
3398 \vec x =
3399 \begin{bmatrix}
3400 -6 & 13 & 0 \\
3401 -31 & 57 & 0
3402 \end{bmatrix}
3403 \vec x'
3406 \end{example}
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
3422 \begin{equation}
3423 \label{eq:TOPCOM:polytope}
3424 \begin{cases}
3425 \begin{aligned}
3426 \vec x &\ge 0
3428 A \, \vec x &\le \vec b(\vec p)
3430 \end{aligned}
3431 \end{cases}
3432 \end{equation}
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
3438 \begin{cases}
3439 \begin{aligned}
3440 A \, \vec x + I \, \vec s & = \vec b(\vec p)
3442 \vec x, \vec s &\ge 0
3444 \end{aligned}
3445 \end{cases}
3447 with $I$ the identity matrix.
3448 Then we compute the (right) kernel $K$ of the matrix
3449 $\begin{bmatrix}
3450 A & I
3451 \end{bmatrix}$, i.e.,
3453 \begin{bmatrix}
3454 A & I
3455 \end{bmatrix}
3460 and use \ai[\tt]{TOPCOM}'s \ai[\tt]{points2triangs} to
3461 compute the \ai{regular triangulation}s of the points specified
3462 by the rows of $K$.
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.
3477 \begin{example}
3478 Consider the parametric polytope
3480 P(p,q,r) = \{\,
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
3484 p \ge 0 \wedge
3485 q \ge 0 \wedge
3486 r \ge 0
3487 \,\}
3490 The constraints involving the variables are
3492 \begin{cases}
3493 \begin{aligned}
3494 \begin{bmatrix}
3499 & & 1
3500 \end{bmatrix}
3501 \begin{bmatrix}
3502 i \\ j \\ k
3503 \end{bmatrix}
3505 \begin{matrix}
3511 \end{matrix}
3512 \begin{array}{l}
3518 \end{array}
3520 \begin{bmatrix}
3521 1 & 0 & 0
3523 -1 & 0 & 1
3525 -2 & 1 & 0
3526 \end{bmatrix}
3527 \begin{bmatrix}
3528 i \\ j \\ k
3529 \end{bmatrix}
3531 \begin{matrix}
3537 \end{matrix}
3538 \begin{array}{l}
3543 -p + r
3544 \end{array}
3545 \end{aligned}
3546 \end{cases}
3548 We have
3550 \begin{bmatrix}
3551 1 & 0 & 0 & 1 & 0 & 0 \\
3552 -1 & 0 & 1 & 0 & 1 & 0 \\
3553 -2 & 1 & 0 & 0 & 0 & 1 \\
3554 \end{bmatrix}
3555 \begin{bmatrix}
3556 -1 & 0 & 0 \\
3557 -2 & 0 & -1 \\
3558 -1 & -1 & 0 \\
3559 1 & 0 & 0 \\
3560 0 & 1 & 0 \\
3561 0 & 0 & 1 \\
3562 \end{bmatrix}
3566 Computing the \ai{regular triangulation}s of the rows of $K$
3567 using \ai[\tt]{TOPCOM}, we obtain
3568 \begin{verbatim}
3569 > cat e2.topcom
3571 [ -1 0 0 ]
3572 [ -2 0 -1 ]
3573 [ -1 -1 0 ]
3574 [ 1 0 0 ]
3575 [ 0 1 0 ]
3576 [ 0 0 1 ]
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}};
3582 \end{verbatim}
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}
3595 % e0
3596 \verb+{0,1,2}+ & $(0,0,0)$ & $p \ge 0$, $-q + r \ge 0$ and $q \ge 0$
3598 % 70
3599 \verb+{1,2,3}+ & $(p,0,0)$ & $p \ge 0$, $r \ge 0$ and $2p + q \ge 0$
3601 % c8
3602 \verb+{0,1,4}+ & $(0,0,-p+r)$ & $-q + r \ge 0$, $p \ge 0$ and $q \ge 0$
3604 % 58
3605 \verb+{1,3,4}+ & $(p,0,r)$ & $p \ge 0$, $r \ge 0$ and $2p + q \ge 0$
3607 % a4
3608 \verb+{0,2,5}+ & $(0,q,0)$ & $q \ge 0$, $p \ge 0$ and $-q + r \ge 0$
3610 % 34
3611 \verb+{2,3,5}+ & $(p, 2p+q, 0)$ & $p \ge 0$, $2p + q \ge 0$ and $r \ge 0$
3613 % 8c
3614 \verb+{0,4,5}+ & $(0, q, -p+r)$ & $q \ge 0$, $-q + r \ge 0$ and $p \ge 0$
3616 % 1c
3617 \verb+{3,4,5}+ & $(p, 2p+q, r)$ & $p \ge 0$, $2p + q \ge 0$ and $r \ge 0$
3618 \end{tabular}
3620 Combining these constraints with the initial constraints of the problem
3621 on the parameters
3622 $p \ge 0$, $q \ge 0$ and $r \ge 0$, we find the chamber
3624 \{\,
3625 (p,q,r) \mid p \ge 0 \wedge -p + r \ge 0 \wedge q \ge 0
3626 \,\}
3628 For the second chamber, we have
3630 \begin{tabular}{ccc}
3631 % 70
3632 \verb+{1,2,3}+ & $(p,0,0)$ & $p \ge 0$, $r \ge 0$ and $2p + q \ge 0$
3634 % 58
3635 \verb+{1,3,4}+ & $(p,0,r)$ & $p \ge 0$, $r \ge 0$ and $2p + q \ge 0$
3637 % 34
3638 \verb+{2,3,5}+ & $(p, 2p+q, 0)$ & $p \ge 0$, $2p + q \ge 0$ and $r \ge 0$
3640 % 1c
3641 \verb+{3,4,5}+ & $(p, 2p+q, r)$ & $p \ge 0$, $2p + q \ge 0$ and $r \ge 0$
3643 % 64
3644 \verb+{1,2,5}+ & $(-\frac q 2,0,0)$ &
3645 $-q \ge 0$, $2p + q \ge 0$ and $-2p -q+2r \ge 0$
3647 % 4c
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$
3650 \end{tabular}
3652 The chamber is therefore
3654 \{\,
3655 (p,q,r) \mid q = 0 \wedge p \ge 0 \wedge -p +r \ge 0
3656 \,\}
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}
3663 % 70
3664 \verb+{1,2,3}+ & $(p,0,0)$ & $p \ge 0$, $r \ge 0$ and $2p + q \ge 0$
3666 % 58
3667 \verb+{1,3,4}+ & $(p,0,r)$ & $p \ge 0$, $r \ge 0$ and $2p + q \ge 0$
3669 % 34
3670 \verb+{2,3,5}+ & $(p, 2p+q, 0)$ & $p \ge 0$, $2p + q \ge 0$ and $r \ge 0$
3672 % 1c
3673 \verb+{3,4,5}+ & $(p, 2p+q, r)$ & $p \ge 0$, $2p + q \ge 0$ and $r \ge 0$
3675 % 68
3676 \verb+{1,2,4}+ & $(p-r,0,0)$ &
3677 $p -r \ge 0$, $r \ge 0$ and $2p +q -2r \ge 0$
3679 % 2c
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$
3682 \end{tabular}
3684 The chamber is therefore
3686 \{\,
3687 (p,q,r) \mid p - r \ge 0 \wedge q \ge 0 \wedge r \ge 0
3688 \,\}
3690 \end{example}
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
3697 \begin{equation}
3698 \label{eq:TOPCOM:polytope:2}
3699 \begin{cases}
3700 \begin{aligned}
3701 \vec x' &\ge \vec c(\vec p)
3703 A \, \vec x' &\le \vec b(\vec p) + A \vec c(\vec p)
3705 \end{aligned}
3706 \end{cases}
3707 \end{equation}
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)$
3711 is equivalent to
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
3724 \begin{cases}
3725 \begin{aligned}
3726 H \vec x' &\ge \vec b'(\vec p)
3728 -A''U \, \vec x' &\le -\vec b''(\vec p)
3730 \end{aligned}
3731 \end{cases}
3733 with $A''$ the remaining rows of $A$ and $\vec b(\vec p)$ split
3734 in the same way.
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
3743 constraints.
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.
3766 \begin{example}
3767 Consider the parametric polytope
3769 P(n) = \{\,
3770 (i,j) \mid
3771 1 \le i \wedge 2 i \le 3 j \wedge j \le n
3772 \,\}
3775 The constraints are
3777 \begin{bmatrix}
3778 1 & 0 \\
3779 -2 & 3 \\
3780 0 & -1
3781 \end{bmatrix}
3782 \begin{bmatrix}
3783 i \\ j
3784 \end{bmatrix}
3786 \begin{bmatrix}
3787 1 \\
3788 0 \\
3790 \end{bmatrix}
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
3797 \begin{bmatrix}
3798 A & I
3799 \end{bmatrix}
3801 \begin{bmatrix}
3802 0 & 1 & 1 & 0
3804 2 & -3 & 0 & 1
3805 \end{bmatrix}
3808 while $K$ with $\begin{bmatrix}A & I\end{bmatrix} K = 0$ is given
3811 \begin{bmatrix}
3812 0 & 1 & 1 & 0
3814 2 & -3 & 0 & 1
3815 \end{bmatrix}
3816 \begin{bmatrix}
3817 1 & 0 \\
3818 0 & 1 \\
3819 0 & -1 \\
3820 -2 & 3
3821 \end{bmatrix}
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
3827 \begin{verbatim}
3828 > points2triangs --regular <<EOF
3829 > [[1 0],[0,1],[0,-1],[-2,3]]
3830 > EOF
3831 T[1]:={{0,1},{0,2},{1,3},{2,3}};
3832 T[2]:={{0,2},{2,3},{0,3}};
3833 T[3]:={};
3834 \end{verbatim}
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
3842 \begin{verbatim}
3843 > points2triangs --regular <<EOF
3844 > [[1 0],[0,-1],[-2,3]]
3845 > EOF
3846 T[1]:={{0,1},{1,2},{0,2}};
3847 T[2]:={};
3848 \end{verbatim}
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'$.
3851 \end{example}
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}
3871 \label{s:hilbert}
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,
3894 \begin{align*}
3895 \width_{\vec c} P
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 \,\}
3904 \end{align*}
3905 The \defindex{lattice width} is the minimum width over all
3906 non-zero integer directions:
3908 \width P =
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
3932 to the polytope.
3933 In particular, the first vector $\vec b_1$ of this reduced basis
3934 will satisfy
3936 \width_{\vec b_1} P
3938 \frac{\width P}
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
3951 direction.
3953 The computation of the above reduced basis requires the solution
3954 of many linear programs, for which we use any of the following
3955 external solvers:
3956 \begin{itemize}
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 However, versions up to and including \verb+cddlib 0.94d+ have
3967 a bug that may sometimes result in a polytope being
3968 reported as (rationally) empty even though it is not.
3970 \item \piplib/~\shortcite{Feautrier:PIP}
3972 This solver is also based on exact integer arithmetic
3973 and uses the \ai{dual simplex} method to solve a linear program.
3974 Two versions are available, \ai[\tt]{pip} will present the
3975 original program to \piplib/, while \ai[\tt]{pip-dual} will present
3976 the dual program to \piplib/, effectively having it apply the primal
3977 simplex method to the original problem.
3978 The latter may seem more appropriate since the computation
3979 of the reduced basis only requires the dual solution of
3980 any linear program. However, in practice, it appears
3981 that \ai[\tt]{pip} is often faster than \ai[\tt]{pip-dual}.
3982 \end{itemize}
3983 The LP solver to use can be selected with the \ai[\tt]{--gbr} option.
3986 \subsection{Computing the integer hull of a polyhedron}
3987 \label{s:integer:hull}
3989 For computing the \ai{integer hull} of a polyhedron,
3990 we first describe how to compute the convex hull of a set
3991 given as an oracle for optimizing a linear objective
3992 function over the set and then
3993 we explain how to optimize a linear objective function over
3994 the integer points of a polyhedron.
3995 Applying the first with the second as \ai{optimization oracle}
3996 yields a method for computing the requested integer hull.
3998 \subsubsection{Computing the convex hull based on an optimization oracle}
4000 The algorithm described below is presented by
4001 \shortciteN[Remark~2.5]{Cook1992} as an extension of the
4002 algorithm by \shortciteN[Section~3]{Edmonds82} for computing
4003 the {\em dimension} of a polytope for which only an optimization oracle
4004 is available. The algorithm is described in a bit more detail
4005 by \shortciteN{Eisenbrand2000PhD} and reportedly stems from
4006 \shortciteN{Hartmann1989PhD}.
4007 Essentially the same algorithm has also been implemented
4008 by \shortciteN{Huggins06}, citing
4009 \ai{beneath/beyond}~\shortcite{Preparata1985} as his inspiration.
4011 The algorithm start out from an initial set of points from
4012 the set $S$. After computing the convex hull of this set
4013 of points, we take one of its bounding constraints and use
4014 the optimization oracle
4015 to compute an optimal point in $S$ (but on the other side
4016 of the bounding hyperplane) along the
4017 outer normal of this bounding constraint.
4018 If a new point is found, it is added to the set of points
4019 and a new convex hull is computed, or the old one is adapted
4020 in a beneath/beyond fashion. Otherwise, the chosen bounding constraint
4021 is also a bounding constraint of $S$ and need not be considered anymore.
4022 The process continues until all bounding constraints in the
4023 description of the current convex hull have been considered.
4025 In principle, the initial set of points in the above algorithm
4026 may be empty, with a ``convex hull'' described by a set of
4027 conflicting constraints and each equality in the description of any
4028 intermediate lower-dimensional convex hull being considered
4029 as a pair of bounding constraints with opposite outer normals.
4030 However, in our implementation, we have chosen to first compute
4031 a maximal set of affinely independent points by first taking any
4032 point from $S$ and then adding points from $S$ not on one of
4033 the equalities satisfied by all points found so far.
4034 This allows us to not have to worry about equalities in the
4035 main algorithm.
4036 In the case of the computation of the integer hull, finding
4037 these affinely independent points can be accomplished using the technique of
4038 \autoref{s:feasibility}.
4040 \begin{figure}
4041 \intercol=0.58cm
4042 \begin{xy}
4043 <\intercol,0pt>:<0pt,\intercol>::
4044 \POS(-1,0)*\xybox{
4045 \def\latticebody{\POS="c"+(0,0.5)\ar@{--}"c"+(0,6.5)}%
4046 \POS0,{\xylattice{1}{6}00}%
4047 \def\latticebody{\POS="c"+(0.5,0)\ar@{--}"c"+(6.5,0)}%
4048 \POS0,{\xylattice00{1}6}%
4049 \POS@i@={(1.5,2.75),(5.75,2.25),(5.5,5.25),(2.75,4.75),(1.5,2.75)},
4050 {0*\xypolyline{}}
4051 \POS@i@={(2,3),(3,3),(3,4),(2,3)},{0*[|(3)]\xypolyline{}}
4052 \POS(2,3)*{\bullet}
4053 \POS(3,3)*{\bullet}
4054 \POS(3,4)*{\bullet}
4055 \POS(3,3.5)\ar(3.5,3.5)
4056 \POS(5,3)*{\circ}
4057 \POS(5,4)*{\circ}
4058 \POS(5,5)*{\circ}
4060 \POS(6,0)*\xybox{
4061 \def\latticebody{\POS="c"+(0,0.5)\ar@{--}"c"+(0,6.5)}%
4062 \POS0,{\xylattice{1}{6}00}%
4063 \def\latticebody{\POS="c"+(0.5,0)\ar@{--}"c"+(6.5,0)}%
4064 \POS0,{\xylattice00{1}6}%
4065 \POS@i@={(1.5,2.75),(5.75,2.25),(5.5,5.25),(2.75,4.75),(1.5,2.75)},
4066 {0*\xypolyline{}}
4067 \POS@i@={(2,3),(5,3),(3,4),(2,3)},{0*[|(3)]\xypolyline{}}
4068 \POS(2,3)*{\bullet}
4069 \POS(5,3)*{\bullet}
4070 \POS(3,4)*{\bullet}
4071 \POS(4,3.5)\ar(4.25,4)
4072 \POS(5,5)*{\circ}
4074 \POS(13,0)*\xybox{
4075 \def\latticebody{\POS="c"+(0,0.5)\ar@{--}"c"+(0,6.5)}%
4076 \POS0,{\xylattice{1}{6}00}%
4077 \def\latticebody{\POS="c"+(0.5,0)\ar@{--}"c"+(6.5,0)}%
4078 \POS0,{\xylattice00{1}6}%
4079 \POS@i@={(1.5,2.75),(5.75,2.25),(5.5,5.25),(2.75,4.75),(1.5,2.75)},
4080 {0*\xypolyline{}}
4081 \POS@i@={(2,3),(5,3),(5,5),(3,4),(2,3)},{0*[|(3)]\xypolyline{}}
4082 \POS(2,3)*{\bullet}
4083 \POS(5,3)*{\bullet}
4084 \POS(5,5)*{\bullet}
4085 \POS(3,4)*{\bullet}
4087 \end{xy}
4088 \caption{The integer hull of a polytope}
4089 \label{f:integer:hull}
4090 \end{figure}
4092 \begin{example}
4093 Assume we want to compute the integer hull of the polytope in the left part
4094 of \autoref{f:integer:hull}.
4095 We first compute a set of three affinely independent points,
4096 shown in the same part of the figure.
4097 Of the three facets of the corresponding convex hull,
4098 optimization along the outer normal (depicted by an arrow in the figure)
4099 of only one facet will yield any additional points. The other two
4100 are therefore facets of the integer hull.
4101 Optimization along the above outer normal may yield any of the
4102 points marked by a $\circ$.
4103 Assuming it is the bottom one, we end up with the updated
4104 convex hull in the middle of the figure. This convex hull
4105 has only one new facet. Adding the point found by optimizing
4106 over this facet's outer normal, we obtain the convex hull
4107 on the right of the figure.
4108 There are two new facets, but neither of them yields any
4109 further points. We have therefore found the integer hull
4110 of the polytope.
4111 \end{example}
4113 \subsubsection{Optimization over the integer points of a polyhedron}
4114 \label{s:optimization}
4116 We assume that we want to find the {\em minimum} of
4117 some linear objective function. When used in the computation
4118 of the integer hull of some polytope, the objective function
4119 will therefore correspond to the inner normal of some facet.
4121 During our search for an optimal integer point with respect
4122 to some objective function, we will keep track of the best
4123 point so far as well as a lower bound $l$
4124 and an upper bound $u$ such that the value at the optimal point
4125 (if it is better than the current best) lies between those
4126 two bounds.
4127 Initially, there is no best point yet and values for $l$ and $u$
4128 may be obtained from optimization over the linear relaxation.
4129 When used in the computation of the integer hull of some polytope,
4130 the upper bound $u$ is one less than the value attained on
4131 the given facet of the current approximation.
4133 As long as $l \le u$, we perform the following steps
4134 \begin{itemize}
4135 \item use the integer feasibility technique of \autoref{s:feasibility}
4136 to test whether there is any integer point with value in
4137 $[l,u']$, where $u'$ is
4138 \begin{itemize}
4139 \item $u$ if the previous test for an integer point did not produce a point
4140 \item $l+\floor{\frac{u-l-1}2}$
4141 if the previous test for an integer point {\em did\/} produce a point
4142 \end{itemize}
4143 \item if a point is found, then remember it as the current best
4144 and replace $u$ by the value at this point minus one,
4145 \item otherwise, replace $l$ by $u'+1$.
4146 \end{itemize}
4147 When used in the computation of the integer hull of some polytope,
4148 it is useful to not only keep track of the best point so far,
4149 but of all points found.
4150 These points will all lie outside of the current approximation
4151 of the integer hull and adding them all instead of just one,
4152 will typically get us to the complete integer hull quicker.
4154 \begin{figure}
4155 \intercol=0.7cm
4156 \begin{xy}
4157 <\intercol,0pt>:<0pt,\intercol>::
4158 \POS(0.5,0)\ar@{-}(16.5,0)
4159 \def\latticebody{\POS="c"+(0,-0.2)\ar@{--}"c"+(0,0.2)\POS"c"*++!D{\the\latticeA}}%
4160 \POS0,{\xylattice{1}{16}00}%
4161 \POS(6,0)*!C{\bullet}
4162 \POS(7,0)*{\bullet}
4163 \POS(8,0)*{\bullet}
4164 \POS(12,0)*{\bullet}
4165 \POS(13,0)*{\bullet}
4166 \POS(14,0)*{\bullet}
4167 \POS(15,0)*{\bullet}
4168 \POS(16,0)*{\bullet}
4169 \POS(1,-1)\ar@{-}(16,-1)
4170 \POS(8,-1)*{\bullet}
4171 \POS(1,-2)\ar@{-}(4,-2)
4172 \POS(5,-3)\ar@{-}(7,-3)
4173 \POS(6,-3)*{\bullet}
4174 \POS(4.9,-4)\ar@{-}(5.1,-4)
4175 \end{xy}
4176 \caption{The integer points of a polytope projected on an objective function}
4177 \label{f:hull:projected}
4178 \end{figure}
4180 \begin{example}
4181 \label{ex:hull:projected}
4182 Assume that the values of some objective function attained
4183 by the integer points of some polytope are as shown in
4184 \autoref{f:hull:projected} and assume we know that the optimal
4185 value lies between 1 and 16.
4186 In the first step we would look for a point attaining a value
4187 in the interval $[1,16]$. Suppose this yields a point attaining
4188 the value $8$ (second line of the figure). We record this point
4189 as the current best and update the search interval to $[1,7]$.
4190 In the second step, we look for a point attaining a value
4191 in the interval $[1,4]$, but find nothing and set the search interval
4192 to $[5,7]$.
4193 In the third step, we consider the interval $[5,7]$ and find
4194 a point attaining the value 6. We update the current best value
4195 and set the search interval to $[5,5]$.
4196 In the fourth step, we consider the interval $[5,5]$, find no
4197 points and update the interval to ``$[6,5]$''.
4198 Since the lower bound is now larger than the upper bound, the
4199 algorithm terminates, returning the best or all point(s) found.
4200 \end{example}
4203 \subsection{Computing the integer hull of a truncated cone}
4204 \label{s:hull:cone}
4206 In \autoref{s:width} we will need to compute the \ai{integer hull}
4207 of a cone with the origin removed ($C \setminus \{ \vec 0 \}$).
4209 \subsubsection{Using the Hilbert basis of the cone}
4211 As proposed by \shortciteN{Koeppe2007personal},
4212 one way of computing this integer hull is to first compute
4213 the \ai{Hilbert basis} of $C$ (see \autoref{s:hilbert})
4214 and to then remove from that Hilbert basis the points that
4215 are not vertices of the integer hull of $C \setminus \{ \vec 0 \}$.
4216 The Hilbert basis of $C$ is the minimal set of points
4217 $\vec b_i \in C \cap \ZZ^d$ such that every integer point
4218 $\vec x \in C \cap \ZZ^d$ can be written as a non-negative
4219 {\em integer} combination of the $\vec b_i$.
4220 The vertices $\vec v_j$ of the integer hull of $C \setminus \{ \vec 0 \}$
4221 are such that every integer point
4222 $\vec x \in (C \cap \ZZ^d) \setminus \{ \vec 0 \}$ can
4223 be written as s non-negative {\em rational} combination of $\vec v_j$.
4224 Clearly, any $\vec v_j$ is also a $\vec b_i$ since $\vec v_j$ can
4225 not be written as the sum of a (rational) convex combination of
4226 other integer points in $(C \cap \ZZ^d) \setminus \{ \vec 0 \}$
4227 and a non-negative combination of the extremal rays $\vec r_k$ of $C$.
4228 A fortiori, it can therefore not be written as an integer combination
4229 of other integer points in $C$.
4230 To obtain the $\vec v_j$ from the $\vec b_i$ we therefore simply
4231 need to remove first $(0,0)$ and then those $\vec b_i$ that are
4232 not an extremal ray and that {\em can} be written as a combination
4234 \vec b_i = \sum_{j \ne i} \vec \alpha_j \vec b_j + \sum_k \beta_k \vec r_k
4235 \qquad\text{with $\alpha_j, \beta_k \ge 0$ and $\sum_{j \ne i} \alpha_j = 1$}
4238 Since the $\vec r_k$ are also among the $\vec b_j$, this can
4239 be simplified to checking whether there exists a rational
4240 solution for $\vec \alpha_j$ to
4242 \vec b_i = \sum_{j \ne i} \vec \alpha_j \vec b_j
4243 \qquad\text{with $\alpha_j \ge 0$ and $\sum_{j \ne i} \alpha_j \ge 1$}
4247 \begin{figure}
4248 \intercol=1.1cm
4249 \begin{xy}
4250 <\intercol,0pt>:<0pt,\intercol>::
4251 \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{*}}
4252 \def\latticebody{\POS="c"+(0,-4.5)\ar@{--}"c"+(0,5.5)}%
4253 \POS0,{\xylattice{-0}{5}00}%
4254 \def\latticebody{\POS="c"+(-0.5,0)\ar@{--}"c"+(5.5,0)}%
4255 \POS0,{\xylattice00{-4}5}%
4256 \POS0\ar(2,-3)
4257 \POS0\ar(3,4)
4258 \POS(2,-3)*{\bullet}
4259 \POS(3,4)*{\bullet}
4260 \POS(1,1)*{\bullet}
4261 \POS(1,-1)*{\bullet}
4262 \POS(1,0)*{\bullet}
4263 \POS(2,-3)*{\times}
4264 \POS(3,4)*{\times}
4265 \POS(1,1)*{\times}
4266 \POS(1,-1)*{\times}
4267 \end{xy}
4268 \caption{The Hilbert basis and the integer hull of a truncated cone}
4269 \label{f:hilbert:hull}
4270 \end{figure}
4272 \begin{example} \label{ex:hilbert:hull}
4273 Consider the cone
4275 C = \poshull \,\{(2,-3), (3,4)\}
4278 shown in Figure~\ref{f:hilbert:hull}.
4279 The Hilbert basis of this cone is
4280 $$\{(0,0),(2,-3),(3,4),(1,1),(1,-1),(1,0)\}.$$
4281 We have $(1,0) = \frac 1 2 (1,1) + \frac 1 2 (1,-1)$,
4282 while $(1,1)$ and $(1,-1)$ can not be written as
4283 overconvex combinations of the other $\vec b_i \ne \vec 0$.
4284 The vertices of the integer hull of $C \setminus \{ \vec 0 \}$
4285 are therefore
4286 $$\{(2,-3),(3,4),(1,1),(1,-1)\}.$$
4287 \end{example}
4289 \subsubsection{Using generalized basis reduction}
4290 \label{s:hull:cone:gbr}
4292 Another way of computing the integer hull of a truncated cone is to apply
4293 the method of \autoref{s:integer:hull}.
4294 In this case, the initial set of points will consist
4295 of (the smallest integer representatives of) the extremal rays
4296 of the cone, together with the extremal rays themselves.
4297 That is, if $C = \poshull \, \{ \vec r_j \}$ with
4298 $\vec r_j \in \ZZ^d$, then our initial approximation of the
4299 integer hull of $C \setminus \{ \vec 0 \}$ is
4301 \convhull \, \{ \vec r_j \} + \poshull \, \{ \vec r_j \}
4304 Furthermore, we need never consider any
4305 of the bounding constraints that are also bounding constraints
4306 of the original cone.
4307 When optimizing along the normal of any of the other facets, we can
4308 take the lower bound to be $1$. This will ensure that
4309 the origin is excluded, without excluding any other integer points.
4311 \begin{figure}
4312 \intercol=0.5cm
4313 \begin{xy}
4314 <\intercol,0pt>:<0pt,\intercol>::
4315 \POS(0,0)*\xybox{
4316 \POS@i@={(3,-4.5),(2,-3),(3,4),(4.125,5.5),(5.5,5.5),(5.5,-4.5)},{0*[grey]\xypolyline{*}}
4317 \def\latticebody{\POS="c"+(0,-4.5)\ar@{--}"c"+(0,5.5)}%
4318 \POS0,{\xylattice{-0}{5}00}%
4319 \def\latticebody{\POS="c"+(-0.5,0)\ar@{--}"c"+(5.5,0)}%
4320 \POS0,{\xylattice00{-4}5}%
4321 \POS0\ar(2,-3)
4322 \POS0\ar(3,4)
4323 \POS(2,-3)*{\bullet}
4324 \POS(3,4)*{\bullet}
4325 \POS(1,1)*{\circ}
4327 \POS(8,0)*\xybox{
4328 \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{*}}
4329 \def\latticebody{\POS="c"+(0,-4.5)\ar@{--}"c"+(0,5.5)}%
4330 \POS0,{\xylattice{-0}{5}00}%
4331 \def\latticebody{\POS="c"+(-0.5,0)\ar@{--}"c"+(5.5,0)}%
4332 \POS0,{\xylattice00{-4}5}%
4333 \POS0\ar(2,-3)
4334 \POS0\ar(3,4)
4335 \POS(2,-3)*{\bullet}
4336 \POS(3,4)*{\bullet}
4337 \POS(1,1)*{\bullet}
4338 \POS(1,-1)*{\circ}
4340 \POS(16,0)*\xybox{
4341 \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{*}}
4342 \def\latticebody{\POS="c"+(0,-4.5)\ar@{--}"c"+(0,5.5)}%
4343 \POS0,{\xylattice{-0}{5}00}%
4344 \def\latticebody{\POS="c"+(-0.5,0)\ar@{--}"c"+(5.5,0)}%
4345 \POS0,{\xylattice00{-4}5}%
4346 \POS0\ar(2,-3)
4347 \POS0\ar(3,4)
4348 \POS(2,-3)*{\bullet}
4349 \POS(3,4)*{\bullet}
4350 \POS(1,1)*{\bullet}
4351 \POS(1,-1)*{\bullet}
4353 \end{xy}
4354 \caption{The integer hull of a truncated cone}
4355 \label{f:cone:integer:hull}
4356 \end{figure}
4358 \begin{example}
4359 Consider once more the cone
4361 C = \poshull \,\{(2,-3), (3,4)\}
4363 from Example~\ref{ex:hilbert:hull}.
4364 The initial approximation is
4366 C = \convhull \,\{(2,-3), (3,4)\} + \poshull \,\{(2,-3), (3,4)\}
4369 which is shown on the left of \autoref{f:cone:integer:hull}.
4370 The only bounding constraint that does not correspond to a
4371 bounding constraint of $C$ is $7 x - y \ge 17$.
4372 In the first step, we will therefore look for a point
4373 minimizing $7 x - y$ with values in the interval $[1,16]$.
4374 All values of this objective function in the given interval
4375 attained by points in $C$ are shown in \autoref{f:hull:projected}.
4376 From Example~\ref{ex:hull:projected}, we know that the optimal
4377 value is $6$ and this corresponds to the point $(1,1)$.
4378 Adding this point to our hull, we obtain the approximation
4379 in the middle of \autoref{f:cone:integer:hull}.
4380 This approximation has two new facets.
4381 The bounding constraint $3x - 2 y \ge 1$ will not produce
4382 any new points since we would be looking for one in the
4383 interval ``$[1,0]$''.
4384 The other new bounding constraint is $4x + y \ge 5$.
4385 Minimizing $4 x+ y$ with values in the interval $[1,4]$,
4386 we find the minimal value $3$ corresponding to the point $(1,-1)$.
4387 Adding this point, we obtain the complete integer hull
4388 shown on the right of \autoref{f:cone:integer:hull}.
4389 Note that if in the first step we would have added not only
4390 the point corresponding to the optimal value, but instead
4391 all points found in Example~\ref{ex:hull:projected},
4392 then we would have obtained the complete integer hull directly.
4393 \end{example}
4396 \subsection{Computing the lattice width of a parametric polytope}
4397 \label{s:width}
4399 To compute the \ai{lattice width} of a \ai{parametric polytope},
4400 we essentially use the technique of \shortciteN{Eisenbrand2007parameterised},
4401 which improves upon the technique of \shortciteN{Kannan1992}.
4402 Given a parametric polytope
4404 P(\vec p) = \{\, \vec x \mid A \vec x + \vec b(\vec p) \ge \vec 0 \,\}
4407 the width along a direction $\vec c$ is defined in the same
4408 way as for non-parametric polytopes (see \autoref{s:feasibility}),
4409 \begin{equation}
4410 \label{eq:width}
4411 \width_{\vec c} P(\vec p)
4413 \max \{\, \sp c x \mid \vec x \in P(\vec p) \,\}
4415 \min \{\, \sp c x \mid \vec x \in P(\vec p) \,\}
4417 \end{equation}
4418 The \defindex{lattice width} is the minimum width over all
4419 non-zero integer directions:
4421 \width P(\vec p) =
4422 \min_{\vec c \in \ZZ^d \setminus \{ \vec 0 \} } \width_{\vec c} P(\vec p)
4425 We assume that the parameter domain $Q$ of $P(\vec p)$, i.e., the
4426 set of parameter values for which $P(\vec p) \ne \emptyset$,
4427 is full-dimensional and that for each $\vec p$ from the interior
4428 of $Q$, $P(\vec p)$ is also full-dimensional.
4430 Clearly, for any given direction $\vec c$, the minimum and
4431 maximum in \eqref{eq:width} are attained at (different)
4432 vertices of $P(\vec p)$.
4433 The idea of the algorithm is then to consider all pairs
4434 of parametric vertices of $P(\vec p)$, to compute all candidate
4435 integer directions for a given pair of vertices and then to
4436 compute the minimum width over all candidate integer directions
4437 found.
4439 For any given parametric vertex $\vec v(\vec p)$, the (rational)
4440 directions for which this vertex is minimal can be found as follows.
4441 Let $\vec v(\vec p) + C$ be the \ai{vertex cone} of $\vec v(\vec p)$.
4442 If $\vec v(\vec p)$ is minimal for $\vec c$, then all other points
4443 in the vertex cone must yield a bigger or equal value, i.e.,
4444 $\sp y c \ge 0$ for all $\vec y \in C$.
4445 The set of directions is therefore the \ai{polar cone} $C^*$ of $C$.
4446 Note that, in principle, we should only do this for pairs
4447 of vertices that have a common activity domain, where the
4448 activity domains have been partially opened using the
4449 technique of \autoref{p:inclusion-exclusion} to avoid
4450 multiple vertices that coincide on a lower-dimensional
4451 chamber to all be considered on this intersection.
4452 However, this optimization has currently not been implemented.
4454 Given a pair of vertices $\vec v_1(\vec p)$ and $\vec v_2(\vec p)$,
4455 we may assume that $\vec v_1(\vec p)$ attains the minimum and
4456 $\vec v_2(\vec p)$ attains the maximum.
4457 If $\vec v_1(\vec p) + C_1$ and $\vec v_2(\vec p) + C_2$ are the
4458 corresponding vertex cones, then the set of (rational) directions for this
4459 pair of vertices is
4461 C_{1,2} = \left( C_1^* \cap -C_2^* \right) \setminus \{ \vec 0 \}
4464 The set of candidate integer directions are therefore
4465 the vertices of the integer hull of $C_{1,2}$, which
4466 can be computed as explained in \autoref{s:hull:cone}.
4467 To see this, note that by construction
4468 $\sps {\vec c}{\vec v_1(\vec p)} \le \sps {\vec c}{\vec v_2(\vec p)}$
4469 and so
4471 w_{\vec c}(\vec p) = \width_{\vec c} P(\vec p)
4472 = \sps {\vec c}{\vec v_2(\vec p)-\vec v_1(\vec p)} \ge 0
4475 Any integer direction in $C_{1,2}$ will therefore yield
4476 a width that is at least as large as that of one
4477 of the vertices of the integer hull.
4478 Note that when using generalized basis reduction
4479 to compute the integer hull of these cones as in \autoref{s:hull:cone:gbr},
4480 it can be helpful to use as vertices for the initial approximation
4481 not only the extremal rays of the cone, but also those vertices
4482 of previously computed integer hulls that are elements of the current cone.
4484 After computing a list of all possible candidate width directions
4485 $\vec c_i$ and the corresponding widths $w_{\vec c_i}(\vec p)$,
4486 we keep only a single direction of all those that yield
4487 the same width (as an affine function of the parameters).
4488 Then we construct the chambers where each of the widths is minimal,
4489 i.e.,
4491 C_i = \{\, \vec p \in Q \mid \forall j :
4492 w_{\vec c_i}(\vec p) \le w_{\vec c_j}(\vec p) \,\}
4495 Note that many of the $C_i$ may be empty or of lower dimension
4496 than Q and that the other $C_i$ will intersect in common facets.
4497 To obtain a partition of partially-open full-dimensional chambers, we proceed
4498 as in \autoref{s:triangulation}.
4500 \begin{figure}
4501 \intercol=1.1cm
4502 \begin{xy}
4503 <\intercol,0pt>:<0pt,\intercol>::
4504 \def\latticebody{\POS="c"+(0,-0.5)\ar@{--}"c"+(0,7.5)}%
4505 \POS0,{\xylattice{-0}{10}00}%
4506 \def\latticebody{\POS="c"+(-0.5,0)\ar@{--}"c"+(10.5,0)}%
4507 \POS0,{\xylattice00{-0}7}%
4508 \POS@i@={(0,0),(5,3),(9,6),(5,4),(0,0)},{0*[|(2)]\xypolyline{}}
4509 \POS(0,0)*{\bullet}
4510 \POS(5,3)*{\bullet}
4511 \POS(5,4)*{\bullet}
4512 \POS(9,6)*{\bullet}
4513 \POS(3,2)*{\bullet}
4514 \POS(4,3)*{\bullet}
4515 \POS(6,4)*{\bullet}
4516 \POS(7,5)*{\bullet}
4517 \POS(9,6);(8.7,6.4)**{}?(0)/1.1cm/="a"\POS(9,6)\ar"a"
4518 \POS(9,6);(9.1,5.8)**{}?(0)/1.1cm/="a"\POS(9,6)\ar"a"
4519 \POS(5,4);(5.4,3.5)**{}?(0)/1.1cm/="a"\POS(5,4)\ar"a"
4520 \POS(5,4);(5.1,3.8)**{}?(0)/1.1cm/="a"\POS(5,4)\ar"a"
4521 \POS(0,0);(0.4,-0.5)**{}?(0)/1.1cm/="a"\POS(0,0)\ar"a"
4522 \POS(0,0);(-0.3,0.5)**{}?(0)/1.1cm/="a"\POS(0,0)\ar"a"
4523 \POS(5,3);(4.7,3.5)**{}?(0)/1.1cm/="a"\POS(5,3)\ar"a"
4524 \POS(5,3);(4.7,3.4)**{}?(0)/1.1cm/="a"\POS(5,3)\ar"a"
4525 \POS(9,6)*+!DL{\vec v_1}
4526 \POS(0,0)*+!UR{\vec v_3}
4527 \POS(5,3)*+!UL{\vec v_4}
4528 \POS(5,4)*+!DR{\vec v_2}
4529 \end{xy}
4530 \caption{A polytope and its candidate width directions}
4531 \label{f:width}
4532 \end{figure}
4534 \begin{example} \label{ex:width}
4535 Consider the (non-parametric) polytope
4537 P = \left\{\,
4538 \vec x \mid
4539 \begin{aligned}
4540 -3 x_1 +5 x_2 &\ge 0 \\
4541 4 x_1 -5 x_2 &\ge 0 \\
4542 x_1 -2 x_2 + 3 &\ge 0 \\
4543 -3 x_1 +4 x_2 + 3 &\ge 0
4544 \end{aligned}
4545 \,\right\}
4547 shown in \autoref{f:width}. The polytope has four vertices
4549 \begin{aligned}
4550 \vec v_1 & = (9,6) \\
4551 \vec v_2 & = (5,4) \\
4552 \vec v_3 & = (0,0) \\
4553 \vec v_4 & = (5,3)
4555 \end{aligned}
4557 The corresponding cones of directions (for
4558 the given vertex to attain the minimum), also shown
4559 in \autoref{f:width} are
4561 \begin{aligned}
4562 C^*_1 & = \poshull \,\{ (-3,4), (1,-2) \} \\
4563 C^*_2 & = \poshull \,\{ (4,-5), (1,-2) \} \\
4564 C^*_3 & = \poshull \,\{ (4,-5), (-3,5) \} \\
4565 C^*_4 & = \poshull \,\{ (-3,5), (-3,4) \}
4567 \end{aligned}
4570 \begin{figure}
4571 \intercol=0.8cm
4572 \begin{xy}
4573 <\intercol,0pt>:<0pt,\intercol>::
4574 \def\latticebody{\POS="c"+(0,-6.5)\ar@{--}"c"+(0,2.5)}%
4575 \POS0,{\xylattice{-1}{5}00}%
4576 \def\latticebody{\POS="c"+(-1.5,0)\ar@{--}"c"+(5.5,0)}%
4577 \POS0,{\xylattice00{-6}2}%
4578 \POS0\ar@{->}(3,-4)\POS?!{(0,-6.5);(1,-6.5)}="a"
4579 \POS0\ar@{->}(-1,2)
4580 \POS0\ar@{->}(4,-5)\POS?!{(0,-6.5);(1,-6.5)}="b"
4581 \POS0\ar@{->}(1,-2)
4582 \POS@i@={"a",(3,-4),(4,-5),"b"},{0*[grey]\xypolyline{*}}
4583 \POS0,{\ellipse(1.1)(*0;(4,3)*),^,(*0;(-2,-1)*){-}}
4584 \POS0,{\ellipse(1)(*0;(2,1)*),^,(*0;(5,4)*){-}}
4585 \POS0\ar@{->}(3,-4)\POS?!{(0,-6.5);(1,-6.5)}="a"
4586 \POS0\ar@{->}(4,-5)\POS?!{(0,-6.5);(1,-6.5)}="b"
4587 \POS(4,-5)*{\bullet}
4588 \POS(3,-4)*{\bullet}
4589 \end{xy}
4590 \caption{The cone of directions $C_{2,1}$}
4591 \label{f:C:2:1}
4592 \end{figure}
4594 \begin{figure}
4595 \intercol=0.8cm
4596 \begin{xy}
4597 <\intercol,0pt>:<0pt,\intercol>::
4598 \def\latticebody{\POS="c"+(0,-6.5)\ar@{--}"c"+(0,5.5)}%
4599 \POS0,{\xylattice{-3}{5}00}%
4600 \def\latticebody{\POS="c"+(-3.5,0)\ar@{--}"c"+(5.5,0)}%
4601 \POS0,{\xylattice00{-6}5}%
4602 \POS0\ar@{->}(3,-4)
4603 \POS0\ar@{->}(-1,2)\POS?!{(0,5.5);(1,5.5)}="a"
4604 \POS0\ar@{->}(4,-5)\POS?!{(0,-6.5);(1,-6.5)}="b"
4605 \POS0\ar@{->}(-3,5)
4606 \POS@i@={"b",(4,-5),(1,-1),(-1,2),"a",(5.5,5.5),(5.5,-6.5)},{0*[grey]\xypolyline{*}}
4607 \POS0\ar@{->}(-1,2)\POS?!{(0,5.5);(1,5.5)}="a"
4608 \POS0\ar@{->}(4,-5)\POS?!{(0,-6.5);(1,-6.5)}="b"
4609 \POS0,{\ellipse(1.1)(*0;(4,3)*),^,(*0;(-2,-1)*){-}}
4610 \POS0,{\ellipse(1)(*0;(5,4)*),^,(*0;(-5,-3)*){-}}
4611 \POS(1,-1)*{\bullet}
4612 \POS(4,-5)*{\bullet}
4613 \POS(-1,2)*{\bullet}
4614 \end{xy}
4615 \caption{The cone of directions $C_{3,1}$}
4616 \label{f:C:3:1}
4617 \end{figure}
4619 \begin{figure}
4620 \intercol=0.8cm
4621 \begin{xy}
4622 <\intercol,0pt>:<0pt,\intercol>::
4623 \def\latticebody{\POS="c"+(0,-4.5)\ar@{--}"c"+(0,5.5)}%
4624 \POS0,{\xylattice{-3}{3}00}%
4625 \def\latticebody{\POS="c"+(-3.5,0)\ar@{--}"c"+(3.5,0)}%
4626 \POS0,{\xylattice00{-4}5}%
4627 \POS0\ar@{->}(3,-4)
4628 \POS0\ar@{->}(-1,2)
4629 \POS0,{\ellipse(1.1)(*0;(4,3)*),^,(*0;(-2,-1)*){-}}
4630 \POS0\ar@{->}(-3,5)
4631 \POS0\ar@{->}(-3,4)
4632 \POS0,{\ellipse(1)(*0;(-5,-3)*),^,(*0;(-4,-3)*){-}}
4633 \end{xy}
4634 \caption{The cone of directions $C_{4,1}$}
4635 \label{f:C:4:1}
4636 \end{figure}
4638 Let us now consider the directions in which
4639 $\vec v_2$ is minimal while $\vec v_1$ is maximal.
4640 We find
4642 C_{2,1} = \poshull \,\{ (4,-5), (3,-4) \} \setminus \{ \vec 0 \}
4645 as shown in \autoref{f:C:2:1}.
4646 The vertices of the integer hull of $C_{2,1}$ are $(4,-5)$
4647 and $(3,-4)$.
4648 The corresponding widths are
4650 \begin{aligned}
4651 \vec c_1 &= (4,-5) & w_{\vec c_1} &= 6 \\
4652 \vec c_2 &= (3,-4) & w_{\vec c_2} &= 4
4654 \end{aligned}
4656 We similarly find
4658 C_{3,1} = \poshull \,\{ (4,-5), (-1,2) \} \setminus \{ \vec 0 \}
4661 with integer hull
4662 $\poshull \,\{ (4,-5), (-1,2), (1,-1) \}$, shown
4663 in \autoref{f:C:3:1}, yielding
4665 \begin{aligned}
4666 \vec c_3 &= (4,-5) & w_{\vec c_3} &= 6 \\
4667 \vec c_4 &= (-1,2) & w_{\vec c_4} &= 3 \\
4668 \vec c_5 &= (1,-1) & w_{\vec c_5} &= 3
4670 \end{aligned}
4672 On the other hand,
4674 C_{4,1} = \emptyset
4677 as shown in \autoref{f:C:4:1} and so this combination
4678 does not yield any width direction candidates.
4679 The other pairs of vertices further yield
4681 \begin{aligned}
4682 \vec c_6 &= (-1,2) & w_{\vec c_6} &= 3 \\
4683 \vec c_7 &= (-3,5) & w_{\vec c_7} &= 5 \\
4684 \vec c_8 &= (-3,4) & w_{\vec c_8} &= 4 \\
4685 \vec c_9 &= (-3,5) & w_{\vec c_9} &= 5 \\
4686 \vec c_{10} &= (-2,3) & w_{\vec c_{10}} &= 3
4688 \end{aligned}
4690 Since the polytope under consideration is not parametric,
4691 there is only one (non-empty, $0$-dimensional) chamber and
4692 it corresponds to one of the directions, say $\vec c_4 = (-1,2)$,
4693 with width $3$ (the other directions with the same width
4694 having been removed).
4696 \begin{figure}
4697 \intercol=1.1cm
4698 \begin{xy}
4699 <\intercol,0pt>:<0pt,\intercol>::
4700 \def\latticebody{\POS="c"+(0,-0.5)\ar@{--}"c"+(0,7.5)}%
4701 \POS0,{\xylattice{-0}{10}00}%
4702 \def\latticebody{\POS="c"+(-0.5,0)\ar@{--}"c"+(10.5,0)}%
4703 \POS0,{\xylattice00{-0}7}%
4704 \POS@i@={(0,0),(5,3),(9,6),(5,4),(0,0)},{0*[|(2)]\xypolyline{}}
4705 \POS(-0.5,-0.5)\ar@{.}(7.5,7.5)
4706 \POS(0.5,-0.5)\ar@{.}(8.5,7.5)
4707 \POS(1.5,-0.5)\ar@{.}(9.5,7.5)
4708 \POS(2.5,-0.5)\ar@{.}(10.5,7.5)
4709 \POS(-0.5,-0.25)\ar@{-}(10.5,5.25)
4710 \POS(-0.5,0.25)\ar@{-}(10.5,5.75)
4711 \POS(-0.5,0.75)\ar@{-}(10.5,6.25)
4712 \POS(-0.5,1.25)\ar@{-}(10.5,6.75)
4713 \POS(-0.25,-0.5)\ar@{--}(10.5,6.666)
4714 \POS(-0.5,-0.333)\ar@{--}(10.5,7)
4715 \POS(-0.5,0)\ar@{--}(10.5,7.333)
4716 \POS(-0.5,0.333)\ar@{--}(10.25,7.5)
4717 \POS(0,0)*{\bullet}
4718 \POS(5,3)*{\bullet}
4719 \POS(5,4)*{\bullet}
4720 \POS(9,6)*{\bullet}
4721 \POS(3,2)*{\bullet}
4722 \POS(4,3)*{\bullet}
4723 \POS(6,4)*{\bullet}
4724 \POS(7,5)*{\bullet}
4725 \end{xy}
4726 \caption{A polytope and its lattice width directions}
4727 \label{f:width:2}
4728 \end{figure}
4730 Each of the three directions that yield the minimal
4731 width of 3 is shown in \autoref{f:width:2}.
4732 \end{example}
4734 \begin{example} \label{ex:width:2}
4735 Consider the polytope
4737 P(p) = \left\{\,
4738 \vec x \mid
4739 \begin{aligned}
4740 -2 x_1 + p + 5 &\ge 0 \\
4741 2 x_1 + p + 5 &\ge 0 \\
4742 -2 x_2 - p + 5 &\ge 0 \\
4743 2 x_2 - p + 5 &\ge 0
4744 \end{aligned}
4745 \,\right\}
4747 from \shortciteN[Example~2.1.7]{Woods2004PhD}.
4748 The parametric vertices are
4750 \begin{aligned}
4751 \vec v_1(p) & = \left(\frac{p+5}2, \frac{-p+5}2\right) \\
4752 \vec v_2(p) & = \left(\frac{p+5}2, \frac{p-5}2\right) \\
4753 \vec v_3(p) & = \left(\frac{-p-5}2, \frac{-p+5}2\right) \\
4754 \vec v_4(p) & = \left(\frac{-p-5}2, \frac{p-5}2\right)
4756 \end{aligned}
4758 We find two essentially different candidate width directions
4760 \begin{aligned}
4761 \vec c_1 &= (0,1) & w_{\vec c_1}(p) &= 5-p \\
4762 \vec c_2 &= (1,0) & w_{\vec c_2}(p) &= 5+p
4764 \end{aligned}
4766 The first direction can be found by combining, say,
4767 $\vec v_1(p)$ and $\vec v_2(p)$, while the second direction can be
4768 found by combining, say, $\vec v_1(p)$ and $\vec v_3(p)$.
4769 The parameter domain for the parametric polytope $P(p)$ is
4771 Q = \{\, p \mid -5 \le p \le 5 \,\}
4774 The two (closed) chambers are therefore
4776 \begin{aligned}
4777 C_1 &= \{\, p \in Q \mid 5 - p \le 5+p \,\} \\
4778 C_2 &= \{\, p \in Q \mid 5 + p \le 5-p \,\}
4780 \end{aligned}
4782 To obtain a partition, \autoref{s:interior} gives
4783 the internal point $(0,0)$, which happens to meet
4784 the facets $p \ge 0$ and $-p \ge 0$. We therefore
4785 keep the facet with positive (inner) normal closed
4786 and open up the other facet. The result is
4788 \begin{aligned}
4789 \hat C_1 &= \{\, p \mid 0 \le p \le 5 \,\} \\
4790 \hat C_2 &= \{\, p \mid -5 \le p < 0 \,\}
4792 \end{aligned}
4794 Since we are usually only interested in integer parameter
4795 values, the latter chamber would become
4796 $\hat C_2 = \{\, p \mid -5 \le p \le -1 \,\}$.
4797 \end{example}
4799 Our description differs slightly from that of
4800 of \shortciteN{Eisenbrand2007parameterised}.
4801 First, they consider all pairs of basic solutions instead
4802 of all pairs of vertices, which means that they may
4803 consider basic solutions that are never feasible and that,
4804 in case of a non-simple polytope,
4805 they may consider the same parametric vertex more than once.
4806 The set of integer
4807 directions for a pair of vertices is the intersection of
4808 the sets of integer directions they obtain for each of
4809 the corresponding basic solutions.
4810 Second, they use a different method of creating a partition
4811 of partially-open chambers, which may lead to some lower-dimensional
4812 chambers surviving and hence to a larger total number of chambers.
4815 \subsection{Testing whether a set has an infinite number of points}
4816 \label{s:infinite}
4818 In some situation we are given the generating function of
4819 some integer set and we would like to know if the set is
4820 infinite or not. Typically, we want to know if the set
4821 is empty or not, but we cannot simply count the number of elements
4822 in the standard way since we may not have any guarantee that
4823 the set has only a finite number of elements.
4824 We will consider the slightly more general case where we are
4825 given a rational generating function $f(\vec x)$ of the form~\eqref{eq:rgf}
4826 such that
4827 \begin{equation}
4828 \label{eq:rgf:psp}
4829 f(\vec x) = \sum_{\vec s \in Q \cap \ZZ^d} c(\vec s)\, \vec x^{\vec s}
4830 \end{equation}
4831 converges on some nonempty open subset of $\CC^d$, $Q$ is a pointed
4832 polyhedron and $c(\vec s) \ge 0$,
4833 and we want to compute
4834 \begin{equation}
4835 \label{eq:psp:sum}
4836 S = \sum_{\vec s \in Q \cap \ZZ^d} c(\vec s)
4838 \end{equation}
4839 where the sum may diverge, i.e., ``$S = \infty$''.
4840 The following proposition shows that we can determine $S$
4841 in polynomial time.
4842 For a sketch of an alternative technique, see
4843 \shortciteN[Proof of Lemma~16]{Woods2005period}.
4845 \begin{proposition}
4846 Fix $d$ and $k$.
4847 Given a \rgf/ of the form~\eqref{eq:rgf} with $k_i \le k$
4848 and a pointed polyhedron $Q \subset \QQ^d$, then there is a
4849 polynomial time algorithm that determines for the corresponding
4850 function $c(\vec s)$~\eqref{eq:rgf:psp} whether the sum~\eqref{eq:psp:sum}
4851 diverges and computes the value of $S$~\eqref{eq:psp:sum} if it does not.
4852 \end{proposition}
4853 \begin{proof}
4854 Since $Q$ is pointed, the series~\eqref{eq:rgf:psp} converges on a neighborhood
4855 of $e^{\vec \ell} = (e^{\ell_1}, \ldots, e^{\ell_d})$ for any $\vec \ell$
4856 such that $\sps {\vec r_k} {\vec \ell} < 0$ for
4857 any (extremal) ray $\vec r_k$ of $Q$ and
4858 such that $\sps {\vec b_{i j}} {\vec \ell} \ne 0$ for any
4859 $\vec b_{i j}$ in~\eqref{eq:rgf}.
4860 Let $\vec \alpha = - \vec \ell$ and perform the substitution
4861 $\vec x = t^{\vec \alpha}$. The function $g(t) = f(t^{\vec \alpha})$
4862 is then also a (short) \rgf/ and
4864 g(t) = \sum_{k \in \sps {\vec\alpha} Q \cap \ZZ}
4865 \left(
4866 \sum_{\shortstack{$\scriptstyle \vec s \in Q \cap \ZZ^d$\\
4867 $\scriptstyle \sp \alpha s = k$}} c(\vec s)
4868 \right) t^k
4869 =: \sum_{k \in \sps {\vec\alpha} Q \cap \ZZ} d(k) \, t^k
4872 with $\sps {\vec\alpha} Q = \{ \sp \alpha x \mid \vec x \in Q \}$,
4873 converges in a neighborhood of $e^{-1}$, while
4875 S = \sum_{k \in \sps {\vec\alpha} Q \cap \ZZ} d(k)
4878 Since $c(\vec s) \ge 0$, we have $d(k) \ge 0$
4879 and the above sum diverges iff any of the coefficients of the
4880 negative powers of $t$ in the Laurent expansion of $g(t)$ is non-zero.
4881 If the sum converges, then the sum is simply the coefficient
4882 of the constant term in this expansion.
4884 It only remains to show now that we can compute a suitable $\vec \alpha$
4885 in polynomial time, i.e., an $\vec \alpha$ such that
4886 $\sps {\vec r_k} {\vec \alpha} > 0$ for any (extremal) ray $\vec r_k$ of $Q$ and
4887 $\sps {\vec b_{i j}} {\vec \alpha} \ne 0$ for any
4888 $\vec b_{i j}$ in~\eqref{eq:rgf}.
4889 By adding the $\vec r_k$ to the list of $\vec b_{i j}$ if needed, we can relax
4890 the first set of constraints to $\sps {\vec r_k} {\vec \alpha} \ge 0$.
4891 Let $Q$ be described by the constraints $A \vec x + \vec c \ge \vec 0$
4892 and let $B$ be $d \times d$ non-singular submatrix of $A$, obtained
4893 by removing some of the rows of $A$. Such a $B$ exists since
4894 $Q$ does not contain any straight line.
4895 Clearly, $B \vec r \ge \vec 0$ for any ray $\vec r$ of $Q$.
4896 Let $\vec b'_{i j} = B \vec b_{i j}$, then since $\vec b_{i j} \ne \vec 0$
4897 and B is non-singular, we have $\vec b'_{i j} \ne \vec 0$.
4898 We may therefore find in polynomial time a point $\vec \alpha' \ge \vec 0$
4899 on the ``\ai{moment curve}'' such that
4900 $\sps {\vec b'_{i j}} {\vec \alpha'} \ne 0$
4901 \shortcite[Algorithm~5.2]{Barvinok1999}.
4902 Let $\vec \alpha = B^\T \vec \alpha'$.
4903 Then
4905 \sps {\vec b_{i j}} {\vec \alpha}
4907 \sps {\vec b_{i j}} {B^\T \vec \alpha'}
4909 \sps {B \vec b_{i j}} {\vec \alpha'}
4911 \sps {\vec b'_{i j}} {\vec \alpha'}
4912 \ne 0
4916 \sps {\vec r_k} {\vec \alpha}
4918 \sps {\vec r_k} {B^\T \vec \alpha'}
4920 \sps {B \vec r_k} {\vec \alpha'}
4921 \ge 0
4924 as required.
4925 Note that in practice, we would, as usual, first try a
4926 fixed number of random vectors $\vec \alpha' \ge \vec 0$
4927 before resorting to looking for a point on the moment curve.
4928 \end{proof}
4931 \subsection{Enumerating integer projections of parametric polytopes}
4932 \label{s:projection}
4934 In this section we are interested in computing
4935 \begin{equation}
4936 \label{eq:count:projection}
4937 c(\vec s)=\#\left\{\vec t\in\ZZ^{d} \mid \exists \vec u\in\ZZ^{m}:
4938 (\vec s,\vec t,\vec u)\in P\right\}
4940 \end{equation}
4941 with $P \subset \QQ^{n}\times\QQ^{d}\times\QQ^{m}$ a rational
4942 pointed polyhedron such that
4944 P_{\vec s}=\left\{(\vec t,\vec u)\in\QQ^d\times\QQ^m
4945 \mid (\vec s,\vec t,\vec u)\in P\right\}
4947 is a polytope for any $\vec s$.
4948 This is equivalent to computing the number of points
4949 in the \ai{integer projection} of a parametric polytope
4951 c(\vec s)=\#\big(\pi(P_{\vec s}\cap\ZZ^{d+m})\big)
4954 with $\pi:\QQ^d\times\QQ^m\rightarrow\QQ^d$ defined by
4955 $\pi(\vec t, \vec u)=\vec t$.
4956 Exponential methods for computing $c(\vec s)$ are
4957 described by \shortciteN{Verdoolaege2005experiences}
4958 and \shortciteN{Seghir2006memory}.
4959 Here, we provide some implementation details for the polynomial
4960 method of \shortciteN[Theorem~1.7]{Woods2003short}, for
4961 computing the generating function, $\sum_{\vec s}c(\vec s) \, \vec x^{\vec s}$,
4962 which can then be converted into an explicit function $c(\vec s)$
4963 \shortcite[Corollary~1.11]{Verdoolaege2007counting}.
4964 Note that in contrast to \shortciteN[Theorem~1.7]{Woods2003short},
4965 we may allow $P$ to be an unbounded (but still pointed) polyhedron here
4966 (as long as $P_{\vec s}$ is bounded), since
4967 we replace their application of
4968 \shortciteN[Lemma~3.1]{Kannan1992}
4969 by \shortciteN[Theorem~5]{Eisenbrand2007parameterised}.
4971 If there is only one existentially quantified variable ($m = 1$),
4972 then computing~\eqref{eq:count:projection} is easy.
4973 You simply shift $P$ by $1$ in the $u$ direction and subtract
4974 this shifted copy from the original,
4976 D = P \setminus (\vec e_{n+d+1} + P)
4979 (See, e.g., \shortciteN[Figure~1, page~973]{Woods2003short}
4980 or \shortciteN[Figure~4.33, page~186]{Verdoolaege2005PhD}.)
4981 In the difference $D$ there will be {\em exactly} one value of $u$
4982 for each value of the remaining variables for which there was
4983 {\em at least} one value of $u$ in $P$,
4985 \forall (\vec s, \vec t):
4986 \quad
4987 \left(
4988 \exists u: (\vec s, \vec t, u) \in P
4989 \right)
4990 \iff
4991 \left(
4992 \exists! u: (\vec s, \vec t, u) \in D
4993 \right)
4996 The function $c(\vec s)$ can then be computed by counting
4997 the number of elements in $D(\vec s)$.
4998 These operations can be performed either in the space
4999 of (unions of) parametric polytopes or on generating functions.
5000 In the first case, $D(\vec s)$ can be written as a disjoint union
5001 of parametric polytopes that can be enumerated separately.
5002 In the second case, we first compute the generating function
5003 $f(\vec x, \vec y)$ of the set
5007 (\vec s, \vec t) \mid \exists u \in \ZZ : (\vec s, \vec t, u) \in P
5010 and then obtain the generating function $C(\vec x)$ of $c(\vec s)$
5011 as $C(\vec x) = f(\vec x, \vec 1)$.
5012 In the remainder of this section, we will concentrate on the
5013 computation of the generating function of $S$.
5014 To compute this generating function in the current case where
5015 there is only one existentially quantified variable, we first
5016 compute the generating function $g(\vec x, \vec y, z)$ of
5017 $P(\vec s, \vec t, u)$, perform operations on the generating function
5018 equivalent to the set operations (see, e.g.,
5019 \shortciteN[Section~4.5.3]{Verdoolaege2005PhD}), resulting
5020 in a generating function $g'(\vec x, \vec y, z)$, and then sum
5021 over all values (at most one for each value of $\vec s$
5022 and $\vec t$) of $u$, i.e., $f(\vec x, \vec y) = g'(\vec c, \vec y, 1)$.
5024 \begin{figure}
5025 \intercol=1.05cm
5026 \begin{xy}
5027 <\intercol,0pt>:<0pt,\intercol>::
5028 \def\latticebody{\POS="c"+(0,-0.5)\ar@{--}"c"+(0,7.5)}%
5029 \POS0,{\xylattice{-0}{10}00}%
5030 \def\latticebody{\POS="c"+(-0.5,0)\ar@{--}"c"+(10.5,0)}%
5031 \POS0,{\xylattice00{-0}7}%
5032 \POS@i@={(0,0),(5,3),(9,6),(5,4),(0,0)},{0*\xypolyline{}}
5033 \POS(0,0)*[*0.333]\xybox{
5034 \POS@i@={(0,0),(5,3),(9,6),(5,4),(0,0)},{0*\xypolyline{--}}
5036 \POS(0,0)*{\bullet}
5037 \POS(5,3)*{\bullet}
5038 \POS(5,4)*{\bullet}
5039 \POS(9,6)*{\bullet}
5040 \POS(3,2)*{\bullet}
5041 \POS(4,3)*{\bullet}
5042 \POS(6,4)*{\bullet}
5043 \POS(7,5)*{\bullet}
5044 \POS(-1,-0.5)\ar@{-}(-1,7.5)
5045 \POS(-1,0)*{\bullet}
5046 \POS(-1,3)*{\bullet}
5047 \POS(-1,4)*{\bullet}
5048 \POS(-1,6)*{\bullet}
5049 \POS(-1,2)*{\bullet}
5050 \POS(-1,3)*{\bullet}
5051 \POS(-1,4)*{\bullet}
5052 \POS(-1,5)*{\bullet}
5053 \POS(-0.5,-1)\ar@{-}(10.5,-1)
5054 \POS(0,-1)*+++!UR{S}
5055 \POS(0,-1)*{\bullet}
5056 \POS(5,-1)*{\bullet}
5057 \POS(5,-1)*{\bullet}
5058 \POS(9,-1)*{\bullet}
5059 \POS(3,-1)*{\bullet}
5060 \POS(4,-1)*{\bullet}
5061 \POS(6,-1)*{\bullet}
5062 \POS(7,-1)*{\bullet}
5063 \end{xy}
5064 \caption{A polytope and its integer projections}
5065 \label{f:projection}
5066 \end{figure}
5068 If there is more than one existentially quantified variable ($m > 1$),
5069 then we can in principle apply the above shifting and subtracting
5070 technique recursively to obtain a generating function
5071 $f(\vec x, \vec y)$ for the set
5072 \begin{equation}
5073 \label{eq:projection:T}
5076 (\vec s, \vec t) \mid \exists \vec u \in \ZZ^m : (\vec s, \vec t, \vec u) \in P
5078 \end{equation}
5079 and then compute $C(\vec x) = f(\vec x, \vec 1)$.
5080 There are however some complications.
5081 Most notably, after applying the technique in one direction
5082 and projecting out the corresponding variable, the resulting set, i.e.,
5086 (\vec s, \vec t, u_1, \ldots, u_{m-1}) \mid
5087 \exists u_m \in \ZZ : (\vec s, \vec t, \vec u) \in P
5091 in general does not correspond to the integer points in some polytope.
5092 For example, assume that the polytope in \autoref{f:projection}
5093 contains the values of $\vec u$ associated to a particular
5094 value of $(\vec s, \vec t)$. Since there are integer points
5095 in this polytope, we should count this value of $\vec t$, but only once.
5096 If we apply the above technique in the vertical direction ($u_2$), then
5097 we can compute (a generating function for) the set $S$ shown
5098 on the bottom of the figure.
5099 Note, however, that there are ``gaps'' in this set, i.e.,
5100 if we compute $S \setminus (\vec e_{n+d+1} + S)$ then we will not
5101 end up with a single point (for this value of $(\vec s, \vec t)$).
5102 Since the biggest gap is three wide, we need
5103 to compute
5106 \setminus (\vec e_{n+d+1} + S)
5107 \setminus (2 \vec e_{n+d+1} + S)
5108 \setminus (3 \vec e_{n+d+1} + S)
5110 to obtain a single point.
5111 If we do the subtraction in the horizontal direction first,
5112 then we end up with a set (shown on the left) with gaps
5113 at most two wide, so afterwards we only need to subtract twice in the
5114 vertical direction.
5116 \begin{figure}
5117 \intercol=0.8cm
5118 \begin{xy}
5119 <\intercol,0pt>:<0pt,\intercol>::
5120 \def\latticebody{\POS="c"+(0,-0.5)\ar@{--}"c"+(0,7.5)}%
5121 \POS0,{\xylattice{-0}{4}00}%
5122 \def\latticebody{\POS="c"+(-0.5,0)\ar@{--}"c"+(4.5,0)}%
5123 \POS0,{\xylattice00{-0}7}%
5124 \POS@i@={(0,0),(1,3),(3,6),(3,4),(0,0)},{0*\xypolyline{}}
5125 \POS(0,0)*{\bullet}
5126 \POS(1,3)*{\bullet}
5127 \POS(3,4)*{\bullet}
5128 \POS(3,6)*{\bullet}
5129 \POS(1,2)*{\bullet}
5130 \POS(2,3)*{\bullet}
5131 \POS(2,4)*{\bullet}
5132 \POS(3,5)*{\bullet}
5133 \POS(-0.5,-1)\ar@{-}(4.5,-1)
5134 \POS(0,-1)*+++!UR{S}
5135 \POS(0,-1)*{\bullet}
5136 \POS(1,-1)*{\bullet}
5137 \POS(2,-1)*{\bullet}
5138 \POS(3,-1)*{\bullet}
5139 \end{xy}
5140 \caption{A transformed polytope and its integer projection}
5141 \label{f:projection:2}
5142 \end{figure}
5144 In general, there is no bound on the widths of the gaps we may
5145 encounter in any given direction. However, there are directions
5146 in which the gaps are known to be ``small''.
5147 In particular, if the dimension $m$ is fixed, then the lattice width
5148 (see \autoref{s:width}) of lattice point free polytopes
5149 is bounded by a constant $\omega(m)$%
5150 ~\shortcite{Lagarias90,Barvinok02,Banaszczyk1999flatness}.
5151 This means that in the direction of the lattice width of a polytope,
5152 the gaps will be not be larger than $\omega(m)$
5153 \shortcite[Theorem~4.3]{Woods2003short}.
5154 Otherwise, we would be able to put a (uniformly) scaled down version
5155 of the polytope in the gap and it would contain no lattice points,
5156 which would contradict the fact that its lattice width is bounded
5157 by $\omega(m)$.
5158 \autoref{f:projection} contains such a scaled down copy
5159 of the original polytope. However, neither the horizontal
5160 nor the vertical direction is a lattice width direction
5161 of this polytope. The actual lattice width of this
5162 polytope was computed in Example~\ref{ex:width} as $3$
5163 with corresponding direction $\vec c = (-1,2)$.
5164 \autoref{f:projection:2} shows the result of applying
5165 the unimodular transformation
5167 \begin{bmatrix}
5168 -1 & 2 \\
5169 0 & 1
5170 \end{bmatrix}
5172 to the polytope. Note that the horizontal direction
5173 now has gaps of width at most 1. After shifting, subtracting
5174 and projecting in the vertical direction, we therefore
5175 end up with a set $S$ with gaps of width 1 and we then
5176 only have to shift and subtract once in the remaining
5177 (horizontal) direction.
5179 In fact, for two-dimensional polytopes the gaps in the lattice
5180 width direction will always be one, as shown by the following lemma.
5181 \begin{lemma}
5182 \label{l:gap}
5183 For any rational polygon, the gaps in a lattice
5184 width direction are of width at most 1.
5185 \end{lemma}
5186 \begin{proof}
5187 We may assume that $x$ is the given lattice width direction of
5188 a given polygon $P$.
5189 If there is a gap of width 2, then there is an integer value $x_1$ of $x$
5190 such that
5191 $P \cap \{\, (x_1, y) \,\} \ne \emptyset$,
5192 $P \cap \{\, (x_1+2, y) \,\} \ne \emptyset$,
5193 while
5194 $P \cap \{\, (x_1+1, y) \,\} \cap \ZZ^2 = \emptyset$.
5195 Using \shortciteN[Lemma~4.2]{Woods2003short}, we can put
5196 a scaled down copy $P'$ of $P$ between $x=x_1$ and $x=x_1+2$
5197 (and inside of $P$).
5198 $P'$ meets the line $x=x_1+1$ between two consecutive integer
5199 points, $y_1$ and $y_1+1$. Let $P''$ be the polygon bounded by $x=x_1$ and
5200 $x=x_1+2$ and two lines that separate $P'$ from these two
5201 integer points.
5202 $P''$ will have the same width (2) in the
5203 $x$ direction, while $P' \subset P''$.
5204 The $x$ direction is therefore also a lattice width direction of $P''$.
5205 $P''$ cannot intersect both $x=x_1$ and $x=x_1+2$ in a segment of
5206 length greater than or equal to $1$.
5207 Otherwise, it would also intersect $x=x_1+1$ in a segment of length
5208 greater than or equal to $1$.
5210 We may therefore assume that the length of the intersection
5211 of $P''$ with $x=x_1$ is smaller than $1$.
5212 If this line segment contains an integer point, then call it $y_2$.
5213 Otherwise, let $y_2$ be the greatest integer smaller than the
5214 points in the line segment.
5215 We may assume that $y_1 = y_2$.
5216 Otherwise, we can apply the unimodular transformation
5218 \begin{bmatrix}
5219 x \\
5221 \end{bmatrix}
5223 \begin{bmatrix}
5224 1 & 0 \\
5225 y_1 - y_2 & 1
5226 \end{bmatrix}
5227 \begin{bmatrix}
5228 x \\
5230 \end{bmatrix}
5233 without changing the width in direction $x$.
5234 If $P''$ contains $(x_1, y_1)$, it intersects $x=x_1$
5235 in a segment $[y_1-\alpha_1, y_1+\alpha_2]$.
5236 We may then similarly assume that $\alpha_2 \ge \alpha_1$.
5237 $P''$ will only cut $x=x_1+2$ in points with $y$-coordinate
5238 smaller than $2-\alpha_2$. The width in the $y$ direction
5239 will therefore be smaller than $2-\alpha_2+\alpha_1 \le 2$,
5240 contradicting that $x$ is a lattice width direction.
5241 If $P''$ does not contain $(x_1, y_1)$, then it only
5242 intersects $x=x_1$ in points with $y$-coordinate $y_1+\alpha$
5243 with $0 < \alpha < 1$. Given any such point, it is clear
5244 that $P''$ intersects $x=x_1+2$ only in points with $y$-coordinate
5245 strictly between $y_1-\alpha$ and $y_1+1-\alpha$, again
5246 showing that the width in the $y$ direction is smaller than $2$ and
5247 leading to the same contradiction.
5248 The contradiction shows that there can be no gaps
5249 of width 2 in the lattice width direction of $P$.
5250 \end{proof}
5251 Note that the $\omega(2)$ bound is too coarse to reach
5252 the above conclusion as $\omega(2) > 2$.
5253 An example of a polygon with lattice with greater than $2$ is the polygon
5254 with vertices $(-17/110,83/110)$, $(2/10,-9/10)$ and $(177/90, 100/90)$,
5255 shown in \autoref{f:empty:width:2}, which has width $221/110$.
5257 \begin{figure}
5258 \intercol=3cm
5259 \begin{xy}
5260 <\intercol,0pt>:<0pt,\intercol>::
5261 \def\latticebody{\POS="c"+(0,-1.5)\ar@{--}"c"+(0,1.5)}%
5262 \POS0,{\xylattice{-1}{2}00}%
5263 \def\latticebody{\POS="c"+(-1.5,0)\ar@{--}"c"+(2.5,0)}%
5264 \POS0,{\xylattice00{-1}1}%
5265 \POS@i@={(-0.1545,0.7545),(0.2,-0.9),(1.966,1.111),(-0.1545,0.74545)},{0*\xypolyline{}}
5266 \end{xy}
5267 \caption{Lattice point free polygon with lattice width 2}
5268 \label{f:empty:width:2}
5269 \end{figure}
5271 The idea of the projection algorithm
5272 is now to first find a direction in which the gaps
5273 are expected to be small and to unimodularly transform
5274 the existentially quantified variables such that this direction
5275 lies in the direction of one of the transformed variables.
5276 Then, the remaining existentially quantified variables are
5277 projected out by applying the technique recursively.
5278 The resulting generating function will have gaps at most
5279 $\omega(m)$ wide and so we have to subtract at most
5280 $\omega(m)$ shifted copies of this generating function
5281 before we can plug in 1 to project out the selected
5282 (and now only remaining) existentially quantified variable.
5283 We now look at each of these step in a bit more detail.
5285 We are given a polyhedron $P$ such that $P_{\vec s}$ is a polytope
5286 and we want to compute a generating function $f(\vec x, \vec y)$
5287 for the set $T$ in~\eqref{eq:projection:T}.
5288 We first compute the lattice width directions of
5289 the $m$-dimensional parametric polytope $P_{\vec s, \vec t}$
5290 as in \autoref{s:width}.
5291 The result is a partition of the parameter domain, i.e.,
5292 the projection of $P$ onto the first $n+d$ coordinates,
5293 into partially open polyhedra $Q_i$, together with
5294 the lattice width direction $\vec c_i$ corresponding to each $Q_i$.
5295 Since the generating functions only encode integer points,
5296 we can replace each open facet $\sp a x + b > 0$ by the closed
5297 facet $\sp a x + b - 1 \ge 0$ to obtain a collection of closed
5298 polyhedra $\tilde Q_i$. Now let
5300 P_i = P \cap \tilde Q_i \times \QQ^m
5302 and let $f_i(\vec x, \vec y)$ be the generating function of the set
5304 T_i =
5306 (\vec s, \vec t) \mid
5307 \exists \vec u \in \ZZ^m : (\vec s, \vec t, \vec u) \in P_i
5311 Then clearly,
5313 f(\vec x, \vec y) = \sum_i f_i(\vec x, \vec y)
5316 From now on, we will consider a particular $P_i$ with corresponding
5317 lattice width $\vec c_i$ and drop the $i$ subscript.
5319 We are now given a polyhedron $P$ such that the lattice width
5320 direction of $P_{\vec s, \vec t}$ is $\vec c$.
5321 We first extend $\vec c$ to an $m \times m$ unimodular matrix $U$
5322 using the technique of \autoref{s:completion},
5326 \begin{bmatrix}
5327 \vec c^\T
5330 \end{bmatrix}
5332 and then compute
5334 P' =
5335 \begin{bmatrix}
5336 I_n & 0 & 0 \\
5337 0 & I_d & 0 \\
5338 0 & 0 & U
5339 \end{bmatrix}
5343 We have
5347 (\vec s, \vec t) \mid
5348 \exists \vec u' \in \ZZ^m : (\vec s, \vec t, \vec u') \in P'
5352 i.e., we may have changed the values of the existentially
5353 quantified variables, but we have not changed the set $T$.
5354 Now consider the set
5356 T' =
5358 (\vec s, \vec t, u_1') \mid
5359 \exists (u_2',\ldots,u_m') \in \ZZ^{m-1} :
5360 (\vec s, \vec t, \vec u') \in P'
5364 This set has only $m-1$ existentially quantified variables, so
5365 we may apply this projection algorithm recursively and obtain
5366 the generating function $f'(\vec x, \vec y, z)$ for $T'$.
5367 The set $T'$ may no longer correspond to the integer points
5368 in a polytope, but, by construction, the gaps in the final
5369 coordinate are small ($\le \omega(m)$).
5371 By now we have a generating function $f'(\vec x, \vec y, z)$
5372 for the set $T'$ (with small
5373 gaps in the final coordinate) and we have to compute the
5374 generating function $f(\vec x, \vec y)$ for $T$.
5375 By computing
5376 \begin{equation}
5377 \label{eq:projection:omega}
5378 f''(\vec x, \vec y, z) =
5379 f'(\vec x, \vec y, z) \bigoplus_{k=1}^{\floor{\omega(m)}}
5380 \left( z^k f'(\vec x, \vec y, z) \right)
5382 \end{equation}
5383 where $\oplus$ represents the operation on generating functions
5384 that corresponds to set difference on the corresponding sets,
5385 we obtain a generating for the set $T''$ where only
5386 the smallest value of $u_1'$ is retained.
5387 The total number of $u_1'$s associated to any $(\vec s, \vec t)$
5388 is therefore either zero or one and so the ``multiset'' defined
5389 by taking as many copies of $(\vec s, \vec t)$ as there are
5390 associated values of $u_1'$ is actually the set $T$.
5391 That is
5393 f(\vec x, \vec y) = f''(\vec x, \vec y, 1)
5397 The only remaining problem is that the ``$\oplus$'' operation
5398 in~\eqref{eq:projection:omega} is fairly expensive.
5399 In particular, this operation is performed by first
5400 computing the \ai{Hadamard product} of the two generating functions
5401 (which corresponds to the intersection of the sets) and
5402 then subtracting the resulting generating function from this
5403 first generating function.
5404 The last operation is fairly cheap, but the Hadamard product
5405 has a time complexity which while polynomial if the dimension (in
5406 this case the maximum of $k_i$ in~\eqref{eq:rgf}) is fixed,
5407 is exponential in this dimension.
5408 Furthermore, this dimension increases by $\max k_i - d$ on each
5409 successive application of the Hadamard product, while $\max k_i > d$
5410 as soon as some projection is performed, which certainly happens in the
5411 recursive application of the algorithm.
5412 Now, the total number of Hadamard products is bounded by a constant
5413 $\floor{\omega(m)}$ and so the increase in dimension is also bounded
5414 by a constant, so the whole operation is still polynomial for
5415 fixed dimension.
5416 Nevertheless, we do not want to perform any additional Hadamard
5417 products if we do not really have to.
5418 That is, we would like to be able to detect when we can stop
5419 performing these operations {\em before} reaching the upper
5420 bound $\floor{\omega(m)}$.
5422 Let $f'_0(\vec x, \vec y, z) = f'(\vec x, \vec y, z)$ and
5423 let $f'_k(\vec x, \vec y, z)$ be the result of applying
5424 the ``set difference'' in~\eqref{eq:projection:omega} $k$ times.
5425 Denote the corresponding sets by $T'_0$ and $T'_k$.
5426 We want to find the smallest $k$ such that
5427 $f''(\vec x, \vec y, z) = f'_k(\vec x, \vec y, z)$.
5428 Note that we are talking about equality of rational functions here.
5429 Any further application of the set difference operation will
5430 not change this rational function, but it {\em will\/} typically
5431 produce a different (more complex) representation.
5432 To check whether the current $k$ is sufficient, we are going to
5433 count how many times any element of $T'_k$ still appears in a
5434 shifted copy of $T'_0$, with shift greater than or equal to $k+1$.
5435 If this number is zero, any further set difference will have no effect.
5436 That is, we want to compute
5438 \sum_{l=k+1}^\infty
5439 \left|
5440 T'_l \cap \left(\vec e_{n+d+1} + T' \right)
5441 \right|
5444 or, in terms of generating functions,
5446 h(\vec x, \vec y, z) = \sum_{l=k+1}^\infty
5447 f_k'(\vec x, \vec y, z) \star z^l \, f'(\vec x, \vec y, z)
5450 We should point out here that while the Hadamard product ($\star$)
5451 corresponds to intersection when applied to generator functions
5452 of indicator functions (i.e., with coefficients one or zero),
5453 in general it will produce a generating function with coefficients
5454 that are the product of the corresponding coefficients in the two
5455 operands.
5456 We can therefore rewrite the above equation as
5458 \begin{aligned}
5459 h(\vec x, \vec y, z) & = \sum_{l=k+1}^\infty
5460 f_k'(\vec x, \vec y, z) \star z^l \, f'(\vec x, \vec y, z)
5462 & = f_k'(\vec x, \vec y, z) \star
5463 \left(
5464 \sum_{l=k+1}^\infty z^l \, f'(\vec x, \vec y, z)
5465 \right)
5467 & = f_k'(\vec x, \vec y, z) \star
5468 \frac{z^{k+1} \, f'(\vec x, \vec y, z)}{1-z}
5470 \end{aligned}
5472 Computing $h(\vec x, \vec y, 1)$ would give us a generating
5473 function with as coefficients how many times a point of $T'_k$
5474 still appears in a shifted copy of $T'_0$ for any particular
5475 value of $\vec s$ and $\vec t$.
5476 However, we want to know if this number is zero for {\em all\/}
5477 values of $\vec s$ and $\vec t$, so we compute $h(\vec 1, \vec 1, 1)$
5478 instead. We have to be careful here since we allow the polyhedron
5479 $P$ to be unbounded and so we should apply the technique
5480 of \autoref{s:infinite} with $Q$ the projection of $P$ on
5481 the remaining coordinates.
5483 Note that testing whether we can stop is more expensive
5484 than applying the next iteration (since we have an extra
5485 $(1-z)$ factor in the denominator of one of the operands).
5486 However, we may save many iterations by stopping early
5487 and we will not needlessly replace a given representation
5488 of $f''(\vec x, \vec y, z)$ by a more complex representation
5489 (with more factors in the denominator).
5490 An alternative way of checking whether we can stop is to
5491 test whether $f'_k(\vec x, \vec y, z) = f'_{k+1}(\vec x, \vec y, z)$
5492 (as rational functions).
5493 To do so, we would need to check that both
5495 f'_k(\vec x, \vec y, z) -
5496 \left( f'_k(\vec x, \vec y, z) \star f'_{k+1}(\vec x, \vec y, z) \right)
5500 f'_{k+1}(\vec x, \vec y, z) -
5501 \left( f'_k(\vec x, \vec y, z) \star f'_{k+1}(\vec x, \vec y, z) \right)
5503 are zero and this Hadamard product is more expensive than
5504 the one above.
5506 \begin{figure}
5507 \intercol=1.05cm
5508 \begin{xy}
5509 <\intercol,0pt>:<0pt,\intercol>::
5510 \def\latticebody{\POS="c"+(0,-5.5)\ar@{--}"c"+(0,5.5)}%
5511 \POS0,{\xylattice{-5}{5}00}%
5512 \def\latticebody{\POS="c"+(-5.5,0)\ar@{--}"c"+(5.5,0)}%
5513 \POS0,{\xylattice00{-5}5}%
5514 \POS(0,-5.5)\ar(0,5.5) \POS(0,5.5)*+!UL{x_2}
5515 \POS(-5.5,0)\ar(5.5,0) \POS(5.5,0)*+!DR{x_1}
5516 \POS@i@={(-5,0),(5,0)},{0*[|(2)]\xypolyline{}}
5517 \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{}}
5518 \POS@i@={(-4,1),(4,1),(4,-1),(-4,-1),(-4,1)},{0*[|(2)]\xypolyline{}}
5519 \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{}}
5520 \POS@i@={(-3,2),(3,2),(3,-2),(-3,-2),(-3,2)},{0*[|(2)]\xypolyline{}}
5521 \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{}}
5522 \POS@i@={(-2,3),(2,3),(2,-3),(-2,-3),(-2,3)},{0*[|(2)]\xypolyline{}}
5523 \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{}}
5524 \POS@i@={(-1,4),(1,4),(1,-4),(-1,-4),(-1,4)},{0*[|(2)]\xypolyline{}}
5525 \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{}}
5526 \POS@i@={(0,-5),(0,5)},{0*[|(2)]\xypolyline{}}
5527 \POS(-5,0)*+!DR{5}
5528 \POS(-4.5,0.5)*+!DR{4}
5529 \POS(-4,1)*+!DR{3}
5530 \POS(-3.5,1.5)*+!DR{2}
5531 \POS(-3,2)*+!DR{1}
5532 \POS(-2.5,2.5)*+!DR{0}
5533 \POS(-2,3)*+!DR{-1}
5534 \POS(-1.5,3.5)*+!DR{-2}
5535 \POS(-1,4)*+!DR{-3}
5536 \POS(-0.5,4.5)*+!DR{-4}
5537 \POS(-0,5)*+!DR{-5}
5538 \end{xy}
5539 \caption{The parametric polytope from Example~\ref{ex:projection}
5540 for different values of the parameter}
5541 \label{f:ex:projection}
5542 \end{figure}
5544 \begin{example} \label{ex:projection}
5545 Consider once more the parametric polytope
5547 P(p) = \left\{\,
5548 \vec x \mid
5549 \begin{aligned}
5550 -2 x_1 + p + 5 &\ge 0 \\
5551 2 x_1 + p + 5 &\ge 0 \\
5552 -2 x_2 - p + 5 &\ge 0 \\
5553 2 x_2 - p + 5 &\ge 0
5554 \end{aligned}
5555 \,\right\}
5557 from \shortciteN[Example~2.1.7]{Woods2004PhD}
5558 and Example~\ref{ex:width:2} and assume we want to
5559 compute
5561 c(p) = \left[ \exists \vec x \in \ZZ^2: (p, \vec x) \in P \right]
5564 That is, we simply want to know for which values of $p$
5565 the polytope is non-empty.
5566 Now, there are more efficient ways of answering this particular question,
5567 but we will use it here as an example of the above algorithm.
5568 The polytope $P(p)$ is shown in \autoref{f:ex:projection} for
5569 all integer value of the parameter for which the polytope
5570 is non-empty.
5572 \begin{figure}
5573 \intercol=1.05cm
5574 \begin{xy}
5575 <\intercol,0pt>:<0pt,\intercol>::
5576 \def\latticebody{\POS="c"+(0,-5.5)\ar@{--}"c"+(0,5.5)}%
5577 \POS0,{\xylattice{-5}{5}00}%
5578 \def\latticebody{\POS="c"+(-5.5,0)\ar@{--}"c"+(5.5,0)}%
5579 \POS0,{\xylattice00{-5}5}%
5580 \POS(0,-5.5)\ar(0,5.5) \POS(0,5.5)*+!UL{x_2}
5581 \POS(-5.5,0)\ar(5.5,0) \POS(5.5,0)*+!DR{x_1}
5582 \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{}}
5583 \POS@i@={(-2,3),(2,3),(2,-3),(-2,-3),(-2,3)},{0*[|(2)]\xypolyline{}}
5584 \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{}}
5585 \POS@i@={(-1,4),(1,4),(1,-4),(-1,-4),(-1,4)},{0*[|(2)]\xypolyline{}}
5586 \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{}}
5587 \POS@i@={(0,-5),(0,5)},{0*[|(2)]\xypolyline{}}
5588 \POS(-2.5,2.5)*+!DR{0}
5589 \POS(-2,3)*+!DR{1}
5590 \POS(-1.5,3.5)*+!DR{2}
5591 \POS(-1,4)*+!DR{3}
5592 \POS(-0.5,4.5)*+!DR{4}
5593 \POS(-0,5)*+!DR{5}
5594 \POS(0,-11.5)*\xybox{
5595 \def\latticebody{\POS="c"+(0,-0.5)\ar@{--}"c"+(0,5.5)}%
5596 \POS0,{\xylattice{-5}{5}00}%
5597 \def\latticebody{\POS="c"+(-5.5,0)\ar@{--}"c"+(5.5,0)}%
5598 \POS0,{\xylattice00{0}5}%
5599 \POS(0,-0.5)\ar(0,5.5) \POS(0,5.5)*+!UR{p}
5600 \POS(-5.5,0)\ar(5.5,0) \POS(5.5,0)*+!UR{x_1}
5601 \POS(-2,0)*{\bullet}
5602 \POS(-1,0)*{\bullet},*+!DL{1}
5603 \POS(-0,0)*{\bullet},*+!DL{2}
5604 \POS(1,0)*{\bullet},*+!DL{3}
5605 \POS(2,0)*{\bullet},*+!DL{4}
5606 \POS(3,0)*+!DL{5}
5607 \POS(4,0)*+!DL{5}
5608 \POS(5,0)*+!DL{5}
5609 \POS(-2,1)*{\bullet}
5610 \POS(-1,1)*{\bullet},*+!DL{1}
5611 \POS(-0,1)*{\bullet},*+!DL{2}
5612 \POS(1,1)*{\bullet},*+!DL{3}
5613 \POS(2,1)*{\bullet},*+!DL{4}
5614 \POS(3,1)*+!DL{5}
5615 \POS(4,1)*+!DL{5}
5616 \POS(5,1)*+!DL{5}
5617 \POS(-1,2)*{\bullet}
5618 \POS(-0,2)*{\bullet},*+!DL{1}
5619 \POS(1,2)*{\bullet},*+!DL{2}
5620 \POS(2,2)*+!DL{3}
5621 \POS(3,2)*+!DL{3}
5622 \POS(4,2)*+!DL{3}
5623 \POS(5,2)*+!DL{3}
5624 \POS(-1,3)*{\bullet}
5625 \POS(-0,3)*{\bullet},*+!DL{1}
5626 \POS(1,3)*{\bullet},*+!DL{2}
5627 \POS(2,3)*+!DL{3}
5628 \POS(3,3)*+!DL{3}
5629 \POS(4,3)*+!DL{3}
5630 \POS(5,3)*+!DL{3}
5631 \POS(-0,4)*{\bullet}
5632 \POS(1,4)*+!DL{1}
5633 \POS(2,4)*+!DL{1}
5634 \POS(3,4)*+!DL{1}
5635 \POS(4,4)*+!DL{1}
5636 \POS(5,4)*+!DL{1}
5637 \POS(-0,5)*{\bullet}
5638 \POS(1,5)*+!DL{1}
5639 \POS(2,5)*+!DL{1}
5640 \POS(3,5)*+!DL{1}
5641 \POS(4,5)*+!DL{1}
5642 \POS(5,5)*+!DL{1}
5643 \POS(-6,-0.5)\ar(-6,5.5) \POS(-6,5.5)*+!UL{p}
5644 \POS(-6,0)*{\bullet}
5645 \POS(-6,1)*{\bullet}
5646 \POS(-6,2)*{\bullet}
5647 \POS(-6,3)*{\bullet}
5648 \POS(-6,4)*{\bullet}
5649 \POS(-6,5)*{\bullet}
5651 \end{xy}
5652 \caption{The transformed parametric polytope from Example~\ref{ex:projection}
5653 for $0 \le p \le 5$}
5654 \label{f:ex:projection:transformed}
5655 \end{figure}
5657 The first step is to compute the lattice width of $P(p)$.
5658 In Example~\ref{ex:width:2}, we already obtained the decomposition
5659 of the parameter domain into
5661 \begin{aligned}
5662 \hat C_1 &= \{\, p \mid 0 \le p \le 5 \,\} \\
5663 \hat C_2 &= \{\, p \mid -5 \le p \le -1 \,\}
5665 \end{aligned}
5667 with corresponding lattice widths and lattice width directions
5669 \begin{aligned}
5670 \vec c_1 &= (0,1) & w_{\vec c_1}(p) &= 5-p \\
5671 \vec c_2 &= (1,0) & w_{\vec c_2}(p) &= 5+p
5673 \end{aligned}
5675 Note that in this example, the gaps in both coordinate directions
5676 are $1$, so, in principle, there is no need to perform any unimodular
5677 transformation here. Nevertheless, we will apply the transformation
5678 that would be applied by the algorithm.
5679 On the first domain, we extend the lattice width direction
5680 to the unimodular matrix
5682 \begin{bmatrix}
5683 0 & 1 \\
5684 1 & 0
5685 \end{bmatrix}
5688 After application to the existentially quantified variables $\vec x$,
5689 we obtain the parametric polytope
5691 P'_1(p) = \left\{\,
5692 \vec x \mid
5693 \begin{aligned}
5694 -2 x_2 + p + 5 &\ge 0 \\
5695 2 x_2 + p + 5 &\ge 0 \\
5696 -2 x_1 - p + 5 &\ge 0 \\
5697 2 x_1 - p + 5 &\ge 0 \\
5698 p & \ge 0 \\
5699 \end{aligned}
5700 \,\right\}
5702 shown in the top part of \autoref{f:ex:projection:transformed}.
5703 We now temporarily remove the existential quantification on $x_1$,
5704 resulting in
5706 T' = \{ (p, x_1) \in \ZZ^2 \mid \exists x_2 \in \ZZ : (s, \vec x) \in P' \}
5709 Since there is only one existentially quantified variable left,
5710 we know we only have to shift and subtract the set once to obtain
5711 a set with at most one value of $x_2$ associated to each value
5712 of $(p, x_1)$.
5713 In particular, let $f(x,z_1,z_2)$ be the generating function
5714 of the integer points in $P'$. Then $g(x,z_1) = f'(x,z_1,1)$, with
5715 $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)$,
5716 is the generating function of $T'$.
5718 To check whether we need to subtract any shifted copies of
5719 $g(x,z_1)$ from itself, we compute
5721 h(x,z_1) = g(x,z_1) \star \frac{z_1 \, g(x,z_1)}{1-z_1}
5724 The second argument of this Hadamard product is depicted
5725 in \autoref{f:ex:projection:transformed} by its coefficients.
5726 The exponents in $h(x,z_1)$ that have a non-zero coefficient
5727 are therefore those marked by both a dot ($\bullet$) and
5728 a number. The total sum can be computed as $h(1,1) = 26$,
5729 which is finite, but non-zero. We therefore need to subtract
5730 at least one shifted copy of $g(x,z_1)$.
5733 g'(x,z_1) = g(x,z_1) - g(x,z_1) \star z_1 g(x,z_1)
5736 Computing
5738 h'(x,z_1) = g'(x,z_1) \star \frac{z_1^2 \, g(x,z_1)}{1-z_1}
5741 we would find that $h'(1,1) = 0$ and so we do not need
5742 to shift and subtract any further.
5743 However, since we are dealing with a two-dimensional problem,
5744 we already know from \autoref{l:gap} that we can stop
5745 after one shift and subtract, so we do not even need
5746 to compute $h'(x,z_1)$ here.
5747 The function $g'(x,z_1)$ now only has non-zero coefficients
5748 for at most one exponent of $z_1$ for each exponent of $x$.
5749 We may therefore project down to obtain
5750 the function $g'(x,1)$, which is the generating function
5751 of the set in the lower left part of \autoref{f:ex:projection:transformed}.
5753 For the chamber $\hat C_2$ of the parameter domain, the computations
5754 are nearly identical and the final result is simply the sum
5755 of the two generating functions found for each of the two (disjoint)
5756 chambers.
5758 \end{example}