i

Übungen: Der Lambda-Kalkül


Aufgabe 1: Auswertung mit Beta-Reduktion

(a)-(e) Reduziere die folgenden Lambda-Kalkül-Ausdrücke durch die Beta-Reduktion.

(a) $\ (\lambda a.a*4)\ 5$

(b) $\ (\lambda x.(x\ x))\ (\lambda z.z)$

(c) $\ ((((\lambda abcf.(f\ (a*b+a*c)))\ 2)\ 7)\ 12)\ (\lambda x.x-8)$

(d) $\ (\lambda x.(x\ ((\lambda y.(y*y))\ 3)))\ (\lambda z.z+z)$

(e) $\ ((\lambda fx.f(f\ x))\ (\lambda y.y+1))\ 2$


Aufgabe 2: Boolesche Logik im Lambda-Kalkül

Genau wie mathematische Rechnungen lässt sich auch die Boolesche Logik durch Ausdrücke des Lambda-Kalküls darstellen. Betrachten wir beispielsweise die beiden Racket-Ausdrücke:

(if #t 1 0)
; Gibt zurück -> 1
(if #f 1 0)
; Gibt zurück -> 0

Um diese äquivalent im Lambda-Kalkül darzustellen, nutzen wir die folgenden Lambda-Kalkül-Ausdrücke:

Racket Lambda-Kalkül-Ausdruck
#t $\lambda ab. a$
#f $\lambda ab. b$
if $\lambda xyz. ((x\ y)\ z)$

(a) Zeige, dass die obigen beiden Racket-Ausdrücke im Lambda-Kalkül darstellbar sind und bei Auswertung jeweils die gleichen Ergebnisse wie in Racket liefern.

Die Repräsentation des Racket-Ausdrucks:

(if #t 1 0)
Im Lambda-Kalkül lautet: $$(((\lambda xyz. ((x\ y)\ z))\ (\lambda ab. a))\ 1)\ 0$$

Suche

v
100.137.5.3.1.3 Übungen: Der Lambda-Kalkül
Kopieren durch Anklicken

Rückmeldung geben