Number/Parigot.bruijn


# MIT License, Copyright (c) 2024 Marvin Borner
# see "on the representation of data in lambda-calculus" (Parigot 1989)
# has a "one-step" predecessor *and* addition function

# zero Parigot number
zero [0] ⧗ Parigot

# increments Parigot number
inc [[[0 (2 1)]]] ⧗ Parigot → Parigot

++‣ inc

# decrements Parigot number
dec [[1 0 [0]]] ⧗ Parigot → Parigot

--‣ dec

:test (dec (inc zero)) (zero)

# adds two Parigot numbers
add [[[2 (1 0)]]] ⧗ Parigot → Parigot → Parigot

…+… add

:test (add (inc (zero)) (inc (inc zero))) (inc (inc (inc zero)))

iter [[[0 ι ρ ρ]]]
	ρ [[3 (1 0 0)]]
	ι [[4]]

rec [[[0 ι ρ ρ --0]]]
	ρ [[[4 0 (2 1 1)]]]
	ι [[[5]]]