% interval_splitting(X, Step, Min, Max).
% Succeeds when X is greater than or equal to Min and lesser than or equal to Max,
% enumerating the intervals of width Step between Min and Max.

interval_splitting(X, Step, Min, Max) :-
   Min + Step <= Max,
   NextX = min(X) + Step,
   (
      X < NextX
   ;
      X >= NextX,
      interval_splitting(X, Step, Min + Step, Max)
   ).
interval_splitting(X, Step, Min, Max) :-
   Min + Step > Max.