This file is indexed.

/usr/share/mozart/doc/system/node24.html is in mozart-doc 1.4.0-8ubuntu1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

1
2
3
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>5.10 Reified Constraints</TITLE><LINK href="ozdoc.css" rel="stylesheet" type="text/css"></HEAD><BODY><TABLE align="center" border="0" cellpadding="6" cellspacing="6" class="nav"><TR bgcolor="#DDDDDD"><TD><A href="node23.html#section.fd.bool">&lt;&lt; Prev</A></TD><TD><A href="node14.html">- Up -</A></TD><TD><A href="node25.html#section.fd.misc">Next &gt;&gt;</A></TD></TR></TABLE><DIV id="section.fd.reified"><H2><A name="section.fd.reified">5.10 Reified Constraints</A></H2><P>Reified constraints reflect the validity of a constraint <I>C</I> into a 0/1-valued finite domain integer. The propagator realizing a reified constraint is called the reification propagator. The reification propagators wait in the same way as their non-reified counterparts. All reification propagators constrain their last argument to a 0/1-valued finite domain integer. </P><P>Let <I>C</I> be a constraint and <I>P</I> the corresponding propagator. Reifying <I>C</I> into a 0/1-valued variable <CODE>D</CODE> is defined by</P><P><IMG alt="(C \leftrightarrow \codeinline{oz}{D}=1) \wedge \codeinline{oz}{D} \in \{0,1\}." src="latex91.png"></P><P>This is implemented by </P><BLOCKQUOTE class="code"><CODE>D<SPAN class="keyword">::</SPAN>0<SPAN class="keyword">#</SPAN>1&nbsp;&nbsp;<BR><SPAN class="keyword">or</SPAN>&nbsp;</CODE><CODE><I>P</I></CODE><CODE>&nbsp;D=1<BR><SPAN class="keyword">[]</SPAN>&nbsp;P^N&nbsp;D=0<BR><SPAN class="keyword">end</SPAN></CODE></BLOCKQUOTE><P> Here, <IMG alt="P^N" src="latex92.png"> denotes the negation of <I>P</I> (i.&nbsp;e. a propagator for the negation of the denotational semantics of <I>P</I>).</P><P>If <I>P</I> is one of <CODE>{FD<SPAN class="keyword">.</SPAN>reified<SPAN class="keyword">.</SPAN>int&nbsp;Spec&nbsp;X}</CODE> and <CODE>{FD<SPAN class="keyword">.</SPAN>reified<SPAN class="keyword">.</SPAN>dom&nbsp;Spec&nbsp;Xv}</CODE>, then <IMG alt="P^N" src="latex92.png"> denotes <CODE>{FD<SPAN class="keyword">.</SPAN>reified<SPAN class="keyword">.</SPAN>int&nbsp;ComplSpec&nbsp;X}</CODE> and <CODE>{FD<SPAN class="keyword">.</SPAN>reified<SPAN class="keyword">.</SPAN>dom&nbsp;ComplSpec&nbsp;Xv}</CODE>, respectively (where <CODE>ComplSpec&nbsp;=&nbsp;compl(Spec)</CODE> if <CODE>Spec</CODE> is a simple domain specification, and <CODE>ComplSpec&nbsp;=&nbsp;SSpec</CODE> if <CODE>Spec&nbsp;=&nbsp;compl(SSpec)</CODE>).</P><P>For the propagators <I>P</I> wich are parameterized by a relation symbol <I>A</I>, the symbol of the negated relation occurs in <IMG alt="P^N" src="latex92.png">. For instance, if <I>P</I> is <CODE>{FD<SPAN class="keyword">.</SPAN>sum&nbsp;Ds&nbsp;<SPAN class="string">'&lt;:'</SPAN>&nbsp;X&nbsp;Y}</CODE>, then <IMG alt="P^N" src="latex92.png"> is <CODE>{FD<SPAN class="keyword">.</SPAN>sum&nbsp;Ds&nbsp;<SPAN class="string">'&gt;=:'</SPAN>&nbsp;X&nbsp;Y}</CODE>. </P><DL><DT><A name="label214"></A> <CODE>reified<SPAN class="keyword">.</SPAN>int</CODE></DT><DD><BLOCKQUOTE class="synopsis"><P></P><BLOCKQUOTE class="code"><CODE>{FD<SPAN class="keyword">.</SPAN>reified<SPAN class="keyword">.</SPAN>int&nbsp;</CODE><CODE>+<I>Spec</I></CODE><CODE>&nbsp;</CODE><CODE>*<I>D1</I></CODE><CODE>&nbsp;</CODE><CODE><I>D2</I></CODE><CODE>}</CODE></BLOCKQUOTE><P></P></BLOCKQUOTE></DD><DD><P>reifies <CODE>{FD<SPAN class="keyword">.</SPAN>int&nbsp;Spec&nbsp;D1}</CODE> into <CODE><I>D2</I></CODE>. </P></DD><DT><A name="label216"></A> <CODE>reified<SPAN class="keyword">.</SPAN>dom</CODE></DT><DD><BLOCKQUOTE class="synopsis"><P></P><BLOCKQUOTE class="code"><CODE>{FD<SPAN class="keyword">.</SPAN>reified<SPAN class="keyword">.</SPAN>dom&nbsp;</CODE><CODE>+<I>Spec</I></CODE><CODE>&nbsp;</CODE><CODE><I>Dv</I></CODE><CODE>&nbsp;</CODE><CODE><I>D</I></CODE><CODE>}</CODE></BLOCKQUOTE><P></P></BLOCKQUOTE></DD><DD><P>reifies <CODE>{FD<SPAN class="keyword">.</SPAN>dom&nbsp;Spec&nbsp;Dv}</CODE> into <CODE><I>D</I></CODE>. </P></DD><DT><A name="label218"></A> <CODE>reified<SPAN class="keyword">.</SPAN>sum</CODE></DT><DD><BLOCKQUOTE class="synopsis"><P></P><BLOCKQUOTE class="code"><CODE>{FD<SPAN class="keyword">.</SPAN>reified<SPAN class="keyword">.</SPAN>sum&nbsp;</CODE><CODE>*<I>Dv</I></CODE><CODE>&nbsp;</CODE><CODE>+<I>A</I></CODE><CODE>&nbsp;</CODE><CODE>*<I>D1</I></CODE><CODE>&nbsp;</CODE><CODE><I>D2</I></CODE><CODE>}</CODE></BLOCKQUOTE><P></P></BLOCKQUOTE></DD><DD><P>reifies <CODE>{FD<SPAN class="keyword">.</SPAN>sum&nbsp;Dv&nbsp;A&nbsp;D1}</CODE> into <CODE><I>D2</I></CODE>. </P></DD><DT><A name="label220"></A> <CODE>reified<SPAN class="keyword">.</SPAN>sumC</CODE></DT><DD><BLOCKQUOTE class="synopsis"><P></P><BLOCKQUOTE class="code"><CODE>{FD<SPAN class="keyword">.</SPAN>reified<SPAN class="keyword">.</SPAN>sumC&nbsp;</CODE><CODE>+<I>Iv</I></CODE><CODE>&nbsp;</CODE><CODE>*<I>Dv</I></CODE><CODE>&nbsp;</CODE><CODE>+<I>A</I></CODE><CODE>&nbsp;</CODE><CODE>*<I>D1</I></CODE><CODE>&nbsp;</CODE><CODE><I>D2</I></CODE><CODE>}</CODE></BLOCKQUOTE><P></P></BLOCKQUOTE></DD><DD><P>reifies <CODE>{FD<SPAN class="keyword">.</SPAN>sumC&nbsp;Iv&nbsp;Dv&nbsp;A&nbsp;D1}</CODE> into <CODE><I>D2</I></CODE>. </P></DD><DT><A name="label222"></A> <CODE>reified<SPAN class="keyword">.</SPAN>sumCN</CODE></DT><DD><BLOCKQUOTE class="synopsis"><P></P><BLOCKQUOTE class="code"><CODE>{FD<SPAN class="keyword">.</SPAN>reified<SPAN class="keyword">.</SPAN>sumCN&nbsp;</CODE><CODE>+<I>Iv</I></CODE><CODE>&nbsp;</CODE><CODE>*<I>Dvv</I></CODE><CODE>&nbsp;</CODE><CODE>+<I>A</I></CODE><CODE>&nbsp;</CODE><CODE>*<I>D1</I></CODE><CODE>&nbsp;</CODE><CODE><I>D2</I></CODE><CODE>}&nbsp;</CODE></BLOCKQUOTE><P></P></BLOCKQUOTE></DD><DD><P>reifies <CODE>{FD<SPAN class="keyword">.</SPAN>sumCN&nbsp;Iv&nbsp;Dvv&nbsp;A&nbsp;D1}</CODE> into <CODE><I>D2</I></CODE>. </P></DD><DT><A name="label224"></A> <CODE>reified<SPAN class="keyword">.</SPAN>sumAC</CODE></DT><DD><BLOCKQUOTE class="synopsis"><P></P><BLOCKQUOTE class="code"><CODE>{FD<SPAN class="keyword">.</SPAN>reified<SPAN class="keyword">.</SPAN>sumAC&nbsp;</CODE><CODE>+<I>Iv</I></CODE><CODE>&nbsp;</CODE><CODE>*<I>Dv</I></CODE><CODE>&nbsp;</CODE><CODE>+<I>A</I></CODE><CODE>&nbsp;</CODE><CODE>*<I>D1</I></CODE><CODE>&nbsp;</CODE><CODE><I>D2</I></CODE><CODE>}</CODE></BLOCKQUOTE><P></P></BLOCKQUOTE></DD><DD><P>reifies <CODE>{FD<SPAN class="keyword">.</SPAN>sumAC&nbsp;Iv&nbsp;Dv&nbsp;A&nbsp;D1}</CODE> into <CODE><I>D2</I></CODE>. </P></DD><DT><A name="label226"></A> <CODE>reified<SPAN class="keyword">.</SPAN>sumACN</CODE></DT><DD><BLOCKQUOTE class="synopsis"><P></P><BLOCKQUOTE class="code"><CODE>{FD<SPAN class="keyword">.</SPAN>reified<SPAN class="keyword">.</SPAN>sumACN&nbsp;</CODE><CODE>+<I>Iv</I></CODE><CODE>&nbsp;</CODE><CODE>*<I>Dvv</I></CODE><CODE>&nbsp;</CODE><CODE>+<I>A</I></CODE><CODE>&nbsp;</CODE><CODE>*<I>D1</I></CODE><CODE>&nbsp;</CODE><CODE><I>D2</I></CODE><CODE>}&nbsp;</CODE></BLOCKQUOTE><P></P></BLOCKQUOTE></DD><DD><P>reifies <CODE>{FD<SPAN class="keyword">.</SPAN>sumACN&nbsp;Iv&nbsp;Dvv&nbsp;A&nbsp;D1}</CODE> into <CODE><I>D2</I></CODE>. </P></DD><DT><A name="label228"></A> <CODE>reified<SPAN class="keyword">.</SPAN>distance</CODE></DT><DD><BLOCKQUOTE class="synopsis"><P></P><BLOCKQUOTE class="code"><CODE>{FD<SPAN class="keyword">.</SPAN>reified<SPAN class="keyword">.</SPAN>distance&nbsp;</CODE><CODE>*<I>D1</I></CODE><CODE>&nbsp;</CODE><CODE>*<I>D2</I></CODE><CODE>&nbsp;</CODE><CODE>+<I>A</I></CODE><CODE>&nbsp;</CODE><CODE>*<I>D3</I></CODE><CODE>&nbsp;</CODE><CODE><I>D4</I></CODE><CODE>}</CODE></BLOCKQUOTE><P></P></BLOCKQUOTE></DD><DD><P>reifies <CODE>{FD<SPAN class="keyword">.</SPAN>distance&nbsp;D1&nbsp;D2&nbsp;A&nbsp;D3}</CODE> into <CODE><I>D4</I></CODE>. </P></DD><DT><A name="label230"></A> <CODE>reified<SPAN class="keyword">.</SPAN>card</CODE></DT><DD><BLOCKQUOTE class="synopsis"><P></P><BLOCKQUOTE class="code"><CODE>{FD<SPAN class="keyword">.</SPAN>reified<SPAN class="keyword">.</SPAN>card&nbsp;</CODE><CODE>*<I>D1</I></CODE><CODE>&nbsp;</CODE><CODE>*<I>Dv</I></CODE><CODE>&nbsp;</CODE><CODE>*<I>D2</I></CODE><CODE>&nbsp;</CODE><CODE><I>D3</I></CODE><CODE>}</CODE></BLOCKQUOTE><P></P></BLOCKQUOTE></DD><DD><P><I>Dv</I> is a vector of Boolean variables. <CODE>FD<SPAN class="keyword">.</SPAN>reified<SPAN class="keyword">.</SPAN>card</CODE> creates a propagator for</P><P><IMG alt="(({\tt D1}\leq{\tt D}_1+\ldots+{\tt D}_n\leq{\tt D2}) \leftrightarrow
({\tt D3}=1))\;\wedge\;{\tt D3} \in \{0,1\}." src="latex93.png"></P><P>which reifies into <CODE>D3</CODE> the conjunction </P><BLOCKQUOTE class="code"><CODE>D1&nbsp;<SPAN class="keyword">=&lt;:</SPAN>&nbsp;D1&nbsp;<SPAN class="keyword">+</SPAN>&nbsp;<SPAN class="keyword">...</SPAN>&nbsp;<SPAN class="keyword">+</SPAN>&nbsp;Dn<BR>D1&nbsp;<SPAN class="keyword">+</SPAN>&nbsp;<SPAN class="keyword">...</SPAN>&nbsp;<SPAN class="keyword">+</SPAN>&nbsp;Dn&nbsp;<SPAN class="keyword">=&lt;:</SPAN>&nbsp;D2&nbsp;</CODE></BLOCKQUOTE><P> </P><P>More specifically, its operational semantics is defined through </P><BLOCKQUOTE class="code"><CODE>D3&nbsp;<SPAN class="keyword">::</SPAN>&nbsp;0<SPAN class="keyword">#</SPAN>1<BR><SPAN class="keyword">or</SPAN>&nbsp;D1&nbsp;<SPAN class="keyword">=&lt;:</SPAN>&nbsp;D1&nbsp;<SPAN class="keyword">+</SPAN>&nbsp;<SPAN class="keyword">...</SPAN>&nbsp;<SPAN class="keyword">+</SPAN>&nbsp;Dn&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;D1&nbsp;<SPAN class="keyword">+</SPAN>&nbsp;<SPAN class="keyword">...</SPAN>&nbsp;<SPAN class="keyword">+</SPAN>&nbsp;Dn&nbsp;<SPAN class="keyword">=&lt;:</SPAN>&nbsp;D2<BR>&nbsp;&nbsp;&nbsp;D3&nbsp;=&nbsp;1<BR><SPAN class="keyword">[]</SPAN>&nbsp;<SPAN class="keyword">or</SPAN>&nbsp;D1&nbsp;<SPAN class="keyword">&gt;:</SPAN>&nbsp;D1&nbsp;<SPAN class="keyword">+</SPAN>&nbsp;<SPAN class="keyword">...</SPAN>&nbsp;<SPAN class="keyword">+</SPAN>&nbsp;Dn&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<SPAN class="keyword">[]</SPAN>&nbsp;D1&nbsp;<SPAN class="keyword">+</SPAN>&nbsp;<SPAN class="keyword">...</SPAN>&nbsp;<SPAN class="keyword">+</SPAN>&nbsp;Dn&nbsp;<SPAN class="keyword">&gt;:</SPAN>&nbsp;D2<BR>&nbsp;&nbsp;&nbsp;<SPAN class="keyword">end</SPAN>&nbsp;<BR>&nbsp;&nbsp;&nbsp;D3&nbsp;=&nbsp;0<BR><SPAN class="keyword">end</SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</CODE></BLOCKQUOTE><P></P></DD></DL><P></P></DIV><TABLE align="center" border="0" cellpadding="6" cellspacing="6" class="nav"><TR bgcolor="#DDDDDD"><TD><A href="node23.html#section.fd.bool">&lt;&lt; Prev</A></TD><TD><A href="node14.html">- Up -</A></TD><TD><A href="node25.html#section.fd.misc">Next &gt;&gt;</A></TD></TR></TABLE><HR><ADDRESS><A href="http://www.ps.uni-sb.de/~duchier/">Denys&nbsp;Duchier</A>, <A href="http://www.ps.uni-sb.de/~kornstae/">Leif&nbsp;Kornstaedt</A>, <A href="http://www.ps.uni-sb.de/~homik/">Martin&nbsp;Homik</A>, <A href="http://www.ps.uni-sb.de/~tmueller/">Tobias&nbsp;Müller</A>, <A href="http://www.ps.uni-sb.de/~schulte/">Christian&nbsp;Schulte</A> and&nbsp;<A href="http://www.info.ucl.ac.be/~pvr">Peter&nbsp;Van Roy</A><BR><SPAN class="version">Version 1.4.0 (20110908185330)</SPAN></ADDRESS></BODY></HTML>