|
Aufgaben / Übungen
Blatt 3
|
Wir definieren eine Tupeldarstellung für
![Lambda](lambda.gif)
-Terme. Seien M
und M
i Lambda-Terme (i>=0), und
T
und
F die
![Lambda](lambda.gif)
-Terme für
true und
false. Wir definieren dann induktiv
- [M] :
M
- [M0,M1] :
z.zM0M1, wobei z nicht aus FV(Mi), i=0,1 ist
- [M0,M1, ..., Mn] :
[M0,[M1, ..., Mn]] für n>=2
Die dazugehörige Projektionsfunktion ist dann
P
ni :
![Lambda](lambda.gif)
x.x
F(i)T für 0<=i<n, und
P
nn :
![Lambda](lambda.gif)
x.x
F(n), wobei
F(i) i-mal
F bedeuten soll.
Aufgabe 1
Man gebe die Reduktionsketten und die Normalformen an für
- P20[x,y,z]
- P21[x,y,z]
- P22[x,y,z]
Aufgabe 2
Beweisen Sie für 0<=i<=n :
Pni[M0,M1, ..., Mn] = Mi
Aufgabe 3
Gegeben sei das Programm
begin
var a: real;
proc p(x,y):
begin
var b: real;
b := x + y;
if b<5 then p(b,x);
end;
a := 1;
p(a,a);
end.
Zeigen Sie durch Anwenden der Kopierregel (
call by
name,
static scoping), das bei der Ausführung des
Programms zu einem Zeitpunkt gleichzeitig drei Inkarnationen der
Prozedur
p
und damit alle Kopien der lokalen
Variable
b
benötigt werden. Welche Werte haben die
Inkarnationen dann?
Aufgabe 4
Wir hatten gesehen, das für
![Lambda](lambda.gif)
-Terme M,N gilt
M
![identisch](id.gif)
N => M=N. Gilt auch die Umkehrung?
Aufgabe 5
Entwickeln Sie (mit Hilfe des Y-Kombinators)
![Lambda](lambda.gif)
-Terme für die induktiv definierten Funktionen
-
für n <= 1 : F(n) := 1
für n > 1 : F(n) := F(n-1) + F(n-2)
-
für n = 0 : F(n) := 1
für n > 0 : F(n) := n + F(n-1)
Dietmar Lammers
Last modified: Fri May 18 15:09:20 MET DST 2001