UnterChurch-Kodierung versteht man die Einbettung von Daten und Operatoren in denLambda-Kalkül. Die bekannteste Form sind dieChurch-Numerale, welche dienatürlichen Zahlen repräsentieren. Benannt sind sie nachAlonzo Church, der Daten als Erster auf diese Weise modellierte.
Die Grundidee zur Kodierung beruht auf denPeano-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:
λf.λx. xλf.λx. f xλf.λx. f (f x)λf.λx. f (f (f x))λf.λx. fn xIn der obigen Liste istf die Nachfolger-Funktion undx der Startwert, beides sind Parameter der Definition. Die Definition ist unabhängig von der Ausprägung des Startwertes oder der Nachfolger-Funktion. Somit sind die Numerale nur repräsentativ. Jedes einzelne Numeral benutzt die beiden Parameter für seine Implementation. Solange man sich aber nicht festlegt, worin genau der Startwert und die Nachfolger-Funktion besteht, ist auch nicht festgelegt, was die Numerale schlussendlich machen. Die Definition basiert lediglich auf den Annahme, dass es so etwas wie einen Startwert und eine dazu passende Nachfolger-Funktion geben mag, wie immer die auch aussehen mögen. Unter dieser Annahme machen die Numerale das Folgende:
Im Lambda-Kalkül sind arithmetische Funktionen durch korrespondierende Funktionen über Church-Numerale darstellbar. Diese Funktionen können infunktionalen Programmiersprachen direkt durch Übertragen der Lambda-Ausdrücke implementiert werden.
Die Nachfolger-Funktion wird wie folgt definiert:
λn.λf.λx. f (n f x)Die Addition zweier Zahlen und ist die-malige Anwendung der Nachfolger-Funktion auf:
λm.λn.λf.λx. m f (n f x)Die Multiplikation zweier Zahlen und ist die-malige Anwendung der Addition auf:
λm.λn.λf.λx. m (n f) xDie Vorgänger-Funktion:
λn.λf.λx. n (λg.λh. h (g f)) (λu. x) (λu. u)Analog zu den natürlichen Zahlen lassen sich auch (zweiwertige)Wahrheitswerte im Lambda-Kalkül modellieren.
λx.λy. xλx.λy. yDaraus lässt sich auch eine einfacheKontrollstruktur (IF THEN ELSE) ableiten:
λb.λx.λy.b x yDabei ist die Variable als Bedingung zu verstehen, als „THEN“ und als „ELSE“.