ALP I Rekursive Funktionen

Werbung
ALP I
Rekursive Funktionen
WS 2009/2010
Prof. Dr. Margarita Esponda
Prof. Dr. Margarita Esponda
1
Äquivalenz vieler Berechnungsmodelle
Effektiv Berechenbare
Funktionen
Mathematische Modelle
λ-Kalkül
Maschinelle Modelle
Register
Maschinen
TuringMaschine
ALP II
Theoretische
Informatik I
Prof. Dr. Margarita Esponda
Kombinatorische
Logik
Allgemein
rekursive
Funktionen
µ-rekursive
Funktionen
WhileProgramme
GOTOProgramme
2
Primitiv-rekursive Funktionen
Alle Beispiele, die wir in den letzten zwei Vorlesungen
diskutiert haben, sind Beispiele aus der Menge der
sogenannten primitiv-rekursiven Funktionen PR.
Die primitiv-rekursiven Funktionen sind die einfachste
Klasse von rekursiven Funktionen.
Die PR-Funktionen sind eine Untermenge der Effektiv
Berechenbaren Funktionen. Das bedeutet, es gibt
rekursive Funktionen, die berechenbar sind aber nicht
primitiv-rekursiv sind.
Prof. Dr. Margarita Esponda
3
Primitiv-rekursive Funktionen
Motiviert von D. Hilbert
haben vor allem K. Gödel (1906-1978)
und Rózsa Péter (1905-1977)
sich mit der Theorie der rekursiven Funktionen
auseinandergesetzt sowie diese stark geprägt.
Was kann alles mit primitiv-rekursiven Funktionen
berechnet werden?
Gibt es ein allgemeines Schema zur Definition beliebiger
berechenbarer Funktionen?
Prof. Dr. Margarita Esponda
4
Primitiv-rekursive Funktionen (PR)
Das Schema zur Definition beliebiger primitivrekursiver Funktionen besteht aus folgenden drei
Hauptteilen:
1. Eine Reihe von Grundfunktionen.
2. Ein Ersetzungsmechanismus zur Definition von
Funktionen ohne Rekursion
(Funktionskomposition).
3. Ein Mechanismus zur Definition von primitivrekursiven Funktionen mit Rekursion (PR).
Prof. Dr. Margarita Esponda
5
Primitiv-rekursive Funktionen (PR)
Die Klasse der PR-Funktionen
ℕn
→
ℕ wird wie folgt induktiv
definiert.
I Grundfunktionen
1. Die Nullfunktion Z : ℕm→ ℕ ist primitiv rekursiv
m
Z (x1,…,xm) = 0
2. Die Nachfolgerfunktion S : ℕ → ℕ ist primitiv rekursiv
S(n) = n+1
3. Die Projektionsfunktionen
πmi : ℕ
m
→ℕ
definiert durch
πmi (x1, … ,xi, … ,xm) = xi,
1≤ i ≤ m
sind primitiv-rekursiv
Beispiel:
Prof. Dr. Margarita Esponda
π3 (a, b, c) = b
2
6
Primitiv-rekursive Funktionen (PR)
II Kompositionsschema
Die Funktionskomposition ist primitiv-rekursiv.
Das bedeutet, für alle primitiv-rekursiven Funktionen
h : ℕm→ ℕ
und g1, … , gm : ℕn→ ℕ ist die Funktion C : ℕn→ ℕ,
ℕ
definiert durch
C ( x1,...,xn ) = h(g1( x1,...,xn ),…, gm( x1,...,xn ))
auch primitiv rekursiv.
Prof. Dr. Margarita Esponda
7
Primitiv-rekursive Funktionen
III Rekursionsschema
Jede Funktion, die sich durch primitive Rekursion (Induktion) aus
primitiv-rekursiven Funktionen definieren lässt, ist auch primitivrekursiv.
Das bedeutet:
m
m+2
Wenn g : ℕ → ℕ und h : ℕ
→ ℕ primitiv-rekursive
Funktionen sind, dann ist die folgende (induktiv definierte)
m+1
Funktion R : ℕ
→ℕ
R (0, x1,...,xm) = g(x1,...,xm)
R (S(n), x1,...,xm) = h( R(n, x1,...,xm), n, x1,...,xm )
ebenfalls primitiv rekursiv.
Prof. Dr. Margarita Esponda
S = Nachfolgerfunktion
8
Primitiv-rekursive Funktionen
Eine konstante Funktion, die eine beliebige Zahl n in der
Konstante 3 abbildet, sieht wie folgt aus:
k3 : ℕ → ℕ
k3 ( m ) = S(S(S(Z(m))))
= 3
Die Identitätsfunktion kann wie folgt definiert werden:
id : ℕ → ℕ
id ( m ) =
Prof. Dr. Margarita Esponda
π1 (m)
1
= m
9
Primitiv-rekursive Funktionen
Können wir die Additionsfunktion auf eine Definition, die
nur aus primitiv-rekursiven Funktionen besteht, zurück
führen?
2
add : ℕ → ℕ
g und h müssen
primitiv-rekursiv sein
aus III (Rekursionsschema)
add ( 0, m )
=
g(m)
add ( S(n), m )
=
h(add (n, m), n, m)
add ( 0, m )
=
add ( S(n), m )
=
π1 (m)
S(π3 (add (n, m), n, m))
add 0 m
=
add (n+1) m =
Prof. Dr. Margarita Esponda
1
1
m
(add n m) +1
10
Primitiv-rekursive Funktionen
Vorgänger-Funktion:
pred : ℕ → ℕ
Weil die primitiv-rekursiven Funktionen nur über die natürlichen
Zahlen definierbar sind, wird der Vorgänger von 0 als gleich 0
definiert.
aus III (Rekursionsschema)
pred ( 0 )
=
g ()
pred ( S(n) )
=
h (pred (n, m), n)
pred ( 0 )
= Z()
pred ( S(n) )
=
pred 0
=
0
pred (n+1) =
n
Prof. Dr. Margarita Esponda
π2 (pred (n), n ))
2
11
Primitiv-rekursive Funktionen
Die Multiplikation kann rekursiv über die Addition definiert
werden.
mult ( 0, m )
=
mult ( S(n), m ) =
mult ( 0, m )
g(m)
h (mult (n, m), n)
= Z(m)
mult(S(n), m) = add (π1 (mult(n, m),n,m),
3
π3(mult (n,m),n,m))
3
mult 0
m
mult (n+1) m
Prof. Dr. Margarita Esponda
=
0
= (mult n
m) + m
12
Primitiv-rekursive Funktionen
Eine primitiv-rekursive Definition der Subtraktion
sieht wie folgt aus:
sub m 0 = m
sub m n = pred (sub m (pred n)
sub 2 1 => pred (sub 2 (pred 1))
=> pred (sub 2 0)
=> pred 2
=> 1
sub (0, m )
=
sub 1 2 => pred (sub 1 (pred 2))
=> pred (sub 1 1)
=> pred (pred (sub 1 0))
=> pred (pred 1)
=> pred 0
=> 0
π1(m)
1
sub (S(n), m) = pred (π1 (sub(n, m),n,m))
3
Prof. Dr. Margarita Esponda
13
Primitiv-rekursive Funktionen
Haskell-Implementierung:
-- Null-Funktion
z :: [Integer] -> Integer
z [x] = 0
-- Nachfolger-Funktion
s :: [Integer] -> Integer
s [x] = x+1
-- Projektion-Funktionen
p :: Integer -> [Integer] -> Integer
p 1 (a:b) = a
p n (a:b) = p (n-1) b
Prof. Dr. Margarita Esponda
14
Primitiv-rekursive Funktionen
Haskell-Implementierung:
type Func = ([Integer]->Integer)
-- Kompositionsschema
compose :: Func -> [Func] -> [Integer] -> Integer
compose h gs xs = h [ g xs | g <- gs ]
-- Rekursionsschema
pr :: Func -> Func -> Func -> [Integer] -> Integer
pr rec g h (
0 :xs) = g xs
pr rec g h ((y+1):xs) = h ( (rec (y:xs)):y:xs )
Prof. Dr. Margarita Esponda
15
Primitiv-rekursive Funktionen
Beispiele:
-- Predecessor
pred :: [Integer] -> Integer
pred = pr pred (const 0) (p 2)
-- Addition
add :: [Integer] -> Integer
add = pr add (p 1) (compose s [(p 1)])
-- Multiplication
mul :: [Integer] -> Integer
mul = pr mul z (compose add [(p 1),(p 3)])
Prof. Dr. Margarita Esponda
16
Herunterladen