```    1% Simple illustration of pretty-printing clauses in Aleph
2%       using Michalski's trains problem.
3% To run do the following:
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)).
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).
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).
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).
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).
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).
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).
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).
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).
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).
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).
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
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.```