1/*
    2UWCSE model describing a university domain.
    3This theory is the result of translating a Logical Bayesian Network (LBN) constructed on the UWCSE dataset into CP-logic
    4From
    5http://dtai.cs.kuleuven.be/cplve/ilp09/
    6Reference:
    7Wannes Meert, Jan Struyf, Hendrik Blockeel: CP-Logic Theory Inference with Contextual Variable Elimination and Comparison to BDD Based Inference Methods. ILP 2009:96-109
    8*/
    9:- use_module(library(mcintyre)).   10
   11:- if(current_predicate(use_rendering/1)).   12:- use_rendering(c3).   13:- use_rendering(graphviz).   14:- use_rendering(table,[header(['Multivalued variable index','Rule index','Grounding substitution'])]).   15:- endif.   16
   17:- mc.   18
   19:- begin_lpad.   20
   21course(c1).
   22
   23professor(p1).
   24
   25student(s1).
   26
   27student(s2).
   28
   29advised_by(A,B):0.10708782742681 :-
   30    student(A),
   31    professor(B),
   32    position(B,faculty).
   33
   34advised_by(A,B):0.0278422273781903 :-
   35    student(A),
   36    professor(B),
   37    \+position(B,faculty).
   38
   39course_level(A,level_300):0.0666666666666667; course_level(A,level_400):0.318518518518519; course_level(A,level_500):0.614814814814815 :-
   40    course(A).
   41
   42phase(A,post_Generals):0.935483870967742; phase(A,post_Quals):0.032258064516129; phase(A,pre_Quals):0.032258064516129 :-
   43    student(A),
   44    years_in_program(A,year_6_or_more).
   45
   46phase(A,post_Generals):0.04; phase(A,post_Quals):0.04; phase(A,pre_Quals):0.92 :-
   47    student(A),
   48    \+years_in_program(A,year_6_or_more),
   49    years_in_program(A,year_1).
   50
   51phase(A,post_Generals):0.566666666666667; phase(A,post_Quals):0.366666666666667; phase(A,pre_Quals):0.0666666666666667 :-
   52    student(A),
   53    \+years_in_program(A,year_6_or_more),
   54    \+years_in_program(A,year_1),
   55    years_in_program(A,year_5).
   56
   57phase(A,post_Generals):0.222222222222222; phase(A,post_Quals):0.666666666666667; phase(A,pre_Quals):0.111111111111111 :-
   58    student(A),
   59    \+years_in_program(A,year_6_or_more),
   60    \+years_in_program(A,year_1),
   61    \+years_in_program(A,year_5),
   62    years_in_program(A,year_4).
   63
   64phase(A,post_Generals):0.0476190476190476; phase(A,post_Quals):0.547619047619048; phase(A,pre_Quals):0.404761904761905 :-
   65    student(A),
   66    \+years_in_program(A,year_6_or_more),
   67    \+years_in_program(A,year_1),
   68    \+years_in_program(A,year_5),
   69    \+years_in_program(A,year_4).
   70
   71position(A,faculty):0.732142857142857; position(A,faculty_adjunct):0.125; position(A,faculty_affiliate):0.0714285714285714; position(A,faculty_emeritus):0.0714285714285714 :-
   72    professor(A).
   73
   74aux1_prof_nb_publications(A) :-
   75    advised_by(B,A),
   76    student_nb_publications(B,three_or_more).
   77
   78prof_nb_publications(A,none):0.0416666666666667; prof_nb_publications(A,one_to_nine):0.416666666666667; prof_nb_publications(A,ten_or_more):0.541666666666667 :-
   79    professor(A),
   80    aux1_prof_nb_publications(A).
   81
   82prof_nb_publications(A,none):0.5; prof_nb_publications(A,one_to_nine):0.294117647058824; prof_nb_publications(A,ten_or_more):0.205882352941176 :-
   83    professor(A),
   84    \+aux1_prof_nb_publications(A).
   85
   86shared_publication(A,B):0.00101010101010101 :-
   87    professor(A),
   88    student(B),
   89    student_nb_publications(B,none).
   90
   91shared_publication(A,B):0.956521739130435 :-
   92    professor(A),
   93    student(B),
   94    \+student_nb_publications(B,none),
   95    advised_by(B,A),
   96    years_in_program(B,year_6_or_more).
   97
   98shared_publication(A,B):0.125 :-
   99    professor(A),
  100    student(B),
  101    \+student_nb_publications(B,none),
  102    advised_by(B,A),
  103    \+years_in_program(B,year_6_or_more),
  104    prof_nb_publications(A,none).
  105
  106shared_publication(A,B):0.631578947368421 :-
  107    professor(A),
  108    student(B),
  109    \+student_nb_publications(B,none),
  110    advised_by(B,A),
  111    \+years_in_program(B,year_6_or_more),
  112    \+prof_nb_publications(A,none).
  113
  114shared_publication(A,B):0.00515463917525773 :-
  115    professor(A),
  116    student(B),
  117    \+student_nb_publications(B,none),
  118    \+advised_by(B,A),
  119    prof_nb_publications(A,none).
  120
  121shared_publication(A,B):0.099236641221374 :-
  122    professor(A),
  123    student(B),
  124    \+student_nb_publications(B,none),
  125    \+advised_by(B,A),
  126    \+prof_nb_publications(A,none),
  127    prof_nb_publications(A,one_to_nine),
  128    student_nb_publications(B,one_or_two).
  129
  130shared_publication(A,B):0.0152671755725191 :-
  131    professor(A),
  132    student(B),
  133    \+student_nb_publications(B,none),
  134    \+advised_by(B,A),
  135    \+prof_nb_publications(A,none),
  136    prof_nb_publications(A,one_to_nine),
  137    \+student_nb_publications(B,one_or_two).
  138
  139shared_publication(A,B):0.146017699115044 :-
  140    professor(A),
  141    student(B),
  142    \+student_nb_publications(B,none),
  143    \+advised_by(B,A),
  144    \+prof_nb_publications(A,none),
  145    \+prof_nb_publications(A,one_to_nine).
  146
  147student_nb_publications(A,none):0.594405594405594; student_nb_publications(A,one_or_two):0.195804195804196; student_nb_publications(A,three_or_more):0.20979020979021 :-
  148    student(A).
  149
  150aux1_taught_by(A,B) :-
  151    teaching_assistant(A,C),
  152    advised_by(C,B).
  153
  154aux2_taught_by(A,B) :-
  155    teaching_assistant(A,C),
  156    advised_by(C,B),
  157    shared_publication(B,C).
  158
  159taught_by(A,B):0.777777777777778 :-
  160    course(A),
  161    professor(B),
  162    aux1_taught_by(A,B),
  163    aux2_taught_by(A,B).
  164
  165taught_by(A,B):0.333333333333333 :-
  166    course(A),
  167    professor(B),
  168    aux1_taught_by(A,B),
  169    \+aux2_taught_by(A,B).
  170
  171taught_by(A,B):0.266666666666667 :-
  172    course(A),
  173    professor(B),
  174    \+aux1_taught_by(A,B),
  175    position(B,faculty),
  176    course_level(A,level_300).
  177
  178taught_by(A,B):0.102941176470588 :-
  179    course(A),
  180    professor(B),
  181    \+aux1_taught_by(A,B),
  182    position(B,faculty),
  183    \+course_level(A,level_300).
  184
  185taught_by(A,B):0.029673590504451 :-
  186    course(A),
  187    professor(B),
  188    \+aux1_taught_by(A,B),
  189    \+position(B,faculty).
  190
  191teaching_assistant(A,B):0.0333333333333333 :-
  192    course(A),
  193    student(B),
  194    course_level(A,level_300),
  195    student_nb_publications(B,three_or_more).
  196
  197teaching_assistant(A,B):0.158227848101266 :-
  198    course(A),
  199    student(B),
  200    course_level(A,level_300),
  201    \+student_nb_publications(B,three_or_more).
  202
  203teaching_assistant(A,B):0.0337519623233909 :-
  204    course(A),
  205    student(B),
  206    \+course_level(A,level_300),
  207    course_level(A,level_400).
  208
  209teaching_assistant(A,B):0.0120999219359875 :-
  210    course(A),
  211    student(B),
  212    \+course_level(A,level_300),
  213    \+course_level(A,level_400).
  214
  215years_in_program(A,year_1):0.244444444444444; years_in_program(A,year_2):0.155555555555556; years_in_program(A,year_3):0.233333333333333; years_in_program(A,year_4):0.144444444444444; years_in_program(A,year_5):0.111111111111111; years_in_program(A,year_6_or_more):0.111111111111111 :-
  216    student(A),
  217    student_nb_publications(A,none).
  218
  219years_in_program(A,year_1):0.032258064516129; years_in_program(A,year_2):0.0645161290322581; years_in_program(A,year_3):0.0645161290322581; years_in_program(A,year_4):0.209677419354839; years_in_program(A,year_5):0.306451612903226; years_in_program(A,year_6_or_more):0.32258064516129 :-
  220    student(A),
  221    \+student_nb_publications(A,none).
  222
  223:- end_lpad.

?- prob(taught_by(c1,p1),Prob). % what is the probability that course c1 is taught by professor p1? % expected result 0.09265809305111444 ?- prob_bar(taught_by(c1,p1),Prob). % what is the probability that course c1 is taught by professor p1? % expected result 0.09265809305111444 ?- bdd_dot_string(taught_by(c1,p1),B,V). % draw the bdd for the query

*/