IntegerPointDecomposition - Maple Help

PolyhedralSets[ZPolyhedralSets]

 IntegerPointDecomposition
 decompose the integer points in a (parametric) ZPolyhedralSet

 Calling Sequence IntegerPointDecomposition(zpoly,output=value)

Parameters

 zpoly - value - (optional) either latticeformat (default) or omegatestformat

Description

 • IntegerPointDecomposition(zpoly) decomposes zpoly into pairwise disjoint Z-Polyhedral sets with additional algebraic properties that an arbitrary Z-polyhedron is unlikely to have. Those algebraic properties are specified in Definition 2 of the first reference listed below. They imply that such a Z-polyhedron, say zp, is consistent (that is, has at least one point) and is specializable. This latter property means that if x is the variable of lowest rank in zp and v is a possible value for x (that is, there exists at least one point of zp with v as x-coordinate) then all the points of zp with v as x-coordinate are given by specializing at x=v the system of linear inequalities defining zp.
 • The output option selects the return format. It can be given as:
 – output=latticeformat (the default). With this option, the Z-polyhedral sets constructed can use arbitrary lattices.
 – output=omegatestformat. With this option, Maple replaces the use of a lattice in each Z-polyhedron by using auxiliary variables, as in the Omega Test method of William Pugh; see the fourth reference below.
 • The algorithm behind IntegerPointDecomposition is described in the first two papers listed below and is inspired by the other three references.
 • Advanced problems can be found in the help page of ZPolyhedralSets. Those problems are taken from the literature (the fifth reference below) and illustrate the kind of applications that the command IntegerPointDecomposition can support. More elementary examples are shown below as well as in the help page of ZPolyhedralSet.

