- Church-Kodierung
-
Unter Church-Kodierung versteht man die Einbettung von Daten und Operatoren in den Lambda-Kalkül. Die bekannteste Form sind die Church-Numerale, welche die natürlichen Zahlen repräsentieren. Benannt sind sie nach Alonzo Church, der Daten als Erster auf diese Weise modellierte.
Inhaltsverzeichnis
Church-Numerale
Definition
Die Grundidee zur Kodierung beruht auf den Peano-Axiomen, wonach die natürlichen Zahlen durch einen Startwert - die 0 - und einer Nachfolger-Funktion definiert sind. Demnach sind die Church-Numerale wie folgt definiert:
- 0 ≡
λf.λx. x
- 1 ≡
λf.λx. f x
- 2 ≡
λf.λx. f (f x)
- 3 ≡
λf.λx. f (f (f x))
- ...
- n ≡
λf.λx. fn x
Rechnen mit Church-Numeralen
Im Lambda-Kalkül sind numerische Funktionen durch korrespondierende Funktionen über Church-Numerale darstellbar. Diese Funktionen können in funktionalen Programmiersprachen direkt durch übertragen der Lambda-Ausdrücke implementiert werden.
Die Nachfolger-Funktion wird wie folgt definiert:
- succ ≡
λn.λf.λx.n f (f x)
Die Addition zweier Zahlen n und m ist die m-malige Anwendung der Nachfolger-Funktion auf n:
- plus ≡
λm.λn.λf.λx. m f (n f x)
Die Multiplikation zweier Zahlen n und m ist die m-malige Anwendung der Addition (+n) auf n:
- mult ≡
λm.λn.λf. n (m f)
Die Vorgänger-Funktion:
- pred ≡
λn.λf.λx. n (λg.λh. h (g f)) (λu. x) (λu. u)
Boolesche Ausdrücke
Analog zu den natürlichen Zahlen lassen sich auch (zweiwertige) Wahrheitswerte im Lambda-Kalkül modellieren.
- true ≡
λx.λy. x
- false ≡
λx.λy. y
Daraus lässt sich auch eine einfache Kontrollstruktur (IF THEN ELSE) ableiten:
- ifthenelse ≡
λb.λx.λy.b x y
Dabei ist die Variable b als Bedingung zu verstehen, x als "THEN" und y als "ELSE".
- 0 ≡
Wikimedia Foundation.