Berechenbarkeit

Klaus Becker

TU Kaiserslautern

Die Möglichkeiten von Software

Herausgeber einer Software-Zeitschrift:

„Geben Sie einem Computer die richtige Software, und er wird tun, was immer Sie wünschen. Die Maschine selbst mag Grenzen haben, doch für die Möglichkeiten von Software gibt es keine Grenzen.“
(zitiert nach D. Harel: Das Affenpuzzle und weitere bad news aus der Computerwelt)

Bild1

Teil 1




Berechenbarkeit als Problem

Grenzen von Software

Grundsatzfrage:

Gibt es Grenzen für die Möglichkeiten von Software?

Bild2

Der Kern von Software

Algorithmen - der Kern von Software:

Wo liegen die Grenzen algorithmisch gesteuerter Systeme?
Gibt es Grenzen des algorithmisch Machbaren?

Bild3

Die Suche nach Grenzen

Grundsatzfrage:

Gibt es Grenzen für die Möglichkeiten von Software?
Gibt es Grenzen für die Möglichkeiten von Algorithmen?

Möglichkeitsnachweis: Unmöglichkeitsnachweis:
Man entwickelt einen Algorithmus und implementiert die zugehörige Software. Man muss zeigen, dass es keinen Algorithmus gibt, der das gestellte Problem löst.
D. h.: Jeder mögliche Algorithmus löst nicht das gestellte Problem.

Vorgehensweise:

Um Aussagen über alle möglichen Algorithmen zu treffen, muss zunächst der Algorithmusbegriff präzisiert werden.

Was ist ein Algorithmus ?

Einfache Frage - viele Antworten:

Aho, Hopcroft, Ullman

Ein Algorithmus ist eine endliche Folge von Instruktionen, die alle eindeutig interpretierbar und mit endlichem Aufwand in endlicher Zeit ausführbar sind. Algorithmen enthalten Instruktionen zur Formulierung von (beliebig vielen) Wiederholungen anderer Instruktionen. Unabhängig von den Werten der Eingangsgrößen endet ein Algorithmus stets nach endlich vielen Instruktionsschritten. Ein Programm ist dann ein Algorithmus, wenn für alle möglichen Eingabewerte sichergestellt ist, dass keine Instruktion unendlich oft wiederholt wird.

Kronsjö

Ein Verfahren, beschrieben durch eine endliche Menge von eindeutig interpretierbaren Regeln, das eine endlich lange Folge von Operationen zur Lösung eines Problems oder einer speziellen Problemklasse beschreibt, wird Algorithmus genannt.

