Bernoulli_sum_evalue: cut off some redundant parts where sum should be zero
[barvinok.git] / doc / implementation.tex
blob68628c9791e471b054e6f4958988a3a2dfb4fe1b
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{Koeppe2008parametric}]
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{Koeppe2008parametric}.
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$
1980 \label{i:l:u}
1982 \begin{align*}
1983 \sum_{x_1 = l(\vec {\hat x})}^{u(\vec{\hat x})} \alpha_n(\vec{\hat x}) \, x_1^n
1985 \alpha_n(\vec{\hat x})
1986 \left(
1987 \sum_{x_1 = 0}^{u(\vec{\hat x})} x_1^n
1989 (-1)^n
1990 \sum_{x_1 = 1}^{-l(\vec {\hat x})} x_1^n
1991 \right)
1994 \alpha_n(\vec{\hat x})
1995 \left(
1996 S_n(u(\vec{\hat x})+1)
1998 (-1)^n
1999 S_n(-l(\vec{\hat x})+1)
2000 \right)
2001 \end{align*}
2003 \setcounter{saveenumi}{\value{enumi}}
2004 \end{enumerate}
2006 If the coefficients in the lower and upper bound are all
2007 integer, then the above 3 cases partition (the integer points in)
2008 the projection of $P$ onto the remaining variables.
2009 However, if some of the coefficients are rational, then the lower
2010 and upper bound can lie in the open interval $(0,1)$ for some
2011 values of $\vec{\hat x}$. We may therefore also want to consider
2012 the following two cases.
2014 \begin{enumerate}
2015 \setcounter{enumi}{\value{saveenumi}}
2016 \item $0 < l(\vec {\hat x}) < 1$
2017 \label{i:l:fractional}
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$
2027 \label{i:u:fractional}
2030 \sum_{x_1 = l(\vec {\hat x})}^{u(\vec{\hat x})} \alpha_n(\vec{\hat x}) \, x_1^n
2032 \alpha_n(\vec{\hat x})
2033 (-1)^n
2034 S_n(-l(\vec{\hat x})+1)
2037 \end{enumerate}
2038 Note that we may add the constraint $u \ge 1$ to
2039 case~\ref{i:l:fractional} and the constraint $l \le -1$
2040 to case~\ref{i:u:fractional}, since the correct value for
2041 these two cases would be zero if these extra constraints do not hold.
2043 An alternative to adding the above two cases would be
2044 to simply ignore them, i.e., assume a value of $0$.
2045 Another alternative would be to reduce case~\ref{i:l:u}
2048 l(\vec {\hat x}) \le -1\quad\hbox{and}\quad u(\vec{\hat x}) \ge 1
2051 while extending cases~\ref{i:l:fractional} and~\ref{i:u:fractional}
2054 -1 < l(\vec {\hat x}) < 1\quad\hbox{and}\quad u \ge 1
2058 -1 < u(\vec {\hat x}) < 1\quad\hbox{and}\quad l \le -1
2061 respectively, with the remaining cases
2062 ($-1 < l \le u < 1$) having value $0$.
2063 There does not appear to be a consistently better choice
2064 here, as each of these three approaches seems to yield better
2065 results on some examples.
2066 The last approach has the additional drawback that we
2067 would also have to deal with 5 cases, even if the bounds
2068 are integers.
2070 \subsection{Summation using local Euler-Maclaurin formula}
2071 \label{s:euler}
2073 \sindex{local}{Euler-Maclaurin formula}
2074 In this section we provide some implementation details
2075 on using \ai{local Euler-Maclaurin formula} to compute
2076 the sum of a piecewise polynomial evaluated in all integer
2077 points of a two-dimensional parametric polytope.
2078 For the theory behind these formula and a discussion
2079 of the original implementation (for non-parametric simplices),
2080 we refer to \shortciteN{Berline2006local}.
2082 In particular, consider a parametric piecewise polynomial
2083 in $n$ parameters and $m$ variables
2084 $c : \ZZ^n \to \ZZ^m \to \QQ : \vec p \mapsto c(\vec p)$,
2085 with $c(\vec p) : \ZZ^m \to \QQ : \vec x \mapsto c(\vec p)(\vec x)$
2088 c_{\vec p}(\vec x) =
2089 \begin{cases}
2090 c_1(\vec p)(\vec x) & \text{if $\vec x \in D_1(\vec p)$}
2092 \vdots
2094 c_r(\vec p)(\vec x) & \text{if $\vec x \in D_r(\vec p)$}
2096 \end{cases}
2098 with the $c_i$ polynomials, $c_i \in (\QQ[\vec p])[\vec x]$, and
2099 the $D_i$ disjoint linearly parametric polytopes.
2100 We want to compute
2102 g(\vec p) = \sum_{\vec x \in \ZZ^m} c(\vec p)(\vec x)
2106 \subsubsection{Reduction to the summation of a parametric polynomial
2107 over a parametric polytope with a fixed combinatorial structure}
2109 Since the $D_i$ are disjoint, we can consider each
2110 $(c_i, D_i)$-pair individually and compute
2112 g(\vec p) = \sum_{i=1}^r g_i(\vec p) =
2113 \sum_{i=1}^r \sum_{\vec x \in D_r(\vec p) \cap \ZZ^m} c_r(\vec p)(\vec x)
2116 The second step is to compute the \ai{chamber decomposition}
2117 ~\shortcite[Section 4.2.3]{Verdoolaege2005PhD} of each parametric
2118 polytope $D_i$.
2119 The result is a subdivision of the parameter space into chambers
2120 $C_{ij}$ such that $D_i$ has a fixed combinatorial structure,
2121 in particular a fixed set of parametric vertices,
2122 on (the interior of) each $C_{ij}$. Applying \autoref{p:inclusion-exclusion},
2123 this subdivision can be transformed into a partition
2124 $\{\, \tilde C_{ij} \,\}$ by
2125 making some of the facets of the chambers open%
2126 ~\shortcite[Section~3.2]{Koeppe2008parametric}.
2127 Since we are only interested in integer parameter values,
2128 any of the resulting open facets $\sp a p + c > 0$,
2129 with $\vec a \in \ZZ^n$ and $c \in \ZZ$,
2130 can then be replaced by $\sp a p + c-1 \ge 0$.
2131 Again, we have
2133 g_i(\vec p) = \sum_j g_{ij}(\vec p) =
2134 \sum_j \sum_{\vec x \in C_{ij}(\vec p) \cap \ZZ^m} c_r(\vec p)(\vec x)
2138 After this reduction, the technique of
2139 \shortciteN{Berline2006local} can be applied practically verbatim
2140 to the parametric polytope with a fixed combinatorial structure.
2141 In principle, we could also handle piecewise quasi-polynomials
2142 using the technique of \shortciteN[Section~4.5.4]{Verdoolaege2005PhD},
2143 except that we only need to create an extra variable for each
2144 distinct floor expression in a monomial, rather than for each
2145 occurrence of a floor expression in a monomial.
2146 However, since we currently only support two-dimensional polytopes,
2147 this reduction has not been implemented yet.
2149 \subsubsection{Summation over a one-dimensional parametric polytope}
2151 The basis for the summation technique is the local
2152 Euler-Maclaurin formula~\cite[Theorem~26]{Berline2006local}
2153 \begin{equation}
2154 \label{eq:EML}
2155 \sum_{\vec x \in P(\vec p) \cap \Lambda} h(\vec p)(\vec x)
2156 = \sum_{F(\vec p) \in {\mathcal F}(P(\vec p))}
2157 \int_{F(\vec p)} D_{P(\vec p),F(\vec p)} \cdot h(\vec p)
2159 \end{equation}
2160 where $P(\vec p)$ is a parametric polytope,
2161 $\Lambda$ is a lattice, ${\mathcal F}(P(\vec p))$
2162 are the faces of $P(\vec p)$, $D_{P(\vec p),F(\vec p)}$ is a
2163 specific differential operator associated to the face of a polytope.
2164 The \ai{Lebesgue measure} used in the integral is such that the
2165 integral of the indicator function of a lattice element of
2166 the lattice $\Lambda \cap (\affhull(F(\vec p)) - F(\vec p))$ is 1,
2167 i.e., the intersection of $\Lambda$ with the linear subspace
2168 parallel to the affine hull of the face $F(\vec p)$.
2169 Note that the original theorem is formulated for a non-parametric
2170 polytope and a non-parametric polynomial. However, as we will see,
2171 in each of the steps in the computation, the parameters can be
2172 treated as symbolic constants without affecting the validity of the formula,
2173 see also~\shortciteN[Section 6]{Berline2006local}.
2175 The differential operator $D_{P(\vec p),F(\vec p)}$ is obtained
2176 by plugging in the vector $\vec D=(D_1,\ldots,D_m)$ of first
2177 order differential operators, i.e., $D_k$ is the first order
2178 differential operator in the $k$th variable,
2179 in the function $\mu_{P(\vec p),F(\vec p)}$.
2180 This function is determined by the \defindex{transverse cone}
2181 of the polyhedron $P(\vec p)$ along its face $F(\vec p)$,
2182 which is the \ai{supporting cone} of $P(\vec p)$ along $F(\vec p)$
2183 projected into the linear subspace orthogonal to $F(\vec p)$.
2184 The lattice associated to this space is the projection of
2185 $\Lambda$ into this space.
2187 In particular, for a zero-dimensional affine cone in the zero-dimensional
2188 space, we have $\mu = 1$~\cite[Proposition 12]{Berline2006local},
2189 while for a one-dimensional affine
2190 cone $K = (-t + \RR_+) r$ in the one-dimensional space, where
2191 $r$ is a primitive integer vector and $t \in [0,1)$,
2192 we have~\cite[(13)]{Berline2006local}
2193 \begin{equation}
2194 \label{eq:mu:1}
2195 \mu(K)(\xi) = \frac{e^{t y}}{1-e^y} + \frac 1{y}
2196 = -\sum_{n=0}^\infty \frac{b(n+1, t)}{(n+1)!} y^n
2198 \end{equation}
2199 with $y = \sps \xi r$ and $b(n,t)$ the \ai{Bernoulli polynomial}s
2200 defined by the generating series
2202 \frac{e^{ty} y}{e^y - 1} = \sum_{n=0}^\infty \frac{b(n,t)}{n!} y^n
2205 The constant terms of these Bernoulli polynomials
2206 are the \ai{Bernoulli number}s.
2208 Applying \eqref{eq:EML} to a one-dimensional parametric polytope
2209 $P(\vec p) = [v_1(\vec p), v_2(\vec p)]$, we find
2211 \begin{aligned}
2212 \sum_{x \in P(\vec p) \cap \ZZ} h(\vec p)(x)
2213 = & \int_{P(\vec p)} D_{P(\vec p), P(\vec p)} \cdot h(\vec p)
2215 & + \int_{v_1(\vec p)} D_{P(\vec p), v_1(\vec p)} \cdot h(\vec p)
2217 & + \int_{v_2(\vec p)} D_{P(\vec p), v_2(\vec p)} \cdot h(\vec p)
2219 \end{aligned}
2221 The transverse cone of a polytope along the whole polytope is
2222 a zero-dimensional cone in a zero-dimensional space and so
2223 $D_{P(\vec p), P(\vec p)} = \mu_{P(\vec p), P(\vec p)}(D) = 1$.
2224 The transverse cone along $v_1(\vec p)$ is $v_1(\vec p) + \RR_+$
2225 and so $D_{P(\vec p), v_1(\vec p)} = \mu(v_1(\vec p) + \RR_+)(D)$
2226 as in \eqref{eq:mu:1}, with $y = \sps D 1 = D$ and
2227 $t = \ceil{v_1(\vec p)} - v_1(\vec p) =
2228 \fractional{-v_1(\vec p)}$.
2229 Similarly we find
2230 $D_{P(\vec p), v_2(\vec p)} = \mu(v_2(\vec p) - \RR_+)(D)$
2231 as in \eqref{eq:mu:1}, with $y = \sps D {-1} = -D$ and
2232 $t = v_2(\vec p) - \floor{v_2(\vec p)} =
2233 \fractional{v_2(\vec p)}$.
2234 Summarizing, we find
2236 \begin{aligned}
2237 \sum_{x \in P(\vec p) \cap \ZZ} h(\vec p)(x)
2238 = & \int_{v_1(\vec p)}^{v_2(\vec p)} h(\vec p)(t) \, dt
2240 & -\sum_{n=0}^\infty \frac{b(n+1, \fractional{-v_1(\vec p)})}{(n+1)!}
2241 (D^n h(\vec p))(v_1(\vec p))
2243 & -\sum_{n=0}^\infty (-1)^n \frac{b(n+1, \fractional{v_2(\vec p)})}{(n+1)!}
2244 (D^n h(\vec p))(v_2(\vec p))
2246 \end{aligned}
2249 Note that in order to apply this formula, we need to verify
2250 first that $v_1(\vec p)$ is indeed smaller than (or equal to)
2251 $v_2(\vec p)$. Since the combinatorial structure of $P(\vec p)$
2252 does not change throughout the interior of the chamber, we only
2253 need to check the order of the two vertices for one value
2254 of the parameters from the interior of the chamber, a point
2255 which we may compute as in \autoref{s:interior}.
2257 \subsubsection{Summation over a two-dimensional parametric polytope}
2259 For two-dimensional polytope, formula~\eqref{eq:EML} has three kinds
2260 of contributions: the integral of the polynomial over the polytope,
2261 contributions along edges and contributions along vertices.
2262 As suggested by~\citeN{Berline2007personal}, the integral can be computed
2263 by applying the Green-Stokes theorem:
2265 \iint_{P(\vec p)}
2266 \left(\frac{\partial M}{\partial x} - \frac{\partial L}{\partial y}\right) =
2267 \int_{\partial P(\vec p)} (L\, dx + M\, dy)
2270 In particular, if $M(\vec p)(x,y)$ is such that
2271 $\frac{\partial M}{\partial x}(\vec p)(x,y) = h(\vec p)(x,y)$
2272 then
2274 \iint_{P(\vec p)} h(\vec p)(x,y) =
2275 \int_{\partial P(\vec p)} M(\vec p)(x,y) \, dy
2278 Care must be taken to integrate over the boundary in the positive
2279 direction. Assuming the vertices of the polygon are not given
2280 in a predetermined order, we can check the correct orientation
2281 of the vertices of each edge individually. Let $\vec n = (n_1, n_2)$
2282 be the inner normal of a facet and let $\vec v_1(\vec p)$
2283 and $\vec v_2(\vec p)$ be the two vertices of the facet, then
2284 the vertices are in the correct order if
2286 \begin{vmatrix}
2287 v_{2,1}(\vec p)-v_{1,1}(\vec p) & n_1
2289 v_{2,2}(\vec p)-v_{1,2}(\vec p) & n_2
2290 \end{vmatrix}
2291 \ge 0
2294 Since these two vertices belong to the same edge, their order
2295 will not change within a chamber and so we can again perform
2296 this check for a single value of the parameters.
2297 To integrate $M$ over an edge $F$, let $\vec f$ be a primitive
2298 integer vector in the direction of the edge.
2299 Then $\vec v_2(\vec p) = \vec v_1(\vec p) + k(\vec p) \, \vec f$
2300 and any point on the edge can be written as
2301 $\vec v_1(\vec p) + \lambda \vec f$ with
2302 $0 \le \lambda \le k(\vec p)$.
2303 That is,
2304 \begin{equation}
2305 \label{eq:EML:int}
2306 \int_F M(\vec p)(x,y) \, dy
2308 \int_0^{k(\vec p)}
2309 M(\vec p)(v_{1,1}(\vec p) + \lambda f_1,
2310 v_{1,2}(\vec p) + \lambda f_2)
2311 f_2 \, d\lambda
2313 \end{equation}
2315 For the edges, we can again apply \eqref{eq:mu:1}, but we
2316 must first project the supporting cone at the edge into
2317 the linear subspace orthogonal to the edge.
2318 Let $\vec n = (n_1, n_2)$ be the (primitive integer) inner normal
2319 of this facet $F(\vec p)$, then $\vec f = (-n_2, n_1)$ is parallel
2320 to the facet and we can write one of the vertices $\vec v(\vec p)$
2321 as a linear combination of these two vectors:
2322 \begin{equation}
2323 \label{eq:EML:facet:coordinates}
2324 \vec v(\vec p)
2326 \begin{bmatrix}
2327 \vec f & \vec n
2328 \end{bmatrix}
2329 \vec a(\vec p)
2331 \begin{bmatrix}
2332 -n_2 & n_1 \\
2333 n_1 & n_2
2334 \end{bmatrix}
2335 \vec a(\vec p)
2336 \end{equation}
2338 \begin{equation}
2339 \label{eq:EML:facet:coordinates:2}
2340 \vec a(\vec p)
2342 \begin{bmatrix}
2343 -n_2 & n_1 \\
2344 n_1 & n_2
2345 \end{bmatrix}^{-1}
2346 \vec v(\vec p)
2348 \begin{bmatrix}
2349 -n_2/d & n_1/d \\
2350 n_1/d & n_2/d
2351 \end{bmatrix}
2352 \vec v(\vec p),
2353 \end{equation}
2354 with $d = n_1^2+n_2^2$.
2355 The lattice associated to the linear subspace orthogonal
2356 to the facet is the projection of $\Lambda$ into this space.
2357 Since $\vec n$ is primitive, a basis for this lattice can be
2358 identified with $\vec n/d$.
2359 The coordinate of the whole facet in this space is therefore
2361 d a_2(\vec p) =
2362 \begin{bmatrix}
2363 n_1 & n_2
2364 \end{bmatrix}
2365 \vec v(\vec p)
2366 $, while the transverse cone is $d a_2(\vec p) + \RR_+$.
2367 Similarly, a linear functional $\vec \xi'$ projects onto
2368 a linear functional $\xi = \sp {\xi'} n/d$ in the linear subspace.
2369 Applying \eqref{eq:mu:1}, with $y = \frac{n_1}d D_1 + \frac{n_2}d D_2$
2370 and $t = \fractional{- n_1 v_1(\vec p) - n_2 v_2(\vec p)}$, we therefore
2371 find
2372 \begin{align*}
2373 D_{P(\vec p), F(\vec p)}
2375 -\sum_{n=0}^\infty
2376 \frac{b(n+1, \fractional{-n_1 v_1(\vec p) - n_2 v_2(\vec p)})}{(n+1)!}
2377 \left(\frac{n_1}d D_1 + \frac{n_2}d D_2\right)^n
2380 - \sum_{i=0}^\infty \sum_{j=0}^\infty
2381 \frac{b(i+j+1, \fractional{-n_1 v_1(\vec p) - n_2 v_2(\vec p)})}{(i+j+1)!}
2382 \frac{n_1^i n_2^j}{d^{i+j}} D_1^i D_2^j
2384 \end{align*}
2385 After applying this differential operator to the polynomial
2386 $h(\vec p)(\vec x)$, the resulting polynomial
2388 h'(\vec p)(\vec x) = D_{P(\vec p), F(\vec p)} \cdot h(\vec p)(\vec x)
2390 needs to be integrated over the facet.
2391 The measure to be used is such that the integral of a lattice tile
2392 in the linear space parallel to the facet is 1, i.e.,
2394 \int_{\vec 0}^{\vec f} 1 = \int_0^1 1 dz = 1,
2396 with $z$ the coordinate along $\vec f$.
2397 Referring to \eqref{eq:EML:facet:coordinates} and
2398 \eqref{eq:EML:facet:coordinates:2}, all points of the facet
2399 have the form $\vec x(\vec p) = z \, \vec f + a_2(\vec p) \, \vec n$,
2400 while the $z$-coordinate of the vertices $\vec v_1(\vec p)$
2401 and $\vec v_2(\vec p)$ are
2402 $(-n_2 v_{1,1} + n_1 v_{1,2})/d$
2404 $(-n_2 v_{2,1} + n_1 v_{2,2})/d$, respectively.
2405 That is, the contribution of the facet is equal to
2407 \int_{(-n_2 v_{1,1} + n_1 v_{1,2})/d}^{(-n_2 v_{2,1} + n_1 v_{2,2})/d}
2408 h'(\vec p)\left(z \, \vec f + a_2(\vec p) \, \vec n\right) \, dz
2411 where, again, we need to ensure that the lower limit is smaller
2412 than the upper limit using the usual method of plugging in a
2413 particular value of the parameters.
2415 Finally, we consider the contributions of the vertices.
2416 The \ai{transverse cone}s are in this case simply the supporting cones.
2417 Since $\mu$ is a valuation, we may apply \ai{Barvinok's decomposition}
2418 and assume that the cone is unimodular.
2419 For an affine cone
2420 \begin{align*}
2421 K &= \vec v(\vec p) + \RR_+ \vec r_1 + \RR_+ \vec r_2
2423 &= (a_1(\vec p) + \RR_+) \vec r_1 + (a_2(\vec p) + \RR_+) \vec r_2,
2424 \end{align*}
2425 with
2427 \vec a(\vec p) =
2428 \begin{bmatrix}
2429 \vec r_1 & \vec r_2
2430 \end{bmatrix}^{-1}
2431 \vec v(\vec p)
2434 we have~\cite[Proposition~31]{Berline2006local},
2435 \begin{equation}
2436 \label{eq:mu:2}
2437 \mu(K)(\vec\xi)
2439 \frac{e^{t_1 y_1 + t_2 y_2}}{(1-e^{y_1})(1-e^{y_2})}
2440 + \frac 1{y_1}B(y_2 - C_1 y_1, t_2)
2441 + \frac 1{y_2}B(y_1 - C_2 y_2, t_1)
2442 - \frac 1{y_1 y_2},
2443 \end{equation}
2444 with
2446 B(y,t) =
2447 \frac{e^{t y}}{1-e^y} + \frac 1{y}
2448 = -\sum_{n=0}^\infty \frac{b(n+1, t)}{(n+1)!} y^n
2451 $y_i = \sps{\vec\xi}{\vec r_i}$,
2452 $C_i = \sps{\vec v_1}{\vec v_2}/\sps{\vec v_i}{\vec v_i}$
2454 $t_i = \fractional{-a_i(\vec p)}$.
2455 Expanding \eqref{eq:mu:2}, we find
2456 \begin{align*}
2457 \mu(K)(\vec\xi)
2459 \left(
2460 -\frac{b(0,t1)}{y_1} - \sum_{n=0}^\infty \frac{b(n+1,t_1)}{(n+1)!} y_1^n
2461 \right)
2462 \left(
2463 -\frac{b(0,t2)}{y_2} - \sum_{n=0}^\infty \frac{b(n+1,t_2)}{(n+1)!} y_2^n
2464 \right)
2466 & \phantom{=}
2468 \left(
2469 \sum_{n=0}^\infty \frac{b(n+1,t_2)}{(n+1)!} \frac{y_2^n}{y_1}
2471 \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}
2472 \right)
2474 & \phantom{=}
2476 \left(
2477 \sum_{n=0}^\infty \frac{b(n+1,t_1)}{(n+1)!} \frac{y_1^n}{y_2}
2479 \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}
2480 \right)
2482 & \phantom{=}
2483 - \frac 1{y_1 y_2}
2486 \sum_{n_1=0}^\infty
2487 \sum_{n_2=0}^\infty
2488 c(C_1, C_2, t_1, t_2; n_1, n_2) \, y_1^n y_2^n
2490 \end{align*}
2491 with
2492 \begin{align*}
2493 c(C_1, C_2, t_1, t_2; n_1, n_2)
2495 \frac{b(n_1+1,t_1)}{(n_1+1)!} \frac{b(n_2+1,t_2)}{(n_2+1)!}
2499 \frac{b(n_1+n_2+1,t_2)}{(n_1+n_2+1)!} {n_1+n_2+1 \choose n_1+1}
2500 \left(-C_1\right)^{n_1+1}
2504 \frac{b(n_1+n_2+1,t_1)}{(n_1+n_2+1)!} {n_1+n_2+1 \choose n_2+1}
2505 \left(-C_2\right)^{n_2+1}
2507 \end{align*}
2508 For $\vec \xi = \vec D$, we have
2509 \begin{align*}
2510 y_1^n y_2^n
2512 \left( r_{1,1} D_1 + r_{1,2} D_2 \right)^{n_1}
2513 \left( r_{2,1} D_1 + r_{2,2} D_2 \right)^{n_2}
2516 \left(
2517 \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}
2518 \right)
2519 \left(
2520 \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}
2521 \right)
2522 \end{align*}
2523 and so
2525 D_{P(\vec p), \vec v(\vec p)} = \mu(K)(\vec D)
2529 \sum_{i=0}^\infty
2530 \sum_{j=0}^\infty
2531 \sum_{\shortstack{$\scriptstyle i+j = n_1+n_2$\\$\scriptstyle n_1 \ge 0$\\$\scriptstyle n_2 \ge 0$}}
2532 \sum_{\shortstack{$\scriptstyle k+l = i$\\$\scriptstyle 0 \le k \le n_1$\\$\scriptstyle 0 \le l \le n_2$}}
2533 c(C_1, C_2, t_1, t_2; n_1, n_2)
2534 r_{1,1}^k r_{1,2}^{n_1 - k}
2535 r_{2,1}^l r_{2,2}^{n_2 - l}
2536 { n_1 \choose k} { n_2 \choose l} D_1^i D_2^j
2539 The contribution of this vertex is then
2541 h'(\vec p)(\vec v(\vec p))
2544 with $
2545 h'(\vec p)(\vec x) = D_{P(\vec p), \vec v(\vec p)} \cdot h(\vec p)(\vec x)
2548 \begin{example}
2549 As a simple example, consider the (non-parametric) triangle
2550 in \autoref{f:EML:triangle} and assume we want to compute
2552 \sum_{\vec x \in T \cap \ZZ^2} x_1 x_2
2555 Since $T \cap \ZZ^2 = \{\, (2,4), (3,4), (2,5) \, \}$,
2556 the result should be
2558 2 \cdot 4 + 3 \cdot 4 + 2 \cdot 5 = 30
2562 \begin{figure}
2563 \intercol=1.2cm
2564 \begin{xy}
2565 <\intercol,0pt>:<0pt,\intercol>::
2566 \POS@i@={(2,4),(3,4),(2,5),(2,4)},{0*[|(2)]\xypolyline{}}
2567 \POS(2.35,4.25)*{x_1 x_2}
2568 \POS(2,4)*+!U{(2,4)}
2569 \POS(3,4)*+!U{(3,4)}
2570 \POS(2,5)*+!D{(2,5)}
2571 \POS(2,4)*{\cdot}
2572 \POS(3,4)*{\cdot}
2573 \POS(2,5)*{\cdot}
2574 \POS(-1,0)\ar(4,0)
2575 \POS(0,-1)\ar(0,5.5)
2576 \end{xy}
2577 \caption{Sum of polynomial $x_1 x_2$ over the integer points in a triangle $T$}
2578 \label{f:EML:triangle}
2579 \end{figure}
2581 Let us first consider the integral
2583 \iint_T x_1 x_2 = \int_{\partial T} \frac{x_1^2 x_2}2 \, d x_2
2586 Integration along each of the edges of the triangle yields
2587 the following.
2589 \marginpar{%
2590 \intercol=1cm
2591 \begin{xy}
2592 <\intercol,0pt>:<0pt,\intercol>::
2593 \POS(0,-1)*\xybox{
2594 \POS@i@={(0,0),(1,0),(0,1),(0,0)},{0*\xypolyline{--}}
2595 \POS(0,0)\ar@[|(2)](1,0)
2597 \end{xy}
2599 For the edge in the margin, we have $\vec f = (1,0)$, i.e., $f_2 = 0$.
2600 The contribution of this edge to the integral is therefore zero.
2602 \marginpar{%
2603 \intercol=1cm
2604 \begin{xy}
2605 <\intercol,0pt>:<0pt,\intercol>::
2606 \POS(0,-1)*\xybox{
2607 \POS@i@={(0,0),(1,0),(0,1),(0,0)},{0*\xypolyline{--}}
2608 \POS(1,0)\ar@[|(2)](0,1)
2610 \end{xy}
2612 For this edge, we have $\vec f = (-1,1)$.
2613 The contribution of this edge to the integral is therefore
2615 \int_0^1 \frac{(3-\lambda)^2(4+\lambda)}2 d\lambda
2616 = \frac{337}{24}
2620 \marginpar{%
2621 \intercol=1cm
2622 \begin{xy}
2623 <\intercol,0pt>:<0pt,\intercol>::
2624 \POS(0,-1)*\xybox{
2625 \POS@i@={(0,0),(1,0),(0,1),(0,0)},{0*\xypolyline{--}}
2626 \POS(0,1)\ar@[|(2)](0,0)
2628 \end{xy}
2630 For this edge, we have $\vec f = (0,-1)$.
2631 The contribution of this edge to the integral is therefore
2633 \int_0^1 \frac{2^2(5-\lambda)}2 (-1) d\lambda
2634 = -9
2638 The total integral is therefore
2640 \int_{\partial T} \frac{x_1^2 x_2}2 \, d x_2
2641 = 0 + \frac{337}{24} - 9 = \frac{121}{24}
2645 Now let us consider the contributions of the edges.
2646 We will need the following \ai{Bernoulli number}s in our
2647 computations.
2648 \begin{align*}
2649 b(1,0) & = - \frac 1 2
2651 b(2,0) & = \frac 1 6
2653 b(3,0) & = 0
2655 b(4,0) & = -\frac 1 {30}
2656 \end{align*}
2658 \marginpar{%
2659 \intercol=1cm
2660 \begin{xy}
2661 <\intercol,0pt>:<0pt,\intercol>::
2662 \POS(0,-1)*\xybox{
2663 \POS@i@={(0,0),(1,0),(0,1),(0,0)},{0*\xypolyline{--}}
2664 \POS(0,0)\ar@[|(2)]@{-}(1,0)
2665 \POS(0.5,0)\ar(0.5,1)
2667 \end{xy}
2669 The normal to the facet $F_1$ in the margin is $\vec n = (0,1)$.
2670 The vector $\vec f = (-1,0)$ is parallel to the facet.
2671 We have
2673 \begin{bmatrix}
2674 2 \\ 4
2675 \end{bmatrix}
2678 \begin{bmatrix}
2679 -1 \\ 0
2680 \end{bmatrix}
2682 \begin{bmatrix}
2683 0 \\ 1
2684 \end{bmatrix}
2685 \quad\text{and}\quad
2686 \begin{bmatrix}
2687 3 \\ 4
2688 \end{bmatrix}
2691 \begin{bmatrix}
2692 -1 \\ 0
2693 \end{bmatrix}
2695 \begin{bmatrix}
2696 0 \\ 1
2697 \end{bmatrix}
2700 Therefore $t = \fractional{-4} = 0$, $y = D_2$,
2701 \begin{align*}
2702 D_{T,F_1}
2703 & =
2704 - \sum_{j=0}^\infty \frac{b(j+1, 0)}{(j+1)!} D_2^j
2707 - \frac{b(1,0)}1 - \frac{b(2,0)}2 D_2 + \cdots
2708 \end{align*}
2711 h'(\vec x) =
2712 D_{T,F_1} \cdot x_1 x_2 =
2713 \left(\frac 1 2 - \frac 1{12} D_2\right) \cdot x_1 x_2
2715 \frac 1 2 x_1 x_2 - \frac 1{12} x_1
2718 With $x_1 = - z$ and $x_2 = 4$, the contribution of this facet
2721 \int_{-3}^{-2} - 2 z + \frac 1{12} z \, dz
2723 \frac{115}{24}
2727 \marginpar{%
2728 \intercol=1cm
2729 \begin{xy}
2730 <\intercol,0pt>:<0pt,\intercol>::
2731 \POS(0,-1)*\xybox{
2732 \POS@i@={(0,0),(1,0),(0,1),(0,0)},{0*\xypolyline{--}}
2733 \POS(0,0)\ar@[|(2)]@{-}(0,1)
2734 \POS(0,0.5)\ar(1,0.5)
2736 \end{xy}
2738 The normal to the facet $F_2$ in the margin is $\vec n = (1,0)$.
2739 The vector $\vec f = (0,1)$ is parallel to the facet.
2740 We have
2742 \begin{bmatrix}
2743 2 \\ 4
2744 \end{bmatrix}
2747 \begin{bmatrix}
2748 0 \\ 1
2749 \end{bmatrix}
2751 \begin{bmatrix}
2752 1 \\ 0
2753 \end{bmatrix}
2754 \quad\text{and}\quad
2755 \begin{bmatrix}
2756 2 \\ 5
2757 \end{bmatrix}
2760 \begin{bmatrix}
2761 0 \\ 1
2762 \end{bmatrix}
2764 \begin{bmatrix}
2765 1 \\ 0
2766 \end{bmatrix}
2769 Therefore $t = \fractional{-2} = 0$, $y = D_1$,
2770 \begin{align*}
2771 D_{T,F_2}
2772 & =
2773 - \sum_{i=0}^\infty \frac{b(i+1, 0)}{(i+1)!} D_1^i
2776 - \frac{b(1,0)}1 - \frac{b(2,0)}2 D_1 + \cdots
2777 \end{align*}
2780 h'(\vec x) =
2781 D_{T,F_2} \cdot x_1 x_2 =
2782 \left(\frac 1 2 - \frac 1{12} D_1\right) \cdot x_1 x_2
2784 \frac 1 2 x_1 x_2 - \frac 1{12} x_2
2787 With $x_1 = 2$ and $x_2 = z$, the contribution of this facet
2790 \int_{4}^{5} z - \frac 1{12} z \, dz
2792 \frac{33}{8}
2796 \marginpar{%
2797 \intercol=1cm
2798 \begin{xy}
2799 <\intercol,0pt>:<0pt,\intercol>::
2800 \POS(0,-1)*\xybox{
2801 \POS@i@={(0,0),(1,0),(0,1),(0,0)},{0*\xypolyline{--}}
2802 \POS(1,0)\ar@[|(2)]@{-}(0,1)
2803 \POS(0.5,0.5)\ar(-0.5,-0.5)
2805 \end{xy}
2807 The normal to the facet $F_3$ in the margin is $\vec n = (-1,-1)$.
2808 The vector $\vec f = (1,-1)$ is parallel to the facet.
2809 We have
2811 \begin{bmatrix}
2812 3 \\ 4
2813 \end{bmatrix}
2815 -\frac 1 2
2816 \begin{bmatrix}
2817 1 \\ -1
2818 \end{bmatrix}
2819 -\frac 7 2
2820 \begin{bmatrix}
2821 -1 \\ -1
2822 \end{bmatrix}
2823 \quad\text{and}\quad
2824 \begin{bmatrix}
2825 2 \\ 5
2826 \end{bmatrix}
2828 -\frac 3 2
2829 \begin{bmatrix}
2830 1 \\ -1
2831 \end{bmatrix}
2832 -\frac 7 2
2833 \begin{bmatrix}
2834 -1 \\ -1
2835 \end{bmatrix}
2838 Therefore $t = \fractional{7} = 0$, $y = -\frac 1 2 D_1 -\frac 1 2 D_2$,
2839 \begin{align*}
2840 D_{T,F_3}
2841 & =
2842 - \sum_{i=0}^\infty \sum_{j=0}^\infty
2843 \frac{b(i+j+1, 0)}{(i+j+1)!}
2844 \frac{(-1)^{i+j}}{2^{i+j}} D_1^i D_2^j
2847 - \frac{b(1,0)}1
2848 + \frac 1 2 \frac{b(2,0)}2 D_1
2849 + \frac 1 2 \frac{b(2,0)}2 D_2 + \cdots
2850 \end{align*}
2853 h'(\vec x) =
2854 D_{T,F_4} \cdot x_1 x_2 =
2855 \left(\frac 1 2 + \frac 1{24} D_1 + \frac 1{24} D_2\right) \cdot x_1 x_2
2857 \frac 1 2 x_1 x_2 + \frac 1{24} x_2 + \frac 1{24} x_1
2860 With $x_1 = z + \frac 7 2$ and $x_2 = -z + \frac 7 2$,
2861 the contribution of this facet
2864 \int_{-\frac 3 2}^{-\frac 1 2}
2865 \frac 1 2 (z + \frac 7 2)(-z + \frac 7 2)
2866 + \frac 1{24}(-z + \frac 7 2)
2867 + \frac 1{24}(z + \frac 7 2) \, dz
2869 \frac{47}{8}
2873 The total contribution of the edges is therefore
2875 \frac{115}{24}+\frac{33}8+
2876 \frac{47}{8} = \frac{355}{24}
2880 Finally, we consider the contributions of the vertices.
2882 \marginpar{%
2883 \intercol=1cm
2884 \begin{xy}
2885 <\intercol,0pt>:<0pt,\intercol>::
2886 \POS(0,-1)*\xybox{
2887 \POS@i@={(0,0),(1,0),(0,1),(0,0)},{0*\xypolyline{--}}
2888 \POS(1,0)\ar@[|(2)](0,1)
2889 \POS(1,0)\ar@[|(2)](0,0)
2891 \end{xy}
2893 For the vertex $\vec v = (3,4)$, we have
2894 $\vec r_1 = (-1,0)$ and $\vec r_2 = (-1,1)$.
2895 Since $\vec v$ is integer, we have $t_1 = t_2 = 0$.
2896 Also, $C_1 = 1$, $C_2 = 1/2$, $y_1 = -D_1$ and $y_2 = -D_1 + D_2$.
2897 Since the total degree of the polynomial $x_1 x_2$ is two,
2898 we only need the coefficients of $\mu(K)(\vec \xi)$ up to
2899 $n_1+n_2 = 2$.
2901 \noindent
2902 \begin{tabular}{c|c|c}
2903 $n_1$ & $n_2$
2905 \hline
2906 0 & 0 &
2908 \left(
2909 \frac{b(1,0)}{1!}
2910 \frac{b(1,0)}{1!}
2912 \frac{b(2,0)}{2!}
2913 {1 \choose 1}(-1)^1
2915 \frac{b(2,0)}{2!}
2916 {1 \choose 1}(-\frac 12)^1
2917 \right)
2920 1 & 0 &
2922 \left(
2923 \frac{b(2,0)}{2!}
2924 \frac{b(1,0)}{1!}
2926 \frac{b(3,0)}{3!}
2927 {2 \choose 2}(-1)^2
2929 \frac{b(3,0)}{3!}
2930 {2 \choose 1}(-\frac 12)^1
2931 \right)
2932 \left(
2933 -D_1
2934 \right)
2937 0 & 1 &
2939 \left(
2940 \frac{b(1,0)}{1!}
2941 \frac{b(2,0)}{2!}
2943 \frac{b(3,0)}{3!}
2944 {2 \choose 1}(-1)^1
2946 \frac{b(3,0)}{3!}
2947 {2 \choose 2}(-\frac 12)^2
2948 \right)
2949 \left(
2950 -D_1 + D_2
2951 \right)
2954 2 & 0 &
2956 \left(
2957 \frac{b(3,0)}{3!}
2958 \frac{b(1,0)}{1!}
2960 \frac{b(4,0)}{4!}
2961 {3 \choose 3}(-1)^3
2963 \frac{b(4,0)}{4!}
2964 {3 \choose 1}(-\frac 12)^1
2965 \right)
2966 \left(
2967 -D_1
2968 \right)^2
2971 1 & 1 &
2973 \left(
2974 \frac{b(2,0)}{2!}
2975 \frac{b(2,0)}{2!}
2977 \frac{b(4,0)}{4!}
2978 {3 \choose 2}(-1)^2
2980 \frac{b(4,0)}{4!}
2981 {3 \choose 2}(-\frac 12)^2
2982 \right)
2983 \left(
2984 -D_1
2985 \right)
2986 \left(
2987 -D_1 + D_2
2988 \right)
2991 0 & 2 &
2993 \left(
2994 \frac{b(1,0)}{1!}
2995 \frac{b(3,0)}{3!}
2997 \frac{b(4,0)}{4!}
2998 {3 \choose 1}(-1)^1
3000 \frac{b(4,0)}{4!}
3001 {3 \choose 3}(-\frac 12)^3
3002 \right)
3003 \left(
3004 -D_1 + D_2
3005 \right)^2
3007 \end{tabular}
3009 We find
3010 \begin{align*}
3011 h'(\vec x)
3013 \left(
3014 \frac 3 8 - \frac 1{24} (-D_1) - \frac 1{24} (-D_1 + D_2)
3015 + \frac 7{576} (-D_1 D_2)
3016 - \frac 5{1152} (-2 D_1 D2)
3017 \right) x_1 x_2
3020 \frac 3 8 x_1 x_2 + \frac 1{24} x_2 - \frac 1{24} (-x_2 + x_1)
3021 + \frac 7{576} (-1)
3022 - \frac 5{1152} (-2)
3024 \end{align*}
3025 The contribution of this vertex is therefore
3027 h'(3,4) = \frac {1355}{288}
3031 \marginpar{%
3032 \intercol=1cm
3033 \begin{xy}
3034 <\intercol,0pt>:<0pt,\intercol>::
3035 \POS(0,-1)*\xybox{
3036 \POS@i@={(0,0),(1,0),(0,1),(0,0)},{0*\xypolyline{--}}
3037 \POS(0,1)\ar@[|(2)](1,0)
3038 \POS(0,1)\ar@[|(2)](0,0)
3040 \end{xy}
3042 For the vertex $\vec v = (2,5)$, we have
3043 $\vec r_1 = (0,-1)$ and $\vec r_2 = (1,-1)$.
3044 Since $\vec v$ is integer, we have $t_1 = t_2 = 0$.
3045 Also, $C_1 = 1$, $C_2 = 1/2$, $y_1 = -D_2$ and $y_2 = D_1 - D_2$.
3046 We similarly find
3048 h'(\vec x)
3050 \frac 3 8 x_1 x_2 + \frac 1{24} x_1 - \frac 1{24} (x_2 - x_1)
3051 + \frac 7{576} (-1)
3052 - \frac 5{1152} (-2)
3055 The contribution of this vertex is therefore
3057 h'(2,5) = \frac {1067}{288}
3061 \marginpar{%
3062 \intercol=1cm
3063 \begin{xy}
3064 <\intercol,0pt>:<0pt,\intercol>::
3065 \POS(0,-1)*\xybox{
3066 \POS@i@={(0,0),(1,0),(0,1),(0,0)},{0*\xypolyline{--}}
3067 \POS(0,0)\ar@[|(2)](1,0)
3068 \POS(0,0)\ar@[|(2)](0,1)
3070 \end{xy}
3072 For the vertex $\vec v = (2,4)$, we have
3073 $\vec r_1 = (1,0)$ and $\vec r_2 = (0,1)$.
3074 Since $\vec v$ is integer, we have $t_1 = t_2 = 0$.
3075 The computations are easier in this case since
3076 $C_1 = C_2 = 0$, $y_1 = D_1$ and $y_2 = D_2$.
3077 We find
3079 h'(\vec x)
3081 \frac 1 4 x_1 x_2 - \frac 1{12} x_2 - \frac 1{12} x_1
3082 + \frac 1{144} (1)
3085 The contribution of this vertex is therefore
3087 h'(2,4) = \frac {253}{144}
3091 The total contribution of the vertices is then
3093 \frac {1355}{288} + \frac {1067}{288} + \frac {253}{144}
3094 = \frac {61}6
3096 and the total sum is
3098 \frac{121}{24}+\frac{355}{24}+\frac{61}6 = 30
3102 \end{example}
3104 \begin{example}
3105 Consider the parametric polytope
3107 P(n) = \{\, \vec x \mid x_1 \ge 2 \wedge 3 x_1 \le n + 9
3108 \wedge 4 \le x_2 \le 5 \,\}
3111 If $n \ge -3$, then the vertices of this polytope are
3112 $(2,4)$, $(2,5)$, $(3+n/3,4)$ and $(3+n/3,5)$.
3113 The contributions of the faces of $P(n)$ to
3115 \sum_{\vec x \in P(n) \cap \ZZ^2} x_1 x_2
3117 for the chamber $n \ge -3$ are shown in \autoref{t:sum:rectangle}.
3118 The final result is
3120 \begin{cases}
3121 \frac{ n^2}{2}
3122 - 3 n \fractional{\frac{ n}{3}}
3123 + \frac{21}{2} n
3124 + \frac{9}{2} \fractional{\frac{ n}{3}}^2
3125 - \frac{63}{2} \fractional{\frac{ n}{3}}
3126 + 45
3127 & \text{if $ n+3 \ge 0$}.
3128 \end{cases}
3131 \begin{table}
3132 \intercol=1cm
3133 \begin{tabular}{lc}
3134 \begin{xy}
3135 <\intercol,0pt>:<0pt,\intercol>::
3136 \POS(-1,-0.5)*\xybox{
3137 \POS@i@={(0,0),(1,0),(1,1),(0,1),(0,0)},{0*[|(2)]\xypolyline{}}
3138 \POS(0,1.1)*{}\POS(0,-0.1)*{}
3140 \end{xy}
3143 \displaystyle
3144 \frac{ n^2}{4}
3145 + \frac{9}{2} n
3146 + \frac{45}{4}
3149 \begin{xy}
3150 <\intercol,0pt>:<0pt,\intercol>::
3151 \POS(-1,-0.5)*\xybox{
3152 \POS@i@={(0,0),(1,0),(1,1),(0,1),(0,0)},{0*\xypolyline{--}}
3153 \POS(0,0)\ar@[|(2)]@{-}(0,1)
3154 \POS(0,0.5)*+!L{2}
3155 \POS(0,1.1)*{}\POS(0,-0.1)*{}
3157 \end{xy}
3160 \displaystyle
3161 \frac{33}{8}
3164 \begin{xy}
3165 <\intercol,0pt>:<0pt,\intercol>::
3166 \POS(-1,-0.5)*\xybox{
3167 \POS@i@={(0,0),(1,0),(1,1),(0,1),(0,0)},{0*\xypolyline{--}}
3168 \POS(1,0)\ar@[|(2)]@{-}(1,1)
3169 \POS(1,0.5)*+!L{3+n/3}
3170 \POS(0,1.1)*{}\POS(0,-0.1)*{}
3172 \end{xy}
3175 \displaystyle
3176 - \frac{3}{2} n \fractional{\frac{ n}{3}}
3177 + \frac{3}{4} n
3178 + \frac{9}{4} \fractional{\frac{ n}{3}}^2
3179 - \frac{63}{4} \fractional{\frac{ n}{3}}
3180 + \frac{57}{8}
3183 \begin{xy}
3184 <\intercol,0pt>:<0pt,\intercol>::
3185 \POS(-1,-0.5)*\xybox{
3186 \POS@i@={(0,0),(1,0),(1,1),(0,1),(0,0)},{0*\xypolyline{--}}
3187 \POS(0,0)\ar@[|(2)]@{-}(1,0)
3188 \POS(0.5,0)*+!D{4}
3189 \POS(0,1.1)*{}\POS(0,-0.1)*{}
3191 \end{xy}
3194 \displaystyle
3195 \frac{23}{216} n^2
3196 + \frac{23}{12} n
3197 + \frac{115}{24}
3200 \begin{xy}
3201 <\intercol,0pt>:<0pt,\intercol>::
3202 \POS(-1,-0.5)*\xybox{
3203 \POS@i@={(0,0),(1,0),(1,1),(0,1),(0,0)},{0*\xypolyline{--}}
3204 \POS(0,1)\ar@[|(2)]@{-}(1,1)
3205 \POS(0.5,1)*+!U{5}
3206 \POS(0,1.1)*{}\POS(0,-0.1)*{}
3208 \end{xy}
3211 \displaystyle
3212 \frac{31}{216} n^2
3213 + \frac{31}{12} n
3214 + \frac{155}{24}
3217 \begin{xy}
3218 <\intercol,0pt>:<0pt,\intercol>::
3219 \POS(-1,-0.5)*\xybox{
3220 \POS@i@={(0,0),(1,0),(1,1),(0,1),(0,0)},{0*\xypolyline{--}}
3221 \POS(1,1)\ar@[|(2)](1,0)
3222 \POS(1,1)\ar@[|(2)](0,1)
3223 \POS(1,1)*+!LU{(3+n/3,5)}
3224 \POS(0,1.1)*{}\POS(0,-0.1)*{}
3226 \end{xy}
3229 \displaystyle
3230 - \frac{31}{36} n \fractional{\frac{ n}{3}}
3231 + \frac{31}{72} n
3232 + \frac{31}{24} \fractional{\frac{ n}{3}}^2
3233 - \frac{217}{24} \fractional{\frac{ n}{3}}
3234 + \frac{589}{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(0,1)\ar@[|(2)](1,1)
3242 \POS(0,1)\ar@[|(2)](0,0)
3243 \POS(0,1)*+!LU{(2,5)}
3244 \POS(0,1.1)*{}\POS(0,-0.1)*{}
3246 \end{xy}
3249 \displaystyle
3250 \frac{341}{144}
3253 \begin{xy}
3254 <\intercol,0pt>:<0pt,\intercol>::
3255 \POS(-1,-0.5)*\xybox{
3256 \POS@i@={(0,0),(1,0),(1,1),(0,1),(0,0)},{0*\xypolyline{--}}
3257 \POS(0,0)\ar@[|(2)](1,0)
3258 \POS(0,0)\ar@[|(2)](0,1)
3259 \POS(0,0)*+!LD{(2,4)}
3260 \POS(0,1.1)*{}\POS(0,-0.1)*{}
3262 \end{xy}
3265 \displaystyle
3266 \frac{253}{144}
3269 \begin{xy}
3270 <\intercol,0pt>:<0pt,\intercol>::
3271 \POS(-1,-0.5)*\xybox{
3272 \POS@i@={(0,0),(1,0),(1,1),(0,1),(0,0)},{0*\xypolyline{--}}
3273 \POS(1,0)\ar@[|(2)](1,1)
3274 \POS(1,0)\ar@[|(2)](0,0)
3275 \POS(1,0)*+!LD{(3+n/3,4)}
3276 \POS(0,1.1)*{}\POS(0,-0.1)*{}
3278 \end{xy}
3281 \displaystyle
3282 - \frac{23}{36} n \fractional{\frac{ n}{3}}
3283 + \frac{23}{72} n
3284 + \frac{23}{24} \fractional{\frac{ n}{3}}^2
3285 - \frac{161}{24} \fractional{\frac{ n}{3}}
3286 + \frac{437}{144}
3288 \end{tabular}
3289 \caption{Contributions of the faces of $P(n)$ to the sum of $x_1 x_2$ over
3290 the integer points of $P(n)$}
3291 \label{t:sum:rectangle}
3292 \end{table}
3294 \end{example}
3297 \subsection{Conversion to ``standard form''}
3298 \label{s:standard}
3300 Some algorithms or tools expect a polyhedron to be
3301 specified in ``\ai{standard form}'', i.e.,
3302 \begin{equation}
3303 \label{eq:standard}
3304 \begin{cases}
3305 \begin{aligned}
3306 A \vec x & = \vec b \\
3307 \vec x & \ge \vec 0
3309 \end{aligned}
3310 \end{cases}
3311 \end{equation}
3312 Given an arbitrary (parametric) polyhedron
3313 \begin{equation}
3314 \label{eq:non-standard}
3315 \{\,
3316 \vec x \mid
3317 A \vec x + \vec b(\vec p) \ge 0
3318 \,\}
3320 \end{equation}
3321 a conversion to standard form requires the introduction
3322 of \ai{slack variable}s and a way of dealing with variables
3323 of \ai{unrestricted sign}.
3324 In this section we will be satisfied with a reduction
3325 to the form
3326 \begin{equation}
3327 \label{eq:standard:2}
3328 \begin{cases}
3329 \begin{aligned}
3330 A \vec x & = \vec b \\
3331 D \vec x & \ge \vec c
3333 \end{aligned}
3334 \end{cases}
3335 \end{equation}
3336 with $D$ a diagonal matrix with positive entries.
3337 That is, we do not necessarily make all variables non-negative,
3338 but we do ensure that they have a lower bound.
3339 If needed, a subsequent reduction can then be performed.
3341 The standard way of dealing with variables of unrestricted
3342 sign is to replace a variable $x$ of unknown sign by the
3343 difference ($x = x' - x''$) of two non-negative variables
3344 ($x', x'' \ge 0$).
3345 However, some algorithms are somewhat sensitive with respect
3346 to the number of variables and so we would prefer to introduce
3347 as few extra variables as possible.
3348 We will therefore apply a \ai{unimodular transformation}
3349 on the variables such that all transformed variables are known
3350 to be non-negative.
3352 The first step is to compute the \indac{HNF} of A,
3353 i.e., a matrix $H = A U$, with $U$ unimodular,
3354 in column echelon form such that the
3355 first entry in each column is positive and the other entries
3356 on the corresponding row are non-negative and strictly smaller
3357 than this first entry.
3358 By reordering the rows we may assume that the top square part
3359 of $H$ is lower-triangular.
3360 By a further unimodular transformation, the entries
3361 below the diagonal can be made non-positive and strictly
3362 smaller (in absolute value) than the diagonal entry of the same row.
3364 For each of the new variables, we can take a positive
3365 combination of the corresponding row and the previous rows
3366 to obtain a positive multiple of the corresponding unit vector,
3367 implying that the variable has a lower bound.
3368 A slack variable can then be introduced for each of the
3369 rows in the top square part of $H'$ that is not already
3370 a positive multiple of a unit vector and for each of
3371 the rows below the top square part of $H'$.
3373 \begin{example}
3374 Consider the cone
3376 \left\{\,
3377 \vec x \mid
3378 \begin{bmatrix}
3379 67 & -13 \\
3380 -52 & 53
3381 \end{bmatrix}
3382 \vec x
3384 \vec 0
3385 \,\right\}
3388 This cone is already situated in the first quadrant,
3389 but this may not be obvious from the constraints.
3390 Furthermore, directly adding slack variables would
3391 lead to a total of 4 variables, whereas we can also
3392 represent this cone in standard form with only 3 variables.
3393 We have
3395 H' =
3396 \begin{bmatrix}
3397 1 & 0 \\
3398 -1331 & 2875
3399 \end{bmatrix}
3401 \begin{bmatrix}
3402 67 & -13 \\
3403 -52 & 53
3404 \end{bmatrix}
3405 \begin{bmatrix}
3406 -6 & 13 \\
3407 -31 & 57
3408 \end{bmatrix}
3409 = A U'
3412 Adding a slack variable for the second row of $H'$, we
3413 obtain the equivalent problem
3415 \begin{cases}
3416 \begin{aligned}
3417 \begin{bmatrix}
3418 -1331 & 2875 & -1
3419 \end{bmatrix}
3420 \vec x'
3422 \vec 0
3424 \vec x' & \ge \vec 0
3425 \end{aligned}
3426 \end{cases}
3428 with
3430 \vec x =
3431 \begin{bmatrix}
3432 -6 & 13 & 0 \\
3433 -31 & 57 & 0
3434 \end{bmatrix}
3435 \vec x'
3438 \end{example}
3440 A similar construction was used by \shortciteN[Lemma~3.10]{Eisenbrand2000PhD}
3441 and \shortciteN{Hung1990}.
3443 \subsection{Using TOPCOM to compute Chamber Decompositions}
3445 In this section, we describe how to use the correspondence
3446 between the \ai{regular triangulation}s of a point set
3447 and the chambers of the \ai{Gale transform}
3448 of the point set~\shortcite{Gelfand1994}
3449 to compute the chamber decomposition of a parametric polytope.
3450 This correspondence was also used by \shortciteN{Pfeifle2003}
3451 \shortciteN{Eisenschmidt2007integrally}.
3453 Let us first assume that the parametric polytope can be written as
3454 \begin{equation}
3455 \label{eq:TOPCOM:polytope}
3456 \begin{cases}
3457 \begin{aligned}
3458 \vec x &\ge 0
3460 A \, \vec x &\le \vec b(\vec p)
3462 \end{aligned}
3463 \end{cases}
3464 \end{equation}
3465 where the right hand side $\vec b(\vec p)$ is arbitrary and
3466 may depend on the parameters.
3467 The first step is to add slack variables $\vec s$ to obtain
3468 the \ai{vector partition} problem
3470 \begin{cases}
3471 \begin{aligned}
3472 A \, \vec x + I \, \vec s & = \vec b(\vec p)
3474 \vec x, \vec s &\ge 0
3476 \end{aligned}
3477 \end{cases}
3479 with $I$ the identity matrix.
3480 Then we compute the (right) kernel $K$ of the matrix
3481 $\begin{bmatrix}
3482 A & I
3483 \end{bmatrix}$, i.e.,
3485 \begin{bmatrix}
3486 A & I
3487 \end{bmatrix}
3492 and use \ai[\tt]{TOPCOM}'s \ai[\tt]{points2triangs} to
3493 compute the \ai{regular triangulation}s of the points specified
3494 by the rows of $K$.
3495 Each of the resulting triangulations corresponds to a chamber
3496 in the chamber complex of the above vector partition problem.
3497 Each simplex in a triangulation corresponds to a parametric
3498 vertex active on the corresponding chamber and
3499 each point in the simplex (i.e., a row of $K$) corresponds
3500 to a variable ($x_j$ or $s_j$) that is set to zero to obtain
3501 this parametric vertex.
3502 In the original formulation of the problem~\eqref{eq:TOPCOM:polytope}
3503 each such variable set to zero reflects the saturation of the
3504 corresponding constraint ($x_j = 0$ for $x_j = 0$ and
3505 $\sps {\vec a_j}{\vec x} = b_j(\vec p)$ for $s_j = 0$).
3506 A description of the chamber can then be obtained by plugging
3507 in the parametric vertices in the remaining constraints.
3509 \begin{example}
3510 Consider the parametric polytope
3512 P(p,q,r) = \{\,
3513 (i,j) \mid 0 \le i \le p \wedge
3514 0 \le j \le 2 i + q \wedge
3515 0 \le k \le i - p + r \wedge
3516 p \ge 0 \wedge
3517 q \ge 0 \wedge
3518 r \ge 0
3519 \,\}
3522 The constraints involving the variables are
3524 \begin{cases}
3525 \begin{aligned}
3526 \begin{bmatrix}
3531 & & 1
3532 \end{bmatrix}
3533 \begin{bmatrix}
3534 i \\ j \\ k
3535 \end{bmatrix}
3537 \begin{matrix}
3543 \end{matrix}
3544 \begin{array}{l}
3550 \end{array}
3552 \begin{bmatrix}
3553 1 & 0 & 0
3555 -1 & 0 & 1
3557 -2 & 1 & 0
3558 \end{bmatrix}
3559 \begin{bmatrix}
3560 i \\ j \\ k
3561 \end{bmatrix}
3563 \begin{matrix}
3569 \end{matrix}
3570 \begin{array}{l}
3575 -p + r
3576 \end{array}
3577 \end{aligned}
3578 \end{cases}
3580 We have
3582 \begin{bmatrix}
3583 1 & 0 & 0 & 1 & 0 & 0 \\
3584 -1 & 0 & 1 & 0 & 1 & 0 \\
3585 -2 & 1 & 0 & 0 & 0 & 1 \\
3586 \end{bmatrix}
3587 \begin{bmatrix}
3588 -1 & 0 & 0 \\
3589 -2 & 0 & -1 \\
3590 -1 & -1 & 0 \\
3591 1 & 0 & 0 \\
3592 0 & 1 & 0 \\
3593 0 & 0 & 1 \\
3594 \end{bmatrix}
3598 Computing the \ai{regular triangulation}s of the rows of $K$
3599 using \ai[\tt]{TOPCOM}, we obtain
3600 \begin{verbatim}
3601 > cat e2.topcom
3603 [ -1 0 0 ]
3604 [ -2 0 -1 ]
3605 [ -1 -1 0 ]
3606 [ 1 0 0 ]
3607 [ 0 1 0 ]
3608 [ 0 0 1 ]
3610 > points2triangs --regular < e2.topcom
3611 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}};
3612 T[2]:={{1,2,3},{1,3,4},{2,3,5},{3,4,5},{1,2,5},{1,4,5}};
3613 T[3]:={{1,2,3},{1,3,4},{2,3,5},{3,4,5},{1,2,4},{2,4,5}};
3614 \end{verbatim}
3616 We see that we have three chambers in the decomposition,
3617 one with 8 vertices and two with 6 vertices.
3618 Take the second vertex (``\verb+{1,2,3}+'') of the first chamber.
3619 This vertex corresponds
3620 to the saturation of the constraints $j \ge 0$, $k \ge 0$
3621 and $i \le p$, i.e., $(i,j,k) = (p,0,0)$. Plugging in this
3622 vertex in the remaining constraints, we see that it is only valid
3623 in case $p \ge 0$, $r \ge 0$ and $2p + q \ge 0$.
3624 For the remaining vertices of the first chamber, we similarly find
3626 \begin{tabular}{ccc}
3627 % e0
3628 \verb+{0,1,2}+ & $(0,0,0)$ & $p \ge 0$, $-q + r \ge 0$ and $q \ge 0$
3630 % 70
3631 \verb+{1,2,3}+ & $(p,0,0)$ & $p \ge 0$, $r \ge 0$ and $2p + q \ge 0$
3633 % c8
3634 \verb+{0,1,4}+ & $(0,0,-p+r)$ & $-q + r \ge 0$, $p \ge 0$ and $q \ge 0$
3636 % 58
3637 \verb+{1,3,4}+ & $(p,0,r)$ & $p \ge 0$, $r \ge 0$ and $2p + q \ge 0$
3639 % a4
3640 \verb+{0,2,5}+ & $(0,q,0)$ & $q \ge 0$, $p \ge 0$ and $-q + r \ge 0$
3642 % 34
3643 \verb+{2,3,5}+ & $(p, 2p+q, 0)$ & $p \ge 0$, $2p + q \ge 0$ and $r \ge 0$
3645 % 8c
3646 \verb+{0,4,5}+ & $(0, q, -p+r)$ & $q \ge 0$, $-q + r \ge 0$ and $p \ge 0$
3648 % 1c
3649 \verb+{3,4,5}+ & $(p, 2p+q, r)$ & $p \ge 0$, $2p + q \ge 0$ and $r \ge 0$
3650 \end{tabular}
3652 Combining these constraints with the initial constraints of the problem
3653 on the parameters
3654 $p \ge 0$, $q \ge 0$ and $r \ge 0$, we find the chamber
3656 \{\,
3657 (p,q,r) \mid p \ge 0 \wedge -p + r \ge 0 \wedge q \ge 0
3658 \,\}
3660 For the second 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 % 64
3676 \verb+{1,2,5}+ & $(-\frac q 2,0,0)$ &
3677 $-q \ge 0$, $2p + q \ge 0$ and $-2p -q+2r \ge 0$
3679 % 4c
3680 \verb+{1,4,5}+ & $(-\frac q 2,0,-p-\frac q 2+r)$ &
3681 $-q \ge 0$, $-2p -q+2r \ge 0$ and $2p + q \ge 0$
3682 \end{tabular}
3684 The chamber is therefore
3686 \{\,
3687 (p,q,r) \mid q = 0 \wedge p \ge 0 \wedge -p +r \ge 0
3688 \,\}
3690 Note that by intersecting with the initial constraints this chamber
3691 is no longer full-dimensional and can therefore be discarded.
3692 Finally, for the third chamber, we have
3694 \begin{tabular}{ccc}
3695 % 70
3696 \verb+{1,2,3}+ & $(p,0,0)$ & $p \ge 0$, $r \ge 0$ and $2p + q \ge 0$
3698 % 58
3699 \verb+{1,3,4}+ & $(p,0,r)$ & $p \ge 0$, $r \ge 0$ and $2p + q \ge 0$
3701 % 34
3702 \verb+{2,3,5}+ & $(p, 2p+q, 0)$ & $p \ge 0$, $2p + q \ge 0$ and $r \ge 0$
3704 % 1c
3705 \verb+{3,4,5}+ & $(p, 2p+q, r)$ & $p \ge 0$, $2p + q \ge 0$ and $r \ge 0$
3707 % 68
3708 \verb+{1,2,4}+ & $(p-r,0,0)$ &
3709 $p -r \ge 0$, $r \ge 0$ and $2p +q -2r \ge 0$
3711 % 2c
3712 \verb+{2,4,5}+ & $(p-r,2p+q-2r, 0)$ &
3713 $p -r \ge 0$, $2p +q -2r \ge 0$ and $r \ge 0$
3714 \end{tabular}
3716 The chamber is therefore
3718 \{\,
3719 (p,q,r) \mid p - r \ge 0 \wedge q \ge 0 \wedge r \ge 0
3720 \,\}
3722 \end{example}
3724 Now let us consider general parametric polytopes.
3725 First note that we can follow the same procedure as above
3726 if we replace $\vec x$ by $\vec x' - \vec c(\vec p)$
3727 in \eqref{eq:TOPCOM:polytope}, i.e.,
3728 if our problem has the form
3729 \begin{equation}
3730 \label{eq:TOPCOM:polytope:2}
3731 \begin{cases}
3732 \begin{aligned}
3733 \vec x' &\ge \vec c(\vec p)
3735 A \, \vec x' &\le \vec b(\vec p) + A \vec c(\vec p)
3737 \end{aligned}
3738 \end{cases}
3739 \end{equation}
3740 as saturating a constraint $x_i = 0$ is equivalent
3741 to saturating the constraint $x_i' = c_i(\vec p)$
3742 and, similarly, $\sps {\vec a_j}{\vec x} = b_j(\vec p)$
3743 is equivalent to
3744 $\sps {\vec a_j}{\vec x'} = b_j(\vec p) + \sps {\vec a_j}{\vec c(\vec p)}$.
3746 In the general case, the problem has the form
3748 A \vec x \ge \vec b(\vec p)
3750 and then we apply the technique of \autoref{s:standard}.
3751 Let $A'$ be a non-singular square submatrix of $A$ with the same number
3752 of columns and compute the (left) \indac{HNF} $H = A' U$ with $U$ unimodular
3753 and $H$ lower-triangular with non-positive elements below the diagonal.
3754 Replacing $\vec x$ by $U \vec x'$, we obtain
3756 \begin{cases}
3757 \begin{aligned}
3758 H \vec x' &\ge \vec b'(\vec p)
3760 -A''U \, \vec x' &\le -\vec b''(\vec p)
3762 \end{aligned}
3763 \end{cases}
3765 with $A''$ the remaining rows of $A$ and $\vec b(\vec p)$ split
3766 in the same way.
3767 If $H$ happens to be the identity matrix, then our problem is
3768 of the form \eqref{eq:TOPCOM:polytope:2} and we already know how
3769 to solve this problem.
3770 Note that, again, saturating any of the transformed constraints
3771 in $\vec x'$ is equivalent to saturating the corresponding constraint
3772 in $\vec x$. We therefore only need to compute $-A'' U$ for the
3773 computation of the kernel $K$. To construct the parametric vertices
3774 in the original coordinate system, we can simply use the original
3775 constraints.
3776 The same reasoning holds if $H$ is any diagonal matrix, since
3777 we can virtually replace $H \vec x$ by $\vec x'$ without affecting
3778 the non-negativity of the variables.
3780 If $H$ is not diagonal, then we can introduce new constraints
3781 $x'_j \ge d(\vec p)$, where $d(\vec p)$ is some symbolic constant.
3782 These constraints do not remove any solutions
3783 since each row in $H$ expresses that the corresponding variable is
3784 greater than or equal to a non-negative combination of the
3785 previous variables plus some constant.
3786 We can then proceed as before. However, to reduce unnecessary computations
3787 we may remove from $K$ the rows that correspond to these new rows.
3788 Any solution saturating the new constraint, would also saturate
3789 the corresponding constraint $\vec h_j^\T$ and all
3790 the constraints corresponding to the non-zero
3791 entries in $\vec h_j^\T$.
3792 If a chamber contains a vertex obtained by saturating such a new
3793 constraint, it would appear multiple times in the same chamber,
3794 each time combined with different constraints from the above set.
3795 Furthermore, there would also be another (as it turns out, identical)
3796 chamber where the vertex is only defined by the other constraints.
3798 \begin{example}
3799 Consider the parametric polytope
3801 P(n) = \{\,
3802 (i,j) \mid
3803 1 \le i \wedge 2 i \le 3 j \wedge j \le n
3804 \,\}
3807 The constraints are
3809 \begin{bmatrix}
3810 1 & 0 \\
3811 -2 & 3 \\
3812 0 & -1
3813 \end{bmatrix}
3814 \begin{bmatrix}
3815 i \\ j
3816 \end{bmatrix}
3818 \begin{bmatrix}
3819 1 \\
3820 0 \\
3822 \end{bmatrix}
3825 The top $2 \times 2$ submatrix is already in \indac{HNF}.
3826 We have $3 j \ge 2i \ge 2$, so we can add a constraint
3827 of the form $j \ge c(n)$ and obtain
3829 \begin{bmatrix}
3830 A & I
3831 \end{bmatrix}
3833 \begin{bmatrix}
3834 0 & 1 & 1 & 0
3836 2 & -3 & 0 & 1
3837 \end{bmatrix}
3840 while $K$ with $\begin{bmatrix}A & I\end{bmatrix} K = 0$ is given
3843 \begin{bmatrix}
3844 0 & 1 & 1 & 0
3846 2 & -3 & 0 & 1
3847 \end{bmatrix}
3848 \begin{bmatrix}
3849 1 & 0 \\
3850 0 & 1 \\
3851 0 & -1 \\
3852 -2 & 3
3853 \end{bmatrix}
3856 The second row of $K$ corresponds to the second variable,
3857 which in turn corresponds to the newly added constraint.
3858 Passing all rows of $K$ to \ai[\tt]{TOPCOM} we would get
3859 \begin{verbatim}
3860 > points2triangs --regular <<EOF
3861 > [[1 0],[0,1],[0,-1],[-2,3]]
3862 > EOF
3863 T[1]:={{0,1},{0,2},{1,3},{2,3}};
3864 T[2]:={{0,2},{2,3},{0,3}};
3865 T[3]:={};
3866 \end{verbatim}
3867 The first vertex in the first chamber saturates the second row
3868 (row 1) and therefore saturates both the first (0) and fourth (3)
3869 and it appears a second time as \verb+{1,3}+. Combining
3870 these ``two'' vertices into one as \verb+{0,3}+ results in the
3871 second (identical) chamber.
3872 Removing the row corresponding to the new constraint from $K$
3873 we remove the duplicates
3874 \begin{verbatim}
3875 > points2triangs --regular <<EOF
3876 > [[1 0],[0,-1],[-2,3]]
3877 > EOF
3878 T[1]:={{0,1},{1,2},{0,2}};
3879 T[2]:={};
3880 \end{verbatim}
3881 Note that in this example, we also could have interchanged
3882 the second and the third constraint and then have replaced $j$ by $-j'$.
3883 \end{example}
3885 In practice, this method of computing a \ai{chamber decomposition}
3886 does not seem to perform very well, mostly because
3887 \ai[\tt]{TOPCOM} can not exploit all available information
3888 about the parametric polytopes and will therefore compute
3889 many redundant triangulations/chambers.
3890 In particular, any chamber that does not intersect with
3891 the parameter domain of the parametric polytope, or only
3892 intersects in a face of this parameter domain, is completely redundant.
3893 Furthermore, if the parametric polytope is not simple, then many
3894 different combinations of the constraints will lead to the same parametric
3895 vertex. Many triangulations will therefore correspond to one and the
3896 same chamber in the chamber complex of the parametric polytope.
3897 For example, for a dilated octahedron, \ai[\tt]{TOPCOM} will
3898 compute 150 triangulations/chambers, 104 of which are empty,
3899 while the remaining 46 refer to the same single chamber.
3902 \subsection{Computing the Hilbert basis of a cone}
3903 \label{s:hilbert}
3905 To compute the \ai{Hilbert basis} of a cone, we use
3906 the \ai[\tt]{zsolve} library from \ai[\tt]{4ti2} \shortcite{4ti2},
3907 which implements the technique of \shortciteN{Hemmecke2002Hilbert}.
3908 We first remove all equalities from the cone through unimodular
3909 transformations and then apply the technique of \autoref{s:standard}
3910 to put the cone in ``standard form''. Note that for a (non-parametric)
3911 cone the constant term $\vec b$ in \eqref{eq:non-standard} is $\vec 0$.
3912 The constraints $D \vec x \ge \vec c = \vec 0$ of \eqref{eq:standard:2}
3913 are therefore equivalent to $\vec x \ge \vec 0$.
3916 \subsection{Integer Feasibility}
3917 \label{s:feasibility}
3919 For testing whether a polytope $P \subset \QQ^d$ contains any integer points,
3920 we use the technique of~\shortciteN{Cook1993implementation},
3921 based on \ai{generalized basis reduction}.
3923 The technique basically looks for a ``short vector'' $\vec c$ in the
3924 lattice $\ZZ^d$, where shortness is measured in terms of
3925 the \ai{width} of the polytope $P$ along that direction,
3926 \begin{align*}
3927 \width_{\vec c} P
3929 \max \{\, \sp c x \mid \vec x \in P \,\}
3931 \min \{\, \sp c x \mid \vec x \in P \,\}
3934 \max \{\, \sps {\vec c} {\vec x - \vec y} \mid \vec x, \vec y \in P \,\}
3936 \end{align*}
3937 The \defindex{lattice width} is the minimum width over all
3938 non-zero integer directions:
3940 \width P =
3941 \min_{\vec c \in \ZZ^d \setminus \{ \vec 0 \} } \width_{\vec c} P
3944 If the dimension $d$ is fixed then
3945 the lattice width of any polytope $P \subset \QQ^d$
3946 containing no integer points is bounded by a constant%
3947 ~\shortcite{Lagarias90,Barvinok02,Banaszczyk1999flatness}.
3948 If we slice the polytope using hyperplanes orthogonal
3949 to a short direction, i.e., a direction where the width
3950 is small, we will therefore only need to inspect
3951 ``few'' of them before either finding one with an integer point,
3952 or running out of hyperplanes, meaning that the
3953 polytope did not contain any integer points.
3954 Each slice is checked for integer points by applying
3955 the above method recursively.
3957 A nice feature of this technique is that it will
3958 not only tell you if there is any integer point
3959 in the given polytope, but it will actually compute
3960 one if there is any.
3962 The short vector is obtained as the first vector
3963 of a ``reduced basis'' of the lattice $\ZZ^d$ with respect
3964 to the polytope.
3965 In particular, the first vector $\vec b_1$ of this reduced basis
3966 will satisfy
3968 \width_{\vec b_1} P
3970 \frac{\width P}
3971 {\left(\frac 1 2 - \varepsilon\right)^{d-1}}
3974 with $0 < \varepsilon < 1/2$ a fixed constant.
3975 That is, the width in direction $\vec b_1$ is no more than a constant
3976 factor bigger than the lattice width.
3977 See~\shortcite{Cook1993implementation} for details.
3978 In our implementation we use $\varepsilon = 1/4$.
3979 When used in the above integer feasibility testing algorithm,
3980 we will also terminate the reduced basis computation
3981 as soon as the width along the first basis vector is smaller than 2.
3982 This means that there will be at most 2 slices orthogonal to the chosen
3983 direction.
3985 The computation of the above reduced basis requires the solution
3986 of many linear programs, for which we use any of the following
3987 external solvers:
3988 \begin{itemize}
3989 \item \ai[\tt]{GLPK}~\shortcite{GLPK}
3991 This solver is based on double precision floating point arithmetic and
3992 may therefore not be suitable if the coefficients of the constraints
3993 describing the polytope are large.
3995 \item \ai[\tt]{cdd}~\shortcite{cdd}
3997 This solver is based on exact integer arithmetic.
3998 Note that you need version \verb+cddlib 0.94e+ or newer.
3999 Earlier versions (\verb+0.93+--\verb+0.94d+) have
4000 a bug that may sometimes result in a polytope being
4001 reported as (rationally) empty even though it is not.
4003 \item \piplib/~\shortcite{Feautrier:PIP}
4005 This solver is also based on exact integer arithmetic
4006 and uses the \ai{dual simplex} method to solve a linear program.
4007 Two versions are available, \ai[\tt]{pip} will present the
4008 original program to \piplib/, while \ai[\tt]{pip-dual} will present
4009 the dual program to \piplib/, effectively having it apply the primal
4010 simplex method to the original problem.
4011 The latter may seem more appropriate since the computation
4012 of the reduced basis only requires the dual solution of
4013 any linear program. However, in practice, it appears
4014 that \ai[\tt]{pip} is often faster than \ai[\tt]{pip-dual}.
4015 \end{itemize}
4016 The LP solver to use can be selected with the \ai[\tt]{--gbr} option.
4019 \subsection{Computing the integer hull of a polyhedron}
4020 \label{s:integer:hull}
4022 For computing the \ai{integer hull} of a polyhedron,
4023 we first describe how to compute the convex hull of a set
4024 given as an oracle for optimizing a linear objective
4025 function over the set and then
4026 we explain how to optimize a linear objective function over
4027 the integer points of a polyhedron.
4028 Applying the first with the second as \ai{optimization oracle}
4029 yields a method for computing the requested integer hull.
4031 \subsubsection{Computing the convex hull based on an optimization oracle}
4033 The algorithm described below is presented by
4034 \shortciteN[Remark~2.5]{Cook1992} as an extension of the
4035 algorithm by \shortciteN[Section~3]{Edmonds82} for computing
4036 the {\em dimension} of a polytope for which only an optimization oracle
4037 is available. The algorithm is described in a bit more detail
4038 by \shortciteN{Eisenbrand2000PhD} and reportedly stems from
4039 \shortciteN{Hartmann1989PhD}.
4040 Essentially the same algorithm has also been implemented
4041 by \shortciteN{Huggins06}, citing
4042 \ai{beneath/beyond}~\shortcite{Preparata1985} as his inspiration.
4044 The algorithm start out from an initial set of points from
4045 the set $S$. After computing the convex hull of this set
4046 of points, we take one of its bounding constraints and use
4047 the optimization oracle
4048 to compute an optimal point in $S$ (but on the other side
4049 of the bounding hyperplane) along the
4050 outer normal of this bounding constraint.
4051 If a new point is found, it is added to the set of points
4052 and a new convex hull is computed, or the old one is adapted
4053 in a beneath/beyond fashion. Otherwise, the chosen bounding constraint
4054 is also a bounding constraint of $S$ and need not be considered anymore.
4055 The process continues until all bounding constraints in the
4056 description of the current convex hull have been considered.
4058 In principle, the initial set of points in the above algorithm
4059 may be empty, with a ``convex hull'' described by a set of
4060 conflicting constraints and each equality in the description of any
4061 intermediate lower-dimensional convex hull being considered
4062 as a pair of bounding constraints with opposite outer normals.
4063 However, in our implementation, we have chosen to first compute
4064 a maximal set of affinely independent points by first taking any
4065 point from $S$ and then adding points from $S$ not on one of
4066 the equalities satisfied by all points found so far.
4067 This allows us to not have to worry about equalities in the
4068 main algorithm.
4069 In the case of the computation of the integer hull, finding
4070 these affinely independent points can be accomplished using the technique of
4071 \autoref{s:feasibility}.
4073 \begin{figure}
4074 \intercol=0.58cm
4075 \begin{xy}
4076 <\intercol,0pt>:<0pt,\intercol>::
4077 \POS(-1,0)*\xybox{
4078 \def\latticebody{\POS="c"+(0,0.5)\ar@{--}"c"+(0,6.5)}%
4079 \POS0,{\xylattice{1}{6}00}%
4080 \def\latticebody{\POS="c"+(0.5,0)\ar@{--}"c"+(6.5,0)}%
4081 \POS0,{\xylattice00{1}6}%
4082 \POS@i@={(1.5,2.75),(5.75,2.25),(5.5,5.25),(2.75,4.75),(1.5,2.75)},
4083 {0*\xypolyline{}}
4084 \POS@i@={(2,3),(3,3),(3,4),(2,3)},{0*[|(3)]\xypolyline{}}
4085 \POS(2,3)*{\bullet}
4086 \POS(3,3)*{\bullet}
4087 \POS(3,4)*{\bullet}
4088 \POS(3,3.5)\ar(3.5,3.5)
4089 \POS(5,3)*{\circ}
4090 \POS(5,4)*{\circ}
4091 \POS(5,5)*{\circ}
4093 \POS(6,0)*\xybox{
4094 \def\latticebody{\POS="c"+(0,0.5)\ar@{--}"c"+(0,6.5)}%
4095 \POS0,{\xylattice{1}{6}00}%
4096 \def\latticebody{\POS="c"+(0.5,0)\ar@{--}"c"+(6.5,0)}%
4097 \POS0,{\xylattice00{1}6}%
4098 \POS@i@={(1.5,2.75),(5.75,2.25),(5.5,5.25),(2.75,4.75),(1.5,2.75)},
4099 {0*\xypolyline{}}
4100 \POS@i@={(2,3),(5,3),(3,4),(2,3)},{0*[|(3)]\xypolyline{}}
4101 \POS(2,3)*{\bullet}
4102 \POS(5,3)*{\bullet}
4103 \POS(3,4)*{\bullet}
4104 \POS(4,3.5)\ar(4.25,4)
4105 \POS(5,5)*{\circ}
4107 \POS(13,0)*\xybox{
4108 \def\latticebody{\POS="c"+(0,0.5)\ar@{--}"c"+(0,6.5)}%
4109 \POS0,{\xylattice{1}{6}00}%
4110 \def\latticebody{\POS="c"+(0.5,0)\ar@{--}"c"+(6.5,0)}%
4111 \POS0,{\xylattice00{1}6}%
4112 \POS@i@={(1.5,2.75),(5.75,2.25),(5.5,5.25),(2.75,4.75),(1.5,2.75)},
4113 {0*\xypolyline{}}
4114 \POS@i@={(2,3),(5,3),(5,5),(3,4),(2,3)},{0*[|(3)]\xypolyline{}}
4115 \POS(2,3)*{\bullet}
4116 \POS(5,3)*{\bullet}
4117 \POS(5,5)*{\bullet}
4118 \POS(3,4)*{\bullet}
4120 \end{xy}
4121 \caption{The integer hull of a polytope}
4122 \label{f:integer:hull}
4123 \end{figure}
4125 \begin{example}
4126 Assume we want to compute the integer hull of the polytope in the left part
4127 of \autoref{f:integer:hull}.
4128 We first compute a set of three affinely independent points,
4129 shown in the same part of the figure.
4130 Of the three facets of the corresponding convex hull,
4131 optimization along the outer normal (depicted by an arrow in the figure)
4132 of only one facet will yield any additional points. The other two
4133 are therefore facets of the integer hull.
4134 Optimization along the above outer normal may yield any of the
4135 points marked by a $\circ$.
4136 Assuming it is the bottom one, we end up with the updated
4137 convex hull in the middle of the figure. This convex hull
4138 has only one new facet. Adding the point found by optimizing
4139 over this facet's outer normal, we obtain the convex hull
4140 on the right of the figure.
4141 There are two new facets, but neither of them yields any
4142 further points. We have therefore found the integer hull
4143 of the polytope.
4144 \end{example}
4146 \subsubsection{Optimization over the integer points of a polyhedron}
4147 \label{s:optimization}
4149 We assume that we want to find the {\em minimum} of
4150 some linear objective function. When used in the computation
4151 of the integer hull of some polytope, the objective function
4152 will therefore correspond to the inner normal of some facet.
4154 During our search for an optimal integer point with respect
4155 to some objective function, we will keep track of the best
4156 point so far as well as a lower bound $l$
4157 and an upper bound $u$ such that the value at the optimal point
4158 (if it is better than the current best) lies between those
4159 two bounds.
4160 Initially, there is no best point yet and values for $l$ and $u$
4161 may be obtained from optimization over the linear relaxation.
4162 When used in the computation of the integer hull of some polytope,
4163 the upper bound $u$ is one less than the value attained on
4164 the given facet of the current approximation.
4166 As long as $l \le u$, we perform the following steps
4167 \begin{itemize}
4168 \item use the integer feasibility technique of \autoref{s:feasibility}
4169 to test whether there is any integer point with value in
4170 $[l,u']$, where $u'$ is
4171 \begin{itemize}
4172 \item $u$ if the previous test for an integer point did not produce a point
4173 \item $l+\floor{\frac{u-l-1}2}$
4174 if the previous test for an integer point {\em did\/} produce a point
4175 \end{itemize}
4176 \item if a point is found, then remember it as the current best
4177 and replace $u$ by the value at this point minus one,
4178 \item otherwise, replace $l$ by $u'+1$.
4179 \end{itemize}
4180 When used in the computation of the integer hull of some polytope,
4181 it is useful to not only keep track of the best point so far,
4182 but of all points found.
4183 These points will all lie outside of the current approximation
4184 of the integer hull and adding them all instead of just one,
4185 will typically get us to the complete integer hull quicker.
4187 \begin{figure}
4188 \intercol=0.7cm
4189 \begin{xy}
4190 <\intercol,0pt>:<0pt,\intercol>::
4191 \POS(0.5,0)\ar@{-}(16.5,0)
4192 \def\latticebody{\POS="c"+(0,-0.2)\ar@{--}"c"+(0,0.2)\POS"c"*++!D{\the\latticeA}}%
4193 \POS0,{\xylattice{1}{16}00}%
4194 \POS(6,0)*!C{\bullet}
4195 \POS(7,0)*{\bullet}
4196 \POS(8,0)*{\bullet}
4197 \POS(12,0)*{\bullet}
4198 \POS(13,0)*{\bullet}
4199 \POS(14,0)*{\bullet}
4200 \POS(15,0)*{\bullet}
4201 \POS(16,0)*{\bullet}
4202 \POS(1,-1)\ar@{-}(16,-1)
4203 \POS(8,-1)*{\bullet}
4204 \POS(1,-2)\ar@{-}(4,-2)
4205 \POS(5,-3)\ar@{-}(7,-3)
4206 \POS(6,-3)*{\bullet}
4207 \POS(4.9,-4)\ar@{-}(5.1,-4)
4208 \end{xy}
4209 \caption{The integer points of a polytope projected on an objective function}
4210 \label{f:hull:projected}
4211 \end{figure}
4213 \begin{example}
4214 \label{ex:hull:projected}
4215 Assume that the values of some objective function attained
4216 by the integer points of some polytope are as shown in
4217 \autoref{f:hull:projected} and assume we know that the optimal
4218 value lies between 1 and 16.
4219 In the first step we would look for a point attaining a value
4220 in the interval $[1,16]$. Suppose this yields a point attaining
4221 the value $8$ (second line of the figure). We record this point
4222 as the current best and update the search interval to $[1,7]$.
4223 In the second step, we look for a point attaining a value
4224 in the interval $[1,4]$, but find nothing and set the search interval
4225 to $[5,7]$.
4226 In the third step, we consider the interval $[5,7]$ and find
4227 a point attaining the value 6. We update the current best value
4228 and set the search interval to $[5,5]$.
4229 In the fourth step, we consider the interval $[5,5]$, find no
4230 points and update the interval to ``$[6,5]$''.
4231 Since the lower bound is now larger than the upper bound, the
4232 algorithm terminates, returning the best or all point(s) found.
4233 \end{example}
4236 \subsection{Computing the integer hull of a truncated cone}
4237 \label{s:hull:cone}
4239 In \autoref{s:width} we will need to compute the \ai{integer hull}
4240 of a cone with the origin removed ($C \setminus \{ \vec 0 \}$).
4242 \subsubsection{Using the Hilbert basis of the cone}
4244 As proposed by \shortciteN{Koeppe2007personal},
4245 one way of computing this integer hull is to first compute
4246 the \ai{Hilbert basis} of $C$ (see \autoref{s:hilbert})
4247 and to then remove from that Hilbert basis the points that
4248 are not vertices of the integer hull of $C \setminus \{ \vec 0 \}$.
4249 The Hilbert basis of $C$ is the minimal set of points
4250 $\vec b_i \in C \cap \ZZ^d$ such that every integer point
4251 $\vec x \in C \cap \ZZ^d$ can be written as a non-negative
4252 {\em integer} combination of the $\vec b_i$.
4253 The vertices $\vec v_j$ of the integer hull of $C \setminus \{ \vec 0 \}$
4254 are such that every integer point
4255 $\vec x \in (C \cap \ZZ^d) \setminus \{ \vec 0 \}$ can
4256 be written as s non-negative {\em rational} combination of $\vec v_j$.
4257 Clearly, any $\vec v_j$ is also a $\vec b_i$ since $\vec v_j$ can
4258 not be written as the sum of a (rational) convex combination of
4259 other integer points in $(C \cap \ZZ^d) \setminus \{ \vec 0 \}$
4260 and a non-negative combination of the extremal rays $\vec r_k$ of $C$.
4261 A fortiori, it can therefore not be written as an integer combination
4262 of other integer points in $C$.
4263 To obtain the $\vec v_j$ from the $\vec b_i$ we therefore simply
4264 need to remove first $(0,0)$ and then those $\vec b_i$ that are
4265 not an extremal ray and that {\em can} be written as a combination
4267 \vec b_i = \sum_{j \ne i} \vec \alpha_j \vec b_j + \sum_k \beta_k \vec r_k
4268 \qquad\text{with $\alpha_j, \beta_k \ge 0$ and $\sum_{j \ne i} \alpha_j = 1$}
4271 Since the $\vec r_k$ are also among the $\vec b_j$, this can
4272 be simplified to checking whether there exists a rational
4273 solution for $\vec \alpha_j$ to
4275 \vec b_i = \sum_{j \ne i} \vec \alpha_j \vec b_j
4276 \qquad\text{with $\alpha_j \ge 0$ and $\sum_{j \ne i} \alpha_j \ge 1$}
4280 \begin{figure}
4281 \intercol=1.1cm
4282 \begin{xy}
4283 <\intercol,0pt>:<0pt,\intercol>::
4284 \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{*}}
4285 \def\latticebody{\POS="c"+(0,-4.5)\ar@{--}"c"+(0,5.5)}%
4286 \POS0,{\xylattice{-0}{5}00}%
4287 \def\latticebody{\POS="c"+(-0.5,0)\ar@{--}"c"+(5.5,0)}%
4288 \POS0,{\xylattice00{-4}5}%
4289 \POS0\ar(2,-3)
4290 \POS0\ar(3,4)
4291 \POS(2,-3)*{\bullet}
4292 \POS(3,4)*{\bullet}
4293 \POS(1,1)*{\bullet}
4294 \POS(1,-1)*{\bullet}
4295 \POS(1,0)*{\bullet}
4296 \POS(2,-3)*{\times}
4297 \POS(3,4)*{\times}
4298 \POS(1,1)*{\times}
4299 \POS(1,-1)*{\times}
4300 \end{xy}
4301 \caption{The Hilbert basis and the integer hull of a truncated cone}
4302 \label{f:hilbert:hull}
4303 \end{figure}
4305 \begin{example} \label{ex:hilbert:hull}
4306 Consider the cone
4308 C = \poshull \,\{(2,-3), (3,4)\}
4311 shown in Figure~\ref{f:hilbert:hull}.
4312 The Hilbert basis of this cone is
4313 $$\{(0,0),(2,-3),(3,4),(1,1),(1,-1),(1,0)\}.$$
4314 We have $(1,0) = \frac 1 2 (1,1) + \frac 1 2 (1,-1)$,
4315 while $(1,1)$ and $(1,-1)$ can not be written as
4316 overconvex combinations of the other $\vec b_i \ne \vec 0$.
4317 The vertices of the integer hull of $C \setminus \{ \vec 0 \}$
4318 are therefore
4319 $$\{(2,-3),(3,4),(1,1),(1,-1)\}.$$
4320 \end{example}
4322 \subsubsection{Using generalized basis reduction}
4323 \label{s:hull:cone:gbr}
4325 Another way of computing the integer hull of a truncated cone is to apply
4326 the method of \autoref{s:integer:hull}.
4327 In this case, the initial set of points will consist
4328 of (the smallest integer representatives of) the extremal rays
4329 of the cone, together with the extremal rays themselves.
4330 That is, if $C = \poshull \, \{ \vec r_j \}$ with
4331 $\vec r_j \in \ZZ^d$, then our initial approximation of the
4332 integer hull of $C \setminus \{ \vec 0 \}$ is
4334 \convhull \, \{ \vec r_j \} + \poshull \, \{ \vec r_j \}
4337 Furthermore, we need never consider any
4338 of the bounding constraints that are also bounding constraints
4339 of the original cone.
4340 When optimizing along the normal of any of the other facets, we can
4341 take the lower bound to be $1$. This will ensure that
4342 the origin is excluded, without excluding any other integer points.
4344 \begin{figure}
4345 \intercol=0.5cm
4346 \begin{xy}
4347 <\intercol,0pt>:<0pt,\intercol>::
4348 \POS(0,0)*\xybox{
4349 \POS@i@={(3,-4.5),(2,-3),(3,4),(4.125,5.5),(5.5,5.5),(5.5,-4.5)},{0*[grey]\xypolyline{*}}
4350 \def\latticebody{\POS="c"+(0,-4.5)\ar@{--}"c"+(0,5.5)}%
4351 \POS0,{\xylattice{-0}{5}00}%
4352 \def\latticebody{\POS="c"+(-0.5,0)\ar@{--}"c"+(5.5,0)}%
4353 \POS0,{\xylattice00{-4}5}%
4354 \POS0\ar(2,-3)
4355 \POS0\ar(3,4)
4356 \POS(2,-3)*{\bullet}
4357 \POS(3,4)*{\bullet}
4358 \POS(1,1)*{\circ}
4360 \POS(8,0)*\xybox{
4361 \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{*}}
4362 \def\latticebody{\POS="c"+(0,-4.5)\ar@{--}"c"+(0,5.5)}%
4363 \POS0,{\xylattice{-0}{5}00}%
4364 \def\latticebody{\POS="c"+(-0.5,0)\ar@{--}"c"+(5.5,0)}%
4365 \POS0,{\xylattice00{-4}5}%
4366 \POS0\ar(2,-3)
4367 \POS0\ar(3,4)
4368 \POS(2,-3)*{\bullet}
4369 \POS(3,4)*{\bullet}
4370 \POS(1,1)*{\bullet}
4371 \POS(1,-1)*{\circ}
4373 \POS(16,0)*\xybox{
4374 \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{*}}
4375 \def\latticebody{\POS="c"+(0,-4.5)\ar@{--}"c"+(0,5.5)}%
4376 \POS0,{\xylattice{-0}{5}00}%
4377 \def\latticebody{\POS="c"+(-0.5,0)\ar@{--}"c"+(5.5,0)}%
4378 \POS0,{\xylattice00{-4}5}%
4379 \POS0\ar(2,-3)
4380 \POS0\ar(3,4)
4381 \POS(2,-3)*{\bullet}
4382 \POS(3,4)*{\bullet}
4383 \POS(1,1)*{\bullet}
4384 \POS(1,-1)*{\bullet}
4386 \end{xy}
4387 \caption{The integer hull of a truncated cone}
4388 \label{f:cone:integer:hull}
4389 \end{figure}
4391 \begin{example}
4392 Consider once more the cone
4394 C = \poshull \,\{(2,-3), (3,4)\}
4396 from Example~\ref{ex:hilbert:hull}.
4397 The initial approximation is
4399 C = \convhull \,\{(2,-3), (3,4)\} + \poshull \,\{(2,-3), (3,4)\}
4402 which is shown on the left of \autoref{f:cone:integer:hull}.
4403 The only bounding constraint that does not correspond to a
4404 bounding constraint of $C$ is $7 x - y \ge 17$.
4405 In the first step, we will therefore look for a point
4406 minimizing $7 x - y$ with values in the interval $[1,16]$.
4407 All values of this objective function in the given interval
4408 attained by points in $C$ are shown in \autoref{f:hull:projected}.
4409 From Example~\ref{ex:hull:projected}, we know that the optimal
4410 value is $6$ and this corresponds to the point $(1,1)$.
4411 Adding this point to our hull, we obtain the approximation
4412 in the middle of \autoref{f:cone:integer:hull}.
4413 This approximation has two new facets.
4414 The bounding constraint $3x - 2 y \ge 1$ will not produce
4415 any new points since we would be looking for one in the
4416 interval ``$[1,0]$''.
4417 The other new bounding constraint is $4x + y \ge 5$.
4418 Minimizing $4 x+ y$ with values in the interval $[1,4]$,
4419 we find the minimal value $3$ corresponding to the point $(1,-1)$.
4420 Adding this point, we obtain the complete integer hull
4421 shown on the right of \autoref{f:cone:integer:hull}.
4422 Note that if in the first step we would have added not only
4423 the point corresponding to the optimal value, but instead
4424 all points found in Example~\ref{ex:hull:projected},
4425 then we would have obtained the complete integer hull directly.
4426 \end{example}
4429 \subsection{Computing the lattice width of a parametric polytope}
4430 \label{s:width}
4432 To compute the \ai{lattice width} of a \ai{parametric polytope},
4433 we essentially use the technique of \shortciteN{Eisenbrand2007parameterised},
4434 which improves upon the technique of \shortciteN{Kannan1992}.
4435 Given a parametric polytope
4437 P(\vec p) = \{\, \vec x \mid A \vec x + \vec b(\vec p) \ge \vec 0 \,\}
4440 the width along a direction $\vec c$ is defined in the same
4441 way as for non-parametric polytopes (see \autoref{s:feasibility}),
4442 \begin{equation}
4443 \label{eq:width}
4444 \width_{\vec c} P(\vec p)
4446 \max \{\, \sp c x \mid \vec x \in P(\vec p) \,\}
4448 \min \{\, \sp c x \mid \vec x \in P(\vec p) \,\}
4450 \end{equation}
4451 The \defindex{lattice width} is the minimum width over all
4452 non-zero integer directions:
4454 \width P(\vec p) =
4455 \min_{\vec c \in \ZZ^d \setminus \{ \vec 0 \} } \width_{\vec c} P(\vec p)
4458 We assume that the parameter domain $Q$ of $P(\vec p)$, i.e., the
4459 set of parameter values for which $P(\vec p) \ne \emptyset$,
4460 is full-dimensional and that for each $\vec p$ from the interior
4461 of $Q$, $P(\vec p)$ is also full-dimensional.
4463 Clearly, for any given direction $\vec c$, the minimum and
4464 maximum in \eqref{eq:width} are attained at (different)
4465 vertices of $P(\vec p)$.
4466 The idea of the algorithm is then to consider all pairs
4467 of parametric vertices of $P(\vec p)$, to compute all candidate
4468 integer directions for a given pair of vertices and then to
4469 compute the minimum width over all candidate integer directions
4470 found.
4472 For any given parametric vertex $\vec v(\vec p)$, the (rational)
4473 directions for which this vertex is minimal can be found as follows.
4474 Let $\vec v(\vec p) + C$ be the \ai{vertex cone} of $\vec v(\vec p)$.
4475 If $\vec v(\vec p)$ is minimal for $\vec c$, then all other points
4476 in the vertex cone must yield a bigger or equal value, i.e.,
4477 $\sp y c \ge 0$ for all $\vec y \in C$.
4478 The set of directions is therefore the \ai{polar cone} $C^*$ of $C$.
4479 Note that, in principle, we should only do this for pairs
4480 of vertices that have a common activity domain, where the
4481 activity domains have been partially opened using the
4482 technique of \autoref{p:inclusion-exclusion} to avoid
4483 multiple vertices that coincide on a lower-dimensional
4484 chamber to all be considered on this intersection.
4485 However, this optimization has currently not been implemented.
4487 Given a pair of vertices $\vec v_1(\vec p)$ and $\vec v_2(\vec p)$,
4488 we may assume that $\vec v_1(\vec p)$ attains the minimum and
4489 $\vec v_2(\vec p)$ attains the maximum.
4490 If $\vec v_1(\vec p) + C_1$ and $\vec v_2(\vec p) + C_2$ are the
4491 corresponding vertex cones, then the set of (rational) directions for this
4492 pair of vertices is
4494 C_{1,2} = \left( C_1^* \cap -C_2^* \right) \setminus \{ \vec 0 \}
4497 The set of candidate integer directions are therefore
4498 the vertices of the integer hull of $C_{1,2}$, which
4499 can be computed as explained in \autoref{s:hull:cone}.
4500 To see this, note that by construction
4501 $\sps {\vec c}{\vec v_1(\vec p)} \le \sps {\vec c}{\vec v_2(\vec p)}$
4502 and so
4504 w_{\vec c}(\vec p) = \width_{\vec c} P(\vec p)
4505 = \sps {\vec c}{\vec v_2(\vec p)-\vec v_1(\vec p)} \ge 0
4508 Any integer direction in $C_{1,2}$ will therefore yield
4509 a width that is at least as large as that of one
4510 of the vertices of the integer hull.
4511 Note that when using generalized basis reduction
4512 to compute the integer hull of these cones as in \autoref{s:hull:cone:gbr},
4513 it can be helpful to use as vertices for the initial approximation
4514 not only the extremal rays of the cone, but also those vertices
4515 of previously computed integer hulls that are elements of the current cone.
4517 After computing a list of all possible candidate width directions
4518 $\vec c_i$ and the corresponding widths $w_{\vec c_i}(\vec p)$,
4519 we keep only a single direction of all those that yield
4520 the same width (as an affine function of the parameters).
4521 Then we construct the chambers where each of the widths is minimal,
4522 i.e.,
4524 C_i = \{\, \vec p \in Q \mid \forall j :
4525 w_{\vec c_i}(\vec p) \le w_{\vec c_j}(\vec p) \,\}
4528 Note that many of the $C_i$ may be empty or of lower dimension
4529 than Q and that the other $C_i$ will intersect in common facets.
4530 To obtain a partition of partially-open full-dimensional chambers, we proceed
4531 as in \autoref{s:triangulation}.
4533 \begin{figure}
4534 \intercol=1.1cm
4535 \begin{xy}
4536 <\intercol,0pt>:<0pt,\intercol>::
4537 \def\latticebody{\POS="c"+(0,-0.5)\ar@{--}"c"+(0,7.5)}%
4538 \POS0,{\xylattice{-0}{10}00}%
4539 \def\latticebody{\POS="c"+(-0.5,0)\ar@{--}"c"+(10.5,0)}%
4540 \POS0,{\xylattice00{-0}7}%
4541 \POS@i@={(0,0),(5,3),(9,6),(5,4),(0,0)},{0*[|(2)]\xypolyline{}}
4542 \POS(0,0)*{\bullet}
4543 \POS(5,3)*{\bullet}
4544 \POS(5,4)*{\bullet}
4545 \POS(9,6)*{\bullet}
4546 \POS(3,2)*{\bullet}
4547 \POS(4,3)*{\bullet}
4548 \POS(6,4)*{\bullet}
4549 \POS(7,5)*{\bullet}
4550 \POS(9,6);(8.7,6.4)**{}?(0)/1.1cm/="a"\POS(9,6)\ar"a"
4551 \POS(9,6);(9.1,5.8)**{}?(0)/1.1cm/="a"\POS(9,6)\ar"a"
4552 \POS(5,4);(5.4,3.5)**{}?(0)/1.1cm/="a"\POS(5,4)\ar"a"
4553 \POS(5,4);(5.1,3.8)**{}?(0)/1.1cm/="a"\POS(5,4)\ar"a"
4554 \POS(0,0);(0.4,-0.5)**{}?(0)/1.1cm/="a"\POS(0,0)\ar"a"
4555 \POS(0,0);(-0.3,0.5)**{}?(0)/1.1cm/="a"\POS(0,0)\ar"a"
4556 \POS(5,3);(4.7,3.5)**{}?(0)/1.1cm/="a"\POS(5,3)\ar"a"
4557 \POS(5,3);(4.7,3.4)**{}?(0)/1.1cm/="a"\POS(5,3)\ar"a"
4558 \POS(9,6)*+!DL{\vec v_1}
4559 \POS(0,0)*+!UR{\vec v_3}
4560 \POS(5,3)*+!UL{\vec v_4}
4561 \POS(5,4)*+!DR{\vec v_2}
4562 \end{xy}
4563 \caption{A polytope and its candidate width directions}
4564 \label{f:width}
4565 \end{figure}
4567 \begin{example} \label{ex:width}
4568 Consider the (non-parametric) polytope
4570 P = \left\{\,
4571 \vec x \mid
4572 \begin{aligned}
4573 -3 x_1 +5 x_2 &\ge 0 \\
4574 4 x_1 -5 x_2 &\ge 0 \\
4575 x_1 -2 x_2 + 3 &\ge 0 \\
4576 -3 x_1 +4 x_2 + 3 &\ge 0
4577 \end{aligned}
4578 \,\right\}
4580 shown in \autoref{f:width}. The polytope has four vertices
4582 \begin{aligned}
4583 \vec v_1 & = (9,6) \\
4584 \vec v_2 & = (5,4) \\
4585 \vec v_3 & = (0,0) \\
4586 \vec v_4 & = (5,3)
4588 \end{aligned}
4590 The corresponding cones of directions (for
4591 the given vertex to attain the minimum), also shown
4592 in \autoref{f:width} are
4594 \begin{aligned}
4595 C^*_1 & = \poshull \,\{ (-3,4), (1,-2) \} \\
4596 C^*_2 & = \poshull \,\{ (4,-5), (1,-2) \} \\
4597 C^*_3 & = \poshull \,\{ (4,-5), (-3,5) \} \\
4598 C^*_4 & = \poshull \,\{ (-3,5), (-3,4) \}
4600 \end{aligned}
4603 \begin{figure}
4604 \intercol=0.8cm
4605 \begin{xy}
4606 <\intercol,0pt>:<0pt,\intercol>::
4607 \def\latticebody{\POS="c"+(0,-6.5)\ar@{--}"c"+(0,2.5)}%
4608 \POS0,{\xylattice{-1}{5}00}%
4609 \def\latticebody{\POS="c"+(-1.5,0)\ar@{--}"c"+(5.5,0)}%
4610 \POS0,{\xylattice00{-6}2}%
4611 \POS0\ar@{->}(3,-4)\POS?!{(0,-6.5);(1,-6.5)}="a"
4612 \POS0\ar@{->}(-1,2)
4613 \POS0\ar@{->}(4,-5)\POS?!{(0,-6.5);(1,-6.5)}="b"
4614 \POS0\ar@{->}(1,-2)
4615 \POS@i@={"a",(3,-4),(4,-5),"b"},{0*[grey]\xypolyline{*}}
4616 \POS0,{\ellipse(1.1)(*0;(4,3)*),^,(*0;(-2,-1)*){-}}
4617 \POS0,{\ellipse(1)(*0;(2,1)*),^,(*0;(5,4)*){-}}
4618 \POS0\ar@{->}(3,-4)\POS?!{(0,-6.5);(1,-6.5)}="a"
4619 \POS0\ar@{->}(4,-5)\POS?!{(0,-6.5);(1,-6.5)}="b"
4620 \POS(4,-5)*{\bullet}
4621 \POS(3,-4)*{\bullet}
4622 \end{xy}
4623 \caption{The cone of directions $C_{2,1}$}
4624 \label{f:C:2:1}
4625 \end{figure}
4627 \begin{figure}
4628 \intercol=0.8cm
4629 \begin{xy}
4630 <\intercol,0pt>:<0pt,\intercol>::
4631 \def\latticebody{\POS="c"+(0,-6.5)\ar@{--}"c"+(0,5.5)}%
4632 \POS0,{\xylattice{-3}{5}00}%
4633 \def\latticebody{\POS="c"+(-3.5,0)\ar@{--}"c"+(5.5,0)}%
4634 \POS0,{\xylattice00{-6}5}%
4635 \POS0\ar@{->}(3,-4)
4636 \POS0\ar@{->}(-1,2)\POS?!{(0,5.5);(1,5.5)}="a"
4637 \POS0\ar@{->}(4,-5)\POS?!{(0,-6.5);(1,-6.5)}="b"
4638 \POS0\ar@{->}(-3,5)
4639 \POS@i@={"b",(4,-5),(1,-1),(-1,2),"a",(5.5,5.5),(5.5,-6.5)},{0*[grey]\xypolyline{*}}
4640 \POS0\ar@{->}(-1,2)\POS?!{(0,5.5);(1,5.5)}="a"
4641 \POS0\ar@{->}(4,-5)\POS?!{(0,-6.5);(1,-6.5)}="b"
4642 \POS0,{\ellipse(1.1)(*0;(4,3)*),^,(*0;(-2,-1)*){-}}
4643 \POS0,{\ellipse(1)(*0;(5,4)*),^,(*0;(-5,-3)*){-}}
4644 \POS(1,-1)*{\bullet}
4645 \POS(4,-5)*{\bullet}
4646 \POS(-1,2)*{\bullet}
4647 \end{xy}
4648 \caption{The cone of directions $C_{3,1}$}
4649 \label{f:C:3:1}
4650 \end{figure}
4652 \begin{figure}
4653 \intercol=0.8cm
4654 \begin{xy}
4655 <\intercol,0pt>:<0pt,\intercol>::
4656 \def\latticebody{\POS="c"+(0,-4.5)\ar@{--}"c"+(0,5.5)}%
4657 \POS0,{\xylattice{-3}{3}00}%
4658 \def\latticebody{\POS="c"+(-3.5,0)\ar@{--}"c"+(3.5,0)}%
4659 \POS0,{\xylattice00{-4}5}%
4660 \POS0\ar@{->}(3,-4)
4661 \POS0\ar@{->}(-1,2)
4662 \POS0,{\ellipse(1.1)(*0;(4,3)*),^,(*0;(-2,-1)*){-}}
4663 \POS0\ar@{->}(-3,5)
4664 \POS0\ar@{->}(-3,4)
4665 \POS0,{\ellipse(1)(*0;(-5,-3)*),^,(*0;(-4,-3)*){-}}
4666 \end{xy}
4667 \caption{The cone of directions $C_{4,1}$}
4668 \label{f:C:4:1}
4669 \end{figure}
4671 Let us now consider the directions in which
4672 $\vec v_2$ is minimal while $\vec v_1$ is maximal.
4673 We find
4675 C_{2,1} = \poshull \,\{ (4,-5), (3,-4) \} \setminus \{ \vec 0 \}
4678 as shown in \autoref{f:C:2:1}.
4679 The vertices of the integer hull of $C_{2,1}$ are $(4,-5)$
4680 and $(3,-4)$.
4681 The corresponding widths are
4683 \begin{aligned}
4684 \vec c_1 &= (4,-5) & w_{\vec c_1} &= 6 \\
4685 \vec c_2 &= (3,-4) & w_{\vec c_2} &= 4
4687 \end{aligned}
4689 We similarly find
4691 C_{3,1} = \poshull \,\{ (4,-5), (-1,2) \} \setminus \{ \vec 0 \}
4694 with integer hull
4695 $\poshull \,\{ (4,-5), (-1,2), (1,-1) \}$, shown
4696 in \autoref{f:C:3:1}, yielding
4698 \begin{aligned}
4699 \vec c_3 &= (4,-5) & w_{\vec c_3} &= 6 \\
4700 \vec c_4 &= (-1,2) & w_{\vec c_4} &= 3 \\
4701 \vec c_5 &= (1,-1) & w_{\vec c_5} &= 3
4703 \end{aligned}
4705 On the other hand,
4707 C_{4,1} = \emptyset
4710 as shown in \autoref{f:C:4:1} and so this combination
4711 does not yield any width direction candidates.
4712 The other pairs of vertices further yield
4714 \begin{aligned}
4715 \vec c_6 &= (-1,2) & w_{\vec c_6} &= 3 \\
4716 \vec c_7 &= (-3,5) & w_{\vec c_7} &= 5 \\
4717 \vec c_8 &= (-3,4) & w_{\vec c_8} &= 4 \\
4718 \vec c_9 &= (-3,5) & w_{\vec c_9} &= 5 \\
4719 \vec c_{10} &= (-2,3) & w_{\vec c_{10}} &= 3
4721 \end{aligned}
4723 Since the polytope under consideration is not parametric,
4724 there is only one (non-empty, $0$-dimensional) chamber and
4725 it corresponds to one of the directions, say $\vec c_4 = (-1,2)$,
4726 with width $3$ (the other directions with the same width
4727 having been removed).
4729 \begin{figure}
4730 \intercol=1.1cm
4731 \begin{xy}
4732 <\intercol,0pt>:<0pt,\intercol>::
4733 \def\latticebody{\POS="c"+(0,-0.5)\ar@{--}"c"+(0,7.5)}%
4734 \POS0,{\xylattice{-0}{10}00}%
4735 \def\latticebody{\POS="c"+(-0.5,0)\ar@{--}"c"+(10.5,0)}%
4736 \POS0,{\xylattice00{-0}7}%
4737 \POS@i@={(0,0),(5,3),(9,6),(5,4),(0,0)},{0*[|(2)]\xypolyline{}}
4738 \POS(-0.5,-0.5)\ar@{.}(7.5,7.5)
4739 \POS(0.5,-0.5)\ar@{.}(8.5,7.5)
4740 \POS(1.5,-0.5)\ar@{.}(9.5,7.5)
4741 \POS(2.5,-0.5)\ar@{.}(10.5,7.5)
4742 \POS(-0.5,-0.25)\ar@{-}(10.5,5.25)
4743 \POS(-0.5,0.25)\ar@{-}(10.5,5.75)
4744 \POS(-0.5,0.75)\ar@{-}(10.5,6.25)
4745 \POS(-0.5,1.25)\ar@{-}(10.5,6.75)
4746 \POS(-0.25,-0.5)\ar@{--}(10.5,6.666)
4747 \POS(-0.5,-0.333)\ar@{--}(10.5,7)
4748 \POS(-0.5,0)\ar@{--}(10.5,7.333)
4749 \POS(-0.5,0.333)\ar@{--}(10.25,7.5)
4750 \POS(0,0)*{\bullet}
4751 \POS(5,3)*{\bullet}
4752 \POS(5,4)*{\bullet}
4753 \POS(9,6)*{\bullet}
4754 \POS(3,2)*{\bullet}
4755 \POS(4,3)*{\bullet}
4756 \POS(6,4)*{\bullet}
4757 \POS(7,5)*{\bullet}
4758 \end{xy}
4759 \caption{A polytope and its lattice width directions}
4760 \label{f:width:2}
4761 \end{figure}
4763 Each of the three directions that yield the minimal
4764 width of 3 is shown in \autoref{f:width:2}.
4765 \end{example}
4767 \begin{example} \label{ex:width:2}
4768 Consider the polytope
4770 P(p) = \left\{\,
4771 \vec x \mid
4772 \begin{aligned}
4773 -2 x_1 + p + 5 &\ge 0 \\
4774 2 x_1 + p + 5 &\ge 0 \\
4775 -2 x_2 - p + 5 &\ge 0 \\
4776 2 x_2 - p + 5 &\ge 0
4777 \end{aligned}
4778 \,\right\}
4780 from \shortciteN[Example~2.1.7]{Woods2004PhD}.
4781 The parametric vertices are
4783 \begin{aligned}
4784 \vec v_1(p) & = \left(\frac{p+5}2, \frac{-p+5}2\right) \\
4785 \vec v_2(p) & = \left(\frac{p+5}2, \frac{p-5}2\right) \\
4786 \vec v_3(p) & = \left(\frac{-p-5}2, \frac{-p+5}2\right) \\
4787 \vec v_4(p) & = \left(\frac{-p-5}2, \frac{p-5}2\right)
4789 \end{aligned}
4791 We find two essentially different candidate width directions
4793 \begin{aligned}
4794 \vec c_1 &= (0,1) & w_{\vec c_1}(p) &= 5-p \\
4795 \vec c_2 &= (1,0) & w_{\vec c_2}(p) &= 5+p
4797 \end{aligned}
4799 The first direction can be found by combining, say,
4800 $\vec v_1(p)$ and $\vec v_2(p)$, while the second direction can be
4801 found by combining, say, $\vec v_1(p)$ and $\vec v_3(p)$.
4802 The parameter domain for the parametric polytope $P(p)$ is
4804 Q = \{\, p \mid -5 \le p \le 5 \,\}
4807 The two (closed) chambers are therefore
4809 \begin{aligned}
4810 C_1 &= \{\, p \in Q \mid 5 - p \le 5+p \,\} \\
4811 C_2 &= \{\, p \in Q \mid 5 + p \le 5-p \,\}
4813 \end{aligned}
4815 To obtain a partition, \autoref{s:interior} gives
4816 the internal point $(0,0)$, which happens to meet
4817 the facets $p \ge 0$ and $-p \ge 0$. We therefore
4818 keep the facet with positive (inner) normal closed
4819 and open up the other facet. The result is
4821 \begin{aligned}
4822 \hat C_1 &= \{\, p \mid 0 \le p \le 5 \,\} \\
4823 \hat C_2 &= \{\, p \mid -5 \le p < 0 \,\}
4825 \end{aligned}
4827 Since we are usually only interested in integer parameter
4828 values, the latter chamber would become
4829 $\hat C_2 = \{\, p \mid -5 \le p \le -1 \,\}$.
4830 \end{example}
4832 Our description differs slightly from that of
4833 of \shortciteN{Eisenbrand2007parameterised}.
4834 First, they consider all pairs of basic solutions instead
4835 of all pairs of vertices, which means that they may
4836 consider basic solutions that are never feasible and that,
4837 in case of a non-simple polytope,
4838 they may consider the same parametric vertex more than once.
4839 The set of integer
4840 directions for a pair of vertices is the intersection of
4841 the sets of integer directions they obtain for each of
4842 the corresponding basic solutions.
4843 Second, they use a different method of creating a partition
4844 of partially-open chambers, which may lead to some lower-dimensional
4845 chambers surviving and hence to a larger total number of chambers.
4848 \subsection{Testing whether a set has an infinite number of points}
4849 \label{s:infinite}
4851 In some situation we are given the generating function of
4852 some integer set and we would like to know if the set is
4853 infinite or not. Typically, we want to know if the set
4854 is empty or not, but we cannot simply count the number of elements
4855 in the standard way since we may not have any guarantee that
4856 the set has only a finite number of elements.
4857 We will consider the slightly more general case where we are
4858 given a rational generating function $f(\vec x)$ of the form~\eqref{eq:rgf}
4859 such that
4860 \begin{equation}
4861 \label{eq:rgf:psp}
4862 f(\vec x) = \sum_{\vec s \in Q \cap \ZZ^d} c(\vec s)\, \vec x^{\vec s}
4863 \end{equation}
4864 converges on some nonempty open subset of $\CC^d$, $Q$ is a pointed
4865 polyhedron and $c(\vec s) \ge 0$,
4866 and we want to compute
4867 \begin{equation}
4868 \label{eq:psp:sum}
4869 S = \sum_{\vec s \in Q \cap \ZZ^d} c(\vec s)
4871 \end{equation}
4872 where the sum may diverge, i.e., ``$S = \infty$''.
4873 The following proposition shows that we can determine $S$
4874 in polynomial time.
4875 For a sketch of an alternative technique, see
4876 \shortciteN[Proof of Lemma~16]{Woods2005period}.
4878 \begin{proposition}
4879 Fix $d$ and $k$.
4880 Given a \rgf/ of the form~\eqref{eq:rgf} with $k_i \le k$
4881 and a pointed polyhedron $Q \subset \QQ^d$, then there is a
4882 polynomial time algorithm that determines for the corresponding
4883 function $c(\vec s)$~\eqref{eq:rgf:psp} whether the sum~\eqref{eq:psp:sum}
4884 diverges and computes the value of $S$~\eqref{eq:psp:sum} if it does not.
4885 \end{proposition}
4886 \begin{proof}
4887 Since $Q$ is pointed, the series~\eqref{eq:rgf:psp} converges on a neighborhood
4888 of $e^{\vec \ell} = (e^{\ell_1}, \ldots, e^{\ell_d})$ for any $\vec \ell$
4889 such that $\sps {\vec r_k} {\vec \ell} < 0$ for
4890 any (extremal) ray $\vec r_k$ of $Q$ and
4891 such that $\sps {\vec b_{i j}} {\vec \ell} \ne 0$ for any
4892 $\vec b_{i j}$ in~\eqref{eq:rgf}.
4893 Let $\vec \alpha = - \vec \ell$ and perform the substitution
4894 $\vec x = t^{\vec \alpha}$. The function $g(t) = f(t^{\vec \alpha})$
4895 is then also a (short) \rgf/ and
4897 g(t) = \sum_{k \in \sps {\vec\alpha} Q \cap \ZZ}
4898 \left(
4899 \sum_{\shortstack{$\scriptstyle \vec s \in Q \cap \ZZ^d$\\
4900 $\scriptstyle \sp \alpha s = k$}} c(\vec s)
4901 \right) t^k
4902 =: \sum_{k \in \sps {\vec\alpha} Q \cap \ZZ} d(k) \, t^k
4905 with $\sps {\vec\alpha} Q = \{ \sp \alpha x \mid \vec x \in Q \}$,
4906 converges in a neighborhood of $e^{-1}$, while
4908 S = \sum_{k \in \sps {\vec\alpha} Q \cap \ZZ} d(k)
4911 Since $c(\vec s) \ge 0$, we have $d(k) \ge 0$
4912 and the above sum diverges iff any of the coefficients of the
4913 negative powers of $t$ in the Laurent expansion of $g(t)$ is non-zero.
4914 If the sum converges, then the sum is simply the coefficient
4915 of the constant term in this expansion.
4917 It only remains to show now that we can compute a suitable $\vec \alpha$
4918 in polynomial time, i.e., an $\vec \alpha$ such that
4919 $\sps {\vec r_k} {\vec \alpha} > 0$ for any (extremal) ray $\vec r_k$ of $Q$ and
4920 $\sps {\vec b_{i j}} {\vec \alpha} \ne 0$ for any
4921 $\vec b_{i j}$ in~\eqref{eq:rgf}.
4922 By adding the $\vec r_k$ to the list of $\vec b_{i j}$ if needed, we can relax
4923 the first set of constraints to $\sps {\vec r_k} {\vec \alpha} \ge 0$.
4924 Let $Q$ be described by the constraints $A \vec x + \vec c \ge \vec 0$
4925 and let $B$ be $d \times d$ non-singular submatrix of $A$, obtained
4926 by removing some of the rows of $A$. Such a $B$ exists since
4927 $Q$ does not contain any straight line.
4928 Clearly, $B \vec r \ge \vec 0$ for any ray $\vec r$ of $Q$.
4929 Let $\vec b'_{i j} = B \vec b_{i j}$, then since $\vec b_{i j} \ne \vec 0$
4930 and B is non-singular, we have $\vec b'_{i j} \ne \vec 0$.
4931 We may therefore find in polynomial time a point $\vec \alpha' \ge \vec 0$
4932 on the ``\ai{moment curve}'' such that
4933 $\sps {\vec b'_{i j}} {\vec \alpha'} \ne 0$
4934 \shortcite[Algorithm~5.2]{Barvinok1999}.
4935 Let $\vec \alpha = B^\T \vec \alpha'$.
4936 Then
4938 \sps {\vec b_{i j}} {\vec \alpha}
4940 \sps {\vec b_{i j}} {B^\T \vec \alpha'}
4942 \sps {B \vec b_{i j}} {\vec \alpha'}
4944 \sps {\vec b'_{i j}} {\vec \alpha'}
4945 \ne 0
4949 \sps {\vec r_k} {\vec \alpha}
4951 \sps {\vec r_k} {B^\T \vec \alpha'}
4953 \sps {B \vec r_k} {\vec \alpha'}
4954 \ge 0
4957 as required.
4958 Note that in practice, we would, as usual, first try a
4959 fixed number of random vectors $\vec \alpha' \ge \vec 0$
4960 before resorting to looking for a point on the moment curve.
4961 \end{proof}
4964 \subsection{Enumerating integer projections of parametric polytopes}
4965 \label{s:projection}
4967 In this section we are interested in computing
4968 \begin{equation}
4969 \label{eq:count:projection}
4970 c(\vec s)=\#\left\{\vec t\in\ZZ^{d} \mid \exists \vec u\in\ZZ^{m}:
4971 (\vec s,\vec t,\vec u)\in P\right\}
4973 \end{equation}
4974 with $P \subset \QQ^{n}\times\QQ^{d}\times\QQ^{m}$ a rational
4975 pointed polyhedron such that
4977 P_{\vec s}=\left\{(\vec t,\vec u)\in\QQ^d\times\QQ^m
4978 \mid (\vec s,\vec t,\vec u)\in P\right\}
4980 is a polytope for any $\vec s$.
4981 This is equivalent to computing the number of points
4982 in the \ai{integer projection} of a parametric polytope
4984 c(\vec s)=\#\big(\pi(P_{\vec s}\cap\ZZ^{d+m})\big)
4987 with $\pi:\QQ^d\times\QQ^m\rightarrow\QQ^d$ defined by
4988 $\pi(\vec t, \vec u)=\vec t$.
4989 Exponential methods for computing $c(\vec s)$ are
4990 described by \shortciteN{Verdoolaege2005experiences}
4991 and \shortciteN{Seghir2006memory}.
4992 Here, we provide some implementation details for the polynomial
4993 method of \shortciteN[Theorem~1.7]{Woods2003short}, for
4994 computing the generating function, $\sum_{\vec s}c(\vec s) \, \vec x^{\vec s}$,
4995 which can then be converted into an explicit function $c(\vec s)$
4996 \shortcite[Corollary~1.11]{Verdoolaege2008counting}.
4997 Note that in contrast to \shortciteN[Theorem~1.7]{Woods2003short},
4998 we may allow $P$ to be an unbounded (but still pointed) polyhedron here
4999 (as long as $P_{\vec s}$ is bounded), since
5000 we replace their application of
5001 \shortciteN[Lemma~3.1]{Kannan1992}
5002 by \shortciteN[Theorem~5]{Eisenbrand2007parameterised}.
5004 If there is only one existentially quantified variable ($m = 1$),
5005 then computing~\eqref{eq:count:projection} is easy.
5006 You simply shift $P$ by $1$ in the $u$ direction and subtract
5007 this shifted copy from the original,
5009 D = P \setminus (\vec e_{n+d+1} + P)
5012 (See, e.g., \shortciteN[Figure~1, page~973]{Woods2003short}
5013 or \shortciteN[Figure~4.33, page~186]{Verdoolaege2005PhD}.)
5014 In the difference $D$ there will be {\em exactly} one value of $u$
5015 for each value of the remaining variables for which there was
5016 {\em at least} one value of $u$ in $P$,
5018 \forall (\vec s, \vec t):
5019 \quad
5020 \left(
5021 \exists u: (\vec s, \vec t, u) \in P
5022 \right)
5023 \iff
5024 \left(
5025 \exists! u: (\vec s, \vec t, u) \in D
5026 \right)
5029 The function $c(\vec s)$ can then be computed by counting
5030 the number of elements in $D(\vec s)$.
5031 These operations can be performed either in the space
5032 of (unions of) parametric polytopes or on generating functions.
5033 In the first case, $D(\vec s)$ can be written as a disjoint union
5034 of parametric polytopes that can be enumerated separately.
5035 In the second case, we first compute the generating function
5036 $f(\vec x, \vec y)$ of the set
5040 (\vec s, \vec t) \mid \exists u \in \ZZ : (\vec s, \vec t, u) \in P
5043 and then obtain the generating function $C(\vec x)$ of $c(\vec s)$
5044 as $C(\vec x) = f(\vec x, \vec 1)$.
5045 In the remainder of this section, we will concentrate on the
5046 computation of the generating function of $S$.
5047 To compute this generating function in the current case where
5048 there is only one existentially quantified variable, we first
5049 compute the generating function $g(\vec x, \vec y, z)$ of
5050 $P(\vec s, \vec t, u)$, perform operations on the generating function
5051 equivalent to the set operations (see, e.g.,
5052 \shortciteN[Section~4.5.3]{Verdoolaege2005PhD}), resulting
5053 in a generating function $g'(\vec x, \vec y, z)$, and then sum
5054 over all values (at most one for each value of $\vec s$
5055 and $\vec t$) of $u$, i.e., $f(\vec x, \vec y) = g'(\vec c, \vec y, 1)$.
5057 \begin{figure}
5058 \intercol=1.05cm
5059 \begin{xy}
5060 <\intercol,0pt>:<0pt,\intercol>::
5061 \def\latticebody{\POS="c"+(0,-0.5)\ar@{--}"c"+(0,7.5)}%
5062 \POS0,{\xylattice{-0}{10}00}%
5063 \def\latticebody{\POS="c"+(-0.5,0)\ar@{--}"c"+(10.5,0)}%
5064 \POS0,{\xylattice00{-0}7}%
5065 \POS@i@={(0,0),(5,3),(9,6),(5,4),(0,0)},{0*\xypolyline{}}
5066 \POS(0,0)*[*0.333]\xybox{
5067 \POS@i@={(0,0),(5,3),(9,6),(5,4),(0,0)},{0*\xypolyline{--}}
5069 \POS(0,0)*{\bullet}
5070 \POS(5,3)*{\bullet}
5071 \POS(5,4)*{\bullet}
5072 \POS(9,6)*{\bullet}
5073 \POS(3,2)*{\bullet}
5074 \POS(4,3)*{\bullet}
5075 \POS(6,4)*{\bullet}
5076 \POS(7,5)*{\bullet}
5077 \POS(-1,-0.5)\ar@{-}(-1,7.5)
5078 \POS(-1,0)*{\bullet}
5079 \POS(-1,3)*{\bullet}
5080 \POS(-1,4)*{\bullet}
5081 \POS(-1,6)*{\bullet}
5082 \POS(-1,2)*{\bullet}
5083 \POS(-1,3)*{\bullet}
5084 \POS(-1,4)*{\bullet}
5085 \POS(-1,5)*{\bullet}
5086 \POS(-0.5,-1)\ar@{-}(10.5,-1)
5087 \POS(0,-1)*+++!UR{S}
5088 \POS(0,-1)*{\bullet}
5089 \POS(5,-1)*{\bullet}
5090 \POS(5,-1)*{\bullet}
5091 \POS(9,-1)*{\bullet}
5092 \POS(3,-1)*{\bullet}
5093 \POS(4,-1)*{\bullet}
5094 \POS(6,-1)*{\bullet}
5095 \POS(7,-1)*{\bullet}
5096 \end{xy}
5097 \caption{A polytope and its integer projections}
5098 \label{f:projection}
5099 \end{figure}
5101 If there is more than one existentially quantified variable ($m > 1$),
5102 then we can in principle apply the above shifting and subtracting
5103 technique recursively to obtain a generating function
5104 $f(\vec x, \vec y)$ for the set
5105 \begin{equation}
5106 \label{eq:projection:T}
5109 (\vec s, \vec t) \mid \exists \vec u \in \ZZ^m : (\vec s, \vec t, \vec u) \in P
5111 \end{equation}
5112 and then compute $C(\vec x) = f(\vec x, \vec 1)$.
5113 There are however some complications.
5114 Most notably, after applying the technique in one direction
5115 and projecting out the corresponding variable, the resulting set, i.e.,
5119 (\vec s, \vec t, u_1, \ldots, u_{m-1}) \mid
5120 \exists u_m \in \ZZ : (\vec s, \vec t, \vec u) \in P
5124 in general does not correspond to the integer points in some polytope.
5125 For example, assume that the polytope in \autoref{f:projection}
5126 contains the values of $\vec u$ associated to a particular
5127 value of $(\vec s, \vec t)$. Since there are integer points
5128 in this polytope, we should count this value of $\vec t$, but only once.
5129 If we apply the above technique in the vertical direction ($u_2$), then
5130 we can compute (a generating function for) the set $S$ shown
5131 on the bottom of the figure.
5132 Note, however, that there are ``gaps'' in this set, i.e.,
5133 if we compute $S \setminus (\vec e_{n+d+1} + S)$ then we will not
5134 end up with a single point (for this value of $(\vec s, \vec t)$).
5135 Since the biggest gap is three wide, we need
5136 to compute
5139 \setminus (\vec e_{n+d+1} + S)
5140 \setminus (2 \vec e_{n+d+1} + S)
5141 \setminus (3 \vec e_{n+d+1} + S)
5143 to obtain a single point.
5144 If we do the subtraction in the horizontal direction first,
5145 then we end up with a set (shown on the left) with gaps
5146 at most two wide, so afterwards we only need to subtract twice in the
5147 vertical direction.
5149 \begin{figure}
5150 \intercol=0.8cm
5151 \begin{xy}
5152 <\intercol,0pt>:<0pt,\intercol>::
5153 \def\latticebody{\POS="c"+(0,-0.5)\ar@{--}"c"+(0,7.5)}%
5154 \POS0,{\xylattice{-0}{4}00}%
5155 \def\latticebody{\POS="c"+(-0.5,0)\ar@{--}"c"+(4.5,0)}%
5156 \POS0,{\xylattice00{-0}7}%
5157 \POS@i@={(0,0),(1,3),(3,6),(3,4),(0,0)},{0*\xypolyline{}}
5158 \POS(0,0)*{\bullet}
5159 \POS(1,3)*{\bullet}
5160 \POS(3,4)*{\bullet}
5161 \POS(3,6)*{\bullet}
5162 \POS(1,2)*{\bullet}
5163 \POS(2,3)*{\bullet}
5164 \POS(2,4)*{\bullet}
5165 \POS(3,5)*{\bullet}
5166 \POS(-0.5,-1)\ar@{-}(4.5,-1)
5167 \POS(0,-1)*+++!UR{S}
5168 \POS(0,-1)*{\bullet}
5169 \POS(1,-1)*{\bullet}
5170 \POS(2,-1)*{\bullet}
5171 \POS(3,-1)*{\bullet}
5172 \end{xy}
5173 \caption{A transformed polytope and its integer projection}
5174 \label{f:projection:2}
5175 \end{figure}
5177 In general, there is no bound on the widths of the gaps we may
5178 encounter in any given direction. However, there are directions
5179 in which the gaps are known to be ``small''.
5180 In particular, if the dimension $m$ is fixed, then the lattice width
5181 (see \autoref{s:width}) of lattice point free polytopes
5182 is bounded by a constant $\omega(m)$%
5183 ~\shortcite{Lagarias90,Barvinok02,Banaszczyk1999flatness}.
5184 This means that in the direction of the lattice width of a polytope,
5185 the gaps will be not be larger than $\omega(m)$
5186 \shortcite[Theorem~4.3]{Woods2003short}.
5187 Otherwise, we would be able to put a (uniformly) scaled down version
5188 of the polytope in the gap and it would contain no lattice points,
5189 which would contradict the fact that its lattice width is bounded
5190 by $\omega(m)$.
5191 \autoref{f:projection} contains such a scaled down copy
5192 of the original polytope. However, neither the horizontal
5193 nor the vertical direction is a lattice width direction
5194 of this polytope. The actual lattice width of this
5195 polytope was computed in Example~\ref{ex:width} as $3$
5196 with corresponding direction $\vec c = (-1,2)$.
5197 \autoref{f:projection:2} shows the result of applying
5198 the unimodular transformation
5200 \begin{bmatrix}
5201 -1 & 2 \\
5202 0 & 1
5203 \end{bmatrix}
5205 to the polytope. Note that the horizontal direction
5206 now has gaps of width at most 1. After shifting, subtracting
5207 and projecting in the vertical direction, we therefore
5208 end up with a set $S$ with gaps of width 1 and we then
5209 only have to shift and subtract once in the remaining
5210 (horizontal) direction.
5212 In fact, for two-dimensional polytopes the gaps in the lattice
5213 width direction will always be one, as shown by the following lemma.
5214 \begin{lemma}
5215 \label{l:gap}
5216 For any rational polygon, the gaps in a lattice
5217 width direction are of width at most 1.
5218 \end{lemma}
5219 \begin{proof}
5220 We may assume that $x$ is the given lattice width direction of
5221 a given polygon $P$.
5222 If there is a gap of width 2, then there is an integer value $x_1$ of $x$
5223 such that
5224 $P \cap \{\, (x_1, y) \,\} \ne \emptyset$,
5225 $P \cap \{\, (x_1+2, y) \,\} \ne \emptyset$,
5226 while
5227 $P \cap \{\, (x_1+1, y) \,\} \cap \ZZ^2 = \emptyset$.
5228 Using \shortciteN[Lemma~4.2]{Woods2003short}, we can put
5229 a scaled down copy $P'$ of $P$ between $x=x_1$ and $x=x_1+2$
5230 (and inside of $P$).
5231 $P'$ meets the line $x=x_1+1$ between two consecutive integer
5232 points, $y_1$ and $y_1+1$. Let $P''$ be the polygon bounded by $x=x_1$ and
5233 $x=x_1+2$ and two lines that separate $P'$ from these two
5234 integer points.
5235 $P''$ will have the same width (2) in the
5236 $x$ direction, while $P' \subset P''$.
5237 The $x$ direction is therefore also a lattice width direction of $P''$.
5238 $P''$ cannot intersect both $x=x_1$ and $x=x_1+2$ in a segment of
5239 length greater than or equal to $1$.
5240 Otherwise, it would also intersect $x=x_1+1$ in a segment of length
5241 greater than or equal to $1$.
5243 We may therefore assume that the length of the intersection
5244 of $P''$ with $x=x_1$ is smaller than $1$.
5245 If this line segment contains an integer point, then call it $y_2$.
5246 Otherwise, let $y_2$ be the greatest integer smaller than the
5247 points in the line segment.
5248 We may assume that $y_1 = y_2$.
5249 Otherwise, we can apply the unimodular transformation
5251 \begin{bmatrix}
5252 x \\
5254 \end{bmatrix}
5256 \begin{bmatrix}
5257 1 & 0 \\
5258 y_1 - y_2 & 1
5259 \end{bmatrix}
5260 \begin{bmatrix}
5261 x \\
5263 \end{bmatrix}
5266 without changing the width in direction $x$.
5267 If $P''$ contains $(x_1, y_1)$, it intersects $x=x_1$
5268 in a segment $[y_1-\alpha_1, y_1+\alpha_2]$.
5269 We may then similarly assume that $\alpha_2 \ge \alpha_1$.
5270 $P''$ will only cut $x=x_1+2$ in points with $y$-coordinate
5271 smaller than $2-\alpha_2$. The width in the $y$ direction
5272 will therefore be smaller than $2-\alpha_2+\alpha_1 \le 2$,
5273 contradicting that $x$ is a lattice width direction.
5274 If $P''$ does not contain $(x_1, y_1)$, then it only
5275 intersects $x=x_1$ in points with $y$-coordinate $y_1+\alpha$
5276 with $0 < \alpha < 1$. Given any such point, it is clear
5277 that $P''$ intersects $x=x_1+2$ only in points with $y$-coordinate
5278 strictly between $y_1-\alpha$ and $y_1+1-\alpha$, again
5279 showing that the width in the $y$ direction is smaller than $2$ and
5280 leading to the same contradiction.
5281 The contradiction shows that there can be no gaps
5282 of width 2 in the lattice width direction of $P$.
5283 \end{proof}
5284 Note that the $\omega(2)$ bound is too coarse to reach
5285 the above conclusion as $\omega(2) > 2$.
5286 An example of a polygon with lattice with greater than $2$ is the polygon
5287 with vertices $(-17/110,83/110)$, $(2/10,-9/10)$ and $(177/90, 100/90)$,
5288 shown in \autoref{f:empty:width:2}, which has width $221/110$.
5290 \begin{figure}
5291 \intercol=3cm
5292 \begin{xy}
5293 <\intercol,0pt>:<0pt,\intercol>::
5294 \def\latticebody{\POS="c"+(0,-1.5)\ar@{--}"c"+(0,1.5)}%
5295 \POS0,{\xylattice{-1}{2}00}%
5296 \def\latticebody{\POS="c"+(-1.5,0)\ar@{--}"c"+(2.5,0)}%
5297 \POS0,{\xylattice00{-1}1}%
5298 \POS@i@={(-0.1545,0.7545),(0.2,-0.9),(1.966,1.111),(-0.1545,0.74545)},{0*\xypolyline{}}
5299 \end{xy}
5300 \caption{Lattice point free polygon with lattice width 2}
5301 \label{f:empty:width:2}
5302 \end{figure}
5304 The idea of the projection algorithm
5305 is now to first find a direction in which the gaps
5306 are expected to be small and to unimodularly transform
5307 the existentially quantified variables such that this direction
5308 lies in the direction of one of the transformed variables.
5309 Then, the remaining existentially quantified variables are
5310 projected out by applying the technique recursively.
5311 The resulting generating function will have gaps at most
5312 $\omega(m)$ wide and so we have to subtract at most
5313 $\omega(m)$ shifted copies of this generating function
5314 before we can plug in 1 to project out the selected
5315 (and now only remaining) existentially quantified variable.
5316 We now look at each of these step in a bit more detail.
5318 We are given a polyhedron $P$ such that $P_{\vec s}$ is a polytope
5319 and we want to compute a generating function $f(\vec x, \vec y)$
5320 for the set $T$ in~\eqref{eq:projection:T}.
5321 We first compute the lattice width directions of
5322 the $m$-dimensional parametric polytope $P_{\vec s, \vec t}$
5323 as in \autoref{s:width}.
5324 The result is a partition of the parameter domain, i.e.,
5325 the projection of $P$ onto the first $n+d$ coordinates,
5326 into partially open polyhedra $Q_i$, together with
5327 the lattice width direction $\vec c_i$ corresponding to each $Q_i$.
5328 Since the generating functions only encode integer points,
5329 we can replace each open facet $\sp a x + b > 0$ by the closed
5330 facet $\sp a x + b - 1 \ge 0$ to obtain a collection of closed
5331 polyhedra $\tilde Q_i$. Now let
5333 P_i = P \cap \tilde Q_i \times \QQ^m
5335 and let $f_i(\vec x, \vec y)$ be the generating function of the set
5337 T_i =
5339 (\vec s, \vec t) \mid
5340 \exists \vec u \in \ZZ^m : (\vec s, \vec t, \vec u) \in P_i
5344 Then clearly,
5346 f(\vec x, \vec y) = \sum_i f_i(\vec x, \vec y)
5349 From now on, we will consider a particular $P_i$ with corresponding
5350 lattice width $\vec c_i$ and drop the $i$ subscript.
5352 We are now given a polyhedron $P$ such that the lattice width
5353 direction of $P_{\vec s, \vec t}$ is $\vec c$.
5354 We first extend $\vec c$ to an $m \times m$ unimodular matrix $U$
5355 using the technique of \autoref{s:completion},
5359 \begin{bmatrix}
5360 \vec c^\T
5363 \end{bmatrix}
5365 and then compute
5367 P' =
5368 \begin{bmatrix}
5369 I_n & 0 & 0 \\
5370 0 & I_d & 0 \\
5371 0 & 0 & U
5372 \end{bmatrix}
5376 We have
5380 (\vec s, \vec t) \mid
5381 \exists \vec u' \in \ZZ^m : (\vec s, \vec t, \vec u') \in P'
5385 i.e., we may have changed the values of the existentially
5386 quantified variables, but we have not changed the set $T$.
5387 Now consider the set
5389 T' =
5391 (\vec s, \vec t, u_1') \mid
5392 \exists (u_2',\ldots,u_m') \in \ZZ^{m-1} :
5393 (\vec s, \vec t, \vec u') \in P'
5397 This set has only $m-1$ existentially quantified variables, so
5398 we may apply this projection algorithm recursively and obtain
5399 the generating function $f'(\vec x, \vec y, z)$ for $T'$.
5400 The set $T'$ may no longer correspond to the integer points
5401 in a polytope, but, by construction, the gaps in the final
5402 coordinate are small ($\le \omega(m)$).
5404 By now we have a generating function $f'(\vec x, \vec y, z)$
5405 for the set $T'$ (with small
5406 gaps in the final coordinate) and we have to compute the
5407 generating function $f(\vec x, \vec y)$ for $T$.
5408 By computing
5409 \begin{equation}
5410 \label{eq:projection:omega}
5411 f''(\vec x, \vec y, z) =
5412 f'(\vec x, \vec y, z) \bigoplus_{k=1}^{\floor{\omega(m)}}
5413 \left( z^k f'(\vec x, \vec y, z) \right)
5415 \end{equation}
5416 where $\oplus$ represents the operation on generating functions
5417 that corresponds to set difference on the corresponding sets,
5418 we obtain a generating for the set $T''$ where only
5419 the smallest value of $u_1'$ is retained.
5420 The total number of $u_1'$s associated to any $(\vec s, \vec t)$
5421 is therefore either zero or one and so the ``multiset'' defined
5422 by taking as many copies of $(\vec s, \vec t)$ as there are
5423 associated values of $u_1'$ is actually the set $T$.
5424 That is
5426 f(\vec x, \vec y) = f''(\vec x, \vec y, 1)
5430 The only remaining problem is that the ``$\oplus$'' operation
5431 in~\eqref{eq:projection:omega} is fairly expensive.
5432 In particular, this operation is performed by first
5433 computing the \ai{Hadamard product} of the two generating functions
5434 (which corresponds to the intersection of the sets) and
5435 then subtracting the resulting generating function from this
5436 first generating function.
5437 The last operation is fairly cheap, but the Hadamard product
5438 has a time complexity which while polynomial if the dimension (in
5439 this case the maximum of $k_i$ in~\eqref{eq:rgf}) is fixed,
5440 is exponential in this dimension.
5441 Furthermore, this dimension increases by $\max k_i - d$ on each
5442 successive application of the Hadamard product, while $\max k_i > d$
5443 as soon as some projection is performed, which certainly happens in the
5444 recursive application of the algorithm.
5445 Now, the total number of Hadamard products is bounded by a constant
5446 $\floor{\omega(m)}$ and so the increase in dimension is also bounded
5447 by a constant, so the whole operation is still polynomial for
5448 fixed dimension.
5449 Nevertheless, we do not want to perform any additional Hadamard
5450 products if we do not really have to.
5451 That is, we would like to be able to detect when we can stop
5452 performing these operations {\em before} reaching the upper
5453 bound $\floor{\omega(m)}$.
5455 Let $f'_0(\vec x, \vec y, z) = f'(\vec x, \vec y, z)$ and
5456 let $f'_k(\vec x, \vec y, z)$ be the result of applying
5457 the ``set difference'' in~\eqref{eq:projection:omega} $k$ times.
5458 Denote the corresponding sets by $T'_0$ and $T'_k$.
5459 We want to find the smallest $k$ such that
5460 $f''(\vec x, \vec y, z) = f'_k(\vec x, \vec y, z)$.
5461 Note that we are talking about equality of rational functions here.
5462 Any further application of the set difference operation will
5463 not change this rational function, but it {\em will\/} typically
5464 produce a different (more complex) representation.
5465 To check whether the current $k$ is sufficient, we are going to
5466 count how many times any element of $T'_k$ still appears in a
5467 shifted copy of $T'_0$, with shift greater than or equal to $k+1$.
5468 If this number is zero, any further set difference will have no effect.
5469 That is, we want to compute
5471 \sum_{l=k+1}^\infty
5472 \left|
5473 T'_l \cap \left(\vec e_{n+d+1} + T' \right)
5474 \right|
5477 or, in terms of generating functions,
5479 h(\vec x, \vec y, z) = \sum_{l=k+1}^\infty
5480 f_k'(\vec x, \vec y, z) \star z^l \, f'(\vec x, \vec y, z)
5483 We should point out here that while the Hadamard product ($\star$)
5484 corresponds to intersection when applied to generator functions
5485 of indicator functions (i.e., with coefficients one or zero),
5486 in general it will produce a generating function with coefficients
5487 that are the product of the corresponding coefficients in the two
5488 operands.
5489 We can therefore rewrite the above equation as
5491 \begin{aligned}
5492 h(\vec x, \vec y, z) & = \sum_{l=k+1}^\infty
5493 f_k'(\vec x, \vec y, z) \star z^l \, f'(\vec x, \vec y, z)
5495 & = f_k'(\vec x, \vec y, z) \star
5496 \left(
5497 \sum_{l=k+1}^\infty z^l \, f'(\vec x, \vec y, z)
5498 \right)
5500 & = f_k'(\vec x, \vec y, z) \star
5501 \frac{z^{k+1} \, f'(\vec x, \vec y, z)}{1-z}
5503 \end{aligned}
5505 Computing $h(\vec x, \vec y, 1)$ would give us a generating
5506 function with as coefficients how many times a point of $T'_k$
5507 still appears in a shifted copy of $T'_0$ for any particular
5508 value of $\vec s$ and $\vec t$.
5509 However, we want to know if this number is zero for {\em all\/}
5510 values of $\vec s$ and $\vec t$, so we compute $h(\vec 1, \vec 1, 1)$
5511 instead. We have to be careful here since we allow the polyhedron
5512 $P$ to be unbounded and so we should apply the technique
5513 of \autoref{s:infinite} with $Q$ the projection of $P$ on
5514 the remaining coordinates.
5516 Note that testing whether we can stop is more expensive
5517 than applying the next iteration (since we have an extra
5518 $(1-z)$ factor in the denominator of one of the operands).
5519 However, we may save many iterations by stopping early
5520 and we will not needlessly replace a given representation
5521 of $f''(\vec x, \vec y, z)$ by a more complex representation
5522 (with more factors in the denominator).
5523 An alternative way of checking whether we can stop is to
5524 test whether $f'_k(\vec x, \vec y, z) = f'_{k+1}(\vec x, \vec y, z)$
5525 (as rational functions).
5526 To do so, we would need to check that both
5528 f'_k(\vec x, \vec y, z) -
5529 \left( f'_k(\vec x, \vec y, z) \star f'_{k+1}(\vec x, \vec y, z) \right)
5533 f'_{k+1}(\vec x, \vec y, z) -
5534 \left( f'_k(\vec x, \vec y, z) \star f'_{k+1}(\vec x, \vec y, z) \right)
5536 are zero and this Hadamard product is more expensive than
5537 the one above.
5539 \begin{figure}
5540 \intercol=1.05cm
5541 \begin{xy}
5542 <\intercol,0pt>:<0pt,\intercol>::
5543 \def\latticebody{\POS="c"+(0,-5.5)\ar@{--}"c"+(0,5.5)}%
5544 \POS0,{\xylattice{-5}{5}00}%
5545 \def\latticebody{\POS="c"+(-5.5,0)\ar@{--}"c"+(5.5,0)}%
5546 \POS0,{\xylattice00{-5}5}%
5547 \POS(0,-5.5)\ar(0,5.5) \POS(0,5.5)*+!UL{x_2}
5548 \POS(-5.5,0)\ar(5.5,0) \POS(5.5,0)*+!DR{x_1}
5549 \POS@i@={(-5,0),(5,0)},{0*[|(2)]\xypolyline{}}
5550 \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{}}
5551 \POS@i@={(-4,1),(4,1),(4,-1),(-4,-1),(-4,1)},{0*[|(2)]\xypolyline{}}
5552 \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{}}
5553 \POS@i@={(-3,2),(3,2),(3,-2),(-3,-2),(-3,2)},{0*[|(2)]\xypolyline{}}
5554 \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{}}
5555 \POS@i@={(-2,3),(2,3),(2,-3),(-2,-3),(-2,3)},{0*[|(2)]\xypolyline{}}
5556 \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{}}
5557 \POS@i@={(-1,4),(1,4),(1,-4),(-1,-4),(-1,4)},{0*[|(2)]\xypolyline{}}
5558 \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{}}
5559 \POS@i@={(0,-5),(0,5)},{0*[|(2)]\xypolyline{}}
5560 \POS(-5,0)*+!DR{5}
5561 \POS(-4.5,0.5)*+!DR{4}
5562 \POS(-4,1)*+!DR{3}
5563 \POS(-3.5,1.5)*+!DR{2}
5564 \POS(-3,2)*+!DR{1}
5565 \POS(-2.5,2.5)*+!DR{0}
5566 \POS(-2,3)*+!DR{-1}
5567 \POS(-1.5,3.5)*+!DR{-2}
5568 \POS(-1,4)*+!DR{-3}
5569 \POS(-0.5,4.5)*+!DR{-4}
5570 \POS(-0,5)*+!DR{-5}
5571 \end{xy}
5572 \caption{The parametric polytope from Example~\ref{ex:projection}
5573 for different values of the parameter}
5574 \label{f:ex:projection}
5575 \end{figure}
5577 \begin{example} \label{ex:projection}
5578 Consider once more the parametric polytope
5580 P(p) = \left\{\,
5581 \vec x \mid
5582 \begin{aligned}
5583 -2 x_1 + p + 5 &\ge 0 \\
5584 2 x_1 + p + 5 &\ge 0 \\
5585 -2 x_2 - p + 5 &\ge 0 \\
5586 2 x_2 - p + 5 &\ge 0
5587 \end{aligned}
5588 \,\right\}
5590 from \shortciteN[Example~2.1.7]{Woods2004PhD}
5591 and Example~\ref{ex:width:2} and assume we want to
5592 compute
5594 c(p) = \left[ \exists \vec x \in \ZZ^2: (p, \vec x) \in P \right]
5597 That is, we simply want to know for which values of $p$
5598 the polytope is non-empty.
5599 Now, there are more efficient ways of answering this particular question,
5600 but we will use it here as an example of the above algorithm.
5601 The polytope $P(p)$ is shown in \autoref{f:ex:projection} for
5602 all integer value of the parameter for which the polytope
5603 is non-empty.
5605 \begin{figure}
5606 \intercol=1.05cm
5607 \begin{xy}
5608 <\intercol,0pt>:<0pt,\intercol>::
5609 \def\latticebody{\POS="c"+(0,-5.5)\ar@{--}"c"+(0,5.5)}%
5610 \POS0,{\xylattice{-5}{5}00}%
5611 \def\latticebody{\POS="c"+(-5.5,0)\ar@{--}"c"+(5.5,0)}%
5612 \POS0,{\xylattice00{-5}5}%
5613 \POS(0,-5.5)\ar(0,5.5) \POS(0,5.5)*+!UL{x_2}
5614 \POS(-5.5,0)\ar(5.5,0) \POS(5.5,0)*+!DR{x_1}
5615 \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{}}
5616 \POS@i@={(-2,3),(2,3),(2,-3),(-2,-3),(-2,3)},{0*[|(2)]\xypolyline{}}
5617 \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{}}
5618 \POS@i@={(-1,4),(1,4),(1,-4),(-1,-4),(-1,4)},{0*[|(2)]\xypolyline{}}
5619 \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{}}
5620 \POS@i@={(0,-5),(0,5)},{0*[|(2)]\xypolyline{}}
5621 \POS(-2.5,2.5)*+!DR{0}
5622 \POS(-2,3)*+!DR{1}
5623 \POS(-1.5,3.5)*+!DR{2}
5624 \POS(-1,4)*+!DR{3}
5625 \POS(-0.5,4.5)*+!DR{4}
5626 \POS(-0,5)*+!DR{5}
5627 \POS(0,-11.5)*\xybox{
5628 \def\latticebody{\POS="c"+(0,-0.5)\ar@{--}"c"+(0,5.5)}%
5629 \POS0,{\xylattice{-5}{5}00}%
5630 \def\latticebody{\POS="c"+(-5.5,0)\ar@{--}"c"+(5.5,0)}%
5631 \POS0,{\xylattice00{0}5}%
5632 \POS(0,-0.5)\ar(0,5.5) \POS(0,5.5)*+!UR{p}
5633 \POS(-5.5,0)\ar(5.5,0) \POS(5.5,0)*+!UR{x_1}
5634 \POS(-2,0)*{\bullet}
5635 \POS(-1,0)*{\bullet},*+!DL{1}
5636 \POS(-0,0)*{\bullet},*+!DL{2}
5637 \POS(1,0)*{\bullet},*+!DL{3}
5638 \POS(2,0)*{\bullet},*+!DL{4}
5639 \POS(3,0)*+!DL{5}
5640 \POS(4,0)*+!DL{5}
5641 \POS(5,0)*+!DL{5}
5642 \POS(-2,1)*{\bullet}
5643 \POS(-1,1)*{\bullet},*+!DL{1}
5644 \POS(-0,1)*{\bullet},*+!DL{2}
5645 \POS(1,1)*{\bullet},*+!DL{3}
5646 \POS(2,1)*{\bullet},*+!DL{4}
5647 \POS(3,1)*+!DL{5}
5648 \POS(4,1)*+!DL{5}
5649 \POS(5,1)*+!DL{5}
5650 \POS(-1,2)*{\bullet}
5651 \POS(-0,2)*{\bullet},*+!DL{1}
5652 \POS(1,2)*{\bullet},*+!DL{2}
5653 \POS(2,2)*+!DL{3}
5654 \POS(3,2)*+!DL{3}
5655 \POS(4,2)*+!DL{3}
5656 \POS(5,2)*+!DL{3}
5657 \POS(-1,3)*{\bullet}
5658 \POS(-0,3)*{\bullet},*+!DL{1}
5659 \POS(1,3)*{\bullet},*+!DL{2}
5660 \POS(2,3)*+!DL{3}
5661 \POS(3,3)*+!DL{3}
5662 \POS(4,3)*+!DL{3}
5663 \POS(5,3)*+!DL{3}
5664 \POS(-0,4)*{\bullet}
5665 \POS(1,4)*+!DL{1}
5666 \POS(2,4)*+!DL{1}
5667 \POS(3,4)*+!DL{1}
5668 \POS(4,4)*+!DL{1}
5669 \POS(5,4)*+!DL{1}
5670 \POS(-0,5)*{\bullet}
5671 \POS(1,5)*+!DL{1}
5672 \POS(2,5)*+!DL{1}
5673 \POS(3,5)*+!DL{1}
5674 \POS(4,5)*+!DL{1}
5675 \POS(5,5)*+!DL{1}
5676 \POS(-6,-0.5)\ar(-6,5.5) \POS(-6,5.5)*+!UL{p}
5677 \POS(-6,0)*{\bullet}
5678 \POS(-6,1)*{\bullet}
5679 \POS(-6,2)*{\bullet}
5680 \POS(-6,3)*{\bullet}
5681 \POS(-6,4)*{\bullet}
5682 \POS(-6,5)*{\bullet}
5684 \end{xy}
5685 \caption{The transformed parametric polytope from Example~\ref{ex:projection}
5686 for $0 \le p \le 5$}
5687 \label{f:ex:projection:transformed}
5688 \end{figure}
5690 The first step is to compute the lattice width of $P(p)$.
5691 In Example~\ref{ex:width:2}, we already obtained the decomposition
5692 of the parameter domain into
5694 \begin{aligned}
5695 \hat C_1 &= \{\, p \mid 0 \le p \le 5 \,\} \\
5696 \hat C_2 &= \{\, p \mid -5 \le p \le -1 \,\}
5698 \end{aligned}
5700 with corresponding lattice widths and lattice width directions
5702 \begin{aligned}
5703 \vec c_1 &= (0,1) & w_{\vec c_1}(p) &= 5-p \\
5704 \vec c_2 &= (1,0) & w_{\vec c_2}(p) &= 5+p
5706 \end{aligned}
5708 Note that in this example, the gaps in both coordinate directions
5709 are $1$, so, in principle, there is no need to perform any unimodular
5710 transformation here. Nevertheless, we will apply the transformation
5711 that would be applied by the algorithm.
5712 On the first domain, we extend the lattice width direction
5713 to the unimodular matrix
5715 \begin{bmatrix}
5716 0 & 1 \\
5717 1 & 0
5718 \end{bmatrix}
5721 After application to the existentially quantified variables $\vec x$,
5722 we obtain the parametric polytope
5724 P'_1(p) = \left\{\,
5725 \vec x \mid
5726 \begin{aligned}
5727 -2 x_2 + p + 5 &\ge 0 \\
5728 2 x_2 + p + 5 &\ge 0 \\
5729 -2 x_1 - p + 5 &\ge 0 \\
5730 2 x_1 - p + 5 &\ge 0 \\
5731 p & \ge 0 \\
5732 \end{aligned}
5733 \,\right\}
5735 shown in the top part of \autoref{f:ex:projection:transformed}.
5736 We now temporarily remove the existential quantification on $x_1$,
5737 resulting in
5739 T' = \{ (p, x_1) \in \ZZ^2 \mid \exists x_2 \in \ZZ : (s, \vec x) \in P' \}
5742 Since there is only one existentially quantified variable left,
5743 we know we only have to shift and subtract the set once to obtain
5744 a set with at most one value of $x_2$ associated to each value
5745 of $(p, x_1)$.
5746 In particular, let $f(x,z_1,z_2)$ be the generating function
5747 of the integer points in $P'$. Then $g(x,z_1) = f'(x,z_1,1)$, with
5748 $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)$,
5749 is the generating function of $T'$.
5751 To check whether we need to subtract any shifted copies of
5752 $g(x,z_1)$ from itself, we compute
5754 h(x,z_1) = g(x,z_1) \star \frac{z_1 \, g(x,z_1)}{1-z_1}
5757 The second argument of this Hadamard product is depicted
5758 in \autoref{f:ex:projection:transformed} by its coefficients.
5759 The exponents in $h(x,z_1)$ that have a non-zero coefficient
5760 are therefore those marked by both a dot ($\bullet$) and
5761 a number. The total sum can be computed as $h(1,1) = 26$,
5762 which is finite, but non-zero. We therefore need to subtract
5763 at least one shifted copy of $g(x,z_1)$.
5766 g'(x,z_1) = g(x,z_1) - g(x,z_1) \star z_1 g(x,z_1)
5769 Computing
5771 h'(x,z_1) = g'(x,z_1) \star \frac{z_1^2 \, g(x,z_1)}{1-z_1}
5774 we would find that $h'(1,1) = 0$ and so we do not need
5775 to shift and subtract any further.
5776 However, since we are dealing with a two-dimensional problem,
5777 we already know from \autoref{l:gap} that we can stop
5778 after one shift and subtract, so we do not even need
5779 to compute $h'(x,z_1)$ here.
5780 The function $g'(x,z_1)$ now only has non-zero coefficients
5781 for at most one exponent of $z_1$ for each exponent of $x$.
5782 We may therefore project down to obtain
5783 the function $g'(x,1)$, which is the generating function
5784 of the set in the lower left part of \autoref{f:ex:projection:transformed}.
5786 For the chamber $\hat C_2$ of the parameter domain, the computations
5787 are nearly identical and the final result is simply the sum
5788 of the two generating functions found for each of the two (disjoint)
5789 chambers.
5791 \end{example}