/*HOUSING EXAMPLE

RUNNING TIME : ~ 85 sec*/

begin%RECURSIVE%

r (1,x1,x2,x3)  :- 4x1 + 3x2 + x3 <= 41.
r (2,x1,x2,x3)  :- 3x1 + 2x2 + x3 <= 41.
r (3,x1,x2,x3)  :- 3x1 + 3x2 + x3 <= 52.
r (4,x1,x2,x3)  :- 2x1 + 2x2 + x3 <= 52.
r (5,x1,x2,x3)  :- 7x1 <= 33, 5x2 + 2x3 <= 64.
r (6,x1,x2,x3)  :- 7x1 + 5x2 + 2x3 <= 64.
r (7,x1,x2,x3)  :- x2 + x3 <= 46.
r (8,x1,x2,x3)  :- 2x1 + x2 <= 46.
r (9,x1,x2,x3)  :- 2x1 + x2 <= 56.
r (10,x1,x2,x3) :- 2x1 + x2 <= 56.
r (11,x1,x2,x3) :- 2x1 + x2 <= 56.
r (12,x1,x2,x3) :- x1 >= 2, x2 >= 1, x3 >= 1.   
ok (0,1).
ok (0,2).
ok (1,3).
ok (2,4).
ok (3,5).
ok (3,6).
ok (4,5).
ok (4,6).
ok (5,7).
ok (6,8).
ok (7,9).
ok (7,10).
ok (7,11).
ok (8,9).
ok (8,10).
ok (8,11).
ok (9,12).
ok (10,12). 
ok (11,12).
can_build (x1,x2,x3) :- p(12,x1,x2,x3).
p (j,x1,x2,x3) :- ok(i,j), p(i,x1,x2,x3), r(j,x1,x2,x3).
p (0,x1,x2,x3).

end%RECURSIVE%