Prologの挙動が追えない

add(0, Y, Y).
add(s(X), Y, s(Z)) :- add(X, Y, Z).

mul(0, _, 0).
mul(s(X), Y, Z) :-
	mul(X, Y, Z1), add(Z1, Y, Z).

こうした場合に

?- mul(X, Y, s(s(s(s(0))))).

これが上手く動かない。ていうか終了しない。traceをじっくり眺めて研究する必要がありそうっていうかPrologの挙動が分かるような文書を探すほうが手っ取り早いか。とりあえず探索問題一つ思いついた。

追記:どうも解が見つからない時に挙動がおかしくなってるようす。終了条件が無いからか?→どうやって終了条件を付ければ良いか考える。