Thanks for the link. I dug a bit into the site, and failed to fully grok the "why" behind even the first example. From https://www.metalevel.at/prolog/facets#declarative:
list_length([], 0).
list_length([_|Ls], N) :-
N #> 0,
N #= N0 + 1,
list_length(Ls, N0).
All makes sense, except for the subclause "N #> 0". Why is this necessary, is there any way to generate a negative N?!