Vorwort zur 1. Auflage Dieses Buch umfasst den Inhalt der Theoretischen Informatik, wie er in etwa an der Universität Koblenz-Landau im Grundstudium des Diplomstudienganges Informatik gelehrt wird. Es ist aus verschiedenen Vorlesungen von Lutz Priese und zwei Skripten von Sven Hartrumpf und Katrin Erk entstanden. Zum Zeitpunkt der Erstellung dieses Buches war Frau Erk noch Studentin. Das Buch ist das Ergebnis eines Ringens beider Autoren aus zwei unterschiedlichen Warten: Die professorale Sichtweise von Priese auf formale Korrektheit und die studentische Sichtweise von Erk auf Klarheit und Vermittelbarkeit der Inhalte sind hier eine Symbiose eingegangen. Das Resultat ist ein (hoffentlich) formal korrektes und doch relativ leicht lesbares Buch, in dem der gesamte relevante Stoff der Grundstudiumsvorlesungen mit allen Beweisen dargestellt ist. Wir haben nicht den leichten (modernen?) Weg beschritten, Beweise überall dort, wo sie anspruchsvoll werden, zu übergehen oder nur noch zu skizzieren. Im Gegenteil, je anspruchsvoller der Beweis, um so mehr Details haben wir zu übermitteln versucht, um Studenten zu helfen, sich die Beweise zu erarbeiten. Wir glauben, dass gerade eine vollständige Beweisführung an allen Stellen das Verstehen des Buches erleichtert und nicht etwa erschwert. So werden z.B. die Existenz der Greibach-Normalform in kontextfreien Grammatiken, die Gleichwertigkeit von µ-rekursiven und Turing-berechenbaren Funktionen, die Existenz universeller Maschinen, der Abschluss kontextsensitiver Sprachen unter Komplementbildung etc. im Detail bewiesen. Danksagen möchten wir zahlreichen Studenten, deren Kommentare und Fragen zu Skript-Vorläufern sehr hilfreich waren. Besonderer Dank gilt Sven Hartrumpf für eine sehr schöne erste Skriptversion zum Teil Berechenbar” keit“ (einschließlich des Kapitels Turing-Maschinen“) sowie Mark Eggen” stein, Christoph Gilles, Harro Wimmel und Jörg Zeppen für das Korrekturlesen des Textes. Vielen Dank schließlich auch an den Springer-Verlag für die gute Zusammenarbeit. Koblenz, im Januar 2000 Lutz Priese, Katrin Erk Vorwort zur 2. Auflage Wir haben den Text der ersten Auflage unverändert gelassen, bis auf die Verbesserung einiger weniger Schreibfehler. Neu ist ein Abschnitt zu reversiblen Rechnungen (14.8) im Kapitel Alternative Berechnungsmodelle“. Mit re” versiblen Rechnungen kann man einige interessante Rechenmodelle abstrakt beschreiben: In der Chemie werden nahe dem thermodynamischen Gleichgewicht Prozesse umkehrbar. In der Physik sind reversible Prozesse ohne Informationsverlust wichtig in der Quantenmechanik. Sie spielen eine grundlegende Rolle für Quantenrechner, ein aktuelles Forschungsgebiet. Wir stellen reversiblen Rechnungen als eine unkonventionelle Grundlage für weitere alternative Rechenmodelle recht ausführlich auf 33 neuen Seiten vor. Koblenz, im August 2001 Lutz Priese, Katrin Erk Vorwort zur 3. Auflage Der Text der zweiten Auflage wurde für die dritte Auflage um einen Abschnitt über formale Splicing-Systeme im Kapitel über alternative Berechnungsmodelle ergänzt, und es wurden die Beweise zweier Sätze neu geführt. Einige wenige Schreibfehler wurden korrigiert und eine Umstellung auf eine entschärfte Version der neuen deutschen Rechtschreibung durchgeführt. In den letzten Jahrzehnten haben biologisch motivierte Rechenkonzepte einen starken Auftrieb erhalten. Hierzu zählen ältere Konzepte wie Genetische Algorithmen und Neuronale Netze, die in der Praktischen Informatik einen festen Platz gefunden haben. Aus dem Bereich des DNA Computing wurden diverse Varianten von formalen Splicing-Regeln in die Theoretische Informatik aufgenommen. Wir stellen davon H-Syteme und Test-tubeSysteme vor. In dem neuen Abschnitt zeigen wir detailliert, dass endliche HSyteme nur reguläre Sprachen generieren können, während man mit sehr einfachen Test-tube-Systemen die Rechnung beliebiger Turing-Maschinen nachspielen kann. Satz 14.8.19 in der zweiten Auflage erwies sich leider als inkorrekt. In diesem Satz wurde im Wesentlichen gesagt, dass zu jeder Grammatik G = (V, T, R, S) über einem Alphabet Σ mit der erzeugten Sprache L(G) = {w ∈ Σ ∗ |S =⇒∗G w} eine chemisch reversible Grammatik G0 = (V 0 , T, R0 , S 0 ) und ein Sondersymbol ω 6∈ Σ existieren mit L(G) = {w ∈ T ∗ |S 0 =⇒∗G0 w ω}. Dies ist aber nicht richtig, vielmehr benötigt man für die chemisch reversible Grammatik G0 zwei Sondersymbole, α als Startmarker und ω als Endmarker, und es gilt dann L(G) = {w ∈ T ∗ |S 0 =⇒∗G0 α w ω}. Ferner wurden wir dankenswerterweise von Herrn Immanuel Stampfli aus Bern auf einen recht versteckten Fehler im Beweis von Lemma 13.6.12 hingewiesen. Dieses Lemma besagte, dass jede Rechnung eines Postschen Normalsystems in einem geeignetem Postschen Korrespondenzsystem nachgespielt werden kann, und wurde im Satz 13.6.9 zum Beweis der Unentscheidbarkeit des Postschen Korrespondenzproblems benötigt. Klassischerweise simuliert man mit Postschen Korrespondenzsystemen die Arbeit von TuringMaschinen oder Grammatiken und nicht von Postschen Normalsystemen, wie wir es versucht hatten. Da sich der Fehler nicht einfach beheben ließ, folgen wir in dieser dritten Auflage dem üblichen Weg und simulieren im neuen Lem- X Vorwort ma 13.6.12 mit Postschen Korrespondenzsystemen die Arbeit von speziellen Grammatiken, nämlich Semi-Thue-Systemen. Koblenz, im September 2007 Lutz Priese 2. Begriffe und Notationen In diesem und dem nächsten Kapitel versuchen wir, alle mathematischen Konzepte, die in diesem Buch benutzt werden, kurz vorzustellen. Tatsächlich kann eine Einführung in die Theoretische Informatik mit erstaunlich wenigen mathematischen Sachverhalten auskommen. Trotzdem können wir in diesem Kapitel nicht über eine knappe Beschreibung hinausgehen. Insofern ist natürlich ein vertrauterer Umgang mit der Mathematik hilfreich für das Verständnis dieses Buches. 2.1 Logische Formeln und Konnektoren Aussagen sind hier Sätze, von denen man sinnvollerweise sagen kann, dass sie wahr oder falsch sind (ohne dass konkret bekannt sein muss, ob sie wahr sind). Wahre Aussagen sind zum Beispiel Das Wort Opossum hat 7 Buchstaben“ und ” 5 ist eine natürliche Zahl.“ ” Eine falsche Aussage ist dagegen 5 ist eine gerade Zahl.“ ” Auch der Satz Es gibt unendlich viele Primzahlzwillinge‘, d.h. Paare p1 , p2 von ” ’ Primzahlen, für die p2 − p1 = 2 gilt.“ ist eine Aussage – nur weiß man bis heute nicht, ob sie wahr oder falsch ist. Um allgemein über eine Aussage sprechen zu können, gibt man ihr einen Namen. So kann zum Beispiel der Name x stehen für 5 ist eine gerade Zahl“, ” und wir können dann sagen, dass x eine falsche Aussage ist. Für eine Aussage x sagt man statt x ist wahr“ auch x gilt“ oder einfach x“. Der Name x ” ” ” steht für die Aussage in derselben Weise, wie ein Funktionsname f für eine Funktion steht: Über die tatsächliche Berechnungsvorschrift sagt der Name f nichts aus, es kann dahinter eine simple Addition stehen oder eine beliebig aufwendige Funktion. Genauso sagt auch der Name x nichts über den Inhalt, die Bedeutung der Aussage aus. Einzelne Aussagen lassen sich verknüpfen zu komplexeren Aussagen. Betrachten wir zum Beispiel den Satz 4 2. Begriffe und Notationen Das Wort funkelnagelneu ist ein Substantiv, und Reliefpfeiler ” ist ein Palindrom.“ Dieser Satz ist eine zusammengesetzte Aussage, und die Teilaussagen sind mit und“ verknüpft. Ist die Aussage wahr oder falsch? Die erste Teilaussage ” ist falsch, die zweite ist wahr. Die Teilaussagen sind mit und“ verbunden, ” und intuitiv würde man sagen, dass die Behauptung, es gelte etwas Falsches und etwas Wahres, falsch ist. So ist es auch in der Logik: Die obige Aussage ist falsch. Allgemein gilt: Ob eine zusammengesetzte Aussage wahr oder falsch ist, hängt davon ab, ob ihre Teilaussagen wahr oder falsch sind, und davon, wie die Teilaussagen verknüpft sind. Wenn nun der Name x für den ersten Teil der obigen Aussage steht und y für den zweiten, dann lässt sich die gesamte Aussage schreiben als x und y“ ” oder, in Symbolen, als x ∧ y“. Wenn man so von den Inhalten der Aussagen ” abstrahiert hat und nur noch Aussagennamen und verknüpfende Symbole vor sich hat, spricht man statt von einer Aussage oft von einer Formel. Insgesamt wollen wir die folgenden Konnektoren (logischen Symbole für Verknüpfungen) verwenden: F ∧ G steht für F und G“. Eine und“-Aussage ist wahr, falls beide ” ” Teilaussagen wahr sind. Zum Beispiel ist Das Wort Opossum hat 8 Buchstaben, und es enthält genau 2 ” o‘.“ ’ eine falsche Aussage – die erste Teilaussage ist falsch. F ∨ G steht für F oder G“. Eine oder“-Aussage ist wahr, falls mindes” ” tens eine Teilaussage wahr ist. Das oder“ ist hier also nicht exklusiv, ” im Sinn eines entweder-oder“, gemeint. Eine wahre Aussage ist zum ” Beispiel 5 ist eine gerade Zahl, oder 8 ist durch 2 teilbar.“ ” ¬F steht für nicht F“. Die Negation einer Aussage ist wahr genau dann, ” wenn die Aussage falsch ist. Eine wahre Aussage ist zum Beispiel Es ist nicht der Fall, dass 4 eine Primzahl ist.“ ” F =⇒ G steht für wenn F , dann G“ oder aus F folgt G“. Die wenn” ” ” dann“-Aussage F =⇒ G ist wahr, falls entweder F und G beide wahr sind, oder falls F falsch ist. Aus einer falschen Voraussetzung kann man also alles Beliebige schließen. Zum Beispiel ist Wenn 3! = 6 ist, dann ist 4! = 24“ ” eine wahre Aussage, genau wie Wenn 3! = 5 ist, dann ist 4! = 2.“ ” Dagegen ist Wenn 6 durch 3 teilbar ist, dann ist 6 eine Primzahl“ ” offenbar eine falsche Aussage. In F =⇒ G heißt F auch die Prämisse, G die Konklusion der Folgerung. 2.1 Logische Formeln und Konnektoren 5 F ⇐⇒ G steht für F genau dann, wenn G“. Eine solche Aussage ist ” wahr, wenn entweder beide Teilaussagen wahr oder beide falsch sind. Eine wahre Aussage ist zum Beispiel Die Zahl 234978 ist durch 3 teilbar genau dann, wenn die Quer” summe von 234978 durch 3 teilbar ist.“ Im Fließtext schreiben wir statt ⇐⇒ auch gdw. Wenn das genau dann, ” wenn“ in Definitionen verwendet wird, etwa in der Form Eine natürliche Zahl ” heißt ungerade genau dann, wenn sie nicht durch 2 teilbar ist“, verwenden wir das Zeichen :⇐⇒“ in Analogie zu :=“. ” ” Bisher haben wir nur Aussagen über einzelne Objekte betrachtet, etwa die Zahl 5 oder das Wort Opossum. Oft geht es uns aber um Mengen von Objekten, von denen manche eine bestimmte Eigenschaft haben, andere nicht. Zum Beispiel haben manche Elemente der Menge der natürlichen Zahlen die Eigenschaft, gerade zu sein, und andere Elemente haben diese Eigenschaft nicht. Im Gegensatz zu den oben betrachteten Aussagen der Art 8 ist eine ” gerade Zahl“ enthält eine Eigenschaft eine (oder mehr) Variablen, wie in n ” ist eine gerade Zahl“. Eine solche Eigenschaft, ein sogenanntes Prädikat, kann je nach den Werten, die für die Variablen eingesetzt werden, wahr oder falsch werden. Zum Beispiel lässt sich der gerade genannte Satz, n ist eine gerade ” Zahl“, auffassen als ein Prädikat mit der Variablen n, P (n). Für n = 2 ist dies Prädikat wahr, für n = 3 ist es falsch. Für den Umgang mit Prädikaten übernehmen wir zwei weitere Symbole aus der Logik: ∀x P (x) steht für für alle x gilt P (x)“. Zum Beispiel kann man die Tat” sache, dass durch 6 teilbare Zahlen auch durch 3 teilbar sind, ausdrücken als ∀x ∈ N (x mod 6 = 0 =⇒ x mod 3 = 0). ∀ heißt auch Allquantor. ∃x P (x) steht für es gibt (mindestens) ein x, so dass P (x)“. Ein Bei” spiel dafür wäre etwa Es gibt mindestens ein Wort der deutschen Spra” che, das genau 5 e‘ und keine anderen Vokale enthält“ oder in Zeichen ’ ∃x (D(x) ∧ E(x)), falls D(x) heißt x ist ein Wort der deutschen Sprache“ ” und E(x) steht für x enthält genau 5 e‘ und keine anderen Vokale“. ” ’ ∃ heißt auch Existenzquantor. ∃!x P (x) steht für es gibt genau ein ¡ x, so dass P (x)“. Es kann ¢ als ” Abkürzung gesehen werden für ∃x P (x) ∧ ∀y (P (y) ⇐⇒ y = x) . Dazu sollte man noch anmerken: ¡ ¢ • ∀x ∈ A P (x)“ steht für ∀x ¡x ∈ A =⇒ P (x)¢ , und ” • ∃x ∈ A P (x)“ steht für ∃x x ∈ A ∧ P (x) . ” • Als eine¡ weitere Abkürzung schreiben wir ∃x ∈ A, y ∈ B P (x, y)“ für ¢ ” ∃x ∈ A ∃y ∈ B P (x, y) . 6 2. Begriffe und Notationen Beispiel 2.1.1. ¡ ¢ ∀ε > 0 ∃δ > 0 ∀x |x − x0 | < δ =⇒ |f (x) − f (x0 )| < ε heißt: Für alle ε, die größer als 0 sind, gibt es ein δ größer 0, so dass für jedes beliebige x gilt: Wenn |x − x0 | < δ ist, dann ist auch |f (x) − f (x0 )| < ε. Das ist gerade die bekannte Definition dafür, dass die Funktion f an der Stelle x0 stetig ist. (x, x0 , ε und δ sind in diesem Kontext Variablen für reelle Zahlen.) Hier kann man sich auch gut klarmachen, entspricht, ¡ dass es der Intuition ¢ ∀x ∈ A P (x)“ auf eine Implikation ∀x x ∈ A =⇒ P (x) zurückzuführen, ” und nicht auf ein ∧ wie ∃-Ausdrücke. Für alle ε gilt: Falls ε größer 0 ist, dann gibt es ein zugehöriges δ, so dass . . . Generell benutzen wir x, y, z, x1 , x2 etc. für Variablen über unterschiedliche Wertebereiche. Für welche Arten von Objekten (z.B. reelle Zahlen, natürliche Zahlen, deutsche Wörter, Formeln etc.) x, y, z gerade stehen, wird jeweils aus dem Zusammenhang klar. n, m, ni etc. benutzen wir meist als Variablen für natürliche Zahlen, f, g, h etc. für Funktionen, und F, G, H etc. für Formeln. Letztlich werden wir den Gebrauch von Bezeichnungen für Variablen sehr liberal handhaben, wie in der Informatik üblich. Neben den Konnektoren, die wir gerade eingeführt haben, benutzen wir auch die anderen üblichen mathematischen Abkürzungen, wie o.E. (ohne Einschränkung) oder o.B.d.A. (ohne Beschränkung der Allgemeinheit). Die Operatoren, die wir bislang eingeführt haben, binden unterschiedlich stark, nämlich – in fallender Bindungspriorität aufgeführt – 1. ¬, ∀, ∃ 2. ∧, ∨ 3. =⇒ , ⇐⇒ Um andere Bindungen auszudrücken, verwendet man Klammern, wie es auch oben im Beispiel zum ∀“ geschehen ist: Ohne die Klammerung hätte das ” ∀x“, das stärker bindet als das =⇒“, sich nur auf x mod 6 = 0“ bezogen. ” ” ” Beispiel 2.1.2. Ein Beweisverfahren, das wir in diesem Buch immer wieder verwenden, ist das der Induktion: Wenn man per Induktion beweisen will, dass alle Zahlen n ∈ N eine Eigenschaft P (n) haben, dann reicht es, zweierlei zu zeigen: Erstens, dass die Zahl 0 die Eigenschaft P besitzt; zweitens, dass, falls eine Zahl n die Eigenschaft P hat, auch n+1 diese Eigenschaft hat. Damit gilt dann schon, dass alle natürlichen Zahlen die Eigenschaft P haben. Das Prinzip der Induktion kann man mit einer kurzen logischen Formel beschreiben: Ist P (n) eine Eigenschaft, dann gilt: ¡ ¢ P (0) ∧ ∀n P (n) =⇒ P (n + 1) =⇒ ∀nP (n) 2.2 Grundkonzepte aus der Mengenlehre Was sind die typischen Eigenschaften einer Menge? Eine Menge enthält jedes Objekt nur einmal, und die Objekte sind ohne eine vorgegebene Ordnung 2.2 Grundkonzepte aus der Mengenlehre 7 zusammengefasst – die Menge {2, 1} ist identisch mit {1, 2}. Nach Cantor ist eine Menge eine Zusammenfassung von bestimmten wohlunterschiedenen ” Objekten unserer Anschauung oder unseres Denkens zu einem Ganzen“. Ein Beispiel einer Menge, die in diesem Buch häufig verwendet wird, ist die der natürlichen Zahlen. Die Objekte, die in einer Menge zusammengefasst sind, heißen auch die Elemente der Menge. Die Aussage x ist ein Element der Menge M“ schrei” ben wir in Zeichen als x ∈ M“. Es gibt mehrere Möglichkeiten, eine Men” ge anzugeben. Eine ist die explizite Angabe aller Elemente in geschweiften Klammern; oben haben wir diese Schreibweise für die Menge {1, 2} schon verwendet. Sie kann natürlich nur für endliche Mengen angewendet werden. Eine unendliche Menge kann man, ein wenig informell, in der Pünktchen” Schreibweise“ beschreiben, zum Beispiel die Menge der natürlichen Zahlen als {0, 1, 2, 3, 4 . . .}. Formal exakt ist dagegen die Beschreibung einer Menge über eine Eigenschaft: Ist P eine Eigenschaft, dann ist {x | P (x)} die Menge aller Objekte, die die Eigenschaft P besitzen. So könnte man zum Beispiel die Menge aller geraden natürlichen Zahlen beschreiben als {x ∈ N | x mod 2 = 0} oder als {x | ∃n ∈ N x = 2n}. Definition 2.2.1. Einige häufig gebrauchte Mengen tragen die folgenden Bezeichnungen: • N ist die Menge der natürlichen Zahlen einschließlich der 0, also die Menge {0, 1, 2, 3, . . .}, • N+ ist die Menge der natürlichen Zahlen ausschließlich der 0, also die Menge {1, 2, 3, 4, . . .}, • Z ist die Menge der ganzen Zahlen, {0, 1, −1, 2, −2, . . .}, • Q ist die Menge der rationalen Zahlen, • R ist die Menge der reellen Zahlen, • R+ ist die Menge der positiven reellen Zahlen, R+ = {x ∈ R | x > 0}. • [a, b] := {x ∈ R | a ≤ x ≤ b} ist das abgeschlossenen reelle Intervall von a bis b, • (a, b) := {x ∈ R | a < x < b} ist das offene reelle Intervall von a bis b , und (a, b], [a, b) sind analog definiert. • ∅ ist die leere Menge. Es gibt viele Notationen und Operationen im Zusammenhang mit Mengen. Die für unsere Zwecke wichtigsten sind in der folgenden Definition zusammengefasst. Definition 2.2.2. Seien M und N Mengen. • |M | ist die Anzahl der Elemente in M . |M | = ∞ bedeutet, dass M unendlich viele Elemente enthält. • M ∪ N := {x | x ∈ M ∨ x ∈ N } ist die Vereinigung von M und N . • M ∩ N := {x | x ∈ M ∧ x ∈ N } ist der Durchschnitt von M und N . 8 2. Begriffe und Notationen • • • • • M − N := {x ∈ M¡ | x 6∈ N } ist die Menge M ohne N“. ¢ ” M ⊆ N :⇐⇒ ∀x x ∈ M =⇒ x ∈ N – M ist eine Teilmenge von N . M = N :⇐⇒ M ⊆ N ∧ N ⊆ M – die Mengen M und N sind gleich. M ⊂ N :⇐⇒ M ⊆ N ∧ M 6= N – M ist eine echte Teilmenge von N . 2M := { N | N ⊆ M } ist die Potenzmenge von M , die Menge aller Teilmengen von M . • M1 × . . . × Mn := { (a1 , . . . , an ) | a1 ∈ M1 , . . . , an ∈ Mn } ist das Kreuzprodukt von n Mengen. Das Ergebnis ist eine Menge von n-Tupel, die alle möglichen Kombinationen von n Elementen enthält, so dass das erste Element aus M1 ist, das zweite aus M2 etc. Für ¬(x ∈ M ), ¬(M ⊆ N ) u.ä. schreiben wir auch x 6∈ M, M 6⊆ N usw. Beispiel 2.2.3. Die letzten zwei Konzepte verdeutlichen wir durch ein kurzes Beispiel. • Für die Menge M = {1, 2, 3} ist die Potenzmenge n o 2M = ∅, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3} . • Für die zwei Mengen M1 = { a, b } und M2 = { x, y } ist das Kreuzprodukt M1 × M2 = { (a, x), (a, y), (b, x), (b, y) }. Wenn man die Vereinigung, den Durchschnitt oder das Kreuzprodukt von mehr als zwei Mengen bilden will, kann man eine vergrößerte Variante“ der ” betreffenden Symbole verwenden. Definition 2.2.4. Sei A irgendeine Menge, und zu jedem a ∈ A sei eine weitere Menge Ma gegeben. Dann ist S a∈A Ma := {x | ∃a ∈ A x ∈ Ma } T a∈A Ma := {x | ∀a ∈ A x ∈ Ma } Konkret könnte das so aussehen: Beispiel 2.2.5. Wir betrachten die Menge A = {2, 3, 4} S und dazu die Mengen Ma = {x | ∃n ∈ N x = na } für a ∈ A. Dann ist a∈A Ma die Menge all 2 3 4 derer natürlichen Zahlen T x, die sich als n oder n oder n schreiben lassen für irgendein n ∈ N. a∈A Ma sind gerade die natürlichen Zahlen, deren zweite, dritte und vierte Wurzel in N liegt. Falls sich die Menge A wie in diesem Beispiel schreiben lässt als A = {i ∈ N | k ≤ i ≤ `}, bezeichnen wir die Vereinigungsmenge auch kürzer als [ k≤i≤` Mi oder ` [ i=k Mi . T Analog kann man für vorgehen. In gleicher Weise wie Vereinigung und ` Durchschnitt beschreiben wir auch das Kreuzprodukt: Xi=k Mi ist eine Abkürzung für Mk × . . . × M` . Formal lässt sich das per Induktion so definieren: 2.2 Grundkonzepte aus der Mengenlehre 9 Definition 2.2.6. Das Kreuzprodukt X ist definiert durch ` • Xi=k Mi := ∅ für ` < k, k • Xi=k Mi := Mk , und ³ ´ k+`+1 k+` • Xi=k Mi := Xi=k Mi × Mk+`+1 . n Das n-fache Kreuzprodukt einer Menge M , Xi=1 M , kürzt man auch ab 3 als M n . In Xi+1 Mi haben wir genaugenommen eine¡Rechtsklammerung, das ¢ heißt, Elemente aus dieser Menge haben die Form (a, b), c . Diese Objekte 3 identifizieren wir aber mit (a, b, c), so dass Xi=1 Mi = M1 × M2 × M3 gilt. 2.2.1 Relationen Eine Relation setzt Elemente mehrerer Mengen zueinander in Beziehung. Zum Beispiel könnte man die Tatsache, dass nach der gebräuchlichen Anordnung der Buchstaben im Alphabet a der erste, b der zweite Buchstabe ist und so weiter, ausdrücken in einer Relation, die jeden Buchstaben in Zusammenhang setzt mit seiner Ordnungsnummer. Formal könnte man diese Relation beschreiben als eine Menge, nämlich die Menge © ª (a, 1), (b, 2), (c, 3), . . . , (z, 26) In diesem Beispiel ist jedem Buchstaben genau eine Zahl zugeordnet. Aber es geht auch anders. Wir könnten die Anordnung der Buchstaben auch durch eine Relation < beschreiben mit a < b, a < c, . . . , a < z, b < c, b < d, b < e, . . . , y < z. < ist damit einfach eine Teilmenge von {a, b, c, . . . , y} × {b, c, d, . . . , z}. Ein weiteres Beispiel einer Relation, hier einer zwischen {a, b} und {1, 2, 3}, ist (a, 1), (a, 2), (b, 2), (b, 3) Man könnte sie graphisch so verdeutlichen: Wir haben die drei konkreten Relationen, die wir bisher kennengelernt haben, als Mengen beschrieben, und zwar als Teilmengen des Kreuzprodukts. Im ersten Fall ging es z.B. um eine Teilmenge des Kreuzprodukts der Mengen {a, . . . , z} und {1, . . . , 26}. Halten wir das formal fest (dabei verallgemeinern wir auch von einem Kreuzprodukt von zwei Mengen auf eines von n Mengen): Definition 2.2.7 (Relation). Eine n-stellige Relation R über den Mengen n M1 , . . . , Mn ist eine Menge R ⊆ Xi=1 Mi . 10 2. Begriffe und Notationen Betrachten wir ein weiteres Beispiel einer Relation, diesmal einer Relation nicht zwischen unterschiedlichen Mengen, sondern zwischen Elementen derselben Menge N: Beispiel 2.2.8. Man kann die ≤-Beziehung zwischen natürlichen Zahlen auffassen als zweistellige Relation ≤ = {(a, b) ∈ N × N | ∃c ∈ N a + c = b}. Statt (a, b) ∈ ≤ schreibt man natürlich üblicherweise a ≤ b. Eine Relation wie ≤ ist eine Ordnungsrelation. Sie beschreibt eine Anordnung der Elemente in N. Sie hat spezielle Eigenschaften: Zum Beispiel folgt aus a ≤ b und b ≤ c schon a ≤ c. Weitere wichtige Eigenschaften solcher und anderer Relationen beschreibt die nächste Definition. Definition 2.2.9. Eine zweistellige Relation τ ⊆ A × A heißt reflexiv gdw. ∀a ∈ A a τ a, irreflexiv gdw. ∀a ∈ A ¬(a τ a), symmetrisch gdw. ∀a, b ∈ A (a τ b =⇒ b τ a), antisymmetrisch gdw. ∀a, b ∈ A ¡ (a τ b ∧ b τ a =⇒ ¢ a = b), asymmetrisch gdw. ∀a, b ∈ A a τ b =⇒ ¬(b τ a) transitiv gdw. ∀a, b, c ∈ A (a τ b ∧ b τ c =⇒ a τ c). Äquivalenzrelation gdw. sie reflexiv, symmetrisch und transitiv ist. Ordnungsrelation (vom Typ ≤) gdw. sie reflexiv, antisymmetrisch und transitiv ist. Ordnungsrelation (vom Typ <) gdw. sie irreflexiv, asymmetrisch und transitiv ist. Eine Äquivalenzrelation τ ⊆ A × A partitioniert die Menge A in Teilmengen, in denen alle Elemente zueinander äquivalent sind. Das ergibt sich aus ihren Eigenschaften der Reflexivität, Symmetrie und Transitivität, die in der letzten Definition beschrieben sind. Zum Beispiel partitioniert die Äquivalenzrelation τ = {(x, y) ∈ N × N | x mod 2 = y mod 2} die Menge N in zwei Teilmengen: die der geraden und die der ungeraden Zahlen. Solche Teilmengen heißen Äquivalenzklassen. Definition 2.2.10 (Äquivalenzklasse). Sei τ ⊆ A × A eine Äquivalenzrelation. Dann heißen für a ∈ A die Mengen [a]τ := {b ∈ A | a τ b} Äquivalenzklassen von τ . Für die Teilmenge [a]τ heißt a Repräsentant. Die Menge aller Äquivalenzklassen heißt Partitionierung von A und wird mit A/τ bezeichnet: A/τ := {[a]τ | a ∈ A}. |A/τ |, die Anzahl der Äquivalenzklassen von A, heißt der Index von τ . 2.2 Grundkonzepte aus der Mengenlehre 11 Die Äquivalenzklassen einer Äquivalenzrelation τ haben folgende Eigenschaften: • a τ b ⇐⇒ [a]τ = [b]τ – zwei Elemente stehen dann und nur dann in der Relation τ ¡, wenn sie in derselben Äquivalenzklasse liegen. ¢ • ∀a, b ∈ A [a]τ = [b]τ ∨ [a]τ ∩ [b]τ = ∅ – verschiedene Äquivalenzklassen sind disjunkt. • A ist die disjunkte Vereinigung aller Äquivalenzklassen [a]τ mit a ∈ A. Die Elemente ein und derselben Äquivalenzklasse werden üblicherweise als gleich hinsichtlich τ angesehen. Man fasst alle gleichen Elemente in einer Menge [a]τ zusammen, die man als eine Art Makro-Element“ von A ” ansehen kann. Wenn wir noch einmal auf unser obiges Beispiel einer Äquivalenzrelation τ zurückgreifen, die N in die geraden und die ungeraden Zahlen partitioniert, so hat die Menge N/τ , bei der alle gleichen“ Zahlen zusam” mengefasst sind, zwei Elemente. 2.2.2 Funktionen Den Begriff einer Funktion kann man nun aufbauend auf dem Begriff der Relation definieren: Eine Funktion f : A → B, ist eine Relation, bei der jedem Element aus A genau ein Wert aus B zugeordnet wird (und eine partielle Funktion ist eine Relation, bei der jedem Element aus A höchstens ein Funktionswert zugeordnet ist). Damit ist eine Funktion f natürlich auch eine spezielle Menge und zugleich eine Relation: f ist eine Teilmenge des Kreuzproduktes A × B, die zusätzlich die gerade genannten Bedingungen erfüllt. Definition 2.2.11 (Funktion). Eine Funktion (oder Abbildung) f : A → B für Mengen A und B ist eine Relation f ⊆ A × B, für die zusätzlich gilt: ¡ ¢ 1. ∀a ∈ A ∀b1 , b2 ∈ B (a, b1 ) ∈ f ∧ (a, b2 ) ∈ f =⇒ b1 = b2 – jedem Wert aus A wird höchstens ein Wert aus B zugeordnet, der Funktionswert von f für Argument a –, und 2. ∀a ∈ A ∃b ∈ B (a, b) ∈ f – jedem Wert aus A muss ein Funktionswert zugeordnet werden. Eine partielle Funktion f : A → B ist eine Relation f ⊆ A × B, die Punkt 1 der Funktionsdefinition erfüllt. Bei einer partiellen Funktion muss nicht jedem Wert aus A ein Funktionswert zugeordnet werden, f darf für Argumente a ∈ A auch undefiniert sein. Wir verwenden im folgenden für Funktionen immer die gewohnte Funktionsschreibweise, nicht die Relationsschreibweise, die wir gerade verwendet haben: Wir schreiben f (a) = b :⇐⇒ a ∈ A ∧ b ∈ B ∧ (a, b) ∈ f. 12 2. Begriffe und Notationen Ist eine partielle Funktion f für a ∈ A undefiniert, so schreibt man dafür das Zeichen ⊥“: ” ¡ ¢ f (a) =⊥:⇐⇒ a ∈ A ∧ ¬ ∃b ∈ B f (a) = b . Wenn dem Wert a ∈ A dagegen ein Funktionswert zugeordnet ist, heißt f auf a definiert. Zwei Funktionen sind gleich, falls beide für jeden Wert aus A jeweils denselben Funktionswert liefern. Bei partiellen Funktionen müssen darüber hinaus die undefinierten Stellen übereinstimmen: Definition 2.2.12. Zwei (partielle) Funktionen f, g : A → B heißen gleich, falls gilt: ³ ¡ ¢ ¡ ¢´ ∀a ∈ A f (a) =⊥ ⇐⇒ g(a) =⊥ ∧ f (a) 6=⊥ =⇒ f (a) = g(a) . Eine partielle Funktion f : A → B heißt total, falls sie nirgends undefiniert ist, d.h. falls f (a) 6=⊥ gilt für alle a ∈ A. Eine solche partielle Funktion erfüllt also auch Punkt 2 der Funktionsdefinition. Statt als eine totale partielle Funktion könnte man f natürlich auch einfach als Funktion bezeichnen, aber manchmal ist es hilfreich, explizit von totalen Funktionen zu sprechen in Abgrenzung zu partiellen Funktionen. In den nächsten Kapiteln sind im Allgemeinen alle Funktionen total; partielle Funktionen kommen erst wieder in Teil 2 dieses Buches vor. Manchmal möchte man den Definitionsbereich einer Funktion begrenzen. Dazu verwendet man den Operator |: Definition 2.2.13 (Einschränkung). Ist f : A → B eine Abbildung und A0 ⊆ A, dann ist f |A0 : A0 → B, die Einschränkung von f auf A0 , definiert als f |A0 (x) := f (x) für alle x ∈ A0 . Wie bei Relationen gibt es auch bei Funktionen eine Liste von möglichen Eigenschaften, die wir im weiteren immer wieder brauchen. Definition 2.2.14. Eine Funktion f : A → B heißt injektiv, falls für alle a1 , a2 ∈ A gilt: f (a1 ) = f (a2 ) =⇒ a1 = a2 – keinen zwei Werten aus A ist derselbe Funktionswert zugeordnet. surjektiv, falls gilt: ∀b ∈ B ∃a ∈ A f (a) = b – jeder Wert aus B kommt (mindestens) einmal als Funktionswert vor. bijektiv, falls f injektiv und surjektiv ist. Zu jeder bijektiven Funktion f : A → B ist die Umkehrfunktion f −1 : B → A definiert durch (b, a) ∈ f −1 :⇐⇒ (a, b) ∈ f. 2.2 Grundkonzepte aus der Mengenlehre 13 Ist f eine bijektive Funktion, dann ist f −1 eine Funktion – sie erfüllt beide Bedingungen aus Def. 2.2.11. Für nicht-bijektive Funktionen muss das nicht unbedingt der Fall sein. Betrachten wir zum Beispiel eine nicht-injektive Funktion g: Wenn g(a) = g(b) = c ist für a 6= b, dann ordnet g −1 dem Wert c sowohl a als auch b zu – g −1 ist zwar eine Relation, aber keine Funktion. Für eine bijektive Funktion f ist f −1 übrigens nicht nur eine Funktion, sondern sogar selbst eine bijektive Funktion. Hier ist jedoch eine gewisse Vorsicht geboten: Für eine beliebige Funktion f : A → B kann mit f −1 auch manchmal die Urbild-Abbildung“ f −1 : ” B → 2A mit f −1 (b) := {a ∈ A | f (a) = b} gemeint sein, also eine Funktion, die jedem Element des Wertebereichs von f die Menge aller seiner Urbilder zuordnet. Aus dem Kontext sollte aber stets klar sein, welche Funktion mit f −1 gerade gemeint ist. 2.2.3 Isomorphie, Abzählbarkeit Die gerade definierten Konzepte von surjektiven und bijektiven Funktionen verwenden wir jetzt, um die Größe von Mengen zu vergleichen, auch von unendlichen Mengen. Definition 2.2.15 (Größenvergleich von Mengen). Seien A, B Mengen (eventuell unendlich), A, B 6= ∅. A heißt mindestens genauso mächtig wie B, in Zeichen A ≥ B oder B ≤ A, falls es eine surjektive Abbildung f : A → B gibt. A heißt mächtiger als B, falls B ≤ A und A 6≤ B gilt. Die Bedeutung dieser Definition kann man sich so intuitiv klarmachen: Eine surjektive Abbildung f : A → B ist eine Relation, die jedem a ∈ A genau ein b ∈ B zuordnet, es kann ein b ∈ B auch zwei verschiedenen Elementen aus A zugeordnet sein, aber jedes b ∈ B ist mindestens einem a ∈ A zugeordnet. Also muss es intuitiv mindestens so viele Elemente in A geben wie in B. Wenn es zwischen zwei Mengen A und B nicht nur eine surjektive, sondern sogar eine bijektive Abbildung gibt, dann sind sie gleichförmig“, griechisch ” isomorph. Definition 2.2.16 (isomorph). Zwei Mengen A und B heißen isomorph, falls eine bijektive Abbildung f : A → B existiert. Ist A eine endliche Menge mit |A| = n Elementen, so ist A genau dann zu einer Menge B isomorph, wenn B auch endlich ist und ebenfalls n Elemente besitzt. Das lässt sich leicht einsehen: • Gilt |A| = n, |B| = m, und n 6= m, sagen wir ohne Einschränkung n < m, dann kann es keine surjektive Funktion f : A → B geben. 14 2. Begriffe und Notationen • Ist dagegen |A| = |B|, dann kann man eine bijektive Funktion f : A → B konstruieren mit folgendem Algorithmus (der induktiv über die Größe n der Menge A vorgeht): n = 1: Wähle irgendein a aus A und irgendein b aus B. Setze f (a) := b. Setze A0 := A − {a}, B 0 := B − {b}. n → n + 1: Ist n = |A| (= |B|), so höre auf. Ist aber n < |A|, so wähle irgendein a aus A0 und irgendein b aus B 0 . Setze f (a) := b, A0 := A0 −{a}, und B 0 := B 0 − {b}. Wie steht es aber mit unendlichen Mengen A und B: Wann enthalten unendliche Mengen gleichviel Elemente“? Wie wir gleich sehen werden, gibt ” es isomorphe unendliche Mengen, von denen man intuitiv annehmen würde, dass sie unterschiedlich viele Elemente enthalten. Zum Beispiel ist die Menge der geraden natürlichen Zahlen Ng := {n ∈ N | n mod 2 = 0} isomorph zu N, der Menge aller natürlichen Zahlen. Um das zu sehen, betrachten wir die Funktion f : N → Ng , die jeder natürlichen Zahl eine gerade Zahl zuordnet durch f (n) := 2 · n. f ist injektiv und surjektiv, also bijektiv. Ebenso sind N und N × N isomorph. Um das zu zeigen, könnte man eine bijektive Abbildung von N × N nach N direkt konstruieren. Leichter wird der Beweis aber, wenn wir vorher den Begriff des Aufzählbaren“ einführen. ” Dabei nutzen wir dieselbe Idee wie oben beim allgemeinen Größenvergleich von Mengen (Def. 2.2.15). Definition 2.2.17 (aufzählbar/abzählbar). Eine Menge A heißt aufzählbar oder abzählbar, falls • entweder A leer ist • oder es eine surjektive Funktion f : N → A gibt. Ist A 6= ∅ und gibt es keine surjektive Funktion f : N → A, so heißt A überabzählbar. Wenn eine Menge A aufzählbar ist, so heißt das, man kann die Elemente von A aufzählen als f (0), f (1), f (2) etc. In dieser Aufzählung kommt jedes Element von A mindestens einmal vor, es kann allerdings auch ein Element mehrfach als Funktionswert auftreten. Jede endliche Menge A = {a1 , . . . , an } ist abzählbar: Entweder ist A leer, dann ist sie per definitionem abzählbar, andernfalls kann man sehr leicht eine surjektive Funktion f : N → A aufstellen: Man setzt a für 1 ≤ i ≤ n i f (i) := a1 für i > n. Für unendliche Mengen gilt folgender wichtiger Zusammenhang: 2.2 Grundkonzepte aus der Mengenlehre 15 Satz 2.2.18. Wenn eine Menge A unendlich und abzählbar ist, dann ist sie auch zu N isomorph. Beweis: Sei A abzählbar und nichtleer. Dann gibt es nach der Definition eine surjektive Funktion f : N → A. Wir ändern f zu einer Funktion f 0 : N → A ab, die nicht nur surjektiv, sondern auch injektiv ist, denn Isomorphie zwischen A und N bedeutet ja die Existenz einer bijektiven Funktion von N nach A (oder umgekehrt). Bei der Konstruktion von f 0 nutzen wir aus, dass A unendlich ist. Induktiv lässt sich die Funktion f 0 so beschreiben: n = 0: f 0 (0) = f (0). n → n + 1: f 0 (n +S1) = f (m), wobei m die kleinste natürliche Zahl ist, so dass f (m) 6∈ 1≤i≤n f 0 (i) ist. Da A unendlich ist und f (N) = A gilt, gibt es immer ein solches m. Werte aus A, die für eine kleinere Zahl aus N schon als Funktionswert vorgekommen sind, werden also übersprungen, und es wird der nächste noch nicht dagewesene Funktionswert vorgezogen“. f 0 zählt alle Elemente aus A auf ” ohne Wiederholung, d.h. f 0 : N → A ist surjektiv und injektiv. Kommen wir auf unser Problem von oben zurück – es ging darum zu zeigen, dass N isomorph ist zu N × N. Satz 2.2.19. N ist isomorph zu N × N. Beweis: Um diesen Satz zu beweisen, müssen wir nach der obigen Überlegung nur zeigen, dass N × N aufzählbar ist. Das heißt, wir müssen eine surjektive Abbildung f : N → N × N konstruieren. Zum Beispiel können wir folgende Funktion verwenden: f (n) = (a, b) :⇐⇒ In der Primfaktorzerlegung von n kommt die Primzahl 2 genau a-mal und die Primzahl 3 genau b-mal vor. f (n) ist für jedes n ∈ N definiert – wenn 2 als Faktor von n nicht vorkommt, so ist a = 0, und kommt 3 nicht vor, so ist b = 0 –, und jedes (a, b) ist Funktionswert für irgendein n ∈ N, zum Beispiel für n = 2a · 3b oder für n = 2a · 3b · 5; f ist also surjektiv. N ist nicht nur isomorph zu N × N = N2 , sondern zu jedem Nn für n ≥ 1. Satz 2.2.20. N ist isomorph zu Nn für alle n ∈ N+ . Beweis: Wir beweisen den Satz durch Induktion über n. n = 1: N ist natürlich isomorph zu N. Eine bijektive Funktion von N nach N ist zum Beispiel die Identitätsfunktion id : N → N mit id(n) := n ∀n ∈ N. 16 2. Begriffe und Notationen n → n + 1: Per Induktionsvoraussetzung sei schon gezeigt, dass N isomorph ist zu Nn . Das heißt, dass es eine bijektive Funktion g : Nn → N gibt. Wir verwenden wieder die surjektive Funktion f : N → N × N aus dem letzten Satz und konstruieren aus ihr und aus g eine neue Funktion h : N → Nn+1 (= Nn × N) als ¡ h(x) = (a1 , . . . , an , an+1 ) :⇐⇒ ∃m g(a1 , . . . , an ) = m ¢ ∧ f (x) = (m, an+1 ) . h ist surjektiv; damit ist Nn+1 aufzählbar, also nach Satz 2.2.18 isomorph zu N. Es ist nun aber durchaus nicht so, dass alle unendlichen Mengen schon isomorph zu N wären. Einer der schönsten Beweise der Mathematik ist der der Aussage, dass die reellen Zahlen nicht abzählbar sind. Trotz seiner Einfachheit wurde er von Cantor erst zu Ende des 19. Jahrhunderts gefunden und stellte den Beginn der modernen Mengenlehre dar. Da wir die zugrundeliegende Beweisidee, den Diagonalschluss, in diesem Buch häufiger brauchen werden, stellen wir den Beweis hier vor. Dazu betrachten wir das abgeschlossene reelle Intervall von 0 bis 1, [0, 1] = {x ∈ R | 0 ≤ x ≤ 1}. Satz 2.2.21 (von Cantor). [0, 1] ist nicht abzählbar. Beweis: Nehmen wir an, [0, 1] sei abzählbar. Dann muss es nach der Definition von Abzählbarkeit eine surjektive Funktion f : N → [0, 1] geben. Jede reelle Zahl in [0, 1] kommt also (mindestens einmal) als ein Funktionswert f (i) vor. Jede reelle Zahl im Intervall [0, 1] können wir als Dezimalzahl der Form 0, d0 d1 d2 . . . dn . . . schreiben mit dn ∈ {0, . . . , 9}. (Auch die Zahl 1 kann man so darstellen, es ist ja 1 = 0, 9̄.) Wenn wir uns auf den Funktionswert an der Stelle i beziehen, auf f (i), verwenden wir die Darstellung f (i) = 0, di0 di1 di2 . . . din . . . ∈ [0, 1]. din ∈ {0, . . . , 9} ist also die (n + 1)-te Dezimalstelle des Funktionswertes von f an der Stelle i. Insbesondere interessieren wir uns nun für die Dezimalstellen dnn , also die jeweils (n+1)-te Dezimalstelle der n-ten Zahl. Aus allen dnn für n ∈ N konstruieren wir eine neue reelle Zahl d als d := 0, d¯0 d¯1 d¯2 . . . d¯3 . . . mit dn + 1, falls dn + 1 ≤ 9 n n d¯n := (dnn + 1) mod 10, d.h. d¯n = 0, sonst d ist eine reelle Zahl aus dem Intervall [0, 1], und zwar eine, die sich in ihrer (i + 1)-ten Dezimalstelle von f (i) unterscheidet für alle i ∈ N. Damit können wir nun einen Widerspruch konstruieren: Die Funktion f : N → [0, 1] ist nach unserer obigen Annahme surjektiv, damit ist auch die Zahl d Funktionswert von f für (mindestens) ein j ∈ N, d.h. f (j) = d. Nun lässt sich 2.3 Grundbegriffe aus der Algebra 17 die Zahl f (j) = d wie oben festgelegt schreiben als f (j) = 0, dj0 dj1 dj2 . . . djj . . .. Andererseits ist aber djj 6= d¯j nach der Konstruktion von d, also ist f (j) 6= d. Das Verfahren der Diagonalisierung, das wir in diesem Satz angewendet haben, wird häufiger angewendet, um zu zeigen, dass eine Menge nicht abzählbar ist, oder um zu beweisen, dass eine bestimmte Funktion nicht Element einer abzählbaren Menge sein kann. Woher das Verfahren seinen Namen hat, macht man sich am besten an einem Bild klar. Im letzten Satz haben wir angenommen, die reellen Zahlen ließen sich durchzählen als die nullte, erste, zweite . . . Wenn man sich eine unendlich große Tabelle vorstellt, in der horizontal aufgetragen ist, um die wievielte reelle Zahl es geht, und vertikal die 0., 1., 2., 3., . . . Dezimalstelle, dann geht es bei der Diagonalisierung gerade um die Zahlen, die in der Diagonalen liegen, wie Abbildung 2.1 verdeutlicht. .. . .. . .. . .. . .·· 2 d02 d12 d22 ··· 1 d01 d11 d21 ··· 0 d00 d10 d20 ··· 0 1 2 ··· Abb. 2.1. Eine Veranschaulichung der Diagonalisierung Eine genauere, allgemeinere Beschreibung des Verfahrens einschließlich der Voraussetzungen, die gegeben sein müssen, damit es anwendbar ist, geben wir auf S. 205, wo wir das Verfahren das nächste Mal gebrauchen. 2.3 Grundbegriffe aus der Algebra Wenn man auf Elemente einer Menge M , zum Beispiel N, eine Operation anwendet, zum Beispiel +, dann ist es oft entscheidend, dass das Ergebnis auch auf jeden Fall in M ist. Wenn man auf zwei Elemente n, m ∈ N die Operation + anwendet, ist das Ergebnis n + m auf jeden Fall wieder eine natürliche Zahl. Man sagt, N ist abgeschlossen gegen Addition. Bei der Subtraktion ist das anders, zum Beispiel ist 2 − 3 = −1 keine natürliche Zahl; N ist also nicht abgeschlossen gegen Subtraktion. Allgemein sagt man, eine Menge M ist abgeschlossen gegen eine Operation Op, wenn das Ergebnis einer Anwendung von Op auf Elemente von M auf jeden Fall wieder in M ist. 18 2. Begriffe und Notationen Definition 2.3.1 (Abgeschlossenheit). Sei M eine Menge und Opn ein n-stelliger Operator. M heißt abgeschlossen gegen Opn , falls ∀e1 , . . . , en ∈ M Opn (e1 , . . . , en ) ∈ M gilt. Wenn M abgeschlossen ist gegen einen n-stelligen Operator Opn , dann heißt das einfach, dass Opn eine totale Funktion Opn : M n → M ist. N ist nicht abgeschlossen gegen Subtraktion, die Menge Z der ganzen Zahlen dagegen schon. Man kann sogar noch mehr sagen: Z ist die Menge, die entsteht, wenn man zu N alle die Zahlen z dazunimmt, die durch Subtraktion zweier natürlicher Zahlen entstehen können (d.h. Z = { z | ∃m, n ∈ N z = m − n }); entfernt man aus Z irgendeine Zahl, so ist die Ergebnismenge nicht mehr abgeschlossen gegen Subtraktion. Man sagt: Z ist die kleinste Menge, die N enthält und abgeschlossen ist gegen Subtraktion. Wenn man nun eine Menge M zusammenfaßt mit einem oder mehreren Operatoren, gegen die M abgeschlossen ist, erhält man eine algebraische Struktur. Definition 2.3.2 (algebraische Struktur). Eine algebraische Struktur A vom Typ (n1 , . . . , nk ) ist ein (k + 1)-Tupel A = (M, Op1n1 , . . . , Opknk ) von einer Menge M und k Operatoren Opini der Stelligkeit ni auf M , für 1 ≤ i ≤ k, so dass M gegen jeden dieser k Operatoren abgeschlossen ist. M heißt auch Trägermenge von A. Beispiel 2.3.3. (N, +, ·, 0, 1) ist eine algebraische Struktur vom Typ (2, 2, 0, 0): N ist abgeschlossen gegen die zweistelligen Operationen der Addition und Multiplikation, und N ist auch abgeschlossen gegen die nullstelligen Operatoren 0 und 1. Man kann nämlich die Konstanten 0 und 1 als nullstellige Operatoren 0: N0 → N mit 0() := 0, 1: N0 → N mit 1() := 1 auffassen. Generell kann man mit diesem Trick immer irgendwelche fest ausgewählten Element der Trägermenge, die man als Konstanten der algebraischen Struktur hinzufügen möchte, als nullstellige Operatoren auf der Trägermenge beschreiben. (N, +, −) ist keine algebraische Struktur, da N gegen die Subtraktion nicht abgeschlossen ist. Wenn man nun zwei Mengen M und N hat, die Trägermengen zwei¯ 1n , . . . , Op ¯ `n ) er algebraischer Strukturen (M, Op1m1 , . . . , Opkmk ) und (N, Op 1 ` sind, und Abbildungen von M nach N betrachtet, dann interessiert man sich häufig für solche Abbildungen, die mit den Operatoren der algebraischen Strukturen verträglich sind. Was das heißt, macht man sich am besten an Beispielen klar. Zuerst ein relativ allgemeines: Gegeben seien zwei algebraische Strukturen (M, gM ) und (N, gN ) für Operatoren gM : M × M → M 2.3 Grundbegriffe aus der Algebra 19 und gN : N × N → N . Wenn wir fordern, dass die Abbildung h : M → N verträglich sein soll mit gM und gN , dann heißt das: Gegeben zwei Elemente a und b aus M , dann ist es gleichgültig, • ob man zuerst innerhalb von¢ M bleibt und gM (a, b) bildet und diesen Wert ¡ dann nach N in h gM (a, b) abbildet • oder ob man zunächst a und b nach N überträgt in¢ h(a) und h(b) und ¡ dann innerhalb von N gN anwendet zu gN h(a), h(b) – es ergibt sich in beiden Fällen dasselbe Ergebnis. Noch eine weitere Voraussetzung gibt es, damit eine Abbildung mit zwei Operatoren verträglich sein kann: Die zwei Operatoren müssen dieselbe Stelligkeit besitzen. Sehen wir uns das Ganze noch an einem konkreteren Beispiel an: Wir betrachten die algebraischen Strukturen (R+ , ·) und (R, +). log : R+ → R ist verträglich mit · auf R+ und + auf R. Es ist gleichgültig, • ob man zunächst innerhalb von R+ bleibt und a · b bildet und diesen Wert danach auf log(a · b) ∈ R abbildet • oder ob man zunächst a und b nach R überträgt in log(a) und log(b) und dann innerhalb von R + anwendet zu log(a) + log(b) – es ist ja log(a·b) = log a+log b. Tatsächlich wurden früher Logarithmustabellen verwendet, um die Multiplikation großer Zahlen auf eine einfachere Addition zurückzuführen. Dies Kriterium der Verträglichkeit“ beschreibt man formal mit dem Be” griff des Homomorphismus. Definition 2.3.4 (Homo-, Isomorphismus). Ein ¡Homomorphismus¢ h : A1 → A2 von einer algebraischen Struktur A1 = M, Op1m1 , . . . , Opkmk ¡ 1 vom Typ (n1 , . . . , nk ) in eine algebraische Struktur A2 = N, Opm1 , . . . , ¢ k Opmk vom gleichen Typ ist eine Funktion h : M → N , die mit allen Operatoren verträglich ist, für die also für 1 ≤ i ≤ k und alle a1 , . . . , ani ∈ M gilt: ¢ ¡ ¢ i ¡ h Opini (a1 , . . . , ani ) = Opni h(a1 ), . . . , h(ani ) . 1 Ein Isomorphismus von A1 = (M, Op1m1 , . . . , Opkmk ) nach A2 = (N, Opm1 , k . . . , Opmk ) ist ein Homomorphismus h : A1 → A2 , für den zusätzlich gilt, dass die Funktion h : M → N bijektiv ist. Zum Beispiel ist log ein Homomorphismus von der algebraischen Struktur (R+ , ·) nach (R, +). Auch bei algebraischen Strukturen interessieren wir uns besonders für einige Exemplare mit speziellen Eigenschaften, zum Beispiel für Halbgruppen: 20 2. Begriffe und Notationen Definition 2.3.5 (Halbgruppe, assoziativ, kommutativ). Eine Halbgruppe H ist ein Paar H = (M, ◦) von einer Menge M und einer zweistelligen Funktion (Verknüpfung) ◦ : M × M → M , die assoziativ ist, d.h. für alle a, b, c ∈ M gilt: (a ◦ b) ◦ c = a ◦ (b ◦ c) H heißt kommutativ, falls für alle a, b ∈ M gilt: a ◦ b = b ◦ a. ◦ ist ein zweistelliger Operator, H ist also eine algebraische Struktur vom Typ (2). Allerdings spricht man bei Halbgruppen eher von der Verknüpfung“ ” ◦ als von einem Operator oder einer Funktion, was alles ebenfalls korrekt wäre. Zu der Eigenschaft der Assoziativität können noch weitere interessante Eigenschaften hinzutreten. Definition 2.3.6 (Nullelement, Einselement). Sei A = (M, ◦) eine algebraische Struktur vom Typ (2). Ein Element b von M heißt • Nullelement von A, falls für alle a ∈ M gilt: a ◦ b = b ◦ a = b; • Einselement von A, falls für alle a ∈ M gilt: a ◦ b = b ◦ a = a. Wenn A Nullelemente oder Einselemente besitzt, dann sind sie eindeutig. Das heißt, wenn b1 und b2 zwei Nullelemente (bzw. Einselemente) von A sind, dann ist b1 = b2 , wie sich leicht zeigen lässt: • Sind b1 und b2 b1 ◦ b2 = b2 ◦ b1 • Sind b1 und b2 b1 ◦ b2 = b2 ◦ b1 Nullelemente, dann gilt nach der letzten Definition b1 = = b2 . Einselemente, dann gilt nach der letzten Definition b1 = = b2 . Wir bezeichnen im folgenden häufig das einzige Nullelement von A mit 0A und das einzige Einselement mit 1A , falls sie denn existieren. Das muss nicht immer der Fall sein. Beispiel 2.3.7. Sehen wir uns dazu ein paar Beispiele an. • Für die Halbgruppe H = (N, ·) ist 0H = 0 und 1H = 1. • Die Halbgruppe H = (N, +) hat dagegen kein Nullelement. Ihr Einselement ist 1H = 0. (part) die Menge aller (partiellen) Funktionen von N • Bezeichnen wir mit FN part part part nach N, und ◦ : FN ×FN → FN sei die Komposition von Funktionen, d.h. ¡ g f (n)¢, falls f (n) definiert ist f ◦ g (n) := ⊥, sonst part Dann ist H = (FN , ◦) eine Halbgruppe mit Einselement 1H = id und Nullelement 0H =⊥. Die Identitätsfunktion id haben wir oben schon kennengelernt, und ⊥: N → N ist die überall undefinierte Funktion mit ⊥ (n) := ⊥ ∀n ∈ N. 2.3 Grundbegriffe aus der Algebra 21 • Betrachtet man in FN nur die totalen Funktionen von N nach N, so hat man mit H = (FN , ◦) auch eine Halbgruppe. Ihr Einselement ist dasselbe wie das der letzten Halbgruppe, es ist 1H = id, aber diese Halbgruppe besitzt kein Nullelement. • Verbindet man die totalen Funktionen mit einem anderen Operator, dann kann sich ein ganz anderes Bild ergeben: Wir verwenden als Operator ∗, die Multiplikation von Funktionen, mit f ∗ g(n) := f (n) ∗ g(n) und bilden damit die Halbgruppe H = (FN , ∗). Sie hat als Einselement die überall konstante Funktion 1H = 1 mit 1(n) := 1 ∀n, und als Nullelement die überall konstante Funktion 0H = 0 mit 0(n) = 0 ∀n. • Eine Menge ist eine triviale algebraische Struktur ohne jegliche Operatoren, also vom leeren Typ. Damit sind Def. 2.2.16 und 2.3.4 verträglich: Zur Isomorphie zweier Mengen A, B reicht die Existenz einer Bijektion von A nach B. Eine Halbgruppe mit Einselement heißt auch Monoid. Definition 2.3.8 (Monoid). Ein Monoid H ist ein Tripel H = (M, ◦, 1H ) von einer Halbgruppe (M, ◦) und einem Einselement 1H . Als algebraische Struktur hat ein Monoid den Typ (2, 0). Zwei Elemente der Trägermenge eines Monoids a und b heißen invers zueinander, wenn sie, verknüpft miteinander, das Einselement ergeben. Definition 2.3.9 (Inverses, Gruppe). Ist (M, ◦, 1M ) ein Monoid mit a, b ∈ M , so heißt a Inverses von b, falls a ◦ b = b ◦ a = 1M gilt. Eine Gruppe G ist ein Monoid G = (M, ◦, 1G ), in der jedes Element aus M auch ein Inverses in M besitzt. Wenn a ∈ M Inverses von b ist, dann ist auch b Inverses von a. In einer Gruppe hat jedes Element nicht nur mindestens, sondern auch höchstens ein Inverses. Das lässt sich relativ leicht zeigen. Angenommen, b1 und b2 sind beide Inverses von a, so ist a Inverses von b1 und b2 , und wir können wie folgt auf b1 = b2 schließen: b1 = b1 ◦ 1M = b1 ◦ (a ◦ b2 ) = (b1 ◦ a) ◦ b2 = 1M ◦ b2 = b2 . Beispiel 2.3.10. (Z, +), (Q, +), (Q − {0}, ·), (R − {0}, ·) sind Gruppen, aber nicht (Z, ·) oder (R, ·). Denn ganze Zahlen haben kein Inverses bezüglich der Multiplikation, außer für die 1, und in R besitzt die 0 kein Inverses bezüglich der Multiplikation. Wenden wir nun das Konzept des Homomorphismus, das wir oben eingeführt haben, auf die speziellen algebraischen Strukturen an, mit denen wir 22 2. Begriffe und Notationen uns seitdem beschäftigt haben: Ein Halbgruppen-Homomorphismus ist ein Homomorphismus zwischen zwei Halbgruppen, ein Monoid-Homomorphismus betrifft zwei Monoide, ein Gruppen-Homomorphismus zwei Gruppen. Machen wir uns klar, was Verträglichkeit hier bedeutet. Ist h zum Beispiel ein Monoid-Homomorphismus von (M, ◦M , 1M ) nach (N, ◦N , 1N ), dann muss für h gelten: • h(a ◦M b) = h(a) ◦N h(b) ∀a, b ∈ M • h(1M ) = 1N . Beispiel 2.3.11. Der Logarithmus (zu einer beliebigen Basis > 0) ist ein Monoid-Isomorphismus von (R+ , ·, 1) nach (R, +, 0): • log(a · b) = log(a) + log(b), wie wir oben schon erwähnt haben, und • log(1) = 0 – Einselement wird auf Einselement abgebildet. Oben haben wir Funktionen zwischen Trägermengen von algebraischen Strukturen betrachtet. Neben Funktionen kann man auch für Relationen definieren, was Verträglichkeit heißt. So werden wir später noch Äquivalenzrelationen verwenden, die mit der Verknüpfung einer Halbgruppe verträglich sind. Betrachtet man eine Halbgruppe (M, ◦), dann heißt hier Verträglichkeit folgendes: Wenn zwei Elemente a und b von M zueinander in Relation stehen und man nun beide Elemente a und b mit demselben Element c verknüpft, dann stehen auch a ◦ c und b ◦ c zueinander in Relation. Definition 2.3.12 (Rechtskongruenz). Eine Rechtskongruenz (oder einfach nur Kongruenz) τ ⊆ M × M auf einer Halbgruppe (M, ◦) ist eine Äquivalenzrelation auf M , für die zusätzlich gilt: ³ ´ ∀a, b, c ∈ M a τ b =⇒ (a ◦ c) τ (b ◦ c) . 2.4 Grundbegriffe aus der Graphentheorie Ein Graph ist eine abstrakte Form, die sehr vieles darstellen kann – ein Straßennetz, mögliche Spielzüge in einem Schachspiel, eine Relation (wie in dem Beispiel auf S. 9), und noch beliebig vieles andere. Definition 2.4.1 (Graph). Ein Graph G = (V, E) besteht aus • V , einer Menge von Knoten (vertices), und • E ⊆ V × V , einer Menge von Kanten (edges). G heißt ungerichtet, falls für alle Knoten a, b ∈ V gilt: (a, b) ∈ E =⇒ (b, a) ∈ E. Ansonsten heißt G gerichtet. Graphen stellt man zeichnerisch dar, indem die Knoten als Kreise und die Kanten als Pfeile zwischen den Kreisen wiedergegeben werden. Bei ungerichteten Graphen lässt man die Pfeilspitzen weg und zeichnet die gegenläufigen Kanten nur einfach. 2.4 Grundbegriffe aus der Graphentheorie 23 Beispiel 2.4.2. Abbildung 2.2 zeigt einen gerichteten und einen ungerichteten Graphen. Abb. 2.2. Ein gerichteter und ein ungerichteter Graph In unserer Definition von Graphen sind Kanten einfach eine Menge von Knotenpaaren. Das heißt natürlich, dass es von einem Knoten v zu einem Knoten v 0 entweder keine oder genau eine Kante gibt. Man kann Graphen aber auch so definieren, dass Mehrfachkanten zugelassen sind, dass es also mehrere Kanten von einem Knoten v zu einem Knoten v 0 geben kann. Das ist besonders bei kantengewichteten Graphen interessant. Definition 2.4.3. Wenn wir über Graphen sprechen, verwenden wir folgende Begriffe: • Wenn (v, v 0 ) ∈ E ist, schreibt man dafür auch v → v 0 . v heißt Vater von v 0 und v 0 umgekehrt Sohn von v. • Ein nicht-leeres Wort W = v1 . . . vn heißt Weg (der Länge n − 1) von v1 nach vn gdw. ∀i < n vi → vi+1 eine Kante ist. • v heißt Vorfahre von v 0 gdw. es einen Weg von v nach v 0 gibt. v 0 heißt dann Nachkomme von v. • v1 und v2 sind Brüder gdw. es einen Knoten v gibt, so dass v Vater von v1 und Vater von v2 ist. • Ein Weg v1 , . . . , vn mit n > 1 heißt Kreis, falls v1 = vn gilt. 24 2. Begriffe und Notationen Man beachte, dass nach dieser Definition ein Kreis auch durchaus z.B. die Form einer Acht haben kann. Ein Kreis ist hier einfach ein Weg, der am Ende zu seinem Anfangspunkt zurückkehrt. Ob und wie oft dabei ein Knoten mehrfach betreten wird, ist gleichgültig. Definition 2.4.4 (Baum). Ein Baum B = (V, E, v0 ) ist ein gerichteter Graph (V, E) mit einem ausgezeichneten Knoten v0 , der Wurzel von B. Dabei muss noch gelten: • v0 ist Vorfahre aller anderer Knoten, es gibt also einen Weg von v0 zu jedem Knoten v ∈ V . • B enthält keine Kreise, d.h. es gibt für keinen Knoten v ∈ V einen Weg einer Länge > 0 von v nach v. • Kein Knoten hat mehr als einen Vater. Beispiel 2.4.5. Abbildung 2.3 zeigt ein Beispiel für einen Baum. Man zeichnet einen Baum für gewöhnlich, der Natur nicht ganz entsprechend, mit der Wurzel nach oben. Meist werden in Bäumen allerdings die Pfeilspitzen weggelassen (vergleiche z.B. Abb. 2.4), obwohl Bäume gerichtete Graphen sind: Die Kanten führen stets von der Wurzel weg“. ” ein Baum Abb. 2.3. Ein Baum Definition 2.4.6. Sei B = (V, E, v0 ) ein Baum. • • • • Ein innerer Knoten ist ein Knoten mit mindestens einem Sohn. Ein Blatt ist ein Knoten ohne Söhne. Ein Ast ist ein Weg von einem Knoten zu einem Blatt. Die Tiefe von B ist die maximale Länge eines Weges in B (dieser Weg verläuft von der Wurzel zu einem Blatt). • Ein Unterbaum B 0 von B ist ein Baum B 0 = ( V 0 , E 0 , v00 ), wobei 2.4 Grundbegriffe aus der Graphentheorie 25 – V 0 ⊆ V und ¡ ¢ – E 0 = E ∩ V 0 × V 0 ist, wir wählen also eine Menge von Knoten und nehmen dann als neue Kantenmenge die Kanten, die sich innerhalb der neuen Knotenmenge erstrecken. • Ein vollständiger Unterbaum B 0 = ( V 0 , E 0 , v00 ) von B ist ein Unterbaum, in dem für alle Knoten v ∈ V gilt: Ist v Nachkomme von v00 in B, so ist v ∈ V 0 . • Ein angeordneter Baum ist ein Baum, in dem für jeden inneren Knoten v eine Ordnung s1 < . . . < sn seiner Söhne {s1 , . . . , sn } festgelegt ist. s1 heißt dann der linkeste Sohn von v. Abb. 2.4. Ein Baum mit Unterbäumen B 0 und B 00 In Abb. 2.4 ist der mit 0 bezeichnete Knoten die Wurzel, 0, 1 und 2 sind innere Knoten, und 3 ist ein Blatt. 1 ist die Wurzel des unvollständigen Unterbaums B 0 , und 2 ist die Wurzel des vollständigen Unterbaums B 00 . Bei einem Graphen, der ein Straßennetz darstellt, könnte man die Kanten mit der jeweiligen Länge der Straße annotieren, um so für einen Weg durch den Graphen feststellen zu können, wie lang er in realiter ist. Bei einem Graphen, der mögliche Spielzüge in einem Schachspiel darstellt, könnte man die Knoten mit der Güte“ des jeweiligen Zuges annotieren, um jeweils feststel” len zu können, wie sinnvoll ein Zug ist. Beides lässt sich realisieren mit einer Gewichtsfunktion, die jedem Knoten oder jeder Kante einen Wert zuordnet. 26 2. Begriffe und Notationen Definition 2.4.7 (gewichteter Graph). Eine Gewichtsfunktion für einen Graphen (V, E) ist eine Abbildung f : V → A (für Knotengewichte) oder f : E → A (für Kantengewichte), die Knoten und Kanten mit Werten aus einer Menge A markiert. Graphen mit (Knoten-, Kanten-) Gewichten heißen auch (knoten-, kanten-) gewichtet. Ein Begriff, den man häufig braucht, ist der des Grades: Er beschreibt, wie viele Kanten in einem Knoten enden und wie viele von ihm ausgehen. Definition 2.4.8 (Grad). Der In-Degree oder In-Grad eines Knotens v eines Graphen G = (V, E) ist die Anzahl von Kanten, die in v enden, also die Zahl |{(v 0 , v) ∈ E | v 0 ∈ V }|. Der Out-Degree oder Out-Grad von v ist die Anzahl von Kanten, die in v beginnen, also die Zahl | {(v, v 0 ) ∈ E | v 0 ∈ V } |. Der Grad von v ist die Summe von In- und Out-Degree. Der (In-, Out-) Degree von G ist der maximale (In-, Out-) Degree unter den Knoten in V . In einem Baum ist mit Grad“ stets der Out-Degree gemeint, da der In” Degree schon per Definition immer 1 ist. Eine wichtige Beziehung zwischen Graden, Knotenanzahl und Tiefe von Bäumen liefert der folgende Satz. Satz 2.4.9. Sei B = (V, E, v0 ) ein Baum vom Grad d > 1, dessen Tiefe t ist und der b viele Blätter hat. Dann gilt: 1. b ≤ dt , 2. |V | ≤ 2 · dt , und 3. t ≥ logd b. Beweis: Wir führen den Beweis per Induktion über t. t = 0: In einem Baum der Tiefe 0 ist V = {v0 }. Damit gilt |V | = 1 = b ≤ d0 ≤ 2 · d0 , und 0 = logd b. t → t + 1: G = (V, E) sei ein Baum der Tiefe t + 1. Wenn man von G gerade diejenigen Blätter weglässt, die auf Tiefe t + 1 liegen, erhält man einen Baum G0 der Tiefe t, für den nach der Induktionsvoraussetzung gilt: G0 hat höchstens dt Blätter und 2dt Knoten. 1. Jedes Blatt von G auf Tiefe t + 1 hat ein Blatt von G0 als Vater. Da der Grad von G d ist, können zu jedem Blatt von G0 höchstens d neue Blätter dazukommen. Also ist die ¡ ¢ Anzahl von Blättern in G ≤ d mal die Anzahl der Blätter in G0 , lässt sich also nach oben abschätzen durch d · dt = dt+1 . 2. Die Anzahl der Knoten in G ist gleich der Anzahl von Knoten in G0 – also ≤ 2 · dt nach der Induktionsvoraussetzung – zuzüglich der Anzahl von Blättern von G auf Tiefe t + 1. Die Anzahl der Blätter auf Tiefe t + 1 ist höchstens so groß wie die Anzahl von Blättern in G insgesamt, also ≤ dt+1 . Somit ist die Anzahl der Knoten in G |V | ≤ 2dt + dt+1 ≤ dt+1 + dt+1 = 2dt+1 . 2.5 Grundbegriffe aus der Informatik 27 3. Aus b ≤ dt folgt, dass logd b ≤ t ist. 2.5 Grundbegriffe aus der Informatik Wir werden uns im weiteren intensiv mit einer besonderen Art von Mengen beschäftigen, mit Sprachen. Eine Sprache ist eine Menge von Wörtern, wobei die Wörter zusammengesetzt sind aus Buchstaben irgendeines Alphabets (man spricht von einer Sprache über einem Alphabet). Zum Beispiel könnte man über dem Alphabet Σ1 = { 5, ⊗ } eine Sprache L1 = { 5, ⊗5, 5 5 ⊗, ⊗ 5 ⊗ } definieren. L1 hat offenbar endlich viele Wörter, nämlich genau 4. Es sind aber auch Sprachen mit unendlich vielen Wörtern möglich, zum Beispiel die Sprache aller beliebig langen Buchstabenketten über dem Alphabet Σ = {a, . . . , z}. Diese Sprache enthält zum Beispiel als Wörter alle deutschsprachigen Texte, die je geschrieben wurden und je geschrieben werden, wenn man von Wortzwischenräumen, Satzzeichen und Ähnlichem absieht. Definition 2.5.1 (Alphabet, Wort). Ein Alphabet Σ ist eine endliche, nicht-leere Menge. Die Elemente eines Alphabets nennen wir Buchstaben. Ein Wort w über Σ ist eine endliche, eventuell leere Folge von Buchstaben. Für w = (a1 , . . . , an ) schreibt man auch w = a1 . . . an . Das leere Wort, das Wort mit 0 Buchstaben, schreibt man als ε. |w| bezeichnet die Länge des Wortes w, d.h. die Anzahl von Buchstaben von w. Mit dem Operator ◦ kann man zwei Wörter konkatenieren (verknüpfen, verketten). Auch ∗ , der Kleene-Stern, ist ein Verkettungsoperator, allerdings wird er auf eine Menge (von Buchstaben oder von Wörtern) angewandt: Wenn Σ ein Alphabet ist, dann ist Σ ∗ eine Sprache, und zwar die Sprache aller Wörter über Buchstaben aus Σ. Zum Beispiel ist {a, b}∗ = {ε, a, b, aa, ab, ba, bb, aaa, aab, aba, abb, . . .}. Allgemein ist L∗ (der ∗ -Operator angewandt auf eine Menge L von Buchstaben oder Wörtern) die Menge all derer Buchstabenketten, die sich durch Konkatenation von 0 oder mehr Elementen von L bilden lassen. Ist zum Beispiel L = {ab, ccc}, dann ist L∗ = {ε, ab, ccc, abccc, cccab, ababab, ababccc, abcccab, abcccccc, cccabab, ccccccab, cccabccc, ccccccccc, . . .}. Neben dem Kleene-Stern ∗ gibt es noch + . L+ ist die Konkatenation von einem oder mehr Elementen von L. Der Unterschied zwischen Σ ∗ und Σ + ist also, dass in Σ ∗ das leere Wort ε enthalten ist. Definition 2.5.2 (Konkatenation, Σ ∗ ). Die Konkatenation ◦ zweier Wörter v = a1 . . . an und w = b1 . . . bm ist v ◦ w := a1 . . . an b1 . . . bm , auch geschrieben als vw. Σ ∗ bezeichnet die Menge aller Wörter über Σ. Anders ausgedrückt: Σ ∗ ist die kleinste Menge von Wörtern, die Σ enthält und abgeschlossen ist gegen Konkatenation. 28 2. Begriffe und Notationen Mit Hilfe der Konkatenation kann man nun beschreiben, was Präfix, Infix und Suffix eines Wortes sind (nämlich, der Intuition entsprechend, ein beliebig langes Anfangs-, Mittel- und Endstück eines Wortes): Definition 2.5.3 (Präfix, Infix, Suffix). u heißt Präfix eines Wortes w :⇐⇒ ∃r ∈ Σ ∗ ur = w. u heißt Infix eines Wortes w :⇐⇒ ∃r, s ∈ Σ ∗ rus = w. u heißt Suffix eines Wortes w :⇐⇒ ∃r ∈ Σ ∗ ru = w. Zum Beispiel sind ε, a, aa, aab, ab, b alle Infixe von w = aab. aab, ab, b und ε sind alle Suffixe von w. wi , die Iteration eines Wortes w, ist w i-mal hintereinander konkateniert, und wR , das Reverse von w, ist w rückwärts notiert. Beide Konzepte kann man auch per Induktion definieren, und zwar mit verschiedenen Varianten der Induktion: Die Iteration wi wird definiert durch Induktion über N, das Reverse eines Wortes durch Induktion nicht über Zahlen, sondern (als sogenannte strukturelle Induktion) über den Aufbau eines Wortes w ∈ Σ ∗ . Definition 2.5.4 (Iteration, Reverses). Die Iteration wi eines Wortes w ∈ Σ ∗ lässt sich induktiv definieren über die Anzahl i der Iterationen: Induktionsanfang: w0 := ε. Induktionsschritt: wn+1 := wwn Das Reverse wR eines Wortes w ∈ Σ ∗ lässt sich definieren durch Induktion über den Aufbau von w. Induktionsanfang: Für w = ε ist wR = εR := ε. Induktionsschritt: Für w = va mit v ∈ Σ ∗ , a ∈ Σ ist (va)R := a(v R ). Das Reverse eines Wortes haben wir über strukturelle Induktion definiert. Das heißt, wir haben eine Induktion geführt über alle Arten, wie ein Wort w aufgebaut sein kann: Es kann das leere Wort ε sein, oder es kann aus einem Wort v und einem Buchstaben a durch Konkatenation entstanden sein als w = va. Das sind schon alle Möglichkeiten, wie ein Wort w aufgebaut sein kann. Genaugenommen haben wir die Menge Σ ∗ aller Wörter über einem Alphabet Σ auch strukturell definiert: Σ ∗ ist die kleinste Menge aller Wörter, die • (Induktionsbeginn) ε enthält und • (Induktionsschritt) abgeschlossen ist gegen Konkatenation: Ist schon w ∈ Σ ∗ und ist a ∈ Σ, so ist auch wa in Σ ∗ . Später werden wir Strukturen kennenlernen, die sehr viel mehr und komplexere Bildungsregeln besitzen als Wörter. Für sie umfasst eine strukturelle 2.5 Grundbegriffe aus der Informatik 29 Induktion sehr viel mehr Fälle als nur die zwei, mit denen wir für Wörter auskommen. Definition 2.5.5 (Sprache, Operationen auf Sprachen). Eine Sprache L über Σ ist eine Menge von Wörtern über Σ, d.h. L ⊆ Σ ∗ . Dabei ist übrigens die leere Sprache L∅ = ∅ ungleich der Sprache L = {ε}, die nur das leere Wort enthält. Die Konkatenation zweier Sprachen L1 und L2 über Σ ist definiert als L1 ◦ L2 := { uv | u ∈ L1 , v ∈ L2 }. Für L1 ◦L2 schreiben wir auch kurz L1 L2 . Li , die Iteration einer Sprache L, ist induktiv definiert als L0 := {ε}, Ln+1 := LLn . Der Kleene-*-Abschluss einer Sprache L ist L∗ := S +-Abschluss von L ist L+ := i≥1 Li . S i≥0 Li . Der Kleene- ¡ ∗ ¢ Die Menge aller Sprachen über Σ und die Konkatenation, 2Σ , ◦ , bilden eine Halbgruppe mit dem Einselement {ε} und dem Nullelement ∅: • Die Konkatenation ist assoziativ, das heißt, es ist (L1 ◦ L2 ) ◦ L3 = L1 ◦ (L2 ◦ L3 ). • L ◦ ∅ = ∅ = ∅ ◦ L für alle Sprachen L, und • L ◦ {ε} = L = {ε} ◦ L für alle Sprachen L. Auch im Zusammenhang mit Sprachen gibt es den Begriff des Homomorphismus, den wir oben in Def. 2.3.4 im Zusammenhang mit algebraischen Strukturen definiert haben. Wenn man hier von einem Homomorphismus spricht, dann meint man eine Funktion, die jeweils einen Buchstaben aus einem Alphabet Σ auf ein (evtl. leeres) Wort aus Γ ∗ (für ein weiteres Alphabet Γ ) abbildet. h wird erweitert zu einer Funktion h : Σ ∗ → Γ ∗ , die ein ganzes Wort aus Σ ∗ auf ein Wort aus Γ ∗ abbildet, indem sie jeden einzelnen Buchstaben abbildet und die Ergebnisse zusammensetzt. Formal ausgedrückt: h : Σ ∗ → Γ ∗ ist ein Monoid-Homomorphismus vom Monoid (Σ ∗ , ◦, ε) in (Γ ∗ , ◦, ε) – ◦ ist hier die Konkatenation. Das heißt, es müssen, wie oben allgemein beschrieben, zwei Bedingungen gelten für h: • h(u ◦ v) = h(u) ◦ h(v) • h(ε) = ε. ∀u, v ∈ Σ ∗ , und Man kann nun zeigen (per Induktion), dass aus diesen Eigenschaften schon für ein beliebiges Wort w = a1 . . . an ∈ Σ ∗ mit ai ∈ Σ folgt, dass h(w) = h(a1 ) . . . h(an ) sein muss. Das heißt, wenn man den Wert von h nur für die einzelnen Buchstaben aus Σ angibt, so ist h damit schon eindeutig für alle w ∈ Σ ∗ definiert. Beispiel 2.5.6. Ist Σ = {a, b} und Γ = {0, 1}, dann kann man zum Beispiel einen Homomorphismus h definieren durch 30 2. Begriffe und Notationen • h(a) = 01 • h(b) = 011 Dieser Homomorphismus bildet beispielsweise das Wort aab ab auf h(aab) = 0101011. Zu Homomorphismen und Sprachen gibt es noch einige weitere wichtige Begriffe, die wir in der folgenden Definition zusammenfassen. Definition 2.5.7 (inverser, ε-freier Homomorphismus). Ist h : Σ ∗ → ∗ Γ ∗ ein Homomorphismus, so heißt h−1 : Γ ∗ → 2Σ ein inverser Homomorphismus (inverse hom). Hier ist h−1 die Urbild-Abbildung mit h−1 (u) = {w ∈ Σ ∗ | h(w) = u} für alle u ∈ Γ ∗ . Ein Homomorphismus h : Σ ∗ → Γ ∗ heißt ε-frei, falls h(a) 6= ε ∀a ∈ Σ. Ein inverser Homomorphismus bildet jeweils ein Wort w aus Γ ∗ auf eine Menge von Wörtern über Σ ∗ ab, nämlich auf die Menge all derer Wörter, die Urbilder von w sind. Sehen wir uns dazu ein Beispiel an. Beispiel 2.5.8. Sei Σ = {a, b} und sei der Homomorphismus h definiert durch h(a) = ab und h(b) = b. Dann ist z.B. h(aba) = abbab. Berechnen wir einmal h−1 (L) für dies h und die Beispielsprache L = {aba}∗ {b}. h−1 (L) ist die Menge all der Wörter über {a, b}, deren h-Abbild ein Wort aus L ist. Betrachten wir die Wörter aus L der Reihe nach. Das kürzeste Wort in L ist (aba)0 b = b. Sein Urbild ist h−1 (b) = {b}. Für das zweite Wort (aba)1 b = abab gibt es auch ein Urbild, nämlich h−1 (abab) = {aa}. Aber schon beim dritten Wort aus L gibt es Probleme: Wie müsste ein Wort aussehen, dessen h-Abbild (aba)2 b = abaabab wäre? Es müsste auf jeden Fall mit a anfangen, denn h(a) = ab. Aber die nächsten Buchstaben von abaabab sind aa, und es gibt kein Wort, dessen h-Abbild die Buchstabenfolge aa enthält. Also hat abaabab kein Urbild. Dasselbe gilt für (aba)3 b und alle weiteren Wörter in L. Also haben nur die ersten beiden Wörter ein Urbild, und es ist h−1 (L) = {b, aa}. ¡ −1 ¢ Es fällt auf, dass nicht unbedingt h h (L) = L ist. In diesem Fall ist ¡ −1 ¢ ¡ ¢ h h (L) = h {b, aa} = {b, abab} 6= L. Sei ` eine Sprachklasse. (Das ist einfach eine Menge von Sprachen.) Dann gilt mit unseren Abmachungen also, dass ` abgeschlossen gegen hom ist, falls für alle Homomorphismen h gilt, dass L ∈ ` =⇒ h(L) ∈ `. Eine Sprachklasse ` ist abgeschlossen gegen inverse hom, falls L ∈ ` =⇒ h−1 (L) ∈ ` für alle Homomorphismen h. Im folgenden nutzen wir häufig eine wichtige Eigenschaft von Σ ∗ : Satz 2.5.9. Für jedes beliebige Alphabet Σ ist Σ ∗ isomorph zu N. 2.5 Grundbegriffe aus der Informatik 31 Beweis: Die Menge Σ ∗ enthält auf jeden Fall unendlich viele Elemente. Also müssen wir, um den Satz zu beweisen, nur noch zeigen, dass Σ ∗ abzählbar ist. Das heißt, wir müssen die Wörter aus Σ ∗ in einer festen Reihenfolge aufzählen. Dazu bietet sich etwa die lexikographische Ordnung an: In Lexika sortiert man Wörter über dem Alphabet {a, . . . , z} üblicherweise so, dass die Wörter, die mit einem weiter vorn im Alphabet stehenden Buchstaben beginnen, vor denen angeführt sind, die mit einem weiter hinten stehenden Buchstaben anfangen. Wörter mit einem gleichen Präfix werden nach dem ersten Buchstaben sortiert, in dem sie sich unterscheiden. Diesen Ansatz verallgemeinern wir, mit dem Unterschied zur Wortsortierung in Lexika, dass wir kürzere Wörter grundsätzlich vor längeren anordnen, unabhängig von ihrem Anfangsbuchstaben. Wir legen zunächst eine beliebige Ordnung für die Buchstaben aus Σ fest: Σ ist per Definition eine nicht-leere, endliche Menge, sagen wir von n Elementen. Dann seien die Buchstaben von Σ irgendwie als {a1 , a2 , . . . , an } angeordnet. Auf dieser Ordnung aufbauend, definieren wir für w1 , w2 ∈ Σ ∗ , unter welchen Bedingungen w1 vor w2 aufgezählt werden soll: w1 <` w2 :⇐⇒ |w1 | < |w2 | oder ³ |w1 | = |w2 | ∧ ∃aj , ak ∈ Σ, u, w10 , w20 ∈ Σ ∗ ¢´ ¡ w1 = uaj w10 ∧ w2 = uak w20 ∧ j < k Für zwei Wörter w1 6= w2 gilt damit auf jeden Fall entweder w1 <` w2 oder w2 <` w1 . Nun zählen wir die Wörter aus Σ ∗ in der Reihenfolge auf, die <` vorgibt: Wir fangen an mit dem kleinsten Wort bezüglich <` , das ist das leere Wort ε, und fahren fort mit dem nächstgrößeren. Formal kann man diese Aufzählungsreihenfolge durch eine surjektive Funktion f : N → Σ ∗ beschreiben: ε, falls n = 0 f (n) := w, falls es genau n − 1 Wörter in Σ ∗ gibt, die bzgl. <` kleiner sind als w. Dieser Satz hat eine ganz interessante Konsequenz: Wenn A eine beliebige abzählbare Menge ist, dann kann man die Elemente von A statt über Nummern aus N auch über Wörter aus Σ ∗ identifizieren für jedes beliebige Alphabet Σ. Anders ausgedrückt: Zu jeder nichtleeren abzählbaren Menge A und jedem Alphabet Σ gibt es eine surjektive Funktion f : Σ ∗ → A. Das heißt, zu jedem Element a von A gibt es mindestens einen Bezeichner w ∈ Σ ∗ , so dass f (w) = a ist. Wie findet man nun diese surjektive Funktion f : Σ ∗ → A? Da A nichtleer und abzählbar ist, gibt es schon eine surjektive Funktion g : N → A 32 2. Begriffe und Notationen entsprechend der Definition von Abzählbarkeit. Nun haben wir im letzten Satz gezeigt, dass N isomorph ist zu Σ ∗ , und das wiederum heißt, dass es eine bijektive Funktion h : Σ ∗ → N gibt. Damit haben wir schon die gesuchte surjektive Funktion f : Es ist f = h ◦ g. Wenn A unendlich ist, gibt es sogar eine bijektive Funktion f : Σ ∗ → A. Jede unendliche abzählbare Menge, und damit auch A, ist ja isomorph zu N, also gibt es auch eine bijektive Funktion g : N → A. 2.6 Probleme und Algorithmen Als nächstes wollen wir den Begriff eines Problems einführen. Ein Problem ist eine Fragestellung wie Gegeben ein Prolog-Programm, ist es syntaktisch ” korrekt?“ oder Gegeben ein C-Programm, terminiert es bei Eingabe Hal” ’ lo‘?“ Für ein konkretes (C- oder Prolog-) Programm ist die Antwort auf eine solche Frage immer Ja“ oder Nein“ (auch wenn es sein kann, dass man ” ” nicht in der Lage ist, diese Antwort zu berechnen). Informelle Definition eines Problems: Ein Problem P ist die Frage, ob eine bestimmte Eigenschaft auf ein Objekt o zutrifft. Betrachtet werden dabei Objekte aus einer bekannten Grundmenge O, so dass für jedes Objekt o ∈ O die Frage, ob P auf o zutrifft, mit Ja oder Nein zu beantworten ist. Für ein gegebenes konkretes Objekt o heißt die Frage, ob P auf dies o zutrifft, eine Instanz des Problems. Ein Problem heißt abzählbar, falls die Grundmenge O abzählbar ist. Ein Problem ist z.B. Gegeben eine natürliche Zahl n, ist sie eine Prim” zahl?“ In diesem Fall ist die Grundmenge O = N, und eine Instanz des Problems ist z.B. Ist die Zahl 734587631 eine Primzahl?“ ” Man kann P auch als ein Prädikat ansehen mit o als Variablen. Dann ist P (o) wahr gdw. die Antwort auf die Frage, ob P für o gilt, Ja ist. Auch zwischen dem Begriff eines Problems und Sprachen gibt es eine Verbindung: Man kann ein abzählbares Problem P ansehen als eine Sprache. Σ ∗ bezeichnet dann die Grundmenge O, die Objekte werden durch Wörter w ∈ Σ ∗ repräsentiert, und das Problem entspricht der Sprache LP = { w ∈ Σ ∗ | P (w) }. Wir haben oben gesagt, dass für jedes Objekt o ∈ O die Frage, ob P (o) gilt, mit Ja oder Nein zu beantworten ist. Das heißt aber nicht, dass man auch in der Lage sein muss, für jedes o die richtige Antwort Ja oder Nein zu geben. Es kann also auch sein, dass es für die Beantwortung der Frage Gegeben o ∈ O, gilt P (o)?“ überhaupt keinen Algorithmus gibt. Da wir ” im folgenden für viele Probleme zeigen wollen, dass sie berechnet werden können, müssen wir als nächstes (informell) festlegen, was wir unter einem Algorithmus verstehen. Informelle Definition eines Algorithmus: Ein Algorithmus für ein Problem P über einer abzählbaren Grundmenge O ist ein Programm einer höheren Programmiersprache, das bei Eingabe eines beliebigen Objekts 2.7 Zusammenfassung 33 o ∈ O auf einem Rechner mit beliebig großen Speicherplatz nach beliebig langer, aber endlicher Rechenzeit terminiert, und zwar mit der Antwort Ja, falls P (o) gilt, ansonsten mit der Antwort Nein. Entscheidend ist hierbei, dass ein und derselbe Algorithmus die Frage, ob P (o) gilt, für alle o ∈ O lösen muss. Wenn man für jede Instanz einen anderen Algorithmus angeben könnte, so käme man mit zwei Algorithmen aus: einem, der grundsätzlich immer Ja antwortet, und einem, der immer Nein antwortet; für jede Instanz o gibt schließlich einer von beiden die richtige Antwort. Entscheidbare Probleme: Ein Problem heißt entscheidbar, wenn es dafür einen Algorithmus gibt. Definition 2.6.1 (Charakteristische Funktion). Die charakteristische Funktion gL einer Sprache L über Σ ist die Abbildung gL : Σ ∗ → {0, 1} mit 1, falls w ∈ L ist gL (w) := 0, sonst. Manchmal wählt man als Wertemenge von gL auch {Y, N } oder {true, f alse}, mit gL (w) = Y (bzw. true) gdw. w ∈ L ist. Eine Sprache L (bzw. ein Problem L) ist genau dann algorithmisch entscheidbar, wenn es einen Algorithmus gibt, der die charakteristische Funktion gL von L berechnet. 2.7 Zusammenfassung In diesem Kapitel haben wir verschiedene Begriffe und Notationen teils neu eingeführt, teils wiederholt: • Wir haben zwei Arten von logischen Formeln vorgestellt, Formeln, die immer nur einzelne Objekte betreffen können, und Prädikate, die Variablen enthalten und deshalb Eigenschaften von Objektmengen beschreiben können. Die logischen Operatoren (Konnektoren) ¬ (nicht), ∧ (und), ∨ (oder), =⇒ (folgt) und ⇐⇒ (genau dann, wenn) können in Formeln mit oder ohne Variablen verwendet werden. Die Operatoren ∀ (Allquantor) und ∃ (Existenzquantor) werden nur in Prädikaten verwendet. • Wir haben verschiedene Notationen für Mengen, Funktionen und Relationen wiederholt. • Bei dem Konzept der Abgeschlossenheit geht es um die Frage, ob ein Operator, angewandt auf Elemente einer Menge M , auf jeden Fall wieder ein Element aus M als Ergebnis liefert. • Eine Sprache ist eine Menge von Wörtern, und ein Wort ist eine Kette von Buchstaben aus einem Alphabet Σ. Σ ∗ ist die Menge aller Wörter über dem Alphabet Σ. 34 2. Begriffe und Notationen • Ein Problem ist eine Frage, die sich auf eine Menge O von Objekten bezieht und für jedes o mit Ja oder Nein beantwortet werden kann. Ein entscheidbares Problem ist eines, für das ein Algorithmus existiert, also ein Programm, das die Frage für jedes Objekt aus O in endlicher Zeit beantwortet.