true. :- false. expensive :- ap(e). neg_expensive :- powerful, safe. ap(e) :- ok(e), not neg_expensive. ap(p) :- ok(p), not neg_powerful. ap(s) :- ok(s), not neg_safe. ap(X) :- sname(X), apo(X, e), apo(X, p), apo(X, s). nhead(e) :- neg_expensive. nhead(p) :- neg_powerful. nhead(s) :- neg_safe. ok(X) :- in(X, Y), ok(Y), not ko(Y). ok(X) :- name(X), not in(X, m1), not in(X, m2), not in(X, m3), not in(X, m4). ok(X) :- sname(X), oko(X, m1), oko(X, m2), oko(X, m3), oko(X, m4). bl(X) :- ok(X), in(e, X), neg_expensive. bl(X) :- ok(X), in(e, X), neg_expensive. bl(X) :- ok(X), in(p, X), neg_powerful. bl(X) :- ok(X), in(p, X), neg_powerful. bl(X) :- ok(X), in(s, X), neg_safe. bl(X) :- ok(X), in(s, X), neg_safe. in(p, m1). in(s, m2). in(e, m3). in(p, m4). in(s, m4). powerful :- ap(p). neg_powerful :- expensive, safe. safe :- ap(s). neg_safe :- expensive, powerful. neg_safe :- true. prec(m1, m2) :- true. prec(m2, m3) :- true. prec(m3, m4) :- true. neg_prec(Y, X) :- sname(X), sname(Y), prec(X, Y). prec(X, Z) :- sname(X), sname(Z), sname(Y), prec(X, Y), prec(Y, Z). sname(Y) :- in(X, Y). apo(Y, X) :- sname(Y), name(X), not in(X, Y). apo(X, Y) :- sname(X), name(Y), in(Y, X), ap(Y). nap(X) :- sname(X), napo(X, e), napo(X, p), napo(X, s). napo(Y, X) :- sname(Y), name(X), not in(X, Y). napo(X, Y) :- sname(X), name(Y), in(Y, X), not nhead(Y). ko(X) :- bl(X). oko(X, Y) :- sname(X), sname(Y), not prec(X, Y). oko(X, Y) :- sname(X), sname(Y), prec(X, Y), ap(Y). oko(X, Y) :- sname(X), sname(Y), prec(X, Y), bl(Y). false :- expensive, neg_expensive. false :- in(X, Y), neg_in(X, Y). false :- powerful, neg_powerful. false :- safe, neg_safe. false :- name(X), name(Y), prec(X, Y), neg_prec(X, Y). name(s). name(p). name(e).