Grundlagen der Informatik

Werbung
Grundlagen der Informatik
Kapitel 19
Harald Krottmaier
Sven Havemann
Agenda
• Begriffe
• Turingmaschine
– Beispiele
• Berechenbarkeit
– Hilfsmittel
– Beispiele
WS2007
2
Motivation
• Sind Computer „allmächtig“?
• Präziser: Ist alles von einem
Computer berechenbar?
WS2007
3
1937…
• Alan Turing
– Engl. Mathematiker, Gigant!
• Berechnung von Funktionen:
• Partielle Funktion: Nur eine
Teilmenge aller möglichen Eingaben
wird akzeptiert:
WS2007
4
Berechenbare Funktion
• “Eine Funktion heißt berechenbar,
wenn ein Algorithmus gefunden
werden kann, der die Funktion
berechnet.”
– Eine Funktion ist eine Abbildung
– Ein Algorithmus ist eine endliche
Berechnungsvorschrift
WS2007
5
Bsp. Berechenbare Funktion
• f(n) = 2n
• g(n) = (4n) * 0.5
• f und g sind gleiche Funktionen,
aber mit unterschiedlichen
Berechnungsvorschriften
• h(n)=100/(n-1) ist partielle
Funktion, undefiniert für n=1
WS2007
6
Eine nicht berechenbare
Funktion
• Sei f(i,j) eine Funktion, die alle
möglichen Folgen natürlicher Zahlen
enthält, also f(i,j)  { 0,..,9 }
– Eigentlich Liste von Ziffernfolgen!
• f(i): i-te Folge, entspricht den
nichtabbrechenden Dezimalzahlen
zwischen 0.0 und unter 1.0
–0 . 9 1 3 9 1 3 0 1 3 2 9 7 2 3 2 3 4 …
WS2007
7
Eine nicht berechenbare
Funktion
• Konstruiere nun eine neue Funktion
die sich von jeder Funktion in der
Liste unterscheidet:
– g(j) sei 0 wenn f(j,j)  0
– g(j) sei 1 wenn f(j,j) = 0
• g unterscheidet sich von allen
Funktionen in der Liste!
• Also enthält f nicht alle Folgen!
WS2007
8
Nicht berechenbare
Funktionen
• Diagonalverfahren nach Cantor (1873)
• Georg Cantor: Begründer der
Mengenlehre
– Gigant!
WS2007
9
Bsp.: Diagonalverfahren
WS2007
10
Nicht durch Algorithmus
berechenbare Funktionen
• Potenzmenge P(IN)
– Das ist die Menge aller möglichen
Teilmengen von IN
– Es gibt mehr Teilmengen als es
Elemente von IN gibt
• P(IN) ist überabzählbar
• Die Menge aller Funktionen
f: IN  IN ist auch überabzählbar
WS2007
11
Wieviele Algorithmen gibt es?
• Ein Algorithmus besteht aus einem
endlichen Wort aus ∑*
• Es gibt nur abzählbar viele Algorithmen!
– Wirklich? Wie zählt man sie ab??
• Es gibt daher auch nur abzählbar viele
berechenbare Funktionen!
• Es gibt also sehr viele Funktionen, die
nicht durch einen Algorithmus berechnet
werden können!
WS2007
12
Die Church'sche These
• "Die Klasse der Turing-berechenbaren
Funktionen ist genau die Klasse der
intuitiv berechenbaren Funktionen."
• Die Church´sche These ist nicht
beweisbar
– Problem: "intuitiv berechenbar.."
• Satz: "Die Menge der berechenbaren
Funktionen ist die Menge aller
Funktionen, die sich mit einer
Turingmaschine berechnen lassen."
WS2007
13
Berechenbarkeitskonzepte
WS2007
14
Die Turingmaschine
• Alan Turing: allgemeines Konzept einer
„rechnenden Maschine"
–
–
–
–
WS2007
unbegrenztes Arbeitsband, in Felder unterteilt
Lese-/Schreib-Kopf an aktueller Position
Maschine selbst hat endlich viele Zustände
Maschine kann Zeichen in Arbeitsfeld lesen
und abhängig vom aktuellen Zustand
• Neues Zeichen in Arbeitsfeld schreiben
• Nach rechts oder links gehen und dann
• In einen neuen Zustand übergehen
15
Die Turingmaschine formal
7-Tupel:
WS2007
16
Wichtiger Satz in der
Informatik:
• Jedes Problem, das überhaupt
maschinell lösbar ist, kann auch von
einer Turingmaschine gelöst werden
• Problem nur im Einzelfall: Finde die
richtige Überführungsfunktion….
– (schreibe das richtige C-Programm)
WS2007
17
Bsp Turingmaschine:
Paritätsprüfung
• Ungerade Anzahl von Strichen (I, III,
IIIII, ...) akzeptieren, sonst nicht!
– Leere Bandfelder enthalten ein #
• Zustandsgraph:
WS2007
18
Tätigkeit der Turingmaschine:
• Liste von 5-Tupeln:
– Aktueller Zustand
– Eingabezeichen
– Ausgabezeichen
– Kopfbewegung
– Folgezustand
aus Z
aus Σ  Γ
aus Γ
aus {L,N,R}
aus Z
• Praktischerweise als Tabelle
angeben, „Turingtabelle“
WS2007
19
Für Paritätsprüfungsbeispiel:
• Braucht drei 5-Tupel, Schreibweise:
– 1I#R2
„liest die Maschine in Zustand 1 ein I, so schreibt
sie ein #, geht nach rechts und geht in Zustand 2“
– 2I#R1
– 2##N3
• Zustand 1: gerade, 2: ungerade Anz
• Zustand 3: Maschine hat ungerade
Anzahl
von
"I"
gelesen.
WS2007
20
WS2007
21
Bsp.: Duale Addition von 1
• z.B.
– Eingabe: #1100#
– Ausgabe: #1101#
• oder:
– Eingabe: #11011#
– Ausgabe: #11100#
WS2007
22
Turingmaschine: Binärinkrement
WS2007
23
Bsp.: Erkennen einer Sprache
• Wörter aus der formalen Sprache
L={anbncn | n≥0} werden akzeptiert
– abc
– aabbcc
– aaabbbccc
– aaaabbbbcccc
– ...
WS2007
24
L={anbncn | n≥0}
„Finde den Fehler“
WS2007
25
Weitere Ideen…
• Verdopplungsmaschine:
Aus n Strichen mache 2n Striche
• Multipliziermaschine:
aus III#IIII mache xxx#IIII#IIIIIIIIIIII
– Mit x-en mitzählen, wie oft schon addiert
worden ist
• Unterprogramme: Sub-Tabellen…
– Sequenzielle Ausführung von TMs
WS2007
26
Viele Varianten von TMs...
• Varianten von Turingmaschinen:
– mehrere Eingabebänder
– einseitig begrenztes Band
– Grosses Eingabealphabet
–…
• Aber: Alle TMs sind gleichwertig!
– jedes Alphabet lässt sich beispielsweise
auf {#, 0, 1} reduzieren
WS2007
27
Turing-berechenbare Funktionen
• Partielle Funktion f: INk  IN berechnen
– Argumente (n1, n2, ..., nk) auf Band kodieren
z.B. als
#n1# n2# ... #nk#
– L/S-Kopf ganz links, dann starte TM
• Wenn TM anhält:
– Ergebnis ist ab dem Zeichen unter dem L/SKopf ablesbar
– Wird Eingabe akzeptiert, ist das Ergebnis
f (n1, n2, ..., nk), sonst:
• TM hält nicht an oder
• unter L/S-Kopf ist keine Zahl
WS2007
28
Registermaschine
• Speicher
– Datenspeicher
– Programmspeicher
• Prozessor
– Akkumulator
– Befehlsregister
– Befehlszähler
• Ein/Ausgabe-Einheit
WS2007
29
Registermaschine
WS2007
30
Registermaschine
• Einfaches, abstrahiertes Modell
eines von-Neumann-Rechners
• RM kann alles berechnen, was auch
ein realer Rechner berechnen kann.
• RM kann TM simulieren!
• TM kann RM simulieren!
• Äquivalente Berechnungsmodelle
WS2007
31
Modell-Sprachen
• Einfache modellhafte Sprachen:
– GOTO-Sprache
– WHILE-Sprache
– LOOP-Sprache
• Satz: Jede Turing-berechenbare
Funktion ist auch GOTO und
WHILE-berechenbar
– LOOP ist schwächer…
WS2007
32
GOTO-Programmiersprache
• Wie RM, aber statt Registern
Variablennamen, und einfache Syntax:
• Jede numerierte Zeile enthält entweder
– Zuweisung eines berechneten Terms an eine
Variable
• x := 2*a + 4*b
– Bedingten oder unbedingten Sprungbefehl
• IF bedingung GOTO zeile
• GOTO zeile
WS2007
33
GOTO: Addition
• Addition zweier natürlicher Zahlen
x = a + b wenn Prozessor nur succ
und nicht + beherrscht:
WS2007
34
WHILE-Programmiersprache
• Programm besteht aus einem von:
– Zuweisung
– bedingte Anweisung
– WHILE-Schleife
– Sequenz von
Programmen
WS2007
35
WHILE-Sprache: Addition
• x=a+b
WS2007
36
WHILE-Sprache: Multiplikation
• e=a*b
WS2007
37
WHILE durch GOTO
• WHILE-Schleife wird durch
bedingten Sprung nachgebildet
WS2007
38
GOTO durch WHILE
WS2007
39
Kleene'sches Theorem
• Äquivalent: Jedes GOTO-Programm
lässt sich in ein WHILE-Programm
umwandeln und umgekehrt
• Kleene'sches
Normalformentheorem:
"Jede berechenbare Funktion kann
mit einer einzigen WHILE-Schleife
programmiert werden."
WS2007
40
LOOP-Programme
• auch FOR-Programme genannt…
• WHILE-Schleife durch FOR-Schleife
ersetzt, aber: Durchlaufanzahl fest!
WS2007
41
Eigenschaften LOOP-Prog.
• Endlicher Durchlauf aller Schleifen
– Schleifenvariable i darf im Body der
Schleife nicht geändert werden!
• Konsequenz:
– LOOP-Programme terminieren immer!
– Start-/Endwert ist immer angegeben
• LOOP nicht so mächtig wie WHILE
– Kein TM-Simulator mit LOOP möglich
WS2007
42
Primitive Rekursion
• Funktion durch Rekursion berechnet,
kommt ohne Zuweisung/Schleifen aus
– z.B. in funktionalen Programmiersprachen
• Definition Primitive Rekursion:
WS2007
43
Primitive Rekursion
• Erlaubt sind dazu noch:
– Funktions-Komposition
– Vertauschen von Argumentpositionen
– Projektion
• Eine Funktion heisst primitiv rekursiv,
wenn sie aus 0, succ() und den
Projektionen von Verkettung und
primitiver Rekursion gebildet werden
kann
WS2007
44
Primitive Rekursion
• Projektion:
ist definiert durch
pk,i : INk → IN
pk,i(x1,…, xk) = xi
• Verkettung: Ist f n-stellige und g1,…, gn
k-stellige Funktion, so ist die
Verkettung f ◦ (g1,…, gn) : INk → IN
definiert durch:
(f ◦ (g1,…, gn))(x1,…, xk) =
f (g1(x1,…, xk),…, gn(x1,…, xk))
WS2007
45
Bsp.: Primitive Rekursion
WS2007
46
Bsp. LOOP-Programm
WS2007
47
Primitive Rekursion als
LOOP-Programm
• Satz: Jede primitiv-rekursive Funktion ist
LOOP-berechenbar
• Jede „vernünftig“ total berechenbare
Funktion ist primitiv rekursiv, wobei
„vernünftig“ bedeutet, dass man die
maximal möglichen Schleifendurchläufe
vorab bestimmen kann.
• Das ist weniger als TM-Berechenbarkeit!
WS2007
48
µ-Rekursion
• Es gibt Probleme, die sich nicht
mehr primitiv-rekursiv lösen lassen
• z.B. Suchprobleme: Suche für (k+1)stellige Funktion f das kleinste z, für
das f(z, x1, ..., xk) = true ist
• Argument wird beim rekursiven
Aufruf nicht kleiner, sondern größer!
WS2007
49
µ-Rekursion
• Mögliches Problem: Suche bricht
niemals ab – z.B. wenn es kein z
gibt, für das f true liefert
WS2007
50
µ-Rekursion versus
WHILE-berechenbar
• Beide Klassen stimmen überein:
• Alle µ-rekursiven Funktionen sind
WHILE-berechenbar (und damit auch
GOTO- und Turing-berechenbar)
• Nach Kleene kommt man mit einer
einzigen WHILE-Schleife aus!
• Also gilt:
Jede berechenbare Funktion lässt sich
als µ-rekursive Funktion schreiben
WS2007
51
µ-Rekursion durch WHILE
• Ziemlich offensichtlich:
WS2007
52
Bisher:
• Jede LOOP-berechenbare Funktion ist
total (d.h., terminiert immer!)
• Jede total berechenbare Funktion, für die
mit LOOP-Programmen eine
Abschätzung der max. möglichen
Schleifendurchläufe möglich ist, ist auch
LOOP-berechenbar.
• LOOP-berechenbare Funktion sind
genau die primitiv rekursiven Funktionen.
WS2007
53
Frage:
• Ist jede total berechenbare Funktion
immer durch ein LOOP-Programm
berechenbar?
WS2007
54
Ackermann-Funktion
• totale, berechenbare Funktion
• nicht primitiv rekursiv!
• [Ackermann-Péter]
•
= m+1
wenn n=0
a(m,n) = a(n-1,1)
wenn m=0
= a(n-1,a(n,m-1)) sonst
WS2007
55
Ackermann-Funktion
• Wächst sehr stark an
• Kann von keiner primitiv rekursiven
Funktion nach oben beschränkt
werden
WS2007
56
Ackermann-Funktion
• Verallgemeinerung der
Grundrechenarten:
– a(0,y) = y+1
– a(1,y) = y+2
– a(2,y) = 2y + 3
– a(3,y) = 2y+3-3
– a(4,y) = 2X-3
WS2007
wobei X=2^…^2 mit
„Turmhöhe“ y+2
57
Unlösbare Probleme
Prinzipiell unlösbare Probleme
• Ein Algorithmus kann angegeben
werden, aber ein Computer kann
das Problem nicht lösen.
• Probleme, die niemals durch
menschliche Erfindungskraft und
technisch-wissenschaftlichen
Fortschritt zu lösen sein werden
WS2007
59
Entscheidbare Menge
• „Eine Menge M heißt rekursiv
entscheidbar oder entscheidbar,
wenn es einen Algorithmus gibt, der
nach endlicher Zeit terminiert und
entscheidet, ob die Eingabe zur
Menge gehört oder nicht."
WS2007
60
Bsp: Entscheidbare Menge:
Goldbach-Vermutung
• "Jede gerade Zahl größer als 2 kann
als Summe zweier Primzahlen
geschrieben werden.„
– Nun als „Goldbach-Eigenschaft“
• [für alle Zahlen bis 1018 überprüft...]
• [Satz von Euklid: es gibt unendlich
viele Primzahlen...]
WS2007
61
Semi-entscheidbare Menge
• Frage: Element in Menge?
– Ja
– Nein
• Eine der beiden Antworten muss in
endlicher Zeit gegeben werden
– Die andere darf unendlich dauern…
WS2007
62
Bsp. (3n+1)-Problem
• „Collatz-Folge“
• Startzahl heißt "wundersam",
wenn Folge mit Zahl 1 endet
• Startzahl 6: Folge 3, 10, 5, 16, 8, 4, 2, 1
• Folge kann sehr, sehr lang werden!
• Wundersamkeit ist semi-entscheidbar!
WS2007
63
Bsp. "Game of Life"
• Drei Regeln:
– Geburt: Tote Zelle wird lebendig, wenn
3 der 8 Nachbarn leben
– Überbevölkerung: Zelle stirbt, wenn 4
oder mehr Nachbarn leben
– Vereinsamung: Zelle stirbt, wenn sie
weniger als 2 lebende Nachbarn hat
• Semi-entscheidbar?
WS2007
64
Das Halteproblem
• "Gibt es ein Programm, das als
Eingabe den Quelltext eines zweiten
Programms sowie dessen
Eingabewerte erhält, und dann
entscheiden kann, ob das zweite
Programm terminiert, d.h. nicht
endlos weiterläuft?"
WS2007
65
Halteproblem
• Angenommen, es gibt so eine Fkt:
WS2007
66
Halteproblem
• Dann kann man ein fiese Funktion
test() bauen, die nur dann nicht
terminiert, wenn haltetest JA gibt:
WS2007
67
Halteproblem
• Wende nun test auf sich selber an,
also berechne test(test)
– haltetest(test,test) liefert JA weil
test(test) terminiert: Aber dann kann das
WHILE in test() nicht terminieren! –
Widerspruch.
– haltetest(test,test) liefert NEIN: Dann
terminiert das WHILE sofort –
Widerspruch.
WS2007
68
Halteproblem
• Beide Fälle führen zum Widerspruch,
es gibt aber nur die beiden Fälle, also
kann es die Funktion haltetest nicht
geben!
• Halteproblem semi-entscheidbar:
TM simulieren und JA ausgeben,
wenn sie anhält.
WS2007
69
Konsequenzen des
Halteproblems
• „In jedem System, das Turingmächtig ist, lassen sich Aussagen
formulieren, die weder bewiesen
noch widerlegt werden können.
Solche Systeme sind grundsätzlich
unvollständig“
• Die Arithmetik ist solch ein System.
WS2007
70
Konsequenzen des
Halteproblems
• Auswirkung auf die
Software-Entwicklung:
• Es kann kein Computerprogramm
geben, das generell überprüft, ob
andere Computerprogramme für alle
Eingaben das korrekte Ergebnis
liefern
WS2007
71
Zusammenfassung
• Turingmaschine
– Simulator ausprobieren!
• GOTO, WHILE, LOOP
• Unlösbare Probleme
WS2007
72
Organisatorisches...
• Prüfung
– Termine
– Prüfungsfragen
WS2007
73
Quellen
• "Grundlagen der Informatik", Herold,
Lurz, Wohlrab; Pearson Studium
• Wikipedia
WS2007
74
Herunterladen