16.3.6 The Solver as a Module

The dominance constraint solver is provided by functor DC.ozf which is made available by package dominance.pkg.

<DC.oz>=
functor 
import 
   FS FD Space
export 
   MakePredicate
   Daughters
   Dominates
   NotEqual
define 
   
<DC: solver procedures> 
end

<DC: solver procedures>=
<DC: daughters> 
<DC: dominates> 
<DC: not equal> 
local 
   
<DC: equal> 
   
<DC: strictly dominates> 
   
<DC: side> 
   
<DC: make node> 
in 
   
<DC: make predicate>   
end

<DC: dominance constraint solver as record>=
local 
   
<DC: solver procedures> 
in  
   DC=dom(makePredicate:MakePredicate
          daughters:Daughters
          dominates:Dominates
          notEqual:NotEqual)
end

In particular, the record DC exports the procedure MakePredicate which turns a dominance constraint into a predicate appropriate as input to encapsulated search as provided by e. g. Explorer.all or Search.all. For example, we could now use the Explorer to search for all possible (constructive) models of DomConExample:

<DC.test.oz>=
declare  
  [DC]={Link ['x-ozlib://oz-kurs/DC.ozf']}
  
<DomConExample> 
in  
  {Explorer.all {DC.makePredicate DomConExample}}


Denys Duchier, Claire Gardent and Joachim Niehren
Version 1.3.99 (20050412)