• Keine Ergebnisse gefunden

Berechenbarkeitstheorie: Teil II Prof. Dr. David Sabel

N/A
N/A
Protected

Academic year: 2021

Aktie "Berechenbarkeitstheorie: Teil II Prof. Dr. David Sabel"

Copied!
50
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Formale Sprachen und Komplexit¨at

Sommersemester 2019

Berechenbarkeitstheorie: Teil II

Prof. Dr. David Sabel

LFE Theoretische Informatik

(2)

Inhalt

Ackermannfunktion

Primitiv rekursive Funktionen µ-rekursive Funktionen

(3)

Die Ackermannfunktion

Von Wilhelm Ackermann in 1920er Jahre vorgeschlagen sehr schnell wachsende Funktion

Variante von R´ozsa P´eter:

Ackermann-Funktiona: (N×N)→N

a(x, y) =

y+ 1, falls x= 0

a(x−1,1) falls x6= 0 undy = 0 a(x−1, a(x, y−1)) falls x >0 undy >0

Unser n¨achstes Ziel:

Die Ackermannfunktion ist WHILE-berechenbar, aber: die Ackermannfunktion istnicht LOOP-berechenbar (obwohl sie total ist)

(4)

Die Ackermannfunktion

Von Wilhelm Ackermann in 1920er Jahre vorgeschlagen sehr schnell wachsende Funktion

Variante von R´ozsa P´eter:

Ackermann-Funktiona: (N×N)→N

a(x, y) =

y+ 1, falls x= 0

a(x−1,1) falls x6= 0 undy = 0 a(x−1, a(x, y−1)) falls x >0 undy >0 Unser n¨achstes Ziel:

Die Ackermannfunktion ist WHILE-berechenbar, aber:

die Ackermannfunktion istnicht LOOP-berechenbar (obwohl sie total ist)

(5)

Einige Werte der Ackermannfunktion

Tabelle mita(x, y)-Eintr¨agen:

y\x 0 1 2 3 4

0 1 2 3 5 13

1 2 3 5 13 65533

2 3 4 7 29 265536−3

3 4 5 9 61 a(3,265536−3) 4 5 6 11 125 a(3, a(4,3))

(6)

Terminierung

a(x, y) =

y+ 1, falls x= 0

a(x−1,1) falls x6= 0 undy = 0 a(x−1, a(x, y−1)) falls x >0 undy >0 Mehrmaliges Entfalten der dritten Zeile zeigt:

a(x, y) = (a(x−1, a(x−1, a(x−1, . . . , a(x−1,

| {z }

y+1−mal

1). . .))))

Daher sind alle rekursiven Aufrufe echt kleiner und daher terminiert die Ackermannfunktion stets.

Lemma

Die Ackermannfunktion ist total.

(7)

Berechenbarkeit der Ackermannfunktion

Intuitiv klar: Mit jeder modernen Programmiersprache ist die Ackermannfunktion implementierbar. Daher ist sie auch (intuitiv) berechenbar.

Satz

Die Ackermannfunktion ist WHILE-berechenbar.

Beweis: Erstelle ein WHILE-Programm, welches die rekursive Berechnung durchf¨uhrt mit einem Stack.

Daher ist der erste Schritt im Beweis: Darstellung des Stacks

Implementierung von Operationen auf dem Stack als WHILE-Programm.

Danach wird das Programm angegeben, dass die Stackoperationen durchf¨uhrt.

(8)

Berechenbarkeit der Ackermannfunktion

Intuitiv klar: Mit jeder modernen Programmiersprache ist die Ackermannfunktion implementierbar. Daher ist sie auch (intuitiv) berechenbar.

Satz

Die Ackermannfunktion ist WHILE-berechenbar.

Beweis: Erstelle ein WHILE-Programm, welches die rekursive Berechnung durchf¨uhrt mit einem Stack.

Daher ist der erste Schritt im Beweis: Darstellung des Stacks

Implementierung von Operationen auf dem Stack als WHILE-Programm.

