Teil II: - Berechenbarkeit und Komplexität

Werbung
Teil II:
Berechenbarkeit und Komplexität
Algorithmen und Komplexität
22. November 2016
Berechenbarkeitstheorie
RAM-Maschine
..
.
1: M−1 ← 1
M−2 :
..
.
⊥
2: M0 ← 1
M−1 :
1
3: M0 ← M0 ∗ M1
M0 :
243
4: M2 ← M2 − M−1
M1 :
3
5: GOTO 3 IF M2 > 0
M2 :
..
.
10
..
.
Programmzähler: 5
Die Random Access Machine (RAM) mit einem Programm der Länge
5, ausgeführt auf Eingabe M1 = 3 und M2 = 15.
Programme
Definition:
Ein Programm ist eine endliche Folge von zulässigen Befehlen.
• Details und formale Definition: Skript, Kapitel 1.1.1
• Ein Programm muss nicht zwingend endliche Laufzeit haben!
Funktionen und Programme
• Wir wollen Programme benützen, um Funktionen zu berechnen.
Funktionen und Programme
• Wir wollen Programme benützen, um Funktionen zu berechnen.
• RAM-Programme arbeiten mit Zahlen aus Z, während wir
Funktionen über {0, 1}∗ definiert haben.
Funktionen und Programme
• Wir wollen Programme benützen, um Funktionen zu berechnen.
• RAM-Programme arbeiten mit Zahlen aus Z, während wir
Funktionen über {0, 1}∗ definiert haben.
• Ist das ein Problem?
Funktionen und Programme
• Wir wollen Programme benützen, um Funktionen zu berechnen.
• RAM-Programme arbeiten mit Zahlen aus Z, während wir
Funktionen über {0, 1}∗ definiert haben.
• Ist das ein Problem?
• Es ist leicht, eine Bijektion zwischen {0, 1}∗ und Z zu finden:
x
b(x)
...
...
000
−4
01
−3
00
−2
0
−1
λ
0
1
1
10
2
11
3
100
4
...
...
Programme berechnen Funktionen
Sei A ein Programm, das immer endliche Laufzeit hat, und sei
x ∈ {0, 1}∗ .
1. Schreibe b(x) ∈ Z als Eingabe in M0 .
Programme berechnen Funktionen
Sei A ein Programm, das immer endliche Laufzeit hat, und sei
x ∈ {0, 1}∗ .
1. Schreibe b(x) ∈ Z als Eingabe in M0 .
2. Lasse das Programm A auf dieser Eingabe laufen, bis es hält.
Programme berechnen Funktionen
Sei A ein Programm, das immer endliche Laufzeit hat, und sei
x ∈ {0, 1}∗ .
1. Schreibe b(x) ∈ Z als Eingabe in M0 .
2. Lasse das Programm A auf dieser Eingabe laufen, bis es hält.
3. Betrachte die Zahl, die dann in M0 steht:
Programme berechnen Funktionen
Sei A ein Programm, das immer endliche Laufzeit hat, und sei
x ∈ {0, 1}∗ .
1. Schreibe b(x) ∈ Z als Eingabe in M0 .
2. Lasse das Programm A auf dieser Eingabe laufen, bis es hält.
3. Betrachte die Zahl, die dann in M0 steht:
◦ M0 > 0: interpretieren wir als 1
Programme berechnen Funktionen
Sei A ein Programm, das immer endliche Laufzeit hat, und sei
x ∈ {0, 1}∗ .
1. Schreibe b(x) ∈ Z als Eingabe in M0 .
2. Lasse das Programm A auf dieser Eingabe laufen, bis es hält.
3. Betrachte die Zahl, die dann in M0 steht:
◦ M0 > 0: interpretieren wir als 1
◦ M0 ≤ 0: interpretieren wir als 0
Programme berechnen Funktionen
Sei A ein Programm, das immer endliche Laufzeit hat, und sei
x ∈ {0, 1}∗ .
1. Schreibe b(x) ∈ Z als Eingabe in M0 .
2. Lasse das Programm A auf dieser Eingabe laufen, bis es hält.
3. Betrachte die Zahl, die dann in M0 steht:
◦ M0 > 0: interpretieren wir als 1
◦ M0 ≤ 0: interpretieren wir als 0
Wir stellen fest:
Unser Programm A berechnet eine Funktion A : {0, 1}∗ → {0, 1}.
Berechenbare Sprachen und Funktionen
Definition:
• Eine Sprache L heisst berechenbar, falls es ein Programm A gibt,
so dass für alle x ∈ {0, 1}∗ die Gleichung A(x) = L(x) gilt.
Berechenbare Sprachen und Funktionen
Definition:
• Eine Sprache L heisst berechenbar, falls es ein Programm A gibt,
so dass für alle x ∈ {0, 1}∗ die Gleichung A(x) = L(x) gilt.
• Eine Funktion f heisst berechenbar, falls es ein Programm A gibt,
so dass für alle x ∈ {0, 1}∗ die Gleichung A(x) = f (x) gilt.
Berechenbare Sprachen und Funktionen
Definition:
• Eine Sprache L heisst berechenbar, falls es ein Programm A gibt,
so dass für alle x ∈ {0, 1}∗ die Gleichung A(x) = L(x) gilt.
• Eine Funktion f heisst berechenbar, falls es ein Programm A gibt,
so dass für alle x ∈ {0, 1}∗ die Gleichung A(x) = f (x) gilt.
Serie 10, Aufgabe 3:
Es existieren nicht-berechenbare Sprachen.
Andere Rechenmodelle?
Offensichtlich ist unsere Definition von berechenbar abhängig von der
RAM-Maschine. Ist das eine Einschränkung?
Andere Rechenmodelle?
Offensichtlich ist unsere Definition von berechenbar abhängig von der
RAM-Maschine. Ist das eine Einschränkung?
• es gibt weniger mächtige Rechenmodelle
Andere Rechenmodelle?
Offensichtlich ist unsere Definition von berechenbar abhängig von der
RAM-Maschine. Ist das eine Einschränkung?
• es gibt weniger mächtige Rechenmodelle
• es gibt aber auch mächtigere Rechenmodelle
Andere Rechenmodelle?
Offensichtlich ist unsere Definition von berechenbar abhängig von der
RAM-Maschine. Ist das eine Einschränkung?
• es gibt weniger mächtige Rechenmodelle
• es gibt aber auch mächtigere Rechenmodelle
• die meisten anderen Modelle wie z.B. Turing-Maschinen sind gleich
mächtig wie die RAM-Maschine!
Andere Rechenmodelle?
Offensichtlich ist unsere Definition von berechenbar abhängig von der
RAM-Maschine. Ist das eine Einschränkung?
• es gibt weniger mächtige Rechenmodelle
• es gibt aber auch mächtigere Rechenmodelle
• die meisten anderen Modelle wie z.B. Turing-Maschinen sind gleich
mächtig wie die RAM-Maschine!
Church-Turing-These:
Die Klasse der RAM-berechenbaren Funktionen stimmt mit der Klasse
der intuitiv berechenbaren Funktionen überein. (nicht beweisbar!)
lesenswert:
’History of the Church-Turing thesis’ auf englischer Wikipedia
Codieren in {0, 1}∗
• Wir haben die Begriffe Sprache, Funktion, Berechenbarkeit über
{0, 1}∗ eingeführt.
Codieren in {0, 1}∗
• Wir haben die Begriffe Sprache, Funktion, Berechenbarkeit über
{0, 1}∗ eingeführt.
• Ist dies hinreichend flexibel?
Codieren in {0, 1}∗
• Wir haben die Begriffe Sprache, Funktion, Berechenbarkeit über
{0, 1}∗ eingeführt.
• Ist dies hinreichend flexibel?
• Bereits gesehen: {0, 1}∗ ist bijektiv zu Z.
Codieren in {0, 1}∗
• Wir haben die Begriffe Sprache, Funktion, Berechenbarkeit über
{0, 1}∗ eingeführt.
• Ist dies hinreichend flexibel?
• Bereits gesehen: {0, 1}∗ ist bijektiv zu Z.
• Wir wollen auch Paare (x, y ) als Elemente von {0, 1}∗ codieren
können, oder auch ganze Programme.
Codierung von Paaren
Seien x, y ∈ {0, 1}∗ . Wir möchten das Paar (x, y ) als Element von
{0, 1}∗ auffassen. Wie geht das?
Codierung von Paaren
Seien x, y ∈ {0, 1}∗ . Wir möchten das Paar (x, y ) als Element von
{0, 1}∗ auffassen. Wie geht das?
Idee:
• verdopple jedes Bit b von x und y
• dies ergibt x 0 und y 0
• füge x 0 und y 0 mit ’Trennsymbol’ 10 zusammen
Codierung von Paaren
Seien x, y ∈ {0, 1}∗ . Wir möchten das Paar (x, y ) als Element von
{0, 1}∗ auffassen. Wie geht das?
Idee:
• verdopple jedes Bit b von x und y
• dies ergibt x 0 und y 0
• füge x 0 und y 0 mit ’Trennsymbol’ 10 zusammen
Beispiel:
Sei x = 100 und y = 11. Dann codieren wir das Paar (x, y ) als
110000101111.
Codierung von Programmen
Serie 1, Aufgabe 2:
1:
2:
3:
4:
5:
6:
M−2 ← 1
M−1 ← MM0
M−1 ← M−1 + M−1
MM0 ← M−1
M0 ← MM0 − M2
GOTO 2 IF M0 > 0
Codierung von Programmen
Serie 1, Aufgabe 2:
1:
2:
3:
4:
5:
6:
M−2 ← 1
M−1 ← MM0
M−1 ← M−1 + M−1
MM0 ← M−1
M0 ← MM0 − M2
GOTO 2 IF M0 > 0
Beobachtung:
Wir können jedes Symbol als Bitstring codieren (z.B. ASCII). Dies
ergibt einen endlichen Bitstring, somit können wir das Programm als
Element von {0, 1}∗ codieren.
Gödelsche Unvollständigkeitssätze
Sei V ein Programm, das Beweise verifizieren kann. Wir nehmen an,
dass V widerspruchsfrei ist, d.h. V kann nicht gleichzeitig S und ¬S
beweisen.
Gödelsche Unvollständigkeitssätze
Sei V ein Programm, das Beweise verifizieren kann. Wir nehmen an,
dass V widerspruchsfrei ist, d.h. V kann nicht gleichzeitig S und ¬S
beweisen.
1. UV-Satz
Sei V so dass für alle A, x die Aussage ’A(x) hält’ V -beweisbar ist.
Dann gibt es ein Programm A und eine Eingabe x, so dass A(x) nicht
hält, dies aber nicht V -beweisbar ist.
Gödelsche Unvollständigkeitssätze
Sei V ein Programm, das Beweise verifizieren kann. Wir nehmen an,
dass V widerspruchsfrei ist, d.h. V kann nicht gleichzeitig S und ¬S
beweisen.
1. UV-Satz
Sei V so dass für alle A, x die Aussage ’A(x) hält’ V -beweisbar ist.
Dann gibt es ein Programm A und eine Eingabe x, so dass A(x) nicht
hält, dies aber nicht V -beweisbar ist.
2. UV-Satz
Kein widerspruchsfreies Programm V kann die eigene
Widerspruchsfreiheit beweisen.
Herunterladen