true. :-false. p:-ap(1). neg_p:-ap(3). p:-ap(4). ap(1):-ok(1),not q. ap(2):-ok(2),not neg_q. ap(3):-ok(3),not p. ap(4):-ok(4),not neg_p. ok(X):-name(X),oko(X,1),oko(X,2),oko(X,3),oko(X,4). q:-ap(2). bl(1):-ok(1),q. bl(2):-ok(2),neg_q. bl(3):-ok(3),p. bl(4):-ok(4),neg_p. prec(2,1):-true. prec(3,2):-true. prec(4,3):-true. neg_prec(Y,X):-name(X),name(Y),prec(X,Y). prec(X,Z):-name(X),name(Z),name(Y),prec(X,Y),prec(Y,Z). oko(X,Y):-name(X),name(Y),not prec(X,Y). oko(X,Y):-name(X),name(Y),prec(X,Y),ap(Y). oko(X,Y):-name(X),name(Y),prec(X,Y),bl(Y). false:-p,neg_p. false:-q,neg_q. false:-name(X),name(Y),prec(X,Y),neg_prec(X,Y). name(4). name(3). name(2). name(1).