Examples

 > $\mathrm{with}\left(\mathrm{PolyhedralSets}\right):$
 > $\mathrm{with}\left(\mathrm{ZPolyhedralSets}\right):$
 > $\mathrm{ineqs}≔\left[0\le -16+2y+z,0\le -72+4x+4y+3z,0\le 2y-z,0\le -24+4x+4y-3z,0\le -4x+4y+3z,0\le 48-4x+4y-3z,0\le 48-4x-4y+3z,0\le 8-2y+z,0\le -24+4x-4y+3z,0\le 24-2y-z,0\le 24+4x-4y-3z,0\le 96-4x-4y-3z\right]$
 ${\mathrm{ineqs}}{≔}\left[{0}{\le }{-}{16}{+}{2}{}{y}{+}{z}{,}{0}{\le }{-}{72}{+}{4}{}{x}{+}{4}{}{y}{+}{3}{}{z}{,}{0}{\le }{2}{}{y}{-}{z}{,}{0}{\le }{-}{24}{+}{4}{}{x}{+}{4}{}{y}{-}{3}{}{z}{,}{0}{\le }{-}{4}{}{x}{+}{4}{}{y}{+}{3}{}{z}{,}{0}{\le }{48}{-}{4}{}{x}{+}{4}{}{y}{-}{3}{}{z}{,}{0}{\le }{48}{-}{4}{}{x}{-}{4}{}{y}{+}{3}{}{z}{,}{0}{\le }{8}{-}{2}{}{y}{+}{z}{,}{0}{\le }{-}{24}{+}{4}{}{x}{-}{4}{}{y}{+}{3}{}{z}{,}{0}{\le }{24}{-}{2}{}{y}{-}{z}{,}{0}{\le }{24}{+}{4}{}{x}{-}{4}{}{y}{-}{3}{}{z}{,}{0}{\le }{96}{-}{4}{}{x}{-}{4}{}{y}{-}{3}{}{z}\right]$ (1)
 > $L≔\mathrm{Lattice}\left(\mathrm{Matrix}\left(\left[\left[1,0,2\right],\left[0,-1,1\right],\left[0,0,2\right]\right]\right),\mathrm{Vector}\left(\left[0,0,1\right]\right)\right)$
 ${L}{≔}{\mathrm{Lattice}}{}\left(\left[\begin{array}{ccc}{1}& {0}& {2}\\ {0}& {-1}& {1}\\ {0}& {0}& {2}\end{array}\right]{,}\left[\begin{array}{c}{0}\\ {0}\\ {1}\end{array}\right]\right)$ (2)
 > $\mathrm{vars}≔\left[x,y,z\right]$
 ${\mathrm{vars}}{≔}\left[{x}{,}{y}{,}{z}\right]$ (3)
 > $\mathrm{zps}≔\mathrm{ZPolyhedralSet}\left(\mathrm{ineqs},\mathrm{vars},':-\mathrm{lattice}'=L\right)$
 ${\mathrm{zps}}{≔}\left\{\begin{array}{lll}{\text{Relations}}& {:}& \left\{\begin{array}{:}{0}{\le }{2}{}{y}{-}{z}\\ {0}{\le }{-}{16}{+}{2}{}{y}{+}{z}\\ {0}{\le }{8}{-}{2}{}{y}{+}{z}\\ {0}{\le }{24}{-}{2}{}{y}{-}{z}\\ {0}{\le }{-}{4}{}{x}{+}{4}{}{y}{+}{3}{}{z}\\ {0}{\le }{-}{72}{+}{4}{}{x}{+}{4}{}{y}{+}{3}{}{z}\\ {0}{\le }{-}{24}{+}{4}{}{x}{-}{4}{}{y}{+}{3}{}{z}\\ {0}{\le }{-}{24}{+}{4}{}{x}{+}{4}{}{y}{-}{3}{}{z}\\ {0}{\le }{24}{+}{4}{}{x}{-}{4}{}{y}{-}{3}{}{z}\\ {0}{\le }{48}{-}{4}{}{x}{-}{4}{}{y}{+}{3}{}{z}\\ {0}{\le }{48}{-}{4}{}{x}{+}{4}{}{y}{-}{3}{}{z}\\ {0}{\le }{96}{-}{4}{}{x}{-}{4}{}{y}{-}{3}{}{z}\end{array}\right\\\ {\text{Variables}}& {:}& \left[{x}{,}{y}{,}{z}\right]\\ {\text{Parameters}}& {:}& \left[\right]\\ {\text{ParameterConstraints}}& {:}& \left\{\begin{array}{}\end{array}\right\\\ {\text{Lattice}}& {:}& {\text{ZSpan}}\left(\left[\begin{array}{ccc}{1}& {0}& {2}\\ {0}& {-1}& {1}\\ {0}& {0}& {2}\end{array}\right]{,}{,}{,}\left[\begin{array}{c}{0}\\ {0}\\ {1}\end{array}\right]\right)\end{array}\right\$ (4)
 > $\mathrm{res}≔\mathrm{IntegerPointDecomposition}\left(\mathrm{zps}\right)$
 ${\mathrm{res}}{≔}\left[\left\{\begin{array}{lll}{\text{Relations}}& {:}& \left\{\begin{array}{:}{z}{\le }{9}\\ {-}{z}{\le }{-7}\\ {-}{2}{}{y}{-}{z}{\le }{-16}\\ {-}{2}{}{y}{+}{z}{\le }{0}\\ {2}{}{y}{-}{z}{\le }{8}\\ {2}{}{y}{+}{z}{\le }{24}\\ {-}{4}{}{x}{-}{4}{}{y}{-}{3}{}{z}{\le }{-72}\\ {-}{4}{}{x}{-}{4}{}{y}{+}{3}{}{z}{\le }{-24}\\ {-}{4}{}{x}{+}{4}{}{y}{-}{3}{}{z}{\le }{-24}\\ {-}{4}{}{x}{+}{4}{}{y}{+}{3}{}{z}{\le }{24}\\ {4}{}{x}{-}{4}{}{y}{-}{3}{}{z}{\le }{0}\\ {4}{}{x}{-}{4}{}{y}{+}{3}{}{z}{\le }{48}\\ {4}{}{x}{+}{4}{}{y}{-}{3}{}{z}{\le }{48}\\ {4}{}{x}{+}{4}{}{y}{+}{3}{}{z}{\le }{96}\end{array}\right\\\ {\text{Variables}}& {:}& \left[{x}{,}{y}{,}{z}\right]\\ {\text{Parameters}}& {:}& \left[\right]\\ {\text{ParameterConstraints}}& {:}& \left\{\begin{array}{}\end{array}\right\\\ {\text{Lattice}}& {:}& {\text{ZSpan}}\left(\left[\begin{array}{ccc}{1}& {0}& {0}\\ {0}& {1}& {0}\\ {0}& {0}& {2}\end{array}\right]{,}{,}{,}\left[\begin{array}{c}{0}\\ {0}\\ {1}\end{array}\right]\right)\end{array}\right\{,}\left\{\begin{array}{lll}{\text{Relations}}& {:}& \left\{\begin{array}{:}{x}{=}{9}\\ {y}{=}{6}\\ {z}{=}{11}\end{array}\right\\\ {\text{Variables}}& {:}& \left[{x}{,}{y}{,}{z}\right]\\ {\text{Parameters}}& {:}& \left[\right]\\ {\text{ParameterConstraints}}& {:}& \left\{\begin{array}{}\end{array}\right\\\ {\text{Lattice}}& {:}& {\text{ZSpan}}\left(\left[\begin{array}{cc}{0}& {0}\\ {1}& {0}\\ {0}& {2}\end{array}\right]{,}{,}{,}\left[\begin{array}{c}{9}\\ {0}\\ {1}\end{array}\right]\right)\end{array}\right\{,}\left\{\begin{array}{lll}{\text{Relations}}& {:}& \left\{\begin{array}{:}{x}{=}{9}\\ {y}{=}{6}\\ {z}{=}{5}\end{array}\right\\\ {\text{Variables}}& {:}& \left[{x}{,}{y}{,}{z}\right]\\ {\text{Parameters}}& {:}& \left[\right]\\ {\text{ParameterConstraints}}& {:}& \left\{\begin{array}{}\end{array}\right\\\ {\text{Lattice}}& {:}& {\text{ZSpan}}\left(\left[\begin{array}{cc}{0}& {0}\\ {1}& {0}\\ {0}& {2}\end{array}\right]{,}{,}{,}\left[\begin{array}{c}{9}\\ {0}\\ {1}\end{array}\right]\right)\end{array}\right\\right]$ (5)

You can also choose output format as omegatestformat instead.

 > $\mathrm{tt}≔\mathrm{IntegerPointDecomposition}\left({\mathrm{res}}_{1},\mathrm{output}=\mathrm{omegatestformat}\right)$
 ${\mathrm{tt}}{≔}\left[\left[\left[{z}{=}{2}{}{\mathrm{_Z3}}{+}{1}{,}{2}{}{\mathrm{_Z3}}{\le }{8}{,}{-}{2}{}{\mathrm{_Z3}}{\le }{-6}{,}{-}{2}{}{y}{-}{2}{}{\mathrm{_Z3}}{\le }{-15}{,}{-}{2}{}{y}{+}{2}{}{\mathrm{_Z3}}{\le }{-1}{,}{2}{}{y}{-}{2}{}{\mathrm{_Z3}}{\le }{9}{,}{2}{}{y}{+}{2}{}{\mathrm{_Z3}}{\le }{23}{,}{-}{4}{}{x}{-}{4}{}{y}{-}{6}{}{\mathrm{_Z3}}{\le }{-69}{,}{-}{4}{}{x}{-}{4}{}{y}{+}{6}{}{\mathrm{_Z3}}{\le }{-27}{,}{-}{4}{}{x}{+}{4}{}{y}{-}{6}{}{\mathrm{_Z3}}{\le }{-21}{,}{-}{4}{}{x}{+}{4}{}{y}{+}{6}{}{\mathrm{_Z3}}{\le }{21}{,}{4}{}{x}{-}{4}{}{y}{-}{6}{}{\mathrm{_Z3}}{\le }{3}{,}{4}{}{x}{-}{4}{}{y}{+}{6}{}{\mathrm{_Z3}}{\le }{45}{,}{4}{}{x}{+}{4}{}{y}{-}{6}{}{\mathrm{_Z3}}{\le }{51}{,}{4}{}{x}{+}{4}{}{y}{+}{6}{}{\mathrm{_Z3}}{\le }{93}\right]{,}\left[{z}\right]{,}\left[{\mathrm{_Z3}}{,}{x}{,}{y}\right]\right]\right]$ (6)
 > $\mathrm{res_omegatestformat}≔\mathrm{IntegerPointDecomposition}\left(\mathrm{zps},\mathrm{output}=\mathrm{omegatestformat}\right)$
 ${\mathrm{res_omegatestformat}}{≔}\left[\left[\left[{z}{=}{2}{}{\mathrm{_Z3}}{+}{1}{,}{2}{}{\mathrm{_Z3}}{\le }{8}{,}{-}{2}{}{\mathrm{_Z3}}{\le }{-6}{,}{-}{2}{}{y}{-}{2}{}{\mathrm{_Z3}}{\le }{-15}{,}{-}{2}{}{y}{+}{2}{}{\mathrm{_Z3}}{\le }{-1}{,}{2}{}{y}{-}{2}{}{\mathrm{_Z3}}{\le }{9}{,}{2}{}{y}{+}{2}{}{\mathrm{_Z3}}{\le }{23}{,}{-}{4}{}{x}{-}{4}{}{y}{-}{6}{}{\mathrm{_Z3}}{\le }{-69}{,}{-}{4}{}{x}{-}{4}{}{y}{+}{6}{}{\mathrm{_Z3}}{\le }{-27}{,}{-}{4}{}{x}{+}{4}{}{y}{-}{6}{}{\mathrm{_Z3}}{\le }{-21}{,}{-}{4}{}{x}{+}{4}{}{y}{+}{6}{}{\mathrm{_Z3}}{\le }{21}{,}{4}{}{x}{-}{4}{}{y}{-}{6}{}{\mathrm{_Z3}}{\le }{3}{,}{4}{}{x}{-}{4}{}{y}{+}{6}{}{\mathrm{_Z3}}{\le }{45}{,}{4}{}{x}{+}{4}{}{y}{-}{6}{}{\mathrm{_Z3}}{\le }{51}{,}{4}{}{x}{+}{4}{}{y}{+}{6}{}{\mathrm{_Z3}}{\le }{93}\right]{,}\left[{z}\right]{,}\left[{\mathrm{_Z3}}{,}{x}{,}{y}\right]\right]{,}\left[\left[{y}{=}{6}{,}{x}{=}{9}{,}{z}{=}{5}\right]{,}\left[{y}{,}{x}{,}{z}\right]{,}\left[\right]\right]{,}\left[\left[{y}{=}{6}{,}{x}{=}{9}{,}{z}{=}{11}\right]{,}\left[{y}{,}{x}{,}{z}\right]{,}\left[\right]\right]\right]$ (7)

References

 Rui-Juan Jing and Marc Moreno Maza. "Computing the Integer Points of a Polyhedron, I: Algorithm." Proceedings of CASC 2017: 225-241, Springer.
 Rui-Juan Jing and Marc Moreno Maza. "Computing the Integer Points of a Polyhedron, II: Complexity Estimates." Proceedings of CASC 2017: 242-256, Springer.
 Rachid Seghir, Vincent Loechner, and Benoı̂t Meister. "Integer affine transformations of parametric Z-polytopes and applications to loop nest optimization." Proceedings of TACO, Vol. 9(2):8:1–8:27, 2012.
 William Pugh. "The omega test: a fast and practical integer programming algorithm for dependence analysis." Proceedings Supercomputing ’91, pp 4–13. ACM, 1991.
 William Pugh. "Counting solutions to presburger formulas: How and why." Proceedings of PLDI, pp 121–134. ACM, 1994.

Compatibility

 • The PolyhedralSets:-ZPolyhedralSets:-IntegerPointDecomposition command was introduced in Maple 2023.