Aufgaben / Übungen

Blatt 3

Wir definieren eine Tupeldarstellung für Lambda-Terme. Seien M und Mi Lambda-Terme (i>=0), und T und F die Lambda-Terme für true und false. Wir definieren dann induktiv
  1. [M] :identisch M
  2. [M0,M1] :identisch Lambdaz.zM0M1, wobei z nicht aus FV(Mi), i=0,1 ist
  3. [M0,M1, ..., Mn] :identisch [M0,[M1, ..., Mn]] für n>=2
Die dazugehörige Projektionsfunktion ist dann
Pni :identisch Lambdax.xF(i)T für 0<=i<n, und
Pnn :identisch Lambdax.xF(n), wobei
F(i) i-mal F bedeuten soll.

Aufgabe 1


Man gebe die Reduktionsketten und die Normalformen an für
  1. P20[x,y,z]
  2. P21[x,y,z]
  3. 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-Terme M,N gilt MidentischN => M=N. Gilt auch die Umkehrung?

Aufgabe 5

Entwickeln Sie (mit Hilfe des Y-Kombinators) Lambda-Terme für die induktiv definierten Funktionen
  1.  für n <= 1 :   F(n) := 1
     für n > 1  :   F(n) := F(n-1) + F(n-2)
    	  
  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