Number/SK.bruijn
# MIT License, Copyright (c) 2025 Marvin Borner
# by https://john-tromp.medium.com/sk-numerals-9ad1b5634b28
# and proposed by Stephen Wolfram in "Combinators: A Centennial View"
:import std/Combinator .
:import std/Tuples .
# -4 [[[[3]]]]
# -3 [[[[2]]]]
# -2 [[[2]]]
# -1 [[[1]]]
# 0 [[1]]
# +1 [[0]]
# +2 [[1 0]]
# +3 [[0 (1 0)]]
# +4 [[(1 0) (0 (1 0))]]
# +n has fib(n) of 1s
zero k ⧗ SK
inc s ⧗ SK → SK
++‣ inc
dec [[[2 (k 0) 1]]] ⧗ SK → SK
--‣ dec
:test (dec (inc zero)) (zero)
# only for positive numbers (also see Bruijn.bruijn!)
zero? ki : i : s : k ⧗ SK → Boolean
=?‣ zero?