\newcommand{\eg}{e.g.,\xspace{}} \newcommand{\ie}{i.e.,\xspace{}} \newcommand{\flatzinc}{\gls{flatzinc}\xspace{}} \newcommand{\microzinc}{\gls{microzinc}\xspace{}} \newcommand{\minisearch}{\gls{minisearch}\xspace{}} \newcommand{\minizinc}{\gls{minizinc}\xspace{}} \newcommand{\nanozinc}{\gls{nanozinc}\xspace{}} \newcommand{\zinc}{\gls{zinc}\xspace{}} \newcommand{\cml}{\gls{constraint-modelling} language\xspace{}} \newcommand{\cmls}{\gls{constraint-modelling} languages\xspace{}} \renewcommand{\phi}{\varphi} \newcommand{\tuple}[1]{\ensuremath{\langle #1 \rangle}} \newcommand{\Prog}{\ensuremath{\mathcal{P}}} \newcommand{\Ctx}{\ensuremath{\phi}} \newcommand{\Env}{\ensuremath{\sigma}} \newcommand{\Sem}[2]{\ptinline{[\!\![#1]\!\!]\tuple{#2}}} \newcommand{\Cbind}{\ensuremath{\wedge}} \newcommand{\undefined}{\ensuremath{\bot}} % Half-reification math things \newcommand{\VV}{{\cal\ V}} \newcommand{\PP}{{\cal\ P}} \newcommand{\range}[2]{\left[\,#1\,..\,#2\,\right]} \newcommand{\gfp}{\textup{gfp}} \newcommand{\lfp}{\textup{lfp}} \newcommand{\iter}{\mathit{iter}} \newcommand{\half}{\Rightarrow} \newcommand{\full}{\Leftrightarrow} \renewcommand{\half}{\rightarrow} \renewcommand{\full}{\leftrightarrow} \newcommand{\entails}{\models} \newcommand{\bigsqcap}{\mathop{\lower.1ex\hbox{\Large$\sqcap$}}} \DeclareMathOperator{\rules}{\mathit{rules}} \DeclareMathOperator{\lazy}{\mathit{lazy}} \DeclareMathOperator{\events}{\mathit{events}} \DeclareMathOperator{\domain}{\mathit{domain}} \DeclareMathOperator{\bc}{\mathit{bc}} \DeclareMathOperator{\lbc}{\mathit{lbc}} \DeclareMathOperator{\ubc}{\mathit{ubc}} \DeclareMathOperator{\dmc}{\mathit{dmc}} \DeclareMathOperator{\fix}{\mathit{fix}} \DeclareMathOperator{\event}{\mathit{event}} \DeclareMathOperator{\minassign}{\mathit{minassign}} \DeclareMathOperator{\assign}{\mathit{assign}} \DeclareMathOperator{\cl}{\mathit{cl}} \DeclareMathOperator{\UP}{\mathit{UP}} \DeclareMathOperator{\up}{\mathit{up}} \DeclareMathOperator{\DOM}{\mathit{DOM}} \DeclareMathOperator{\setb}{\mathit{sb}} \DeclareMathOperator{\bnd}{\mathit{bnd}} \DeclareMathOperator{\dsb}{\mathit{dsb}} \DeclareMathOperator{\vars}{\mathit{vars}} \DeclareMathOperator{\ivars}{\mathit{input}} \DeclareMathOperator{\ovars}{\mathit{output}} \DeclareMathOperator{\solns}{\mathit{solns}} \DeclareMathOperator{\solv}{\mathit{solv}} \DeclareMathOperator{\isolv}{\mathit{isolv}} \DeclareMathOperator{\conv}{\mathit{conv}} \DeclareMathOperator{\ran}{\mathit{ran}} \DeclareMathOperator{\ite}{\mathit{ite}} \DeclareMathOperator{\VAR}{\mathit{VAR}} \DeclareMathOperator{\dom}{\mathit{idx}}