Skip to content

Instantly share code, notes, and snippets.

@VictorTaelin
Forked from takanuva/Church
Created May 26, 2019 04:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save VictorTaelin/233131b59c377b4b3b51789b6079f6f3 to your computer and use it in GitHub Desktop.
Save VictorTaelin/233131b59c377b4b3b51789b6079f6f3 to your computer and use it in GitHub Desktop.
Conversion between Scott encoding and Church endocing for naturals in CoC
\/(N: *) ->
\/(z: N) ->
\/(s: N -> N) ->
N
./ChurchSucc ./ChurchZero
\(n: ./Church ) ->
\(N: *) ->
\(z: N) ->
\(s: N -> N) ->
s (n N z s)
./ChurchSucc ./ChurchTwo
\(n: ./Church ) ->
n ./Scott ./ScottZero ./ScottSucc
./ChurchSucc ./ChurchOne
\(N: *) ->
\(z: N) ->
\(s: N -> N) ->
z
./ScottToChurch
(./ScottSucc
(./ChurchToScott
(./ChurchSucc
(./ScottToChurch ./ScottThree ))))
\(F: * -> *) ->
\/(A: *) ->
(F A -> A) ->
A
./ScottF (./Mu ./ScottF )
\(n: ./Scott ) ->
\(R: *) ->
\(a: R) ->
\(f: ./Scott -> R) ->
n R a (\(x: ./Mu ./ScottF ) -> f (./ScottOut x))
\(X: *) -> \/(R: *) -> R -> (X -> R) -> R
\(X: *) ->
\(Y: *) ->
\(f: X -> Y) ->
\(x: ./ScottF X) ->
\(R: *) ->
\(r: R) ->
\(ym: Y -> R) ->
x R r (\(xv: X) -> ym (f xv))
\(X: *) ->
\(k: ./ScottF X -> X) ->
\(t: ./Mu ./ScottF ) ->
t X k
\(s: ./ScottF (./Mu ./ScottF )) ->
\(X: *) ->
\(k: ./ScottF X -> X) ->
k ((./ScottFmap (./Mu ./ScottF ) X) (./ScottFold X k) s)
./ScottSucc ./ScottZero
\(t: ./Mu ./ScottF ) ->
./ScottFold (./Scott ) (./ScottFmap (./Scott ) (./Mu ./ScottF ) ./ScottIn ) t
\(n: ./N (./Mu ./N )) ->
./Case n (./N (./Mu ./N )) ./Zero (\(pred: ./N (./Mu ./N )) -> pred)
\(n: ./ScottF (./Mu ./ScottF )) ->
\(X: *) ->
\(x: X) ->
\(y: ./Mu ./ScottF -> X) ->
y (./ScottIn n)
./ScottSucc ./ScottTwo
\(n: ./Scott ) ->
./ScottFold
./Church
(\(k: ./ScottF ./Church ) -> k ./Church ./ChurchZero ./ChurchSucc )
(./ScottIn n)
./ScottSucc ./ScottOne
\(X: *) ->
\(x: X) ->
\(y: ./Mu ./ScottF -> X) ->
x
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment