%%% A test HYPROLOG test program %%% %%% A planning problem formulated as abduction %%% %%% (c) Henning Christiansen 2008 %%% %%% See comments below or the following reference for details about the example %%% %%% H. Christiansen. %%% Executable specifications for hypothesis-based reasoning with %%% Prolog and Constraint Handling Rules, %%% Journal of Applied Logic, to appear 2008 or -09. %%% Preliminary version available at %%% http://www.ruc.dk/~henning/publications/HypoReason2008_HC.pdf allow_duplicate_abducibles. no_explicit_negation. abducibles put_in_place/2. % put_in_place(Object,Time) %%% An integrity constraint: %%% - a part cannot be placed earlier that a part that supports it. put_in_place(P0,Time0), put_in_place(P1,Time1) ==> supports(P0,P1), Time0 > Time1 | fail. %%% Another integrity constraints %%% - building houses of cards, two slanting cards touching each other in the %%% top must be placed at successive moments. put_in_place(card(N,L,l),Time0), put_in_place(card(N,L,r),Time1) ==> 1 is abs(Time1-Time0). %%% Clauses; use ?- build. as initial query build:- height(H), write('Height='),write(H),nl, statistics(runtime,_), put_in_place(soil,0), parts(Parts), build(Parts,1), statistics(runtime,[_,T]), write('Used : '),write(T), write(ms), suppress_print. build([],_). build(Parts,Time):- takePart(P,Parts,RestParts), put_in_place(P,Time), Time1 is Time+1, build(RestParts,Time1). :- chr_constraint suppress_print/0. suppress_print \ put_in_place(_,_)#X <=> true pragma passive(X). /****************************** We build a house of cards /\ /__\ /\ /\ /__\/__\ ....... /\ /\ /\ ........ /__\/__\/__\ ============================= We number each layer n: 1,2,... starting from the top, and each "triangle" from the left m: 1,2,... and the cards involved as left (l), right (r) and bottom (b). For ease of programming we assume there are B cards also at the bottom layer, and they are put on the soil. The term card(n,m,L) is card in n'the layer, m't triable and Left ******************************/ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % BEGIN - GENERATED BY write_house(n) defined at bottom of file parts([card(15,15,b), card(15,15,l), card(15,15,r), card(15,14,b), card(15,14,l), card(15,14,r), card(15,13,b), card(15,13,l), card(15,13,r), card(15,12,b), card(15,12,l), card(15,12,r), card(15,11,b), card(15,11,l), card(15,11,r), card(15,10,b), card(15,10,l), card(15,10,r), card(15,9,b), card(15,9,l), card(15,9,r), card(15,8,b), card(15,8,l), card(15,8,r), card(15,7,b), card(15,7,l), card(15,7,r), card(15,6,b), card(15,6,l), card(15,6,r), card(15,5,b), card(15,5,l), card(15,5,r), card(15,4,b), card(15,4,l), card(15,4,r), card(15,3,b), card(15,3,l), card(15,3,r), card(15,2,b), card(15,2,l), card(15,2,r), card(15,1,b), card(15,1,l), card(15,1,r), card(14,14,b), card(14,14,l), card(14,14,r), card(14,13,b), card(14,13,l), card(14,13,r), card(14,12,b), card(14,12,l), card(14,12,r), card(14,11,b), card(14,11,l), card(14,11,r), card(14,10,b), card(14,10,l), card(14,10,r), card(14,9,b), card(14,9,l), card(14,9,r), card(14,8,b), card(14,8,l), card(14,8,r), card(14,7,b), card(14,7,l), card(14,7,r), card(14,6,b), card(14,6,l), card(14,6,r), card(14,5,b), card(14,5,l), card(14,5,r), card(14,4,b), card(14,4,l), card(14,4,r), card(14,3,b), card(14,3,l), card(14,3,r), card(14,2,b), card(14,2,l), card(14,2,r), card(14,1,b), card(14,1,l), card(14,1,r), card(13,13,b), card(13,13,l), card(13,13,r), card(13,12,b), card(13,12,l), card(13,12,r), card(13,11,b), card(13,11,l), card(13,11,r), card(13,10,b), card(13,10,l), card(13,10,r), card(13,9,b), card(13,9,l), card(13,9,r), card(13,8,b), card(13,8,l), card(13,8,r), card(13,7,b), card(13,7,l), card(13,7,r), card(13,6,b), card(13,6,l), card(13,6,r), card(13,5,b), card(13,5,l), card(13,5,r), card(13,4,b), card(13,4,l), card(13,4,r), card(13,3,b), card(13,3,l), card(13,3,r), card(13,2,b), card(13,2,l), card(13,2,r), card(13,1,b), card(13,1,l), card(13,1,r), card(12,12,b), card(12,12,l), card(12,12,r), card(12,11,b), card(12,11,l), card(12,11,r), card(12,10,b), card(12,10,l), card(12,10,r), card(12,9,b), card(12,9,l), card(12,9,r), card(12,8,b), card(12,8,l), card(12,8,r), card(12,7,b), card(12,7,l), card(12,7,r), card(12,6,b), card(12,6,l), card(12,6,r), card(12,5,b), card(12,5,l), card(12,5,r), card(12,4,b), card(12,4,l), card(12,4,r), card(12,3,b), card(12,3,l), card(12,3,r), card(12,2,b), card(12,2,l), card(12,2,r), card(12,1,b), card(12,1,l), card(12,1,r), card(11,11,b), card(11,11,l), card(11,11,r), card(11,10,b), card(11,10,l), card(11,10,r), card(11,9,b), card(11,9,l), card(11,9,r), card(11,8,b), card(11,8,l), card(11,8,r), card(11,7,b), card(11,7,l), card(11,7,r), card(11,6,b), card(11,6,l), card(11,6,r), card(11,5,b), card(11,5,l), card(11,5,r), card(11,4,b), card(11,4,l), card(11,4,r), card(11,3,b), card(11,3,l), card(11,3,r), card(11,2,b), card(11,2,l), card(11,2,r), card(11,1,b), card(11,1,l), card(11,1,r), card(10,10,b), card(10,10,l), card(10,10,r), card(10,9,b), card(10,9,l), card(10,9,r), card(10,8,b), card(10,8,l), card(10,8,r), card(10,7,b), card(10,7,l), card(10,7,r), card(10,6,b), card(10,6,l), card(10,6,r), card(10,5,b), card(10,5,l), card(10,5,r), card(10,4,b), card(10,4,l), card(10,4,r), card(10,3,b), card(10,3,l), card(10,3,r), card(10,2,b), card(10,2,l), card(10,2,r), card(10,1,b), card(10,1,l), card(10,1,r), card(9,9,b), card(9,9,l), card(9,9,r), card(9,8,b), card(9,8,l), card(9,8,r), card(9,7,b), card(9,7,l), card(9,7,r), card(9,6,b), card(9,6,l), card(9,6,r), card(9,5,b), card(9,5,l), card(9,5,r), card(9,4,b), card(9,4,l), card(9,4,r), card(9,3,b), card(9,3,l), card(9,3,r), card(9,2,b), card(9,2,l), card(9,2,r), card(9,1,b), card(9,1,l), card(9,1,r), card(8,8,b), card(8,8,l), card(8,8,r), card(8,7,b), card(8,7,l), card(8,7,r), card(8,6,b), card(8,6,l), card(8,6,r), card(8,5,b), card(8,5,l), card(8,5,r), card(8,4,b), card(8,4,l), card(8,4,r), card(8,3,b), card(8,3,l), card(8,3,r), card(8,2,b), card(8,2,l), card(8,2,r), card(8,1,b), card(8,1,l), card(8,1,r), card(7,7,b), card(7,7,l), card(7,7,r), card(7,6,b), card(7,6,l), card(7,6,r), card(7,5,b), card(7,5,l), card(7,5,r), card(7,4,b), card(7,4,l), card(7,4,r), card(7,3,b), card(7,3,l), card(7,3,r), card(7,2,b), card(7,2,l), card(7,2,r), card(7,1,b), card(7,1,l), card(7,1,r), card(6,6,b), card(6,6,l), card(6,6,r), card(6,5,b), card(6,5,l), card(6,5,r), card(6,4,b), card(6,4,l), card(6,4,r), card(6,3,b), card(6,3,l), card(6,3,r), card(6,2,b), card(6,2,l), card(6,2,r), card(6,1,b), card(6,1,l), card(6,1,r), card(5,5,b), card(5,5,l), card(5,5,r), card(5,4,b), card(5,4,l), card(5,4,r), card(5,3,b), card(5,3,l), card(5,3,r), card(5,2,b), card(5,2,l), card(5,2,r), card(5,1,b), card(5,1,l), card(5,1,r), card(4,4,b), card(4,4,l), card(4,4,r), card(4,3,b), card(4,3,l), card(4,3,r), card(4,2,b), card(4,2,l), card(4,2,r), card(4,1,b), card(4,1,l), card(4,1,r), card(3,3,b), card(3,3,l), card(3,3,r), card(3,2,b), card(3,2,l), card(3,2,r), card(3,1,b), card(3,1,l), card(3,1,r), card(2,2,b), card(2,2,l), card(2,2,r), card(2,1,b), card(2,1,l), card(2,1,r), card(1,1,b), card(1,1,l), card(1,1,r)]). supports(card(15,15,b),card(15,15,l)). supports(card(15,15,b),card(15,15,r)). supports(card(15,15,l),card(14,14,b)). supports(card(15,15,r),card(14,14,b)). supports(card(15,14,b),card(15,14,l)). supports(card(15,14,b),card(15,14,r)). supports(card(15,14,l),card(14,13,b)). supports(card(15,14,r),card(14,13,b)). supports(card(15,14,l),card(14,14,b)). supports(card(15,14,r),card(14,14,b)). supports(card(15,13,b),card(15,13,l)). supports(card(15,13,b),card(15,13,r)). supports(card(15,13,l),card(14,12,b)). supports(card(15,13,r),card(14,12,b)). supports(card(15,13,l),card(14,13,b)). supports(card(15,13,r),card(14,13,b)). supports(card(15,12,b),card(15,12,l)). supports(card(15,12,b),card(15,12,r)). supports(card(15,12,l),card(14,11,b)). supports(card(15,12,r),card(14,11,b)). supports(card(15,12,l),card(14,12,b)). supports(card(15,12,r),card(14,12,b)). supports(card(15,11,b),card(15,11,l)). supports(card(15,11,b),card(15,11,r)). supports(card(15,11,l),card(14,10,b)). supports(card(15,11,r),card(14,10,b)). supports(card(15,11,l),card(14,11,b)). supports(card(15,11,r),card(14,11,b)). supports(card(15,10,b),card(15,10,l)). supports(card(15,10,b),card(15,10,r)). supports(card(15,10,l),card(14,9,b)). supports(card(15,10,r),card(14,9,b)). supports(card(15,10,l),card(14,10,b)). supports(card(15,10,r),card(14,10,b)). supports(card(15,9,b),card(15,9,l)). supports(card(15,9,b),card(15,9,r)). supports(card(15,9,l),card(14,8,b)). supports(card(15,9,r),card(14,8,b)). supports(card(15,9,l),card(14,9,b)). supports(card(15,9,r),card(14,9,b)). supports(card(15,8,b),card(15,8,l)). supports(card(15,8,b),card(15,8,r)). supports(card(15,8,l),card(14,7,b)). supports(card(15,8,r),card(14,7,b)). supports(card(15,8,l),card(14,8,b)). supports(card(15,8,r),card(14,8,b)). supports(card(15,7,b),card(15,7,l)). supports(card(15,7,b),card(15,7,r)). supports(card(15,7,l),card(14,6,b)). supports(card(15,7,r),card(14,6,b)). supports(card(15,7,l),card(14,7,b)). supports(card(15,7,r),card(14,7,b)). supports(card(15,6,b),card(15,6,l)). supports(card(15,6,b),card(15,6,r)). supports(card(15,6,l),card(14,5,b)). supports(card(15,6,r),card(14,5,b)). supports(card(15,6,l),card(14,6,b)). supports(card(15,6,r),card(14,6,b)). supports(card(15,5,b),card(15,5,l)). supports(card(15,5,b),card(15,5,r)). supports(card(15,5,l),card(14,4,b)). supports(card(15,5,r),card(14,4,b)). supports(card(15,5,l),card(14,5,b)). supports(card(15,5,r),card(14,5,b)). supports(card(15,4,b),card(15,4,l)). supports(card(15,4,b),card(15,4,r)). supports(card(15,4,l),card(14,3,b)). supports(card(15,4,r),card(14,3,b)). supports(card(15,4,l),card(14,4,b)). supports(card(15,4,r),card(14,4,b)). supports(card(15,3,b),card(15,3,l)). supports(card(15,3,b),card(15,3,r)). supports(card(15,3,l),card(14,2,b)). supports(card(15,3,r),card(14,2,b)). supports(card(15,3,l),card(14,3,b)). supports(card(15,3,r),card(14,3,b)). supports(card(15,2,b),card(15,2,l)). supports(card(15,2,b),card(15,2,r)). supports(card(15,2,l),card(14,1,b)). supports(card(15,2,r),card(14,1,b)). supports(card(15,2,l),card(14,2,b)). supports(card(15,2,r),card(14,2,b)). supports(card(15,1,b),card(15,1,l)). supports(card(15,1,b),card(15,1,r)). supports(card(15,1,l),card(14,1,b)). supports(card(15,1,r),card(14,1,b)). supports(card(14,14,b),card(14,14,l)). supports(card(14,14,b),card(14,14,r)). supports(card(14,14,l),card(13,13,b)). supports(card(14,14,r),card(13,13,b)). supports(card(14,13,b),card(14,13,l)). supports(card(14,13,b),card(14,13,r)). supports(card(14,13,l),card(13,12,b)). supports(card(14,13,r),card(13,12,b)). supports(card(14,13,l),card(13,13,b)). supports(card(14,13,r),card(13,13,b)). supports(card(14,12,b),card(14,12,l)). supports(card(14,12,b),card(14,12,r)). supports(card(14,12,l),card(13,11,b)). supports(card(14,12,r),card(13,11,b)). supports(card(14,12,l),card(13,12,b)). supports(card(14,12,r),card(13,12,b)). supports(card(14,11,b),card(14,11,l)). supports(card(14,11,b),card(14,11,r)). supports(card(14,11,l),card(13,10,b)). supports(card(14,11,r),card(13,10,b)). supports(card(14,11,l),card(13,11,b)). supports(card(14,11,r),card(13,11,b)). supports(card(14,10,b),card(14,10,l)). supports(card(14,10,b),card(14,10,r)). supports(card(14,10,l),card(13,9,b)). supports(card(14,10,r),card(13,9,b)). supports(card(14,10,l),card(13,10,b)). supports(card(14,10,r),card(13,10,b)). supports(card(14,9,b),card(14,9,l)). supports(card(14,9,b),card(14,9,r)). supports(card(14,9,l),card(13,8,b)). supports(card(14,9,r),card(13,8,b)). supports(card(14,9,l),card(13,9,b)). supports(card(14,9,r),card(13,9,b)). supports(card(14,8,b),card(14,8,l)). supports(card(14,8,b),card(14,8,r)). supports(card(14,8,l),card(13,7,b)). supports(card(14,8,r),card(13,7,b)). supports(card(14,8,l),card(13,8,b)). supports(card(14,8,r),card(13,8,b)). supports(card(14,7,b),card(14,7,l)). supports(card(14,7,b),card(14,7,r)). supports(card(14,7,l),card(13,6,b)). supports(card(14,7,r),card(13,6,b)). supports(card(14,7,l),card(13,7,b)). supports(card(14,7,r),card(13,7,b)). supports(card(14,6,b),card(14,6,l)). supports(card(14,6,b),card(14,6,r)). supports(card(14,6,l),card(13,5,b)). supports(card(14,6,r),card(13,5,b)). supports(card(14,6,l),card(13,6,b)). supports(card(14,6,r),card(13,6,b)). supports(card(14,5,b),card(14,5,l)). supports(card(14,5,b),card(14,5,r)). supports(card(14,5,l),card(13,4,b)). supports(card(14,5,r),card(13,4,b)). supports(card(14,5,l),card(13,5,b)). supports(card(14,5,r),card(13,5,b)). supports(card(14,4,b),card(14,4,l)). supports(card(14,4,b),card(14,4,r)). supports(card(14,4,l),card(13,3,b)). supports(card(14,4,r),card(13,3,b)). supports(card(14,4,l),card(13,4,b)). supports(card(14,4,r),card(13,4,b)). supports(card(14,3,b),card(14,3,l)). supports(card(14,3,b),card(14,3,r)). supports(card(14,3,l),card(13,2,b)). supports(card(14,3,r),card(13,2,b)). supports(card(14,3,l),card(13,3,b)). supports(card(14,3,r),card(13,3,b)). supports(card(14,2,b),card(14,2,l)). supports(card(14,2,b),card(14,2,r)). supports(card(14,2,l),card(13,1,b)). supports(card(14,2,r),card(13,1,b)). supports(card(14,2,l),card(13,2,b)). supports(card(14,2,r),card(13,2,b)). supports(card(14,1,b),card(14,1,l)). supports(card(14,1,b),card(14,1,r)). supports(card(14,1,l),card(13,1,b)). supports(card(14,1,r),card(13,1,b)). supports(card(13,13,b),card(13,13,l)). supports(card(13,13,b),card(13,13,r)). supports(card(13,13,l),card(12,12,b)). supports(card(13,13,r),card(12,12,b)). supports(card(13,12,b),card(13,12,l)). supports(card(13,12,b),card(13,12,r)). supports(card(13,12,l),card(12,11,b)). supports(card(13,12,r),card(12,11,b)). supports(card(13,12,l),card(12,12,b)). supports(card(13,12,r),card(12,12,b)). supports(card(13,11,b),card(13,11,l)). supports(card(13,11,b),card(13,11,r)). supports(card(13,11,l),card(12,10,b)). supports(card(13,11,r),card(12,10,b)). supports(card(13,11,l),card(12,11,b)). supports(card(13,11,r),card(12,11,b)). supports(card(13,10,b),card(13,10,l)). supports(card(13,10,b),card(13,10,r)). supports(card(13,10,l),card(12,9,b)). supports(card(13,10,r),card(12,9,b)). supports(card(13,10,l),card(12,10,b)). supports(card(13,10,r),card(12,10,b)). supports(card(13,9,b),card(13,9,l)). supports(card(13,9,b),card(13,9,r)). supports(card(13,9,l),card(12,8,b)). supports(card(13,9,r),card(12,8,b)). supports(card(13,9,l),card(12,9,b)). supports(card(13,9,r),card(12,9,b)). supports(card(13,8,b),card(13,8,l)). supports(card(13,8,b),card(13,8,r)). supports(card(13,8,l),card(12,7,b)). supports(card(13,8,r),card(12,7,b)). supports(card(13,8,l),card(12,8,b)). supports(card(13,8,r),card(12,8,b)). supports(card(13,7,b),card(13,7,l)). supports(card(13,7,b),card(13,7,r)). supports(card(13,7,l),card(12,6,b)). supports(card(13,7,r),card(12,6,b)). supports(card(13,7,l),card(12,7,b)). supports(card(13,7,r),card(12,7,b)). supports(card(13,6,b),card(13,6,l)). supports(card(13,6,b),card(13,6,r)). supports(card(13,6,l),card(12,5,b)). supports(card(13,6,r),card(12,5,b)). supports(card(13,6,l),card(12,6,b)). supports(card(13,6,r),card(12,6,b)). supports(card(13,5,b),card(13,5,l)). supports(card(13,5,b),card(13,5,r)). supports(card(13,5,l),card(12,4,b)). supports(card(13,5,r),card(12,4,b)). supports(card(13,5,l),card(12,5,b)). supports(card(13,5,r),card(12,5,b)). supports(card(13,4,b),card(13,4,l)). supports(card(13,4,b),card(13,4,r)). supports(card(13,4,l),card(12,3,b)). supports(card(13,4,r),card(12,3,b)). supports(card(13,4,l),card(12,4,b)). supports(card(13,4,r),card(12,4,b)). supports(card(13,3,b),card(13,3,l)). supports(card(13,3,b),card(13,3,r)). supports(card(13,3,l),card(12,2,b)). supports(card(13,3,r),card(12,2,b)). supports(card(13,3,l),card(12,3,b)). supports(card(13,3,r),card(12,3,b)). supports(card(13,2,b),card(13,2,l)). supports(card(13,2,b),card(13,2,r)). supports(card(13,2,l),card(12,1,b)). supports(card(13,2,r),card(12,1,b)). supports(card(13,2,l),card(12,2,b)). supports(card(13,2,r),card(12,2,b)). supports(card(13,1,b),card(13,1,l)). supports(card(13,1,b),card(13,1,r)). supports(card(13,1,l),card(12,1,b)). supports(card(13,1,r),card(12,1,b)). supports(card(12,12,b),card(12,12,l)). supports(card(12,12,b),card(12,12,r)). supports(card(12,12,l),card(11,11,b)). supports(card(12,12,r),card(11,11,b)). supports(card(12,11,b),card(12,11,l)). supports(card(12,11,b),card(12,11,r)). supports(card(12,11,l),card(11,10,b)). supports(card(12,11,r),card(11,10,b)). supports(card(12,11,l),card(11,11,b)). supports(card(12,11,r),card(11,11,b)). supports(card(12,10,b),card(12,10,l)). supports(card(12,10,b),card(12,10,r)). supports(card(12,10,l),card(11,9,b)). supports(card(12,10,r),card(11,9,b)). supports(card(12,10,l),card(11,10,b)). supports(card(12,10,r),card(11,10,b)). supports(card(12,9,b),card(12,9,l)). supports(card(12,9,b),card(12,9,r)). supports(card(12,9,l),card(11,8,b)). supports(card(12,9,r),card(11,8,b)). supports(card(12,9,l),card(11,9,b)). supports(card(12,9,r),card(11,9,b)). supports(card(12,8,b),card(12,8,l)). supports(card(12,8,b),card(12,8,r)). supports(card(12,8,l),card(11,7,b)). supports(card(12,8,r),card(11,7,b)). supports(card(12,8,l),card(11,8,b)). supports(card(12,8,r),card(11,8,b)). supports(card(12,7,b),card(12,7,l)). supports(card(12,7,b),card(12,7,r)). supports(card(12,7,l),card(11,6,b)). supports(card(12,7,r),card(11,6,b)). supports(card(12,7,l),card(11,7,b)). supports(card(12,7,r),card(11,7,b)). supports(card(12,6,b),card(12,6,l)). supports(card(12,6,b),card(12,6,r)). supports(card(12,6,l),card(11,5,b)). supports(card(12,6,r),card(11,5,b)). supports(card(12,6,l),card(11,6,b)). supports(card(12,6,r),card(11,6,b)). supports(card(12,5,b),card(12,5,l)). supports(card(12,5,b),card(12,5,r)). supports(card(12,5,l),card(11,4,b)). supports(card(12,5,r),card(11,4,b)). supports(card(12,5,l),card(11,5,b)). supports(card(12,5,r),card(11,5,b)). supports(card(12,4,b),card(12,4,l)). supports(card(12,4,b),card(12,4,r)). supports(card(12,4,l),card(11,3,b)). supports(card(12,4,r),card(11,3,b)). supports(card(12,4,l),card(11,4,b)). supports(card(12,4,r),card(11,4,b)). supports(card(12,3,b),card(12,3,l)). supports(card(12,3,b),card(12,3,r)). supports(card(12,3,l),card(11,2,b)). supports(card(12,3,r),card(11,2,b)). supports(card(12,3,l),card(11,3,b)). supports(card(12,3,r),card(11,3,b)). supports(card(12,2,b),card(12,2,l)). supports(card(12,2,b),card(12,2,r)). supports(card(12,2,l),card(11,1,b)). supports(card(12,2,r),card(11,1,b)). supports(card(12,2,l),card(11,2,b)). supports(card(12,2,r),card(11,2,b)). supports(card(12,1,b),card(12,1,l)). supports(card(12,1,b),card(12,1,r)). supports(card(12,1,l),card(11,1,b)). supports(card(12,1,r),card(11,1,b)). supports(card(11,11,b),card(11,11,l)). supports(card(11,11,b),card(11,11,r)). supports(card(11,11,l),card(10,10,b)). supports(card(11,11,r),card(10,10,b)). supports(card(11,10,b),card(11,10,l)). supports(card(11,10,b),card(11,10,r)). supports(card(11,10,l),card(10,9,b)). supports(card(11,10,r),card(10,9,b)). supports(card(11,10,l),card(10,10,b)). supports(card(11,10,r),card(10,10,b)). supports(card(11,9,b),card(11,9,l)). supports(card(11,9,b),card(11,9,r)). supports(card(11,9,l),card(10,8,b)). supports(card(11,9,r),card(10,8,b)). supports(card(11,9,l),card(10,9,b)). supports(card(11,9,r),card(10,9,b)). supports(card(11,8,b),card(11,8,l)). supports(card(11,8,b),card(11,8,r)). supports(card(11,8,l),card(10,7,b)). supports(card(11,8,r),card(10,7,b)). supports(card(11,8,l),card(10,8,b)). supports(card(11,8,r),card(10,8,b)). supports(card(11,7,b),card(11,7,l)). supports(card(11,7,b),card(11,7,r)). supports(card(11,7,l),card(10,6,b)). supports(card(11,7,r),card(10,6,b)). supports(card(11,7,l),card(10,7,b)). supports(card(11,7,r),card(10,7,b)). supports(card(11,6,b),card(11,6,l)). supports(card(11,6,b),card(11,6,r)). supports(card(11,6,l),card(10,5,b)). supports(card(11,6,r),card(10,5,b)). supports(card(11,6,l),card(10,6,b)). supports(card(11,6,r),card(10,6,b)). supports(card(11,5,b),card(11,5,l)). supports(card(11,5,b),card(11,5,r)). supports(card(11,5,l),card(10,4,b)). supports(card(11,5,r),card(10,4,b)). supports(card(11,5,l),card(10,5,b)). supports(card(11,5,r),card(10,5,b)). supports(card(11,4,b),card(11,4,l)). supports(card(11,4,b),card(11,4,r)). supports(card(11,4,l),card(10,3,b)). supports(card(11,4,r),card(10,3,b)). supports(card(11,4,l),card(10,4,b)). supports(card(11,4,r),card(10,4,b)). supports(card(11,3,b),card(11,3,l)). supports(card(11,3,b),card(11,3,r)). supports(card(11,3,l),card(10,2,b)). supports(card(11,3,r),card(10,2,b)). supports(card(11,3,l),card(10,3,b)). supports(card(11,3,r),card(10,3,b)). supports(card(11,2,b),card(11,2,l)). supports(card(11,2,b),card(11,2,r)). supports(card(11,2,l),card(10,1,b)). supports(card(11,2,r),card(10,1,b)). supports(card(11,2,l),card(10,2,b)). supports(card(11,2,r),card(10,2,b)). supports(card(11,1,b),card(11,1,l)). supports(card(11,1,b),card(11,1,r)). supports(card(11,1,l),card(10,1,b)). supports(card(11,1,r),card(10,1,b)). supports(card(10,10,b),card(10,10,l)). supports(card(10,10,b),card(10,10,r)). supports(card(10,10,l),card(9,9,b)). supports(card(10,10,r),card(9,9,b)). supports(card(10,9,b),card(10,9,l)). supports(card(10,9,b),card(10,9,r)). supports(card(10,9,l),card(9,8,b)). supports(card(10,9,r),card(9,8,b)). supports(card(10,9,l),card(9,9,b)). supports(card(10,9,r),card(9,9,b)). supports(card(10,8,b),card(10,8,l)). supports(card(10,8,b),card(10,8,r)). supports(card(10,8,l),card(9,7,b)). supports(card(10,8,r),card(9,7,b)). supports(card(10,8,l),card(9,8,b)). supports(card(10,8,r),card(9,8,b)). supports(card(10,7,b),card(10,7,l)). supports(card(10,7,b),card(10,7,r)). supports(card(10,7,l),card(9,6,b)). supports(card(10,7,r),card(9,6,b)). supports(card(10,7,l),card(9,7,b)). supports(card(10,7,r),card(9,7,b)). supports(card(10,6,b),card(10,6,l)). supports(card(10,6,b),card(10,6,r)). supports(card(10,6,l),card(9,5,b)). supports(card(10,6,r),card(9,5,b)). supports(card(10,6,l),card(9,6,b)). supports(card(10,6,r),card(9,6,b)). supports(card(10,5,b),card(10,5,l)). supports(card(10,5,b),card(10,5,r)). supports(card(10,5,l),card(9,4,b)). supports(card(10,5,r),card(9,4,b)). supports(card(10,5,l),card(9,5,b)). supports(card(10,5,r),card(9,5,b)). supports(card(10,4,b),card(10,4,l)). supports(card(10,4,b),card(10,4,r)). supports(card(10,4,l),card(9,3,b)). supports(card(10,4,r),card(9,3,b)). supports(card(10,4,l),card(9,4,b)). supports(card(10,4,r),card(9,4,b)). supports(card(10,3,b),card(10,3,l)). supports(card(10,3,b),card(10,3,r)). supports(card(10,3,l),card(9,2,b)). supports(card(10,3,r),card(9,2,b)). supports(card(10,3,l),card(9,3,b)). supports(card(10,3,r),card(9,3,b)). supports(card(10,2,b),card(10,2,l)). supports(card(10,2,b),card(10,2,r)). supports(card(10,2,l),card(9,1,b)). supports(card(10,2,r),card(9,1,b)). supports(card(10,2,l),card(9,2,b)). supports(card(10,2,r),card(9,2,b)). supports(card(10,1,b),card(10,1,l)). supports(card(10,1,b),card(10,1,r)). supports(card(10,1,l),card(9,1,b)). supports(card(10,1,r),card(9,1,b)). supports(card(9,9,b),card(9,9,l)). supports(card(9,9,b),card(9,9,r)). supports(card(9,9,l),card(8,8,b)). supports(card(9,9,r),card(8,8,b)). supports(card(9,8,b),card(9,8,l)). supports(card(9,8,b),card(9,8,r)). supports(card(9,8,l),card(8,7,b)). supports(card(9,8,r),card(8,7,b)). supports(card(9,8,l),card(8,8,b)). supports(card(9,8,r),card(8,8,b)). supports(card(9,7,b),card(9,7,l)). supports(card(9,7,b),card(9,7,r)). supports(card(9,7,l),card(8,6,b)). supports(card(9,7,r),card(8,6,b)). supports(card(9,7,l),card(8,7,b)). supports(card(9,7,r),card(8,7,b)). supports(card(9,6,b),card(9,6,l)). supports(card(9,6,b),card(9,6,r)). supports(card(9,6,l),card(8,5,b)). supports(card(9,6,r),card(8,5,b)). supports(card(9,6,l),card(8,6,b)). supports(card(9,6,r),card(8,6,b)). supports(card(9,5,b),card(9,5,l)). supports(card(9,5,b),card(9,5,r)). supports(card(9,5,l),card(8,4,b)). supports(card(9,5,r),card(8,4,b)). supports(card(9,5,l),card(8,5,b)). supports(card(9,5,r),card(8,5,b)). supports(card(9,4,b),card(9,4,l)). supports(card(9,4,b),card(9,4,r)). supports(card(9,4,l),card(8,3,b)). supports(card(9,4,r),card(8,3,b)). supports(card(9,4,l),card(8,4,b)). supports(card(9,4,r),card(8,4,b)). supports(card(9,3,b),card(9,3,l)). supports(card(9,3,b),card(9,3,r)). supports(card(9,3,l),card(8,2,b)). supports(card(9,3,r),card(8,2,b)). supports(card(9,3,l),card(8,3,b)). supports(card(9,3,r),card(8,3,b)). supports(card(9,2,b),card(9,2,l)). supports(card(9,2,b),card(9,2,r)). supports(card(9,2,l),card(8,1,b)). supports(card(9,2,r),card(8,1,b)). supports(card(9,2,l),card(8,2,b)). supports(card(9,2,r),card(8,2,b)). supports(card(9,1,b),card(9,1,l)). supports(card(9,1,b),card(9,1,r)). supports(card(9,1,l),card(8,1,b)). supports(card(9,1,r),card(8,1,b)). supports(card(8,8,b),card(8,8,l)). supports(card(8,8,b),card(8,8,r)). supports(card(8,8,l),card(7,7,b)). supports(card(8,8,r),card(7,7,b)). supports(card(8,7,b),card(8,7,l)). supports(card(8,7,b),card(8,7,r)). supports(card(8,7,l),card(7,6,b)). supports(card(8,7,r),card(7,6,b)). supports(card(8,7,l),card(7,7,b)). supports(card(8,7,r),card(7,7,b)). supports(card(8,6,b),card(8,6,l)). supports(card(8,6,b),card(8,6,r)). supports(card(8,6,l),card(7,5,b)). supports(card(8,6,r),card(7,5,b)). supports(card(8,6,l),card(7,6,b)). supports(card(8,6,r),card(7,6,b)). supports(card(8,5,b),card(8,5,l)). supports(card(8,5,b),card(8,5,r)). supports(card(8,5,l),card(7,4,b)). supports(card(8,5,r),card(7,4,b)). supports(card(8,5,l),card(7,5,b)). supports(card(8,5,r),card(7,5,b)). supports(card(8,4,b),card(8,4,l)). supports(card(8,4,b),card(8,4,r)). supports(card(8,4,l),card(7,3,b)). supports(card(8,4,r),card(7,3,b)). supports(card(8,4,l),card(7,4,b)). supports(card(8,4,r),card(7,4,b)). supports(card(8,3,b),card(8,3,l)). supports(card(8,3,b),card(8,3,r)). supports(card(8,3,l),card(7,2,b)). supports(card(8,3,r),card(7,2,b)). supports(card(8,3,l),card(7,3,b)). supports(card(8,3,r),card(7,3,b)). supports(card(8,2,b),card(8,2,l)). supports(card(8,2,b),card(8,2,r)). supports(card(8,2,l),card(7,1,b)). supports(card(8,2,r),card(7,1,b)). supports(card(8,2,l),card(7,2,b)). supports(card(8,2,r),card(7,2,b)). supports(card(8,1,b),card(8,1,l)). supports(card(8,1,b),card(8,1,r)). supports(card(8,1,l),card(7,1,b)). supports(card(8,1,r),card(7,1,b)). supports(card(7,7,b),card(7,7,l)). supports(card(7,7,b),card(7,7,r)). supports(card(7,7,l),card(6,6,b)). supports(card(7,7,r),card(6,6,b)). supports(card(7,6,b),card(7,6,l)). supports(card(7,6,b),card(7,6,r)). supports(card(7,6,l),card(6,5,b)). supports(card(7,6,r),card(6,5,b)). supports(card(7,6,l),card(6,6,b)). supports(card(7,6,r),card(6,6,b)). supports(card(7,5,b),card(7,5,l)). supports(card(7,5,b),card(7,5,r)). supports(card(7,5,l),card(6,4,b)). supports(card(7,5,r),card(6,4,b)). supports(card(7,5,l),card(6,5,b)). supports(card(7,5,r),card(6,5,b)). supports(card(7,4,b),card(7,4,l)). supports(card(7,4,b),card(7,4,r)). supports(card(7,4,l),card(6,3,b)). supports(card(7,4,r),card(6,3,b)). supports(card(7,4,l),card(6,4,b)). supports(card(7,4,r),card(6,4,b)). supports(card(7,3,b),card(7,3,l)). supports(card(7,3,b),card(7,3,r)). supports(card(7,3,l),card(6,2,b)). supports(card(7,3,r),card(6,2,b)). supports(card(7,3,l),card(6,3,b)). supports(card(7,3,r),card(6,3,b)). supports(card(7,2,b),card(7,2,l)). supports(card(7,2,b),card(7,2,r)). supports(card(7,2,l),card(6,1,b)). supports(card(7,2,r),card(6,1,b)). supports(card(7,2,l),card(6,2,b)). supports(card(7,2,r),card(6,2,b)). supports(card(7,1,b),card(7,1,l)). supports(card(7,1,b),card(7,1,r)). supports(card(7,1,l),card(6,1,b)). supports(card(7,1,r),card(6,1,b)). supports(card(6,6,b),card(6,6,l)). supports(card(6,6,b),card(6,6,r)). supports(card(6,6,l),card(5,5,b)). supports(card(6,6,r),card(5,5,b)). supports(card(6,5,b),card(6,5,l)). supports(card(6,5,b),card(6,5,r)). supports(card(6,5,l),card(5,4,b)). supports(card(6,5,r),card(5,4,b)). supports(card(6,5,l),card(5,5,b)). supports(card(6,5,r),card(5,5,b)). supports(card(6,4,b),card(6,4,l)). supports(card(6,4,b),card(6,4,r)). supports(card(6,4,l),card(5,3,b)). supports(card(6,4,r),card(5,3,b)). supports(card(6,4,l),card(5,4,b)). supports(card(6,4,r),card(5,4,b)). supports(card(6,3,b),card(6,3,l)). supports(card(6,3,b),card(6,3,r)). supports(card(6,3,l),card(5,2,b)). supports(card(6,3,r),card(5,2,b)). supports(card(6,3,l),card(5,3,b)). supports(card(6,3,r),card(5,3,b)). supports(card(6,2,b),card(6,2,l)). supports(card(6,2,b),card(6,2,r)). supports(card(6,2,l),card(5,1,b)). supports(card(6,2,r),card(5,1,b)). supports(card(6,2,l),card(5,2,b)). supports(card(6,2,r),card(5,2,b)). supports(card(6,1,b),card(6,1,l)). supports(card(6,1,b),card(6,1,r)). supports(card(6,1,l),card(5,1,b)). supports(card(6,1,r),card(5,1,b)). supports(card(5,5,b),card(5,5,l)). supports(card(5,5,b),card(5,5,r)). supports(card(5,5,l),card(4,4,b)). supports(card(5,5,r),card(4,4,b)). supports(card(5,4,b),card(5,4,l)). supports(card(5,4,b),card(5,4,r)). supports(card(5,4,l),card(4,3,b)). supports(card(5,4,r),card(4,3,b)). supports(card(5,4,l),card(4,4,b)). supports(card(5,4,r),card(4,4,b)). supports(card(5,3,b),card(5,3,l)). supports(card(5,3,b),card(5,3,r)). supports(card(5,3,l),card(4,2,b)). supports(card(5,3,r),card(4,2,b)). supports(card(5,3,l),card(4,3,b)). supports(card(5,3,r),card(4,3,b)). supports(card(5,2,b),card(5,2,l)). supports(card(5,2,b),card(5,2,r)). supports(card(5,2,l),card(4,1,b)). supports(card(5,2,r),card(4,1,b)). supports(card(5,2,l),card(4,2,b)). supports(card(5,2,r),card(4,2,b)). supports(card(5,1,b),card(5,1,l)). supports(card(5,1,b),card(5,1,r)). supports(card(5,1,l),card(4,1,b)). supports(card(5,1,r),card(4,1,b)). supports(card(4,4,b),card(4,4,l)). supports(card(4,4,b),card(4,4,r)). supports(card(4,4,l),card(3,3,b)). supports(card(4,4,r),card(3,3,b)). supports(card(4,3,b),card(4,3,l)). supports(card(4,3,b),card(4,3,r)). supports(card(4,3,l),card(3,2,b)). supports(card(4,3,r),card(3,2,b)). supports(card(4,3,l),card(3,3,b)). supports(card(4,3,r),card(3,3,b)). supports(card(4,2,b),card(4,2,l)). supports(card(4,2,b),card(4,2,r)). supports(card(4,2,l),card(3,1,b)). supports(card(4,2,r),card(3,1,b)). supports(card(4,2,l),card(3,2,b)). supports(card(4,2,r),card(3,2,b)). supports(card(4,1,b),card(4,1,l)). supports(card(4,1,b),card(4,1,r)). supports(card(4,1,l),card(3,1,b)). supports(card(4,1,r),card(3,1,b)). supports(card(3,3,b),card(3,3,l)). supports(card(3,3,b),card(3,3,r)). supports(card(3,3,l),card(2,2,b)). supports(card(3,3,r),card(2,2,b)). supports(card(3,2,b),card(3,2,l)). supports(card(3,2,b),card(3,2,r)). supports(card(3,2,l),card(2,1,b)). supports(card(3,2,r),card(2,1,b)). supports(card(3,2,l),card(2,2,b)). supports(card(3,2,r),card(2,2,b)). supports(card(3,1,b),card(3,1,l)). supports(card(3,1,b),card(3,1,r)). supports(card(3,1,l),card(2,1,b)). supports(card(3,1,r),card(2,1,b)). supports(card(2,2,b),card(2,2,l)). supports(card(2,2,b),card(2,2,r)). supports(card(2,2,l),card(1,1,b)). supports(card(2,2,r),card(1,1,b)). supports(card(2,1,b),card(2,1,l)). supports(card(2,1,b),card(2,1,r)). supports(card(2,1,l),card(1,1,b)). supports(card(2,1,r),card(1,1,b)). supports(card(1,1,b),card(1,1,l)). supports(card(1,1,b),card(1,1,r)). supports(soil,card(15,15,b)). supports(soil,card(15,14,b)). supports(soil,card(15,13,b)). supports(soil,card(15,12,b)). supports(soil,card(15,11,b)). supports(soil,card(15,10,b)). supports(soil,card(15,9,b)). supports(soil,card(15,8,b)). supports(soil,card(15,7,b)). supports(soil,card(15,6,b)). supports(soil,card(15,5,b)). supports(soil,card(15,4,b)). supports(soil,card(15,3,b)). supports(soil,card(15,2,b)). supports(soil,card(15,1,b)). height(15). %END-GENERATED %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% takePart(X,List0,List1):- append(LeftRest,[X|RightRest],List0), append(LeftRest, RightRest,List1). %%%% to avoid hand-typing the facts above %%% write_cards(height) write_house(L):- write_partslist(L),nl, write_cards(L), write_soil(L),nl, write(height(L)),write('.'),nl. write_cards(0):- !. write_cards(L):- write_triangles(L), L1 is L-1, write_cards(L1). write_triangles(L):- write_triangles(L,L). write_triangles(_,0):- !,nl. write_triangles(L,N):- ws(L,N,b, L,N,l), ws(L,N,b, L,N,r), Above is L-1, LeftOne is N-1, (N \= 1 -> ws(L,N,l, Above,LeftOne,b),ws(L,N,r, Above,LeftOne,b) ; true), (N \= L -> ws(L,N,l, Above,N, b),ws(L,N,r, Above,N, b) ; true), write_triangles(L,LeftOne). ws(L1,T1,BLR1, L2,T2,BLR2):- write(supports(card(L1,T1,BLR1), card(L2,T2,BLR2))), write('.'),nl. write_partslist(L):- write('parts(['), wp(L), write(']).'),nl. wp(L):- wpl(L). wpl(1):- !, wpt(1,1). wpl(N):- wpts(N,N), N1 is N-1, wpl(N1). wpts(_,0):- !. wpts(L,N):- write(card(L,N,b)), write(', '), write(card(L,N,l)), write(', '), write(card(L,N,r)), write(', '), N1 is N-1, wpts(L,N1). wpt(L,N):- write(card(L,N,b)), write(', '), write(card(L,N,l)), write(', '), write(card(L,N,r)). write_soil(L):- write_soil(L,L). write_soil(_,0):- !. write_soil(L,N):- write(supports(soil, card(L,N,b))), write('.'),nl, N1 is N-1, write_soil(L,N1).