Fix final references

This commit is contained in:
Jip J. Dekker 2021-03-04 13:35:14 +11:00
parent 5f8553d8cc
commit 645ae1fa3a
No known key found for this signature in database
GPG Key ID: 517DF4A00618C9C3
10 changed files with 232 additions and 144 deletions

View File

@ -132,6 +132,26 @@
bibsource = {dblp computer science bibliography, https://dblp.org} bibsource = {dblp computer science bibliography, https://dblp.org}
} }
@inproceedings{carlsson-1997-sicstus,
author = {Mats Carlsson and Greger Ottosson and Bj{\"{o}}rn Carlson},
editor = {Hugh Glaser and Pieter H. Hartel and Herbert Kuchen},
title = {An Open-Ended Finite Domain Constraint Solver},
booktitle = {Programming Languages: Implementations, Logics, and
Programs, 9th International Symposium, PLILP'97, Including a
Special Trach on Declarative Programming Languages in
Education, Southampton, UK, September 3-5, 1997, Proceedings},
series = {Lecture Notes in Computer Science},
volume = 1292,
pages = {191--206},
publisher = {Springer},
year = 1997,
url = {https://doi.org/10.1007/BFb0033845},
doi = {10.1007/BFb0033845},
timestamp = {Tue, 14 May 2019 10:00:36 +0200},
biburl = {https://dblp.org/rec/conf/plilp/CarlssonOC97.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@article{chiarandini-2012-gbac, @article{chiarandini-2012-gbac,
author = {Marco Chiarandini and Luca Di Gaspero and Stefano Gualandi author = {Marco Chiarandini and Luca Di Gaspero and Stefano Gualandi
and Andrea Schaerf}, and Andrea Schaerf},
@ -369,6 +389,42 @@
bibsource = {dblp computer science bibliography, https://dblp.org} bibsource = {dblp computer science bibliography, https://dblp.org}
} }
@article{kolisch-1997-psplib,
title = {PSPLIB - A project scheduling problem library: OR Software
- ORSEP Operations Research Software Exchange Program},
journal = {European Journal of Operational Research},
volume = 96,
number = 1,
pages = {205-216},
year = 1997,
issn = {0377-2217},
doi = {https://doi.org/10.1016/S0377-2217(96)00170-1},
url =
{https://www.sciencedirect.com/science/article/pii/S0377221796001701},
author = {Rainer Kolisch and Arno Sprecher},
keywords = {Project scheduling, Resource constraints, Benchmark
instances},
}
@inproceedings{lagerkvist-2009-groups,
author = {Mikael Z. Lagerkvist and Christian Schulte},
editor = {Ian P. Gent},
title = {Propagator Groups},
booktitle = {Principles and Practice of Constraint Programming - {CP}
2009, 15th International Conference, {CP} 2009, Lisbon,
Portugal, September 20-24, 2009, Proceedings},
series = {Lecture Notes in Computer Science},
volume = 5732,
pages = {524--538},
publisher = {Springer},
year = 2009,
url = {https://doi.org/10.1007/978-3-642-04244-7\_42},
doi = {10.1007/978-3-642-04244-7\_42},
timestamp = {Tue, 14 May 2019 10:00:45 +0200},
biburl = {https://dblp.org/rec/conf/cp/LagerkvistS09.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@inproceedings{leo-2015-multipass, @inproceedings{leo-2015-multipass,
author = {Kevin Leo and Guido Tack}, author = {Kevin Leo and Guido Tack},
editor = {Qiang Yang and Michael J. Wooldridge}, editor = {Qiang Yang and Michael J. Wooldridge},
@ -528,6 +584,21 @@
bibsource = {dblp computer science bibliography, https://dblp.org} bibsource = {dblp computer science bibliography, https://dblp.org}
} }
@article{plaisted-1986-polarity,
author = {David A. Plaisted and Steven Greenbaum},
title = {A Structure-Preserving Clause Form Translation},
journal = {J. Symb. Comput.},
volume = 2,
number = 3,
pages = {293--304},
year = 1986,
url = {https://doi.org/10.1016/S0747-7171(86)80028-1},
doi = {10.1016/S0747-7171(86)80028-1},
timestamp = {Wed, 17 Feb 2021 08:57:26 +0100},
biburl = {https://dblp.org/rec/journals/jsc/PlaistedG86.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@inproceedings{rendl-2009-enhanced-tailoring, @inproceedings{rendl-2009-enhanced-tailoring,
author = {Andrea Rendl and Ian Miguel and Ian P. Gent and Christopher author = {Andrea Rendl and Ian Miguel and Ian P. Gent and Christopher
Jefferson}, Jefferson},
@ -636,6 +707,17 @@
bibsource = {dblp computer science bibliography, https://dblp.org} bibsource = {dblp computer science bibliography, https://dblp.org}
} }
@phdthesis{rendl-2010-thesis,
author = {Andrea Rendl},
title = {Effective compilation of constraint models},
school = {University of St Andrews, {UK}},
year = {2010},
url = {http://hdl.handle.net/10023/973},
timestamp = {Thu, 25 Aug 2016 17:20:59 +0200},
biburl = {https://dblp.org/rec/phd/ethos/Rendl10.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@inproceedings{schulte-2005-views, @inproceedings{schulte-2005-views,
author = {Christian Schulte and Guido Tack}, author = {Christian Schulte and Guido Tack},
editor = {Peter van Beek}, editor = {Peter van Beek},
@ -710,17 +792,6 @@
bibsource = {dblp computer science bibliography, https://dblp.org} bibsource = {dblp computer science bibliography, https://dblp.org}
} }
@phdthesis{rendl-2010-thesis,
author = {Andrea Rendl},
title = {Effective compilation of constraint models},
school = {University of St Andrews, {UK}},
year = {2010},
url = {http://hdl.handle.net/10023/973},
timestamp = {Thu, 25 Aug 2016 17:20:59 +0200},
biburl = {https://dblp.org/rec/phd/ethos/Rendl10.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
@book{silvano-1990-knapsack, @book{silvano-1990-knapsack,
author = {Martello, Silvano and Toth, Paolo}, author = {Martello, Silvano and Toth, Paolo},
title = {Knapsack Problems: Algorithms and Computer Implementations}, title = {Knapsack Problems: Algorithms and Computer Implementations},
@ -781,6 +852,24 @@
bibsource = {dblp computer science bibliography, https://dblp.org} bibsource = {dblp computer science bibliography, https://dblp.org}
} }
@techreport{gamrath-2020-scip,
author = {Gerald Gamrath and Daniel Anderson and Ksenia Bestuzheva and Wei-Kun Chen and Leon Eifler and Maxime Gasse and Patrick Gemander and Ambros Gleixner and Leona Gottwald and Katrin Halbig and Gregor Hendel and Christopher Hojny and Thorsten Koch and Le Bodic, Pierre and Stephen J. Maher and Frederic Matter and Matthias Miltenberger and Erik M{\"u}hmer and Benjamin M{\"u}ller and Marc E. Pfetsch and Franziska Schl{\"o}sser and Felipe Serrano and Yuji Shinano and Christine Tawfik and Stefan Vigerske and Fabian Wegscheider and Dieter Weninger and Jakob Witzig},
title = {{The SCIP Optimization Suite 7.0}},
type = {ZIB-Report},
institution = {Zuse Institute Berlin},
number = {20-10},
month = {3},
year = {2020},
url = {http://nbn-resolving.de/urn:nbn:de:0297-zib-78023}
}
@unpublished{van-hentenryck-1992-indexicals,
title = {Constraint processing in cc(FD)},
author = {Van Hentenryck, P. and Saraswat, V. and Deville, Y.},
year = 1992,
note = {Manuscript},
}
@book{van-hentenryck-1999-opl, @book{van-hentenryck-1999-opl,
title = {The OPL Optimization Programming Language}, title = {The OPL Optimization Programming Language},
author = {Van Hentenryck, P. and Lustig, I. and Puget, J.F. and author = {Van Hentenryck, P. and Lustig, I. and Puget, J.F. and
@ -818,14 +907,3 @@
year = 1988, year = 1988,
publisher = {Wiley} publisher = {Wiley}
} }
@techreport{gamrath-2020-scip,
author = {Gerald Gamrath and Daniel Anderson and Ksenia Bestuzheva and Wei-Kun Chen and Leon Eifler and Maxime Gasse and Patrick Gemander and Ambros Gleixner and Leona Gottwald and Katrin Halbig and Gregor Hendel and Christopher Hojny and Thorsten Koch and Le Bodic, Pierre and Stephen J. Maher and Frederic Matter and Matthias Miltenberger and Erik M{\"u}hmer and Benjamin M{\"u}ller and Marc E. Pfetsch and Franziska Schl{\"o}sser and Felipe Serrano and Yuji Shinano and Christine Tawfik and Stefan Vigerske and Fabian Wegscheider and Dieter Weninger and Jakob Witzig},
title = {{The SCIP Optimization Suite 7.0}},
type = {ZIB-Report},
institution = {Zuse Institute Berlin},
number = {20-10},
month = {March},
year = {2020},
url = {http://nbn-resolving.de/urn:nbn:de:0297-zib-78023}
}

View File

@ -37,7 +37,7 @@ which the user creates a problem description, in this thesis referred to as
name={common subexpression elimination}, name={common subexpression elimination},
description={Common Subexpression Elimination (CSE) is a technique used in the description={Common Subexpression Elimination (CSE) is a technique used in the
evaluation of programming languages to avoid redoing the same work. A evaluation of programming languages to avoid redoing the same work. A
description of how CSE works in \cmls\ can be found in \cref{sec:3-cse}}, description of how CSE works in \cmls\ can be found in \cref{sec:4-cse}},
} }
\newglossaryentry{gls-csp}{ \newglossaryentry{gls-csp}{

View File

@ -8,5 +8,5 @@ predicate round_robin(array[int] of var bool: nbhs) =
select = (last_val(select) + 1) mod N select = (last_val(select) + 1) mod N
endif endif
/\ forall(i in 1..N) ( /\ forall(i in 1..N) (
select = i-1 -> nbhs[i] @\Vlabel{line:6:roundrobin:post}@ select = i-1 -> nbhs[i] % <-- Post Neighbourhood@\Vlabel{line:6:roundrobin:post}@
); );

View File

@ -1,4 +1,4 @@
predicate status(var int: stat); @\Vlabel{line:6:status}@ predicate status(var int: stat); % <-- @\Vlabel{line:6:status}@
function var STATUS: status() = function var STATUS: status() =
let { let {
var STATUS: stat; var STATUS: stat;

View File

@ -98,3 +98,9 @@ outputdir=build,
% Proof Tree % Proof Tree
\usepackage[nounderscore]{syntax} \usepackage[nounderscore]{syntax}
\usepackage{bussproofs} \usepackage{bussproofs}
% Half Reif packages (maybe we should get rid of these)
\usepackage[all]{xy}
% Comments
\newcommand{\pjs}[1]{\textcolor{blue}{\Big[\textbf{Peter}: #1\Big]}}
\newcommand{\jip}[1]{\textcolor{red}{\Big[\textbf{Jip}: #1\Big]}}

View File

@ -71,3 +71,5 @@
\DeclareMathOperator{\ran}{\mathit{ran}} \DeclareMathOperator{\ran}{\mathit{ran}}
\DeclareMathOperator{\ite}{\mathit{ite}} \DeclareMathOperator{\ite}{\mathit{ite}}
\DeclareMathOperator{\VAR}{\mathit{VAR}} \DeclareMathOperator{\VAR}{\mathit{VAR}}
\DeclareMathOperator{\dom}{\mathit{idx}}

View File

@ -222,7 +222,7 @@ type.
A \nanozinc\ program, defined in \cref{fig:4-nzn-syntax}, is simply a list A \nanozinc\ program, defined in \cref{fig:4-nzn-syntax}, is simply a list
of calls, where the result of each call is bound to either an identifier or the of calls, where the result of each call is bound to either an identifier or the
constant true. The \syntax{$\sep$ <ident>*} will be used to track dependent constant true. The \syntax{$\sep$ <ident>*} will be used to track dependent
constraints (this will be explained in detail in \cref{sec:6-nanozinc}, for constraints (this will be explained in detail in \cref{sec:4-nanozinc}, for
now you can assume it is empty). now you can assume it is empty).
\begin{figure} \begin{figure}
@ -407,15 +407,16 @@ rewritten into \mzninline{int_gt(t,y)} and bound to fresh identifier
\subsection{Rewriting Rules} \subsection{Rewriting Rules}
The core of the proposed \minizinc\ architecture is an abstract machine that The core of the proposed \minizinc\ architecture is an abstract machine that
performs the rewriting of \nanozinc\ items using the corresponding \microzinc performs the rewriting of \nanozinc\ items using the corresponding \microzinc\
function definitions. We can now formally define the rewriting rules for this function definitions. We can now formally define the rewriting rules for this
abstract machine. abstract machine.
The full set of rules appears in \cref{fig:4-rewrite-to-nzn}. To simplify The full set of rules appears in
presentation, we assume that all rules that introduce new identifiers into the \cref{fig:4-rewrite-to-nzn-calls,fig:4-rewrite-to-nzn-let,fig:4-rewrite-to-nzn-other}.
\nanozinc\ program do so in a way that ensures those identifiers are fresh To simplify presentation, we assume that all rules that introduce new
(i.e., not used in the rest of the \nanozinc\ program), by suitable alpha identifiers into the \nanozinc\ program do so in a way that ensures those
renaming. identifiers are fresh (\ie\ not used in the rest of the \nanozinc\ program), by
suitable alpha renaming.
\begin{figure*} \begin{figure*}
\centering \centering

View File

@ -8,10 +8,10 @@ $o$ subject to an (existentially quantified) conjunction of primitive
constraints $c$. But modelling languages such as OPL constraints $c$. But modelling languages such as OPL
\autocite{van-hentenryck-1999-opl}, Zinc/\minizinc\ \autocite{van-hentenryck-1999-opl}, Zinc/\minizinc\
\autocite{marriott-2008-zinc, nethercote-2007-minizinc} and Essence \autocite{marriott-2008-zinc, nethercote-2007-minizinc} and Essence
\cite{frisch-2007-essence} allow much more expressive problems to be formulated. \autocite{frisch-2007-essence} allow much more expressive problems to be
Modelling languages map the more expressive formulations to existentially formulated. Modelling languages map the more expressive formulations to
quantified conjunction through a combination of loop unrolling, and flattening existentially quantified conjunction through a combination of loop unrolling,
using reification. and flattening using reification.
\begin{example}\label{ex:cons} \begin{example}\label{ex:cons}
Consider the following ``complex constraint'' written in \minizinc\ syntax Consider the following ``complex constraint'' written in \minizinc\ syntax
@ -708,7 +708,7 @@ The flattening proceeds by evaluating fixed Boolean expressions and returning
the value. We assume $\fixed$ checks if an expression is fixed (determined the value. We assume $\fixed$ checks if an expression is fixed (determined
during \minizinc's type analysis), and $\eval$ evaluates a fixed expression. For during \minizinc's type analysis), and $\eval$ evaluates a fixed expression. For
simplicity of presentation, we assume that fixed expressions are never undefined simplicity of presentation, we assume that fixed expressions are never undefined
(such as \lstinline|3 div 0|). We can extend the algorithms to handle this case, (such as \mzninline{3 div 0}). We can extend the algorithms to handle this case,
but it complicates the presentation. Our implementation aborts in this but it complicates the presentation. Our implementation aborts in this
case.\pjs{CHECK and FIX!} While this does not agree with the relational case.\pjs{CHECK and FIX!} While this does not agree with the relational
semantics it likely indicates a modelling error since a fixed part of the model semantics it likely indicates a modelling error since a fixed part of the model
@ -734,21 +734,21 @@ creates an $\mathit{element}$ constraint. If the context is root this is simple,
otherwise it creates a new index varaible $v'$ guaranteed to only give correct otherwise it creates a new index varaible $v'$ guaranteed to only give correct
answers, and uses this in the $\mathit{element}$ constraint to avoid answers, and uses this in the $\mathit{element}$ constraint to avoid
undefinedness. Built-in predicates abort if not in the root undefinedness. Built-in predicates abort if not in the root
context.\short{\footnote{Using half reification this can be relaxed to also context.\footnote{Using half reification this can be relaxed to also allow
allow positive contexts.}} They flatten their arguments and add an positive contexts.} They flatten their arguments and add an appropriate
appropriate built-in constraint. \callbyvalue{ User defined predicate built-in constraint. \callbyvalue{ User defined predicate applications flatten
applications flatten their arguments and then flatten a renamed copy of the their arguments and then flatten a renamed copy of the body.} \callbyunroll{
body.} \callbyunroll{ User defined predicate applications are replaced by a User defined predicate applications are replaced by a renamed and flattened
renamed and flattened copy of the body.} \emph{if-then-else} evaluates the copy of the body.} \emph{if-then-else} evaluates the condition (which must be
condition (which must be fixed) and flattens the \emph{then} or \emph{else} fixed) and flattens the \emph{then} or \emph{else} branch appropriately.
branch appropriately. \pjs{USe the same resdtriction, but explain its not all \pjs{USe the same resdtriction, but explain its not all required} The handling
required} The handling of \texttt{let} is the most complicated. The expression of \texttt{let} is the most complicated. The expression is renamed with new
is renamed with new copies of the let variables. We extract the constraints from copies of the let variables. We extract the constraints from the \texttt{let}
the \texttt{let} expression using function \textsf{flatlet} which returns the expression using function \textsf{flatlet} which returns the extracted
extracted constraint and a rewritten term (not used in this case, but used in constraint and a rewritten term (not used in this case, but used in \flatt{}).
\flatt{}). The constraints returned by function \textsf{flatlet} are then The constraints returned by function \textsf{flatlet} are then flattened.
flattened. Finally if we are in the root context, we ensure that the Boolean $b$ Finally if we are in the root context, we ensure that the Boolean $b$ returned
returned must be $\true$ by adding $b$ to $S$. must be $\true$ by adding $b$ to $S$.
{ {
\begin{tabbing} \begin{tabbing}
@ -1229,10 +1229,10 @@ $S$ \cupp $\{ \new b \full (b_1 \wedge b_2)\}$
% $b \not\in vars(c)$ is a Boolean variable naming the satisfied state of the % $b \not\in vars(c)$ is a Boolean variable naming the satisfied state of the
% constraint $c$. % constraint $c$.
% %\newcommand{\new}{\textbf{new}~} %\newcommand{\new}{\textbf{new}~}
% %\newcommand{\flatc}{\textsf{flatc}} %\newcommand{\flatc}{\textsf{flatc}}
% %\newcommand{\flatt}{\textsf{flatt}} %\newcommand{\flatt}{\textsf{flatt}}
% \newcommand{\safen}{\textsf{safen}} \newcommand{\safen}{\textsf{safen}}
% The pseudo-code for \flatc($b$,$c$) flattens a constraint expression $c$ to be % The pseudo-code for \flatc($b$,$c$) flattens a constraint expression $c$ to be
% equal to $b$, returning a set of constraints implementing $b \full c$. We % equal to $b$, returning a set of constraints implementing $b \full c$. We
@ -1377,13 +1377,12 @@ $$
% \begin{example} % \begin{example}
% Most propagators check consistency before propagating: e.g. % Most propagators check consistency before propagating: e.g.
% $\sum_i a_i x_i \leq a_0$ determines $L = \sum_i min_D(a_i x_i) - a_0$ % $\sum_i a_i x_i \leq a_0$ determines $L = \sum_i min_D(a_i x_i) - a_0$ and
% and fails if $L > 0$ before propagating~\autocite{harveyschimpf}; % fails if $L > 0$ before propagating \autocite{harveyschimpf}; Regin's domain
% Regin's domain propagator~\autocite{reginalldifferent} for \alldiff$([x_1, \ldots, x_n])$ % propagator \autocite{reginalldifferent} for \alldiff$([x_1, \ldots, x_n])$
% determines a maximum matching between variables and values first, % determines a maximum matching between variables and values first, if this is
% if this is not of size $n$ it fails before propagating; % not of size $n$ it fails before propagating; and the timetable
% and the timetable \texttt{cumulative} constraint~\autocite{cumulative} % \texttt{cumulative} constraint~\autocite{cumulative} determines a profile of
% determines a profile of
% necessary resource usage, and fails if this breaks the resource limit, % necessary resource usage, and fails if this breaks the resource limit,
% before considering propagation. \qed % before considering propagation. \qed
% \end{example} % \end{example}
@ -1499,8 +1498,8 @@ not propagate unnecessarily.
\end{mzn} \end{mzn}
which may seem to be more expensive since there are additional variables (the which may seem to be more expensive since there are additional variables (the
$b4[i]$), but since both $b4[i]$ and $a[i]$ are implemented by $b4[i]$), but since both $b4[i]$ and $a[i]$ are implemented by views
views~\autocite{views}, there is no additional runtime overhead. This \autocite{schulte-2005-views}, there is no additional runtime overhead. This
decomposition will only wake the linear constraint when some task $i$ is decomposition will only wake the linear constraint when some task $i$ is
guaranteed to overlap time $s[j]$. guaranteed to overlap time $s[j]$.
\end{example} \end{example}
@ -2156,55 +2155,56 @@ the usual case for such a trivial propagator.
% consistent propagator for $b \half b''$. Similarly define % consistent propagator for $b \half b''$. Similarly define
% $f_{b' \half \neg c}(D) =_{vars(b' \full c)} \solv(\{f_{b''' \full c}, f_{b' \half \neg b'''} \}, D)$ % $f_{b' \half \neg c}(D) =_{vars(b' \full c)} \solv(\{f_{b''' \full c}, f_{b' \half \neg b'''} \}, D)$
\begin{theorem} \jip{There is a proof here, but I don't have a proof environment yet}
$\forall D. \solv(\{ f_{b \full c}, f_{b' \full \neg b}\})(D) = \solv(\{ f_{b \half c}, f_{b' \half \neg c}, f_{b' \full \neg b}\}, D)$. % \begin{theorem}
\end{theorem} % $\forall D. \solv(\{ f_{b \full c}, f_{b' \full \neg b}\})(D) = \solv(\{ f_{b \half c}, f_{b' \half \neg c}, f_{b' \full \neg b}\}, D)$.
\begin{proof} % \end{theorem}
Let $V = vars(c)$. First w.l.o.g. we only consider domains $D$ at a fixpoint % \begin{proof}
of the propagators $f_{b' \full \neg b}$, i.e. % Let $V = vars(c)$. First w.l.o.g. we only consider domains $D$ at a fixpoint
$D(b') = \{ \neg d ~|~ d \in D(b)\}$, since both $\solv$ expressions include % of the propagators $f_{b' \full \neg b}$, i.e.
$f_{b' \full \neg b}$. Let % $D(b') = \{ \neg d ~|~ d \in D(b)\}$, since both $\solv$ expressions include
$D' = \solv(\{ f_{b \full c}, f_{b' \full \neg b}\})(D)$, now since % $f_{b' \full \neg b}$. Let
$f_{b \full c}$ and $f_{b' \full \neg b}$ are idempotent and $D$ is a fixpoint % $D' = \solv(\{ f_{b \full c}, f_{b' \full \neg b}\})(D)$, now since
of $f_{b' \full \neg b}$, then $D' = f_{b' \full \neg b}(f_{b \full c}(D))$. % $f_{b \full c}$ and $f_{b' \full \neg b}$ are idempotent and $D$ is a fixpoint
Let % of $f_{b' \full \neg b}$, then $D' = f_{b' \full \neg b}(f_{b \full c}(D))$.
$D'' = \solv(\{ f_{b \half c}, f_{b' \half \neg c}, f_{b' \full \neg b}\}, D)$. % Let
The proof is by cases of $D$. % $D'' = \solv(\{ f_{b \half c}, f_{b' \half \neg c}, f_{b' \full \neg b}\}, D)$.
% The proof is by cases of $D$.
\textbf{(a)} Suppose $D(b) = \{\true,\false\}$. \textbf{(a-i)} Suppose % \textbf{(a)} Suppose $D(b) = \{\true,\false\}$. \textbf{(a-i)} Suppose
$f_{b \full c}(D) = D$. Then clearly $f_{b \half c}(D) = D$ by definition, and % $f_{b \full c}(D) = D$. Then clearly $f_{b \half c}(D) = D$ by definition, and
similarly $f_{b' \half \neg c}(D) = D$. Hence $D_1 = D_2 = D$. Note that since % similarly $f_{b' \half \neg c}(D) = D$. Hence $D_1 = D_2 = D$. Note that since
$f_{b \full c}$ is reified consistent, then $f_{b \full c}(D) \neq D$ implies % $f_{b \full c}$ is reified consistent, then $f_{b \full c}(D) \neq D$ implies
that $f_{b \full c}(D)(b) \neq \{ \false, \true \}$. \textbf{(a-ii)} Suppose % that $f_{b \full c}(D)(b) \neq \{ \false, \true \}$. \textbf{(a-ii)} Suppose
$f_{b \full c}(D)(b) = \{ \true \}$. Let $D_1 = f_{b' \half \neg c}(D)$, then % $f_{b \full c}(D)(b) = \{ \true \}$. Let $D_1 = f_{b' \half \neg c}(D)$, then
$D_1(b') = \{ \false \}$ by definition and $D_1(v) = D(v), v \not\equiv b'$. % $D_1(b') = \{ \false \}$ by definition and $D_1(v) = D(v), v \not\equiv b'$.
Let $D_2 = f_{b' \full \neg b}(D_1)$ then $D_2(b)= \{ \true \}$ and % Let $D_2 = f_{b' \full \neg b}(D_1)$ then $D_2(b)= \{ \true \}$ and
$D_2(v) = D(v), v \not\in \{b,b'\}$. Then % $D_2(v) = D(v), v \not\in \{b,b'\}$. Then
$D_3 = f_{b \half c}(D_2) = f_{b \full c}(D_2)$ by definition, and by % $D_3 = f_{b \half c}(D_2) = f_{b \full c}(D_2)$ by definition, and by
idempotence of $f_{b \full c}$ and since $D_2$ and $D$ differ only on $b$ and % idempotence of $f_{b \full c}$ and since $D_2$ and $D$ differ only on $b$ and
$b'$ this is a fixpoint of $f_{b \full c}$ and % $b'$ this is a fixpoint of $f_{b \full c}$ and
$D_3(v) = f_{b \full c}(D)(v), v \not \equiv b'$. $D_3$ is also a fixpoint of % $D_3(v) = f_{b \full c}(D)(v), v \not \equiv b'$. $D_3$ is also a fixpoint of
$f_{b \half c}$, $f_{b' \full \neg b}$ and $f_{b' \half \neg c}$ and hence % $f_{b \half c}$, $f_{b' \full \neg b}$ and $f_{b' \half \neg c}$ and hence
$D'' = D_3$. But also $D' = f_{b' \full \neg b}(f_{b \full c}(D)) = D_3$ since % $D'' = D_3$. But also $D' = f_{b' \full \neg b}(f_{b \full c}(D)) = D_3$ since
$D_3$ and $f_{b \full c}(D)$ only differ on $b'$. \textbf{(a-iii)} Suppose % $D_3$ and $f_{b \full c}(D)$ only differ on $b'$. \textbf{(a-iii)} Suppose
$f_{b \full c}(D)(b) = \{ \false \}$. Let $D_1 = f_{b \half c}(D)$, then % $f_{b \full c}(D)(b) = \{ \false \}$. Let $D_1 = f_{b \half c}(D)$, then
$D_1(b) = \{ \false \}$ by definition and $D_1(v) = D(v), v \not\equiv b$. Let % $D_1(b) = \{ \false \}$ by definition and $D_1(v) = D(v), v \not\equiv b$. Let
$D_2 = f_{b' \full \neg b}(D_1)$ then $D_2(b')= \{ \true \}$ and % $D_2 = f_{b' \full \neg b}(D_1)$ then $D_2(b')= \{ \true \}$ and
$D_2(v) = D(v), v \not\in \{b,b'\}$. Then % $D_2(v) = D(v), v \not\in \{b,b'\}$. Then
$D_3 = f_{b' \half \neg c}(D_2) = f_{b \full c}(D_2)$ by definition, and by % $D_3 = f_{b' \half \neg c}(D_2) = f_{b \full c}(D_2)$ by definition, and by
idempotence of $f_{b \full c}$ and since $D_2$ and $D$ differ only on $b$ and % idempotence of $f_{b \full c}$ and since $D_2$ and $D$ differ only on $b$ and
$b'$ this is a fixpoint for $f_{b \half c}$, $f_{b' \full \neg b}$ and % $b'$ this is a fixpoint for $f_{b \half c}$, $f_{b' \full \neg b}$ and
$f_{b' \half \neg c}$ and hence $D'' = D_3$. But also % $f_{b' \half \neg c}$ and hence $D'' = D_3$. But also
$D' = f_{b' \full \neg b}(f_{b \full c}(D)) = D_3$ since $D_3$ and % $D' = f_{b' \full \neg b}(f_{b \full c}(D)) = D_3$ since $D_3$ and
$f_{b \full c}(D)$ only differ on $b'$. % $f_{b \full c}(D)$ only differ on $b'$.
\textbf{(b)} If $D(b) = \{\true\}$ then clearly $f_{b \full c}$ and % \textbf{(b)} If $D(b) = \{\true\}$ then clearly $f_{b \full c}$ and
$f_{b \half c}$ act identically on variables in $vars(c)$. % $f_{b \half c}$ act identically on variables in $vars(c)$.
\textbf{(c)} If $D(b) = \{\false\}$ then $D(b') = \{\true\}$ and clearly % \textbf{(c)} If $D(b) = \{\false\}$ then $D(b') = \{\true\}$ and clearly
$f_{b \full c}$ and $f_{b' \half \neg c}$ act identically on variables in % $f_{b \full c}$ and $f_{b' \half \neg c}$ act identically on variables in
$vars(c)$. \qed % $vars(c)$. \qed
\end{proof} % \end{proof}
The reason for the generality of the above theorem which defines the The reason for the generality of the above theorem which defines the
half-reified propagation strength in terms of the full reified propagator is half-reified propagation strength in terms of the full reified propagator is
@ -2214,11 +2214,12 @@ fully reified propagator leads to the same propagation.
Note that the additional variable $b'$ can be implemented as a view Note that the additional variable $b'$ can be implemented as a view
\autocite{schulte-2005-views} in the solver and hence adds no overhead. \autocite{schulte-2005-views} in the solver and hence adds no overhead.
\begin{corollary} \jip{The corollary environment is also missing}
A domain (resp. bounds(Z), bounds(R)) consistent propagator for $b \full c$ % \begin{corollary}
propagates identically to domain (resp. bounds(Z), bounds(R)) consistent % A domain (resp. bounds(Z), bounds(R)) consistent propagator for $b \full c$
propagators for $b \half c$, $b \full \neg b'$, $b' \half \neg c$. \qed % propagates identically to domain (resp. bounds(Z), bounds(R)) consistent
\end{corollary} % propagators for $b \half c$, $b \full \neg b'$, $b' \half \neg c$. \qed
% \end{corollary}
\section{Propagation and Half Reification} \section{Propagation and Half Reification}
@ -2522,9 +2523,9 @@ Nodes &
In the final experiment we compare resource constrained project scheduling In the final experiment we compare resource constrained project scheduling
problems (RCPSP) where the \texttt{cumulative} constraint is defined by the task problems (RCPSP) where the \texttt{cumulative} constraint is defined by the task
decomposition as in Example~\ref{ex:cumul} above, using both full reification decomposition as in \cref{ex:cumul} above, using both full reification and
and half-reification. We use standard benchmark examples from half-reification. We use standard benchmark examples from PSPlib
PSPlib~\autocite{psplib}. Table~\ref{tab:rcpsp} compares RCPSP instances using \autocite{kolisch-1997-psplib}. \Cref{tab:rcpsp} compares RCPSP instances using
\textsf{full} reification and \textsf{half} reification. We compare using J30 \textsf{full} reification and \textsf{half} reification. We compare using J30
instances (\textsf{J30} ) and instances due to Baptiste and Le Pape instances (\textsf{J30} ) and instances due to Baptiste and Le Pape
(\textsf{BL}). Each line in the table shows the average run time and number of (\textsf{BL}). Each line in the table shows the average run time and number of
@ -2550,7 +2551,6 @@ J30 (x 480) & 116.1 & 300 & 114.3 & 304 & 16.9 & 463 & 12.9 & 468\\
\hline \hline
\end{tabular} \end{tabular}
\end{center} \end{center}
\tableend
\end{table} \end{table}
\subsection{MiniZinc Challenge} \subsection{MiniZinc Challenge}
@ -2559,8 +2559,9 @@ To verify the effectiveness of the half reification implementation within the
\minizinc{} distribution we compare the results of the current version of the \minizinc{} distribution we compare the results of the current version of the
\minizinc{} translator (rev. \jip{add revision}) against the equivalent version \minizinc{} translator (rev. \jip{add revision}) against the equivalent version
for which we have implemented half reification. We use the model instances used for which we have implemented half reification. We use the model instances used
by the \minizinc{} challenges\autocite{challenge} from 2012 until 2017. Note by the \minizinc{} challenges
that the instances that the instances without any reifications have been \autocite{stuckey-2010-challenge,stuckey-2014-challenge} from 2012 until 2017.
Note that the instances that the instances without any reifications have been
excluded from the experiment as they would not experience any change. The excluded from the experiment as they would not experience any change. The
performance of the generated \flatzinc{} models will be tested using Gecode, performance of the generated \flatzinc{} models will be tested using Gecode,
flattened with its own library, and Gurobi and CBC, flattened with the linear flattened with its own library, and Gurobi and CBC, flattened with the linear
@ -2581,7 +2582,6 @@ library.
\hline \hline
\end{tabular} \end{tabular}
\end{center} \end{center}
\tableend
\end{table} \end{table}
\jip{Better headers for table \ref{tab:flat_results} and update with current \jip{Better headers for table \ref{tab:flat_results} and update with current
results} results}
@ -2608,24 +2608,25 @@ of memory running the Ubuntu 16.04.3 LTS operating system.
Half reification on purely Boolean constraints is well understood, this is the Half reification on purely Boolean constraints is well understood, this is the
same as detecting the \emph{polarity} of a gate, and removing half of the same as detecting the \emph{polarity} of a gate, and removing half of the
clausal representation of the circuit (see e.g.~\autocite{polarity}). The clausal representation of the circuit (see \eg\
flattening of functions (partial or total) and the calculation of polarity for \autocite{plaisted-1986-polarity}). The flattening of functions (partial or
Booleans terms inside \texttt{bool2int} do not arise in pure Boolean total) and the calculation of polarity for Booleans terms inside
constraints. \texttt{bool2int} do not arise in pure Boolean constraints.
Half reified constraints have been used in constraint modeling but are typically Half reified constraints have been used in constraint modeling but are typically
not visible as primitive constraints to users, or produced through flattening. not visible as primitive constraints to users, or produced through flattening.
Indexicals~\autocite{indexicals} can be used to implement reified constraints by Indexicals \autocite{van-hentenryck-1992-indexicals} can be used to implement
specifying how to propagate a constraint $c$, %($prop(c)$), reified constraints by specifying how to propagate a constraint
$c$, %($prop(c)$),
propagate its negation, propagate its negation,
%$prop(\neg c)$, %$prop(\neg c)$,
check disentailment, % $check(c)$, check disentailment, % $check(c)$,
and check entailment, %$check(\neg c)$, and check entailment, %$check(\neg c)$,
and this is implemented in SICstus Prolog~\autocite{sicstus}. A half reified and this is implemented in SICstus Prolog \autocite{carlsson-1997-sicstus}. A
propagator simply omits entailment and propagating the negation. half reified propagator simply omits entailment and propagating the negation.
%$prop(\neg c)$ and $check(\neg c)$. % $prop(\neg c)$ and $check(\neg c)$. Half reification was briefly discussed in
%Half reification was briefly discussed in our earlier work~\autocite{cp2009d}, % our earlier work \autocite{cp2009d}, in terms of its ability to reduce
%in terms of its ability to reduce propagation. % propagation.
Half reified constraints appear in some constraint systems, for example SCIP Half reified constraints appear in some constraint systems, for example SCIP
\autocite{gamrath-2020-scip} supports half-reified real linear constraints of \autocite{gamrath-2020-scip} supports half-reified real linear constraints of
the form $b \half \sum_i a_i x_i \leq a_0$ exactly because the negation of the the form $b \half \sum_i a_i x_i \leq a_0$ exactly because the negation of the
@ -2639,11 +2640,11 @@ strongly. Schulte proposes a generic implementation of $b \full c$ propagating
the original variables \autocite*{schulte-2000-deep}; entailment and the original variables \autocite*{schulte-2000-deep}; entailment and
disentailment of $c$ fix the $b$ variable appropriately, although when $b$ is disentailment of $c$ fix the $b$ variable appropriately, although when $b$ is
made $\false$ the implementation does not propagate $\neg c$. This can also be made $\false$ the implementation does not propagate $\neg c$. This can also be
implemented using propagator groups~\autocite{groups}. Brand and Yap define an implemented using propagator groups \autocite{lagerkvist-2009-groups}. Brand and
approach to propagating complex constraint formulae called controlled Yap define an approach to propagating complex constraint formulae called
propagation which ensures that propagators that cannot affect the satisfiability controlled propagation which ensures that propagators that cannot affect the
are not propagated \autocite*{brand-2006-propagation}. They note that for a satisfiability are not propagated \autocite*{brand-2006-propagation}. They note
formula without negation, they could omit half their control rules, that for a formula without negation, they could omit half their control rules,
corresponding to the case for half reification of a positive context. Jefferson corresponding to the case for half reification of a positive context. Jefferson
et al. similarly define an approach to propagating positive constraint formulae et al. similarly define an approach to propagating positive constraint formulae
by using watch literal technology to only wake propagators for reified by using watch literal technology to only wake propagators for reified

View File

@ -671,7 +671,7 @@ model was flattened, then this flattening can be performed without any
trailing. trailing.
\begin{example}\label{ex:6-trail} \begin{example}\label{ex:6-trail}
Let us look again at the resulting \nanozinc\ code from \Cref{ex:absreif}: Let us look again at the resulting \nanozinc\ code from \cref{ex:4-absreif}:
% \mznfile{assets/mzn/6_abs_reif_result.mzn} % \mznfile{assets/mzn/6_abs_reif_result.mzn}

View File

@ -43,7 +43,7 @@ following publication:
\include{chapters/2_background} \include{chapters/2_background}
\include{chapters/3_paradigms} \include{chapters/3_paradigms}
\include{chapters/4_rewriting} \include{chapters/4_rewriting}
% \include{chapters/5_half_reif} \include{chapters/5_half_reif}
\include{chapters/6_incremental} \include{chapters/6_incremental}
\backmatter{} \backmatter{}