Kombinatorische Logik (CL)

Werbung
Funktionale Programmierung
ALP I
Kombinatorische Logik (CL)
WS 2012/2013
Prof. Dr. Margarita Esponda
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Äquivalenz vieler Berechnungsmodelle
Alonzo Church
λ-Kalkül
Kombinatorische
Logik
Alan Turing
Turing-Maschine
Mathematische Präzisierung
µ-rekursive
Funktionen
Effektiv Berechenbare
Funktionen
RegisterMaschinen
Prof. Dr. Margarita Esponda
GOTOBerechenbar
WHILEBerechenbar
Moderne
Programmiersprachen
mit unendlichem Speicher
Funktionale Programmierung
Kombinatorische Logik (CL)
Eingeführt von
Moses Schönfinkel
und
Haskell Brooks Curry
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Kombinatorische Logik (CL)
• ein noch einfacheres Berechnungsmodell
• Variation des λ-Kalküls, indem λ-Abstraktionen mit
Kombinatoren ersetzt werden
• Kombinatoren sind primitive Funktionen ohne freie Variablen
• die kombinatorische Logik wird oft als Grundlage für die
Implementierung von nicht-strikten funktionalen
Programmiersprachen verwendet.
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Was sind Kombinatoren?
Motivation an der Tafel …
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Kombinatoren
Ein Kombinator ist eine primitive Funktion (LambdaAusdruck) ohne freie Variablen.
Ti ist ein Kombinatorischer Term wenn:
1) Ti ein Kombinator ist
2) (T1 T2) (Funktionsapplikation), wenn T1 und T2
wiederum Kombinatorische Terme sind.
Prof. Dr. Margarita Esponda
Funktionale Programmierung
SKI-Kombinatoren
I-Kombinator
• oder Identitätskombinator
• einfachster Kombinator
• für den Identitätskombinator gilt:
(I a) = a
Die Lambda-Funktion
Prof. Dr. Margarita Esponda
λx.x
≡ I
Funktionale Programmierung
SKI-Kombinatoren
K-Kombinator
• oder Kanzellator
• gibt immer eine konstante Funktion als
Ergebnis
• für den K-Kombinator gilt:
(K a x) = a
Die Lambda-Funktion
Prof. Dr. Margarita Esponda
λxy.x
≡ K
Funktionale Programmierung
SKI-Kombinatoren
S-Kombinator
• modelliert eine Verallgemeinerung der
Funktionsapplikation
• für den S-Kombinator gilt:
(S x y a) = (x a (y a))
Die Lambda-Funktion
λxya.xa(ya)
Prof. Dr. Margarita Esponda
≡ S
Funktionale Programmierung
SKI-Kombinatoren
Beispiele an der Tafel …
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Vollständigkeit der SKI-Kombinatoren
Die Vollständigkeit ist gegeben, wenn es eine Transformationsfunktion
gibt, die einen beliebigen λ-Ausdruck in einen Ausdruck, der nur SKIKombinatoren beinhaltet, verwandeln kann.
T[x]
=> x
T[λx.x]
=> I
T[λx.E]
=> (K T[E])
wenn x nicht frei in E
T[λx.(E1 E2)] => (S T[λx.E1] T[λx.E2])
T[λx.λy.E]
=> T[λx.T[λy.E]] falls x freie Variable von E
T[(E1 E2)]
=> (T[E1] T[E2])
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Vollständigkeit der SKI-Kombinatoren
-- Transformationsfunktion
transform I = I
transform K = K
transform S = S
transform (Var x) = Var x
transform (App x y) = App (transform x) (transform y)
transform (Lambda x y) = (eliminate x y)
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Vollständigkeit der SKI-Kombinatoren
eliminate x S
eliminate x K
eliminate x I
= App K S
= App K K
= App K I
eliminate x exp | not(element x (freie exp [])) = (App K (transform exp))
eliminate x (Var y)
| x==y
=I
| otherwise = (App K (Var y))
eliminate x (Lambda y z) = eliminate x (eliminate y z)
eliminate x (App y z) = (App (App S (eliminate x y)) (eliminate x z))
Prof. Dr. Margarita Esponda
Funktionale Programmierung
SKI-Kombinatoren
Weiter geht es an der Tafel . . .
Prof. Dr. Margarita Esponda
Herunterladen