25% yadlr alias
   26:-prolog_load_context(directory,Dir),asserta(user:file_search_path(yadlr,Dir)).   27
   28% aleph alias must resolve to the directory where aleph.pl exists.
   29% you can download aleph from http://www.comlab.ox.ac.uk/oucl/research/areas/machlearn/Aleph/aleph.pl
   30user:file_search_path(aleph, X) :- getenv('LOGICMOO_HOME',MOO),atom_concat(MOO,'/src_modules/aleph/', X).
   31
   32
   33:- use_module(yadlr(prodlr)).   34
   35:- consult(aleph(aleph)).   36
   37:- consult(refine).   38
   39:- assert_if_new(('$aleph_sat_terms'(v,v,v,v) :- fail) ).   40:- assert_if_new(('$aleph_sat_atom'(v,v) :- fail) ).   41:- assert_if_new(('$aleph_sat_varscopy'(v,v,v):- fail) ).   42:- assert((nil :- fail)).   43
   44aleph_settings :-
   45   set(nodes, 100000),
   46   set(i, 3),
   47   set(depth, 50),
   48   set(clauselength, 3),
   49   set(verbosity, 100),
   50   set(check_useless, true),
   51   set(refinelitgen, user), 
   52   set(refinethreadvar, list), 
   53   !.
   54
   55set_determinations(Pred, []).
   56set_determinations(Pred, [L|R]) :- 
   57   determination(Pred, L), 
   58   set_determinations(Pred, R).
   59
   60set_predicate(Pred) :-
   61   Arity = 2,
   62   functor(Head, Pred, Arity),
   63   (setting(construct_bottom, reduction), 
   64    setting(refine, user)
   65   ->  setting(refinethreadvar, Template),
   66       arg(1, Head, +Template),
   67       arg(2, Head, -Template)
   68   ;   arg(1, Head, +inlist),
   69       arg(2, Head, -outlist)
   70   ),
   71   modeh( *, Head),
   72   findall(X, thread_itemfunctor(X), Determinations),
   73   set_determinations(Pred/Arity, Determinations).
   74
   75set_body :-
   76   modeb( *, concept_select(+inlist, #concept_name_or_not, +outlist) ),
   77   modeb( *, forall_select(+inlist, #relation_path, #concept_name_or_not, +outlist) ),
   78   modeb( *, atleast_select(+inlist, #relation_path, #concept_name_or_not, #num, +outlist) ),
   79   modeb( *, atmost_select(+inlist, #relation_path, #concept_name_or_not, #num, +outlist) ),
   80   modeb( *, self_select(+inlist, #relation_path, +outlist) ),
   81   modeb( *, concept_select(+inlist, #concept_name_or_not, -list) ),
   82   modeb( *, forall_select(+inlist, #relation_path, #concept_name_or_not, -list) ),
   83   modeb( *, atleast_select(+inlist, #relation_path, #concept_name_or_not, #num, -list) ),
   84   modeb( *, atmost_select(+inlist, #relation_path, #concept_name_or_not, #num, -list) ),
   85   modeb( *, self_select(+inlist, #relation_path, -list) ),
   86   modeb( *, concept_select(+list, #concept_name_or_not, +outlist) ),
   87   modeb( *, forall_select(+list, #relation_path, #concept_name_or_not, +outlist) ),
   88   modeb( *, atleast_select(+list, #relation_path, #concept_name_or_not, #num, +outlist) ),
   89   modeb( *, atmost_select(+list, #relation_path, #concept_name_or_not, #num, +outlist) ),
   90   modeb( *, self_select(+list, #relation_path, +outlist) ),
   91   modeb( *, concept_select(+list, #concept_name_or_not, -list) ),
   92   modeb( *, forall_select(+list, #relation_path, #concept_name_or_not, -list) ),
   93   modeb( *, atleast_select(+list, #relation_path, #concept_name_or_not, #num, -list) ),
   94   modeb( *, atmost_select(+list, #relation_path, #concept_name_or_not, #num, -list) ),
   95   modeb( *, self_select(+list, #relation_path, -list) ).
   96
   97
   98config(Pred,reduction) :- 
   99   set(construct_bottom, reduction),
  100   set(refine, auto),
  101   aleph_settings,
  102   set_predicate(Pred),
  103   set_body.
  104
  105config(Pred,saturation) :-
  106   set(construct_bottom, saturation),
  107   aleph_settings,
  108   set_predicate(Pred),
  109   set_body.
  110
  111init_learn(Pred,Example, Config) :-
  112   read_all(Example),
  113   config(Pred,Config).
  114
  115learn(Pred,Example,Config) :-
  116   init_learn(Pred,Example, Config), !,
  117   %leash(off), 
  118   %trace,
  119   %sat(1). 
  120   induce.
  121
  122learn(Pred,Example) :- learn(Pred,Example,reduction).
  123
  124learn(Example) :- learn(target,Example).
  125
  126
  127nil :-
  128   hypothesis(Head, Body, _),
  129   numbervars((Head:-Body), 0, _),
  130   Head = target(A, B),
  131   \+ inout_thread(Body, A, B).
  132
  133prune((Head:-Body)):-
  134   numbervars((Head:-Body), 0, _),
  135   Head = target(A, B),
  136   \+ inout_thread(Body, A, _), !.
  137   %fail.