Grundlagen der Informatik
[Prof. Hermann, Folien auf K:\Her\Gundlagen Informatik]
Vorgeschichte 1) Kippschalter Zustand: Ein/Aus
Drücken des Schalters: Zustandswechsel 2) Schlüsselwort „then“
Strukturelle Repräsentation
Grammatiken nützlicher Modelle zum Entwurf von Software, die Daten mit einer rekursiven Struktur verarbeiten.
Parser: E ⇒ E + E → kontextfreie Grammatiken
Reguläre Ausdrücke: Struktur von Daten; insbesondere von Text-Zeichenreihen ≡ endliche Automaten Unix-Stil: [A-Z][a-z]*[ ][A-Z][A-Z]
Compilerbau
Ziel: Computer soll eine vorgegebene Aufgabe lösen
1. Programm in einer formalen und maschinenlesbare Sprache 2. Computer erkennen: Formulierung zulässig?
3. Computer erstellt internen Arbeitsplan und Ausführung der Aktionen Formulierung = Theorie der formalen Sprachen
Erkennungsaspekt = Automatentheorie Arbeitsplan + Aktionszeit = Turing Maschine
reguläre Sprachen
lexikalische Analyse Scanner endliche Automaten
kontextfreie Sprachen
syntaktische Analyse Parser, Kellerautomat
semantische Analyse
+ Codegenerierung attributierte Grammatiken
Turing - Maschinen Codeoptimierung
Komplexität Grenzen der Belastbarkeit
- Was können Computer überhaupt leisten? „Entscheidbarkeit“
- Was können Computer effizient leisten? „Handbarkeit“
- Anwachsen des Zeitverbrauches
Aus Ein
Start Zustand
Drücken
Drücken
Start t
t h th e n
the then t
f
Quellprogramm Folge von Token
Ableitungsbau Zielprogramme Optimiertes Programm
Aussagenlogik
Einfache Verknüpfung wie „und“, „oder“, „nicht“ zwischen atomaren Gebilden.
A = Paris ist die Hauptstadt von Frankreich B = „Mäuse jagen Elefanten“
Von Wahrheitswerten der atomaren Bestandteile → von komplizierten sprachlichen Gebilden z.B. A und B ⇒ A = „Otto wird krank“, B = „Der Arzt verschreibt Otto eine Medizin“
Umgangssprache: „A und B“ ≠ „B und A“
Aussagenlogik: A und B ≡ B und A
Konvention: Alle atomaren Gebilde sind ohne inhaltliche Interpretation durchnummeriert und werden
mit A1, A2,… bezeichnet.
Definition: (Syntax der Aussagenlogik)
Eine atomare Formel hat die Form A, (mit i=1, 2,…) Formeln werden durch folgende induktiven Prozess definiert 1. Alle atomare Formeln sind Formeln
2. Für alle Formeln F und G sind (F v G) [Konjunktion], (F w G) [Disjunktion] Formeln 3. Für jede Formel F ist ┐F [Negation] eine Formel
Eine Formel F, die als Teil einer Formel G auftritt, heißt Teilformel von G
Beispiel: F = ┐((A5 v A6) w A3) ist eine Formel und sämtliche Teilformeln von F F, ((A5 v A6) w A3), A5 v A6, A6, A5, A3
Abkürzung
A, B, C statt A1, A2,…
(F1 → F2) statt (┐F1 w F2)
(F1 ↔F2) statt (F1 v F2) v (┐F1 v ┐F2) Definition (Semantik der Aussagenlogik)
Die Elemente der Menge {0,1} heißen Wahrheitswerte. Eine Belegung ist eine Funktion A: D→{0,1}, wobei D eine Teilmenge der atomaren Formeln ist. Wir erweitern A zu einer Funktion Ā:E→{0,1}, wobei E ⊇ D die Menge aller Formeln, die nur aus den atomaren Formeln in D aufgebaut sind.
1. Für jede atomare Formel A 0 D ist Ā(A) = A(A) 2. Ā((F v G)) = { 1, falls Ā(F) = 1 und Ā (G) = 1
0, sonst
3. Ā((F w G)) = { 1, falls Ā(F) = 1 oder Ā(G) = 1 0, sonst
4. Ā(┐F) = { 1, falls Ā(F) = 0 0, sonst
Ā = A
Beispiel: Es sei Ā(A) = 1, A(B) = 1, A(C) = 0
A(┐((A v B) w C)) = { 1, falls A((A v B) w C) = 0 0, sonst
= { 0, falls A((A v B) w C) = 1 1, sonst
= { 0, falls A((A v B)) = 1 oder A(C) = 1 1, sonst
= { 0, falls A((A v B)) = 1 1, sonst
= { 0, falls A((A)) = 1 und A(B) = 1 = 0 1, sonst
Wirkung der Operatoren v, w, ┐ist durch Wahrheitstafeln darstellbar für Formeln F v G
v = „und“
für Formeln F w G
w = „oder“
für Formeln ┐F
┐ = „nicht“
Beispiel:
Definition: (Modell, erfüllbar, Tautologie)
Es sei F eine Formel und A eine Belegung. Falls A für alle in F vorkommenden atomaren Formeln definiert ist, so heißt A zu F passend. Falls A zu F passend ist und A(F) = 1, so ist A ein Model für F. Eine Formel F heißt erfüllbar, falls F mindestens ein Model besitzt, andernfalls heißt F unerfüllbar.
Eine Formel heißt Tautologie, falls jede zu F passende Belegung ein Modell für F ist.
Satz: Die Formeln (p w ┐p) ist eine Tautologie
Beweis: Jede passende Belegung A Beweis: Es sei A eine beliebige passende Belegung A((p w ┐p)) = 1
A((p w ┐p)) = 1, falls A(p) = 1, oder A(┐p) = 1 Fall 1: A(p) = 0 ⇒ A(┐p)=1 ⇒ A(p w ┐p) = 1 Fall 2: A(p) = 1 ⇒ A(p w ┐p) = 1
Satz: Die Formel (p v ┐p) ist unerfüllbar Beweis: Es sei A eine passende Belegung, beliebig A((p v ┐p)) { 1, falls A(p) =1 und A(┐p) = 1
0, sonst
Fall 1: A(p) = 1 ⇒ A(┐p) = 0 ⇒ A((p v ┐p)) = 0 Fall 2: A(p) = 0 ⇒ A(┐p) = 1 ⇒ A((p v ┐p)) = 0 A(F) A(G) A(F v G)
0 0 0
0 1 0
1 0 0
1 1 1
A(F) A(G) A(F w G)
0 0 0
0 1 1
1 0 1
1 1 1
A(F) A(┐F)
0 1
1 0
A(F) A(G) A(F→G) = A((┐F w G)
0 0 1
0 1 1
1 0 0
1 1 1
A(F) A(G) A(F↔G) = A((F v G) w ( ┐F v ┐ G)
0 0 1
0 1 0
1 0 0
1 1 1
A(p) A(p w ┐p)
0 1
1 1
A(p) A(p v ┐p)
0 0
1 0
Satz: Eine Formel F ist eine Tautologie genau dann, wenn ┐F unerfüllbar ist.
Beweis: Es gilt F ist eine Tautologie
⇔ jede zu F passende Belegung ist ein Modell für F.
⇔ jede zu F (und damit auch ┐F) passende Belegung ist kein Modell für F.
⇔ ┐F besitzt kein Modell ⇔ ┐F ist unerfüllbar (w.z.b.w.)
Übergang von F zu ┐F (bzw. Von ┐F zu F) kann durch folgendes „Spiegelungsprinzip“ Veranschaulicht werden.
Fazit: Für die Erfüllbarkeit einer Formel F genügt es, nur die endlich vielen Belegungen zu testen, die genau auf den in F vorkommenden atomaren Formeln definiert sind.
Algorithmus zur Erfüllbarkeit von Formeln
Gegeben: Formel F besteht aus n atomaren Formeln
1. Erstellung aller 2n möglichen Belegungen für die n-atomaren Formeln 2. Ermittlung des Wahrheitswertes von F für jede dieser Belegung
3. Ist einer dieser Wahrheitswerte 1, so gebe „F ist erfüllbar“ aus, andernfalls gebe „F ist nicht erfüllbar“ aus.
Beispiel: F = (┐A → (A → B)) Tautologie?
Erweitern der Formeln um Quantoren (œ, ›),und damit Variablen, Funktionssymbole und Prädikatensymbole ≡ Prädikatenlogik 1. Stufe
Beweisarten
Deduktive Beweise
→ Folgen von Aussagen, die entweder als Wahr gegeben sind, oder logisch aus vorangegangenen Aussagen folgen.
Üblich zu beweisende Aussageform - „wenn dann“ – Aussage wenn (etwas), dann (etwas anderes) Aussagelogik H → K Hypothese Kontusion
Deduktiven-Prinzip-Folge startet mit der Hypothese und ist beendet, wenn die Kontusion (erreicht) abgeleitet wurde.
((H → K) v H) → K = Tautologie
„Genau dann wenn“ – Aussage (etwas) genau dann, wenn (etwas anderes) Tautologien Erfüllbare Formeln
Aber keine Tautologie
Unerfüllbare Formeln
A B ┐A A → B F
0 0 1 1 1
0 1 1 1 1
1 0 0 0 1
1 1 0 1 1
N Beweis durch Umkehrung
Statt: „wenn H, dann K“ beweise „wenn nicht K, dann nicht H“
Beweis: H → K ⇔ ┐K → ┐H ist zu beweisen, über:
- Wahrheitstafel
- Umformung (deduktive Beweise)
H → K ⇔ ┐H w K ⇔ ┐K w H ⇔ ┐K → ┐H (w. z. b. w.) Beispiel: Wenn X ≥ 4, dann 2x ≥ x2
Umkehrung: Wenn nicht 2x ≥ x2, dann nicht x ≥ 4
Beweis durch Widerspruch
Statt: „wenn H, dann K“ beweise „H und nicht K impliziert Falschheit“
Beweis: H → K ⇔ H v ┐K → falsch
H → K ⇔ ┐H w K ⇔ ┐(H v ┐K) ⇔ ┐(H v ┐K) w falsch H v ┐K → (w. z. b. w.)
Beweis durch Gegenbeweis
Beispielsweise: Angeblicher Satz: Alle Primzahlen sind ungerade Gegenbeispiel: 2 ist eine Primzahl und 2 ist gerade
Induktive Beweise (Vorraussetzung: rekursive definierte Objekte)
Induktive Beweise mit natürlichen Zahlen
Bewiesen werde die Aussage S(n) für eine ganze Zahl n.
Induktionsanfang: Zeige S(i) gilt für eine bestimmte ganze Zahl i, [i=0; i=1]
Induktionsschritt: Für n ≥ i (i aus Induktionsanfang), wenn S(n), dann S(n+1) n
Beispiel: ∀ n ≥ 0 ∑ i = n (n+1)
i=1 i
n Induktionsbeginn: n = 0 ∑ i = 0
i=1
n
Induktionsschritt: (n → n+1). Es gilt ∑ i = (n (n+1)) behaupte:
i=1 2
n+1 n+1 n
∑ i = (n+1)(n+2) ⇒ ∑ i = ∑ i + (n+1) = n(n+1) + (n+1)
i=1 2 i=1 i=1 2
= n(n+1)+2(n+1) = (n+2)(n+1) (w. z. b. w.)
2 2
Strukturelle Induktion: verschiedene rekursiv definierte Strukturen Wichtige Beispiele: Bäume und Ausdrücke
T1 T2 Tk
Definition: (Bäume)
Induktionsbeginn: Ein einzelner Knoten ist ein Baum und dieser Knoten ist die Wurzel des Baumes Induktionsschritt: Wenn T1, T2,.. Tk Bäume sind, dann kann ein neuer Baum gebildet werden.
1. Starte mit neuen Knoten N, N = Wurzel des Baumes 2. Füge Kopien aller Bäume T1,... Tk hinzu
3. Füge Kanten von Knoten n zu den Wurzeln der einzelnen Bäume T1,T2,...Tk hinzu
Definition: (+, *) = Ausdruck
Induktionsanfang: Jede Zahl oder Buchstabe (also eine Variable) ist ein Ausdruck
Induktionsschritt: Wenn E und F Ausdrücke sind, dann sind auch E+F, E*F, € Ausdrücke.
Beispiel: 2 und x = Ausdruck: x+2, 2+x, (2+x)+2
Satz: Jeder Baum besitzt genau einen Knoten mehr als Kanten
Beweis: formale Aussage: S(T), wenn T ein Baum ist und n-Knoten und e-Kanten, dann gilt: n = e+1 Induktionsanfang: T ist ein Baum aus einem Wurzelknoten N und K kleinen Bäumen T1, …Tk; (Anzahl Knoten (T) > 1)
Es gelten: S(Ti): Wenn Ti ni = Knoten und e-Kanten: ni = ei+1
Knoten von T: Knoten N und der Knoten von T1, T2, ...Tk
T hat Knoten (T) = 1 + n1 + n2 + n3 +...nk
Kanten von T: Knoten von T1, T2, …Tk plus k Kanten von N zu den Bäumen T1, T2, … Tk
Kanten (T) = k + e1 + e2 + e3 + … ek
Ersetze n durch ei+1: Knoten (T) = 1+(e1+1)+(e2+1)+…+(en+1) = k+1+e1+e2+e3+…+ek
= Kanten (T) +1 (w. z. b. w.)
Beweisprinzip der strukturellen Induktion
Vorraussetzung: Induktive Definition einer Struktur x und Aussage S(x) Induktionsanfang: S(x) für die Basisstrukturen von x bewiesen wird Induktionsschritt: Struktur x aus Teilstrukturen y1, y2, …yk definiert ist.
Wenn S(y1), S(y2), S(yk) gilt, dann ist zu beweisen S(x) gilt.
Behauptung: für eine Formel F
Induktionsanfang: Beweis für atomare Formeln
Induktionsschritt: Behauptung gilt für die Formeln F und G Beweis: Behauptung gilt für F w G, F v G, ┐F
Handelt es sich bei folgenden Gebilden um Bäume?
1) (a+a)*2+3 1) ja
2) a+(a)*2+(3
2) nein ja, Kopie des Knotens, mit anderen verbinden
Arbeitsweise von Automaten / Programme zu beweisen
Gruppen von Aussagen, die die Zustände beschreiben: S1(n), S2(n),..Sk(n)
⇒ S1(n) v S2(n) v … v Sk(n)
gegenseitige Induktion über n
S1(n) = Der Automat befindet sich nach n-maligen drücken genau dann im Zustand aus, wenn n gerade ist.
S2(n) = Der Automat befindet sich nach n-maligen drücken genau im Zustand ein, wenn n-ungerade ist.
Fall:
1) [S1 ⇐] 0 ist eine gerade Zahl, zeigen nach 0-maligen drücken ist der Automat im Zustand „aus“, da
„aus“ der Startzustand ist.
2) [S1 ⇒] Der Automat ist nach 0-maligen drücken im Zustand „aus“. Zeige 0 ist gerade 3) [S2 ⇐] Hypothese: 0 ist eine ungerade Zahl. [H→K]. Hypothese ist falsch
4) [S2 ⇒] Hypothese: Automat ist nach 0-maligen drücken im Zustand „ein“. Hypothese falsch.
Induktionsschritt: Annahme: S1(n) und S2(n) sind wahr: Zeige S1(n+1) und S2(n+1) sind wahr.
1) [S1 ⇐] (n+1) ist gerade ⇒ n ist ungerade, wenn Teil S2(n): nach n-maligen drücken im Zustand „ein“
2) [S1 ⇒] Automat ist nach n+1 maligen drücken im Zustand „aus“
⇒ Nach n-maligen drücken im Zustand „ein“ gewesen sein
„⇒“ von S2(n):n ist ungerade ⇒ (n+1) ist gerade
3) [S2(n+1) ⇐] Vertausche die Rollen S1 und S2 sowie „gerade“ und „ungerade“
4) [S2(n+1) ⇒] wie bei 3.
Formale Sprachen
Ansatz:
- Menge von syntaktischen Regeln
- Vorschrift wie aus Regeln Programme gebildet werden
- Definieren einer Semantik, die von Computer verstanden wird) Definition: (Alphabet, Wort, Sprache)
Ein Alphabet ist eine endliche, nicht leere Menge von Zeichen. Es sei V ein Alphabet und k ∈ ù (natürliche Zahlen) (ù = {0,1…}. Endliche Folgen (x1, x2,... xk) mit xi ∈ V (i=1,...ik) heißen Wörter über V der Länge k.
Das Wort der Länge 0 wird mit ∈
ε
(Epsilon) bezeichnet. Die Länge eines Wortes x wird durch |x| dargestellt.Für eine Menge M bezeichnet |M| die Mächtigkeit von M. V* bezeichnet die Menge aller Wörter V.
V* = V*\{
ε
}. Jede beliebige Teilmenge von V* wird als Sprache (L) bezeichnet. Die Menge der Wörter über V mit der Länge n ist Vn = {x ∈ V*, |x| = n} für n ∈ ù.Bemerkung: |
ε
| = 0; (w und v sind Worte) |wv| = |w| + |v|; |wn| = n*|w|; wobei wn = www…w = n-mal.Definition: (Verkettung)
Es sei V ein Alphabet. Die Verkettung () von Wörtern x,y ∈ V* ergibt ein neues Wort: x y = xy = x1….xk y1….yk (xi,yi ∈V)
x,y ∈ V* ⇒ x y ∈ V* (Abgeschlossenheit) (x y) z = x (y z) = xyz (Assoziativität)
(
ε
x) = x ε
= x (ε
ist ein neutrales Element)Aus Ein
Start Zustand
Drücken
Drücken
Beispiele:
1. V = {0, 1}, V* = {ε, 0,1,001,10,0001,…}
L = {0, 1, 10, 11,100} ist eine Sprache über V
2. V = {0,1…9} natürliche Zahlen wie 30714 in Dezimalschreibweise Definition: Es sei A, B Teilmengen von V* (also Sprachen) dann definieren wir:
AcB = {x, x ∈ A oder x ∈ B} (Vereinigung)
A1B = {x, x ∈ A und x ∈ B} (Schnittmenge)
A\B = {x, x ∈ A und x ó B} (Differenzmengemenge)
Ā = V* \ A (V ohne A) (Komplementmenge)
AB = {xy, x ∈ A und y ∈ B} (Produktmenge)
Es sei ÷ (deutsch C) eine Klasse von Mengen (Sprachen), dann heißt ÷ abgeschlossen gegenüber Schnitt, Vereinigung, Komplement, Produkt falls A ∈ ÷ und B ∈ ÷ folgt AcB, A1B, Ā, AB ist ∈ ÷
_ _ _ _ Beachte: AcB = A 1 B und A1B = A 1 B
Jede Klasse, die gegen Komplement und Schnitt abgeschlossen ist, ist immer auch gegen Vereinigung abgeschlossen.
Definition: Für eine Sprache A setzen wir AE = {
ε
} und An+1 = AnA Es gilt: AiAj = Ai+j; A* = cAn; A*= cAn; (Ai)j = Aijn≥0 n≥1
Definition: (Relation R)
Eine 2-stellige Relation R auf eine Grundmenge V ist definiert durch eine Menge Paaren (x,y) von Elementen aus V. R ⊆ V X V
Definition: Es seien R,S zweistellige Relationen auf V* (also R, S ⊂ V*X V*) RS = {(x,y); es gibt ein z mit xRz und zSy}
Für eine Relation R: RE = {(x,x), xRx} und Rn+1=RRn Damit Rx = c Rn, Ry = cRn
n≥0 n≥1
xRxy bedeutet x=y, es gibt z1, z2,.., zn für x ≥ 1 dann gilt xRz1; z1Rz2,…Zn-1 Rzn, ZnRy Definition: Eine Relation R ⊆ V*X V* heißt rekursiv, wenn für alle x ∈V* gilt xRx
Sie heißt transitiv, falls aus xRy und yRz (für x,y,z∈V*) gilt xRz Sie heißt symmetrisch, falls mit xRy (für x,y∈V*) gilt yRx
Satz: R* ist die kleinste reflexive und transitive Relation, die R umfasst.
(die reflexive und transitive Hülle von R) R* ist die kleinste transitive Relation, die R umfasst.
Beispiele: Wörter; Sprachen
(a) V = {a,b,c…z}
→ SpracheWörter über V = V
*= Wortschatz einer natürlichen Sprache (Deutsch: Duden)
= {V
1,…,V
n,… } = V
1Wörter über V
1→ Sätze einer Sprache (deutsche Sprache)
2 Betrachtungsebenen: Von Buchstaben über Worte zu Sätzen.
(b) Programmiersprachen V = ASCII, V = EBCDIC
1. Wörter über V→ Eingabezeichen eines Compilers
z.B. C: 5 Sorten von Eingabesymbolen, Schlüsselworte, Bezeichner, Literale, Operatoren und Begrenzer
Kompilieren im 1.Schritt: einzelne Eingabesymbole erkennen
z.B. while – Schlüsselwort
whilex – Bezeichner 2. V = { Eingabesymbole einer Programmiersprache }
Sprache = Programmiersprache = Menge aller endlichen Folgen von Eingabesymbolen die ein korrektes Programm darstellen.
2 Betrachtungsebenen: Buchstaben→Eingabesymbole→Programme einer Programmiersprache
z.B. C: while (x3<100) x3++;
Problem: Automatentheorie
Ist ein gegebenes Wort Element einer Sprache?
Es sei V ein Alphabet und L eine Sprache über V.
Dann lautet das Problem zu L: Gegeben sei ein Wort x
∈V
*. Entscheiden Sie, ob x in L enthalten ist oder nicht.Beispiel: Parser eines C-Compilers
Lc = Menge der gültigen C-Programme
⇒ Problem P ∈ Lc ? ASCII – Zeichenreihe P sei gegeben
Klassen von unendlichen Sprachen
Definition: Es sei
ƒ:A→B, b∈ B ƒ-1(b) = {a
∈ A, ƒ(a)=b} ist die Menge der Urbilder von b.Eine Funktion
ƒ heißt:•
injektiv, wenn | ƒ
-1(b)| ≤ 1
•
surjektiv, wenn | ƒ
-1(b)| ≥ 1
•
bijektiv, wenn | ƒ
-1(b)| = 1
Definition: Eine Menge M ist abzählbar, falls es eine Funktion gibt ƒ:ù→M, die surjektiv ist,
oder falls M=∅.
Bemerkung: Sind M und ù gleich mächtig, so wird M auch abzählbar unendlich genannt.
Sprachen sind Mengen, abzählbare Sprachen.
Beispiel: Die Menge der Zweierpotenzen ist abzählbar.
Beweis:
ùM ƒ:ù→M zeige:
ƒ ist surjektiv für ein beliebiges b ∈ M. |ƒ-1(b)| ≥ 1
0 → 1 = 20n→2
nb
∈ M ⇒ › m mit b = 2m1 → 2 = 21
und
ƒ-1(b) = m
⇒ |ƒ-1(b)| =1 ≥ 1
2 → 4 = 22Satz: Jede endliche Menge ist abzählbar.
Satz: Die Menge der rationalen Zahlen ist abzählbar.
Beweis: 1. Cantorsche Diagonalverfahren (Georg Cantor 1845-1918)
Jede rationale Zahl lässt sich durch einen Bruch darstellen. p/q mit p und q ∈ Ζ 0 → 1 → - 1 2 → -2 - 3 ……..
1 1 1 1 1 1 - 1 2
2 2 2
1 - 1 3 3
1 4
- alle rationalen Zahlen kommen in dem Schema vor
- jede rationale Zahl wird auf dem Weg genau einmal getroffen - jeder Schritt des Weges hat eine Nummer
-
ƒ(i) = rationale Zahl nach den i-ten Schritt des Weges-
ƒ ist surjektiv p/q mit p und q ∈ Ζ |ƒ-1(
p/q)| ≥ 1
Satz: Die Menge der reellen Zahlen ist nicht abzählbar.
Beweis: - Betrachte die reellen Zahlen zwischen 0 und 1.
Indirekter Beweis: Menge der reellen Zahlen zwischen 0 und 1 ist abzählbar Folge der reellen Zahlen r
1,r
2,r
3zwischen 0 u. 1
Jede diese reellen Zahlen r
jbekommt ein Intervall ij zugeordnet mit der Länge 1 . Alle ij (j ≥ 1) sind im Intervall von 0 bis 1.
10
j- Die reellen Zahlen zwischen 0 und 1 decken das Einheitsintervall vollständig ab.
- Die Intervalle i
1, i
2,… decken das Einheitsintervall mit Überschneidungen ebenfalls vollständig ab.
a
S = Σ 1 es muss gelten: [S≥1]
i=1 10j
∞
laut Formelsammlung: Geometrische Reihe: a
Σ qk-1 = a mit|q| < 1
k=1 1-q∞ 1
Hier: a = 1; q=1; S = 1 * Σ * 1 = 10 = 1 ⇒ < 1 Widerspruch 10 10 10 j=1 10j-1 1-1 9 nicht abzählbar
10
Abzählbare Sprachen Aufzählbahre Sprachen
Entscheidbare Sprache
Satz: Menge V* aller Wörter über einem Alphabet V ist abzählbar.
Beweis: ù {a, b}* a << b
0 → ε lexikographische Ordnung 1 → a
2 → b 3 → aa 4 → ab 5 → ba 6 → bb
…
• V = {x1,...xn}, Ordnungsrelation „<<“ auf V, Beschränkung der Allgemeinheit x1<<x2<<…<<xn
• Ordne die Menge der Wörter über V*
• Alle Wörter der Länge 0
• Alle Wörter der Länge 1
• Alle Wörter der Länge 2
• u.s.w.
• Wörter gleicher Länge werden lexikographisch geordnet
→ Reihenfolge der Wörter über V* (w.z.b.w.)
Satz: Jede Teilmenge einer abzählbaren Sprache M ist abzählbar.
ù M ù M ƒ
ƒ
ƒ´ ƒ´
∀ b ∈ M’ zeige Ζ |ƒ`-1(b)| ≥ 1, |ƒ`-1(b) | ≥ 1 |ƒ-1(b) | ≥ 1 (w.z.b.w.) Folgerung: Jede Sprache L ist abzählbar
Definition: Ein Algorithmus ist eine endliche Menge Wohldefinierter Regeln, mit der Eingabe auf einer vorgegebenen Menge schrittweise in eine Ausgabe in einer bestimmten Form transferiert werden.
Definition: (Abzählbarkeit)
Eine Menge M ist aufzählbar, fall es eine surjektive Funktion ƒ: ù→M gibt und ein Algorithmus, der es gestattet für jedes n aus natürlichen Zahlen den Wert ƒ(n) zu berechnen, oder falls M = ∅.
Die Menge {ƒ(0), ƒ(1), ƒ(2),…} heißt Aufzählung von M. Entsprechend von Aufzählbahren Sprachen sprechen.
Satz: Jede endliche Menge ist aufzählbar.
M = {m1, m2,… mn} ƒ(i) = mi ; 1 ≤ i ≤ n m1 ; sonst
if (i==1) return mi; if(i==n-1) return m-1; if(i==n) return mn; if(i>n) return m1; Satz: Es sei V ein Alphabet. Die Menge V* aller Wörter über V ist aufzählbar.
Beweis: - Betrachte die Aufzählung; „<<“ als Ordnungsrelation auf V - Erzeuge ε
- Erzeuge die Wörter der Länge 1 in lexikalischer Reihenfolge
- Erzeuge die Wörter der Länge 2 in lexikalischer Reihenfolge ⊗ - …
⇒ Für ein beliebiges n ist ƒ(n) der n-te Schnitt dieser Aufzählung.
Nach ⊗ existiert ein Algorithmus für ƒ(n).
M’ M’
ƒ(n); falls ƒ(n) ∈ M’
ƒ´(n) = w mit w ∈ M’, falls
beliebig ƒ(n) ∉ M’
Satz: Es gibt nicht aufzählbare Sprachen Beweis: Schöning (Literatur nachschlagen!)
Algorithmen, die nach endlich vielen Schritten eine Antwort liefern.
Definition: Gegeben sei ein Alphabet V. Eine Sprache L ⊆ V* heißt entscheidbar, falls es einen Abbrechbahren Algorithmus gibt (Entscheidungsverfahren), der für jedes w ∈ V* feststellt ob w ∈ L oder w ∉ L ist.
Beispiel: V = {a}, L = {a2n; n ∈ ù} Entscheidbar?
z.B. w = aaaaa ⇒ |w| ist ungerade über a2n aber w ∉ L ⇒ Entscheidbar Satz: Jede entscheidbare Sprache ist aufzählbar.
V ist ein Alphabet. L ⊆ V* ist entscheidbar. Zähle V* auf. Entscheide nach dem Entscheidungsverfahren für jedes erzeugte w. w ∈ L oder w ∉ L. Nehme w in Aufzählung auf, wenn w ∈ L.
Satz: Nicht jede Aufzählbare Sprache ist entscheidbar.
Beweis: Computerprogramme als Sprache zu dem Alphabet ASCII L ⊆ ASSCII*
L {xy, x ist ein Programm, y ist eine Eingabe und x stoppt bei Eingabe von y nach endlich vielen Schritten}
Halteproblem: aufzählbar, aber nicht entscheidbar Beweis: Schöning (Literatur nachschlagen)
Testsoftware: Automatische Programmverifikation kann es nicht geben.
Automatische Programmverifikation für Teilproblemklassen.
Computerprogramme: Sprache über ein Alphabet Abzählbar viele
Computerprogramme = nur abzählbar viele Probleme, die von Computer gelöst werden können.
Satz: Es gibt überabzählbare viele Probleme
∀ r ∈ ú def. ƒr(x) = 1, falls x = r
0, sonst Da ú überabzählbar ist ⇒ {ƒr; r ∈ ú} ist überabzählbar Betrachte die Größenordnung aller Computerprogramme
Satz: Der Anteil der rationalen Zahlen an den reellen ist verschwindet klein.
∞
Intervall setzen mit ε für das k-te Intervall. S = Σ ε = ε 10k k=1 10k 9
Die abzählbare Menge der rationalen Zahlen des Einheitenintervalls kann in einer Menge von Intervallen der Länge ε eingeschlossen werden. Während die reellen Zahlen des Einheitenintervalls 9
eine Länge von 1 haben.
Lim ε = 0 ε→0 9
Grammatiken
Satz→Subjekt, Prädikat, Objekt Satz
Subjekt→Artikel, Substantiv
Artikel→Der Subjekt Prädikat Objekt
Substantiv→Junge, Ball
Objekt→Artikel, Substantiv Artikel Substantiv Verb Artikel Substantiv Prädikat→Verb
Verb→wirft Der Junge wirft den Ball
Artikel→den Der Ball wirft den Jungen
Definition: (Grammatik)
Eine Grammatik ist ein Quadrupel G=(VN, VT, P, S) mit
1) VN, VT sind endliche nicht leere Mengen mit NV ∩ VT = ∅. VN ist die Menge der Variablen (nicht terminalen Symbole). VT ist die Menge der terminalen Symbole.
2) P ist eine endliche Menge von Regeln der Form: α→β mit α∈ (VN ∪ VT)+ , β∈ (VN ∪ VT)* Die Elemente von P heißen Produktionen, Regeln.
3) S ∈ VN ist das Startsymbol Abkürzung: α→β1|β2…βn für α→β1; α→β2,…, α→βn
Beispiel: Bezeichner für Programmiersprachen G = {VN, VT, P, S}
Bezeichner
VN = {Bezeichner, Bez Rest, Buchstaben, Ziffer}, VT = {A,B,..Z,a,b,..z,_,0,…9}, S = Bezeichner P = { Bezeichner→Buchstabe|_|Buchstabe Bez Rest|_ Bez Rest
Bez Rest→Buchstabe Bez Rest|_ Bez Rest|Ziffer Bez Rest|Buchstabe|_|Ziffer Buchstabe→A|…|Z|a|…|z
Ziffer→0|…|9 }
Beispiel: Wort: x = abbA Aaa und Regel: bA→Bab, ersetze „bA“ in x durch „Bab“
Definition: Seien G = (VN, VT, P, S), V = VN ∪ VT und x,y ∈V*
Anwendung einer Grammatikregel: x⇒y: ⇔ γαδ, y = γβδ und α→β ∈ P mit α ∈V+, γβδ ∈V*
„x führt unmittelbar zu y“
z.B. ⇒ x = aB bA Aaa ⇒ aB Bab Aaa γ α δ γ β δ Anwendung mehrerer Grammatikregeln nacheinander
x ⇒* y ⇔ Es existiert eine endliche Folge (w0,w1,…wn), so dass x=wo und wn=y, wi-1 ⇒ wi (1 ≤ i ≤ n) Die Folge heißt Ableitung von y aus x.
Nachweis: _3xy ist aus obigen Grammatik ableitbar.
Bezeichner→_Bez Rest→_Ziffer Bez Rest→_Ziffer Buchstabe Bez Rest _Ziffer Buchstabe Bez Rest→_Ziffer Buchstabe Buchstabe Bez Rest→_3xy
Definition: Die von eine Grammatik G = (VN, VT, P, S) erzeugte Sprache: L(G) = {x ∈VT*; S⇒*x}
Definition: Zwei Grammatiken G1 und G2 heißen äquivalent, falls gilt L(G1) = L(G2) Beispiel: 1) G1 = (VN, VT, P, S) mit VN = {S}, VT = {0} und P1 = {S→0S, S→0}
S ⇒ 0S ⇒ 00S ⇒ 0n-1 S ⇒ 0n, L(G1) = {0n; n ≥ 1}
2) G2 = (VN, VT, P, S) mit VN = {S}, VT = {0,1} und P2 = {S→0S1, S→01}
L(G2) = {0n1n; n ≥ 1}
3) G3 = (VN, VT, P, S) mit VN = {S, B, C}, VT = {0,1,2}
und P3 = {S→0SBC, S→0BC, CB→BC, 0B→01, 1B→11, 1C→12, 2C→22}
Beispiel: S ⇒ 0SBC ⇒ 00SBCBC ⇒ …0n-1 S(BC)n-1 ⇒ 0n(BC)n
z.B. n=3 ⇒ 000BCBCBC ⇒ 000BBCCBC ⇒ 000BBCBCC ⇒ 000BBBCCC ⇒ 0nBnCn z.B. n=3 ⇒ 000BBBCCC ⇒ 0001BBCCC ⇒ 00011BCCC ⇒ 000111CCC ⇒ 0n1ncn z.B. n=3 ⇒ 000111ccc ⇒ 0001112cc ⇒ 00011122c ⇒ 000111222 ⇒ 0n1n2n
⇒ L(G3) = {0n1n2n; n ≥1}
Beweis: „⊇“ Teilmenge → S ⊇ L(G3) durch herleiten bewiesen (s.o.)
„⊆“ Balance → Nach jedem Ableitungsschritt ist die Anzahl der 0en gleich der Anzahl der 1en (bzw. der B’s) gleich der Anzahl der 2en (bzw. C’s)
Reihenfolge der Terminalsymbole ∃ x ∈ L(G3) gilt die 0en in x kommen vor den 1en in x und diese vor den 2en in x. Damit ist bewiesen das L(G3) = {0n1n2n; n ≥1}.
Nichtdeterminismus ⇒ Relation, keine Funktion
x ∈ (VN ∪ VT)*,mehrere x’ mit x ⇒ x’ (endlich viele x’) Graphische Darstellung der Ableitung S
… …
Blätter des Baumes = Wörter der erzeugten Sprache Definition: (Chomsky-Hierarchie)
Es sei G = (VN, VT, P, S) und V = VN ∪ VT. Dann ist G vom:
Typ 0 falls keine Einschränkungen vorliegen.
Typ 1 (oder kontextsensitiv) falls jede Regel die Form α1Aα2 hat, wobei A ∈VN; α1,α2 ∈V* mit einer Ausnahme: S→
ε
, dann darf S aber in keiner rechten Seite einer Regel vorkommen.Typ 2 (oder kontextfrei), falls jede Regel die Forma A→β, wobei A ∈ VN, β ∈ V+ mit derselben Ausnahmeregelung wie bei Typ 1
Typ 3 (oder regulär), falls jede Regel die Forma A→aB oder A→a hat, wobei A, B ∈ VN, a ∈ VT mit derselben Ausnahmeregelung wie bei Typ 1
Graphisch: Länge Länge
Typ 0: n Typ 1: n
1 1
Ableitungs- Ableitungs-
Schritte Schritte
Reguläre Grammatiken
Rechtslinear: wie oben definiert
Linkslinear: Regeln haben die Form A→Ba, A→a mit A, B ∈ VN, a ∈ VT
Definition: (Typ einer Sprache)
Eine Sprache L ist von Typ i (0 ≤ i ≤ 3) falls eine Grammatik existiert, die den Typ i hat und es gilt L =L(G)
Satz: Wenn 0 ≤ i ≤ j ≤ 3 und G(bzw. L) ist vom Typ j, dann auch vom Typ i
G Bezeichner ist kontextfrei, aber nicht regulär
Neue Regeln: Bezeichner →A|…|Z| a|…| z| A Bez Rest|...|Z Bez Rest a Bez Rest|…|z Bez Rest|_ Bez Rest
Bez Rest → A|…|Z| a|…|z|_|0|…|…|9|A Bez Rest|...|Z Bez Rest
a Bez Rest|…|z Bez Rest|_ Bez Rest| 0 Bez Rest|…|9 Bez Rest P1 = {S→0S, S→0}; L(G1) = {0n; n≥1} ist regulär
P2 = {S→0S1, S→01} ist kontextfrei, aber nicht regulär
P3 = {S→0SBC, S→0BC, CB→BC, 0B→01, 1B→11, 1C→12, 2C→22} mit L(G3) = {0n1n2n; n ≥1} ist vom Typ 0 wegen der Regel CB→BC wird durch CX→BX und BX→BC (wobei x eine Variable ist) ersetzt. Damit ist G3 kontextsensitiv. L(G3) ist vom Typ 1, aber nicht vom Typ 2. (Beweis später!)
Wegen der Forderung |w1| ≤ |w2| kann das leere Wort ε bei Typ 1,2,3 Grammatiken nicht abgeleitet werden.
Aufgabe: Erweiterung um ε ∈ L(G) Typ 0: Hinzunahme von S → ε
Typ 1 / Typ 2: G = (VN, VT, P, S). Setze VN’ = VN ∪ {S’} mit S’ ∉ VN ∪ VT und
P’ = P ∪ {S’ → S, S → ε}. G’ ist vom Typ 1 oder 2 und L(G’) = L(G) ∪ {ε}.
Typ 3: G = (VN, VT, P, S) mit ε ∉ L(G), G’ = (VN’, VT’, P’, S’) durch VN’ ∪ {S’} mit S’ ∉ VN ∪ VT P’ = P ∪ {S’ → α| S → α ∈ P} ∪ {S’ → ε}, G’ ist vom Typ 3 und L(G’) = L(G) ∪ {ε}.
Beispiel: G = (VN, VT, P, S) mit VN = {S}, VT = {0} und P {S → 0S, S → 0}
ε ∉ L(G) ⇒ G’ = (VN’, VT’, P’, S’) mit VN’ = {S’,S} und P’ = {S’→ ε| 0S| 0, S → 0S|0}
L(G’) = {0n; n ≥0} (leeres Wort möglich!) Mengendiagramm
Satz: Zwischen den 4 Sprachklassen vom Typ i (0 ≤ i ≤ 3) besteht eine echte Hierarchie, die Chomsky-Hierarchie
Beweis: s.o. (teilweise, Rest Später)
L’’ = {xy, x ist ein Programm, y ist eine Eingabe und x stoppt bei der Eingabe von y nach endlich vielen Schritten }
ist vom Typ 0 aber nicht vom Typ 1. (Beweis später) Satz: Jede Sprache vom Typ 0 ist aufzählbar.
Beweis: L vom Typ 0, G = (VN, VT, P, S) mit L=L(G). Es sei w ∈ L(G) dann ∃ n mit S ⇒nw (x nach der Definition von L(G)).
Setze ƒ’(n) = w also ∃ M ⊆ ù so dass ƒ’:M→L. M ist abzählbar ⇒ surjektive Funktion g ù→M. Setze ƒ:ù→L. ƒ ist surjektiv ∀ w ∈ L, ∃ m ∈ M mit ƒ’(m) = w. Da g surjektiv gilt:
|g-1(m)| ≥ 1; |ƒ-1(w)| = |g-1(ƒ-1(w))| ≥ 1
Die Ableitung S ⇒nw ist ein Algorithmus für ƒ’(n)
Satz: Es gibt entscheidbare Sprachen, die nicht vom Typ 1 sind. Der Beweis siehe Literatur (Schöning)
Abzählbare Sprachen
Aufzählbare Sprachen Entscheidbare Sprachen Kontextsensitive Sprachen
Kontextfreie sprachen
Reguläre Sprachen
Satz: Jede Sprache vom Typ i mit 0 ≤ i ≤ j ≤ 3 ist entscheidbar.
Es gibt einen Algorithmus, der bei Eingabe einer kontextsensitiven Grammatik G = (VN, VT, P, S) und eines Wortes x ∈ VT* in endlicher Zeit entscheidet, ob x ∈ L(G) oder x ∉ L(G).
Beweis: Idee: Betrachte alle Wörter, die aus n-Schritten ableitbar sind.
Für m, n ∈ ù die Mengen Tmn = {w ∈ (VN ∪ VT)*; |w| ≤ n und w lässt sich aus S in höchstens n Schritten ableiten}
Tmn ; n ≥ 1 induktiv definieren
T0n = {S}; T n m+1 = Abl.(T n m) ( = Ableiten)
Abl.(X) = X ∪ { w ∈ (VN ∪ VT)*; |w| ≤ n und w’⇒ w für ein w’ ∈ X}
Beispiel: S→aSBC|aBC; CB→BC; aB→ab; bB→bb; bC→bc; cC→cc n=4: T04 = {S}
T14 = {S, aSBC, aBC}
T24 = {S, aSBC, aBC, abC}
T34 = {S, aSBC, aBC, abC, abc}
T44 = {S, aSBC, aBC, abC, abc}
= T34
Da es nur endlich viele Worte der Länge n gibt (in (VN ∪ VT)*)
∪ Tmn ist für jedes n eine endliche Menge.
m≥0
Es gibt ein m mit Tmn = Tm+1n = Tm+2n = …
Falls man x mit |x| = n in L(G) dann muß x∈∪ Tmn und damit Tmn für ein m ∈ ù.
m≥0
Input (G,X); {|x|=n}; T={S}
Repeat T1=T
T=Ableitung(T1) Until(x∈T) or (T=T1) IF (x∈T) Then
write (‚x liegt in L(G)’) ELSE
write (‚x liegt nicht in L(G)’) END
Bedeutung der Grammatiken
Reguläre und kontextfreie Grammatiken – wichtig für Compilerbau Weitere Grammatiken zwischen Typ 2 und 3
Bei konkreten Fragestellungen: Grammatik kontextsensitiv
Probleme im Wesentlichen durch kontextfreie Sprache ausdrücken. Sonderfall separat anzuhandeln Beispiel: Syntax von Programmiersprachen
Sonderfälle: Typenverträglichkeit, korrekte Anzahl von Parametern in Prozeduraufrufen Backus-Naur-Form (z.B. Algol 68)
-Statt A→β1|β2…|βn schreibe A:= β1|β2…|βn
-Erweiterte Backus-NAur-Form: (EBNF) A:= α[β]γ für die Regeln A→αγ|αβγ
A:= α{β}γ für die Regeln A→αγ|αβγ mit β→B|ββ
Endliche Automaten
Bezeichner→x Bez Rest, Bez Rest→y Bez Rest, u Bez Rest|3 → xyu3 b = Blank Bezeichner ⇒ xBez Rest ⇒ xyBez Rest ⇒ xyuBez Rest ⇒ xyu3 -Eingabeband
Lesekopf
Restaufgabe als Zusatzinformationen Abarbeiten von Eingabeworten
Arbeiten des Lesekopfes in einem Schritt: - ließ Buchstaben
→ (a) geht in Feld nach rechts
(b) abhängig vom gelesenen Buchstaben und aktuellem Zustand setzt der Automat einen (neuen) Zustand
- Iteration der Schritte bis zum 1. b
- Zustand des Automaten ∈ {Endzustand} → Wort erkannt - Zustand des Automaten ∉ {Endzustand} → Wort nicht erkannt Definition: Ein deterministischer endlicher Automat (DFA) ist ein 5-Tupel M=(Z, V, δ, qm, F)
- Z ist eine endliche, nicht leere Menge („Zustandsmenge“) - V ist eine endliche, nicht leere Menge („Eingabealphabet“) - δ : Z V → Z („Überführungsfunktion“)
- qm ∈ Z („Startzustand“) - F ⊆ Z („Endzustand“) Bemerkung: δ ist partiell
Definition: Es sei M = (Z, V, δ, qm, F) ein DFA (entscheidbarer Automat), dann :
∧ δ : Z V* → Z induktiv
∧ ∧ ∧
δ (q,ε) = q, δ (q, ax) = δ (δ(q,a),x) mit q ∈ Z; x ∈ V* und a ∈ V Die von M akzeptierte Sprache T(M) = {x V*; δ (qm, x) ∈ F}
Beispiel: V = {0, 1}
(Endzustand)
-M1 = {qm, q1, q2}, {0, 1},δ qm, {q1} -δ als Zustandstafel
1) x1 = 000111
qM q2 q2 q1 q1 q1 q1 ∈ F 2) x1 = 1110
qM qM qM q2 q2 ∈ F
x y u 3 b
x1 x2 x3 …. xn b b
Augenblicklicher Zustand
Gelesenes Zeichen
Folgezustand δ(q, a)
qM 0 q2
qM 1 qM
q1 0 q1
q1 1 q1
q2 0 q2
q2 1 q1
0 0 0 1 1 1 b
1 1 1 0 b
Bez Rest
Anfang- Zustand
zu Beispiel 1)
1 0 0,1
Start 0 1
Definition: Zustandsgraph
Der Zustandsgraph eines deterministischen endlichen Automaten M = (Z, V, δ, qm, F) ist ein gerichteter Graph mit Beschriftungen:
1. Die Knoten entsprechen den Zuständen
2. Für jedes Paar (q, a) ∈ Z V mit δ (q, a) ist definiert, führt ein Pfeil mit Beschriftung a von q nach q’ = δ (q, a) a
Start 3. Darstellung des Anfangzustands 4. Darstellung des Endzustands Vereinfachung:
0
0,1 plus andere Varianten sinngemäß
1
1 0 0, 1
M1 Start 0 1
T(M) = {x01y; x,y ∈ {0, 1}*}
Sprache, die Bezeichner einer Programmiersprache erkennt:
Bezeichner = Wörter über V = {0, ...9, a, ...z, A…Z, _} die mit einem Buchstaben oder Unterstrich beginnen.
Start a... z, A...Z, _ x ∈ V
≠ a,… z, A,…Z, _ x ∉ V
x ∈ V
Endliche Maschinen – endliche Automaten mit Ausgabe Schreib/Lesekopf
Gedächtnis in Form eines Zustands Ausgabeband x1 x2 x3 …. xn b b
qM q2 q1
q
q
qM
q q’
q q’
q q’
qM q2 q1
Bezeichner Bez Rest
Fehler
Definition: Eine endliche deterministische Maschine (DFA) ist ein 7-Tupel M = (Z, VE, VA, δ, λ, qm, F) Z = endliche, nicht leere Menge („Zustandsmenge“)
VE = endliche, nicht leere Menge („Eingabealphabet“) VA = endliche, nicht leere Menge („Ausgabealphabet“) δ: Z VE → Z ist eine Funktion („Überführungsfunktion“) λ: Z VA → Z ist eine Funktion („Ausgabefunktion“) qm ∈ Z („Anfangszustand“)
F ⊂ Z („Menge der Endzustände“)
∧ ∧
Wie bisher kann δ zu δ und entsprechende λ zu λ erweitert werden.
Definition: Die von einem DFA M = (Z, VE, VA δ, λ, qm, F) erkannte Sprache ist ∧
T(M) = {x ∈ V*E;δ (x, qM) ∈ F} und die von M ausgegebene Sprache ist ∧
A(M) = {λ (qM, x) ∈ V*A, für alle x V*E mit δ (qM, x) ∈ F}
Wie für endliche Automaten kann eine Zustandstafel und Zustandsgraph definiert werden.
e/a mit e ∈ VE und a ∈ VA
Definition: Ein nicht-deterministischer endlicher Automat (NFA) ist ein 5-Tupel M = (Z, V, δ, qm, F) - Bestandteile wie beim deterministischen endlichen Automaten
- und der Relation δ ⊂ ( Z V) Z („Überführungsrelation“)
Definition: Es sei Z eine Menge, dann ist die Potenzmenge von Z definiert durch P(Z) = {A, A ⊂ Z}
δ(q, a) = {q’ ∈ Z, (q, a, q’) ∈ δ}
Funktion Überführungsrelation Z V → P(Z)
∧
[Funktion] δ kann zu δ fortgesetzt werden.
∧δ P (Z) V* → P(Z) durch induktive Definition
∧δ (Q, ε) = Q ∀ Q ⊆ Z
∧
δ (Q, x a) = ∪ δ (δ (q, a), x)
q ∈ Q
∧
Definition: Die von einem NFA M=(Z, V, δ, qm, F) akzeptierte Sprache ist T(M)={x∈V*,δ (qM, x) ∩ F≠0}
Zustandsgraph wie DFA, aber aus einem Zustand plus des Lesens eines a
Buchstaben führen evtl. mehrere Pfeile. Entsprechend bei Zustandstafeln.
Entsprechende Definition für nicht deterministische endliche Automaten (NFA) a
Beispiel: V = {0, 1}
0, 1 L = Menge der Worte, die an vorletzter Stelle eine Null haben.
Start 0 0, 1 L = {(0,1)*0(0,1)}
nicht deterministisch deterministisch
q q’
q
q2
q1
qM q1 q2
Die Sprachklassen:
- durch reguläre Grammatiken erkennte Sprachen
- durch deterministische endliche Automaten akzeptierte Sprachen - durch nicht-deterministische endliche Automaten akzeptierte Sprachen sind identisch.
Satz: Für jede Grammatik G git es einen NFA M mit L(G) = T(M)
Beweis: G = (VN, VT, P, S) eine reguläre rechtslineare Grammatik M = (Z, V, δ, qM, F) Z = V ∪ {x}; x ∉VN, pM = S
Beispiel: VN = {S, A}, VT = {0, 1}, P = {S→0S, A→0, S→1S, A→1, S→0A}
L = {x ∈ {0, 1}*, x hat an der vorletzten Stelle eine 1}
S→0S S→1S S→0A A→0
S⇒0S⇒01S⇒010A⇒0100
qS qS qS qA qE
S→0S ` (S,0,S) ∈ δ F = {{S,x}; S→ε ∈ P S→1S ` (S,1,S) ∈ δ {x}; S→ε ∈ P S→0A ` (S,0,A) ∈ δ δ (A,a,B) b A→aB ∈ P A→0 ` (A,0, ε) ∈ δ δ (A,a,x) b A→a ∈ P
Für n ≥ 1 a1, a2,…an ∈ L (G) genau dann, wenn es eine Folge von Variablen A1, A2,.. An-1
mit S⇒a1A1⇒a1a2A2⇒….⇒a1a2…an-1An-1⇒a1a2…an-1an gibt und wenn es eine Folge von Zuständen A1,.. An-1 mit δ (S, a1, A1) δ (A1, a2, A2)… δ (An-1, an, x) gilt und wenn
∧δ (S,a1,a2,.. an) = x mit a1,a2,…an ∈ T(M) gilt.
n = 0, ε ∈ L(G) genau dann wenn S ∈ F
Satz: Jede von einem NFA akzeptierte Sprache ist auch durch einen DFA akzeptierbar
1
0 0
0
Start 1 1
1 0
0,1 0,1 0,1
Werden nicht erreicht 0,1
0 1 0 0 b b
Reguläre Grammatiken
DFA NFA
{S}
{S,x} {S,x,ε}
{S,ε}
{x,ε}
{ε}
0
{x}
Beispiel: Start 0 0, 1
- Nicht-Determinismus: Zustand Menge von Zuständen
- Ansatz {Folgezustand} ist ein Zustand
0,1
Z’ {{S,x, ε}, {S,x}, {S, ε}, {S}, {x}, {ε
}, ∅}
Idee: die Menge Z
qder Zustände in einem q aus Z
∪ Zq bei lesen eines Buchstabens b q ∈ Z{S,x}, Eingabesymbol 0, ZS = {x,S}, Zx={ε
}
Folgezustand von {S,x} bei lesen von 0 ist {S, x,
ε}
Beweis: Es sei M = (Z,V,
δ, qM, F) ein gegebener NFA. Setze M’ =(Z’,V,
δ’, q’M, F’) mit Z’ = P(Z), ∧δ’ (Q,a) = ∪ δ (Z,a) = δ (Q,a) , Q ∈ Z’ qM’ = {qM}, F’ = Q ⊂ Z, Q ∩ F ≠ ∅
q ∈ Z ∧
Für alle x = a1,..an ∈ V gilt x ∈ T(M) genau dann wenn δ’ (qM,x) ∩ F, F ≠ ∅ genau dann wenn es eine Folgen von Teilmengen Q1,Q2,..Qn von Z mit δ (q’M,a1) = Q1, δ’ (Q1,a2) = Q2 … δ’ (Qn-1,an) = Qn
∧
und Qn ∩ F ≠ ∅ genau dann wenn δ’ (q’M,x) ∈ F’ genau dann wenn x ∈ T(M’) Lk = {x ∈ {0,1}*, |x| ≥ k, das k-letzte Zeichen von x ist 0}, k ≥ 1
Start 0 0,1 0,1 … 0,1
Es gibt keinen DFA, der Lk akzeptiert und mit weniger als 2k Zeichen auskommt. Wenn M ein DFA
∧ ∧
mit < 2k Zuständen. Dann gilt es 2 verschiedene Wörter y1, y2 ∈ {0,1}k sodaß δ (Z0, y1) = δ (Z0, y2).
Es sei i die erste Position an der y1 und y2 sich unterscheiden (1 ≤ i ≤ k) w ∈ {0,1}i-1 beliebig. Dann y1 = u0v und y2 = u1v’ mit |v| = |v’| = k-i. y1w wird betrachtet y1w ∈ Lk (y1w = u0vw) und y2 w ∉ Lk i-te Position
∧ ∧ ∧ ∧ ∧ ∧
δ (Z0,y1,w) = δ ( δ (Z0,y1), w) = δ ( δ (Z0,y2),w) = δ (Z0,y2,w) y1w ∈ Lk genau dann wenn y2 ∈ Lk Satz: Jede durch endliche deterministische Automaten erkennbare Sprache ist regulär.
0 0
0
Start 1 Idee: Zustand als Nichtterminalsymbol 0
1 1
1
q0 ⇒ 1q0 ⇒ 11q0 ⇒ 110q1 ⇒ 111 q0 q0 q0 q1 q2 ∈ F q0→1q0 q0→1q0 q0→0q1 q1→1
1 1 0 1 b b
S x
εZ
0Z
1Z
2 Zkq
0q
1q
2q
3Beweis: Es sei M = (Z, V, δ,qM,F) ein DFA, o. B. d. A. sei Z ∩ V = ∅ Definiere G = (VN, VT, P, S) mit VN = Z, VT = V, S = qM
P bestehlt aus folgenden Regeln:
- Jede δ-„Anweisung“ δ (Z1,a) = Z2 ` Z1 → aZ2 ∈ P und falls Z2 ∈ F zusätzlich Z1→ a ∈ P - Spezialfall qM ∈ F. Definiere ein neues Startsymbol S’ und die Regel S’→S mit S’→a für alle
- S→a ∈ P in P hinzu.
- G ist regulär.
Für alle x = a1,a2,.. an ∈ V* x ∈ T(M) genau dann wenn:
- es gibt eine Folge von Zuständen Z0... Zn mit Z0 = qM, Zn ∈ F und für 1≤i≤n δ (Zi-1, ai) = Zi - es eine Folge von Variablen Z0,.. Zn mit Z0 = S gibt und gilt Z0⇒a1Z1⇒a1a2Z2⇒…
a1…,an-1, Zn-1⇒a1….an
- x ∈ L(G) Anwendung – Textsuche
Problem: Gegeben ist eine Menge von Wörtern und es sollten alle Dokumente gefunden werden, die eines (oder alle) dieser Wörter enthalten
Anwendung: Internet und Online-Textsammlung Lösung: Suchmaschinen→invertierte Listen Anwendung von endlichen Automaten:
1) Die zu durchsuchende Sammlung ändert sich häufig / schnell 2) Die zu durchsuchende Dokumente lassen sich nicht katalogisieren
Angabe eines NFA eines Schlüsselwortes a1, …ak
Start a1 a2 ak
…
NFA „web“ und „ebay“
e b w
Start
¬ e b a y
Der NFA ist kein Programm:
1) Programm zur Simulatin von NFA
2) Umwandlung NFA in DFA und schreiben eines Programms zur Simulation des NFAs
DFA zur Erkennung von Schlüsselwörtern:
Konstruktion von NFA zu DFA bei solchen NFA’s (x für Schlüsselwörter x) führt zu DFA’s deren Auswahl an Zuständen niemals größer als bei Ausgangs NFA’s sind.
Konstruktion:
a) Zustandsmenge des DFA
1) Startzustand qM des NFA → Startzustand {qM} des DFA
2) Angenommen p sei Zustand des NFA der von qM über a1, …an erreicht wird qM, P jedem zustand von NFA der von qM über ein Wort aj, aj+1, an 1 < j ≤ m erreicht werden kann.
b) Regeln: Für jeden Zustand q des neuen DFA, {qM,P1,…Pi}, für jedes Eingabesymbol x, wohin qM und Pi in NFA führen, und fügt diesen DFA-Zustand q einen Übergang mit der Beschriftung x zu dem DFA- Zustand hinzu, der aus qM und aller Zustände besteht, in die qM und die Pi im NFA durch x „überführt“
werden.
q
Mq
1q
2 qkZ
0Z
1Z
2 Z3Z
5Z
6Z
7 Z8Reguläre Ausdrücke
Definition: Induktive Definition der regulären Ausdrücke - ∅ ist ein regulärer Ausdruck
- ε ist ein regulärer Ausdruck
- Für jedes a ∈ V ist a auch ist ein regulärer Ausdruck
- Wenn α, β ist ein regulärere Ausdrücke sind, dann auch αβ, (α | β) sowie (α)* Definition: Die von regulären Ausdrücken akzeptierte Sprache ist definitiert durch:
- L(∅) = ∅ - L(ε) = {ε}
- L(a) = {a} mit a ∈ V - L(αβ) = L(α) L(β) - L(α | β) = L(α) ∪ L(β) - L((α)*)= L(α)*
Beispiele: (a|b) = {a, b}; (a|b)(a|b) = {aa, ab, ba, bb}; (ab)* = {(ab)*; n≥0}; anbm = {anbm; n ≥ 0, m ≥ 0}
(0|(0|1)*00) = {x ∈ {0, 1}*; x endet entweder mit 00 oder ist 0}
Bemerkung: Alle endlichen Sprachen sind durch reguläre Ausdrücke beschreibbar.
A = {x1, …xn}; n ≥ 0; xi ∈ V α = x1|x2| …|xn `L(α) = A
Satz von Klenne: Die Menge der durch reguläre Ausdrücke beschreibene Sprachen ist genau die Menge der regulären Sprachen.
Beweis:
„<=“
Es sei m = (Z, V, δ, qM, F) ist ein DFA.Zeige: Es gibt eine regulären Ausdruck γ mit L(γ) = T(M) Z = {Z1, …Zn} mit Z1 = qM
Rkij = { x ∈ V*; die Eingabe von x überführt den Automaten von Zustand Zi in den Zustand Zj, ∧
(also δ (Zi, x) = Zj), so dass keiner der Zwischenzustände außer Zi und Zj selbst einen Index haben, der Größer als k ist}
Zi Zj
Induktive Definition von Rkij k+1 k
Induktions-Anfang: k = 0
Fall 1: i ≠ j R0ij ={a ∈ V, δ(Zi, a) = Zj}
Fall 2: i = j R0ij ={ε} ∪ {a ∈ V, δ(Zi, a) = Zj}
In beiden Fällen ist R0ij endlich. Also gibt es einen regulären Ausdruck α0ij mit L(α0ij) = R0ij Induktions-Schluss: Es gibt reguläre Ausdrücke αkij mit L(αkij) = Rkij
Ziel: Definiere einen regulären Ausdruck für Rk+1ij
Fall 1: Beim Übergang von Zi nach Zj wird Zk+1 nicht erreicht Rk+1ij = Rkij
Fall 2: Beim Übergang von Zi nach Zj wird Zk+1 erreicht Rk+1ij = Rki k+1 (Rkk+1, k+1)* Rkk+1, j
…
Rki, k+1 Rkk+1, k+1 Rkk+1, k+1 Rkk+1, j
⇒ Rk+1ij = Rkij ∪ Rki k+1 (Rkk+1, k+1)* Rkk+1, j ⇒ αk+1ij = αkij | αki k+1 (αkk+1, k+1)n αkk+1, j
T(M) = ∪ Rn1,j ; T(M) = αn1,i1 | αn1,i2 | …| αn1,in mit F = {Zi1, Zin} Zi ∈ F
Zi Zk+1 Zk+1 Zk+1 Zj