:- seqex(sfib/2) /* , det(sfib/2), nofail(sfib/2)  */. 
/* :- mutex(fib/2),  det(fib/2),  nofail(fib/2). */

sfib(0,0).
sfib(1,1).
sfib(M,N) :- M > 1, M1 is M-1, M2 is M-2,(sfib(M1,N1) //  sfib(M2,N2)),
	     							 N is N1+N2.

fib(M,N) :- M > 15,  ((M1 is M-1, fib(M1,N1))  //  (M2 is M-2, fib(M2,N2))),
	     							 N is N1+N2.
fib(M,N) :- M =< 15, ((M1 is M-1, sfib(M1,N1)) //  (M2 is M-2, sfib(M2,N2))),
	     							 N is N1+N2.

?- fib(16,M).

