declare 
N=6
fun {Tail _|L} L end 
proc {GenerateAndTest L}
   L={MakeList N}
   L ::: 1#N
   {FD.distribute naive L}
   for 
      X in L
      Y in {Tail L}
   do 
      (X<Y)=true 
   end 
end 
proc {TestAndGenerate L}
   L={MakeList N}
   L ::: 1#N
   for 
      X in L
      Y in {Tail L}
   do 
      thread (X<Y)=true end 
   end 
   {FD.distribute naive L}
end 
proc {PropagateAndDistribute L}
   L={MakeList N}
   L ::: 1#N
   for 
      X in L
      Y in {Tail L}
   do 
      X<:Y
   end 
   {FD.distribute naive L}
end 
 
{ExploreAll GenerateAndTest}
{ExploreAll TestAndGenerate}
{ExploreAll PropagateAndDistribute}
 
 
declare 
proc {Equations Sol}
   X Y Z U V W  
in 
   Sol = solution(x:X y:Y z:Z u:U v:V w:W)
   [X Y Z U V W] ::: 1#7
   X + Y =: 3*Z  
   X - Y =: Z  
   U + W =: 2*Z  
   V + W =: U+V  
   {FD.distribute naive [X Y Z U V W]}
end 
 
{Explorer.all Equations}
 
declare 
proc {Equations Sol}
   X Y Z U V W  
in 
   Sol = solution(x:X y:Y z:Z u:U v:V w:W)
   [X Y Z U V W] ::: 1#7
   thread X + Y = 3*Z end 
   thread X - Y = Z   end 
   thread U + W = 2*Z end 
   thread V + W = U+V end 
   {FD.distribute naive [X Y Z U V W]}
end 
 
{Explorer.all Equations}
 
declare 
proc {Equations Sol}
   X Y Z U V W  
in 
   Sol = solution(x:X y:Y z:Z u:U v:V w:W)
   [X Y Z U V W] ::: 1#7
   {FD.distribute naive [X Y Z U V W]}
   X + Y = 3*Z  
   X - Y = Z  
   U + W = 2*Z  
   V + W = U+V  
end 
 
{Explorer.all Equations}