fibonacci(n) := fibonacciHelper([[1,0],[0,1]], n); fibonacciHelper(M(2), n) := let N := [[1,1],[1,0]]; in M[1,1] when n <= 1 else fibonacciHelper(matmul(M, N), n - 1); matmul(A(2), B(2)) [i,j] := sum( A[i,all] * B[all,j] );