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
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. 64short(car_12). 65closed(car_12). 66long(car_11). 67long(car_13).
68short(car_14).
69open_car(car_11). 74open_car(car_13).
75open_car(car_14).
76shape(car_11,rectangle). 77shape(car_12,rectangle).
78shape(car_13,rectangle).
79shape(car_14,rectangle).
80load(car_11,rectangle,3). 81load(car_12,triangle,1).
82load(car_13,hexagon,1).
83load(car_14,circle,1).
84wheels(car_11,2). 85wheels(car_12,2).
86wheels(car_13,3).
87wheels(car_14,2).
88has_car(east1,car_11). 89has_car(east1,car_12).
90has_car(east1,car_13).
91has_car(east1,car_14).
92
94has_car(east2,car_21).
95has_car(east2,car_22).
96has_car(east2,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
117has_car(east3,car_31).
118has_car(east3,car_32).
119has_car(east3,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
140has_car(east4,car_41).
141has_car(east4,car_42).
142has_car(east4,car_43).
143has_car(east4,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
171has_car(east5,car_51).
172has_car(east5,car_52).
173has_car(east5,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
195has_car(west6,car_61).
196has_car(west6,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
211has_car(west7,car_71).
212has_car(west7,car_72).
213has_car(west7,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
235has_car(west8,car_81).
236has_car(west8,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
251has_car(west9,car_91).
252has_car(west9,car_92).
253has_car(west9,car_93).
254has_car(west9,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
281has_car(west10,car_101).
282has_car(west10,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.
?-
sat(1)
,reduce(A)
. */