(Note: this answer is somewhat of a guess)

Consider how Prolog determines whether `f(a,c)`

is true or not. It checks the first rule, `f(a,b)`

, and doesn’t find a match, but the second rule, `f(a,c)`

matches. Therefore, `f(a,c)`

is true. Furthermore, since there are no more rules for `f`

, there is no point in allowing a backtrack to occur — there are no other possible solutions.

Now consider `f(a,b)`

. Prolog will check the first rule, and find a match. Therefore, `f(a,b)`

is true. However, not all rules have been exhausted. Therefore, Prolog will allow the search to continue (if you hit `;`

). When you do continue the search and backtrack, it will discover that the remaining rules, specifically `f(a,c)`

, do not match `f(a,b)`

. Therefore, the result is false.