?-op(200,fx,not).
?-op(150,xfx,and).
?-op(100,xfx,or).

formula(t).
formula(f).
formula(not(_)).
formula(and(_,_)).
formula(or(_,_)).

eval(t).
eval(not(f)).

eval(X or _) :- eval(X).
eval(_ or X) :- eval(X).
eval(X and Y) :- eval(X), eval(Y).
eval(not(X or Y)) :- eval(not(X)), eval(not(Y)).
eval(not(X and _)) :- eval(not(X)).
eval(not(_ and X)) :- eval(not(X)).

eval(not(not(X))) :- eval(X).

bool(t).
bool(f).

