1% Simple illustration of the use of Aleph on
    2%       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.
    8%       or
    9%       a. Load Aleph
   10%       b. read_all(train).
   11%       c. induce

?- induce(Program). */

   16:- use_module(library(aleph)).   17:- if(current_predicate(use_rendering/1)).   18:- use_rendering(prolog).   19:- endif.   20:- aleph.   21:-style_check(-discontiguous).   22:- aleph_set(i,2).   23
   24:- modeh(1,eastbound(+train)).   25:- modeb(1,short(+car)).   26:- modeb(1,closed(+car)).   27:- modeb(1,long(+car)).   28:- modeb(1,open_car(+car)).   29:- modeb(1,double(+car)).   30:- modeb(1,jagged(+car)).   31:- modeb(1,shape(+car,#shape)).
   32:- modeb(1,load(+car,#shape,#int)).
   33:- modeb(1,wheels(+car,#int)).
   34:- modeb(*,has_car(+train,-car)).   35
   36:- determination(eastbound/1,short/1).   37:- determination(eastbound/1,closed/1).   38:- determination(eastbound/1,long/1).   39:- determination(eastbound/1,open_car/1).   40:- determination(eastbound/1,double/1).   41:- determination(eastbound/1,jagged/1).   42:- determination(eastbound/1,shape/2).   43:- determination(eastbound/1,wheels/2).   44:- determination(eastbound/1,has_car/2).   45:- determination(eastbound/1,load/3).   46:-begin_bg.   47% type definitions
   48car(car_11).  car(car_12).  car(car_13).  car(car_14).
   49car(car_21).  car(car_22).  car(car_23).
   50car(car_31).  car(car_32).  car(car_33).
   51car(car_41).  car(car_42).  car(car_43).  car(car_44).
   52car(car_51).  car(car_52).  car(car_53).
   53car(car_61).  car(car_62).
   54car(car_71).  car(car_72).  car(car_73).
   55car(car_81).  car(car_82).
   56car(car_91).  car(car_92).  car(car_93).  car(car_94).
   57car(car_101).  car(car_102).
   58
   59shape(elipse).  shape(hexagon).  shape(rectangle).  shape(u_shaped).
   60shape(triangle). shape(circle). shape(nil).
   61
   62train(east1).  train(east2).  train(east3).  train(east4).  train(east5).
   63train(west6).  train(west7).  train(west8).  train(west9).  train(west10).
   64
   65
   66% eastbound train 1
   67short(car_12).		% 0
   68closed(car_12).		% 1
   69long(car_11).		% 2
   70long(car_13).
   71short(car_14).
   72open_car(car_11).		% 3
   73open_car(car_13).
   74open_car(car_14).
   75shape(car_11,rectangle). % 4,5
   76shape(car_12,rectangle).
   77shape(car_13,rectangle).
   78shape(car_14,rectangle).
   79load(car_11,rectangle,3). % 6,7,8
   80load(car_12,triangle,1).
   81load(car_13,hexagon,1).
   82load(car_14,circle,1).
   83wheels(car_11,2).	  % 9,10
   84wheels(car_12,2).
   85wheels(car_13,3).
   86wheels(car_14,2).
   87has_car(east1,car_11). % 11,12
   88has_car(east1,car_12).
   89has_car(east1,car_13).
   90has_car(east1,car_14).
   91
   92% eastbound train 2
   93has_car(east2,car_21).
   94has_car(east2,car_22).
   95has_car(east2,car_23).
   96short(car_21).
   97short(car_22).
   98short(car_23).
   99shape(car_21,u_shaped).
  100shape(car_22,u_shaped).
  101shape(car_23,rectangle).
  102open_car(car_21).
  103open_car(car_22).
  104closed(car_23).
  105load(car_21,triangle,1).
  106load(car_22,rectangle,1).
  107load(car_23,circle,2).
  108wheels(car_21,2).
  109wheels(car_22,2).
  110wheels(car_23,2).
  111
  112% eastbound train 3
  113has_car(east3,car_31).
  114has_car(east3,car_32).
  115has_car(east3,car_33).
  116short(car_31).
  117short(car_32).
  118long(car_33).
  119shape(car_31,rectangle).
  120shape(car_32,hexagon).
  121shape(car_33,rectangle).
  122open_car(car_31).
  123closed(car_32).
  124closed(car_33).
  125load(car_31,circle,1).
  126load(car_32,triangle,1).
  127load(car_33,triangle,1).
  128wheels(car_31,2).
  129wheels(car_32,2).
  130wheels(car_33,3).
  131
  132% eastbound train 4
  133has_car(east4,car_41).
  134has_car(east4,car_42).
  135has_car(east4,car_43).
  136has_car(east4,car_44).
  137short(car_41).
  138short(car_42).
  139short(car_43).
  140short(car_44).
  141shape(car_41,u_shaped).
  142shape(car_42,rectangle).
  143shape(car_43,elipse).
  144shape(car_44,rectangle).
  145double(car_42).
  146open_car(car_41).
  147open_car(car_42).
  148closed(car_43).
  149open_car(car_44).
  150load(car_41,triangle,1).
  151load(car_42,triangle,1).
  152load(car_43,rectangle,1).
  153load(car_44,rectangle,1).
  154wheels(car_41,2).
  155wheels(car_42,2).
  156wheels(car_43,2).
  157wheels(car_44,2).
  158
  159% eastbound train 5
  160has_car(east5,car_51).
  161has_car(east5,car_52).
  162has_car(east5,car_53).
  163short(car_51).
  164short(car_52).
  165short(car_53).
  166shape(car_51,rectangle).
  167shape(car_52,rectangle).
  168shape(car_53,rectangle).
  169double(car_51).
  170open_car(car_51).
  171closed(car_52).
  172closed(car_53).
  173load(car_51,triangle,1).
  174load(car_52,rectangle,1).
  175load(car_53,circle,1).
  176wheels(car_51,2).
  177wheels(car_52,3).
  178wheels(car_53,2).
  179
  180% westbound train 6
  181has_car(west6,car_61).
  182has_car(west6,car_62).
  183long(car_61).
  184short(car_62).
  185shape(car_61,rectangle).
  186shape(car_62,rectangle).
  187closed(car_61).
  188open_car(car_62).
  189load(car_61,circle,3).
  190load(car_62,triangle,1).
  191wheels(car_61,2).
  192wheels(car_62,2).
  193
  194% westbound train 7
  195has_car(west7,car_71).
  196has_car(west7,car_72).
  197has_car(west7,car_73).
  198short(car_71).
  199short(car_72).
  200long(car_73).
  201shape(car_71,rectangle).
  202shape(car_72,u_shaped).
  203shape(car_73,rectangle).
  204double(car_71).
  205open_car(car_71).
  206open_car(car_72).
  207jagged(car_73).
  208load(car_71,circle,1).
  209load(car_72,triangle,1).
  210load(car_73,nil,0).
  211wheels(car_71,2).
  212wheels(car_72,2).
  213wheels(car_73,2).
  214
  215% westbound train 8
  216has_car(west8,car_81).
  217has_car(west8,car_82).
  218long(car_81).
  219short(car_82).
  220shape(car_81,rectangle).
  221shape(car_82,u_shaped).
  222closed(car_81).
  223open_car(car_82).
  224load(car_81,rectangle,1).
  225load(car_82,circle,1).
  226wheels(car_81,3).
  227wheels(car_82,2).
  228
  229% westbound train 9
  230has_car(west9,car_91).
  231has_car(west9,car_92).
  232has_car(west9,car_93).
  233has_car(west9,car_94).
  234short(car_91).
  235long(car_92).
  236short(car_93).
  237short(car_94).
  238shape(car_91,u_shaped).
  239shape(car_92,rectangle).
  240shape(car_93,rectangle).
  241shape(car_94,u_shaped).
  242open_car(car_91).
  243jagged(car_92).
  244open_car(car_93).
  245open_car(car_94).
  246load(car_91,circle,1).
  247load(car_92,rectangle,1).
  248load(car_93,rectangle,1).
  249load(car_93,circle,1).
  250wheels(car_91,2).
  251wheels(car_92,2).
  252wheels(car_93,2).
  253wheels(car_94,2).
  254
  255% westbound train 10
  256has_car(west10,car_101).
  257has_car(west10,car_102).
  258short(car_101).
  259long(car_102).
  260shape(car_101,u_shaped).
  261shape(car_102,rectangle).
  262open_car(car_101).
  263open_car(car_102).
  264load(car_101,rectangle,1).
  265load(car_102,rectangle,2).
  266wheels(car_101,2).
  267wheels(car_102,2).
  268:-end_bg.  269:-begin_in_pos.  270eastbound(east1).
  271eastbound(east2).
  272eastbound(east3).
  273eastbound(east4).
  274eastbound(east5).
  275:-end_in_pos.  276:-begin_in_neg.  277eastbound(west6).
  278eastbound(west7).
  279eastbound(west8).
  280eastbound(west9).
  281eastbound(west10).
  282:-end_in_neg.