conclude(true):-!.
conclude((A, B)):-!, conclude(A), conclude(B).
conclude(A):-prove(A).
conclude(A):-default((A:-B)), conclude(B), \+ contradiction(A).

prove(true):-!.
prove((A, B)):-!, prove(A), prove(B).
prove(A):-rule((A:-B)), prove(B).

contradiction(\+ A):-!, prove(A).
contradiction(A):-prove(\+ A).

default((\+ flies(X):-mammal(X))).
default((flies(X):-bat(X))).
default((\+ flies(X):-dead(X))).
rule((mammal(X):-bat(X))).
rule((bat(dracula):-true)).
rule((dead(dracula):-true)).
