1 Geschichte 2 Syntax und Konzepte

Transcription

1 Geschichte 2 Syntax und Konzepte
Lamdba-Kalkül
1 Geschichte
1673 Gottfried Wilhelm Leibniz entwickelt eine mechanische Rechenmaschine, beginnt
zu träumen: Gibt es eine “universelle Sprache”, in der alle Probleme dargestellt werden
können? Gibt es eine Methode zum Lösen aller in dieser Sprache dargestellten Probleme?
1928 David Hilbert formuliert das Entscheidungsproblem: Gibt es einen Algorithmus,
der, mit einer formalen Sprache und einer beliebigen in dieser Sprache formulierten
Aussage als Eingabe, wahr oder falsch ausgibt, je nachdem, ob die Aussage wahr oder
falsch ist?
1936 Alonzo Church entwickelt den λ-Kalkül und beantwortet das Entscheidungsproblem negativ. Es gibt keinen Algorithmus, der für zwei beliebige λ-Terme entscheiden
kann, ob diese äquivalent sind (historisch gesehen das erste Unentscheidbarkeitsresultat).
1936/37 Alan Turing entwickelt die Turing-Maschine. Er zeigt, dass der λ-Kalkül
Turing-vollständig ist, d. h. dass eine Funktion genau dann Turing-berechenbar ist, wenn
sie λ-definierbar ist. Dies ist insofern erstaunlich, als dass der λ-Kalkül aus einem essentiellen Axiom entwickelt werden kann und nur über zwei Grundoperationen verfügt.
2 Syntax und Konzepte
Eine Funktion, z. B. f : x 7→ x − y, kann auch als anonyme Funktion (vgl. “pure functions” in diversen Programmiersprachen), z. B. x 7→ x − y, geschrieben werden, da ihre
Bezeichung für die Bedeutung unerheblich ist. Notation im λ-Kalkül: λx.x − y.
λ heißt Abstraktor. Abstraktion bedeutet dabei: M [x] ein λ-Term, der die Variable x
enthält, dann beschreibt λx.M die Abbildung x 7→ M [x]. Applikation, Notation F · A
bzw. F A, beschreibt die Anwendung von F , aufgefasst als Algorithmus, auf A, aufgefasst
als Eingabe.
Das Zusammenspiel von Abstraktion und Applikation wird durch das Axiom
(λx.M )N = M [x := N ]
(β)
formalisiert. Wendet man die Abstraktion λx.M auf N an, so entspricht das der Ersetzung M [x := N ] von x durch N im Term M . Die Variable x wird dabei nur ersetzt,
wenn sie als freie Variable (siehe unten) auftritt.
Eine Funktion mehrerer Veränderlicher kann durch mehrere Funktionen einer Veränderlichen dargestellt werden (Currying). Betrachte z. B. die Funktion h : x, y 7→ x − y. Definiere H := λx.(λy.x − y). Dann gilt Ha = λy.a − y und somit (Ha)b = (λy.a − y)b =
a − b = h(a, b), d. h. die Funktion h wird durch H definiert.
Mit der Notationskonvention, dass Großbuchstaben beliebige λ-Terme und Kleinbuchstaben Variablen repräsentieren, wiederholte Applikation linksassoziativ ist, d. h.
F M1 M2 · · · Mn := (· · · ((F M1 )M2 ) · · · Mn ),
und wiederholte Abstraktion rechtsassoziativ ist, d. h.
λx1 x2 · · · xn .M := λx1 .(λx2 .(· · · (λxn .M ) · · · )),
erhält man eine natürliche Schreibweise, z. B. (λxy.x − y)ab statt ((λx.(λy.x − y))a)b.
Stefan Lembach
Seite 1 von 6
Lamdba-Kalkül
3 Grundlegende Definitionen und Konversion
Definition 3.1 (Menge der λ-Terme). Gegeben seien V = {v, v 0 , v 00 , . . . } unendliche
Menge von Variablen, C endliche, unendliche oder leere Menge von Konstanten. Die
Menge der λ-Terme, Λ, definiert man induktiv:
x ∈ V ⇒ x ∈ Λ, y ∈ C ⇒ y ∈ Λ
Atome
M, N ∈ Λ ⇒ M N ∈ Λ
Applikation
x ∈ V, M ∈ Λ ⇒ (λx.M ) ∈ Λ
Abstraktion
Ist C = ∅, so heißt das resultierende System reiner λ-Kalkül, sonst angewandter λKalkül. Im Folgenden betrachten wir den reinen λ-Kalkül.
Definition 3.2 (Menge der freien Variablen). Die Menge der freien Variablen von M ,
FV(M ), definiert man induktiv:
FV(x) = {x}
FV(M N ) = FV(M ) ∪ FV(N )
FV(λx.M ) = FV(M ) \ {x}
Eine Variable ist gebunden, wenn sie nicht frei ist, also sind insbesondere Variablen im
Scope eines λ gebunden.
Definition 3.3 (geschlossener Term). M ∈ Λ ist ein geschlossener Term oder Kombinator, wenn FV(M ) = ∅. Die Menge der geschlossenen Terme wird mit Λ◦ bezeichnet.
Definition 3.4 (Ersetzung freier Variablen). Die Ersetzung der frei auftretenden Variablen x durch N wird definiert durch:
x[x := N ] ≡ N
y[x := N ] ≡ y, wenn x 6≡ y
(M1 M2 )[x := N ] ≡ (M1 [x := N ])(M2 [x := N ])
(λy.M )[x := N ] ≡ λy.(M [x := N ])
Definition 3.5 (α-Konversion). Wir identifizieren zwei λ-Terme M und N , Notation
M ≡ N , wenn sie derselbe Term oder identisch nach Umbenennung gebundener Variablen sind. Dieses Konzept wird durch das Axiom
λx.M = λy.M [x := y]
falls y in M nicht auftritt
(α)
formalisiert.
Stefan Lembach
Seite 2 von 6
Lamdba-Kalkül
4 β-Reduktion
Gleichheitsregeln:
M ≡M
Reflexivität
M ≡N ⇒N ≡M
Symmetrie
M ≡ N, N ≡ P ⇒ M ≡ P
Transitivität
d. h. “≡” ist eine Äquivalenzrelation.
Kompatibilitätsregeln:
M ≡ M 0 ⇒ M Z ≡ M 0Z
M ≡ M 0 ⇒ ZM ≡ ZM 0
M ≡ M 0 ⇒ λx.M ≡ λx.M 0
(ξ)
d. h. man kann Subterme in jedem Kontext durch äquivalente Terme ersetzen.
Definition 4.1 (β-Redex, Kontraktion). Ein Term der Form (λx.M )N heißt β-Redex,
der Term M [x := N ] dessen Kontraktion.
Definition 4.2 (β-kontrahieren, β-reduzieren). Kann man einen Term P in einen Term
P 0 umformen durch Ersetzen eines β-Redex durch seine Kontraktion, so schreibt man
P →β P 0 und sagt P β-kontrahiert zu P 0 . Man sagt, P β-reduziert zu Q, wenn man Q
aus P durch endlich viele β-Kontraktionen und Umbenennungen gebundener Variablen
erhält, Notation P β Q.
Definition 4.3 (β-Normalform). Ein λ-Term ist eine β-Normalform, wenn er keinen
β-Redex als Teilausdruck enthält. Ein λ-Term hat eine β-Normalform, wenn M β N
und N eine β-Normalform ist, für einen Term N .
Beispiel 4.4 (Reduktion zur β-Normalform).
1. (λx.y)N →β y
2. (λx.xx)y →β yy
3. (λx.(λy.yx)z)v β zv, denn
(λx.(λy.yx)z)v →β (λy.yv)z →β zv oder (λx.(λy.yx)z)v →β (λx.zx)v →β zv.
In 3. erhält man dieselbe β-Normalform unabhängig von der Reduktionsreihenfolge.
Geht das immer?
Satz 4.5 (Church-Rosser-Theorem für β-Reduktion). Wenn M β N1 und M β N2 ,
dann gibt es N3 , sodass N1 β N3 und N2 β N3 .
Beweis. aufwändiger, siehe z. B. Hindley 1986, S. 313 ff.
Stefan Lembach
Seite 3 von 6
Lamdba-Kalkül
Korollar 4.6. Ein λ-Term hat höchstens eine β-Normalform.
Beweis. Angenommen M hat zwei verschiedene β-Normalformen N1 und N2 . ChurchRosser ⇒ ∃N3 : N1 β N3 , N2 β N3 . β-Normalformen können nicht weiter β-reduziert
werden. ⇒ N1 ≡ N3 ≡ N2 und mit Transitivität N1 ≡ N2 im Widerspruch zur Annahme
⇒ Behauptung
In der Konsequenz erhält man, unabhängig von der Reduktionsreihenfolge, durch
vollständige Reduktion stets die eindeutige β-Normalform, sofern diese existiert. Nicht
jeder Term hat aber eine β-Normalform. Betrachte z. B. Ω = (λx.xx)(λx.xx). Dieser
Term reduziert offensichtlich nur zu sich selbst, ist aber keine β-Normalform, da er einen
β-Redex als Subterm enthält.
5 Kombinatoren
Definition 5.1 (Standardkombinatoren).
I ≡ λx.x
K ≡ λxy.x
K∗ ≡ λxy.y
S ≡ λf gx.f x(gx)
Die Standardkombinatoren werden z. B. in der Kombinatorischen Logik verwendet,
um logische Aussagen darzustellen und mittels Reduktion Schlüsse aus diesen Aussagen
zu ziehen. Ferner kann man mit Kombinatoren einfache Gleichungen lösen. So löst z. B.
der Kombinator G ≡ λx.xxx die Gleichung GX = XXX für alle X ∈ Λ.
6 Rekursion
Zum Lösen rekursiver Gleichungen benötigt man spezielle Kombinatoren, sogenannte
Fixpunkt-Kombinatoren.
Satz 6.1 (Fixpunkt-Theorem).
1. ∀F ∈ Λ ∃X ∈ Λ : F X = X
2. Es gibt einen Fixpunkt-Kombinator
Y ≡ λf.(λx.f (xx))(λx.f (xx))
sodass ∀F ∈ Λ : F (Y F ) = Y F .
Beweis.
1. Definiere W ≡ λx.F (xx) und X ≡ W W . Dann
X ≡ W W ≡ (λx.F (xx))W ≡ F (W W ) ≡ F X
2. Analog zu 1.
Stefan Lembach
Seite 4 von 6
Lamdba-Kalkül
Y ist nicht eindeutig (im Theorem: Fixpunkt-Kombinator nach Curry), es gibt noch
viele weitere Fixpunkt-Kombinatoren, z. B. Y ≡ (λzx.x(zzx))(λzx.x(zzx)) (nach Turing).
Beispiel 6.2 (Lösen einer rekursiven Gleichung). Die Gleichung GX = SGX für alle
X ∈ Λ hat z. B. die Lösungen G ≡ Y (λgx.Sgx) oder G ≡ Y S, wie man unter Verwendung
von Satz 6.1 2. leicht nachprüfen kann.
7 Zahlensymbol-Systeme
Definition 7.1 (Church-Zahlensymbole).
induktiv wie folgt definiert:
1. F n (M ) mit F, M ∈ Λ und n ∈ N wird
F 0 (M ) ≡ M
F n+1 (M ) ≡ F (F n (M ))
2. Die Church-Zahlensymbole c0 , c1 , c2 , . . . sind definiert durch
cn ≡ λf x.f n (x)
Eine natürliche Zahl n wird also durch das Zahlensymbol cn , die n-malige Anwendung
von f auf x repräsentiert.
Proposition 7.2 (Addition, Multiplikation und Potenzieren von Church-Zahlensymbolen). Definiere die Kombinatoren
A+ ≡ λmnf x.mf (nf x)
A∗ ≡ λmnf.m(nf )
Aexp ≡ λmn.nm
Dann gilt für alle n, m ∈ N:
A+ cn cm = cn+m
A∗ cn cm = cn∗m
Aexp cn cm = c(nm ) außer für m = 0
Beweis. siehe z. B. Barendregt 2000, S. 13 f.
Es gibt auch elegantere Zahlensymbole, für deren Einführung man folgende Definitionen benötigt.
Definition 7.3 (Bool’sche Werte, Fallunterscheidung). Man definiert die Bool’schen
Werte true = K = λxy.x und false = K∗ = λxy.y. Wenn B ein Bool’scher Wert ist,
also true oder false, dann kann die Fallunterscheidung if B then P else Q durch BP Q
repräsentiert werden.
Stefan Lembach
Seite 5 von 6
Lamdba-Kalkül
Definition 7.4 (Paarung). Für M, N ∈ Λ schreibe [M, N ] ≡ λz.zM N . Dann gilt:
[M, N ] true = M
und
[M, N ] false = N
Definition 7.5 (Zahlensymbole nach Barendregt). Für alle n ∈ N wird das Zahlensymbol pnq induktiv wie folgt definiert:
p0q ≡ I
und pn + 1q ≡ [false, pnq]
Lemma 7.6 (Nachfolger, Vorgänger, Test auf Null). Es gibt Kombinatoren S + , P − und
Zero, sodass
S + pnq = pn + 1q
P − pn + 1q = pnq
Zerop0q = true
Zeropn + 1q = false
Beweis. Wähle S + ≡ λx.[false, x], P − ≡ λx.x false und Zero ≡ λx.x true.
8 Weitere interessante Aspekte
Definition 8.1 (λ-Definierbarkeit). Eine numerische Funktion ist eine Abbildung
ϕ : Np → N mit p ∈ N. Eine numerische Funktion heißt λ-definierbar, wenn es einen
Kombinator F gibt, sodass F pn1 q . . . pnp q = pϕ(n1 , . . . , np )q für alle n1 , . . . , np ∈ N. In
diesem Fall sagt man: ϕ ist λ-definiert durch F .
Weitere interessante Aspekte sind u. a. Erweiterungen des λ-Kalküls, z. B. durch Konstanten oder Typisierung, andere Reduktionssysteme, z. B. η-Reduktion, βη-Reduktion,
Standardreduktion und Standardisierungstheorem, sowie die Unentscheidbarkeitsresultate im Hinblick auf β-Äquivalenz zweier λ-Terme und die Existenz von Normalformen.
Zur Vertiefung sei an dieser Stelle auf die Bücher [1] (Referenz) und [3] (Lehrbuch)
sowie auf den Artikel [2] verwiesen.
Literatur
[1] Hendrik Pieter Barendregt. The Lambda Calculus, Its Syntax and Semantics, volume
103 of Studies in Logic and the Foundations of Mathematics. Elsevier, 1984.
[2] Henk Barendregt and Erik Barendsen.
Introduction to lambda calculus.
ftp://ftp.cs.ru.nl/pub/CompMath.Found/lambda.pdf, 2000.
[3] James Roger Hindley and Jonathan P. Seldin. Introduction to Combinators and
Lambda-Calculus. Cambridge University Press, 1986.
Stefan Lembach
Seite 6 von 6