Grundlagen der Informatik - student.tugraz.at€¦ · WS2007 5 Berechenbare Funktion •“Eine...

Preview:

Citation preview

Grundlagen der Informatik

Kapitel 19

Harald Krottmaier

Sven Havemann

WS2007 2

Agenda

• Begriffe

• Turingmaschine – Beispiele

• Berechenbarkeit – Hilfsmittel

– Beispiele

WS2007 3

Motivation

• Sind Computer „allmächtig“?

• Präziser: Ist alles von einem

Computer berechenbar?

WS2007 4

1937…

• Alan Turing – Engl. Mathematiker, Gigant!

• Berechnung von Funktionen:

• Partielle Funktion: Nur eine Teilmenge aller möglichen Eingaben wird akzeptiert:

WS2007 5

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 6

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

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

WS2007 9

Nicht berechenbare

Funktionen

• Diagonalverfahren nach Cantor (1873)

• Georg Cantor: Begründer der

Mengenlehre

– Gigant!

WS2007 10

Bsp.: Diagonalverfahren

WS2007 11

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 12

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 13

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 14

Berechenbarkeitskonzepte

WS2007 15

Die Turingmaschine

• Alan Turing: allgemeines Konzept einer „rechnenden Maschine" – 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

WS2007 16

Die Turingmaschine formal

7-Tupel:

WS2007 17

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 18

Bsp Turingmaschine:

Paritätsprüfung

• Ungerade Anzahl von Strichen (I, III,

IIIII, ...) akzeptieren, sonst nicht!

– Leere Bandfelder enthalten ein #

• Zustandsgraph:

WS2007 19

Tätigkeit der Turingmaschine:

• Liste von 5-Tupeln: – Aktueller Zustand aus Z

– Eingabezeichen aus Σ Γ

– Ausgabezeichen aus Γ

– Kopfbewegung aus {L,N,R}

– Folgezustand aus Z

• Praktischerweise als Tabelle

angeben, „Turingtabelle“

WS2007 20

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 21

WS2007 22

Bsp.: Duale Addition von 1

• z.B.

– Eingabe: #1100#

– Ausgabe: #1101#

• oder:

– Eingabe: #11011#

– Ausgabe: #11100#

Turingmaschine: Binärinkrement

WS2007 23

WS2007 24

Bsp.: Erkennen einer Sprache

• Wörter aus der formalen Sprache

L={anbncn | n≥0} werden akzeptiert

– abc

– aabbcc

– aaabbbccc

– aaaabbbbcccc

– ...

L={anbncn | n≥0}

WS2007 25

„Finde den Fehler“

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

WS2007 27

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 28

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/S-

Kopf 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

Registermaschine

• Speicher

– Datenspeicher

– Programmspeicher

• Prozessor

– Akkumulator

– Befehlsregister

– Befehlszähler

• Ein/Ausgabe-Einheit WS2007 29

Registermaschine

WS2007 30

WS2007 31

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 32

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 33

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 34

GOTO: Addition

• Addition zweier natürlicher Zahlen

x = a + b wenn Prozessor nur succ

und nicht + beherrscht:

WS2007 35

WHILE-Programmiersprache

• Programm besteht aus einem von:

– Zuweisung

– bedingte Anweisung

– WHILE-Schleife

– Sequenz von

Programmen

WS2007 36

WHILE-Sprache: Addition

• x = a + b

WS2007 37

WHILE-Sprache: Multiplikation

• e = a * b

WS2007 38

WHILE durch GOTO

• WHILE-Schleife wird durch

bedingten Sprung nachgebildet

GOTO durch WHILE

WS2007 39

WS2007 40

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 41

LOOP-Programme

• auch FOR-Programme genannt…

• WHILE-Schleife durch FOR-Schleife

ersetzt, aber: Durchlaufanzahl fest!

WS2007 42

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 43

Primitive Rekursion

• Funktion durch Rekursion berechnet,

kommt ohne Zuweisung/Schleifen aus

– z.B. in funktionalen Programmiersprachen

• Definition Primitive Rekursion:

WS2007 44

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 45

Primitive Rekursion

• Projektion: pk,i : INk → IN

ist definiert durch pk,i(x1,…, xk) = xi

• Verkettung: Ist f n-stellige und g1,…, gn

k-stellige Funktion, so ist die Verkettung f ◦ (g1,…, gn) : IN

k → IN definiert durch:

(f ◦ (g1,…, gn))(x1,…, xk) = f (g1(x1,…, xk),…, gn(x1,…, xk))

Bsp.: Primitive Rekursion

WS2007 46

Bsp. LOOP-Programm

WS2007 47

WS2007 48

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 49

µ-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!

µ-Rekursion

• Mögliches Problem: Suche bricht

niemals ab – z.B. wenn es kein z

gibt, für das f true liefert

WS2007 50

WS2007 51

µ-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 52

µ-Rekursion durch WHILE

• Ziemlich offensichtlich:

WS2007 53

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 54

Frage:

• Ist jede total berechenbare Funktion

immer durch ein LOOP-Programm

berechenbar?

WS2007 55

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

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 wobei X=2^…^2 mit

„Turmhöhe“ y+2

WS2007 57

Unlösbare Probleme

WS2007 59

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 60

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 61

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 62

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 63

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 64

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 65

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 66

Halteproblem

• Angenommen, es gibt so eine Fkt:

WS2007 67

Halteproblem

• Dann kann man ein fiese Funktion

test() bauen, die nur dann nicht

terminiert, wenn haltetest JA gibt:

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

WS2007 69

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.

Konsequenzen des

Halteproblems

• „In jedem System, das Turing-

mä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

WS2007 72

Zusammenfassung

• Turingmaschine

– Simulator ausprobieren!

• GOTO, WHILE, LOOP

• Unlösbare Probleme

WS2007 73

Organisatorisches...

• Prüfung

– Termine

– Prüfungsfragen

WS2007 74

Quellen

• "Grundlagen der Informatik", Herold,

Lurz, Wohlrab; Pearson Studium

• Wikipedia

Recommended