% The syntactic kernel of Prolog
pred {goal :- goal}.         %  e.g., used in assert((head:-body))
pred {goal,goal}.            %  , = conjunction
pred {goal;goal}.            %  ; = disjunction
pred {goal->goal}.           %  -> = if-then
pred !.
pred \+ goal.
pred not(goal).


type list(T) --> [] ; [ T | list(T) ].



pred @T = @T.
pred @T == @T.
pred_neg @T1 \== @T2.



% control
pred abort.
pred false.
pred true.
pred fail.
pred succeed.



pred ensure_loaded(top).