title: reified and half-reified predicates
body: <p>It has been recently brought to my attention that some recent version of <code>FlatZinc</code> supports <em>half-reified predicates</em>:</p>
  
  <blockquote>
    <p><strong>Half-reified</strong> predicates essentially represent constraints that are implied by a Boolean variable rather than being equivalent to one.</p>
    
    <p>source: <a href="https://www.minizinc.org/doc-2.4.3/en/fzn-spec.html?highlight=half%20reified#reified-and-half-reified-predicates" rel="nofollow noreferrer">docs</a></p>
  </blockquote>
  
  <p><strong>Q:</strong></p>
  
  <ul>
  <li>do all <em>global predicates</em> have a <code>_reif</code> version now? </li>
  <li>do all <em>global predicates</em> have a <code>_imp</code> version too?</li>
  </ul>
  
  <p>Looking at the content of <code>share/minizinc/</code> I can see that inside <code>std</code> only <code>nosets.mzn</code> uses <code>_imp</code> predicates, so my impression is that it is not yet mandatory to support <code>_imp</code> predicates. <strong>Q:</strong> Is this correct?</p>
  
  <p>Looking at the docs, I found this:</p>
  
  <blockquote>
    <p>Solver libraries should therefore provide reified versions of constraints whenever possible. The library contains files <code>fzn__reif.mzn</code> for this purpose.</p>
    
    <p>source: <a href="https://www.minizinc.org/doc-2.4.3/en/fzn-spec.html?highlight=half%20reified#reified-and-half-reified-predicates" rel="nofollow noreferrer">docs</a></p>
  </blockquote>
  
  <p>If I interpret it correctly, it is not necessary to support <code>_reif</code> predicates because they are already redefined in <code>share/minizinc</code> (although it can be beneficial for performance). <strong>Q:</strong> Is this correct?</p>