Zbyt wiele zwrotów: dlaczego jest tu „powtórzenie”?

Wykonuję bardzo proste ćwiczenie w Prologu i jest coś, czego nie rozumiem w śladzie. Program jest „większy niż” (>) na liczbach całkowitych reprezentowanych jako następcy:

greater_than(succ(_), 0).
greater_than(succ(A), succ(B)) :-
  greater_than(A, B).

Mój problem: nie rozumiem, dlaczego prośbagreater_than(succ(succ(succ(0))),succ(0)) generujeredo w następującym śladzie:

[trace] ?- greater_than(succ(succ(succ(0))),succ(0)).
Call: (6) greater_than(succ(succ(succ(0))), succ(0)) ? creep
Call: (7) greater_than(succ(succ(0)), 0) ? creep
Exit: (7) greater_than(succ(succ(0)), 0) ? creep
Exit: (6) greater_than(succ(succ(succ(0))), succ(0)) ? creep
true ;
Redo: (7) greater_than(succ(succ(0)), 0) ? creep
Fail: (7) greater_than(succ(succ(0)), 0) ? creep
Fail: (6) greater_than(succ(succ(succ(0))), succ(0)) ? creep
false. 

Dlaczego jestredo tutaj? Jak mogę tego uniknąć (oczywiście bez cięcia)?

BTW, zanim zapytasz: nie, to nie jest jakaś praca domowa ...

questionAnswers(2)

yourAnswerToTheQuestion