 0
 0 
In fact, succ/2 is made to order for natural numbers.
- What is the predecessor of 0: succ(X,0)... fails, "there is nothing like that"
- What is the predecessor of -1: succ(X,-1)... throws: "What the hell is this -1?"
- What is the successor of -1: succ(-1,X)... throws: "What the hell is this -1?"
There should be an
zsucc(?A,?B)
working on ℤ, not only on ℕ.
zsucc(X,Y) :-
  (nonvar(X) -> (integer(X) -> true ; type_error(integer,X)) ; true),
  (nonvar(Y) -> (integer(Y) -> true ; type_error(integer,Y)) ; true),
  ((var(X),var(Y)) -> instantiation_error("Need at least one value instantiated") ; true),
  (nonvar(X)
     -> Y is X+1
     ;  X is Y-1).

