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