Prolog is not a general-purpose theorem prover, and its powers of inference are limited. For example, it cannot answer these questions:
X > 1, X =< 2, integer(X). 25 is X^2 + Y^2, integer(X), integer(Y).
Prolog works by backward-chaining, using Modus Ponens:
If I am asked to prove Q and I have the rule (P implies Q) then if I can prove P, I can prove Q otherwise I shall assume Q is false.Note that if Prolog can't prove a goal, it assumes it to be false. This is called the closed world assumption.
I shall illustrate execution using the following set of rules.
/*10*/ suits(Skier, st_sartre) :- is_a(Skier, beginner), wants(Skier, fun). /*20*/ suits(Skier, schloss_heidegger) :- is_a(Skier, beginner), wants(Skier, serious). /*30*/ suits(Skier, chateau_derrida) :- is_a(Skier, advanced), wants(Skier, serious). /*40*/ suits(Skier, wittgenstein_gladbach) :- is_a(Skier, advanced), wants(Skier, fun). /*50*/ is_a(Skier, beginner) :- had_lessons(Skier, L), L < 30. /*60*/ is_a(Skier, beginner) :- had_lessons(Skier, L), L >= 30, has_fitness(Skier, poor). /*70*/ is_a(Skier, advanced) :- had_lessons(Skier, L), L >= 30, has_fitness(Skier, good). /*80*/ has_fitness(Skier, poor) :- max_pressups(Skier, P), P < 10. /*90*/ has_fitness(Skier, good) :- max_pressups(Skier, P), P >= 10. wants(eddie,fun). max_pressups(eddie,170). had_lessons(eddie,78).