```    1/* Simple illustration of the use of Aleph to construct features
2   on Michalski's trains problem
3 To run do the following:
4       a. induce_features(Features)
5*/
```

?- `induce_features(Features)`. */

```   10:- use_module(library(aleph)).   11:- if(current_predicate(use_rendering/1)).   12:- use_rendering(prolog).   13:- endif.   14:- aleph.   15:- aleph_set(i,2).   16:- aleph_set(clauselength,10).   17:- aleph_set(minacc,0.6).   18:- aleph_set(noise,3).   19:- aleph_set(minscore,3).   20:- aleph_set(minpos,3).   21:- aleph_set(nodes,5000).   22:- aleph_set(explore,true).   23:- aleph_set(max_features,10).   24
25:- modeh(1,eastbound(+train)).   26:- modeb(1,short(+car)).   27:- modeb(1,closed(+car)).   28:- modeb(1,long(+car)).   29:- modeb(1,open_car(+car)).   30:- modeb(1,double(+car)).   31:- modeb(1,jagged(+car)).   32:- modeb(1,shape(+car,#shape)).
34:- modeb(1,wheels(+car,#int)).
35:- modeb(*,has_car(+train,-car)).   36
37:- determination(eastbound/1,short/1).   38:- determination(eastbound/1,closed/1).   39:- determination(eastbound/1,long/1).   40:- determination(eastbound/1,open_car/1).   41:- determination(eastbound/1,double/1).   42:- determination(eastbound/1,jagged/1).   43:- determination(eastbound/1,shape/2).   44:- determination(eastbound/1,wheels/2).   45:- determination(eastbound/1,has_car/2).   46:- determination(eastbound/1,load/3).   47
48% show examples as boolean vectors
49
50:- aleph_set(portray_examples,true).   51
52aleph_portray(train_pos):-
53        setting(train_pos,File),
54        show_features(File,positive).
55aleph_portray(train_neg):-
56        setting(train_neg,File),
57        show_features(File,negative).
58
59show_features(File,Class):-
61        repeat,
63        (Example = end_of_file -> close(Stream);
64                write_features(Example,Class),
65                fail).
66
67write_features(Example,_):-
68        features(_,(Example:- Body)),
69        (Body -> write(1), write(' '); write(0), write(' ')),
70        fail.
71write_features(_,Class):-
72	writeq(Class), nl.
73:-begin_bg.   74car(car_11).  car(car_12).  car(car_13).  car(car_14).
75car(car_21).  car(car_22).  car(car_23).
76car(car_31).  car(car_32).  car(car_33).
77car(car_41).  car(car_42).  car(car_43).  car(car_44).
78car(car_51).  car(car_52).  car(car_53).
79car(car_61).  car(car_62).
80car(car_71).  car(car_72).  car(car_73).
81car(car_81).  car(car_82).
82car(car_91).  car(car_92).  car(car_93).  car(car_94).
83car(car_101).  car(car_102).
84
85shape(elipse).  shape(hexagon).  shape(rectangle).  shape(u_shaped).
86shape(triangle). shape(circle). shape(nil).
87
88train(east1).  train(east2).  train(east3).  train(east4).  train(east5).
89train(west6).  train(west7).  train(west8).  train(west9).  train(west10).
90
91
92% eastbound train 1
93short(car_12).		% 0
94closed(car_12).		% 1
95long(car_11).		% 2
96long(car_13).
97short(car_14).
98open_car(car_11).		% 3
99open_car(car_13).
100open_car(car_14).
101shape(car_11,rectangle). % 4,5
102shape(car_12,rectangle).
103shape(car_13,rectangle).
104shape(car_14,rectangle).
109wheels(car_11,2).	  % 9,10
110wheels(car_12,2).
111wheels(car_13,3).
112wheels(car_14,2).
113has_car(east1,car_11). % 11,12
114has_car(east1,car_12).
115has_car(east1,car_13).
116has_car(east1,car_14).
117
118% eastbound train 2
119has_car(east2,car_21).
120has_car(east2,car_22).
121has_car(east2,car_23).
122short(car_21).
123short(car_22).
124short(car_23).
125shape(car_21,u_shaped).
126shape(car_22,u_shaped).
127shape(car_23,rectangle).
128open_car(car_21).
129open_car(car_22).
130closed(car_23).
134wheels(car_21,2).
135wheels(car_22,2).
136wheels(car_23,2).
137
138% eastbound train 3
139has_car(east3,car_31).
140has_car(east3,car_32).
141has_car(east3,car_33).
142short(car_31).
143short(car_32).
144long(car_33).
145shape(car_31,rectangle).
146shape(car_32,hexagon).
147shape(car_33,rectangle).
148open_car(car_31).
149closed(car_32).
150closed(car_33).
154wheels(car_31,2).
155wheels(car_32,2).
156wheels(car_33,3).
157
158% eastbound train 4
159has_car(east4,car_41).
160has_car(east4,car_42).
161has_car(east4,car_43).
162has_car(east4,car_44).
163short(car_41).
164short(car_42).
165short(car_43).
166short(car_44).
167shape(car_41,u_shaped).
168shape(car_42,rectangle).
169shape(car_43,elipse).
170shape(car_44,rectangle).
171double(car_42).
172open_car(car_41).
173open_car(car_42).
174closed(car_43).
175open_car(car_44).
180wheels(car_41,2).
181wheels(car_42,2).
182wheels(car_43,2).
183wheels(car_44,2).
184
185% eastbound train 5
186has_car(east5,car_51).
187has_car(east5,car_52).
188has_car(east5,car_53).
189short(car_51).
190short(car_52).
191short(car_53).
192shape(car_51,rectangle).
193shape(car_52,rectangle).
194shape(car_53,rectangle).
195double(car_51).
196open_car(car_51).
197closed(car_52).
198closed(car_53).
202wheels(car_51,2).
203wheels(car_52,3).
204wheels(car_53,2).
205
206% westbound train 6
207has_car(west6,car_61).
208has_car(west6,car_62).
209long(car_61).
210short(car_62).
211shape(car_61,rectangle).
212shape(car_62,rectangle).
213closed(car_61).
214open_car(car_62).
217wheels(car_61,2).
218wheels(car_62,2).
219
220% westbound train 7
221has_car(west7,car_71).
222has_car(west7,car_72).
223has_car(west7,car_73).
224short(car_71).
225short(car_72).
226long(car_73).
227shape(car_71,rectangle).
228shape(car_72,u_shaped).
229shape(car_73,rectangle).
230double(car_71).
231open_car(car_71).
232open_car(car_72).
233jagged(car_73).
237wheels(car_71,2).
238wheels(car_72,2).
239wheels(car_73,2).
240
241% westbound train 8
242has_car(west8,car_81).
243has_car(west8,car_82).
244long(car_81).
245short(car_82).
246shape(car_81,rectangle).
247shape(car_82,u_shaped).
248closed(car_81).
249open_car(car_82).
252wheels(car_81,3).
253wheels(car_82,2).
254
255% westbound train 9
256has_car(west9,car_91).
257has_car(west9,car_92).
258has_car(west9,car_93).
259has_car(west9,car_94).
260short(car_91).
261long(car_92).
262short(car_93).
263short(car_94).
264shape(car_91,u_shaped).
265shape(car_92,rectangle).
266shape(car_93,rectangle).
267shape(car_94,u_shaped).
268open_car(car_91).
269jagged(car_92).
270open_car(car_93).
271open_car(car_94).
276wheels(car_91,2).
277wheels(car_92,2).
278wheels(car_93,2).
279wheels(car_94,2).
280
281% westbound train 10
282has_car(west10,car_101).
283has_car(west10,car_102).
284short(car_101).
285long(car_102).
286shape(car_101,u_shaped).
287shape(car_102,rectangle).
288open_car(car_101).
289open_car(car_102).
292wheels(car_101,2).
293wheels(car_102,2).
294:-end_bg.  295
296:-begin_in_pos.  297eastbound(east1).
298eastbound(east2).
299eastbound(east3).
300eastbound(east4).
301eastbound(east5).
302
303:-end_in_pos.  304:-begin_in_neg.  305eastbound(west6).
306eastbound(west7).
307eastbound(west8).
308eastbound(west9).
309eastbound(west10).
310
311:-end_in_neg.```