1% Simple illustration of pretty-printing clauses in Aleph
    2%       using Michalski's trains problem.
    3% To run do the following:
    4%       a. Load Aleph
    5%       b. read_all(train).
    6%       c. sat(1).
    7%       d. reduce.

?- sat(1),reduce(A). */

   11:- use_module(library(aleph)).   12:- if(current_predicate(use_rendering/1)).   13:- use_rendering(prolog).   14:- endif.   15:- aleph.   16
   17
   18:-style_check(-discontiguous).   19:- aleph_set(i,2).   20:- aleph_set(clauselength,4).   21
   22:- modeh(1,eastbound(+train)).   23:- modeb(1,short(+car)).   24:- modeb(1,closed(+car)).   25:- modeb(1,long(+car)).   26:- modeb(1,open_car(+car)).   27:- modeb(1,double(+car)).   28:- modeb(1,jagged(+car)).   29:- modeb(1,shape(+car,#shape)).
   30:- modeb(1,load(+car,#shape,#int)).
   31:- modeb(1,wheels(+car,#int)).
   32:- modeb(*,has_car(+train,-car)).   33
   34:- determination(eastbound/1,short/1).   35:- determination(eastbound/1,closed/1).   36:- determination(eastbound/1,long/1).   37:- determination(eastbound/1,open_car/1).   38:- determination(eastbound/1,double/1).   39:- determination(eastbound/1,jagged/1).   40:- determination(eastbound/1,shape/2).   41:- determination(eastbound/1,wheels/2).   42:- determination(eastbound/1,has_car/2).   43:- determination(eastbound/1,load/3).   44
   45% type definitions
   46car(car_11).  car(car_12).  car(car_13).  car(car_14).
   47car(car_21).  car(car_22).  car(car_23).
   48car(car_31).  car(car_32).  car(car_33).
   49car(car_41).  car(car_42).  car(car_43).  car(car_44).
   50car(car_51).  car(car_52).  car(car_53).
   51car(car_61).  car(car_62).
   52car(car_71).  car(car_72).  car(car_73).
   53car(car_81).  car(car_82).
   54car(car_91).  car(car_92).  car(car_93).  car(car_94).
   55car(car_101).  car(car_102).
   56
   57shape(elipse).  shape(hexagon).  shape(rectangle).  shape(u_shaped).
   58shape(triangle). shape(circle). shape(nil).
   59
   60train(east1).  train(east2).  train(east3).  train(east4).  train(east5).
   61train(west6).  train(west7).  train(west8).  train(west9).  train(west10).
   62:-begin_bg.   63% eastbound train 1
   64short(car_12).		% 0
   65closed(car_12).		% 1
   66long(car_11).		% 2
   67long(car_13).
   68short(car_14).
   69open_car(car_11).		% 3
   70% infront(east1,car_11).
   71% infront(car_11,car_12).
   72% infront(car_12,car_13).
   73% infront(car_13,car_14).
   74open_car(car_13).
   75open_car(car_14).
   76shape(car_11,rectangle). % 4,5
   77shape(car_12,rectangle).
   78shape(car_13,rectangle).
   79shape(car_14,rectangle).
   80load(car_11,rectangle,3). % 6,7,8
   81load(car_12,triangle,1).
   82load(car_13,hexagon,1).
   83load(car_14,circle,1).
   84wheels(car_11,2).	  % 9,10
   85wheels(car_12,2).
   86wheels(car_13,3).
   87wheels(car_14,2).
   88has_car(east1,car_11). % 11,12
   89has_car(east1,car_12).
   90has_car(east1,car_13).
   91has_car(east1,car_14).
   92
   93% eastbound train 2
   94has_car(east2,car_21).
   95has_car(east2,car_22).
   96has_car(east2,car_23).
   97% infront(east2,car_21).
   98% infront(car_21,car_22).
   99% infront(car_22,car_23).
  100short(car_21).
  101short(car_22).
  102short(car_23).
  103shape(car_21,u_shaped).
  104shape(car_22,u_shaped).
  105shape(car_23,rectangle).
  106open_car(car_21).
  107open_car(car_22).
  108closed(car_23).
  109load(car_21,triangle,1).
  110load(car_22,rectangle,1).
  111load(car_23,circle,2).
  112wheels(car_21,2).
  113wheels(car_22,2).
  114wheels(car_23,2).
  115
  116% eastbound train 3
  117has_car(east3,car_31).
  118has_car(east3,car_32).
  119has_car(east3,car_33).
  120% infront(east3,car_31).
  121% infront(car_31,car_32).
  122% infront(car_32,car_33).
  123short(car_31).
  124short(car_32).
  125long(car_33).
  126shape(car_31,rectangle).
  127shape(car_32,hexagon).
  128shape(car_33,rectangle).
  129open_car(car_31).
  130closed(car_32).
  131closed(car_33).
  132load(car_31,circle,1).
  133load(car_32,triangle,1).
  134load(car_33,triangle,1).
  135wheels(car_31,2).
  136wheels(car_32,2).
  137wheels(car_33,3).
  138
  139% eastbound train 4
  140has_car(east4,car_41).
  141has_car(east4,car_42).
  142has_car(east4,car_43).
  143has_car(east4,car_44).
  144% infront(east4,car_41).
  145% infront(car_41,car_42).
  146% infront(car_42,car_43).
  147% infront(car_43,car_44).
  148short(car_41).
  149short(car_42).
  150short(car_43).
  151short(car_44).
  152shape(car_41,u_shaped).
  153shape(car_42,rectangle).
  154shape(car_43,elipse).
  155shape(car_44,rectangle).
  156double(car_42).
  157open_car(car_41).
  158open_car(car_42).
  159closed(car_43).
  160open_car(car_44).
  161load(car_41,triangle,1).
  162load(car_42,triangle,1).
  163load(car_43,rectangle,1).
  164load(car_44,rectangle,1).
  165wheels(car_41,2).
  166wheels(car_42,2).
  167wheels(car_43,2).
  168wheels(car_44,2).
  169
  170% eastbound train 5
  171has_car(east5,car_51).
  172has_car(east5,car_52).
  173has_car(east5,car_53).
  174% infront(east5,car_51).
  175% infront(car_51,car_52).
  176% infront(car_52,car_53).
  177short(car_51).
  178short(car_52).
  179short(car_53).
  180shape(car_51,rectangle).
  181shape(car_52,rectangle).
  182shape(car_53,rectangle).
  183double(car_51).
  184open_car(car_51).
  185closed(car_52).
  186closed(car_53).
  187load(car_51,triangle,1).
  188load(car_52,rectangle,1).
  189load(car_53,circle,1).
  190wheels(car_51,2).
  191wheels(car_52,3).
  192wheels(car_53,2).
  193
  194% westbound train 6
  195has_car(west6,car_61).
  196has_car(west6,car_62).
  197% infront(west6,car_61).
  198% infront(car_61,car_62).
  199long(car_61).
  200short(car_62).
  201shape(car_61,rectangle).
  202shape(car_62,rectangle).
  203closed(car_61).
  204open_car(car_62).
  205load(car_61,circle,3).
  206load(car_62,triangle,1).
  207wheels(car_61,2).
  208wheels(car_62,2).
  209
  210% westbound train 7
  211has_car(west7,car_71).
  212has_car(west7,car_72).
  213has_car(west7,car_73).
  214% infront(west7,car_71).
  215% infront(car_71,car_72).
  216% infront(car_72,car_73).
  217short(car_71).
  218short(car_72).
  219long(car_73).
  220shape(car_71,rectangle).
  221shape(car_72,u_shaped).
  222shape(car_73,rectangle).
  223double(car_71).
  224open_car(car_71).
  225open_car(car_72).
  226jagged(car_73).
  227load(car_71,circle,1).
  228load(car_72,triangle,1).
  229load(car_73,nil,0).
  230wheels(car_71,2).
  231wheels(car_72,2).
  232wheels(car_73,2).
  233
  234% westbound train 8
  235has_car(west8,car_81).
  236has_car(west8,car_82).
  237% infront(west8,car_81).
  238% infront(car_81,car_82).
  239long(car_81).
  240short(car_82).
  241shape(car_81,rectangle).
  242shape(car_82,u_shaped).
  243closed(car_81).
  244open_car(car_82).
  245load(car_81,rectangle,1).
  246load(car_82,circle,1).
  247wheels(car_81,3).
  248wheels(car_82,2).
  249
  250% westbound train 9
  251has_car(west9,car_91).
  252has_car(west9,car_92).
  253has_car(west9,car_93).
  254has_car(west9,car_94).
  255% infront(west9,car_91).
  256% infront(car_91,car_92).
  257% infront(car_92,car_93).
  258% infront(car_93,car_94).
  259short(car_91).
  260long(car_92).
  261short(car_93).
  262short(car_94).
  263shape(car_91,u_shaped).
  264shape(car_92,rectangle).
  265shape(car_93,rectangle).
  266shape(car_94,u_shaped).
  267open_car(car_91).
  268jagged(car_92).
  269open_car(car_93).
  270open_car(car_94).
  271load(car_91,circle,1).
  272load(car_92,rectangle,1).
  273load(car_93,rectangle,1).
  274load(car_93,circle,1).
  275wheels(car_91,2).
  276wheels(car_92,2).
  277wheels(car_93,2).
  278wheels(car_94,2).
  279
  280% westbound train 10
  281has_car(west10,car_101).
  282has_car(west10,car_102).
  283% infront(west10,car_101).
  284% infront(car_101,car_102).
  285short(car_101).
  286long(car_102).
  287shape(car_101,u_shaped).
  288shape(car_102,rectangle).
  289open_car(car_101).
  290open_car(car_102).
  291load(car_101,rectangle,1).
  292load(car_102,rectangle,2).
  293wheels(car_101,2).
  294wheels(car_102,2).
  295
  296:- aleph_set(portray_literals,true).  297
  298aleph_portray(eastbound(A)):-
  299	write('Train '), format("~q",[A]),
  300	write(' is eastbound').
  301
  302aleph_portray(has_car(A,B)):-
  303	write('train '), format("~q",[A]),
  304	write(' has a car '), format("~q",[B]).
  305
  306aleph_portray(short(B)):-
  307	write('car '), format("~q",[B]),
  308	write(' is short').
  309
  310aleph_portray(closed(B)):-
  311	write('car '), format("~q",[B]),
  312	write(' is closed').
  313
  314aleph_portray(long(B)):-
  315	write('car '), format("~q",[B]),
  316	write(' is long').
  317
  318aleph_portray(open_car(B)):-
  319	write('car '), format("~q",[B]),
  320	write(' is open').
  321
  322aleph_portray(double(B)):-
  323	write('car '), format("~q",[B]),
  324	write(' is double-walled').
  325
  326aleph_portray(jagged(B)):-
  327	write('car '), format("~q",[B]),
  328	write(' has a jagged roof').
  329
  330aleph_portray(shape(B,C)):-
  331	write('car '), format("~q",[B]),
  332	write(' is '), format("~q",[C]), write('-shaped').
  333
  334aleph_portray(wheels(B,C)):-
  335	write('car '), format("~q",[B]),
  336	write(' has '), format("~q",[C]),
  337	write(' wheels').
  338
  339aleph_portray(load(B,C,D)):-
  340	write('car '), format("~q",[B]),
  341	write(' has '), write(D),
  342	write(' '), format("~q",[C]), write('-shaped load(s)').
  343
  344
  345:-end_bg.  346:-begin_in_pos.  347
  348eastbound(east1).
  349eastbound(east2).
  350eastbound(east3).
  351eastbound(east4).
  352eastbound(east5).
  353:-end_in_pos.  354:-begin_in_neg.  355
  356eastbound(west6).
  357eastbound(west7).
  358eastbound(west8).
  359eastbound(west9).
  360eastbound(west10).
  361
  362:-end_in_neg.