• Keine Ergebnisse gefunden

VL-12: LOOP und WHILE Programme II (Berechenbarkeit und Komplexit¨at, WS 2017) Gerhard Woeginger

N/A
N/A
Protected

Academic year: 2022

Aktie "VL-12: LOOP und WHILE Programme II (Berechenbarkeit und Komplexit¨at, WS 2017) Gerhard Woeginger"

Copied!
102
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

VL-12: LOOP und WHILE Programme II

(Berechenbarkeit und Komplexit¨ at, WS 2017) Gerhard Woeginger

WS 2017, RWTH

(2)

Organisatorisches

N¨achste Vorlesung:

Donnerstag, November 30, 12:15–13:45 Uhr, Aula Webseite:

http://algo.rwth-aachen.de/Lehre/WS1718/BuK.php

(3)

Wiederholung

(4)

Wdg.: Programmiersprache LOOP

Wir betrachten eine einfache Programmiersprache namens LOOP, deren Programme aus den folgenden syntaktischen Komponenten aufgebaut sind:

Variablen: x1 x2 x3 . . . Konstanten: 0 1 2 . . . Symbole: ; := + −

Schl¨usselw¨orter: LOOP DO ENDLOOP

(5)

Wdg. LOOP / Semantik

Ein LOOP-ProgrammP mitk Variablen

berechnet einek-stellige Funktion der Form[P] : Nk →Nk. IstP die Zuweisungxi :=xj+c,

so ist[P](r1, . . . ,rk) = (r1, . . . ,ri−1,rj+c,ri+1, . . . ,rk).

IstP die Zuweisungxi :=xj−c,

ist[P](r1, . . . ,rk) = (r1, . . . ,ri−1,rj−c,ri+1, . . . ,rk)fallsrj≥c, und andernfalls[P](r1, . . . ,rk) = (r1, . . . ,ri−1,0,ri+1, . . . ,rk).

IstP=P1;P2 eine Hintereinanderausf¨uhrung, so ist[P](r1, . . . ,rk) = [P2]([P1](r1, . . . ,rk)).

IstP=LOOPxi DOQENDLOOPein LOOP-Konstrukt, so gilt[P](r1, . . . ,rk) = [Q]ri(r1, . . . ,rk).

(6)

Wdg.: WHILE / Semantik

Die Eingabe ist in den Variablen x1, . . . ,xn enthalten.

Alle anderen Variablen werden mit0initialisiert.

Das Resultat eines WHILE-Programms ist die Zahl, die sich am Ende der Abbarbeitung in der Variablenx1 ergibt.

Das ProgrammWHILExi6=0 DOP ENDWHILEhat folgende Bedeutung:

P wird solange ausgef¨uhrt, bisxi den Wert0erreicht.

Ein WHILE-ProgrammP mitk Variablen

berechnet einek-stellige Funktion der Form[P] : Nk →Nk. IstP=WHILExi6=0 DOQ ENDWHILE ein WHILE-Konstrukt,

so ist[P](r1, . . . ,rk) = [Q]`(r1, . . . ,rk)f¨ur die kleinste Zahl`, f¨ur die diei-te Komponente von[Q]`(r1, . . . ,rk)gleich0ist.

Falls solch ein `nicht existiert, so ist[P](r1, . . . ,rk)undefiniert.

(7)

Wdg.: WHILE versus LOOP

Es gibt WHILE-Programme, die nicht terminieren.

LOOP-Programme terminieren immer.

Jede LOOP-berechenbare Funktionf:Nk →Nist auch WHILE-berechenbar.

Satz

Die Programmiersprache WHILE ist Turing-m¨achtig.

(8)

Landschaft um LOOP, WHILE, TM, RAM

TM = RAM = WHILE = entscheidbar

LOOP = primitiv rekursiv + − × ab ab kn

A(m,n)

Ackermann Funktion

(9)

Vorlesung VL-12

LOOP und WHILE Programme II

Die Ackermann Funktion

Eigenschaften der Ackermann Funktion Ackermann Funktion und LOOP-Programme Primitiv rekursive Funktionen

(10)

M¨ achtigkeit von LOOP

Vermutung von David Hilbert (1926)

Die Menge der LOOP-berechenbaren Funktionen

stimmt mit der Menge der berechenbaren Funktionen ¨uberein.

Falsch, falsch, falsch, v¨ollig falsch!!

Satz (Ackermann, 1928)

Es gibt berechenbare Funktionen, die nicht LOOP-berechenbar sind.

(11)

Wilhelm Ackermann (1896–1962)

Wikipedia: Wilhelm Friedrich Ackermann war ein deutscher Mathematiker (und ein Sch¨uler von Hilbert).

1926 entdeckte er die nach ihm benannte Ackermann Funktion, die in der Berechenbarkeitstheorie eine wichtige Rolle spielt. Ackermann war Gymnasiallehrer an verschiedenen Schulen in M¨unster, Burgsteinfurt und L¨udenscheid; er hielt auch Vorlesungen an der Universit¨at M¨unster.

(12)

Die Ackermann Funktion

(13)

Ackermann Funktion: Definition

Definition

Die Ackermann FunktionA:N2→Nist folgendermassen definiert:

A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0

(14)

Ackermann Funktion: Beispiele (1)

A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0

Ein paar Beispiele f¨urm=1: A(1,0) =A(0,1) =2

A(1,1) =A(0,A(1,0)) =A(1,0) +1=3 A(1,2) =A(0,A(1,1)) =A(1,1) +1=4 A(1,3) =A(0,A(1,2)) =A(1,2) +1=5 Beobachtung

A(1,n) =n+2

(15)

Ackermann Funktion: Beispiele (1)

A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0

Ein paar Beispiele f¨urm=1:

A(1,0) =A(0,1) =2

A(1,1) =A(0,A(1,0)) =A(1,0) +1=3 A(1,2) =A(0,A(1,1)) =A(1,1) +1=4 A(1,3) =A(0,A(1,2)) =A(1,2) +1=5 Beobachtung

A(1,n) =n+2

(16)

Ackermann Funktion: Beispiele (1)

A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0

Ein paar Beispiele f¨urm=1:

A(1,0) =A(0,1) =2

A(1,1) =A(0,A(1,0)) =A(1,0) +1=3 A(1,2) =A(0,A(1,1)) =A(1,1) +1=4 A(1,3) =A(0,A(1,2)) =A(1,2) +1=5 Beobachtung

A(1,n) =n+2

(17)

Ackermann Funktion: Beispiele (1)

A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0

Ein paar Beispiele f¨urm=1:

A(1,0) =A(0,1) =2 A(1,1) =

A(0,A(1,0)) =A(1,0) +1=3 A(1,2) =A(0,A(1,1)) =A(1,1) +1=4 A(1,3) =A(0,A(1,2)) =A(1,2) +1=5 Beobachtung

A(1,n) =n+2

(18)

Ackermann Funktion: Beispiele (1)

A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0

Ein paar Beispiele f¨urm=1:

A(1,0) =A(0,1) =2

A(1,1) =A(0,A(1,0)) =A(1,0) +1=3

A(1,2) =A(0,A(1,1)) =A(1,1) +1=4 A(1,3) =A(0,A(1,2)) =A(1,2) +1=5 Beobachtung

A(1,n) =n+2

(19)

Ackermann Funktion: Beispiele (1)

A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0

Ein paar Beispiele f¨urm=1:

A(1,0) =A(0,1) =2

A(1,1) =A(0,A(1,0)) =A(1,0) +1=3 A(1,2) =A(0,A(1,1)) =A(1,1) +1=4 A(1,3) =A(0,A(1,2)) =A(1,2) +1=5

Beobachtung A(1,n) =n+2

(20)