Danach wird das Programm angegeben, dass die Stackoperationen durchf¨uhrt.

(9)

Berechenbarkeit der Ackermannfunktion

Intuitiv klar: Mit jeder modernen Programmiersprache ist die Ackermannfunktion implementierbar. Daher ist sie auch (intuitiv) berechenbar.

Satz

Die Ackermannfunktion ist WHILE-berechenbar.

Beweis: Erstelle ein WHILE-Programm, welches die rekursive Berechnung durchf¨uhrt mit einem Stack.

Daher ist der erste Schritt im Beweis:

Darstellung des Stacks

Implementierung von Operationen auf dem Stack als WHILE-Programm.

Danach wird das Programm angegeben, dass die Stackoperationen durchf¨uhrt.

(10)

Vorbemerkung

Darstellung von Tupelfolgen mit fester L¨ange kals eine einzige Zahl:

hn1, . . . , nk,0i=c(n1, c(n2,(. . . , c(nk,0). . .) wobei c(x, y) eine Bijektion (N×N)→Nist Wir nehmen an, dass left und right existieren mit left(c(x, y)) =xund right(c(x, y)) =y

Genauere Details zuc,left,right werden sp¨ater nochmal er¨ortert

(11)

Ackermannfunktion mit WHILE berechnen

Stack:

Stack: Folge von Zahlenn1, . . . , nk,0 sodassn1 ganz oben liegt. Leerer Stack: 0 markiert Kellerboden.

Stack im WHILE-Programm: Variable stack, die Zahl hn1, . . . , nk,0i=c(n1, c(n2,(. . . , c(nk,0). . .) speichert, und stacksize, die Gr¨oße des Stacks speichert

Stack-Operationen:

push(x, stack) legt Zahlx oben auf den Stack. WHILE-Programm dazu:

stack:=c(x, stack);stacksize:=stacksize+ 1.

x:=pop(stack) entfernt das oberste Element vom Stack und setzt x auf dessen Wert.

WHILE-Programm: x:=left(stack);stack=right(stack); stacksize:=stacksize−1

stacksize6= 1: WHILE-Programm dazu existiert

(12)

Ackermannfunktion mit WHILE berechnen

Stack:

Stack: Folge von Zahlenn1, . . . , nk,0 sodassn1 ganz oben liegt. Leerer Stack: 0 markiert Kellerboden.

Stack im WHILE-Programm: Variable stack, die Zahl hn1, . . . , nk,0i=c(n1, c(n2,(. . . , c(nk,0). . .) speichert, und stacksize, die Gr¨oße des Stacks speichert

Stack-Operationen:

push(x, stack) legt Zahlx oben auf den Stack.

WHILE-Programm dazu:

stack:=c(x, stack);stacksize:=stacksize+ 1.

x:=pop(stack) entfernt das oberste Element vom Stack und setzt x auf dessen Wert.

WHILE-Programm: x:=left(stack);stack=right(stack);

stacksize:=stacksize−1

stacksize6= 1: WHILE-Programm dazu existiert

(13)

WHILE-Programm zur Berechnung von a(x, y)

stack:= 0;

stacksize:= 0;

push(x, stack);

push(y, stack);

WHILEsize(stack)6= 1 DO y:=pop(stack);

x:=pop(stack);

IF x= 0

THEN push(y+ 1, stack);

ELSE IF y= 0 THEN push(x−1, stack);push(1, stack)

ELSEpush(x−1, stack);push(x, stack),push(y−1, stack);

END END END

result:=pop(stack);

(14)

Eigenschaften der Ackermannfunktion

Lemma

Die folgenden Monotonie-Eigenschaften gelten f¨ur die Ackermannfunktiona:

1 y < a(x, y)

2 a(x, y)< a(x, y+ 1)

3 a(x, y+ 1)≤a(x+ 1, y)

4 a(x, y)< a(x+ 1, y)

5 Falls x≤x0 und y≤y0, dann gilt aucha(x, y)≤a(x0, y0) Beweise im Skript (Induktion ¨uberx bzw. y, bzw (x, y))

(15)

Maximale LOOP-berechenbare Zahlen

Sei P ein LOOP-Programm

Seien x0, . . . , xk die in P vorkommenden Variablen.

Sei

fP(n) = max ( k

X

i=0

ρ0(xi)|

k

X

i=0

ρ(xi)≤n,(ρ, P)−−−→

LOOP

0, ε) )

fP(n) ist die maximale Zahl, die als Summe aller

Endbelegungen ρ0 der Variablenx0, . . . , xk zustande kommt,

¨uber alle initialen Variablenbelegung ρ, die in der Summe der Werte ρ(x0), . . . , ρ(xk)den Wert n nicht ¨uberschreiten.

(16)

Maximale LOOP-berechenbare Zahlen (2)

Satz

F¨ur jedes LOOP-Programm P gibt es eine Konstantek, so dass fP(n)< a(k, n)f¨ur alle n∈N.

Beweis: NormalisiereP zun¨achst:

Ersetze Zuweisungenxi:=xj+c durch xi:=xj + 1;xi:=xi+ 1;. . . xi :=xi+ 1

| {z }

c−1mal

.

F¨urLOOP xi DO QEND und xi kommt in Qvor:

Ersetze LOOPxi DO QEND durch x0i:=xi;LOOPx0i DO QEND;x0i := 0, wobei x0i eine neue Variable ist.

Beides ver¨andertfP nicht!

Zeige Behauptung f¨ur normalisierte Programme.

(17)

Maximale LOOP-berechenbare Zahlen (3)

Zu zeigen: F¨ur jedes normalisierte LOOP-Programm P gibt es eine Konstantek, so dassfP(n)< a(k, n) f¨ur alle n∈N.

Beweis durch strukturelle Induktion ¨uber normalisiertes Programm. F¨alle:

1 Zuweisung xi :=xj+cmit c∈Zund c≤1

2 Sequenz P1;P2

3 LOOP-Schleife LOOPxi DO QEND, wobei xi nicht inQvorkommt.

(18)

Maximale LOOP-berechenbare Zahlen (3)

Zu zeigen: F¨ur jedes normalisierte LOOP-Programm P gibt es eine Konstantek, so dassfP(n)< a(k, n) f¨ur alle n∈N.

Beweis durch strukturelle Induktion ¨uber normalisiertes Programm.

F¨alle:

1 Zuweisung xi :=xj+cmit c∈Zund c≤1

2 Sequenz P1;P2

3 LOOP-Schleife LOOPxi DO QEND, wobei xi nicht inQvorkommt.

(19)

Maximale LOOP-berechenbare Zahlen (3)

Zu zeigen: F¨ur jedes normalisierte LOOP-Programm P gibt es eine Konstantek, so dassfP(n)< a(k, n) f¨ur alle n∈N.

Beweis durch strukturelle Induktion ¨uber normalisiertes Programm.

F¨alle:

1 Zuweisung xi :=xj+cmitc∈Zund c≤1

2 Sequenz P1;P2

3 LOOP-Schleife LOOPxi DO QEND, wobei xi nicht inQvorkommt.

(20)

Maximale LOOP-berechenbare Zahlen (4)

Fall: Zuweisungxi :=xj+cmitc∈Z und c≤1 Dann giltfP(n)≤2n+ 1, da im maximalen Fall:

ρ(xk) = 0 f¨urk6=j ρ(xj) =n

c= 1und ρ0(xi) =n+ 1, ρ0(xj) =nund

ρ0(xk) = 0 f¨urk6=j und k6=i Mita(2, y) = 2y+ 3(s. Skript) folgt

fP(n)≤2n+ 1<2n+ 3 =a(2, n) D.h. die AussagefP(n)≤a(k, n) gilt mit k= 2.

(21)

Maximale LOOP-berechenbare Zahlen (5)

Fall: SequenzP1;P2

Induktionsannahme:fPi(n)< a(ki, n) f¨uri= 1,2.

Es gilt:

fP(n) =fP2(fP1(n))

< a(k2, a(k1, n))

≤a(max{k1, k2}, a(max{k1, k2}, n) (1)

≤a(max{k1, k2}, a(max{k1, k2}+ 1, n+ 1) (1)

=a(max{k1, k2}+ 1, n+ 1) (Definition vona)

≤a(max{k1, k2}+ 2, n) (2)

(1) Monotonie:x≤x0, y ≤y0 =⇒ a(x, y)≤a(x0, y0) (2) Monotonie:a(x, y+ 1)≤a(x+ 1, y)

Daher giltfP(n)< a(k, n) f¨ur k= max{k1, k2}+ 2.

(22)

Maximale LOOP-berechenbare Zahlen (6)

Fall:LOOP xi DO QEND und xi kommt nicht inQ vor Induktionsannahme:fQ(n)< a(kQ, n) f¨ur einkQ.

fP(n) berechnet Maximum. Sei ρ so, dass fP(n) maximal ist.

Wenn ρ(xi) = 0, dann istfP(n) =n < a(0, n).

Wenn ρ(xi) = 1, dann istfP(n) =fQ(n)< a(kQ, n) Sei ρ(xi)≥2. . . .

(23)

Maximale LOOP-berechenbare Zahlen (7)

Fall:LOOP xi DO QEND und xi kommt nicht inQ vor Sei ρ(xi)≥2. . . . Da xi nicht inQ vorkommt, gilt:

fP(n) =fQ(. . .(fQ

| {z }

ρ(xi)mal

(n−ρ(xi)). . .) +ρ(xi) (daxi6∈Q,fQ unabh. vonρ(xi))

≤a(k1, . . . , a(k1, n−ρ(xi)). . .) (ρ(xi)-mal gilt<(f¨ur jedesfQ).

Daher undρ(xi)allt weg)

< a(k1, . . . , a(k1,

| {z }

ρ(xi)−1mal

a(k1+ 1, n−ρ(xi)). . .))(1)

=a(k1+ 1, n−ρ(xi) +ρ(xi)−1)(Definition vona)

=a(k1+ 1, n−1)≤a(k1+ 1, n)(2)

(1) Monotonie:a(x, y)< a(x+ 1, y) (2) Monotonie:a(x, y)< a(x, y+ 1) Daher giltfP(n)< a(k, n) f¨ur k=k1+ 1

(24)

Ackermannfunktion nicht LOOP-berechenbar

Theorem

Die Ackermannfunktion ist nicht LOOP-berechenbar.

Beweis:

Annahme: aist LOOP-berechenbar.

Dann ist auchf(x1) =a(x1, x1) LOOP-berechenbar.

Sei P LOOP-Programm, dassf berechnet.

Dann gilt f(x1)≤fP(x1) (daρ0(x0) =f(x1) nach Ausf¨uhrung von P)

Es gibt Konstante k, sodassfP(n)< a(k, n) Starte P mitρ={x1 7→k}.

Dann gilt f(k)≤fP(k)< a(k, k) =f(k) Widerspruch!

aist nicht LOOP-berechenbar.

(25)

Fazit

Theorem

Es gibt totale WHILE-berechenbare (bzw. GOTO-berechenbare, Turingberechenbare) Funktionen, die nicht LOOP-berechenbar sind.

(26)

Rekursive Funktionen

Weiterer Formalismus zur Definition der Berechenbarkeit Primitiv rekursive Funktionen und

µ-rekursive Funktionen Wir werden sehen

Primitiv rekursive Funktionen entsprechen genau den LOOP-berechenbaren Funktionen

µ-rekursive Funktionen entsprechen genau den

Turingberechenbaren (WHILE-, GOTO-berechenbaren) Funktionen

(27)

Primitiv rekursive Funktionen

Definition

Eine Funktionf :NkNistprimitiv rekursiv, wenn sie der folgenden induktiven Definition gen¨ugt:

Jedekonstante Funktionf(x1, . . . , xk) =cNist primitiv rekursiv.

DieProjektionsfunktionenπki(x1, . . . , xk) =xisind primitiv rekursiv.

DieNachfolgerfunktionsucc(x) =x+ 1ist primitiv rekursiv.

Komposition / Einsetzung: Wenng:NmNund f¨uri= 1, . . . , m:

hi:NkNprimitiv rekursiv sind, dann ist auchf mit

f(x1, . . . , xk) =g(h1(x1, . . . , xk), . . . , hm(x1, . . . , xk))primitiv rekursiv.

Primitive Rekursion: Wenng:Nk−1Nundh:Nk+1Nprimitiv rekursiv, dann ist auchf mit

f(x1, . . . , xk) =

g(x2, . . . , xk), wennx1= 0

h(f(x11, x2, . . . , xk), x11, x2, . . . , xk),sonst primitiv rekursiv.

(28)

Konstruktionen

Komponenten eines Tupels entfernen / vertauschen / vervielfachen Wenng:N4 →Nprimitiv rekursiv, dann ist auchf :N3→N mit

f(n1, n2, n3) =g(n2, n3, n3, n2), denn:

f(n1, n2, n3) =g(π32(n1, n2, n3), π33(n1, n2, n3), π33(n1, n2, n3), π23(n1, n2, n3))

(29)

Konstruktionen (2)

Rekursion durch das i. Argument F¨ur1≤i≤kkann man

f(x1, . . . , xk) =

g(x1, . . . , xi−1, xi+1, xk),fallsxi= 0

h(f(x1, . . . , xi−1, xi1, xi+1, . . . , xk), x1, . . . ,

xi−1, xi1, xi+1, . . . , xk),sonst durchf(x1, . . . , xk) =f0(xi, x1. . . , xi−1, xi+1, . . . , xk)darstellen, wobei

f0(x1, . . . , xk) =

g0(x2, . . . , xk),fallsx1= 0

h0(f0(x1−1, x2. . . , xk), x1−1, x2, . . . , xk),sonst g0(x1, . . . , xk−1) = g(x2, . . . , xi, x1, xi+1, . . . , xk)

h0(x1, . . . , xk+1) = h(x1, x2, . . . , xi, x1−1, xi+1, . . . , xk)

(30)

Beispiele (1)

Additionsfunktion

add(x1, x2) =x1+x2 ist primitiv rekursiv:

add(x1, x2) =

x2, fallsx1= 0

succ(add(x1−1, x2)), sonst Bemerkung:

Die verwendeten Funktioneng und h aus der Definition der primitiv rekursiven Funktionen sind hier:

g=π11

h(x1, x2, x3) =succ(π13(x1, x2, x3))

(31)

Beispiele (2)

Multiplikationsfunktion

mult(x1, x2) =

0, fallsx1= 0

add(mult(x1−1, x2), x2), sonst Idee:x1-malx2 zu0 addieren:

(32)

Beispiele (3)

Differenz

Allgemeinx1−x2 nicht primitiv rekursiv, undefinierter Fall x1 < x2 nicht darstellbar.

Angepasste Differenz

liefert0falls x1 < x2, ist primitiv rekursiv:

sub(x1, x2) =

x1, falls x2 = 0

pred(sub(x1, x2−1)) sonst wobei

pred(x1) =

0, falls x1 = 0 x1−1, sonst

(33)

N¨ achstes Ziel

Wir wollen zeigen:

Primitiv rekursive Funktionen sind genau die LOOP-berechenbaren Funktionen

Ben¨otigt:

Darstellung der Variablenbelegung ρ alseine einzige Zahl, um sie der primitiv rekursiven Funktion als Argument zu

¨

ubergeben.

D.h. eindeutige Darstellung eines Tupels nat¨urlicher Zahlen als eine einzige Zahl.

Operationen zum Konvertieren in beide Richtungen Eine solches Verfahren nennt man auch

”G¨odelisierung“

(nach Kurt G¨odel)

(34)

G¨ odelisierung (1)

Tupel von nat¨urlichen Zahlen(x0, . . . , xk) bijektiv in die nat¨urlichen Zahlen abbilden

F¨ur festes k

mit primitiv rekursivenFunktionen c(x, y) =

x+y+ 1 2

+x Werte vonc(x, y) f¨ur x, y∈ {0, . . . ,5}:

y\x 0 1 2 3 4 5

0 0 1 3 6 10 15

1 2 4 7 11 16 22

2 5 8 12 17 23 30

3 9 13 18 24 31 39

4 14 19 25 32 40 49

5 20 26 33 41 50 60

(35)

G¨ odelisierung (2)

Funktionc ist primitiv rekursiv, da 0

2

= 0 und

n+ 1 2

= n

2

+n

F¨urk+ 1-Tupel definieren wir:

hx0, . . . , xki=c(x0, c(x1, . . . , c(xk,0). . .)) Beachte:h·i ist primitiv rekursiv

(dacprimitiv rekursiv und Komposition primitiv rekursiv)

(36)

G¨ odelisierung (3)

R¨uckgewinnung der Komponenten:

Seienleft und right Funktionen mit left(c(x, y)) =x und

right(c(x, y)) =y.

Im Skript wird gezeigt:

left und right existieren

left und right sind primitiv rekursiv

(37)

G¨ odelisierung (5)

Zugriff auf beliebige Komponenten:

Programmieredi(hx0, . . . , xki) =xi durch:

d0(x) = left(x) d1(x) = left(right(x))

di(x) = left(right(right. . .right

| {z }

imal

(x). . .))

Damit sind auch diedi-Funktionen primitiv rekursiv.

(38)

Von LOOP-Programm berechnete Funktion

Sei P ein LOOP-Programm, ρ eine Variablenbelegung mit (ρ, P)−−−→

LOOP

0, ε)

Seien x0, x1, . . . , xn alle vom ProgrammP verwendeten Variablen (auch solche, die nicht in ρ vorkommen) Die vonP berechnete Funktion:

gP(hx0, . . . , xni) =hx00, . . . , x0ni (wobei x0i0(xi))

(39)

LOOP-Programme berechnen primitiv rekursive Funktionen

Lemma

F¨ur jedes LOOP-Programm P ist die zugeh¨orige FunktiongP

primitiv rekursiv.

Beweis: Strukturelle Induktion ¨uber jedes TeilprogrammQund die zugeh¨orige FunktiongQ.

Basis:Q ist Zuweisungxi =xj±c.

F¨urgQ muss gelten:

gQ(hm0, . . . , mni) =hm0, . . . , mi−1, mj±c, mi, . . . , mni Primitiv rekursive Implementierung:

gQ(x) =hd0(x), . . . , di−1(x), dj(x) +c, di+1(x), . . . dn(x)i

(40)

LOOP-Programme berechnen primitiv rekursive Funktionen (2)

Induktionsschritt:

Q ist eine SequenzQ1;Q2.

Induktionshypothese: primitiv rekursive Funktionen gQ1,gQ2. Funktion gQ(x) =gQ2(gQ1(x))ist primitiv rekursiv.

Q istLOOP xi DOP END.

Induktionshypothese liefert primitiv rekursive Funktion gP. Konstruktion von gQ:xi-mal wirdgP angewendet.

gQ(x) = run(di(x), x) run(n, x) =

x, fallsn= 0

gP(run(n−1, x)) sonst

run ist primitiv rekursiv. Damit auch gQ primitiv rekursiv.

(41)

LOOP-berechenbare Funktionen sind primitiv rekursiv

Satz 11.1.6

Jede LOOP-berechenbare Funktion ist primitiv rekursiv.

Beweis:

Sei f :Nk→N LOOP-berechenbar.

Sei P LOOP-Programm mit ρ={x1 7→n1, . . . , xk7→nk}, (ρ, P)−−−→

LOOP

0, ε) undρ0(x0) =f(n1, . . . , nk)

Es gilt f(n1, . . . , nk) =d0(gP(h0, n1, . . . , nk,0, . . . ,0i)).

Dah·i,d0 und gP primitiv rekursiv sind, ist auch f primitiv rekursiv.

(42)

Primitiv rekursive Funktionen sind LOOP-berechenbar

Satz 11.1.7

Jede primitiv rekursive Funktion ist LOOP-berechenbar.

Beweis: Induktion ¨uber Struktur der primitiv rekursiven Funktion:

Wenn f(x) =c,f =succ, oderf =πnk, dann gibt es auch LOOP-Programm dazu.

Wenn f(x1, . . . , xk) =h(g1(x1, . . . , xk), . . . , gn(x1, . . . , xk)):

Induktionshypothese liefert LOOP-ProgrammePh und Pg,1, . . . , Pg,n, dieh,g1,. . . ,gn berechnen.

Konstruiere Programm f¨ur f nach dem Schema:

y1 :=g1(x1, . . . , xk);. . .;yn:=gn(x1, . . . , xk);x0 :=h(y1, . . . , yn) Genauer: Pg,1, . . . , Pg,n, Ph ab¨andern, so dass sie auf

disjunkten Variablenmengen arbeiten, entsprechende Variableninhalte f¨urx1, . . . , xk verdoppeln.

. . .

(43)

Primitiv rekursive Funktionen sind LOOP-berechenbar (2)

. . .

f ist primitiv rekursiv:

f(x1, . . . , xk) =

g(x2, . . . , xk) wenn x1= 0

h(f(x11, x2, . . . , xk), x11, x2, . . . , xk) sonst wobei g:Nk−1 →Nund h:Nk+1→N primitiv rekursiv sind.

Induktionshypothese liefert LOOP-Programme, die g, h berechnen.

Konstruiere LOOP-Programm f¨ur f nach dem Schema y:= 0;

x0 :=g(x2, . . . , xk);

LOOPx1 DO y:=y+ 1;x0 :=h(x0, y, x2, . . . , xk) END

(44)

LOOP-berechenbar = primitiv rekursiv

Theorem 11.1.8

Die primitiv rekursiven Funktionen sind genau die LOOP-berechenbaren Funktionen.

(45)

µ-Operator

Definition µ-Operator

Seih:Nk+1 →Neine (partielle oder totale) Funktion. Dann ist (µh) :Nk→Ndefiniert als

(µh)(x1, . . . , xk) =





n fallsh(n, x1, . . . , xk)= 0 und f¨ur allem <n:h(m, x1, . . . , xk)ist definiert und h(m, x1, . . . , xk)>0.

undefiniert, sonst µ-Operator

”sucht“ nach einer kleinsten Nullstelle von h.

Wenn diese nicht existiert (entweder da h keine Nullstelle hat, oder da h undefiniert ist f¨ur Werte, die kleiner als die Nullstelle sind), dann ist auch der µ-Operator angewendet auf hundefiniert.

(46)

µ-rekursive Funktionen

Definition

Die Menge allerµ-rekursiven Funktionensei die kleinste Menge, so dass gilt:

Jedekonstante Funktionf(x1, . . . , xk) =cNistµ-rekursiv.

DieProjektionsfunktionenπki(x1, . . . , xk) =xisindµ-rekursiv.

DieNachfolgerfunktionsucc(x) =x+ 1istµ-rekursiv.

Komposition / Einsetzung: Wenng:NmNund f¨uri= 1, . . . , m:

hi:NkNµ-rekursiv sind, dann ist auchf mit

f(x1, . . . , xk) =g(h1(x1, . . . , xk), . . . , hm(x1, . . . , xk))µ-rekursiv.

Rekursion: Wenng:Nk−1Nundh:Nk+1Nµ-rekursiv, dann ist

f(x1, . . . , xk) =

g(x2, . . . , xk), wennx1= 0

h(f(x11, x2, . . . , xk), x11, x2, . . . , xk),sonst auchµ-rekursiv.

µ-Operator: Wennh:Nk+1Nµ-rekursiv, dann auchf =µh µ-rekursiv.

(47)

WHILE-berechenbare Funktionen sind µ-rekursiv

Satz 11.2.3

Jede WHILE-berechenbare Funktion istµ-rekursiv.

Beweis: Analog zu Satz 11.1.6 ¨uber Struktur des WHILE-ProgrammsP Neuer Fall:P ist WHILExi6= 0 DO QEND

Induktionshypothese liefertµ-rekursive Funktion gQ f¨urQ.

Konstruiere:

gP(x) = run(µ(runi)(x), x) runi(n, x) = di(run(n, x)) run(n, x) =

x, fallsn= 0

gQ(run(n−1, x)) sonst run(n, x) f¨uhrt n-malgQ aus.

µ(runi)(x) berechnet, wie oft die Schleife minimal durchlaufen werden muss, bis xi den Wert 0 hat .

Divergiert die Schleife, so istµ(runi) undefiniert undgP undefiniert.

(48)

µ-rekursive Funktionen sind WHILE-berechenbar

Satz 11.2.4

Jedeµ-rekursive Funktion ist WHILE-berechenbar.

Beweis: Analog zu Satz 11.1.7 ¨uber die Struktur der Funktion.

Neuer Fall:f =µh f¨ur eine µ-rek. Funktionh.

Induktionshypothese liefert WHILE-ProgrammPh, dash berechnet.

KonstruierePf nach dem Schema:

x0 := 0;

y:=h(0, x1, . . . , xn);

WHILE y6= 0 DO

x0:=x0+ 1;y:=h(x0, . . . , xn) END

WHILE-Schleife berechnet minimalen Wert f¨ur h(x0, . . . , xn) = 0 Wenn dieser nicht existiert, terminiert die Schleife nicht.

Entspricht der Berechnung vonµh.

(49)

WHILE-berechenbar = µ-rekursiv

Theorem 11.2.5

Dieµ-rekursiven Funktionen entsprechen genau den WHILE-berechenbaren (und damit auch den GOTO- und Turingberechenbaren) Funktionen.

(50)

Uberblick: Berechenbarkeitsformalismen ¨

WHILE-berechenbar

LOOP-berechenbar primitiv rekursiv

µ-rekursiv

Turingberechenbar GOTO-berechenbar

Theorem 11.1.8 Theorem 11.2.4

Satz 10.5.2

Theorem 10.2.4 Theorem 10.4.1

Satz 10.2.3

Abbildung

Tabelle mit a(x, y)-Eintr¨ agen:

Referenzen

ÄHNLICHE DOKUMENTE

Freitag 12-15 in Raum B 015 (Hauptgeb¨ aude) Eine Stunde ¨ Ubung und eine Stunde Tutorium. Raumverlegung wegen Erstifest: Am Freitag 25.10.2019 findet die ¨ Ubung/das Tutorium in

Jede Folge hat h¨ ochstens einen

Letzte ¨ Anderung der

Aus dem Beweis des Satzes kann man einen Algorithmus zur n¨ aherungsweise Berechnung von Nullstellen von Funktionen ablesen... Monotonie

Aus dem Beweis des Satzes kann man einen Algorithmus zur n¨ aherungsweise Berechnung von Nullstellen von Funktionen ablesen. TCS | 06 Funktionen und Stetigkeit | WS 2019/20

Man erh¨ alt die komplexen Zahlen, indem man zu den reellen Zahlen die imagin¨ are Einheit i hinzunimmt, die dem Gesetz i 2 = −1 gen¨ ugt.. Danach

Man erh¨ alt die komplexen Zahlen, indem man zu den reellen Zahlen die imagin¨ are Einheit i hinzunimmt, die dem Gesetz i 2 = −1 gen¨ ugt. Danach

Man kann das Restglied Rn x des Satzes auch konkret abschätzen: Satz 10.12 Lagrangesche Form des Restglieds Für das Restglied Rn x aus dem vorangegangenen Satz gilt folgende