(http://www.swe.uni-linz.ac.at/teaching/lva/ss02/algo1_vorlesung/hinweise.html)

Was ist ein Algorithmus ?

Einfache Frage - viele Antworten:

Knuth

Ein Algorithmus muss nach endlich vielen Schritten enden. Jeder Schritt eines Algorithmus muss exakt beschrieben sein; die in ihm verlangten Aktionen müssen präzise formuliert und in jedem Falle eindeutig interpretierbar sein.

Ein Algorithmus hat keine, eine oder mehrere Eingangsgrößen, d.h. Größen, die von ihm benutzt und deren Werte vor Beginn seiner Ausführung festgelegt werden müssen.

Ein Algorithmus hat eine oder mehrere Ergebnisgrößen, d.h. Größen, deren Werte in Abhängigkeit von den Eingangsgrößen während der Ausführung des Algorithmus berechnet werden.

Ein Algorithmus muss so geartet sein, dass die in ihm verlangten Aktionen im Prinzip von einem Menschen in endlicher Zeit mit Papier und Bleistift ausgeführt werden können.

(http://www.swe.uni-linz.ac.at/teaching/lva/ss02/algo1_vorlesung/hinweise.html)

Was ist ein Algorithmus ?

Einfache Frage - viele Antworten:

Bauer, Goos

Ein Algorithmus ist eine präzise, d.h. in einer festgelegten Sprache abgefasste, endliche Beschreibung eines allgemeinen Verfahrens unter Verwendung ausführbarer elementarer (Verarbeitungs-) Schritte.

Rechenberg

Ein Algorithmus ist ein endliches schrittweises Verfahren zur Berechnung gesuchter aus gegebenen Größen, in dem jeder Schritt aus einer Anzahl ausführbarer eindeutiger Operationen und einer Angabe über den nächsten Schritt besteht.

(http://www.swe.uni-linz.ac.at/teaching/lva/ss02/algo1_vorlesung/hinweise.html)

Der intuitive Algorithmusbegriff

„Definition:“

Ein Algorithmus ist eine Folge von Handlungsanweisungen zur Lösung eines Problems, die folgende Anforderungen erfüllt:

(nach Gasper, Leiß, Spengler, Stimm: Technische und theoretische Informatik. bsv)

Unzulänglichkeit informeller Klärungen

„Definition:“

Ein Algorithmus ist eine Folge von Handlungsanweisungen zur Lösung eines Problems, die folgende Anforderungen erfüllt:

Was heißt das?

Die oben aufgeführte Begriffsklärung ist keine präzise Definition im mathematischen Sinne.

Ziel: Präzisierung

„Definition:“

Ein Algorithmus ist eine Folge von Handlungsanweisungen zur Lösung eines Problems, die folgende Anforderungen erfüllt:

Muss präzisiert werden

Ziel ist es, die informelle Begriffsklärung durch eine präzise Definition im mathematischen Sinne zu ersetzen.

Präzisierungsansätze

Grundschema eines algorithmisch gesteuerten Systems

Bild4

Präzisierungsansätze:

Maschinenorientierter Ansatz: Präzisierung des Prozessors

Zuordnungsorientierter Ansatz: Präzisierung der E/A-Zuordnungen

Anweisungsorientierter Ansatz: Präzisierung der zulässigen Anweisungen

Grundidee: Berechnungsmodelle

Präzisierung mit Berechnungsmodellen

Die Festlegung, was ein Algorithmus ist, bezieht sich auf ein streng definiertes Berechnungsmodell, das genau vorschreibt, was unter „ausführbar“ zu verstehen ist.

Grundlegende Schwierigkeit des Präzisierungsverfahrens

Wird mit Hilfe des Berechnungsmodells wirklich der intuitive Algorithmusbegriff adäquat erfasst?

Teil 2




Kara als Berechnungsmodell

Kara

Bild5

Kara ist ein Marienkäfer.
Kara lebt in einer Welt mit

Lit.:: Reichert / Nievergelt / Hartmann: Programmieren mit Kara, Springer-Verlag 2004.
Software: www.educeth.ch/karatojava

Kara

Kara hat Sensoren, mit denen er/sie die Umwelt wahrnimmt: Kara versteht einige Befehle, die er/sie folgsam ausführt:
Bild6 stehe ich vor einem Baumstumpf? Bild11 mache einen Schritt vorwärts!
Bild6 ist links von mir ein Baumstumpf? Bild11 drehe um 90° nach links!
Bild6 ist rechts von mir ein Baumstumpf? Bild11 drehe um 90° nach rechts!
Bild6 stehe ich vor einem Pilz? Bild11 lege ein Kleeblatt hin!
Bild6 stehe ich auf einem Kleeblatt? Bild11 nimm ein Kleeblatt auf!

Kara soll ein Problem lösen

Kara soll bis zum nächsten Baumstumpf, einmal um ihn herum und anschließend zurück zum Ausgangspunkt laufen.

AZ: Bild16
... Bild17
ZZ: Bild16

Kara-Algorithmus

Akt. Zustand: Bedingung: Aktionen: Neuer Zustand:
markieren   Bild14 hin
hin Bild6 nein Bild11 hin
hin Bild6 ja Bild12 Bild11 Bild11 Bild13 ... zurück
zurück Bild10 nein Bild11 zurück
zurück Bild10 ja Bild12 Bild12 stop

Bild18

Übung

Entwickeln Sie einen Kara-Algorithmus zur Lösung des Problems:

AZ: Kara sieht in Blickrichtung eine beliebig lange Baumstumpfreihe.

Bild19
ZZ: Kara umläuft die Baumstümpfe und bleibt stehen.

Bild20

Übung

Entwickeln Sie einen Kara-Algorithmus zur Lösung des Problems:

AZ: Kara sieht in Blickrichtung eine beliebig lange vertikale Baumstumpfreihe.

Bild21
ZZ: Kara umläuft die Baumstumpfreihe und bleibt in der Verlängerung seines Wegs stehen.

Bild22

Übung

Gibt es einen Kara-Algorithmus zur Lösung des Problems, bei dem Kara keine Blätter ablegen darf?

AZ: Bild21 ZZ: Bild22

Präzisierung des Algorithmusbegriffs

Von klaren Vorgaben zu präzisen Begriffsdefinitionen

Bild11 Bild12 Bild13 Bild14 Bild15
Sei A die Menge der Kara-Aktionen:
A = {move, turnLeft, turnRight, putLeaf, removeLeaf}
Sei A´ die Menge der eingeschränkten Kara-Aktionen:
A´ = {move, turnLeft, turnRight}
Bild6 Bild7 Bild8 Bild9 Bild10
Sei B die Menge der Kara-Bedingungen:
B = {treeFront, treeLeft, treeRight, mushroomFront, onLeaf, not treeFront, treeFront and (not onLeaf), ..., true}

Präzisierung des Algorithmusbegriffs

Akt. Zustand: Bedingung: Aktionen: Neuer Zustand:
markieren   Bild14 hin
hin Bild6 nein Bild11 hin
hin Bild6 ja Bild12 Bild11 Bild11 Bild13 ... zurück

Definition:
Ein Kara-Algorithmus ist eine Paar (Z, F) bestehend aus einer endlichen Menge Z von Zuständen, die einen ausgezeichneten Startzustand enthält, und einer Funktion F, die die Arbeitsweise von Kara wie folgt festlegt: F ordnet Zustands-Bedingungs-Kombinationen (z, b) mit z?Z und b?B eine Aktionen-Zustands-Kombination (a, z´) zu, wobei a eine endliche (evtl. leere) Folge von Aktionen aus A ist und z´?Z den Folgezustand darstellt.
Ein Read-Only-Kara-Algorithmus ist ein Kara-Algorithmus, bei dem nur Aktionen aus der eingeschränkten Menge A´vorkommen.

Zur Lösung des Baumumrundungsproblems

Von präzisen Begriffsdefinitionen zu nachweisbaren Aussagen

Satz:
Es gibt einen Kara-Algorithmus, der das „vertikale Baumumrundungsproblem“ löst.

(Möglichkeits-) Beweis:
Der Beweis erfolgt konstruktiv, indem man einen geeigneten Kara-Algorithmus angibt.
Grundidee: Kara legt beim Weg „nach oben“ neben jeden Baumstumpf ein Kleeblatt. Kara zählt auf diese Weise mit, an wie vielen Baumstümpfen er/sie vorbeiläuft. Kara transportiert anschließend jedes dieser abgelegten Kleeblätter auf die „andere Seite des Baumstumpfs“. Damit ist Kara in der Lage, die gewünschte Endposition zu bestimmen.

Zur Lösung des Baumumrundungsproblems

Von präzisen Begriffsdefinitionen zu nachweisbaren Aussagen

Satz:
Es gibt keinen Read-Only-Kara-Algorithmus, der das „vertikale Baumumrundungsproblem“ löst.

(Unmöglichkeits-) Beweis:
Der Beweis wird durch Widerspruch geführt: Man nimmt an, es gebe einen solchen Algorithmus und führt diese Annahme zum Widerspruch.
Da das „vertikale Baumumrundungsproblem“ für Read-Only-Kara-Algorithmen strukturell ähnlich zum „anbn-Spracherkennungs-problem“ für endliche Automaten ist, kann der Nachweis, dass es keinen Read-Only-Kara-Algorithmus gibt, der das „vertikale Baumumrundungsproblem“ löst, völlig analog zum „anbn-Spracherkennungsproblem“ geführt werden.

Teil 3




Kara-Berechenbarkeit

Kara lernt rechnen

Bild23

Im Folgenden betrachten wir eine spezielle Klasse von Problemen, die Kara lösen soll. Es handelt sich hier um „Berechnungs-probleme“, die Kara mit Hilfe von Kleeblättern ausführen soll.

Übung

Entwickeln Sie einen Kara-Algorithmus zur Addition:

AZ: Kara steht vor zwei beliebig langen, durch eine leere Zelle getrennte Blattreihen der Längen m und n (die auch 0 sein können).
Bild24
ZZ: Kara hat eine Blattreihen der Länge m+n erzeugt.
Bild25

Übung

Entwickeln Sie einen Kara-Algorithmus zur Subtraktion:

AZ: Kara steht vor zwei beliebig langen, durch eine leere Zelle getrennte Blattreihen der Längen m und n (die auch 0 sein können).
Bild26
ZZ: Falls m≥n ist, hat Kara eine Blattreihe der Länge m-n erzeugt.
Bild27

Übung

Entwickeln Sie einen Kara-Algorithmus zur Subtraktion:

AZ: Kara steht vor zwei beliebig langen, durch eine leere Zelle getrennte Blattreihen der Längen m und n (die auch 0 sein können).
Bild28
ZZ: Falls m<n ist, kommt Kara nicht mehr klar und dreht sich ständig im Kreis herum.
Bild29

Übung

Entwickeln Sie einen Kara-Algorithmus zum Verdoppeln:

AZ: Kara steht vor einer beliebig langen Blattreihe der Länge n (die auch 0 sein kann).
Bild30
ZZ: Kara hat eine Blattreihe der Länge 2n erzeugt.
Bild31

Übung

Entwickeln Sie einen Kara-Algorithmus zur Multiplikation:

AZ: Kara steht vor zwei beliebig langen, durch eine leere Zelle getrennte Blattreihen der Längen m und n (die auch 0 sein können).
Bild32
ZZ: Kara hat eine Blattreihe der Länge m·n erzeugt.
Bild33

Übung

Entwickeln Sie einen Kara-Algorithmus zur Multiplikation:

AZ: Kara steht vor zwei beliebig langen, durch eine leere Zelle getrennte Blattreihen der Längen m und n (die auch 0 sein können).
Bild34
ZZ: Kara hat eine Blattreihe der Länge m·n erzeugt, ohne die Zellenreihe, in der die Blätter liegen, zu verlassen.
Bild35

Berechnete Funktion

Vom informellen Begriff zur präzisen Begriffsdefinition

Verdoppeln:

AZ: Kara steht vor einer beliebig langen Blattreihe der Länge n (die auch 0 sein kann).
Bild36
ZZ: Kara hat eine Blattreihe der Länge 2n erzeugt.
Bild37

Kara berechnet die Verdopplungsfunktion f: N → N mit f(n) = 2n.

Berechnete Funktion

Subtraktion:

AZ: Kara steht vor zwei beliebig langen, durch eine leere Zelle getrennte Blattreihen der Längen m und n (die auch 0 sein können).
Bild38
ZZ: Falls m<n ist, kommt Kara nicht mehr klar und dreht sich ständig im Kreis herum.
Bild39

Kara berechnet die Subtraktionsfunktion f: N x N → N mit:

f(m,n) = { m-n falls m ≥ n
undefiniert falls m < n

Präzisierung von Berechenbarkeit

Definition:
Eine Funktion f: N → N heißt Kara-berechenbar, gdw gilt:
Es gibt einen Kara-Algorithmus mit der folgenden Eigenschaft:

AZ: Kara steht vor einer Blattreihe der Länge n.
Bild40
ZZ: Fall 1: f(n) ist definiert:
Kara hat eine Blattreihe der Länge f(n) erzeugt und hält.
Bild41
Fall 2: f(n) ist undefiniert:
Kara hält nicht.
Bild42

Analog für f: N x N x ... x N → N

Berechenbarkeitsaussagen

Satz:
Die folgenden Funktionen sind Kara-berechnenbar:

  • f(n) = 2n
  • f(m, n) = m + n
  • f(m, n) = IF(m≥n, m-n, ⊥)
  • f(m, n) = m·n

Neue Fragen

Welche Funktionen sind Kara-berechnenbar, welche evtl. nicht?

Teil 4




Turingmaschinen

Alan Turing

Bild43

Turings Idee

Vom Rechnen zu den „Computing maschines“

„Computing is normally done by writing certain symbols on paper. We may suppose this paper is divided into squares like a child's arithmetic book. In elementary arithmetic the two-dimensional character of the paper is sometimes used.

Bild44

(Alan Turing: On Computable Numbers, with an Application to the Entscheidungsproblem. Proceedings of the London Mathematical Society 1936)

Turings Idee

Vom Rechnen zu den „Computing maschines“

„Computing is normally done by writing certain symbols on paper. We may suppose this paper is divided into squares like a child's arithmetic book. In elementary arithmetic the two-dimensional character of the paper is sometimes used. But such a use is always avoidable, and I think that it will be agreed that the two-dimensional character of paper is no essential of computation. I assume then that the computation is carried out on one-dimensional paper, i.e. on a tape divided into squares. ...“

Bild45

(Alan Turing: On Computable Numbers, with an Application to the Entscheidungsproblem. Proceedings of the London Mathematical Society 1936)

Turings Idee

Vom Rechnen zu den „Computing maschines“

„The behaviour of the computer at any moment is determined by the symbols which he is observing and his “state of mind” at that moment. ...“
„Let us imagine the operations performed by the computer to be split up into “simple operations” which are so elementary that it is not easy to imagine them further divided. ...“

Bild46

(Alan Turing: On Computable Numbers, with an Application to the Entscheidungsproblem. Proceedings of the London Mathematical Society 1936)

Turingmaschine

Bild47

Turingmaschine

Zustandsübergang:

Bild48

Turingmaschinenaktionen:

R   ein Feld nach rechts
L   ein Feld nach links
S   stopp

Beispiel

Berechnungsproblem: Addition von „Strichzahlen“

Bild49

Turingmaschine (dargestellt mit einem Zustandsgraphen):

Bild50

Beispiel

Turingmaschine (dargestellt mit einem Zustandsgraphen):

Bild50

Turingmaschine (dargestellt mit einer Zustandstafel):

alter Zustand   gelesenes Zeichen   geschrieb. Zeichen   Kopfbewegung   neuer Zustand
Z0   I   I   R   Z0
Z0   ' '   I   R   Z1
Z1   I   I   R   Z1
Z1   ' '   ' '   L   Z2
...                

Beispiel

Definition:
Eine Turingmaschine ist ein Tupel T = (X, B, b, Z, z0, δ) bestehend aus

  • einer endlichen, nichtleeren Menge X von Eingabezeichen,
  • einer Menge B mit X ⊇ B von Bandzeichen,
  • einem speziellen Bandzeichen b ∈ B \ X („Blank“),
  • einer endlichen, nichtleeren Menge Z von Zuständen,
  • einem Anfangszustand z0∈Z,
  • einer Überführungsfunktion δ: Z x B → B x {L, R, S} x Z
alter Zustand   gelesenes Zeichen   geschrieb. Zeichen   Kopfbewegung   neuer Zustand
Z0   I   I   R   Z0
Z0   ' '   I   R   Z1
Z1   I   I   R   Z1
Z1   ' '   ' '   L   Z2
...                

Übung

Berechnungsproblem: Verdopplung von „Strichzahlen“

Entwickeln und testen Sie eine Turingmaschine zur Verdopplung von Strichzahlen. Beschreiben Sie die Turingmaschine mit einem Zustandsgraph und einer Zustandstabelle. Zum Testen können Sie den MPG-Turing-Simulator benutzen.

Bild51

Präzisierung von Berechenbarkeit

Definition:
Eine Funktion f: N → N heißt Turingmaschinen-berechenbar, gdw gilt: Es gibt eine Turingmaschine T mit der folgenden Eigenschaft:

AZ: Auf dem Band befindet sich n dargestellt als Strichzahl.
Bild52
ZZ: Fall 1: f(n) ist definiert:
T hält und hat f(n) dargestellt als Strichzahl erzeugt.
Bild53
Fall 2: f(n) ist undefiniert:
T hält nicht.

Analog für f: N x N x ... x N → N

Variation der Turingmaschine

Berechnungsproblem: Verdopplung von „Strichzahlen“

Bild54

Variation der Turingmaschine

Berechnungsproblem: Verdopplung von „Strichzahlen“

Bild55

Kara als Variation der Turingmaschine

Bild56

Übung

Lösen Sie das Verdopplungsproblem (oder das Multiplikationsproblem) mit Hilfe einer 2-Band-Turingmaschine und mit Hilfe einer zweidimensionalen Turingmaschine.

Äquivalenz von Turingmaschinenmodellen

Problem

Was leisten Mehr-Band-Turingmaschinen bzw. zweidimensionale Turingmaschinen mehr als Ein-Band-Turingmaschinen?

Satz:
Eine Funktion f: N x N x ... x N → N ist mit einer Ein-Band-Turingmaschine berechenbar

gdw

sie mit einer Zwei-Band-Turingmaschine berechenbar ist

gdw

sie mit einer Mehr-Band-Turingmaschine berechenbar ist.

Beweisidee

Simulation der Aktionen einer Zwei-Band-TM auf einem Band

Bild57

Äquivalenz der Turingmaschinenmodelle

Problem

Was leisten Mehr-Band-Turingmaschinen bzw. zweidimensionale Turingmaschinen mehr als Ein-Band-Turingmaschinen?

Satz:
Eine Funktion f: N x N x ... x N → N ist mit einer eindimensionalen (Ein-Band-) Turingmaschine berechenbar

gdw

sie mit einer zweidimensionalen Turingmaschine berechenbar ist.

Teil 5




Universelle Turingmaschine

Universelle Berechnungsmodelle

Computer sind programmierbar!

Bild58

Ein universelles Berechnungsmodell sollte in der Lage sein, nicht nur Eingabedaten in einer ganz bestimmten Weise zu verarbeiten, sondern Eingabedaten nach einem beliebigen, ebenfalls einzugebenden Verarbeitungsprogramm zu verarbeiten.

Universelle Berechnungsmodelle

Universelle Turingmaschine als Turingmaschinen-Interpreter

Bild59

Eine universelle Turingmaschine besitzt die Fähigkeit, beliebige andere Turingmaschinen zu simulieren. Als Eingabe erhält sie die Beschreibung der zu simulierenden Turingmaschine und der Daten auf dem Eingabeband für diese Turingmaschine.

Universelle Berechnungsmodelle

Beispiel: Invertieren einer 01-Zeichenkette

Bild60

Eine universelle Turingmaschine besitzt die Fähigkeit, beliebige andere Turingmaschinen zu simulieren. Als Eingabe erhält sie die Beschreibung der zu simulierenden Turingmaschine und der Daten auf dem Eingabeband für diese Turingmaschine.

Universelle Berechnungsmodelle

Simulation von Ein-Band-Turingmaschinen mit einer univers. TM

Bild61

Vgl.: Turingkara - Aufgaben: Die universelle Turingmaschine

Universelle Berechnungsmodelle

Simulation von Ein-Band-Turingmaschinen mit einer univers. TM.

Kodierung: alter Zustand als Strichzahl+1; Leerzeichen; altes Zeichen; neues Zeichen; Bewegung; neuer Zustand als Strichzahl+1

Bild62

Vgl.: U. Mayr: Theoretische Informatik am PC, S. 18 ff. Programm: Bsp-206.tm

Übung

Testen Sie die universelle Turingmaschine der Turing-Kara-Umgebung bzw. des MPG-Simulators. Versuchen Sie insbesondere zu verstehen, wie diese universelle Turingmaschine arbeitet. Sie können auch die jeweils vorgegebene Turingmaschine und Bandbelegung durch eine andere ersetzen.

Universelle Turingmaschine

Satz:
Es gibt universelle Turingmaschinen.

Bemerkungen zum Beweis:
Die Existenz einer universellen Turingmaschine zeigt man, indem man eine TM konstruiert, die sich wie ein Turingmaschinen-Interpreter verhält, d. h. diese (zweidimensionale oder Mehr-Band-) Turingmaschine simuliert das Verhalten einer beliebig vorgegebenen Ein-Band-Turingmaschine bei einer beliebig vorgegebenen Bandbelegung. Die vorgegebene Turingmaschine und die vorgegebene Bandbelegung müssen dabei geeignet kodiert werden.

Teil 6




Registermaschinen

Präzisierung des Algorithmusbegriffs

Grundschema eines algorithmisch gesteuerten Systems

Bild4

Präzisierungsansätze:

Maschinenorientierte Ansätze:

- Kara („mehr als ein Spielzeug“)

- Turingmaschine („abstraktes Rechnermodell“)

- Registermaschine („an realen Rechnern orientiertes Modell“)

Berechnungsmodell „Registermaschine“

An realen Rechnern orientiertes Berechnungsmodell

Bild63

Registermaschinenbefehle

An realen Rechnern orientiertes Berechnungsmodell

> x INC i Erhöhe Register i um 1. Gehe zu Zeile x+1.
> x DEC i Erniedrige Register i um 1. Gehe zu Zeile x+1.
> x JMP i Gehe zu Zeile i.
> x TST i Wenn Register i ungleich 0 ist, dann gehe zu Zeile x+1, sonst zu Zeile x+2.
> x HLT Beende die Bearbeitung.

Registermaschine in Aktion

Bild64

Verhaltensbeschreibung

Bild65

Die Registermaschine berechnet die Verdopplungsfunktion auf natürlichen Zahlen, d. h.:
f: N → N mit f(n) = 2n

Präzisierung von Berechenbarkeit

Definition:
Eine Funktion f: N → N heißt Registermaschinen-berechenbar, gdw gilt: Es gibt eine Registermaschine mit der folgenden Eigenschaft

AZ: Im Registern R1 befindet sich der Ausgangswert.
Bild66
ZZ: Fall 1: f(n) ist definiert:
Die RM hält und in R0 befindet sich der Ergebniswert.
Bild67
Fall 2: f(n) ist undefiniert:
Die RM hält nicht.

Analog für f: N x N x ... x N → N

Äquivalenzsatz

Satz:
Eine Funktion f: N x N x ... x N → N ist Turingmaschinenberechenbar gdw sie Registermaschinenberechenbar ist.

Beweis:
Der Beweis wird konstruktiv geführt. Man konstruiert mit Hilfe einer Turingmaschine einen Registermaschinen-Interpreter und umgekehrt mit Hilfe einer Registermaschine einen Turingmaschinen-Interpreter.

Teil 7




LOOP- und WHILE-Programme

Präzisierung des Algorithmusbegriffs

Grundschema eines algorithmisch gesteuerten Systems

Bild4

Präzisierungsansätze:

Anweisungsorientierte Ansätze:

- Die Programmiersprache „LOOP“

- Die Programmiersprache „WHILE“

- Die Programmiersprachen „Pascal“, „Delphi“, „Java“, ...

LOOP-Programme

Bestandteile von LOOP-Programmen

Variablen: x0 x 1 x2 ...
Konstanten: 0 1 2 ...
Trennsymbole: ; :=
Operatoren: + -
Schlüsselwörter: LOOP DO END

Aufbau eines LOOP-Programms

Jede Wertzuweisung der Form xi := c oder xi := xj oder xi := xj + c ist ein LOOP-Programm.

Falls P1 und P2 LOOP-Programme sind, dann ist auch die Sequenz P1; P2 ein LOOP-Programm.

Falls P ein LOOP-Programm ist, dann ist auch LOOP xi DO P END ein LOOP-Programm.

LOOP-Programme

Beispiel eines LOOP-Programms

x0 := x1;

LOOP x2 DO x0 := x0 + 1 END

Ausführung der LOOP-Anweisung

Eine LOOP-Anweisung der Form LOOP xi DO P END wird wie folgt ausgeführt: Die LOOP-Anweisung P wird sooft ausgeführt, wie der Wert der Variablen xi zu Beginn beträgt.

Bedeutung eines LOOP-Programms

{x0: [...]; x1: [5]; x2: [3]; x3: [...]; ... } Das Programm berechnet die Additionsfunktion auf natürlichen Zahlen: f(m, n) = m + n
x0 := x1;
LOOP x2 DO x0 := x0 + 1 END
{x0: [8]; x1: [5]; x2: [3]; x3: [...]; ... }

WHILE-Programme

Bestandteile von WHILE-Programmen

Variablen: x0 x 1 x2 ...
Konstanten: 0 1 2 ...
Trennsymbole: ; :=
Operatoren: + -
Schlüsselwörter: WHILE DO END

Aufbau eines WHILE-Programms

Jede Wertzuweisung der Form xi := c oder xi := xj oder xi := xj + c ist ein WHILE-Programm.

Falls P1 und P2 WHILE-Programme sind, dann ist auch die Sequenz P1; P2 ein WHILE-Programm.

Falls P ein WHILE-Programm ist, dann ist auch WHILE xi ≠ 0 DO P END ein WHILE-Programm.

WHILE-Programme

Beispiel eines WHILE-Programms

x0 := x1;

WHILE x2 ≠ 0 DO x0 := x0 + 1; x2 := x2 - 1 END

Ausführung der WHILE-Anweisung

Eine WHILE-Anweisung der Form WHILE xi ≠ 0 DO P END wird wie folgt ausgeführt: Das WHILE-Programm P wird solange ausgeführt, wie der Wert der Variablen xi ungleich Null ist.

Bedeutung eines WHILE-Programms

{x0: [0]; x1: [5]; x2: [3]; x3: [0]; ... } Das Programm berechnet die Additionsfunktion auf natürlichen Zahlen: f(m, n) = m + n
x0 := x1;
WHILE x2 ≠ 0 DO x0 := x0 + 1; x2 := x2 + 1 END
{x0: [8]; x1: [5]; x2: [0]; x3: [0]; ... }

Präzisierung von Berechenbarkeit

Definition:
Eine Funktion f: N → N heißt LOOP-/WHILE-berechenbar, gdw gilt: Es gibt ein LOOP-/WHILE-Programm mit der folgenden Eigenschaft

AZ: Die Variable x1 enthält den Ausgangswert:
{x0: [0]; x1: [0]; x2: [0]; x3: [0]; ... }
ZZ: Fall 1: f(n) ist definiert:
Die Ausführung des Programms endet und x0 enthält den Ergebniswert.
{x0: [f(n)]; x1: [...]; x2: [...]; x3: [...]; ... }
Fall 2: f(n) ist undefiniert:
Die Ausführung des Programms endet nicht.

Analog für f: N x N x ... x N → N

Übung

Aufgabe 1
Entwickeln Sie ein LOOP-Programm / WHILE-Programm zur Berechnung der Verdopplungsfunktion / Multiplikationsfunktion.

Aufgabe 2
Welche Funktion wird durch das folgende WHILE-Programm berechnet?
x0 := x1;
WHILE x2 ≠ 0 DO x0 := x0 + 1 END

Aufgabe 3
Gibt es Funktionen, die mit keinem LOOP-Programm berechnet werden können?

Unterschied LOOP-WHILE

Unterschied: LOOP-berechenbar - WHILE-berechenbar

Die Ausführung jedes LOOP-Programms endet immer. Ein WHILE-Programm kann dagegen eine Endlosschleife enthalten.
x0 := x1;
WHILE x2 ≠ 0 DO x0 := x0 + 1 END
Das gezeigte WHILE-Programm berechnet die Funktion f: N → N mit f(m, n) = IF(n=0, m, ⊥).

Satz:
Es gibt Funktionen f: N x N x ... x N → N, die WHILE-berechenbar, aber nicht LOOP-berechenbar sind.

Äquivalenzsatz

Satz:
Eine Funktion f: N x N x ... x N → N ist WHILE-berechenbar gdw sie Registermaschinen-berechenbar ist.

Beweis:
Der Beweis wird konstruktiv geführt. Man konstruiert zu jeder Registermaschine ein entsprechendes WHILE-Programm und umgekehrt zu jedem WHILE-Programm eine entsprechende Registermaschine.

Teil 8




Rekursive Funktionen

Rekursive Funktionen

Grundschema eines algorithmisch gesteuerten Systems

Bild4

Grundidee:

Man beschreibt die berechenbaren E/A-Zuordnungen wie folgt:
Einige einfache Grundfunktionen werden als „berechenbar“ erklärt. Des weiteren werden einige einfache Konstruktionsprinzipien angegeben, die beschreiben, wie man aus „berechenbaren Funktionen“ weitere „berechenbare Funktionen“ erhält. Die zentrale Konstruktionsoperation ist die dabei die Rekursion.

Rekursives Berechnungsschema

Beispiel: Addition natürlicher Zahlen

add(x,0) = x
add(x,s(y))= s(add(x,y))

Bemerkungen:

Die Nachfolgerfunktion s: N → N, die jeder natürlichen Zahl ihren direkten Nachfolger zuordnet, wird als gegebene berechenbare Funktion betrachtet.
Die Funktion add: N x N → N, die je zwei natürlichen Zahlen ihre Summe zuordnen soll, wird rekursiv festgelegt:
- Zunächst wird der Rekursionsanfang „addiere zur Zahl x die Zahl 0“ festgelegt.
- Anschließend wird der Fall „addiere zur Zahl x den Nachfolger s(y) einer Zahl y“ auf den Fall „addiere zu x die Zahl y“ rekursiv reduziert.
Bei der Festlegung werden hier die Konstruktionsoperationen „Rekursion“ und „Funktionskomposion“ und die Grundfunktion „s“ benutzt.

Rekursives Berechnungsschema

Beispiel: Addition natürlicher Zahlen

add(x,0) = x
add(x,s(y))= s(add(x,y))

Berechnung rekursiv festgelegter Funktionen

add(3,2) >add(3,2)
= s(add(3,1)) >add(3,1)
= s(s(add(3,0))) >add(3,0)
= s(s(3)) <add(3,0)=3
= s(4) <add(3,1)=4
= 5 <add(3,2)=5

Übung

Entwickeln Sie rekursive Berechnungsschemata für die folgenden Funktionen. Benutzen Sie nur die vorgegebene Nachfolgerfunktion s und bereits definierte Funktionen (wie add).

mult(x, y) Beschreibt die übliche Multiplikation natürlicher Zahlen
fakt(x) Beschreibt die Fakultätsfunktion:
f(0) = 1, f(1) = 1, f(2) = 2*1, f(3) = 3*2*1, ...
exp(x, y) Beschreibt die Potenzbildung für natürliche Zahlen, d. h.:
exp(2, 3) = 23

Übung

Untersuchen Sie die folgenden rekursiven Berechnungsschemata und beschreiben Sie die jeweils berechneten Funktionen.

test(0)=1
test(s(x))=0
pred(0)=0
pred(s(x))=x
subtr(x,0)=x
subtr(x,s(y))=pred(subtr(x,y))
absdiff(x,y)=add(subtr(x,y),subtr(y,x))
equal(x,y)=test(absdiff(x,y))

Übung

Welche Berechnungsschemata sind korrekt, sinnvoll?

subtr2(x, 0) = x
subtr2(0, y) = y
subtr2(s(x), s(y)) = subtr2(x, y)
subtr3(x, 0) = x
subtr3(0, y) = y
subtr3(x, y) = subtr3(s(x), s(y))
add2(x, 0) = x
add2(x,y)= add(s(x),pred(y)))

Primitive Rekursion

Rekursive Problemreduktionen:

add(x,s(y))= s(add(x,y))
add2(x,y)= add2(s(x),pred(y)))
subtr(x,s(y))=pred(subtr(x,y))
subtr2(s(x), s(y)) = subtr2(x, y)
subtr3(x, y) = subtr3(s(x), s(y))

Primitives Reduktionsschema:

add(x,s(y))= s(add(x,y))
f(x1,...,xn ,s(y)) = h(x1,...,xn ,y,f(x1,...,xn,y))

In einem Schritt wird nur ein Argument um 1 reduziert.

Primitive Rekursion

Primitives Reduktionsschema:

add(x,0) = x
add(x,s(y))= s(add(x,y))

Formalisierung

f(x1,...,xn ,0) = g(x1,...,xn)
f(x1,...,xn ,s(y)) = h(x1,...,xn ,y,f(x1,...,xn,y))

Rekursionsanfang: Die Funktion f kommt nicht auf der rechten Seite vor.
Rekursionsschritt: Die Funktion f kommt auf der rechten Seite vor, aber nur ein Argument wird um 1 reduziert.

Primitiv rekursive Funktionen

Definition:
Eine Funktion f: N x ... x N → N heißt primitiv rekursiv, gdw gilt: Die Funktion f lässt sich mit Hilfe der Nachfolgerfunktion s als Grundfunktion sowie Funktionskomposition und primitiver Rekursion als Konstruktionsoperationen berechnen.

Satz:
Die folgenden Funktionen sind primitiv rekursiv:

  • f(m, n) = m + n
  • f(m, n) = IF(m≥n, m-n, 0)
  • f(m, n) = m·n
  • ...

Übung

Testen Sie das folgende rekursive Berechnungsschemata zur sogenannten Ackermann-Funktion. Was beobachtet man, wenn die Parameter (insbesondere der zweite) nicht sehr klein gewählt werden?

Ack(0,y)=s(y)
Ack(s(x),0)=Ack(x,1)
Ack(s(x),s(y))=Ack(x,Ack(s(x),y))

Ackermannfunktion

Rekursive Definition:

Ack(0,y)=s(y)
Ack(s(x),0)=Ack(x,1)
Ack(s(x),s(y))=Ack(x,Ack(s(x),y))

Beachte:
Es handelt sich hier nicht um ein primitiv rekursives Rekursionsschema.

Satz:
Die Ackermann-Funktion ist nicht primitiv rekursiv.

Man muss zeigen, dass die Ackermannfunktion sich nicht mit Hilfe eines primitiv rekursiven Rekursionsschemas darstellen lässt. Zum Beweis zeigt man, dass die Ackermann-Funktion schneller wächst als jede primitiv rekursive Funktion.

Übung

Wir betrachten die folgende informell definierte Funktion. Berechnen Sie f(5, 2) und f(2, 5). Beschreiben Sie das Verhalten der Funktion f.

f(x, y) = „das kleinste z mit y+z=x“

Partiell rekursive Funktionen

Definition:
Eine Funktion f: N x ... x N → N heißt partiell rekursiv, gdw gilt:
Die Funktion f lässt sich mit Hilfe der Nachfolgerfunktion s als Grundfunktion sowie Funktionskomposition, primitiver Rekursion und dem „das kleinste“-Operator als Konstruktionsoperationen berechnen.

Satz:
Die Ackermann-Funktion ist partiell rekursiv.

Beweis: siehe Fachliteratur

Äquivalenzsatz

Satz:
Eine Funktion f: N x N x ... x N → N ist primitiv rekursiv gdw sie LOOP-berechenbar ist.
Eine Funktion f: N x N x ... x N → N ist partiell rekursiv gdw sie WHILE-berechenbar ist.

Beweis: siehe Fachliteratur

Teil 9




Church-Turing-These

Berechnungsmodelle

Grundschema eines algorithmisch gesteuerten Systems

Bild4

Präzisierungsansätze:

Maschinenorientierter Ansatz: Turingmaschine, Registermaschine

Zuordnungsorientierter Ansatz: partiell rekursive Funktion

Anweisungsorientierter Ansatz: WHILE, Pascal, Delphi, C, Java, ...

Äquivalenzsatz

Satz:
Gegeben ist eine Funktion f: N x N x ... x N → N. Die folgenden Aussagen sind äquivalent:
- f ist Turingmaschinen-berechenbar.
- f ist Registermaschinen-berechenbar.
- f ist WHILE-berechenbar,
- f ist partiell rekursiv.
- f ist Pascal-berechenbar.
- ...

Bem.:
Alle Ansätze zur Präzisierung führen auf dieselbe Klasse berechenbarer Funktionen.

Church-Turing-These

These
Die Klasse der im intuitiven Sinn berechenbaren Funktion ist genau die Klasse der Turingmaschinen-berechenbaren Funktionen bzw. die Klasse der partiell rekursiven Funktionen bzw. die Klasse der WHILE-berechenbaren Funktionen bzw. ...

Literaturhinweise

Gasper, Leiß, Spengler, Stimm: Technische und theoretische Informatik. Bayerischer Schulbuch-Verlag 1992.

U. Mayr: Theoretische Informatik am PC. SIL-Studienmaterial Band 142, Speyer 1994.

Reichert, Nievergelt, Hartmann: Programmieren mit Kara. Springer-Verlag 2004.

D. Harel: Das Affenpuzzle und weitere bad news aus der Computerwelt. Springer-Verlag 2002.

U. Schöning: Theoretische Informatik - kurzgefasst. Spektrum Akademischer Verlag 2001.