Ackermann Funktion: Beispiele (1)

A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0

Ein paar Beispiele f¨urm=1:

A(1,0) =A(0,1) =2

A(1,1) =A(0,A(1,0)) =A(1,0) +1=3 A(1,2) =A(0,A(1,1)) =A(1,1) +1=4 A(1,3) =A(0,A(1,2)) =A(1,2) +1=5

Beobachtung A(1,n) =n+2

(21)

Ackermann Funktion: Beispiele (2)

A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0

Ein paar Beispiele f¨urm=2:

A(2,0) =A(1,1) =3

A(2,1) =A(1,A(2,0)) =A(2,0) +2=5

A(2,2) =A(1,A(2,1)) =A(2,1) +2=7

Beobachtung

A(2,n) =2n+3

(22)

Ackermann Funktion: Beispiele (2)

A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0

Ein paar Beispiele f¨urm=2:

A(2,0) =A(1,1) =3

A(2,1) =A(1,A(2,0)) =A(2,0) +2=5 A(2,2) =A(1,A(2,1)) =A(2,1) +2=7

Beobachtung

A(2,n) =2n+3

(23)

Ackermann Funktion: Beispiele (2)

A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0

Ein paar Beispiele f¨urm=2:

A(2,0) =A(1,1) =3

A(2,1) =A(1,A(2,0)) =A(2,0) +2=5 A(2,2) =A(1,A(2,1)) =A(2,1) +2=7

Beobachtung A(2,n) =

2n+3

(24)

Ackermann Funktion: Beispiele (2)

A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0

Ein paar Beispiele f¨urm=2:

A(2,0) =A(1,1) =3

A(2,1) =A(1,A(2,0)) =A(2,0) +2=5 A(2,2) =A(1,A(2,1)) =A(2,1) +2=7

Beobachtung

A(2,n) =2n+3

(25)

Ackermann Funktion: Beispiele (3)

A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0

Und ein paar Beispiele f¨urm=3:

A(3,0) =A(2,1) =5

A(3,1) =A(2,A(3,0)) =2·A(3,0) +3=13 A(3,2) =A(2,A(3,1)) =2·A(3,1) +3=29 A(3,3) =A(2,A(3,2)) =2·A(3,2) +3=61 Beobachtung

A(3,n) =2n+3−3

(26)

Ackermann Funktion: Beispiele (3)

A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0

Und ein paar Beispiele f¨urm=3:

A(3,0) =A(2,1) =5

A(3,1) =A(2,A(3,0)) =2·A(3,0) +3=13

A(3,2) =A(2,A(3,1)) =2·A(3,1) +3=29 A(3,3) =A(2,A(3,2)) =2·A(3,2) +3=61 Beobachtung

A(3,n) =2n+3−3

(27)

Ackermann Funktion: Beispiele (3)

A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0

Und ein paar Beispiele f¨urm=3:

A(3,0) =A(2,1) =5

A(3,1) =A(2,A(3,0)) =2·A(3,0) +3=13 A(3,2) =A(2,A(3,1)) =2·A(3,1) +3=29 A(3,3) =A(2,A(3,2)) =2·A(3,2) +3=61

Beobachtung

A(3,n) =2n+3−3

(28)

Ackermann Funktion: Beispiele (3)

A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0

Und ein paar Beispiele f¨urm=3:

A(3,0) =A(2,1) =5

A(3,1) =A(2,A(3,0)) =2·A(3,0) +3=13 A(3,2) =A(2,A(3,1)) =2·A(3,1) +3=29 A(3,3) =A(2,A(3,2)) =2·A(3,2) +3=61

Beobachtung A(3,n) =

2n+3−3

(29)

Ackermann Funktion: Beispiele (3)

A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0

Und ein paar Beispiele f¨urm=3:

A(3,0) =A(2,1) =5

A(3,1) =A(2,A(3,0)) =2·A(3,0) +3=13 A(3,2) =A(2,A(3,1)) =2·A(3,1) +3=29 A(3,3) =A(2,A(3,2)) =2·A(3,2) +3=61 Beobachtung

A(3,n) =2n+3−3

(30)

Ackermann Funktion: Beispiele (4)

Zusammenfassung der Beispiele

Wenn man den ersten Parameter fixiert ...

A(1,n) =n+2 A(2,n) =2n+3 A(3,n) =2n+3−3 A(4,n) = 22··

·2

| {z } n+3 viele

Zweien

−3

Bereits der Wert A(4,2) =265536−3

ist gr¨osser als die Anzahl aller Atome im Weltraum.

(31)

Exkurs: UpArrow-Notation (1)

Addition ist iterierte Nachfolgerbildung:

