proposition(p) proposition(q) proposition(r) negation(not(X)) :- sentence(X) conjunction(and(X,Y)) :- sentence(X) & sentence(Y) disjunction(or(X,Y)) :- sentence(X) & sentence(Y) sentence(X) :- proposition(X) sentence(X) :- negation(X) sentence(X) :- conjunction(X) sentence(X) :- disjunction(X) istrue(P) :- value(P,true) istrue(not(P)) :- ~istrue(P) istrue(and(P,Q)) :- istrue(P) & istrue(Q) istrue(or(P,Q)) :- istrue(P) istrue(or(P,Q)) :- istrue(Q)