package examples.fib; import java.math.BigInteger; import runtime.Logical; import static util.arithmetics.primitives.intUtil.*; public handler fib { solver runtime.EqualitySolver; public constraint fib(int N, Logical M); rules { fib(N,M1), fib(N,M2) <=> M1 = M2, fib(N, M1); fib(0,M) ==> M = 1; fib(1,M) ==> M = 1; local int N1, N2; local Logical M1, M2; fib(N,M) ==> N > 1 | N1 = dec(N), fib(N1,M1), N2 = sub(N, 2), fib(N2,M2), M = M1.add(M2); } }