S(S(. . .(S(a). . .)

| {z }

bmal

= a+b

Multiplikation ist iterierte Addition: a+· · ·+a

| {z }

bmal

= a·b

Potenzierung ist iterierte Multiplikation: a× · · · ×a

| {z }

bmal

= ab =: a↑b

Der Potenzturm ist iterierte Potenzierung: aa. .

.a

| {z }

bmal

=: a↑↑b

Wiederholte Potenzturmbildung gibt a↑↑a↑↑. . .↑↑a

| {z }

bmal

=: a↑↑↑b

(32)

Exkurs: UpArrow-Notation (1)

Addition ist iterierte Nachfolgerbildung:

S(S(. . .(S(a). . .)

| {z }

bmal

= a+b

Multiplikation ist iterierte Addition:

a+· · ·+a

| {z }

bmal

= a·b

Potenzierung ist iterierte Multiplikation: a× · · · ×a

| {z }

bmal

= ab =: a↑b

Der Potenzturm ist iterierte Potenzierung: aa. .

.a

| {z }

bmal

=: a↑↑b

Wiederholte Potenzturmbildung gibt a↑↑a↑↑. . .↑↑a

| {z }

bmal

=: a↑↑↑b

(33)

Exkurs: UpArrow-Notation (1)

Addition ist iterierte Nachfolgerbildung:

S(S(. . .(S(a). . .)

| {z }

bmal

= a+b

Multiplikation ist iterierte Addition:

a+· · ·+a

| {z }

bmal

= a·b

Potenzierung ist iterierte Multiplikation:

a× · · · ×a

| {z }

bmal

= ab =: a↑b

Der Potenzturm ist iterierte Potenzierung: aa. .

.a

| {z }

bmal

=: a↑↑b

Wiederholte Potenzturmbildung gibt a↑↑a↑↑. . .↑↑a

| {z }

bmal

=: a↑↑↑b

(34)

Exkurs: UpArrow-Notation (1)

Addition ist iterierte Nachfolgerbildung:

S(S(. . .(S(a). . .)

| {z }

bmal

= a+b

Multiplikation ist iterierte Addition:

a+· · ·+a

| {z }

bmal

= a·b

Potenzierung ist iterierte Multiplikation:

a× · · · ×a

| {z }

bmal

= ab =: a↑b

Der Potenzturm ist iterierte Potenzierung:

aa. .

.a

| {z }

bmal

=: a↑↑b

Wiederholte Potenzturmbildung gibt a↑↑a↑↑. . .↑↑a

| {z }

bmal

=: a↑↑↑b

(35)

Exkurs: UpArrow-Notation (1)

Addition ist iterierte Nachfolgerbildung:

S(S(. . .(S(a). . .)

| {z }

bmal

= a+b

Multiplikation ist iterierte Addition:

a+· · ·+a

| {z }

bmal

= a·b

Potenzierung ist iterierte Multiplikation:

a× · · · ×a

| {z }

bmal

= ab =: a↑b

Der Potenzturm ist iterierte Potenzierung:

aa. .

.a

| {z }

bmal

=: a↑↑b

Wiederholte Potenzturmbildung gibt a↑↑a↑↑. . .↑↑a

| {z }

bmal

=: a↑↑↑b

(36)

Exkurs: UpArrow-Notation (2)

Definition (UpArrow-Notation von Donald Knuth)

a↑mb :=









1 wennb=0

a·b wennm=0

ab wennm=1

a↑m−1(a↑m(b−1)) sonst

Es gilt:

A(1,n) =2+ (n+3)−3 A(2,n) =2·(n+3)−3 A(3,n) =2↑(n+3)−3 A(4,n) =2↑↑(n+3)−3 A(5,n) =2↑↑↑(n+3)−3 ...

A(m,n) =2↑m−2(n+3)−3 f¨urm≥2

(37)

Exkurs: UpArrow-Notation (2)

Definition (UpArrow-Notation von Donald Knuth)

a↑mb :=









1 wennb=0

a·b wennm=0

ab wennm=1

a↑m−1(a↑m(b−1)) sonst Es gilt:

A(1,n) =2+ (n+3)−3 A(2,n) =2·(n+3)−3 A(3,n) =2↑(n+3)−3 A(4,n) =2↑↑(n+3)−3 A(5,n) =2↑↑↑(n+3)−3 ...

A(m,n) =2↑m−2(n+3)−3 f¨urm≥2

(38)

Donald Ervin Knuth (1938)

Wikipedia: Don Knuth is an American computer scientist, mathematician, and professor emeritus at Stanford University.

Knuth is the author of the multi-volume work“The Art of Computer Programming”, he popularized the asymptotic notation (big-O), he created theTeXcomputer typesetting system and theMETAFONT font definition language.

Knuth-Morris-Pratt algorithm Knuth-Bendix completion algorithm

(39)

Monotonie-Verhalten

der Ackermann Funktion

(40)

Monotonie-Verhalten (1)

Monotonie

(M.1) A(m,n+1) > A(m,n) (M.2) A(m+1,n) > A(m,n) (M.3) A(m+1,n−1) ≥ A(m,n)

Folgerung

F¨urm≥m0 undn≥n0 gilt immer: A(m,n) ≥ A(m0,n0)

(41)

Monotonie-Verhalten (1)

Monotonie

(M.1) A(m,n+1) > A(m,n) (M.2) A(m+1,n) > A(m,n) (M.3) A(m+1,n−1) ≥ A(m,n)

Folgerung

F¨urm≥m0 undn≥n0 gilt immer:

A(m,n) ≥ A(m0,n0)

(42)

Monotonie-Verhalten (2)

A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0

Wir wollen nun (M.1) zeigen: A(m,n+1)>A(m,n)

Rekursionsgleichung liefert:

A(m,n+1) = A(m−1,A(m,n)) A(m,n) = A(m−1,A(m,n−1))

Induktion liefert zuerstx :=A(m,n)>A(m,n−1)=:y

und danachA(m−1,x)>A(m−1,y).

Ein analoges induktives Argument zeigt (M.2): A(m+1,n)>A(m,n)

(43)

Monotonie-Verhalten (2)

A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0

Wir wollen nun (M.1) zeigen: A(m,n+1)>A(m,n) Rekursionsgleichung liefert:

A(m,n+1) = A(m−1,A(m,n)) A(m,n) = A(m−1,A(m,n−1))

Induktion liefert zuerstx :=A(m,n)>A(m,n−1)=:y

und danachA(m−1,x)>A(m−1,y).

Ein analoges induktives Argument zeigt (M.2): A(m+1,n)>A(m,n)

(44)

Monotonie-Verhalten (2)

A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0

Wir wollen nun (M.1) zeigen: A(m,n+1)>A(m,n) Rekursionsgleichung liefert:

A(m,n+1) = A(m−1,A(m,n)) A(m,n) = A(m−1,A(m,n−1))

Induktion liefert zuerstx:=A(m,n)>A(m,n−1)=:y

und danachA(m−1,x)>A(m−1,y).

Ein analoges induktives Argument zeigt (M.2): A(m+1,n)>A(m,n)

(45)

Monotonie-Verhalten (2)

A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0

Wir wollen nun (M.1) zeigen: A(m,n+1)>A(m,n) Rekursionsgleichung liefert:

A(m,n+1) = A(m−1,A(m,n)) A(m,n) = A(m−1,A(m,n−1))

Induktion liefert zuerstx:=A(m,n)>A(m,n−1)=:y

und danachA(m−1,x)>A(m−1,y).

Ein analoges induktives Argument zeigt (M.2): A(m+1,n)>A(m,n)

(46)

Monotonie-Verhalten (3)

(M.3) A(m+1,n−1)≥A(m,n)wird mit einer vollst¨andigen Induktion bewiesen, die ¨uber die lexikographisch sortierten Paare(m,n)l¨auft.

Induktionsanfang:Es giltA(1,n−1) =n+1=A(0,n)f¨ur allen≥1. Es gilt A(m+1,0) =A(m,1)f¨ur allem≥0. Induktionsschritt:Wir nehmen an, dass f¨ur(m0,n0)mit(m0<m)oder (m0=m)∧(n0<n)immerA(m0+1,n0−1)≥A(m0,n0)gilt.

A(m+1,n−1)

= A(m,A(m+1,n−2)) (Def)

≥ A(m,A(m,n−1)) (Ind+Mono)

≥ A(m−1,A(m,n−1) +1) (Ind)

≥ A(m−1,A(m,n−1)) (Mono)

= A(m,n) (Def)

(47)

Monotonie-Verhalten (3)

(M.3) A(m+1,n−1)≥A(m,n)wird mit einer vollst¨andigen Induktion bewiesen, die ¨uber die lexikographisch sortierten Paare(m,n)l¨auft.

Induktionsanfang:Es giltA(1,n−1) =n+1=A(0,n)f¨ur allen≥1.

Es gilt A(m+1,0) =A(m,1)f¨ur allem≥0.

Induktionsschritt:Wir nehmen an, dass f¨ur(m0,n0)mit(m0<m)oder (m0=m)∧(n0<n)immerA(m0+1,n0−1)≥A(m0,n0)gilt.

A(m+1,n−1)

= A(m,A(m+1,n−2)) (Def)

≥ A(m,A(m,n−1)) (Ind+Mono)

≥ A(m−1,A(m,n−1) +1) (Ind)

≥ A(m−1,A(m,n−1)) (Mono)

= A(m,n) (Def)

(48)

Monotonie-Verhalten (3)

(M.3) A(m+1,n−1)≥A(m,n)wird mit einer vollst¨andigen Induktion bewiesen, die ¨uber die lexikographisch sortierten Paare(m,n)l¨auft.

Induktionsanfang:Es giltA(1,n−1) =n+1=A(0,n)f¨ur allen≥1.

Es gilt A(m+1,0) =A(m,1)f¨ur allem≥0.

Induktionsschritt:Wir nehmen an, dass f¨ur(m0,n0)mit(m0<m)oder (m0=m)∧(n0<n)immerA(m0+1,n0−1)≥A(m0,n0)gilt.

A(m+1,n−1)

= A(m,A(m+1,n−2)) (Def)

≥ A(m,A(m,n−1)) (Ind+Mono)

≥ A(m−1,A(m,n−1) +1) (Ind)

≥ A(m−1,A(m,n−1)) (Mono)

= A(m,n) (Def)

(49)

Monotonie-Verhalten (3)

(M.3) A(m+1,n−1)≥A(m,n)wird mit einer vollst¨andigen Induktion bewiesen, die ¨uber die lexikographisch sortierten Paare(m,n)l¨auft.

Induktionsanfang:Es giltA(1,n−1) =n+1=A(0,n)f¨ur allen≥1.

Es gilt A(m+1,0) =A(m,1)f¨ur allem≥0.

Induktionsschritt:Wir nehmen an, dass f¨ur(m0,n0)mit(m0<m)oder (m0=m)∧(n0<n)immerA(m0+1,n0−1)≥A(m0,n0)gilt.

A(m+1,n−1)

= A(m,A(m+1,n−2)) (Def)

≥ A(m,A(m,n−1)) (Ind+Mono)

≥ A(m−1,A(m,n−1) +1) (Ind)

≥ A(m−1,A(m,n−1)) (Mono)

= A(m,n) (Def)

(50)

Monotonie-Verhalten (3)

(M.3) A(m+1,n−1)≥A(m,n)wird mit einer vollst¨andigen Induktion bewiesen, die ¨uber die lexikographisch sortierten Paare(m,n)l¨auft.

Induktionsanfang:Es giltA(1,n−1) =n+1=A(0,n)f¨ur allen≥1.

Es gilt A(m+1,0) =A(m,1)f¨ur allem≥0.

Induktionsschritt:Wir nehmen an, dass f¨ur(m0,n0)mit(m0<m)oder (m0=m)∧(n0<n)immerA(m0+1,n0−1)≥A(m0,n0)gilt.

A(m+1,n−1) = A(m,A(m+1,n−2)) (Def)

≥ A(m,A(m,n−1)) (Ind+Mono)

≥ A(m−1,A(m,n−1) +1) (Ind)

≥ A(m−1,A(m,n−1)) (Mono)

= A(m,n) (Def)

(51)

Monotonie-Verhalten (3)

(M.3) A(m+1,n−1)≥A(m,n)wird mit einer vollst¨andigen Induktion bewiesen, die ¨uber die lexikographisch sortierten Paare(m,n)l¨auft.

Induktionsanfang:Es giltA(1,n−1) =n+1=A(0,n)f¨ur allen≥1.

Es gilt A(m+1,0) =A(m,1)f¨ur allem≥0.

Induktionsschritt:Wir nehmen an, dass f¨ur(m0,n0)mit(m0<m)oder (m0=m)∧(n0<n)immerA(m0+1,n0−1)≥A(m0,n0)gilt.

A(m+1,n−1) = A(m,A(m+1,n−2)) (Def)

≥ A(m,A(m,n−1)) (Ind+Mono)

≥ A(m−1,A(m,n−1) +1) (Ind)

≥ A(m−1,A(m,n−1)) (Mono)

= A(m,n) (Def)

(52)

Monotonie-Verhalten (3)

(M.3) A(m+1,n−1)≥A(m,n)wird mit einer vollst¨andigen Induktion bewiesen, die ¨uber die lexikographisch sortierten Paare(m,n)l¨auft.

Induktionsanfang:Es giltA(1,n−1) =n+1=A(0,n)f¨ur allen≥1.

Es gilt A(m+1,0) =A(m,1)f¨ur allem≥0.

Induktionsschritt:Wir nehmen an, dass f¨ur(m0,n0)mit(m0<m)oder (m0=m)∧(n0<n)immerA(m0+1,n0−1)≥A(m0,n0)gilt.

A(m+1,n−1) = A(m,A(m+1,n−2)) (Def)

≥ A(m,A(m,n−1)) (Ind+Mono)

≥ A(m−1,A(m,n−1) +1) (Ind)

≥ A(m−1,A(m,n−1)) (Mono)

= A(m,n) (Def)

(53)

Monotonie-Verhalten (3)

(M.3) A(m+1,n−1)≥A(m,n)wird mit einer vollst¨andigen Induktion bewiesen, die ¨uber die lexikographisch sortierten Paare(m,n)l¨auft.

Induktionsanfang:Es giltA(1,n−1) =n+1=A(0,n)f¨ur allen≥1.

Es gilt A(m+1,0) =A(m,1)f¨ur allem≥0.

Induktionsschritt:Wir nehmen an, dass f¨ur(m0,n0)mit(m0<m)oder (m0=m)∧(n0<n)immerA(m0+1,n0−1)≥A(m0,n0)gilt.

A(m+1,n−1) = A(m,A(m+1,n−2)) (Def)

≥ A(m,A(m,n−1)) (Ind+Mono)

≥ A(m−1,A(m,n−1) +1) (Ind)

≥ A(m−1,A(m,n−1)) (Mono)

= A(m,n) (Def)

(54)

Monotonie-Verhalten (3)

(M.3) A(m+1,n−1)≥A(m,n)wird mit einer vollst¨andigen Induktion bewiesen, die ¨uber die lexikographisch sortierten Paare(m,n)l¨auft.

Induktionsanfang:Es giltA(1,n−1) =n+1=A(0,n)f¨ur allen≥1.

Es gilt A(m+1,0) =A(m,1)f¨ur allem≥0.

Induktionsschritt:Wir nehmen an, dass f¨ur(m0,n0)mit(m0<m)oder (m0=m)∧(n0<n)immerA(m0+1,n0−1)≥A(m0,n0)gilt.

A(m+1,n−1) = A(m,A(m+1,n−2)) (Def)

≥ A(m,A(m,n−1)) (Ind+Mono)

≥ A(m−1,A(m,n−1) +1) (Ind)

≥ A(m−1,A(m,n−1)) (Mono)

= A(m,n) (Def)

(55)

Monotonie-Verhalten (4)

Visualisierung der vollst¨andigen Induktion ¨uber die lexikographisch sortierten Paare(m,n):

n

0 m 1

(56)

Monotonie-Verhalten (4)

Visualisierung der vollst¨andigen Induktion ¨uber die lexikographisch sortierten Paare(m,n):

n

0 m 1

(57)

Monotonie-Verhalten (4)

Visualisierung der vollst¨andigen Induktion ¨uber die lexikographisch sortierten Paare(m,n):

n

0 m 1

(58)

Monotonie-Verhalten (4)

Visualisierung der vollst¨andigen Induktion ¨uber die lexikographisch sortierten Paare(m,n):

n

0 m 1

(59)

Monotonie-Verhalten (4)

Visualisierung der vollst¨andigen Induktion ¨uber die lexikographisch sortierten Paare(m,n):

n

0 m 1

(60)

Das Wachstumslemma

(61)

Wachstumslemma: Vorbereitung

Ab jetzt betrachten wir ein fixes,wohl-formuliertesLOOP-ProgrammP, das die folgenden zwei Eigenschaften besitzt:

Eigenschaft 1

In allen Zuweisungenxi:=xj+c undxi:=xj−c ist die Konstantec∈ {0,1}.

Andernfalls ersetzen wirxi :=xj+c durch xi:=xj gefolgt von einem Block, der ausc Zuweisungenxi:=xi+1besteht.

Eigenschaft 2

In LOOP-KonstruktenLOOPxi DOP ENDLOOP kommt die Z¨ahlvariablexi nicht inP vor.

Andernfalls f¨uhren wir f¨ur die Schleife eine neue Z¨ahlvariablexi0 ein.

(62)

Wachstumslemma: Definitionen

Wir betrachten ein fixes, wohl-formuliertes LOOP-Programm P mit den k Variablen x1,x2, . . . ,xk.

Wir erinnern uns (aus VL-11): Das LOOP-ProgrammP berechnet diek-stellige Funktion[P] :Nk →Nk.

F¨ur die Anfangswertea= (a1, . . . ,ak)∈Nk der Variablen definieren wir fP(a) :=b1+b2+· · ·+bk als die Summe aller Ergebniswerte in[P](a) = (b1, . . . ,bk).

Die Funktion FP:N→Nist definiert durch FP(n) =max

( fP(a)

a∈Nk mit

k

X

i=1

ai≤n )

Intuitiv: Die FunktionFP beschreibt das maximale Wachstum / die maximale Zunahme der Variablenwerte im LOOP-ProgrammP.

(63)

Wachstumslemma: Definitionen

Wir betrachten ein fixes, wohl-formuliertes LOOP-Programm P mit den k Variablen x1,x2, . . . ,xk.

Wir erinnern uns (aus VL-11): Das LOOP-ProgrammP berechnet diek-stellige Funktion[P] :Nk →Nk.

F¨ur die Anfangswertea= (a1, . . . ,ak)∈Nk der Variablen definieren wir fP(a) :=b1+b2+· · ·+bk als die Summe aller Ergebniswerte in[P](a) = (b1, . . . ,bk).

Die Funktion FP:N→Nist definiert durch FP(n) =max

( fP(a)

a∈Nk mit

k

X

i=1

ai≤n )

Intuitiv: Die FunktionFP beschreibt das maximale Wachstum / die maximale Zunahme der Variablenwerte im LOOP-ProgrammP.

(64)

Wachstumslemma: Definitionen

Wir betrachten ein fixes, wohl-formuliertes LOOP-Programm P mit den k Variablen x1,x2, . . . ,xk.

Wir erinnern uns (aus VL-11): Das LOOP-ProgrammP berechnet diek-stellige Funktion[P] :Nk →Nk.

F¨ur die Anfangswertea= (a1, . . . ,ak)∈Nk der Variablen definieren wir fP(a) :=b1+b2+· · ·+bk als die Summe aller Ergebniswerte in[P](a) = (b1, . . . ,bk).

Die Funktion FP:N→Nist definiert durch FP(n) =max

( fP(a)

a∈Nk mit

k

X

i=1

ai≤n )

Intuitiv: Die FunktionFP beschreibt das maximale Wachstum / die maximale Zunahme der Variablenwerte im LOOP-ProgrammP.

(65)

Wachstumslemma: Definitionen

Wir betrachten ein fixes, wohl-formuliertes LOOP-Programm P mit den k Variablen x1,x2, . . . ,xk.

Wir erinnern uns (aus VL-11): Das LOOP-ProgrammP berechnet diek-stellige Funktion[P] :Nk →Nk.

F¨ur die Anfangswertea= (a1, . . . ,ak)∈Nk der Variablen definieren wir fP(a) :=b1+b2+· · ·+bk als die Summe aller Ergebniswerte in[P](a) = (b1, . . . ,bk).

Die Funktion FP:N→Nist definiert durch FP(n) =max

( fP(a)

a∈Nk mit

k

X

i=1

ai≤n )

Intuitiv: Die FunktionFP beschreibt das maximale Wachstum / die maximale Zunahme der Variablenwerte im LOOP-ProgrammP.

(66)

Wachstumslemma: Definitionen

Wir betrachten ein fixes, wohl-formuliertes LOOP-Programm P mit den k Variablen x1,x2, . . . ,xk.

Wir erinnern uns (aus VL-11): Das LOOP-ProgrammP berechnet diek-stellige Funktion[P] :Nk →Nk.

F¨ur die Anfangswertea= (a1, . . . ,ak)∈Nk der Variablen definieren wir fP(a) :=b1+b2+· · ·+bk als die Summe aller Ergebniswerte in[P](a) = (b1, . . . ,bk).

Die Funktion FP:N→Nist definiert durch FP(n) =max

( fP(a)

a∈Nk mit

k

X

i=1

ai≤n )

Intuitiv: Die FunktionFP beschreibt das maximale Wachstum / die maximale Zunahme der Variablenwerte im LOOP-ProgrammP.

(67)

Wachstumslemma: Zentrale Aussage

Wir werden nun zeigen,

dassFP(n)f¨ur allen∈Necht kleiner ist alsA(m,n),

wenn der Parametermnur gen¨ugend gross (in Abh¨angigkeit vonP) gew¨ahlt wird.

Lemma

F¨ur jedes LOOP-ProgrammP gibt es eine nat¨urliche ZahlmP, so dass f¨ur allen∈Ngilt: FP(n)<A(mP,n).

Beachte:

F¨ur jedes feste ProgrammP ist der ParametermP eine Konstante.

(68)

Wachstumslemma: Zentrale Aussage

Wir werden nun zeigen,

dassFP(n)f¨ur allen∈Necht kleiner ist alsA(m,n),

wenn der Parametermnur gen¨ugend gross (in Abh¨angigkeit vonP) gew¨ahlt wird.

Lemma

F¨ur jedes LOOP-ProgrammP gibt es eine nat¨urliche ZahlmP, so dass f¨ur allen∈Ngilt: FP(n)<A(mP,n).

Beachte:

F¨ur jedes feste ProgrammP ist der ParametermP eine Konstante.

(69)

Beweis: Induktion ¨ uber den Syntax-Baum

Induktionsanfang (Zuweisungen)

Es seiP von der Formxi :=xj+c f¨urc ∈ {−1,0,1}.

Wir werden zeigen: FP(n)<A(2,n).

Induktionsschritt (Hintereinanderausf¨uhrung) Es seiP von der FormP1;P2.

Induktionsannahme: ∃q∈N:FP1(`)<A(q, `)und FP2(`)<A(q, `).

Wir werden zeigen: FP(n)<A(q+1,n).

Induktionsschritt (LOOP-Konstrukt)

Es seiP von der Form “LOOPxi DOQ ENDLOOP”

Induktionsannahme: ∃q∈N:FQ(`)<A(q, `).

Wir werden zeigen: FP(n)<A(q+1,n).

(70)

Beweis: Induktionsanfang

Induktionsanfang (Zuweisungen)

Es seiP von der Form “xi:=xj+c” f¨urc∈ {−1,0,1}

Dann gilt: FP(n)≤2n+1, und somit FP(n)<A(2,n)

Argument:

P ver¨andert nur den Wert der Variablenxi.

Am Anfang war xi≥0, und am Ende istxi =xj+c ≤n+1. Die Summe aller Variablenwerte erh¨oht sich um h¨ochstensn+1, und springt damit von h¨ochstensn(am Anfang) auf h¨ochstens 2n+1(am Ende).

(71)

Beweis: Induktionsanfang

Induktionsanfang (Zuweisungen)

Es seiP von der Form “xi:=xj+c” f¨urc∈ {−1,0,1}

Dann gilt: FP(n)≤2n+1, und somit FP(n)<A(2,n) Argument:

P ver¨andert nur den Wert der Variablen xi.

Am Anfang war xi≥0, und am Ende istxi =xj+c ≤n+1. Die Summe aller Variablenwerte erh¨oht sich um h¨ochstensn+1, und springt damit von h¨ochstensn(am Anfang) auf h¨ochstens 2n+1(am Ende).

(72)

Beweis: Induktionsanfang

Induktionsanfang (Zuweisungen)

Es seiP von der Form “xi:=xj+c” f¨urc∈ {−1,0,1}

Dann gilt: FP(n)≤2n+1, und somit FP(n)<A(2,n) Argument:

P ver¨andert nur den Wert der Variablen xi.

Am Anfang war xi≥0, und am Ende istxi =xj+c≤n+1.

Die Summe aller Variablenwerte erh¨oht sich um h¨ochstensn+1, und springt damit von h¨ochstensn(am Anfang) auf h¨ochstens 2n+1(am Ende).

(73)

Beweis: Induktionsanfang

Induktionsanfang (Zuweisungen)

Es seiP von der Form “xi:=xj+c” f¨urc∈ {−1,0,1}

Dann gilt: FP(n)≤2n+1, und somit FP(n)<A(2,n) Argument:

P ver¨andert nur den Wert der Variablen xi.

Am Anfang war xi≥0, und am Ende istxi =xj+c≤n+1.

Die Summe aller Variablenwerte erh¨oht sich um h¨ochstensn+1, und springt damit von h¨ochstensn(am Anfang) auf h¨ochstens 2n+1(am Ende).

(74)

Beweis: Schritt f¨ ur Hintereinanderausf¨ uhrung

Induktionsschritt (Hintereinanderausf¨uhrung) Es seiP von der Form “P1;P2

Induktionsannahme: ∃q∈N:FP1(`)<A(q, `)und FP2(`)<A(q, `).

Dann gilt: FP(n) < A(q+1,n)

Argument:

Wir verwenden die Absch¨atzung (M.3): A(q,n)≤A(q+1,n−1) Dann folgt mit den Monotonie Eigenschaften, dass

FP(n) ≤ FP2(FP1(n)) (Def)

< A(q,A(q,n)) (Ind)

< A(q,A(q+1,n−1)) (Mono)

= A(q+1,n) (Def)

(75)

Beweis: Schritt f¨ ur Hintereinanderausf¨ uhrung

Induktionsschritt (Hintereinanderausf¨uhrung) Es seiP von der Form “P1;P2

Induktionsannahme: ∃q∈N:FP1(`)<A(q, `)und FP2(`)<A(q, `).

Dann gilt: FP(n) < A(q+1,n) Argument:

Wir verwenden die Absch¨atzung (M.3): A(q,n)≤A(q+1,n−1) Dann folgt mit den Monotonie Eigenschaften, dass

FP(n) ≤ FP2(FP1(n)) (Def)

< A(q,A(q,n)) (Ind)

< A(q,A(q+1,n−1)) (Mono)

= A(q+1,n) (Def)

(76)

Beweis: Schritt f¨ urs LOOP-Konstrukt (1)

Induktionsschritt (LOOP-Konstrukt)

Es seiP von der Form “LOOPxi DOQ ENDLOOP”

Induktionsannahme liefert: ∃q∈N:FQ(`)<A(q, `) Dann gilt: FP(n) ≤ A(q+1,n).

Argument:

Wir betrachten jenen Wertα=α(n)f¨ur die Variablexi,

mit dem der gr¨osstm¨ogliche FunktionswertFP(n)angenommen wird Dann giltFP(n) ≤ FQ(FQ(. . .FQ(FQ(n−α)). . .)) +α,

wobei die FunktionFQ(·)hier α-fach ineinander eingesetzt ist. Die Induktionsannahme gibt uns FQ(`)<A(q, `)

Dies wenden wir auf die ¨ausserste FunktionFQ an und erhalten FP(n) < A(q,FQ(. . .FQ(FQ(n−α)). . .)) +α

(77)

Beweis: Schritt f¨ urs LOOP-Konstrukt (1)

Induktionsschritt (LOOP-Konstrukt)

Es seiP von der Form “LOOPxi DOQ ENDLOOP”

Induktionsannahme liefert: ∃q∈N:FQ(`)<A(q, `) Dann gilt: FP(n) ≤ A(q+1,n).

Argument:

Wir betrachten jenen Wertα=α(n)f¨ur die Variablexi,

mit dem der gr¨osstm¨ogliche FunktionswertFP(n)angenommen wird

Dann giltFP(n) ≤ FQ(FQ(. . .FQ(FQ(n−α)). . .)) +α, wobei die FunktionFQ(·)hier α-fach ineinander eingesetzt ist. Die Induktionsannahme gibt uns FQ(`)<A(q, `)

Dies wenden wir auf die ¨ausserste FunktionFQ an und erhalten FP(n) < A(q,FQ(. . .FQ(FQ(n−α)). . .)) +α

(78)

Beweis: Schritt f¨ urs LOOP-Konstrukt (1)

Induktionsschritt (LOOP-Konstrukt)

Es seiP von der Form “LOOPxi DOQ ENDLOOP”

Induktionsannahme liefert: ∃q∈N:FQ(`)<A(q, `) Dann gilt: FP(n) ≤ A(q+1,n).

Argument:

Wir betrachten jenen Wertα=α(n)f¨ur die Variablexi,

mit dem der gr¨osstm¨ogliche FunktionswertFP(n)angenommen wird Dann giltFP(n) ≤ FQ(FQ(. . .FQ(FQ(n−α)). . .)) +α,

wobei die FunktionFQ(·)hierα-fach ineinander eingesetzt ist.

Die Induktionsannahme gibt uns FQ(`)<A(q, `)

Dies wenden wir auf die ¨ausserste FunktionFQ an und erhalten FP(n) < A(q,FQ(. . .FQ(FQ(n−α)). . .)) +α

(79)

Beweis: Schritt f¨ urs LOOP-Konstrukt (1)

Induktionsschritt (LOOP-Konstrukt)

Es seiP von der Form “LOOPxi DOQ ENDLOOP”

Induktionsannahme liefert: ∃q∈N:FQ(`)<A(q, `) Dann gilt: FP(n) ≤ A(q+1,n).

Argument:

Wir betrachten jenen Wertα=α(n)f¨ur die Variablexi,

mit dem der gr¨osstm¨ogliche FunktionswertFP(n)angenommen wird Dann giltFP(n) ≤ FQ(FQ(. . .FQ(FQ(n−α)). . .)) +α,

wobei die FunktionFQ(·)hierα-fach ineinander eingesetzt ist.

Die Induktionsannahme gibt uns FQ(`)<A(q, `)

Dies wenden wir auf die ¨ausserste FunktionFQ an und erhalten FP(n) < A(q,FQ(. . .FQ(FQ(n−α)). . .)) +α

(80)

Beweis: Schritt f¨ urs LOOP-Konstrukt (1)

Induktionsschritt (LOOP-Konstrukt)

Es seiP von der Form “LOOPxi DOQ ENDLOOP”

Induktionsannahme liefert: ∃q∈N:FQ(`)<A(q, `) Dann gilt: FP(n) ≤ A(q+1,n).

Argument:

Wir betrachten jenen Wertα=α(n)f¨ur die Variablexi,

mit dem der gr¨osstm¨ogliche FunktionswertFP(n)angenommen wird Dann giltFP(n) ≤ FQ(FQ(. . .FQ(FQ(n−α)). . .)) +α,

wobei die FunktionFQ(·)hierα-fach ineinander eingesetzt ist.

Die Induktionsannahme gibt uns FQ(`)<A(q, `)

Dies wenden wir auf die ¨ausserste FunktionFQ an und erhalten FP(n) < A(q,FQ(. . .FQ(FQ(n−α)). . .)) +α

(81)

Beweis: Schritt f¨ urs LOOP-Konstrukt (2)

Und weiter geht’s:

Wiederholte Anwendung liefert dieα-zeilige Ungleichungskette FP(n)< A(q,FQ(,FQ(. . .FQ(FQ(n−α)). . .)) +α

< A(q,A(q,FQ(. . .FQ(FQ(n−α)). . .)) +α ...

< A(q,A(q,A(q, . . . ,A(q,n−α)). . .)) +α

Daraus ergibt sich FP(n) ≤ A(q,A(q,A(q, . . . ,A(q,n−α)). . .)) Im innersten Teil verwenden wir A(q,n−α)≤A(q+1,n−α−1) Ergo: FP(n)≤A(q,A(q,A(q, . . .A(q,A(q+1,n−α−1))). . .)) Jetzt arbeiten wir uns(α−1)-mal von innen nach aussen vor, und wenden in jedem Schritt die Ackermann Definition an.

Das ergibt FP(n)≤A(q+1,n−1)undFP(n)<A(q+1,n).

(82)

Beweis: Schritt f¨ urs LOOP-Konstrukt (2)

Und weiter geht’s:

Wiederholte Anwendung liefert dieα-zeilige Ungleichungskette FP(n)< A(q,FQ(,FQ(. . .FQ(FQ(n−α)). . .)) +α

< A(q,A(q,FQ(. . .FQ(FQ(n−α)). . .)) +α ...

< A(q,A(q,A(q, . . . ,A(q,n−α)). . .)) +α

Daraus ergibt sich FP(n) ≤ A(q,A(q,A(q, . . . ,A(q,n−α)). . .))

Im innersten Teil verwenden wir A(q,n−α)≤A(q+1,n−α−1) Ergo: FP(n)≤A(q,A(q,A(q, . . .A(q,A(q+1,n−α−1))). . .)) Jetzt arbeiten wir uns(α−1)-mal von innen nach aussen vor, und wenden in jedem Schritt die Ackermann Definition an.

Das ergibt FP(n)≤A(q+1,n−1)undFP(n)<A(q+1,n).

(83)

Beweis: Schritt f¨ urs LOOP-Konstrukt (2)

Und weiter geht’s:

Wiederholte Anwendung liefert dieα-zeilige Ungleichungskette FP(n)< A(q,FQ(,FQ(. . .FQ(FQ(n−α)). . .)) +α

< A(q,A(q,FQ(. . .FQ(FQ(n−α)). . .)) +α ...

< A(q,A(q,A(q, . . . ,A(q,n−α)). . .)) +α

Daraus ergibt sich FP(n) ≤ A(q,A(q,A(q, . . . ,A(q,n−α)). . .)) Im innersten Teil verwenden wir A(q,n−α)≤A(q+1,n−α−1) Ergo: FP(n)≤A(q,A(q,A(q, . . .A(q,A(q+1,n−α−1))). . .))

Jetzt arbeiten wir uns(α−1)-mal von innen nach aussen vor, und wenden in jedem Schritt die Ackermann Definition an.

Das ergibt FP(n)≤A(q+1,n−1)undFP(n)<A(q+1,n).

(84)

Beweis: Schritt f¨ urs LOOP-Konstrukt (2)

Und weiter geht’s:

Wiederholte Anwendung liefert dieα-zeilige Ungleichungskette FP(n)< A(q,FQ(,FQ(. . .FQ(FQ(n−α)). . .)) +α

< A(q,A(q,FQ(. . .FQ(FQ(n−α)). . .)) +α ...

< A(q,A(q,A(q, . . . ,A(q,n−α)). . .)) +α

Daraus ergibt sich FP(n) ≤ A(q,A(q,A(q, . . . ,A(q,n−α)). . .)) Im innersten Teil verwenden wir A(q,n−α)≤A(q+1,n−α−1) Ergo: FP(n)≤A(q,A(q,A(q, . . .A(q,A(q+1,n−α−1))). . .)) Jetzt arbeiten wir uns(α−1)-mal von innen nach aussen vor, und wenden in jedem Schritt die Ackermann Definition an.

Das ergibtFP(n)≤A(q+1,n−1)undFP(n)<A(q+1,n).

(85)

Die M¨ achtigkeit von LOOP

(86)

Die M¨ achtigkeit von LOOP (1)

Satz

Die Ackermann Funktion ist nicht LOOP-berechenbar.

Beweis:

Zwecks Widerspruchs nehmen wir an, dass die Ackermann Funktion LOOP-berechenbar ist. Dann gibt es auch ein LOOP-ProgrammP, das die Hilfsfunktion B(n) =A(n,n)berechnet.

Das Wachstumslemma gibt uns eine ZahlmP, sodass f¨ur allen∈Ngilt: FP(n)<A(mP,n).

Wird nun das LOOP-ProgrammP mit der Eingabe mP aufgerufen, so berechnet es den FunktionswertB(mP).

Das Wachstumslemma impliziertB(mP)≤FP(mP).

Zusammengefasst: B(mP)≤FP(mP)<A(mP,mP) =B(mP) Widerspruch! QED!

(87)

Die M¨ achtigkeit von LOOP (1)

Satz

Die Ackermann Funktion ist nicht LOOP-berechenbar.

Beweis:

Zwecks Widerspruchs nehmen wir an, dass die Ackermann Funktion LOOP-berechenbar ist. Dann gibt es auch ein LOOP-ProgrammP, das die Hilfsfunktion B(n) =A(n,n)berechnet.

Das Wachstumslemma gibt uns eine ZahlmP, sodass f¨ur allen∈Ngilt: FP(n)<A(mP,n).

Wird nun das LOOP-ProgrammP mit der Eingabe mP aufgerufen, so berechnet es den FunktionswertB(mP).

Das Wachstumslemma impliziertB(mP)≤FP(mP).

Zusammengefasst: B(mP)≤FP(mP)<A(mP,mP) =B(mP) Widerspruch! QED!

(88)

Die M¨ achtigkeit von LOOP (1)

Satz

Die Ackermann Funktion ist nicht LOOP-berechenbar.

Beweis:

Zwecks Widerspruchs nehmen wir an, dass die Ackermann Funktion LOOP-berechenbar ist. Dann gibt es auch ein LOOP-ProgrammP, das die Hilfsfunktion B(n) =A(n,n)berechnet.

Das Wachstumslemma gibt uns eine ZahlmP, sodass f¨ur allen∈Ngilt: FP(n)<A(mP,n).

Wird nun das LOOP-ProgrammP mit der Eingabe mP aufgerufen, so berechnet es den FunktionswertB(mP).

Das Wachstumslemma impliziertB(mP)≤FP(mP).

Zusammengefasst: B(mP)≤FP(mP)<A(mP,mP) =B(mP) Widerspruch! QED!

(89)

Die M¨ achtigkeit von LOOP (1)

Satz

Die Ackermann Funktion ist nicht LOOP-berechenbar.

Beweis:

Zwecks Widerspruchs nehmen wir an, dass die Ackermann Funktion LOOP-berechenbar ist. Dann gibt es auch ein LOOP-ProgrammP, das die Hilfsfunktion B(n) =A(n,n)berechnet.

Das Wachstumslemma gibt uns eine ZahlmP, sodass f¨ur allen∈Ngilt: FP(n)<A(mP,n).

Wird nun das LOOP-ProgrammP mit der Eingabe mP aufgerufen, so berechnet es den FunktionswertB(mP).

Das Wachstumslemma impliziertB(mP)≤FP(mP).

Zusammengefasst: B(mP)≤FP(mP)<A(mP,mP) =B(mP) Widerspruch! QED!

(90)

Die M¨ achtigkeit von LOOP (1)

Satz

Die Ackermann Funktion ist nicht LOOP-berechenbar.

Beweis:

Zwecks Widerspruchs nehmen wir an, dass die Ackermann Funktion LOOP-berechenbar ist. Dann gibt es auch ein LOOP-ProgrammP, das die Hilfsfunktion B(n) =A(n,n)berechnet.

Das Wachstumslemma gibt uns eine ZahlmP, sodass f¨ur allen∈Ngilt: FP(n)<A(mP,n).

Wird nun das LOOP-ProgrammP mit der Eingabe mP aufgerufen, so berechnet es den FunktionswertB(mP).

Das Wachstumslemma impliziertB(mP)≤FP(mP).

Zusammengefasst: B(mP)≤FP(mP)<A(mP,mP) =B(mP)

Widerspruch! QED!

(91)

Die M¨ achtigkeit von LOOP (1)

Satz

Die Ackermann Funktion ist nicht LOOP-berechenbar.

Beweis:

Zwecks Widerspruchs nehmen wir an, dass die Ackermann Funktion LOOP-berechenbar ist. Dann gibt es auch ein LOOP-ProgrammP, das die Hilfsfunktion B(n) =A(n,n)berechnet.

Das Wachstumslemma gibt uns eine ZahlmP, sodass f¨ur allen∈Ngilt: FP(n)<A(mP,n).

Wird nun das LOOP-ProgrammP mit der Eingabe mP aufgerufen, so berechnet es den FunktionswertB(mP).

Das Wachstumslemma impliziertB(mP)≤FP(mP).

Zusammengefasst: B(mP)≤FP(mP)<A(mP,mP) =B(mP) Widerspruch! QED!

(92)

Die M¨ achtigkeit von LOOP (2)

Da die Ackermann Funktion (durch eine TM) berechenbar ist, folgt:

Korollar

Die Menge der LOOP-berechenbaren Funktionen

bildet eineechte Teilmengeder berechenbaren Funktionen.

Ergo: Die Programmiersprache LOOP ist nicht Turing-m¨achtig

Satz (ohne Beweis)

Die Menge der LOOP-berechenbaren Funktionen

f¨allt mit der Menge derprimitiv rekursiven Funktionenzusammen.

(93)

Die M¨ achtigkeit von LOOP (2)

Da die Ackermann Funktion (durch eine TM) berechenbar ist, folgt:

Korollar

Die Menge der LOOP-berechenbaren Funktionen

bildet eineechte Teilmengeder berechenbaren Funktionen.

Ergo: Die Programmiersprache LOOP ist nicht Turing-m¨achtig

Satz (ohne Beweis)

Die Menge der LOOP-berechenbaren Funktionen

f¨allt mit der Menge derprimitiv rekursiven Funktionenzusammen.

(94)

Primitiv rekursive Funktionen (1)

Die primitiv rekursiven Funktionen bilden eine Unterfamilie der Funktionen Nk →Nmitk ≥0.

Die primitiv rekursiven Funktionen sind induktiv definiert, und k¨onnen im wesentlichen durch zwei Operationen aus den sogenannten Basisfunktionen zusammengebaut werden.

Definition (Basisfunktionen)

Die folgenden drei Funktionsmengen bilden die Basisfunktionen unter den primitiv rekursiven Funktionen:

Alle konstanten Funktionen sind primitiv rekursiv.

Alle Projektionen (Abbildungen auf eine der Komponenten) sind primitiv rekursiv.

Die Nachfolgerfunktions(n) =n+1ist primitiv rekursiv.

(95)

Primitiv rekursive Funktionen (1)

Die primitiv rekursiven Funktionen bilden eine Unterfamilie der Funktionen Nk →Nmitk ≥0.

Die primitiv rekursiven Funktionen sind induktiv definiert, und k¨onnen im wesentlichen durch zwei Operationen aus den sogenannten Basisfunktionen zusammengebaut werden.

Definition (Basisfunktionen)

Die folgenden drei Funktionsmengen bilden die Basisfunktionen unter den primitiv rekursiven Funktionen:

Alle konstanten Funktionen sind primitiv rekursiv.

Alle Projektionen (Abbildungen auf eine der Komponenten) sind primitiv rekursiv.

Die Nachfolgerfunktions(n) =n+1ist primitiv rekursiv.

(96)

Primitiv rekursive Funktionen (2)

Definition

Des weiteren sind die folgenden Funktionen primitiv rekursiv:

Die Komposition von primitiv rekursiven Funktionen ist primitiv rekursiv.

Jede Funktion, die durchprimitive Rekursionaus primitiv rekursiven Funktionen entsteht ist primitiv rekursiv.

Wenn die beiden Funktioneng:Nk →Nundh:Nk+2→Nprimitiv rekursiv sind, so ist auch die wie folgt definierte Funktion

f :Nk+1→Nprimitiv rekursiv:

f(0,x1, . . . ,xk) = g(x1, . . . ,xk)

f(n,x1, . . . ,xk) = h(n,f(n−1,x1, . . . ,xk), x1, . . . ,xk)

(97)

Zusammenfassung: Berechenbarkeit

(98)

Zusammenfassung / Berechenbarkeit (1)

Wir haben die folgendenTuring-m¨achtigenRechenmodelle und Programmiersprachen kennen gelernt:

Turingmaschine (TM) k-Band-TM

Registermaschine (RAM)

eingeschr¨ankte Registermaschine (Mini-RAM)

WHILE-Programme (und somit C, Java, Pascal, Postscript, etc.) LOOP-Programme sindnicht Turing-m¨achtig.

(99)

Zusammenfassung / Berechenbarkeit (2)

Church-Turing-These

Die Menge der TM-berechenbaren Funktionen stimmt mit der Menge der

“intuitiv berechenbaren” Funktionen ¨uberein.

In anderen Worten:

Ein Problem kann genau dann “algorithmisch gel¨ost werden”, wenn es eine TM f¨ur dieses Problem gibt.

An Stelle von “TM” k¨onnen wir auch jedes andere Turing-m¨achtige Rechenmodell in die obigen S¨atze einf¨ugen.

(100)

Zusammenfassung / Berechenbarkeit (3)

Berechenbarkeitslandschaft:

Rekursiv aufz¨ahlbare

Probleme

H

H D

Probleme mit rekursiv aufz¨ahlbarem

Komplement H H D Rekursive

Probleme

Unentscheidbare Probleme mit unentscheidbarem Komplement Htot

MPCP PCP

Dioph A(·,·)

primitiv rekursive Probleme

(101)

Zusammenfassung / Berechenbarkeit (4)

Wichtige nicht berechenbare Probleme:

Halteproblem, in verschiedenen Varianten

Satz von Rice:Aussagen ¨uber Eigenschaften von Funktionen, die durch eine gegebene TM berechnet werden, sind nicht entscheidbar Schlussfolgerung:Die automatische Verifikation von Programmen in einer TM-m¨achtigen Programmiersprachen ist unm¨oglich

Postsches Korrespondenzproblem Hilberts 10. Problem

(102)

Zusammenfassung / Berechenbarkeit (5)

Methoden zum Nachweis von Nicht-Berechenbarkeit:

Diagonalisierung Unterprogrammtechnik Satz von Rice

Reduktionen (spezielle Variante der Unterprogrammtechnik)

Referenzen

ÄHNLICHE DOKUMENTE

Eine Diophantische Gleichung mit irgend welchen Unbekannten und mit ganzen rationalen Zahlencoefficienten sei vorgelegt: man soll ein Verfahren angeben, nach welchem sich mittelst

Reduktionen (spezielle Variante der Unterprogrammtechnik) Satz von Rice: Aussagen ¨ uber Eigenschaften von Funktionen, die durch eine gegebene TM berechnet werden, sind

I Es gibt keinen Algorithmus, der entscheidet, ob ein gegebenes Programm in einen bestimmten Zustand l¨ auft.. ( Error: 0E : 016F :

Die in den Registern gespeicherten Zahlen repr¨ asentieren Zust¨ ande, Zeichen und Bandpositionen.. Zust¨ ande und Zeichen haben eine konstante

Tabellenkalkulationen (ohne Schleifen) sind nicht Turing-m¨ achtig Der Lambda Calculus von Alonzo Church ist ¨ aquivalent zur TM, und daher Turing-m¨ achtig. Die µ-rekursiven

Aktueller Zustand steht in der Variablen Zustand Das Symbol unterm Kopf erhalten wir durch den Befehl UntermKopf := BandAbKopf MOD 10.. Simulation von TM durch

I Das Symbol unterm Kopf erhalten wir durch den Befehl UntermKopf := BandAbKopf MOD 10. BuK/WS 2017 VL-11: LOOP und WHILE Programme

Wir betrachten eine einfache Programmiersprache namens LOOP, deren Programme aus den folgenden syntaktischen Komponenten aufgebaut sind:.. I Variablen: x 1 x 2