1/*
    2type_restriction((A < B),[number(A),number(B)]).
    3
    4
    5ex(merge([1],[2],[1,2]),'+').
    6ex(merge([6],[4],[4,6]),'+').
    7ex(merge([2,3,4,5],[4,7],[2,3,4,4,5,7]),'+'). 
    8ex(merge([44,55,66],[22,33,44,55],[22,33,44,44,55,55,66]),'+'). 
    9ex(merge([],[54,66,77,88,97],[54,66,77,88,97]),'+'). 
   10ex(merge([],[4],[4]),'+'). 
   11ex(merge([],[],[]),'+').
   12ex(merge([22,23,24,25],[],[22,23,24,25]),'+'). 
   13ex(merge([24],[],[24]),'+'). 
   14ex(merge([29,39,49,59],[37,79,99],[29,37,39,49,59,79,99]),'+').
   15ex(merge([2],[4,7],[2,4,7]),'+').
   16ex(merge([1],[2],[2,1]),'-').
   17ex(merge([6],[4],[6,4]),'-').
   18ex(merge([8],[7],[8]),'-').
   19ex(merge([2,3,4,5],[4,7],[4,3,2,4,5,7]),'-'). 
   20ex(merge([44,55,66],[22,33,44,55],[22,44,55,33,55,44,66]),'-'). 
   21ex(merge([29,39,49,59],[37,79,99],[37,39,29,59,79,49,99]),'-').
   22ex(merge([2],[4,7],[4,2]),'-').
   23ex(merge([1,2],[3,4],[1,3,2,4]),'-').
   24
   25
   26*/
   27
   28type_restriction(male(A),[atom(A)]).
   29type_restriction(female(A),[atom(A)]).
   30type_restriction(parent(A,B),[atom(A),atom(B)]).
   31
   32
   33ex(father(ma,b),+).
   34ex(father(mc,d),+).
   35ex(father(me,f),+).
   36ex(father(mg,h),+).
   37ex(father(mi,j),+).
   38ex(father(mk,l),+).
   39
   40ex(father(fa,b),-).
   41ex(father(fc,d),-).
   42ex(father(fe,f),-).
   43ex(father(fg,h),-).
   44ex(father(fi,j),-).
   45ex(father(fk,l),-).
   46
   47ex(father(b,ma),-).
   48ex(father(d,mc),-).
   49ex(father(f,me),-).
   50ex(father(h,mg),-).
   51ex(father(j,mi),-).
   52ex(father(l,mk),-).
   53ex(father(b,fa),-).
   54ex(father(d,fc),-).
   55ex(father(f,fe),-).
   56ex(father(h,fg),-).
   57ex(father(j,fi),-).
   58ex(father(l,fk),-).
   59
   60
   61ex(human(ma),+).
   62ex(human(mc),+).
   63ex(human(me),+).
   64ex(human(mg),+).
   65ex(human(mi),+).
   66ex(human(mk),+).
   67ex(human(fa),+).
   68ex(human(fc),+).
   69ex(human(fe),+).
   70ex(human(fg),+).
   71ex(human(fi),+).
   72ex(human(fk),+).
   73ex(human(b),+).
   74ex(human(d),+).
   75ex(human(f),+).
   76ex(human(h),+).
   77ex(human(j),+).
   78ex(human(l),+).
   79ex(human(a),-).
   80ex(human(c),-).
   81
   82
   83male(ma).
   84male(mc).
   85male(me).
   86male(mg).
   87male(mi).
   88male(mk).
   89male(b).
   90male(d).
   91male(f).
   92male(h).
   93male(j).
   94male(l).
   95
   96female(fa).
   97female(fc).
   98female(fe).
   99female(fg).
  100female(fi).
  101female(fk).
  102
  103
  104parent(ma,b).
  105parent(mc,d).
  106parent(me,f).
  107parent(mg,h).
  108parent(mi,j).
  109parent(mk,l).
  110
  111parent(fa,b).
  112parent(fc,d).
  113parent(fe,f).
  114parent(fg,h).
  115parent(fi,j).
  116parent(fk,l).
  117
  118
  119/*
  120
  121ex(t(nil),+).
  122ex(t(tree(nil,0,nil)),+).
  123ex(t(tree(nil,0,tree(nil,0,nil))),+).
  124ex(t(tree(nil,0,tree(nil,s(0),nil))),+).
  125ex(t(tree(nil,0,tree(nil,s(s(0)),nil))),+).
  126ex(t(tree(nil,0,tree(nil,s(s(s(0))),nil))),+).
  127ex(t(tree(nil,s(0),nil)),+).
  128ex(t(tree(nil,s(0),tree(nil,0,nil))),+).
  129ex(t(tree(nil,s(0),tree(nil,s(0),nil))),+).
  130ex(t(tree(nil,s(0),tree(nil,s(s(0)),nil))),+).
  131ex(t(tree(nil,s(0),tree(nil,s(s(s(0))),nil))),+).
  132ex(t(tree(nil,s(s(0)),nil)),+).
  133ex(t(tree(nil,s(s(0)),tree(nil,0,nil))),+).
  134ex(t(tree(nil,s(s(0)),tree(nil,s(0),nil))),+).
  135ex(t(tree(nil,s(s(0)),tree(nil,s(s(0)),nil))),+).
  136ex(t(tree(nil,s(s(0)),tree(nil,s(s(s(0))),nil))),+).
  137ex(t(tree(nil,s(s(s(0))),nil)),+).
  138ex(t(tree(nil,s(s(s(0))),tree(nil,0,nil))),+).
  139ex(t(tree(nil,s(s(s(0))),tree(nil,s(0),nil))),+).
  140ex(t(tree(nil,s(s(s(0))),tree(nil,s(s(0)),nil))),+).
  141ex(t(tree(nil,s(s(s(0))),tree(nil,s(s(s(0))),nil))),+).
  142ex(t(tree(tree(nil,0,nil),0,nil)),+).
  143ex(t(tree(tree(nil,0,nil),0,tree(nil,0,nil))),+).
  144ex(t(tree(tree(nil,0,nil),0,tree(nil,s(0),nil))),+).
  145ex(t(tree(tree(nil,0,nil),0,tree(nil,s(s(0)),nil))),+).
  146ex(t(tree(tree(nil,0,nil),0,tree(nil,s(s(s(0))),nil))),+).
  147ex(t(tree(tree(nil,0,nil),s(0),nil)),+).
  148ex(t(tree(tree(nil,0,nil),s(0),tree(nil,0,nil))),+).
  149ex(t(tree(tree(nil,0,nil),s(0),tree(nil,s(0),nil))),+).
  150ex(t(tree(tree(nil,0,nil),s(0),tree(nil,s(s(0)),nil))),+).
  151ex(t(tree(tree(nil,0,nil),s(0),tree(nil,s(s(s(0))),nil))),+).
  152ex(t(tree(tree(nil,0,nil),s(s(0)),nil)),+).
  153ex(t(tree(tree(nil,0,nil),s(s(0)),tree(nil,0,nil))),+).
  154ex(t(tree(tree(nil,0,nil),s(s(0)),tree(nil,s(0),nil))),+).
  155ex(t(tree(tree(nil,0,nil),s(s(0)),tree(nil,s(s(0)),nil))),+).
  156ex(t(tree(tree(nil,0,nil),s(s(0)),tree(nil,s(s(s(0))),nil))),+).
  157ex(t(tree(tree(nil,0,nil),s(s(s(0))),nil)),+).
  158ex(t(tree(tree(nil,0,nil),s(s(s(0))),tree(nil,0,nil))),+).
  159ex(t(tree(tree(nil,0,nil),s(s(s(0))),tree(nil,s(0),nil))),+).
  160ex(t(tree(tree(nil,0,nil),s(s(s(0))),tree(nil,s(s(0)),nil))),+).
  161ex(t(tree(tree(nil,0,nil),s(s(s(0))),tree(nil,s(s(s(0))),nil))),+).
  162ex(t(tree(tree(nil,s(0),nil),0,nil)),+).
  163ex(t(tree(tree(nil,s(0),nil),0,tree(nil,0,nil))),+).
  164ex(t(tree(tree(nil,s(0),nil),0,tree(nil,s(0),nil))),+).
  165ex(t(tree(tree(nil,s(0),nil),0,tree(nil,s(s(0)),nil))),+).
  166ex(t(tree(tree(nil,s(0),nil),0,tree(nil,s(s(s(0))),nil))),+).
  167ex(t(tree(tree(nil,s(0),nil),s(0),nil)),+).
  168ex(t(tree(tree(nil,s(0),nil),s(0),tree(nil,0,nil))),+).
  169ex(t(tree(tree(nil,s(0),nil),s(0),tree(nil,s(0),nil))),+).
  170ex(t(tree(tree(nil,s(0),nil),s(0),tree(nil,s(s(0)),nil))),+).
  171ex(t(tree(tree(nil,s(0),nil),s(0),tree(nil,s(s(s(0))),nil))),+).
  172ex(t(tree(tree(nil,s(0),nil),s(s(0)),nil)),+).
  173ex(t(tree(tree(nil,s(0),nil),s(s(0)),tree(nil,0,nil))),+).
  174ex(t(tree(tree(nil,s(0),nil),s(s(0)),tree(nil,s(0),nil))),+).
  175ex(t(tree(tree(nil,s(0),nil),s(s(0)),tree(nil,s(s(0)),nil))),+).
  176ex(t(tree(tree(nil,s(0),nil),s(s(0)),tree(nil,s(s(s(0))),nil))),+).
  177ex(t(tree(tree(nil,s(0),nil),s(s(s(0))),nil)),+).
  178ex(t(tree(tree(nil,s(0),nil),s(s(s(0))),tree(nil,0,nil))),+).
  179ex(t(tree(tree(nil,s(0),nil),s(s(s(0))),tree(nil,s(0),nil))),+).
  180ex(t(tree(tree(nil,s(0),nil),s(s(s(0))),tree(nil,s(s(0)),nil))),+).
  181ex(t(tree(tree(nil,s(0),nil),s(s(s(0))),tree(nil,s(s(s(0))),nil))),+).
  182ex(t(tree(tree(nil,s(s(0)),nil),0,nil)),+).
  183ex(t(tree(tree(nil,s(s(0)),nil),0,tree(nil,0,nil))),+).
  184ex(t(tree(tree(nil,s(s(0)),nil),0,tree(nil,s(0),nil))),+).
  185ex(t(tree(tree(nil,s(s(0)),nil),0,tree(nil,s(s(0)),nil))),+).
  186ex(t(tree(tree(nil,s(s(0)),nil),0,tree(nil,s(s(s(0))),nil))),+).
  187ex(t(tree(tree(nil,s(s(0)),nil),s(0),nil)),+).
  188ex(t(tree(tree(nil,s(s(0)),nil),s(0),tree(nil,0,nil))),+).
  189ex(t(tree(tree(nil,s(s(0)),nil),s(0),tree(nil,s(0),nil))),+).
  190ex(t(tree(tree(nil,s(s(0)),nil),s(0),tree(nil,s(s(0)),nil))),+).
  191ex(t(tree(tree(nil,s(s(0)),nil),s(0),tree(nil,s(s(s(0))),nil))),+).
  192ex(t(tree(tree(nil,s(s(0)),nil),s(s(0)),nil)),+).
  193ex(t(tree(tree(nil,s(s(0)),nil),s(s(0)),tree(nil,0,nil))),+).
  194ex(t(tree(tree(nil,s(s(0)),nil),s(s(0)),tree(nil,s(0),nil))),+).
  195ex(t(tree(tree(nil,s(s(0)),nil),s(s(0)),tree(nil,s(s(0)),nil))),+).
  196ex(t(tree(tree(nil,s(s(0)),nil),s(s(0)),tree(nil,s(s(s(0))),nil))),+).
  197ex(t(tree(tree(nil,s(s(0)),nil),s(s(s(0))),nil)),+).
  198ex(t(tree(tree(nil,s(s(0)),nil),s(s(s(0))),tree(nil,0,nil))),+).
  199ex(t(tree(tree(nil,s(s(0)),nil),s(s(s(0))),tree(nil,s(0),nil))),+).
  200ex(t(tree(tree(nil,s(s(0)),nil),s(s(s(0))),tree(nil,s(s(0)),nil))),+).
  201ex(t(tree(tree(nil,s(s(0)),nil),s(s(s(0))),tree(nil,s(s(s(0))),nil))),+).
  202ex(t(tree(tree(nil,s(s(s(0))),nil),0,nil)),+).
  203ex(t(tree(tree(nil,s(s(s(0))),nil),0,tree(nil,0,nil))),+).
  204ex(t(tree(tree(nil,s(s(s(0))),nil),0,tree(nil,s(0),nil))),+).
  205ex(t(tree(tree(nil,s(s(s(0))),nil),0,tree(nil,s(s(0)),nil))),+).
  206ex(t(tree(tree(nil,s(s(s(0))),nil),0,tree(nil,s(s(s(0))),nil))),+).
  207ex(t(tree(tree(nil,s(s(s(0))),nil),s(0),nil)),+).
  208ex(t(tree(tree(nil,s(s(s(0))),nil),s(0),tree(nil,0,nil))),+).
  209ex(t(tree(tree(nil,s(s(s(0))),nil),s(0),tree(nil,s(0),nil))),+).
  210ex(t(tree(tree(nil,s(s(s(0))),nil),s(0),tree(nil,s(s(0)),nil))),+).
  211ex(t(tree(tree(nil,s(s(s(0))),nil),s(0),tree(nil,s(s(s(0))),nil))),+).
  212ex(t(tree(tree(nil,s(s(s(0))),nil),s(s(0)),nil)),+).
  213ex(t(tree(tree(nil,s(s(s(0))),nil),s(s(0)),tree(nil,0,nil))),+).
  214ex(t(tree(tree(nil,s(s(s(0))),nil),s(s(0)),tree(nil,s(0),nil))),+).
  215ex(t(tree(tree(nil,s(s(s(0))),nil),s(s(0)),tree(nil,s(s(0)),nil))),+).
  216ex(t(tree(tree(nil,s(s(s(0))),nil),s(s(0)),tree(nil,s(s(s(0))),nil))),+).
  217ex(t(tree(tree(nil,s(s(s(0))),nil),s(s(s(0))),nil)),+).
  218ex(t(tree(tree(nil,s(s(s(0))),nil),s(s(s(0))),tree(nil,0,nil))),+).
  219ex(t(tree(tree(nil,s(s(s(0))),nil),s(s(s(0))),tree(nil,s(0),nil))),+).
  220ex(t(tree(tree(nil,s(s(s(0))),nil),s(s(s(0))),tree(nil,s(s(0)),nil))),+).
  221ex(t(tree(tree(nil,s(s(s(0))),nil),s(s(s(0))),tree(nil,s(s(s(0))),nil))),+).
  222
  223ex(t(0),-).
  224ex(t(s(0)),-).
  225ex(t(s(s(0))),-).
  226ex(t(s(s(s(0)))),-).
  227ex(t(tree(nil,nil,nil)),-).
  228ex(t(tree(nil,tree(nil,0,nil),nil)),-).
  229ex(t(tree(0,0,s(0))),-).
  230ex(t(tree(s(s(0)),s(0),s(s(s(0))))),-).
  231ex(t(tree(nil,0,s(0))),-).
  232ex(t(tree(nil,s(0),s(s(s(0))))),-).
  233ex(t(tree(0,0,nil)),-).
  234ex(t(tree(s(s(s(0))),s(0),nil)),-).
  235ex(t(tree(nil,s(nil),nil)),-).
  236ex(t(tree(nil,s(s(nil)),nil)),-).
  237ex(t(tree(nil,s(tree(nil,0,nil)),nil)),-).
  238ex(t(tree(nil,s(s(tree(nil,s(0),nil))),nil)),-).
  239ex(t(tree(nil,s(s(s(nil))),nil)),-).
  240
  241
  242ex(p(f([],[])),+).
  243ex(p(f([a],[b])),+).
  244ex(p(f([a,a],[b,b])),+).
  245ex(p(f([a,a,a],[b,b,b])),+).
  246ex(p(f([a,a,a,a],[b,b,b,b])),+).
  247
  248
  249ex(p([]),-).
  250ex(p([a]),-).
  251ex(p([a,a]),-).
  252ex(p([a,a,a]),-).
  253ex(p([a,a,a,a]),-).
  254ex(p([b]),-).
  255ex(p([b,b]),-).
  256ex(p([b,b,b]),-).
  257ex(p([b,b,b,b]),-).
  258ex(p(f([a],[])),-).
  259ex(p(f([],[b,b])),-).
  260ex(p(f([a,a,a],[b,b])),-).
  261ex(p(f([a],[b,b,b])),-).
  262ex(p(f([a,a,a,a],[b,b,b])),-).
  263*/