Mathematik und Logik 2005W Franz Binder 21. Juni 2006 Inhaltsverzeichnis 1 Logik 1.1 Aussagen und Beweise . . . . . . . 1.2 Aussagenlogik . . . . . . . . . . . . Implikation, (⇒) . . . . . . . . . . Konjunktion (Logisches Und, ∧, &) Disjunktion, Logisches Oder . . . . 1.3 Konstruktionen/Beweise . . . . . . Implikation . . . . . . . . . . . . . Konjunktion . . . . . . . . . . . . . Disjunktion . . . . . . . . . . . . . 1.4 Prädikatenlogik . . . . . . . . . . . Existenz-Quantor . . . . . . . . . . 1.5 Boolsche Logik . . . . . . . . . . . Negation . . . . . . . . . . . . . . . Entscheidbare Aussagen . . . . . . Wahrheitstafeln . . . . . . . . . . . Gleichungen der Boolschen Algebra Disjunktive Normalform . . . . . . Klassische Logik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 6 6 7 9 11 11 12 13 14 15 17 17 18 19 19 19 21 2 Mengen 2.1 Äquivalenzrelationen . . . . . . . 2.2 Konstruktionen für Mengen . . . Funktionen . . . . . . . . . . . . Direktes Produkt . . . . . . . . . Direkte Summe . . . . . . . . . . 2.3 Potenzmenge . . . . . . . . . . . Teilmengen . . . . . . . . . . . . Mengenalgebra . . . . . . . . . . Beispiele . . . . . . . . . . . . . . 2.4 Gleichmächtigkeit . . . . . . . . . 2.5 Konstruktion der Zahlenmengen Ganze Zahlen . . . . . . . . . . . Rationale Zahlen . . . . . . . . . Irrationale Zahlen . . . . . . . . Reelle Zahlen . . . . . . . . . . . 2.6 Kombinatorik . . . . . . . . . . . Permutationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 23 24 24 26 26 27 27 28 30 31 33 33 36 37 37 38 38 1 . . . . . . . . . . . . . . . . . Kombinationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Rekursion 3.1 Natürliche Zahlen . . . . . . . . . . Konstruktoren . . . . . . . . . . . Peano-Induktion . . . . . . . . . . Selektoren . . . . . . . . . . . . . . Gleichheit . . . . . . . . . . . . . . Vorgänger . . . . . . . . . . . . . . Addition . . . . . . . . . . . . . . . 3.2 Teilbarkeit . . . . . . . . . . . . . . 3.3 Modulare Arithmetik . . . . . . . . 3.4 Primzahlen . . . . . . . . . . . . . RSA-Verfahren . . . . . . . . . . . 3.5 Listen . . . . . . . . . . . . . . . . Introduktion: Listen-Konstruktoren Elimination: Listen-Induktion . . . Selektor: Rekursion . . . . . . . . . Gleichheit . . . . . . . . . . . . . . Länge . . . . . . . . . . . . . . . . Hintenanfügen und Umkehren . . . Listenverkettung . . . . . . . . . . Auswahl . . . . . . . . . . . . . . . Geordnete Listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 40 40 40 40 41 41 43 45 46 48 50 52 54 54 54 55 55 57 57 58 60 61 4 Algebra 63 4.1 Halbgruppen, Monoide . . . . . . . . . . . . . . . . . . . . . . . . 63 4.2 Gruppen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 4.3 Ringe und Körper . . . . . . . . . . . . . . . . . . . . . . . . . . 65 5 Lineare Algebra 5.1 Affine Räume . . . . . . . . . . 5.2 Lineare Räume (Vektorräume) 5.3 Basis . . . . . . . . . . . . . . . 5.4 Lineare Abbildungen . . . . . . 5.5 Matrizen . . . . . . . . . . . . . 5.6 Lineare Gleichungen . . . . . . 5.7 Euklidische Raume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Codierungstheorie 7 Relationen Relationenprodukt . . . 7.1 Äquivalenzrelationen . . 7.2 Ordnungsrelationen . . . 7.3 Funktionale Relationen . 66 66 68 69 71 72 75 76 77 . . . . . . . . . . . . . . . . 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 82 84 85 86 8 Graphentheorie 8.1 Einführung . . . . . . . . Grundlegende Begriffe . . Relationen und Graphen . Isomorphie . . . . . . . . Endliche Graphen . . . . Grad . . . . . . . . . . . . 8.2 Wege . . . . . . . . . . . . Zusammenhang . . . . . . Eulersche Graphen . . . . Hamiltonsche Kreise . . . 8.3 Bäume . . . . . . . . . . . Zyklenrang . . . . . . . . Aufspannende Bäume . . Wurzelbäume . . . . . . . Binärbäume . . . . . . . . 8.4 Planare Graphen . . . . . Einbettungen . . . . . . . Eulersche Polyederformel Kuratowski-Graphen . . . 8.5 Färbbarkeit . . . . . . . . k-Färbung . . . . . . . . . Bipartite Graphen . . . . 3-Färbbarkeit . . . . . . . Landkarten . . . . . . . . 8.6 Kürzeste Wege . . . . . . 8.7 Flußprobleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 88 88 89 90 90 91 92 92 92 93 93 93 94 95 96 98 98 98 99 100 100 100 101 101 102 103 9 Automaten, Formale Sprachen, Berechenbarkeit 9.1 Wörter . . . . . . . . . . . . . . . . . . . . . . . . . 9.2 Formale Sprachen . . . . . . . . . . . . . . . . . . . 9.3 Endliche Automaten . . . . . . . . . . . . . . . . . 9.4 Reguläre Sprachen . . . . . . . . . . . . . . . . . . 9.5 Reguläre Sprachen . . . . . . . . . . . . . . . . . . 9.6 Grammatiken . . . . . . . . . . . . . . . . . . . . . 9.7 Kontexfreie Sprachen . . . . . . . . . . . . . . . . . 9.8 Kontextsensitive Sprachen . . . . . . . . . . . . . . 9.9 Turingmaschine . . . . . . . . . . . . . . . . . . . . 9.10 Rekursiv und Rekursiv aufzählbar . . . . . . . . . 9.11 Abschlußeigenschaften . . . . . . . . . . . . . . . . 9.12 Entscheidbarkeitseigenschaften . . . . . . . . . . . 9.13 Berechenbarkeit . . . . . . . . . . . . . . . . . . . . 9.14 Entscheidbarkeit . . . . . . . . . . . . . . . . . . . 9.15 Komplexitätsklassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 104 105 106 108 110 112 114 115 116 117 118 118 118 119 120 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Kapitel 4 Algebra 4.1 Halbgruppen, Monoide 4.1.1 Definition. Sei A eine Menge und ◦ : A → A → A eine zweistellige Operation darin. Dann heißt A zusammen mit ◦ eine Halbgruppe genau dann wenn ◦ assoziativ ist, d.h. wenn für alle x, y, z : A gilt (x ◦ y) ◦ z = x ◦ (y ◦ z). 4.1.2 Beispiel. Halbgruppen sind 1. alle Zahlenmengen, sowohl mit der Addition als auch mit der Multiplikation: (N, +), (Z, +), (Q, +), (A, +), (R, +); (N, ·), . . . , (R, ·); 2. die logischen Aussagen zusammen mit ∧ oder ∨, also (Ω, ∧) und (Ω, ∨); 3. die Potenzmenge einer Menge X zusammen mit Durchschnitt oder Vereinigung, also (P(X), ∩) und (P(X), ∪); Für eine beliebige Menge X, die Listen über diesem Alphabet zusammen mit der Listenverkettung, also (X ∗ , ¦); 4. die Menge aller Funktionen einer Menge X in sich zusammen mit der Hintereinanderausführung, (X → X, ◦). 5. Die Menge aller Relationen auf einer Menge X zusammen mit dem Relationenprodukt. Keine Halbgruppe erhält man dagegen mit dem Potenzieren, und mit der Subtraktion (Assoziativität verletzt); ferner mit dem Listeneinfügen (hier handelt es sich nicht einmal um eine zweistellige Operation in der Menge), bei der logischen Implikation und Äquivalenz (ebenfalls nicht assoziativ). Bei der Implikation beachte man besonders, daß wir gezeigt haben, daß eine Aussage der Form A =⇒ (B =⇒ C stets zu (A ∧ B) =⇒ C äquivalend ist, was im allgemeinen nicht dasselbe ist wie (A =⇒ B) =⇒ C. Bei der Äquivalenz ist zu beachten, daß die Notation A ⇐⇒ B ⇐⇒ C als Abkürzung für (A ⇐⇒ B) ∧ (B ⇐⇒ C) zu verstehen ist, und daher weder zu (A ⇐⇒ B) ⇐⇒ C noch zu A ⇐⇒ (B ⇐⇒ C) äquivalent ist. Ebenfalls keine Halbgruppe bilden etwa die ungeraden Zahlen zusammen mit der Addition (weil die Summe zweier ungerader Zahlen nicht wieder ungerade ist), wohl aber mit der Multiplikation. 63 4.1.3 Definition. Sei (H, ◦) eine Halbgruppe und e : H. Dann heißt e ein neutrales Element wenn für alle h : H gilt e ◦ h = h = h ◦ e. Man nennt dann H zusammen mit ◦ und e, also (H, ◦, e), ein Monoid. Sind e1 , e1 : H zwei neutrale Elemente einer Halbgruppe, dann gilt einerseits e1 ◦ e2 = e2 (weil e1 neutral ist) und andererseits e1 ◦ e2 = e1 (weil auch e2 neutral ist. Daher muß e1 = e2 sein, d.h. in jeder Halbgruppe gibt es höchstens ein neutrales Element. Man kann daher gefahrlos auch einfach vom Monoid (H, ◦) reden, da das neutrale Element eindeutig bestimmt ist. Alle erwähnten Beispiele von Halbgruppen enthalten ein neutrales Element und können daher als Monoide betrachtet werden. Das neutrale Element für die Addition ist stets 0, das für die Multiplikation ist 1. Bei den logischen Verknüpfungen sind > bzw. ⊥ neutral, bei der Potenzmenge ist es die leere Menge bzw. die Grundmenge. Bei der Listenverkettung ist es die leere Liste und bei der Hintereinanderausführung von Funktionen die identische Funktion. Kein neutrales Element haben dagegen etwa die strikt positiven Zahlen zusammen mit der Addition: hier fehlt die Null; oder die geraden Zahlen, mit der Multiplikation (weil 1 nicht in der Menge ist). In einem Monoid H kann man auch Potenzieren: ist h : H und n : N, dann definiert man rekursiv h0 = 1 h = h ◦ hn . n+1 (Dies funktioniert natürlich auch für Halbgruppen ohne neutrales Element, wenn man mit h1 = h anfängt.) Es gilt dann das bekannte Rechengesetz hm ◦ hn = hm+n , (4.1) im allgemeinen aber nicht (g ◦ h)n = g n ◦ hn , weil dies Kommutativität von ◦ voraussetzt. In jedem Fall aber gilt hm ◦ hn = hn ◦ hm . Man beachte, daß wir hier nur von positiven Exponenten reden. 4.2 Gruppen 4.2.1 Definition. Sei (G, ◦, 1) ein Monoid. Dann heißen g, h : G zueinander invers, wenn g ◦ h = 1 = h ◦ g gilt. Besitzt jedes Element ein inverses, dann ist dieses eindeutig bestimmt und wird mit g −1 bezeichnet (oder mit −g, bei additiver Schreibweise). Das Monoid zusammen mit dieser zusätzlichen (einstelligen) Operation heißt dann eine Gruppe. D.h., (G, ◦, 1, (−1 )) ist eine Gruppe falls (G, ◦, 1) ein Monoid ist und für alle g : G gilt g ◦ g −1 = 1 = g −1 ◦ g. Die Notation für das Inverse passt gut zum Potenzieren, da damit tatsächlich die Beziehung in Gleichung 4.1 auf beliebige ganzzahlige Exponenten erweitert wird. 64 Einige unserer Standardbeispiele für Halbgruppen führen tatsächlich zu Gruppen: (Z, +, 0, −), (Q, ·, (−1 )), (R, ·, (−1 )). Keine inversen Elemente gibt es dagegen bei der Listenverkettung. Auch die erwähnten logischen Operationen erlauben keine Inversen (¬A ist nicht invers zu A, denn A ∧ ¬A = ⊥, neutral ist aber >). Auch (X → X, ◦) führt zu keiner Gruppe, da Funktionen nur dann ein Inverses haben, wenn sie bijektiv sind. Allerdings ergibt die Hintereinanderausführung von bijektiven Funktionen wieder eine bijektive Funktion (es gilt konkret: (f ◦ g)−1 = g −1 ◦ f −1 , man beachte die Umkehrung der Reihenfolge), weshalb die Menge der bijektiven Funktionen von X → X, oft auch Permutationen von X genannt und mit P (X) bezeichnet, sehr wohl eine Gruppe bildet. Im Gegensatz zu den erwähnten Gruppen mit Zahlen, ist die Gruppe der Permutationen nicht kommutativ. 4.3 Ringe und Körper Bei Gruppen betrachtet man nur zwei der üblichen vier Grundrechnungsarten. 4.3.1 Definition. Sei (R, +, 0, −) eine kommutative Gruppe und (R, ·, 1) ein Monoid, dann heißt (R, +, 0, −, ·, 1) ein Ring, falls zusätzlich die Distributivgesetze (a + b) · c = a · c + b · c a · (b + c) = a · b + a · c gelten. Da sich die jeweiligen neutralen Elemente und die Operation für das Inverse eindeutig ergeben, spricht man kürzer vom Ring (R, +, ·), oder einfach vom Ring R, falls auch die Operationen aus dem Zusammenhang klar sind. Man beachte, daß man beide Distributivgesetze benötigt, da die Multiplikation nicht immer als kommutativ vorausgesetzt wird. Die bekannten Beispiele (Z, +, ·), (Q, +, ·), (R, +, ·) sind allerdings allsamt kommutative Ringe. Nichtkommutative Ringe ergeben sich in natürlicher Weise in der Linearen Algebra duch lineare Abbildungen oder Matrizen. Eine weitere wichtige Klasse von kommutativen Ringen bilden die Restklassenringe Zm , welche im wesentlichen dem Ring Z entsprechen, allerdings werden zwei Elemente als gleich betrachtet, wenn die modulo m denselben Rest ergeben, d.h. Zm = {0, 1, . . . , m − 1}. Weiters sind die Polynomringe zu erwähnen: ist R ein kommutativer Ring, dann bezeichnen wir mit R[x] den Ring aller Polynome in der Variablen x mit Koeffizienten aus R, d.h. R[x] = { n X k=0 ak xk | n : N, a1 . . . , an : R}. 65 Kapitel 5 Lineare Algebra 5.1 Affine Räume Ein Punkt in einer Ebene (oder im 3-dimensionalen Raum unserer Anschauung) bezeichnet eine ganz bestimmte Stelle. Er hat keine Ausdehnung, Farbe oder sonstige weitere Eigenschaften. Es macht keinen geometrischen Sinn, einen Punkt mit einer Zahl zu multiplizieren oder zwei Punkte zu addieren. Wohl aber läßt sich zwei Punkten P und Q derjenige Punkt M zuordnen, welcher genau in der Mitte dieser beiden liegt. Es liegt nahe, M mit 12 P + 21 Q zu bezeichnen, obwohl wir gerade bemerkt haben, daß die Hälfte eines Punktes geometrisch keinen Sinn ergibt. Die Idee, den Mittelpunkt zu betrachten, läßt sich verallgemeinern. Sei V der Mittelpunkt von P und M , also V = 21 P + 21 M = 12 P + 21 ( 12 P + 12 Q) = 34 P + 41 Q (Definition von V ) (Definition von M eingesetzt) (übliche Rechenregeln) Obwohl die Anwendung der üblichen Rechenregeln sich hier bloß aus der gewählten Notation für den Mittelpunkt ergab und überhaupt nicht geometrisch gerechtfertigt wurde, kann das Ergebnis sehr gut geometrisch interpretiert werden, denn V liegt gerade bei einem Viertel des Weges auf der Strecke von P nach Q. Mit dieser Interpretation ist auch klar, daß etwa der Punkt 23 P + 31 Q auf einem Drittel des Weges zu liegen hat. Allgemeiner bezeichnet (1 − λ)P + λQ denjenigen Punkt, welcher einen Anteil von λ an der Strecke von P nach Q bezeichnet. Dies ist allgemein verständlich, falls 0 ≤ λ ≤ 1 gilt. Für λ = 0 erhalten wir insbesondere 1P + 0Q = P . Schwieriger wird die Interpretation, wenn etwa λ = −1 ist. Das bedeutet, daß die Strecke von P nach Q minus einmal zurückgelegt wurde, was man am besten so interpretiert, daß man an einem Punkt N angelangt ist, nachdem die volle Strecke in der entgegengesetzten Richtung zurückgelegt wurde. Es gilt dann P = 12 N + 12 Q, und eine Umformung gemäß den üblichen Rechenregeln ergibt dann N = 2P − Q, was tatsächlich genau dem Fall λ = −1 entspricht. Sind P und Q Punkte, und λ, µ ∈ R mit λ + µ = 1, dann heißt λP + µQ eine Affinkombination der Punkte P und Q. Mittels der obigen Überlegungen haben wir jeder Affinkombination von Punkten in einer Ebene (oder im Raum) 66 eine geometrische Bedeutung gegeben, d.h. einen passenden Punkt auf der Verbindungsgeraden zugeordnet. Es können auch mehrere Punkte affin kombinert werden. Pn 5.1.1 Definition. Pn Für beliebige Zahlen λ1 , . . . , λn ∈ R mit k=1 λk bezeichnet der Ausdruck k=1 λk Pk eine Affinkombination von P1 , . . . , Pn . Die Zahlen λk heißen Koeffizienten oder Gewichte. Die Bezeichnung Gewichte kann man durchaus Pn wörtlich nehmen: Sind in den Punkten Pk die Gewichte λk verteilt, so ist k=1 λk Pk gerade deren Schwerpunkt. Das gilt auch für negative Gewichte, also Kräfte, die nach oben wirken. 5.1.2 Definition. Ist jeder Affinkombination von Elementen einer Menge wieder ein Element derselben Menge zugeordnet, sodaß für die Affinkombinationen die der Notation entsprechenden üblichen Rechenregeln gelten, dann spricht man von einem affinen Raum. Beispiele: Ebene, Raum, aber auch z.B. unendliche Folgen von Punkten (hier erfolgen die Affinkombinationen komponentenweise). 5.1.3 Definition. Sind P1 , . . . , Pn Punkte eines affinen PnRaumes, dann heißt die Gesamtheit aller Affinkombinationen dieser Punkte { k=1 λk Pk | λ1 , . . . , λn ∈ Pn R, k=1 λk = 1} die affine Hülle von P1 , . . . , Pn . Jede affine Hülle bildet einen affinen Raum. Die affine Hülle von zwei verschiedenen Punkten ist eine Gerade. Die affine Hülle von drei Punkten ist eine Ebene, außer sie liegen zufällig alle auf einer Geraden. 5.1.4 Definition. Eine Menge von Punkten heißt affin unabhängig, falls die Darstellung jedes Punktes in deren affiner Hülle eindeutig ist. Ansonsten ist sie affin abhängig. 5.1.5 Satz. Eine Menge von Punkten ist affin abhängig falls sich einer dieser Punkte als Affinkombination der anderen darstellen läßt, oder falls sich trotz Weglassen eines geeigneten Punktes dieselbe affine Hülle ergibt. 5.1.6 Definition. Eine Menge von Punkten eines affinen Raumes heißt aufspannend, falls sich jeder Punkt des Raumes als Affinkombination von Punkten aus dieser Menge darstellen läßt, d.h. wenn die affine Hülle dieser Menge der ganze Raum ist. 5.1.7 Definition. Eine affin unabhängige aufspannende Menge von Punkten eines affinen Raumes heißt affine Basis dieses Raumes. Es läßt sich zeigen, daß die Anzahl der Elemente zweier affiner Basen desselben Raumes stets gleich ist. Die Dimension eines affinen Raums ist die um eins verminderte Anzahl der Elemente einer affinen Basis. Beispiel: Jede Ebene hat eine affine Basis bestehend aus 3 Punkten. Sie hat daher die Dimension 2. 5.1.8 Definition. Eine Affinkombination heißt Konvexkombination, wenn alle Koeffizienten ≥ 0 sind. Entsprechend ergibt sich der Begriff der konvexen Hülle. 67 5.1.9 Beispiel. Der statistische Mittelwert ist eine Konvexkombination aller beobachteten Werte. Wurden n verschiedene Werte x1 , . . . , xn beobachtet, dann wird jeder Wert mit Pndessen relativer Häufigkeit hn (xk ) gewichtet, was zur Konvexkombination k=1 hn (xk )xk führt. Man beachte, daß die relativen Häufigkeiten stets ≥ 0 sind und in Summe stets 1 ergeben, was gerade die Bedingungen für eine Konvexkombination sind. Der Erwartungswert E(X) einer Zufallsgröße X ist eine Konvexkombination aller möglichen Werte x1 , . . . , xn , und die Koeffizienten entsprechen gerade den Wahrscheinlichkeiten Pn P (X = xk ) für das Auftreten der entsprechenden Werte. Also E(X) = xk P (X = xk )xk . Anmerkung: Dies ist genaugenommen natürlich nur dann richtig, wenn X eine diskrete Zufallsgröße ist, die nur endlich viele Werte annehmen kann. Ansonsten muß man unendliche Konvexkombinationen bzw. ein Integral (bei kontinuierlichen Zufallsgrößen) betrachten. Darauf wollen wir hier aber nicht eingehen. Alle statistischen Methoden, die mit dem Mittelwert arbeiten, funktionieren daher nur dann sinnvoll, wenn die Werte der Zufallsgrößen nach Belieben zumindest konvex kombiniert werden können. In der Statistik spricht man dann von einem metrischen Merkmal. 5.2 Lineare Räume (Vektorräume) Daß bei einer Affinkombination die Summe der Koeffizienten stets gleich 1 sein muß, ist ein lästiger Schönheitsfehler. Insbesondere die Notation kann sehr verwirrend sein, da etwa 21 P + 12 Q eine Bedeutung hat, obwohl 21 P und 12 Q sinnlos sind. Zur Schönheitskorrektur wählt man irgendeinen Punkt O als besonderen Punkt (Nullpunkt, Ursprung), und betrachtet alle Punkte relativ zu diesem. Damit wird jeder Punkt P mit dem Vektor von O nach P identifiziert. Ein Vektor wird üblicherweise als Pfeil dargestellt, ist aber als Bewegungsrichtung zu verstehen, d.h. parallelverschobene Pfeile bezeichnen denselben Vektor. Ein Vektor v kann mit beliebigen Zahlen skaliert werden: 12 v bezeichnet den Vektor, der in dieselbe Richtung zeigt wie v, aber nur halb so lang ist; −v zeigt in die umgekehrte Richtung. Sind v, w Vektoren, so köennen diese Bewegungsrichtungen“ auch zusam” mengesetzt werden: man bewegt sich zuerst entlang v und von dort ausgehend entlang w. Dieser zusammengesetzte Vektor wird mit v + w bezeichnet und bildet tatsächlich eine sinnvolle Addition. Insbesondere ist sie assoziativ, der Nullvektor o (der Vektor von O nach O) verhält sich neutral, es gibt Inverse (−v + v = o = v − v), und sie ist auch kommutativ: v + w = w + v (Kräfteparallelogramm). Die Addition von Vektoren führt daher zu einer (additiv geschriebenen) kommutativen Gruppe. Mit Vektoren können somit beliebige Linearkombinationen gebildet werden. D.h., Pn sind v1 , . . . , vn Vektoren und λ1 , . . . , λn beliebige Zahlen, dann ist auch k=1 λk vk ein Vektor, und es gelten die üblichen Rechengesetze. Da Vektoren neben der Addition auch noch die Skalierung zulassen, haben sie eine reichere algebraische Struktur als die einer kommutative Gruppe. Sie bilden einen Vektorraum (auch: linearer Raum). Genauer: 5.2.1 Definition. Wird für eine kommutative Gruppe V jede Zahl λ mit einer 68 Abbildung V → V identifiziert, sodaß die folgenden Rechengesetze gelten, λ(v + w) = λv + λw) λ(µv) = (λµ)v 1v = v (λ + µ)v = λv + µv dann spricht man vom Vekorraum (oder linearen Raum) V . Analog zur affinen Hülle, besteht die lineare Hülle einer Menge von Vektoren aus all denjenigen Vektoren, die man daraus mittels Linearkombinationen erhält. Eine solche Menge von Vektoren identifiziert man dabei am besten mit der Menge aller zugehörigen Punkte, also derjenigen, die mit einem der Vektoren aus der Menge vom Ursprung aus erreicht werden. Man beachte, daß dann die lineare Hülle eines einzigen Vektors bereits eine Gerade ergibt, und die lineare Hülle von zwei Vektoren eine Ebene (außer einer der Vektoren ist ein Vielfaches des anderen). Ist T eine Menge von Vektoren, dann bezeichnen wir mit L(T ) deren lineare Hülle. Eine Menge von Vektoren heißt linear unabhängig, falls die Darstellung jedes Vektores in deren linearen Hülle eindeutig ist. Ansonsten ist sie linear abhängig. Eine Menge von Vektoren ist linear abhängig falls sich einer dieser Vektoren als Linearkombination der anderen darstellen läßt, oder falls sich trotz Weglassen eines geeigneten Vektors dieselbe lineare Hülle ergibt. Eine Menge von Vektoren ist bereits dann linear unabhängig, wenn sich der Nullvektor nur auf die eine Weise (nämlich alle Koeffizienten 0) darstellen läßt. Eine Menge von Vektoren eines linearen Raumes heißt aufspannend, falls sich jeder Vektor des Raumes als Linearkombination von Vektoren aus dieser Menge darstellen läßt, d.h. wenn die lineare Hülle dieser Menge der ganze Raum ist. 5.3 Basis Eine linear unabhängige aufspannende Menge von Vektoren eines linearen Raumes heißt lineare Basis dieses Raumes (oder einfach Basis). Es läßt sich zeigen, daß die Anzahl der Elemente zweier Basen desselben Raumes stets gleich ist. Die Dimension eines linearen Raums ist die Anzahl der Elemente einer Basis. Beispiel: Jede Ebene hat eine Basis bestehend aus 2 Vekoren. Sie hat daher die Dimension 2. Selbstverständlich ist jeder lineare Raum auch ein affiner Raum (weil jede Affinkombination eine Linearkombination ist). Umgekehrt kann man jeden affinen Raum als linearen Raum betrachten, sobald ein Ursprung gewählt ist. Der Unterschied besteht daher nur in der Betrachtungsweise: ist ein besonderer Punkt ausgezeichnet oder nicht? Auch Vektoren sind immer noch eher geometrische Gebilde, mit denen man nicht rechnen kann. Wir wählen daher zusätzlich zum Ursprung noch eine Basis B. Ist der Vektorraum n-dimensional, so besteht diese aus n Vektoren, welche wir mit b1 , . . . , bn bezeichnen. Sei nun v ein beliebiger Vektor, dann läßt sich dieser eindeutig als Linearkombination der Basiselemente P darstellen, d.h. es gibt n eindeutig bestimmte Koeffizienten λ1 , . . . , λn , sodaß v = k=1 λk bk . Diese Koeffizienten heißten die Koordinaten von v bezüglich b1 , . . . , bn . Damit ist es uns gelungen, jedem Punkt eindeutig eine endliche Folge von Zahlen zuzuordnen. Und damit kann man effektiv rechnen, denn, wie nicht 69 schwer zu erkennen, findet man die Koeffizienten einer Linearkombination einfach, indem man dieselbe Linearkombination komponentenweise für alle Koeffizenten durchführt. Z.B. n X λk bk + k=1 α n X k=1 n X µk bk = λk bk = n X (λk + µk )bk ; k=1 n X (αλk )bk . k=1 k=1 Zu beachten ist auch, daß diese Operationen für die einzelnen Koeffizienten unabhängig voneinander sind, d.h. parallel ausgeführt werden können. Dies ist insbesondere dann von Vorteil, wenn man einen Parallelrechner mit n Prozessoren zur Verfügung hat, da dann eine Addition von Vektoren genausolange dauert wie die Addition von Zahlen. Da Vektoren als Zahlenfolgen (fixer Länge) dargestellt werden können, bilden auch diese selbst, mit komponentenweisen Linearkombinationen, einen Vektorraum. Damit erhalten Zahlenfolgen eine geometrische Interpretation. 5.3.1 Beispiel. Der einfachste Vektorraum ist R selbst. Geometrisch interpretiert entspricht er einer Geraden. Entsprechend sind R2 und R3 , mit komponentenweisen Linearkombinationen, Vektorräume und als Ebene bzw. Raum zu interpretieren. Dasselbe gilt natürlich auch für höherdimensionale Rn , wobei dann natürlich die menschliche Vorstellungskraft etwas überfordert ist, was aber nicht viel ausmacht, weil sich ohnehin nicht viel gegenüber dem R3 ändert. Selbst unendlich lange Folgen bilden einen Vektorraum. Dies läßt sich nochmals verallgemeinern: Ist V ein Vektorraum und X eine beliebige Menge, so liegt auch auf der Menge aller Funktionen X → V eine Vektorraumstruktur vor, wobei die Operationen wieder komponentenweise (oder punktweise) definiert werden, konkret: sind f, g : X → V und λ ∈ R, dann werden f + g und λf definiert als (f + g)(x) = f (x) + g(x), (λf )(x) = λ(f (x)). Auch auf dem direkten Produkt V × W von zwei Vektorräumen läßt sich in natürlicher Weise (d.h. hier wieder: komponentenweise) eine Vektorraumstruktur definieren. Die Räume Rn können als Spezialfälle sowohl dieser als auch der vorigen Konstruktion angesehen werden. Ist U eine Teilmenge eines Vektorraums V , welche gegenüber Linearkombinationen abgeschlossen ist, dann ist U selbst ein Vektorraum, und man schreibt dann U ≤ V und bezeichnet U als Untervektorraum. Dies gilt insbesondere für alle linearen Hüllen: Ist T eine beliebige Teilmenge von V , dann ist deren lineare Hülle L(T ) ≤ V . Beispiel: für jedes k ∈ R ist {(x, kx) | x ∈ R ein Untervektorraum von R2 , ebenso {(0, x) | x ∈ R}. Dies sind tatsächlich alle: sie entsprechen genau den Geraden duch den Ursprung. Alle anderen Geraden sind nur affine Unterräume, d.h. gegenüber Affinkombinationen abgeschlossen. Betrachen wir irgendein Zufallsexperiment. Dann bildet die Menge aller dazugehörigen Zufallsgrößen, welche Werte in einem bestimmen Vektorraum V annehmen können, ebenfalls einen Vektorraum. 70 5.4 Lineare Abbildungen 5.4.1 Definition. Lineare Abbildungen sind jene, welche mit Linearkombinationen verträglich sind. Genauer: Seien V, W Vektorräume; dann heißt eine Abbildung h : V → W linear, falls für alle Vektoren v1 , . . . , vn und Skalare λ1 , . . . , λn gilt h( n X λ k vk ) = k=1 n X λk h(vk ). k=1 Diese Forderung ist äquivalent dazu, daß für alle Vektoren v, w und Skalare λ, µ gilt h(λv + µw) = λh(v) + µh(w). 5.4.2 Beispiel. Sie α ein beliebiger Skalar. Dann ist die Abbildung, welche jeden Vektor ver-α-facht, also h(v) = αv, linear, denn h(λv + µw) = α(λv + µw) = α(λv) + α(µv) = λ(αv) + µ(αv) = λh(v) + µh(w). Auch anschaulich ist dieser Sachverhalt unmittelbar einsichtig. Eine solche lineare Abbildungen heißt Streckung. Weitere einfache Beispiele sind Spiegelungen (an einem ebenen Spiegel), Projektionen auf eine Ebene oder Gerade, sowie alle Drehungen um einen Punkt innerhalb einer Ebene oder um eine Gerade (Drehachse). Ein weniger geometrisches Beispiel ist die Abbildung, welche eine Funktion auf deren Ableitung abbildet, denn auch hier gilt (f + g)0 = f 0 + g 0 (λf )0 = λ(f 0 ). Ein Beispiel für eine lineare Funktion in der Statistik liefert der Erwartungswert, wegen E(X + Y ) = E(X) + E(Y ) E(λX) = λE(X). Keine lineare Abbildung dagegen ist eine Translation, das ist eine Abbildung der Form tc : v 7→ v + c, wobei c ein beliebiger Vektor 6= o ist. So ist etwa tc (2v) = (2v + c) 6= 2(v + c) = 2tc (v). Translationen erhalten allerdings alle Affinkombinationen und bilden daher das typische Beispiel für eine affine Abbildung, die nicht linear ist. Ganz entscheidend ist, daß die Koordinatenabbildung linear ist: Ist V ein ndimensionaler Vektorraum und B eine Basis von V , dann ist die Abbildung V → Rn , welche jedem Vektor dessen Koordinaten zuordnet, eine lineare Abbildung. Dies erlaubt uns, mit den Koordinaten eines Vektors anstatt mit dem Vektor selbst zu rechnen. Genauer: 71 5.4.3 Definition. Eine lineare Abbildung V → W heißt Isomorphismus, wenn sie außerdem bijektiv ist. Die Vektorräume V und W heißen dann isomorph. Isomorphe Vektorräume haben exakt die selbe Struktur, da sich die Elemente zusammen mit den Rechenoperationen (Linearkombinationen) eins zu eins übertragen lassen. Insbesondere ist die Koordinatenabbildung ein Isomorphismus und alle n-dimensionalen Vektorräume sind daher isomorph zu Rn . Dies ist gerade die Grundlage der Darstellung von Vektoren als Zahlentupel. 5.5 Matrizen So wie die Vektorräume selbst, sind auch lineare Abbildungen zuerst einmal rein geometrische Objekte. Wird in den betroffenen Vektorräumen aber jeweils eine Basis festgelegt, dann ergibt sich auch für lineare Abbildung eine sehr konkrete numerische Darstellung. Seien V, W Vektorräume, h : V → W eine lineare Abbildung und {b1 , . . . , bn } eine Basis von V . Dann gilt bekanntlich n n X X λj h(bj ), λ j bj ) = h( j=1 j=1 für beliebige Koeffizienten λ1 , . . . , λn , und jeder Vektor v hat eine solche Darstellung als Linearkombination mit passenden Koeffizient. Dies hat weitreichende Konsequenzen: eine lineare Abbildung ist durch ihre Werte auf den Basiselementen, also durch die n Vektoren h(b1 ), . . . , h(bm ), bereits festgelegt. Anstatt festzulegen, wie jeder der unendlich vielen Vektoren von V abzubilden ist, und hinterher nachzurechnen, daß das Ergebnis tatsächlich linear ist, brauchen nur noch n Vektoren angegeben, und erhalten automatisch eine lineare Abbildung. Sei nun weiters c1 , . . . , cm eine Basis von W . Dann läßt sich jedes h(bj ) (so wie jeder andere Vektor von W ) eindeutig als Linearkombination darstellen: h(bj ) = m X ai,j ci , i=1 sodaß die lineare Abbildung h schließlich durch nm Skalare spezifiziert ist. Diese werden zu einer Matrix, der Abbildungmatrix von h bezüglich B und C, zusammengefaßt, und man schreibt: a1,1 . . . a1,n .. hB,C = ... · · · . am,1 . . . am,n Damit entspricht jeder linearen Abbildung von n-dimensionalen Raum V in den m-dimensionalen Raum W genau eine Matrix mit m Zeilen und n Spalten. Gilt V = W , ist also h eine Abbildung eines Vektorraumes in sich, so ist es üblich, auch dieselben Basen zu wählen, also B = C. Insbesonere ist die Abbildungsmatrix in diesem Fall stets quadratisch (wegen n = m. 5.5.1 Beispiel. Sei α ein Skalar und sα die Streckung um den Faktor α. Egal, welche Basis man wählt (es handelt sich um eine Abbildung V → V , daher nur 72 eine Basis), als Abbildungsmatrix ergibt sich stets eine Diagonalmatrix, das ist eine Matrix der Gestalt, α 0 ... 0 0 α ... 0 .. .. . . .. . . . . 0 0 ... α denn jeder Basisvektor bi wird auf αbi abgebildet. Die Anzahl der Zeilen und Spalten dieser Matrix entspricht dabei der Dimension von V . Sei s die Spiegelung an einer Geraden durch den Ursprung. Als Basis wählen wir einen Vektor b1 in Richtung der Geraden und einen Vektor b2 , welcher auf b1 im rechten Winkel steht. Dann gilt s(b1 ) = b1 und s(b2 ) = −b2 . Die Abbildungsmatrix ist daher ¶ µ 1 0 0 −1 Ist p die Projektion eines Vektors im dreidimensionalen Raum auf die von b1 und b2 aufgespannte Ebene. Als Basis wählen wir b1 , b2 , b3 , wobei b3 ein Vektor ist, der senkrecht auf die Ebene steht. Dann gelten p(b1 ) = b1 , p(b2 ) = b2 und p(b2 ) = o. Die Abbildungsmatrix ist daher 1 0 0 0 1 0 0 0 0 Sei i die lineare Abbildung, welche jeden Vektor der Ebene um 90◦ . Als Basis wählen wir zwei gleichlange Vektoren, die aufeinander senkrecht stehen, sodaß i(b1 ) und i(b2 ) = −b1 ist. Dann erhalten wir als Abbildungsmatrix ¶ µ 0 1 −1 0 Bei diesen Beispielen waren die Abbildungsmatrizen immer besonders einfach, da die Basen passend gewählt wurden. Sei ein Vekorraum V fixiert. Dann ist mit dα jedem Skalar α eindeutig eine lineare Abbildung zugeordnet. Lineare Abbildungen, und daher auch Matrizen, können somit auch als verallgemeinerte Zahlen“ aufgefaßt werden. Diese ” Betrachtungsweise macht nur dann Sinn, wenn auch die wichtigsten Rechenoperationen verallgemeinert werden können. Zwei lineare Abbildungen g, h : V → W können punktweise addiert werden: (g + h)v = gv + hv. Die entsprechenden Abbildungsmatrizen werden dabei komponentenweise addiert (sie haben dasselbe Format). Diese Addition führt tatsächlich zu einer kommutativen Gruppe. Auch die Skalierung funktioniert punkt- bzw. komponentenweise. Damit bildet die Gesamtheit aller linearen Abbildungen zwischen zwei Vektorrämen wieder einen Vektorraum, ebenso die alle Matrizen eines bestimmten Formats. Die komponentenweise Multiplikation ist dagegen nicht in 73 ähnlicher Weise mit einer Operation für lineare Abbildungen in Verbindung zu bringen und daher nicht interessant. Dennoch gibt es auch eine sinnvolle Multiplikation von linearen Abbildungen bzw. von Matrizen. Seien g : U → V , h : V → W lineare Abbildungen, dann können sie, so wie nicht-lineare Abbildungen auch, hintereinander ausgeführt werden. Dies ist ein sinnvoller Multiplikationsbegriff, denn es gelten beide Distributivgesetze: (h1 + h2 )g = h1 g + h2 g h(g1 + g2 ) = hg1 + hg2 Man beachte, diese beiden Gesetze keineswegs äquivalent sind: das erste entspricht der Definition für die Addition und gilt auch für nicht-lineare Abbildungen; das zweite dagegen besagt gerade, daß h linear ist. Seien A, B, C Basen von U, V, W . Analog zur Situation bei der Addition, sollte für die Multiplikation von Matrizen gelten. hB,C · gA,B = (h ◦ g)A,C . Etwas Rechnung ergibt dann, daß Matrizen à auf folgende ! Weise zu multiplizieµ a1,1 ... a1,n ¶ b1,1 ... b1,p .. .. .. .. , B = , dann ist A · B = ren sind: Seien A = . ··· . . ··· . am,1 ... am,n bn,1 ... bn,p µ c1,1 ... c1,p ¶ .. .. , mit . ··· . cm,1 ... cm,p ci,k = X ai,j bj,k . j=1 Damit bilden auch die quadratischen Matrizen (jeweils mit fixer Dimension) einen Ring (genauer: eine lineare Algebra). Man kann daher mit Matrizen oder linearen Abbildungen ganz ähnlich wie mit Zahlen rechnen. Hauptunterschied, neben dem Fehlen des Kommutativgesetzes, ist, daß es bei Matrizen (und linearen Abbildungen) verschiedene Abstufungen zwischen Null und Nicht-Null gibt, insbesondere muß eine von der Nullmatrix verschiedene Matrix nicht invertierbar sein, etwa die Projektionsmatrix (10 00), denn ¶ ¶ µ ¶µ µ a b a b 1 0 , = 0 0 c d 0 0 was niemals mit dem neutralen Element (10 01) übereinstimmen kann. Insbesondere ist auch die Nullteilerfreiheit verletzt, d.h. das Produkt von zwei Matrizen kann durchaus die Nullmatrix ergeben, ohne daß einer der Faktoren die Nullmatrix ist: ¶ ¶ µ ¶µ µ 0 0 0 0 1 0 = 0 0 3 4 2 0 Dies hat zur Folge, daß sich gegenüber Zahlen vor allem dann etwas ändert, wenn Divisionen ins Spiel kommen. Erwähnenswert ist auch, daß sich damit auch Wurzeln negativer Zahlen konstruieren lassen. Sei etwa i, wie oben, eine Drehung um 90◦ in einer Ebene. Dann entspricht i2 einer Drehung um 180◦ . Das ist aber dasselbe wie die Streckung 74 2 s−1 , welche √ wir der Zahl −1 identifizieren können. Damit erhalten wir i = −1, bzw. i = −1. Die entsprechende Gleichheit für Matrizen ist µ 5.6 0 −1 1 0 ¶2 = µ −1 0 0 −1 ¶ Lineare Gleichungen Sind a, b Skalare, dann heißt ax = b eine lineare Gleichung. Diese heißt homogen, wenn b = 0, inhomogen sonst. Im homogenen Fall gibt es auf jeden Fall die Lösung x = 0. Wenn a 6= 0 ist dies auch die einzige Lösung, anderenfalls ist jede Zahl eine Lösung. Im inhomogenen Fall erhält man, wenn a 6= 0 ist, ebenfalls genau eine Lösung, anderenfalls aber keine Lösung. Für lineare Abbildungen und Matrizen ist die Situation ganz ähnlich, es gibt aber mehrere Abstufungen. Sei h eine lineare Abbildung. Dann heißt hx = o eine homogene Gleichung. Die Lösungsmenge dieser Gleichung ist dann {x : V | hx = o}, besteht also aus all jenen Vektoren, welche durch h auf den Nullvektor abgebildet werden; sie heißt daher auch der Nullraum von h. Im eindimensionalen Fall gibt es nur die zwei Fälle: Nullraum besteht nur aus dem Nullvektor, und Nullraum besteht aus ganz V . Im allgemeinen kann der Nullraum ein beliebiger Unterraum von V sein. Die möglichen Lösungen einer inhomogenen Gleichung hx = b dagegen sind gerade die affinen Unterräume. In der Matrizenform hat eine lineare Gleichung die Gestalt Ax = b, wobei A eine m×n-Matrix ist und b ein Spaltenvektor mit m Zeilen. Für die Lösung x kommt damit nur ein Spaltenvektor mit n Zeilen in Frage. Man spricht in diesem Zusammenhang auch von einem Gleichungssystem, genauer von einem System ¶ µ ¶ µ von m Gleichungen in n Unbekannten, denn mit A = µ x1 ¶ und x = ... liest sich das ausgeschrieben als a1,1 ... a1,n .. .. . . ··· am,1 ... am,n ,b= b1 .. . bn xn µ a1,1 .. . am,1 ... a1,n ¶ .. ··· . ... am,n · µ x1 ¶ .. . xn = µ b1 ¶ .. . bn und ausmultipliziert als a1,1 x1 + . . . a1,n xn = b1 a2,1 x1 + . . . a2,n xn = b2 ......................... am,1 x1 + . . . am,n xn = bm Eine Darstellung der Lösungsmenge (d.h. eine spezielle Lösung und eine Basis für den Nullraum) erhält man z.B. mit dem Gauss’schen Eliminationsverfahren (systematisches Nullenerzeugen“ durch geeignetes Kombinieren der Zeilen). ” 75 5.7 Euklidische Raume Skalarprodukt, Cauchy-Schwarz, Winkel, Länge (Norm), Dreiecksungleichung, Zeilenraum orthogonal zum Nullraum. 76 Kapitel 6 Codierungstheorie Wir beschäftigen uns mit dem Problem, Nachrichten über einen störungsanfälligen Kanal (z.B. Internet, Satelliten, Schall, Speichermedium) zu übertragen. Wichtigste Aufgabe in diesem Zusammenhang ist es, Methoden zu entwickeln, um die ursprünglich gesendete Nachricht aus der gestörten Nachricht zu rekonstruieren. Um dies zu erreichen, muss die Nachricht zusammen mit zusätzlicher, eigentlich redundanter Information gesendet werden. Im einfachsten Fall wird die Nachricht einfach wiederholt. Kommt beidemal dieselbe Nachricht, so ist sie wahrscheinlich richtig übertragen worden; anderenfalls weiß man, daß ein Fehler aufgetreten ist, und kann eine passende Maßnahme ergreigen, z.B. nocheinmal senden. Das Wort PILL wird damit als PILLPILL codiert. Falls dann, wegen der Störung, das Wort PILLKILL ankommt, weiss man immerhin, daß ein Fehler passiert sein muß. Die ursprüngliche Nachricht kann aber nicht rekonstruiert werden – sie könnte PILL, KILL, oder auch etwa PILZ gewesen sein. Kommt dagegen PILZPILZ an, so bleibt der Fehler natürlich unerkannt – aber das ist doch ein eher unglücklicher Zufall. Um Fehler auch automatisch zu korrigieren, kann man die Nachricht dreimal senden, als z.B. PILLPILLPILL. Kommt dann PILLKILLPILL an, so kann man halbwegs sicher sein, das ursprünglich PILL gesendet werden sollte. Man kann auch noch öfter wiederholen, um auch mehrfache Fehler zu korrigieren und so die Wahrscheinlichkeit einer fälschlichen Übertragung beliebig klein gestalten. Diese, eben besprochenen, Wiederholungscodes haben den Nachteil, daß das zu übertragene Codewort ziemlich lang wird, was teuer sein kann, und obendrein die Anzahl der Fehler erhöht – wenn das zu übertragende Wort doppelt so lange ist, ist auch mit der doppelten Fehleranzahl zu rechnen. Ziel der Codierungstheorie ist es, bessere Codes zu entwickeln. Ab sofort nehmen wir generell an, daß alle zu übertragenden Nachrichten Folgen aus 0 und 1 sind. Die Nachrichten sind also Elemente von Bk , für ein passendes k. Dabei ist zu beachten, daß, um 2k verschiedene Wörter zu übertragen, prinzipiell eine Bitfolge der Länge k notwendig ist (d.h. die Nachricht hat k bit Information). 6.0.1 Definition. Ein Code heißt t-fehlererkennend falls alle fehlerhaften Codewörter mit höchstens t Fehlern als fehlerhaft erkannt werden können. Ein Code heißt s-fehlerkorrigierend falls alle Codewörter mit höchstens s 77 Fehlern automatisch korrigiert werden können. Ein Code hat die Informationsrate nk , falls er zur Übertragung von k bit Information eine Codewort der Länge n benötigt. Zweimaliges Senden ergibt einen 1-fehlererkennenden Code. Dreimaliges Senden ergibt einen 1-fehlerkorrigierenden Code. Die Informationsrate dieser Codes ist 12 bzw. 13 . 6.0.2 Beispiel (Paritätskontrolle). Eine Folge x1 . . . xk , mit xi ∈ {0, 1} wird codiert, indem eine Prüfziffer xk+1 angehängt wird, sodaß die Anzal der Einser gerade wird, also xk+1 = x1 + · · · + xk (mod 2) Dieser Code ist 1-fehlerkorrigierend, so wie der einfache Wiederholugscode, aber k . mit der deutlich besseren Informationsrate k+1 6.0.3 Beispiel. Wir führen die Idee der Paritätskontrolle fort, indem wir gleich 3 Prüfsymbole einführen. Für k = 3 sieht das dann so aus: x4 = x1 + x2 x5 = x1 x6 = + x3 x2 + x3 Dieser Code kann doppelte Fehler erkennen und einfache Fehler korrigieren, so wie der doppelte Wiederholungscode, hat aber die deutlich bessere Informationsrate 21 . 6.0.4 Definition. Ein binärer symmetrischer Kanal ist ein Uebertragungskanal für Bitfolgen, in dem jedes einzelne Bit, unabhängig von den anderen, mit einer Wahrscheinlichkeit p korrekt und mit einer Wahrscheinlichkeit q := 1 − p falsch übertragen wird. p p q 0 1 q Die die Anzahl der Fehler in einer Bitfolge der Länge n ist dann binomialverteilt. Insbesondere beträgt die mittlere Fehleranzahl nq, die Wahrscheinlichkeit n n−1 q, für t Fehler ¡für ¢ eine fehlerfreie Übertragung ist p , für einen Fehler np n n−t t p q . Für p = 99 % und n = 50 bedeutet dies konkret: t t Wahrscheinlichkeit für t Fehler 0 1 2 60, 50 % 30, 56 % 7, 56 % 3 4 1, 22 % 0, 15 % 5 0, 01 % 78 Tatsächlich geht die Wahrscheinlichkeit für sehr viele Fehler sehr schnell gegen 0 geht, falls p > 12 ist. Ein mit der Codierung nahe verwandtes Problem ist es, möglichst viele ” Orangen in einen Schiffstank reinzupferchen“: 6.0.5 Problem (Kugelpackung). Wie kann man eine große Menge gleichgroßer Kugeln möglichst dicht anordnen? Für 2-dimensionale Kugeln“ ist dieses Problem relativ einfach zu lösen: ” Der Nachweis, daß diese Kreise tatsächlich nicht dichter angeordnet werden können, ist nicht allzu schwer. Ganz anders die Situation im 3-dimensionalen Fall: Hier kann man die unterste Schicht Kugeln so wie oben anordnen und darauf die nächste Schicht so legen, daß die Kugeln gerade in den Vertiefungen angeordnet werden. Darauf kommt dann in derselben Weise die nächste Schicht, usw. Es ist aber nicht bekannt, ob es nicht doch eine bessere Lösung gibt. Dieses Problem läßt sich auch auf höherdimensionale Räume ausdehnen. Und anstatt der normalen Euclid’schen Metrik (Abstandbegriff) kann auch eine andere verwendet werden, um den Begriff Kugel zu definieren. 6.0.6 Definition. Sei X eine beliebige Menge. Eine Abbildung d : X × X → [0, ∞] heißt Metrik falls für alle x, y, z ∈ X gilt: d(x, y) = 0 ⇐⇒ x = y d(x, y) = d(y, x) (Definitheit) (Symmetrie) d(x, z) ≤ d(x, y) + d(y, z) (Dreiecksungleichung) Die Menge X, zusammen mit der Metrik, heißt dann ein metrischer Raum. 6.0.7 Definition. Sei (X, d) ein metrischer Raum, x ∈ X und ² ≥ 0. Dann heißt K(x, ²) := {y | d(x, y) ≤ ²} 79 die Kugel mit Mittelpunkt x und Radius ². Für Bn ist die Hamming-Distanz eine naheliegende Metrik: d(x, y) = die Anzahl der Stellen, an denen sich x und y unterscheiden. 6.0.8 Definition. Ein binärer Code C der Länge n ist eine Teilmenge von Bn . Wird ein Codewort x ∈ C übermittelt und y ∈ X erhalten, so heißt e := y − x der Fehler. Aufgabe des Dekodierverfahrens ist es nun, einem gegebenen y ein passendes Codewort zuzuordnen. Gemäß unserer Diskussion nach Definition 6.0.4 ist es sinnvoll, dasjenige x zu wählen, welches zu y den kleinsten Abstand hat (maximum likelihood decoding). Ist für Bn eine Kugelpackung gegeben, so kann man die Mittelpunkte der Kugeln als gültige Codewörter auffassen. Beim maximum likelihood decoding werden dann alle Wörter innerhalb einer Kugel dem entsprechenden Mittelpunkt zugeordnet. Haben die Kugeln der Kugelpackung einen Radius t, dann ist dieser Code t-fehlerkorrigierend und (2t − 1)-fehlererkennend. Allgemeiner nennt man den minimalen Abstand zweier verschiedener Codewörter die Hamming-Distanz des Codes, also dmin := min d(x, y). x,y∈C x6=y 6.0.9 Satz. Ein Code mit Hamming-Distanz d kann bis zu d−1 Fehler erkennen und b d−1 2 c Fehler korrigieren. 6.0.10 Definition. Ein k-dimensionaler linearer Unterraum mit Minimaldistanz d heißt ein des Bn heißt ein linearer Code oder ein (n, k, d)-Code. Wir haben bisher fast nur lineare Codes kennengelernt. 6.0.11 Definition. Sei H eine (n − k) × n Matrix von vollem Zeilenrang. Dann ist C := {Hx = o} ein linearer Code und C heißt die Paritätskontrollmatrix (parity-check matrix ) von C. Von den Dekodierungsverfahren sei hier nur dasjenige für eine sehr spezielle Klasse linearer Codes erwähnt. 6.0.12 Definition. Ein (binärer) linearer Code Cm der Länge n = 2m − 1, m ≥ 2, dessen Paritätskontrollmatrix die Dimension m×n hat und deren Spalten aus allen nicht-verschwindenden (binären) Vektoren besteht, heißt ein binärer Hamming Code. 6.0.13 Theorem. Jeder Hamming Code Cm ist 1-fehlererkennend und hat Informationsrate n−m n . Die Dekodierung gestaltet sich denkbar einfach: Wird das Wort y erhalten, so bestimmt das sogenannte Syndrom Hy. Falls dieses nicht der Nullvektor ist, ist ein Fehler passiert, und zwar an jener Stelle, deren Binärdarstellung das Syndrom ist. 6.0.14 Beispiel. Der Hamming Code C3 hat die Paritätskontrollmatrix 0 0 0 1 1 1 1 H = 0 1 1 0 0 1 1 . 1 0 1 0 1 0 1 80 (Die Spalten entsprechen gerade den Binärdarstellungen der Zahlen von 1 bis 7.) Angenommen es wird das Wort y = 0011101 erhalten. Wir berechnen das Syndrom Hy = 101, was der Zahl 5 entspricht. An der 5. Stelle trat also ein Fehler auf. Das ursprünglich kodierte Wort war daher 0011001. Die eigentliche Nachricht, die damit kodiert wurde ist daher 1001 (oder die Zahl 9). Letztere entspricht den Stellen x3 , x5 , x6 , x7 . Die anderen Stellen sind Prüfziffern: x1 = x3 + x5 + x7 , x2 = x3 + x6 + x7 und x4 = x5 + x6 + x7 . Es gibt natürlich noch viel mehr brauchbare Codes als die besprochenen (lineare und nicht-lineare), und auch zahlreiche Methoden, um aus bekannten Codes neue zu gewinnen. Die Brauchbarkeit eines Codes ergibt sich einerseits aus dessen Qualität, d.h. einer möglichst hohen Informationsrate für den gewünschten Grad der Fehlererkennung, -korrektur, und andererseits aus der Verfügbarkeit von effizienten Codierungs- und Decodierungsverfahren. Allgemein läßt sich sagen: Je mehr bits zu einem Codewort zusammengefaßt werden, desto bessere Codes können gefunden werden; allerdings muß man dann typischerweise weniger effiziente (De-)Codierungsverfahren in Kauf nehmen. 81 Kapitel 7 Relationen Ω bezeichne die Menge aller Aussagen. 7.0.15 Definition. Sei n : N, und X1 , . . . , Xn Datentypen. Dann heißt jede Konstruktion R vom Typ R : X1 → · · · → Xn → Ω ein n-stelliges Prädikat. Ist n = 2, so heißt R ein binäres Prädikat von X1 nach X2 . Binäre Prädikate auf X sind vom Typ X → X → Ω. Sind die Xi Mengen, und R wohldefiniert, dann heißt R auch n-stellige Relation. 7.0.16 Bemerkung. Ist R eine binäre Relation, so schreibt man statt Rxy R meist x R y oder x → y; oder einfach x → y, falls R aus dem Zusammenhang ersichtlich ist. Man sagt dann auch, x und y sind in Relation. Oft werden auch diverse spezielle Symbole verwendet. Da mittels Currying X → Y → Ω praktisch dasselbe ist wie X × Y → Ω, was wiederum nichts anderes ist als P(X × Y ), kann man eine binäre Relation auch genausogut als Teilmenge von X × Y betrachten. Man schreibt daher auch gerne (x, y) ∈ R. Mit dieser Betrachtungsweise kann man zwei Relationen auch so wie Teilmengen vergleichen; es gilt dann ^ ¡ R ¢ S R ⊆ S ⇐⇒ x → y =⇒ x → y . x,y : X Auch die Vereinigung und der Durchschnitt von Relationen sind damit definiert. Die leere Menge heißt in diesem Zusammenhang dann auch die leere Relation, und X × Y die Allrelation. Analoges gilt für allgemeine Relationen. Relationenprodukt 7.0.17 Definition. Gegeben seien die Relationen R : X → Y → Ω und S : Y → Z → Ω. Dann wird das Relationenprodukt (R; S) definiert durch _ R R;S S x → z ⇐⇒ x → y ∧ y → z. y: Y 82 7.0.18 Bemerkung. Vorsicht! Statt der Notation R; S sind auch R ◦ S und S ◦ R sowie RS und SR gebräuchlich. 7.0.19 Satz. Das Relationenprodukt ist assoziativ. Beweis. Übung. 7.0.20 Definition. Auf jeder Menge X definiert die Gleichheit eine als Diagonale ∆X bezeichnete Relation, durch x ∆X y ⇐⇒ x = y. 7.0.21 Satz. Für jede Relation R : X → Y gilt R; ∆Y = R = ∆X ; R. 7.0.22 Definition. Zu jeder Relation R von X nach Y definiert man die zu R inverse Relation durch R−1 R x → y ⇐⇒ y → x. 7.0.23 Satz. Für jede Relation R : X → Y gelten R; R−1 ⊆ idX und R−1 ; R ⊆ idY , aber nicht notwendigerweise die entsprechenden Gleichheiten. 7.0.24 Satz. Die Relationen auf einer Menge X, d.h. die Menge X → X → Ω, bilden zusammen mit dem Relationenprodukt und der Diagonale ∆X als neutralem Element ein Monoid. 7.0.25 Bemerkung. Es ergibt sich jedoch keine Gruppe, obwohl es inverse Relationen gibt, weil in Satz 7.0.23 nicht die Gleichheit gilt. 7.0.26 Definition. So wie für assoziative Operationen üblich, verwenden wir auch für Relationen die Notation mit Potenzen: R1 =R 2 R = R; R n+1 R = Rn ; R = R; Rn 0 R = idX 7.0.27 Satz. Sei R eine Relation von X nach Y . Es gelten für alle n, m : N: Rn ; Rm = Rn+m = Rm ; Rn , (Rn )m = Rn·m = (Rm )n . Und für Relationen R, S auf X gilt (R; S)−1 = S −1 ; R−1 Die Relationen R, S sind genau dann vertauschbar (d.h. R; S = S; R) wenn für alle n : Z gilt (R; S)n = Rn ; S n , 83 7.1 Äquivalenzrelationen 7.1.1 Definition. Sei X ein Datentyp. Dann heißt ein binäres Prädikat R auf X ^ R x → x; reflexiv falls x: X symmetrisch ^ ¡ falls x,y : X transitiv falls ^ x,y,z : X R R ¢ x → y ⇐⇒ y → x ; ¡ R R R ¢ x → y ∧ y → z =⇒ x → z . 7.1.2 Definition. Eine binäre Relation auf X heißt Äquivalenzrelation falls sie reflexiv, symmetrisch und transitiv ist. 7.1.3 Bemerkung. Für Äquivalenzrelationen verwendet man gerne Symbole . wie =, ≡, ∼ =, ∼, ', ,, =. 7.1.4 Bemerkung. Auf jeder Menge ist die Diagonale ∆X eine Äquivalenzrelationen. 7.1.5 Satz. Ist ≡ eine Äquivalenzrelation auf Y und f : X → Y , dann wird durch x ≡f y ⇐⇒ f (x) ≡ f (y) eine Äquivalenzrelation auf X definiert. 7.1.6 Satz. Eine Relation R auf eine Menge X ist reflexiv ⇐⇒ R ⊇ R0 ; symmetrisch ⇐⇒ R = R−1 ; transitiv ⇐⇒ R ⊇ R2 . 7.1.7 Definition. Unter der reflexiven, symmetrischen oder transitiven Hülle einer Relation R auf X versteht man die kleinste R umfassende Relation auf X, welche die entsprechende Eigenschaft hat. 7.1.8 Satz. Sei R eine Relation auf einer Menge X. Dann gelten reflexive Hülle von R = R0 ∪ R; symmetrische Hülle von R = R ∪ R−1 ; n [ Rk =: R+ transitive Hülle von R = reflexiv-transitive Hülle von R = k=1 n [ k=0 Rk = R0 ∪ R+ =: R∗ 7.1.9 Satz. Ist R reflexiv bzw. symmetrisch, so gilt dies auch für deren transitive Hülle R+ , und natürlich auch für R∗ . Insbesondere ist daher (R ∪ R−1 )∗ stets eine Äquivalenzrelation. Sie heißt die von R erzeugte Äquivalenzrelation, weil sie die kleinste ist, die R umfaßt. 84 7.1.10 Bemerkung. Man beachte jedoch, daß die symmetrische Hülle einer transitiven Relation nicht transitiv sein muß, d.h. es gilt nur R+ ∪ (R+ )−1 ⊆ (R ∪ R−1 )+ . 7.1.11 Definition. Eine Teilmenge P von PX nennt man eine Partition von X falls 1. alle Elemente von P mindestens ein Element enthalten; 2. die Vereinigung aller Elemente von P die Grundmenge X ergibt; 3. je zwei Elemente von P leeren Durchschnitt haben. 7.1.12 Definition. Sei R eine Äquivalenzrelation auf X und x : X. Dann heißt R [x]R := {y | x → y} die Äquivalenzklasse von x bezüglich R. Die Menge X/R = {[x]R | x : X} aller Äquivalenzklassen von R heißt Faktormenge. Dadurch wird jeder Relation auf natürliche Weise eine Partition zugeordnet. Umgekehrt wird jeder Partition mit _ x ≡P y ⇐⇒ x∈A∧y ∈A A∈P auf ebenso natürliche Weise eine Äquivalenzrelation zugeordnet. 7.1.13 Bemerkung. Aus den obigen Konstruktionen erkennt man, daß Äquivalenzrelationen und Partitionen eigentlich dasselbe“ sind. ” Die Faktormenge X/R kann man auch als diejenige Menge auffassen, welche dieselben Elemente hat wie X, aber die Äquivalenzrelation R als Gleichheitsbegriff. 7.2 Ordnungsrelationen 7.2.1 Definition. Eine Relation auf X heißt Quasi-Ordung falls sie reflexiv und transitiv ist. 7.2.2 Bemerkung. Für (Quasi-)Ordnungen verwendet man gerne Symbole wie ≤, ⊆, v, ¹, ≥. Dabei bedeutet dann üblicherweise z.B. x ≤ y dasselbe wie y ≥ x. Der englische Begriff quasi order steht bei manchen Autoren nicht für Quasiordnung sondern für eine transitive und irreflexive Relation. 7.2.3 Satz. Sei v eine Quasiordnung auf X. Dann wird durch x ≡ y ⇐⇒ x v y ∧ y v x eine Äquivalenzrelation definiert. 7.2.4 Definition. Eine Relation R auf einer Menge X heißt antisymmetrisch falls ^ ¡ R ¢ R x → y ∧ y → x =⇒ x = y . x,y : X Eine antisymmetrische Quasiordnung heißt partielle Ordnung oder einfach Ordnung. 85 7.2.5 Satz. Jede Quasiordnung v auf X kann als Ordnung auf X/≡ aufgefaßt werden. 7.2.6 Definition. Ein Ordnung v auf X heißt linear falls ^ x v y ∨ y v x. x,y : X Im allgemeinen gibt es zu einer partiellen Ordnung mehrere lineare Ordnungen, welche sie umfassen. Das Problem, zu einer partiellen Ordung v irgendeine diese umfassende lineare Ordnung ≤ mit (v) ⊆ (≤) zu finden, heißt topologisches Sortieren. 7.3 Funktionale Relationen Im allgemeinen kann es zu einem x mehrere y geben, sodaß x → y. Bedeutet → etwa die Input/Output-Relation eines Computer-Programmes, so heißt dies, daß der Output nicht notwendigerweise deterministisch vom Input abhängt. 7.3.1 Definition. Eine Relation p von X nach Y heißt deterministisch, wohldefiniert, funktional oder eine partielle Funktion falls gilt ^ ^ ¡ p ¢ p x → y ∧ x → z =⇒ y = z . x : X y,z : Y Sie heißt terminierend oder total, falls gilt ^ _ p x → y. x: X y: Y Erfüllt sie beide Eigenschaften, so nennt man sie eine (totale) Funktion. 7.3.2 Bemerkung. Für eine deterministische Relation p gibt es daher zu jedem p x höchstens ein y mit x → y, und man schreibt dann auch y = px. Es ist aber zu beachten, daß es so ein y möglicherweise gar nicht gibt. Bei einer Input/OutputRelation entspricht das dem Fall, daß das Programm nie stehen bleibt (oder abstürzt, was mathematisch gesehen dasselbe ist). Die Termination dagegen garantiert, daß das Programm tatsächlich zu jedem gültigen Input irgendwann auch einen gültigen Output liefert. 7.3.3 Bemerkung. Der hier neu eingeführte Funktionsbegriff stimmt mit dem bekannten überein: Die Teminations-Eigenschaft besagt gerade, daß zu jedem x ein y zu konstruieren ist, und die Wohldefiniertheit ergibt sich daraus, weil diese Konstruktion deterministisch sein muß. Auch die Hintereinanderausführung von Funktionen entspricht genau dem Relationenprodukt, wobei allerdings auf die Reichenfolge zu achten ist: g ◦ f = f ; g. Ebenso ist die Umkehrfunktion eine Spezialfall der inversen Relation. 7.3.4 Bemerkung. Jede Relation R : X → Y → Ω läßt sich als Funktion von Typ X → PY auffassen. R(x) bezeichnet dann die Menge aller möglichen R Outputs, also R(x) = { y | x → y }. 86 7.3.5 Definition. Eine Funktion f : X → Y heißt injektiv falls ^ f (x) = f (y) =⇒ x = y; x,y : X sie heißt surjektiv falls ^ _ f x = y; y: Y x: X und bijektiv falls sie injektiv und surjektiv ist. 7.3.6 Bemerkung. Diese Eigenschaften sind dual zu den definierenden Eigenschaften für Funktionen. Die Injektivität bedeutet gerade, daß auch f −1 deterministisch ist, die Surjektivität bedeutet daß f −1 terminiert, und die Bijektivität, daß auch f −1 wieder eine Funktion ist. Insbesondere gilt für bijektive Funktionen f −1 ◦ f = idX und 87 f ◦ f −1 = idY . Kapitel 8 Graphentheorie 8.1 Einführung 8.1.1 Beispiel. 1. Drei Häuser sollen je durch eine eigene Leitung mit dem Wasser-, Gas- und Elektrizitätswerk verbunden werden. Frage: Ist es möglich, die Leitungen so zu verlegen, daß sie sich nicht kreuzen? 2. Man suche für den Springer auf dem Schachbrett eine Rundreise“, welche ” nur aus den üblichen Rösselsprüngen besteht und jedes der 64 Felder genau einmal benutzt. 3. Ein 8-Liter Krug ist mit Wein gefüllt, und je ein leerer Krug von 5 und 3 Litern steht daneben. Die Flüssigkeitsmenge soll, lediglich durch Umschütten, halbiert werden, so daß sich also am Schluß in jedem der beiden grösseren Krüge je 4 Liter befinden. 4. Ein Dominostein enthält zwei quadratische Felder, auf denen je eine Anzahl von 0 bis n Punkten eingeprägt ist (üblich: n = 6). Ein Domino-Set enthält von jedem möglichen Stein genau ein Exemplar. Frage: Kann man sämtliche Steine eines Sets so in einer geschlossenen Linie auslegen, daß immer Felder mit gleicher Punktezahl zusammenstoßen? 5. Man färbe die Länder ein Landkarte mit möglichst wenig verschiedenen Farben so ein, daß angrenzende Länder stets unterschiedlich gefärbt sind. Grundlegende Begriffe 8.1.2 Definition. Ein (ungerichteter) Graph Γ besteht aus • einer Menge von Knoten oder Ecken V = V (Γ), • einer Menge von Kanten E = E(Γ), • sowie einer Funktion, welche jeder Kante e eine ein- bis zweielementige Menge E(e) von Endknoten zuordnet. Man sagt, die Kante e verbindet die Knoten a und b, wenn E(e) = { a, b }. Die beiden Knoten heißen dann auch benachbart oder adjazent, und jeder dieser Knoten inzidiert mit der Kante e. Enthält die Menge der Endknoten einer Kante nur ein Element, so nennt man die Kante eine Schlinge. 88 8.1.3 Definition. Ein gerichteter Graph besteht aus • einer Menge von Knoten V = V (Γ), • einer Menge von Pfeilen A = A(Γ), • sowie zwei Funktion s, t : A → V , welche jeder Kante e einen Anfangsknoten s(e) und einen Zielknoten t(e) zuordnen. Gelten s(e) = a und t(e) = b, so nennt man a einen Vorgänger von b und b einen Nachfolger von a. 8.1.4 Bemerkung. Jedem gerichteten Graphen wird durch E(e) = { s(e), t(e) } (Vergessen der Richtung) auf natürliche Weise ein normaler (ungerichteter) Graph zugeordnet werden. Gerichtete Graphen erscheinen daher als ungerichte Graphen mit zusätzlicher Struktur (der Richtung der Kanten). Auf diese Weise können die für ungerichtete Graphen definierten Begriffe auch im Zusammenhang mit gerichteten Graphen verwendet werden. Man beachte aber, daß manche Begriffe leicht unterschiedlich definiert werden. 8.1.5 Definition. Man spricht von Parallelkanten, wenn zwei verschiedene Kanten e, f dieselben Endknoten haben; dies bedeutet • bei ungerichteten Kanten: E(e) = E(f ); • bei gerichteten Kanten: s(e) = s(f ) und t(e) = t(f ). 8.1.6 Bemerkung. Zwei Kanten in einem gerichteten Graphen, die sich nur durch die Richtung unterscheiden, gelten somit nicht als Parallelkanten; es sei denn, sie verbinden einen Knoten mit sich selbst. 8.1.7 Definition. Eine Kante e, welche einen Knoten mit sich selbst verbindet, heißt eine Schlinge. 8.1.8 Bemerkung. Eine Schlinge ist somit eine Kante e, welche |E(e)| = 1 bzw. s(e) = t(e) erfüllt. 8.1.9 Definition. Ein Graph ohne Parallelkanten und ohne Schlingen heißt schlicht. 8.1.10 Bemerkung. Die Bezeichnung Graph wird nicht überall einheitlich verwendet. Traditionell versteht man darunter stets einen schlichten Graphen, meist ungerichtet (außer er wird als gerichteter Graph bezeichnet). Oft läßt man aber auch Schlingen, und manchmal auch Parallelkanten zu. Graphen, deren Kanten mehr als 2 Endknoten haben, heißen Hypergraphen, und werden traditionell nicht im Rahmen der Graphentheorie behandelt. 8.1.11 Definition. Sind den Kanten eines Graphen zusätzliche Informationen zugeordnet, so spricht von einem bewerteten Graphen. Relationen und Graphen • In einem (nicht bewerteten) Digraphen ohne Parallelkanten ist jede Kante eindeutig durch ihren Anfangs- und Endpunkt festgelegt, d.h. ein solcher ist nichts anderes als eine binäre Relation auf der Menge der Kanten. 89 • Eine reflexive (oder irreflexive) Relation entspricht einem schlichten Graphen. • Eine symmetrische Relation entspricht einem (ungerichteten) Graphen. • Ein Graph, der der Allrelation entspricht, heißt vollständig, und einer, der der leeren Relation entspricht ein Nullgraph. Isomorphie 8.1.12 Definition. Zwei Graphen heißen isomorph, falls es Bijektionen sowohl zwischen deren Knoten als auch zwischen deren Kanten gibt, welche mit Inzidenzbeziehung verträglich sind. Bei gerichteten Graphen ist auch auf die Richung zu achten. Formal ausgedrückt: Seien V1 , V2 die Knotenmengen und E1 , E2 die Kantenmengen der Graphen Γ1 bzw. Γ2 . Dann sind Γ1 und Γ2 isomporph falls es Bijektionen g : V1 → V2 und h : E1 → E2 gibt, sodaß für alle Kanten e : E1 gilt: • bei ungerichteten Graphen: g(E(e)) = E(h(e); • bei gerichteten Graphen: g(s(e)) = s(h(e)) und g(t(e)) = t(h(e)). Da bei Graphen ohne Parallelkanten jede Kante bereits durch die Endknoten bestimmt ist, ergibt sich bei diesen auch die Kantenabbildung h eindeutig aus der Knotenabbildung g, sodaß man einfacher schreibt: g : Γ1 → Γ2 . 8.1.13 Definition. Ein Graph ohne Kanten heißt Nullgraph, und ein Graph, der auch keine Knoten hat, ist eine leerer Graph. Umgekehrt heißt ein Graph vollständig, wenn jedes Paar verschiedener Knoten durch eine Kante verbunden ist. 8.1.14 Satz. Sei i : N. Dann sind alle vollständigen schlichten Graphen mit i Knoten zueinander isomorph und werden üblicherweise mit Ki bezeichnet. Auch alle Nullgraphen mit i Knoten sind zueinander isomorph und werden mit Ni bezeichnet. Endliche Graphen 8.1.15 Definition. Ein Graph mit endlich vielen Kanten und endlich vielen Knoten heißt endlich 8.1.16 Bemerkung. Wesentlich ist hier, daß es nur endlich viele Kanten gibt. 8.1.17 Satz. Für endliche Graphen kann man Induktionsbeweise z.B. nach der Anzahl der Kanten führen, d.h., um zu beweisen daß eine Aussage für alle Graphen gilt reicht es, wenn gezeigt wird: • die Aussage gilt für alle Nullgraphen; • und wenn die Aussage für irgendeinen Graphen gilt, dann gilt sie auch für jeden weiteren, welcher aus diesem durch Hinzufügen einer Kante entsteht. 8.1.18 Bemerkung. Wir beschäftigen uns im folgenden nur mit endlichen Graphen. 90 Grad 8.1.19 Definition. Sei a ein Knoten eines gerichteten Graphen. Dann heißt die Anzahl der Kanten mit Anfangsknoten a der äußere Halbgrad d+ (a) von a. Analog heißt die Anzahl der Kanten mit Zielknoten a der innere Halbgrad d− (a) von a. Der Grad d(a) ist dann die Summe von äußerem und innerem Halbgrad: d(a) = d+ (a) + d− (a). Der Grad ist auch für ungerichtete Graphen wohldefiniert, wenn man die Richutung ignorert. Der Grad ist dann einfach die Anzahl der mit einem Knoten inzidenten Kanten. Eventuelle Schlingen werden dabei allerdings doppelt gezählt. 8.1.20 Definition. Knoten vom Grad 0 heißen isoliert. Und ein Graph heißt regulär, wenn alle Knoten denselben Grad haben. 8.1.21 Satz. Isomorphismen müssen den Knotengrad erhalten, d.h. ist g die Knotenabbildung eines Graphen-Isomorphismus, dann gilt: d(a) = d(g(a)). 8.1.22 Bemerkung. Man beachte aber, daß dies eine notwendige Bedingung für Isomorphie ist, aber keine hinreichende. 8.1.23 Satz. Sei Γ ein endlicher Graph mit m Kanten und den Knoten a1 , . . . , an . Dann gilt 2·m= n X d(ai ). i=1 Beweis. Wir beweisen mittels Induktion über die Anzahl der Kanten. Für Nullgraphen ist die Beziehung klar. Wird ein Graph, der die obige Beziehung erfüllt, um eine Kante erweitert, dann erhöht sich bei zwei Knoten der Grad jeweils um eins (oder bei einem Knoten um zwei, wenn es sich um eine Schlinge handelt). Damit erhöht sich die Summe der Grade um 2, und die Beziehung bleibt erhalten. 8.1.24 Folgerung. Die Anzahl der Knoten ungerade Grades ist gerade. Beweis. Sie g die Anzahl der Knoten geraden Grades und u die Anzahl der Knoten ungeraden Grades. Wir betrachten die Beziehung des vorigen Satzen modulo 2: 0≡2·m≡ n X i=1 d(ai ) ≡ g · 0 + u · 1 ≡ u (mod 2). 8.1.25 Folgerung. In einem regulären Graphen vom Grad r mit n Knoten und m Kanten gilt 2m = nr. 91 8.2 Wege Zusammenhang 8.2.1 Definition. Ein Kantenzug in einem ungerichtenen Graphen ist eine endliche Folge e1 , . . . , en von Kanten, sodaß zwei aufeinanderfolgende Kanten jeweils einen Endpunkt gemeinsam haben, d.h. genauer, falls es Knoten a0 , . . . , an gibt, sodaß ei die Knoten ai−1 und ai verbindet (für alle i = 1, . . . , n). a0 und an heißen dann auch die Endknoten des Weges, und man spricht von einem Weg von a0 nach an . Bei Kantenzügen in gerichteten Graphen ist zu beachten, daß der Endknoten einer Kante der Anfangsknoten der nächsten Kante ist (t(ai−1 ) = s(ai )). a0 heißt in diesem Fall der Anfangsknoten des Weges. Ein Kantenzug, dessen Anfangs- und Endknoten übereinstimmen, heißt geschlossen. Ansonsten ist er offen. Ein Kantenzug, der bei jedem Knoten nur höchstens einmal vorbeikommt, heißt ein Weg. Ein geschlossenen Kantenzug, bei dem nur die Endknoten übereinstimmen heißt ein Kreis. 8.2.2 Beispiel. 1. Der Graph mit Knotenmenge { 1, 2, . . . , n } und einer Kante zwischen x und y genau dann wenn |x − y| = 1, heißt der lineare Graph mit n Knoten. 2. Der Graph mit Knotenmenge Zn und einer Kante zwischen x und y genau dann wenn |x − y| ≡n 1, heißt Polygon mit n Ecken, oder ein n-Eck, und wird mit Cn bezeichnet. 8.2.3 Satz. Ein Weg ist ein zu einem linearen Graphen isomorpher Teilgraph; und ein Kreis ist ein zu einm Kreis isomorpher Teilgraph. 8.2.4 Definition. Zwei Knoten a, b eines ungerichteten Graphen hängen zusammen falls es einen Weg von a nach b gibt. Wenn jeder Knoten mit jedem anderen zusammenhängt, so heißt der Graph zusammenhängend. Ansonsten zerfällt der Graph in mehrere Zusammenhangskomponenten. 8.2.5 Bemerkung. Jede Zusammenhangskomponente ist zusammenhängend und enthält mindestens einen Knoten. Ein leerer Graph (d.h. einer mit 0 Knoten) hat 0 Zusammenhangskomponenten. Jeder Knoten (und jede Kante) gehört zu genau einer Zusammenhangskomponente. Eulersche Graphen 8.2.6 Definition. Ein Eulerscher Kantenzug ist ein solcher, welcher jede Kante genau einmal benutzt. Er kann offen oder geschlossen sein. Ein Graph der einen Eulerschen Kantenzug enthält heißt auch Eulergraph. 8.2.7 Theorem (Euler). Ein zusammenhängender Graph besitzt genau dann einen geschlossenen Eulerschen Kantenzug, wenn alle Knoten geraden Grad haben. Und genau dann einen offenen Eulerschen Kantenzug, wenn genau zwei Knoten einen ungeraden Grad haben. Es gibt einen effizienten Algorithmus, um zu entscheiden, ob ein endlicher Graph Eulersch ist und gegebenenfalls einen Eulerschen Kantenzug zu finden. 92 Beweis. Ein Knoten in einem geschlossenen Eulerschen Kantenzug kann durchaus mehrmals besucht werden. Er muß aber genau so oft verlassen werden wie er erreicht wird. Da jede Kante genau einmal benutzt wird, muß daher der Grad stets gerade sein. Damit ist diese Bedingung notwendig. Hat umgekehrt ein zusammenhängender Graph die Eigenschaft, daß allen Knotengrade gerade sind, so kann man ein einfaches rekursives Verfahren zum Auffinden eines Eulerschen Kreises angeben: Man beginne in irgendeinem Knoten und bilde von diesem ausgehend irgend einen Weg K, bis es keinen Nachbarknoten mehr gibt. Dabei entsteht stets ein Kreis, weil sonst der letzte Knoten einen ungeraden Grad hätte. Es kann aber sein, daß dabei nicht alle Kanten erfaßt werden. Im Restgraphen, bestehend aus allen noch nicht erfaßten Kanten, haben alle Knoten einen geraden Grad, weil der Kreis in jedem Knoten eine gerade Anzahl von Kanten verbraucht. Der Restgraph muß nicht zusammenhängend sein, wohl aber jede seine Zusammenhangskomponenten Zi , und jedes Zi hat wegen der Zusammenhangseigenschaft mit diesem Kreis K mindestens einen Knoten vi gemeinsam. Nun bestimmen wir rekursiv in allen Zusammenhangskomponenten Zi geschlossene Eulersche Kantenzüge, die wir in K einbinden, indem wir in jedem Knoten vi den passenden Umweg einfügen. Den Fall offener Kantenzüge führen wir auf den besprochenen Fall zurück, indem wir zum Graphen einen zusätzlichen Knoten mit Kanten zu den Endknoten des Weges bzw. zu den beiden Knoten ungeraden Grades hinzufügen. Alternativ könnten wir zur Konstruktion einen offenen Kantenzuges mit irgendeinem die beiden Knoten ungeraden Grades verbindenden Weg K beginnen, und wie oben fortfahren. 8.2.8 Beispiel. Eulersches Brückenproblem, Dominospiel. Hamiltonsche Kreise 8.2.9 Definition. Ein Hamiltonscher Kreis in einem Graphen ist ein Kreis, welcher jeden Knoten genau einmal benutzt. 8.2.10 Theorem. Das Problem, in einem beliebigen Graphen einen Hamiltonschen Kreis zu finden (oder festzustellen, daß es keinen gibt) ist NP-vollständig, und daher im allgemeinen nicht effizient lösbar. 8.2.11 Beispiel. Weg durch alle Ecken eines Dodekaeders, Rösselsprünge. Eine Variante dieses Problems ist das Travelling Salesman Problem“: In ” einem bewerteten Graphen finde man den kürzesten Kreis, welche alle Knoten besucht. Auch dieses Problem ist NP-vollständig. Es ist aber möglich, mit wesentlich kürzerem Aufwand eine sehr gute Näherungslösung liefern. 8.3 Bäume Zyklenrang 8.3.1 Definition. Einen zyklenfreien Graphen nennt man einen Wald. Ein zusammenhängender Wald heißt Baum. 93 Da jede Zusammenhangskomponente eines Waldes ein Baum ist, ist die aus Biologie entnommene Terminologie gerechtfertigt. Ein Wald besteht also aus einer Menge von Bäumen. 8.3.2 Definition. In einem Graphen Γ mit n Knoten, m Kanten und p Zusammenhangskomponenten heißt die Zahl ν = m − n + p der Zyklenrang von Γ. 8.3.3 Definition. Eine Kante heißt Brücke, wenn sich durch ihre Entfernung die Anzahl der Zusammenhangskomponenten erhöht. 8.3.4 Satz. Jeder Graph hat Zyklenrang ν ≥ 0, und er ist genau dann ein Wald, wenn ν = 0. Beweis. Die Eigenschaft ν ≥ 0 gilt für jeden Graphen ohne Kanten (m = 0, n = p). Wird zu einem Graphen, der ν ≥ 0 erfüllt, eine Kante hinzugefügt, dann erhöht sich m um 1, während p entweder um 1 vermindert (wenn die neue Kante eine Brücke ist) oder gleich bleibt. In jedem Fall bleibt der Zyklenrang positiv. Da jeder Graph durch Hinzufügen von Kanten aus dem Nullgraphen hervorgeht, ist der erste Teil der Behauptung beweisen. Ist Γ ein Wald, so kann die neue Kante in der obigen Überlegung stets eine Brücke sein, da ansonsten ein Kreis entstehen würde. Deshalb muß der Zyklenrang = 0 bleiben. Umgekehrt entsteht stets ein Wald, wenn die neue Kante stets eine Brücke ist. 8.3.5 Satz. Ein Graph mit n Knoten, m Kanten und p Zusammenhangskomponenten ist genau dann ein Baum wenn 1. er zwei der drei folgenden Eigenschaften erfüllt: (a) p = 1 (zusammenhängend), (b) ν = 0 (kreisfrei), (c) m = n − 1; 2. Jede Kante eine Brücke ist; 3. er maximal kreisfrei ist; 4. er minimal zusammenhängend ist; 5. jedes Paar von Knoten durch genau einen Weg verbunden ist. Beweis. Übung. Aufspannende Bäume 8.3.6 Definition. Ein Teilgraph eines Graphen Γ heißt ein aufspannend wenn er alle Knoten von Γ umfaßt. 8.3.7 Satz. Jeder zusammenhängende Graph enthält einen aufspannenden Baum. 94 Beweis. Sei T ein Baum und Teilgraph des zusammenhängenden Graphen Γ. Falls T alle Knoten von Γ enthält, dann ist T bereits ein aufspannender Baum. Wenn nicht, dann enthält Γ eine Kante, welche T mit einem Knoten außerhalb von T verbindet, weil Γ zusammenhängend ist. Durch eine solche Kante wird T ergänzt, und das Ergebnis ist wiederum ein Baum. Dieser Schritt wird solange wiederholt, bis ein aufspannender Baum gefunden wird. 8.3.8 Satz. Der vollständige Graph Kn enthält nn−2 Gerüste. 8.3.9 Definition. Sei Γ ein mit positiven Zahlen bewerteter Graph. Ein Minimalgerüst (minimal spanning tree ist ein Gerüst, dessen Gesamtgewicht (Summe der Bewertungen aller seiner Kanten) minimal ist. Man beachte, daß ein Graph durchaus mehrere Minimalgerüste enthalten kann. 8.3.10 Satz. Jeder zusammenhängende Graph enthält ein Minimalgerüst, welches auf effiziente Weise gefunden werden kann. Beweis. Im Verfahren zum Auffinden eines Gerüstes (Beweis von Satz 8.3.7) wählen wir unter allen in Frage kommenden Kanten eine mit minimaler Bewertung. Es läßt sich zeigen, daß man auf diese Weise stets ein Minimalgerüst erhält. Das obige Verfahren zum Auffinden eines Minimalgerüstes ist ein typisches Beispiel für einen Greedy-Algorithmus. Wurzelbäume Um einen Baum zu konstruieren, wählen wir irgendeinen Knoten a0 als Wurzelknoten. Von diesem ausgehend zeichnen wir Kanten zu den Nachbarknoten a1 , a2 , . . . (den Söhnen), und von diesen weiter wieder Kanten zu deren Nachbarknoten a11 , a12 , . . . , a21 , a22 , . . . , usw (vgl. Abbildung 8.1). Weil ein Baum zusammenhängend ist, wird jeder Knoten irgendwann erreicht, und weil er keine Kreise beinhaltet, wird jeder Knoten nur einmal erreicht. Knoten, die keinen Sohn mehr haben, heißen Blätter. Die obige Konstruktion entspricht einem rekursivem Aufbau: Ein Baum besteht aus einem Wurzelknoten und einer (möglicherweise leeren) Menge weiterer Bäume (den Teilbäumen). Damit kann man Bäume als hierarchische Struktur und als Verallgemeinerung von Listen auffassen; in Haskell könnte man etwa definieren; data Tree a = Tree a (Forest a) data Forest a = List (Tree a) Wenn die hierarchische Struktur des Baumes betont wird, hat naturgemäß der Wurzelknoten eine spezielle Bedeutung (d.h. muß bei einem Baumisomorphismus erhalten bleiben). Man spricht dann gelegentlich etwas deutlicher von einem Wurzelbaum. 8.3.11 Satz. Ein Baum mit n Knoten hat n − 1 Kanten. Ein Wald mit k Zusammenhangskomponenten und n Knoten hat n − k Kanten. Bäume treten immer dann auf, wenn eine Struktur aus gleichartigen Unterstrukturen besteht, bzw. wenn sich ein Problem in Teilprobleme zerlegen läßt. Typische Beispiele: Sortier- und Suchprobleme. 95 a0 a1 a11 a2 a12 a21 a3 a22 a23 Abbildung 8.1: Rekursiver Aufbau eines Baumes Binärbäume 8.3.12 Definition. Ein binärer Baum ist entweder leer, oder er besteht aus einem Wurzelknoten und einem linken und einem rechten binären (Teil)baum. Formal könnte man diese Definition etwa so schreiben: data BTree a = Null | Btree a (BTree a) (BTree a) Dies macht die Analogie zur Definition von Listen noch deutlicher (bei letzteren fehlt lediglich der zweite Teilbaum). Prinzipiell sind binäre Bäume einfach Bäume, bei denen jeder Knoten höchstens zwei Nachfolger hat. Aber nicht genau: Im Unterschied zu Bäumen wird bei binären Bäumen zwischen dem linken und dem rechten Nachfolger unterschieden. Insbesondere sind und als verschiedene binäre Bäume zu betrachten. Außerdem kann ein Binärbaum, so wie ein Wald, aber im Gegensatz zu einem Baum, leer sein. Tatsächlich kann man jedem binären Baum auf natürliche Weise einen Wald zuordnen und umgekehrt: • Interpretiert man den linken Nachfolger in einem binären Baum als ältester ” Sohn“ und den linken Nachfolger als nachfolgender Bruder“, so bekommt ” jeder Knoten eine entsprechende Menge Söhne, wodurch ein Wald entsteht. • Zeichnet man umgekehrt in einem Wald nur zu einem Sohn eine Kante, und dafür von jedem Sohn eine zum nächsten, so entsteht ein binärer Baum. 96 Dies heißt allerdings nicht, daß Bäume und binäre Bäume damit zwei Varianten desselben Konzeptes wären. Denn ein Baum besteht ja aus einem Knoten und einer Menge von Teilbäumen. Die Interpretation als binärer Baum legt aber eine Reihenfolge der Teilbäume fest (nächstälterer Bruder). Insbesondere sind die Bäume und als gleich zu betrachten, führen aber mit der obigen Zuordnung zu den unterschiedlichen binären Bäumen: und Entsprechend dem rekursiven Aufbau eines binären Baumes, kann man eine Rekursion oder Induktion ähnlich wie für Listen führen, mit dem Unterschied, daß eben beide Zweige berücksichtigt werden müssen. Zum Beispiel erhalten wir analog zur Länge von Listen die Anzahl der Knoten in einem binären Baum: • Der leere Baum hat 0 Knoten; • Die Anzahl der Knoten in einem nicht-leeren binären Baum ist um 1 höher als die Summe der Anzahl der Knoten in den beiden Teilbäumen. Ersetzt man in dieser Definition Summe“ durch Maximum“, so erhält man ” ” die Höhe des binären Baumes. 8.3.13 Definition. Ein binärer Baum ist sortiert falls er entweder leer ist oder wenn beide Teilbäume sortiert sind und alle Elemente im linken Teilbaum kleiner als der Wurzelknoten sowie alle Elemente im rechten Teilbaum größer als der Wurzelknoten sind. Es ist leicht, eine Funktion tree2list zu schreiben, welche zu einem sortierten binären Baum die sortierte Liste derselben Elemente bestimmt: • tree2list von einem leeren Baum ergibt die leere Liste; • ansonsten bildet man tree2list vom linken Teilbaum, hängt den Wurzelknoten an, und dann tree2list vom rechten Teilbaum. 97 8.3.14 Definition. Diese Vorgangsweise, daß man zuerst den linken Teilbaum behandelt, dann den Wurzelknoten, dann den rechten Teilbaum, nennt man ganz allgemein in-order. Analog gibt es pre-order (zuerst der Wurzelknoten, dann die Teilbäume) und post-order (zuerst die Teilbäume, dann der Wurzelknoten) sowie double-order (zuerst der Wurzelknoten, dann die beiden Teilbäume, dann nocheinmal der Wurzelknoten). Das Berechnen von arithmetischen Ausdrücken (lassen sich in recht natürlicher Weise als Bäume darstellen) ist ein typisches Beispiel, bei dem post-order gefragt ist. Beim Suchen nach einem bestimmten Element in einem binären Baum (z.B. nach einer Datei mit einer bestimmten Eigenschaft) dagegen verwendet man pre-order. Hierarchisch organisierte Arbeitsabläufe funktionieren üblicherweise nach double-order: Zuerst delegiert der Chef Teilprobleme an die direkt unterstellten Mitarbeiter (und diese delegieren weiter) und später, wenn diese mit Ihrer Arbeit fertig sein, muß alles noch irgendwie kombiniert werden. 8.4 Planare Graphen Einbettungen Graphen werden anschaulich, falls die Knoten als Punkte in einer Ebene und die Kanten als (nicht notwendigerweise geradlinige) Verbindungslinien zwischen deren Endknoten gezeichnet werden. 8.4.1 Definition. Ein Graph heißt planar falls er in einer Ebene so gezeichnet werden kann, daß sich die Verbindungslinien nicht kreuzen. Die Formulierung kann gezeichnet werden“ bedeutet dabei, dass es einen ” dazu isomorphen Graphen gibt, welcher die geforderte Eigenschaft hat. Offenbar ist ein Graph genau dann planar wenn jede seiner Zusammenhangskomponenten planar ist. Man kann sich daher nach Belieben auf zuammenhängende schlichte Graphen beschränken. Planarität läßt sich auch rein kombinatorisch beschreiben. Jede Einbettung eines Graphen in der Ebene definiert eine zyklische Ordnung des Graphen, d.h. in jedem Knoten eine Reihenfolge der in diesem inzidenten Kanten (ohne Anfang und Ende), etwa durch den Uhrzeigersinn. Eine Masche ist dann ein geschlossner Kantenzug, in dem eine darin nachfolgende Kante gerade diejenige ist, welche in der zyklischen Ordnung als nächstes kommt, und welcher solange fortgesetzt wird, bis die erste Kante wieder in derselben Richtung durchlaufen wird. Eulersche Polyederformel Durch einen kreuzungsfrei gezeichneten Graphen wird die Ebene in mehrere Gebiete zerteilt. Jedes dieser Gebiete entspricht genau einer Masche, und das Gebiet um den ganzen Graphen herum entspricht der Masche, welche am Weg entlang des Außenrandes des Graphen führt. 8.4.2 Theorem (Eulersche Polyederformel). Ein kreuzungsfrei gezeichneter zusammenhängender schlichter Graph mit n Knoten und m Kanten zerlegt die Ebene in m − n + 2 Gebiete. 98 Beweis. Die Behauptung stimmt für eine Graphen mit nur einem Knoten und ohne Kanten, also für den Fall m = 0, n = 1. Wird zu einem kreuzungsfreien Graphen eine Kante zusammen mit einem neuen Knoten hinzugefügt, so ändert sich die Zahl der Gebiete nicht, und auch nicht die Differenz m − n. Verbindet eine neue Kante dagegen zwei schon vorhandene Knoten, dann geht sich das nur dann kreuzungsfrei aus, wenn dadurch ein Gebiet zerteilt wird. Daher erhöht sich in diesem Falls sowohl die Anzahl der Gebiete als auch die Differenz m − n um 1. Der Fall, daß ein Knoten ohne Kante hinzugefügt wird, kann wegen der Zusammenhangseigenschaft unberücksichtigt bleiben. Die Anzahl der Mascheneines kreuzungsfrei gezeichneten Graphen stimmt mit der Anzahl der Gebbiete überein. Sie ist aber auch für nicht kreuzungsfrei gezeichnete Graphen definiert, kann dann aber kleiner sein als m − n − 2. Es läßt sich zeigen, daß ein Graph genau dann planar ist, wenn es eine zyklischen Ordnung gibt, die zu genau dieser maximal möglichen maximalen Maschenzahl führt. 8.4.3 Satz. Sei Γ ein zusammenhängender planarer schlichter Graph mit n Knoten und m Kanten. Dann gilt: 1. m + 6 ≤ 3n; 2. falls Γ kein Dreieck enthält, dann gilt sogar m + 4 ≤ 2n; 3. Γ enthält mindestens einen Punkt mit Grad ≤ 5. Beweis. Jede Fläche ist durch mindestens 3 Kanten begrenzt. Daher ist 3(m − n − 2) ≤ 2m, was nach einer Vereinfachung die erste Behauptung ergibt. Wenn aber jede Fläche sogar durch mindestens 4 Kanten begrenzt ist, dann ergibt sich 4(m − n − 2) ≤ 2m, was nach einer Vereinfachung zur zweiten Behauptung führt. Die Summe der Kantengrade aller Knoten ist 2m. Hat aber jeder Knoten Grad ≥ 6, dann ist diese Summe mindestens 6n, was der ersten Behauptung widerspricht. Kuratowski-Graphen 8.4.4 Beispiel. Nicht planar sind (Übung) 1. K5 , der vollständige Graph mit 5 Knoten, und 2. K3,3 , der vollständige bipartite Graph mit zweimal 3 Knoten. Diese beiden Graphen heißen der erste bzw. zweite Kuratowski-Graph. 8.4.5 Theorem (Kuratowski). Ein schlichter zusammenhängender Graph ist genau dann nicht planar, wenn er eine Unterteilung eines der beiden KuratowsiGraphen als Teilgraph besitzt. Daß ein Graph, der einen nicht-planaren Teilgraphen enthält, niemals planar sein kann, ist unmittelbar einsichtig. Der Beweis für die andere Richtung ist deutlich schwieriger und ein klassisches Resultat der Graphentheorie (1930) (zu finden z.B. in Martin Aigner, Graphentheorie, Kapitel 4, Teubner, 1984.) 99 8.4.6 Satz. Für das Problem, festzustellen, ob ein Graph planar ist, gegebenfalls eine Einbettung in die Ebene zu finden (sogar eine geradlinige, auf Wunsch auch als gutes Bild“), oder anderenfalls einen Kuratowski-Graphen als Beweis für ” die Nicht-Planarität zu finden, gibt es effiziente Algorithmen. Auf die weiteren Detail dieser Algorithmen sie hier nicht eingegangen. Bemerkenswert ist noch, daß ein planarer Graph stets so kreuzungsfrei gezeichnet werden kann, daß alle Kanten sogar Strecken sind. Und daß die Verfahren auch dahingehend verbessert werden können, daß am Ende gute“ Bilder des Graphen ” generiert werden. 8.5 Färbbarkeit Das Einfärben einer Landkarte kann als graphentheoretisches Problem interpretiert werden: Man nehme die Länder als Knoten des Graphen und zeichne eine Kante zwischen zwei Knoten, falls die entsprechenden Länder eine gemeinsame Grenze haben. (Dies ist gerade der Graph, der zum demjenigen Graphen, der die Grenzen zeichnet, dual ist.) Dem Einfärben einer Landkarte entspricht dann die Zuordnung von Farben zu den Knoten des Graphen. k-Färbung 8.5.1 Definition. Eine k-Färbung eines Graphen Γ ist eine Funktion f : X → {0, . . . , k−1}, sodaß für zwei adjazente Knoten a, b stets f (a) 6= f (b). Der Graph heißt k-färbbar, wenn er eine k-Färbung zuläßt. Das kleinste k, für welches Γ eine k-Färbung zuläßt, heißt dessen chromatische Zahl χ(Γ). Ein χ(Γ)-Färbung ist optimal. 8.5.2 Beispiel. χ(Kn ) = n. Ist Γ ein Kreis, dann ist χ(Γ) = 2, wenn er gerade Länge hat, und χ(Γ) = 3, wenn er ungerade Länge hat. Bipartite Graphen 8.5.3 Definition. Ein Graph heißt bipartit wenn er 2-färbbar ist. 8.5.4 Satz. Ein Graph ist genau dann bipartit, wenn er keine Kreise ungerader Länge enthält. 8.5.5 Satz. Es gibt ein effizientes Verfahren um festzustellen, ob ein Graph eine 2-Färbung zuläßt, und diese gegebenenfalls zu finden. Beweis. Wir starten in irgendeinem Knoten aund geben diesem die Farbe 0. Alle Nachbarknoten von a müssen anders gefärbt werden, erhalten also die Farbe 1. Anschließend färben wir alle Nachbarknoten der Nachbarknoten von a mit Farbe 0. Falls einer dieser Knoten aber vorher bereits die Farbe 1 erhalten hat, dann ist der Graph nicht 2-färbbar. Wir fahren auf analoge Weise bei den Nachbarknoten der Nachbarknoten der Nachbarknoten von n fort. Das obige Verfahren zum Auffinden einer 2-Färbung ist ein typisches Beispiel für einen Breadth-First-Suchalgorithmus. 100 8.5.6 Beispiel. Ein Rahmen ist nur dann stabil wenn er gewisse Diagonalverbindungen enthält. Man bildet einen bipartiten Graphen, dessen Knoten den Zeilen bzw. den Spalten des Rahmens entsprechen. Eine Kante zeigt dann an, ob in diesem Bereich eine Diagonalverbindung besteht. Die Konstruktion ist genau dann stabil, wenn dieser Graph zusammenhängend ist. Und die Anzahl der Diagonalverbindungen ist minimal (um Festigkeit zu erreichen), genau dann, wenn der Graph ein aufspannender Baum ist. Framework. Außerdem liefert dieses Verfahren auch einen Beweis für den folgenden Satz. 8.5.7 Definition. Ein Graph heißt eindeutig färbbar, wenn jede optimale Färbung zu den denselben Farbklassen führt. 8.5.8 Satz. Jeder zusammenhängende bipartite Graph ist eindeutig färbbar. Bipartite Graphen entsprechen damit Relationen der Form X → Y → Ω. Die Knotenmenge ist dann die direkte Summe X + Y . 8.5.9 Beispiel. Framework. Viele Stahlbetonbauten erhalten ihre Festigkeit durch ein rechteckiges Stahlgerüst. Damit es fest bleibt, müssen auch gewisse Diagonalverbindungen eingefügt werden. Man bildet eine bipartiten Graphen, dessen Knoten den Zeilen bzw. den Spalten entsprechen. Eine Kante zeigt dann an, ob in diesem Bereich eine Diagonalverbindung besteht. Die Konstruktion ist genau dann fest, wenn dieser Graph zusammenhängend ist. Und die Anzahl der Diagonalverbindungen ist minimal (um Festigkeit zu erreichen), genau dann, wenn der Graph ein Gerüst ist. 3-Färbbarkeit Man kann versuchen, die (recht einfache und einleuchtende) Idee für die Lösung der 2-Färbbarkeit auf die 3-Färbbarkeit zu verallgemeinern. Dabei ergibt sich jedoch ein wesentlicher Unterschied: während beim Problem der 2-Färbbarkeit die Farbe für alle Nachbarknoten eindeutig bestimmt ist, ist bei der 3-Färbbarkeit für jeden Nachbarknoten aus 2 Farben auszuwählen. Diese Auswahlmöglichkeit bedeutet letztendlich, daß im schlimmsten Fall alle Möglichkeiten durchprobiert werden müssen. Tatsächlich läßt sich beweisen, daß es keine wesentlich bessere Methode gibt: 8.5.10 Satz. Das Problem der 3-Färbung ist NP-vollständig. Landkarten 8.5.11 Theorem (4-Farben-Satz). Jeder planare Graph ist 4-färbbar. In etwas anschaulicherer Formulierung: 8.5.12 Folgerung. Jede Landkarte kann so mit 4 Farben eingefärbt werden, daß keine zwei angrenzenden Länder dieselbe Farbe erhalten. 101 Ein Beweis dafür, daß stets 5 Farben ausreichen, wurde schon vor langem gefunden; doch das 4-Farben-Problem war lange Zeit ein bekanntes ungelöstes Problem. Erst Ende der 90er Jahre konnte das Problem auf ca 2000 Fälle zurückgeführt werden, die dann alle mittels Computer aufwendig nachgerechnet wurden. Der Satz gilt nur für planare Graphen. Landkarten mit nicht-zusammenhängenden Ländern (Enklaven, Kolonien) können zu nicht-planaren Graphen führen, für die der 4-Farben-Satz nicht gilt. Man kann das Problem aber auch für Graphen auf allgemeineren Flächen betrachten. Eine Ebene und eine Kugeloberfläche sind ja, was die Planarität betrifft, äquivalent. Aber für Graphen (Landkarten) auf einem Torus benötigt man zum Beispiel 7 Farben. Es konnte sogar der folgende Satz bewiesen werden: 8.5.13 Theorem (Formel von Heawood). Die zum Färben von beliebigen Landkarten auf einer Oberfläche mit g Löchern notwendige Anzahl von Farben ist p 1 b (7 + 1 + 48g)c. 2 (Eine Kugeloberfläche hat 0 Löcher, der Torus (Oberfläche eines Schwimmreifens) 1 Loch, zwei zusammengeklebte Toren 3, usw.) (Die Notation bxc bezeichnet die größte ganze Zahl, die noch kleiner als x ist (durch Abrunden); also b3.2c = b3.7c = b3.99c = bπc = b3c = 3, aber b−3.7c = b−3.01c = b−4c = −4. Analoges gilt für die Notation dxe. 8.6 Kürzeste Wege Gibt es mehrere Wege zwischen zwei Knoten, so ist im allgemeinen der kürzeste interessant. Die Länge eines Weges in einem bewerteten Graphen ist definiert als die Summe der Bewertungen der betroffenen Kanten. 8.6.1 Theorem (Dijkstra). Sei Γ ein mit positiven Zahlen bewerteter Graph. Dann gibt es ein effizientes Verfahren, um den kürzesten Weg zwischen zwei Knoten zu bestimmen (oder festzustellen, daß es keinen Weg gibt). Beweis. Wir gehen von einem Knoten a aus. Wir suchen uns eine von a ausgehende Kante (zu einem Knoten b) mit minimaler Bewertung. Damit haben wir auf jeden Fall den kürzesten Weg von a nach b gefunden. Wenn b der Knoten ist, zu dem wir den kürzesten Weg suchen, sind wir damit fertig. Ansonsten müssen wir weitersuchen. Zu den anderen von a aus direkt erreichbaren Knoten haben wir ebenfalls bereits einen Weg gefunden, allerdings kann man nur vermuten, daß diese Direktverbindungen optimal sind (es könnte ja ein Umweg über b zu einem kürzerem Weg führen. Jedenfalls merken wir uns, wie lange der kürzeste bisher gefundene Weg zu diesen Knoten ist. Dasselbe machen wir für alle von b aus direkt erreichbaren Knoten. Unter all diesen bereits gefundenen, aber noch nicht als minimal erkannten Wegen suchen wir uns den kürzesten aus. Dieser muß minimal sein, da jeder noch nicht gefundene Weg mindestens so lange wie dieser ist(hier wird verwendet, daß die Kantenbewertung positiv ist). Damit haben wir einen weiteren Knoten c gefunden, zu dem wir den kürzesten Weg kennen. 102 Wieder merken wir uns alle Wege zu allen direkt von c aus erreichbaren Knoten. Falls wir auf diese Weise zu einem Knoten mehrere Wege finden, merken wir uns nur den kürzeren. Danach suchen wir uns wieder den kürzesten bereits gefundenen, aber noch nicht als minimal erkannten Weg, und setzen fort, bis wir den kürzesten Weg zu dem Knoten gefunden haben, zu dem wir den kürzesten Weg suchen. Wenn wir bei diesem nie ankommen, gibt es zu diesem überhaupt keinen Weg. Der im obigen Beweis vorgestellte Algorithmus ist ein Beispiel für dynamische Programmierung, deren Grundidee es ist, daß man sich die Zwischenergebnisse merkt, um sie später nicht wieder berechnen zu müssen. 8.7 Flußprobleme In diesem Zusammenhang werden Kantenbewertungen als maximale DurchflußKapazität zwischen den betroffenen Knoten interpretiert. 8.7.1 Definition. Sei X die Knotenmenge eines Graphen Γ. 1. Unter einem Fluß versteht man dann eine asymmetrische Funktion φ : X → X → Z, also eine Funktion mit φ(x, y) = φ(y, x). 2. Die Flußstärke ρ(x) im Knoten x ist definiert als X ρ(x) = φ(x, y), y∈Γ(x) wobei Γ(x) die Menge aller Nachbarknoten von x bezeichnet. 3. Sind a, b Knoten, dann heißt der Fluß φ ein a-b-Fluß, wenn ρ(x) = 0, außer für x ∈ {a, b}. Für einen a-b-Fluß gilt ρ(a) = −ρ(b). Daß die Flußstärke überall sonst gleich Null ist, bedeutet lediglich, daß aus jedem Knoten genauso viel herausfließt wie auch hineinfließt. Die Knoten a und b heißen dann auch die Quelle und das Ziel des Flusses. Und ρ(a) ist der Gesamtdurchfluß von a nach b. 8.7.2 Definition. Sei c : X → X → N eine Kantenbewertung von Γ; mit c(x, y) = 0, wenn es keine Kante von x nach y gibt. Dann heißt ein Fluß φ zulässig, wenn für alle x, y ∈ X gilt: φ(x, y) ≤ c(x, y). Das Problem besteht nun darin, ein zulässiges φ zu finden, sodaß der Gesamtdurchfluß maximal wird. 8.7.3 Algorithmus (Ford-Fulkerson). Man verwende irgendeinen Weg von a nach b. Der Durchfluß auf diesem Weg entspricht dem Minimum aller Kantenbewertungen darin. Dieser Durchfluß wird. Danach betrachtet man den Graphen mit den Restkapazitäten und fährt entsprechend fort, uns zwar solange sich ein zulässiger Weg von a nach b mit einem positivem Durchfluß finden läßt. 103 Kapitel 9 Automaten, Formale Sprachen, Berechenbarkeit 9.1 Wörter 9.1.1 Notation. Für jede Menge Σ, bezeichne Σ∗ die Menge aller Listen von Objekten vom Typ Σ. Wenn Σ endlich ist, nennt man deren Elemente gelegentlich Zeichen oder Symbole, und Σ heißt dann ein Alphabet, und die Elemente von Σ∗ heißen dann Zeichenketten (Strings) oder Wörter über dem Alphabet Σ. Die Länge eines Wortes w wird mit |w| bezeichnet. Die leere Liste heißt dann das leere Wort und wird meist mit ² bezeichnet. Die Verkettung von Wörtern wird meist ohne Symbol, einfach durch Nebeneinanderstellen, bezeichnet (u ¦ v = uv). Wir verwenden auch Potenznotation (u0 = ², un+1 = un u). Ferner steht jedes Symbol gleichzeitig als Abkürzung für das entsprechende Wort der Länge 1 (α / u = αu, Σ ⊆ Σ∗ ). Zur besseren Lesbarkeit und der Einfachheit halber bezeichnen wir hier Symbole zumeist mit kleinen griechischen Buchstaben (α, β, γ, usw.) und Wörter mit kleinen lateinischen Buchstaben (u, v, w, usw.). 9.1.2 Bemerkung. So wie jede Listenverkettung ist auch die Wortverkettung eine assoziative Operation, und das leere Wort ist neutrales Element: (uv)w = u(vw); (9.1) u² = u = ²u. (9.2) Die Wörter über Σ bilden daher ein Monoid, das freie Wortmonoid über Σ. 9.1.3 Satz. Für jedes Alphabet Σ ist die Wortlänge ein Homomorphismus in das additive Monoid der natürlichen Zahlen (N, +), d.h. |²| = 0; |uv| = |u| + |v| . (9.3) (9.4) 9.1.4 Bemerkung. Funktionen auf Wörtern werden so wie für Listen üblich typischerweise rekursiv definiert. 9.1.5 Beispiel. Die Spiegelung eines Wortes wird definiert durch: s : Σ∗ → Σ∗ , s(²) = ², s(αw) = s(w)α. 104 (9.5) (9.6) 9.1.6 Beispiel. Ein Palindrom ist ein Wort w, für welches w = s(w) gilt. 9.1.7 Theorem. Sei M ein beliebiges Monoid. Dann läßt sich jede Abbildung f : Σ → M zu genau einem Homomorphismus f ∗ : Σ∗ → M fortsetzen. Beweis. Jeder derartige Homomorphismus muß die folgenden Gleichungen erfüllen. f ∗ (²) = ², f ∗ (αw) = f (α)f ∗ (w). (9.7) (9.8) Tatsächlich wird dadurch eindeutig eine Funktion definiert, und man kann mit Induktion zeigen, daß diese tatsächlich ein Homomorphismus ist. 9.2 Formale Sprachen 9.2.1 Definition. Sei Σ ein Alphabet. Jede Teilmenge von Σ∗ nennt man eine formale Sprache über Σ. 9.2.2 Bemerkung. Da Sprachen Teilmengen sind, stehen auch für Sprachen die üblichen Mengenoperationen zur Verfügung, insbesondere Vereinigung, Durchschnitt, Mengendifferenz. Darüberhinaus können weitere Operationen für Sprachen definiert werden, die sich aus der Übertragung von Operationen für Wörter ergeben. 9.2.3 Definition. Seien L, L1 , L2 Sprachen über dem Alphabet Σ. Dann definiert man L1 L2 = { uv | u ∈ L1 , v ∈ L2 } L0 = { ² } Ln+1 = LLn [ L∗ = Lk (Verkettung) (einelementig) (für n : N) (9.9) (9.10) (9.11) (Iteration) (9.12) k: N 9.2.4 Bemerkung. Mit dieser Verkettung von Sprachen ist somit auch auf der Menge P(Σ∗ ) aller Sprachen über einem Alphabet eine Monoidstruktur definiert. 9.2.5 Beispiel. Sei ∆ ein weiteres Alphabet. Dann nennt man eine Abbildung der Form f : Σ → P(∆∗ ) eine Substitution; sie wird natürlich ebenfalls auf Σ∗ fortgesetzt zu f ∗ : Σ∗ → ∆∗ mittels f ∗ (²) = ², ∗ (9.13) ∗ f (αw) = f (α)f (w). (9.14) 9.2.6 Beispiel. Ist h : Σ∗ → ∆∗ ein Homomorphismus und sind L1 : P(Σ∗ ), L2 : P(∆∗ ) Sprachen, dann heißt die Sprache h(L) = { h(w) | w ∈ L } ein homomorphes Bild von L, und die Sprache h−1 (L) = { w : Σ∗ | h(w) ∈ L } ist ein inverses homomorphes Bild. Für jedes α : Σ ist { α } eine Sprache; sie besteht nur aus einem Wort. Noch trivialer sind die Sprachen { ² } und ∅. 105 Jede endliche Sprache läßt mit Verkettung und Vereinigung aus diesen trivialen Sprachen bilden. Die Klasse aller endlichen Sprachen ist abgeschlossen gegenüber Vereinigung, Durchschnitt, Differenz und Verkettung, nicht aber gegenüber Komplement und Iteration. 9.3 Endliche Automaten 9.3.1 Definition. Ein deterministischer, endlicher Halbautomat besteht aus • einer endlichen Menge Q von Zuständen (states); • einer endlichen Menge Σ, dem Eingabealphabet; • einer Zustandsüberführungsfunktion δ : Σ → (Q → Q); Dieser (Halb-)Automat A wird dann auch mit dem Tripel A = (Q, Σ, δ) bezeichnet. 9.3.2 Bemerkung. Man beachte, daß die Menge aller Abbildungen Q → Q mit der Hintereinanderausführung von Abbildungen ein Monoid bildet. Wir schreiben dazu f ; g = g ◦ f . Die Zustandsüberführungsfunktion δ läßt sich somit, wie jede Funktion von Σ in ein Monoid, gemäß (9.1.7) zu einem Homomorphismus definiert auf dem freien Wortmonoid Σ∗ fortsetzen, was hier konkret bedeutet: δ²∗ = id Q ∗ ∗ = δα ; δw δαw (9.15) (9.16) Für α ∈ Σ und q ∈ Q wird der Folgezustand am übersichtlichsten als δα (q) geschrieben. Insbesondere ist δα : Q → Q. Übersichtlich darstellen läßt sich ein Automat durch einen bewerteten gerichteten Graphen, seinen Zustandsgraphen: Die Zustände werden zu den Knoten des Graphen, und es gibt genau dann eine (mit α ∈ Σ bewertete Kante) von i nach j wenn δα (i) = j. Derartige Graphen haben die Eigenschaft, daß für jedes α ∈ Σ von jedem Knoten genau eine Kante mit der Bewertung α ausgeht, weil es ja stets genau einen Folgezustand gibt. Es macht aber durchaus Sinn, auf diese Einschränkung zu verzichten. 9.3.3 Definition. Ein nicht-deterministischer, endlicher Halbautomat besteht aus • einer endlichen Menge Q von Zuständen; • einer endlichen Menge Σ, dem Eingabealphabet; • einer Zustandsüberführungsrelation δ : Σ → Q → Q → B; Dieser Automat wird dann auch mit dem Tripel (Q, Σ, δ) bezeichnet. Ein solcher Automat kann eindeutig durch seinen Zustandsgraphen, einem bewerteten gerichteten Graphen (mit Schlingen und Mehrfachkanten), dargestellt werden: Die Zustände dienen als Knoten, das Alphabet als Kantenbewertung. 106 Der einzige Unterschied besteht also darin, daß für die Zustandsüberführung beliebige Relationen (nicht nur Funktionen) erlaubt sind. In jeder Situation kann es damit einen, mehrere, oder auch gar keinen Folgezustand geben. Damit entspricht jeder bewertete gerichtete Graph (in dem zusätzlich ein Anfangszustand und eine Teilmenge von Finalzuständen gekennzeichnet sind) genau einem nichtdeterministischen, endlichen Automaten. Die Zustandsüberführung kann man auch als Funktion vom Typ δ : Σ → Q → P(Q) auffassen. 9.3.4 Definition. Ein nicht-deterministischer Akzeptor besteht aus • einer endlichen Menge Σ, dem Eingabealphabet; • einer endlichen Menge Q von Zuständen; • einem Anfangszustand (initial state) q0 ∈ Q; • einer Zustandsüberführungsrelation δ : Σ → Q → Q → B; • einer Teilmenge F ∈ P(Q) von Finalzuständen. Dieser Automat wird dann auch mit dem Quintupel (Σ, Q, q0 , δ, F ) bezeichnet. Jeder deterministische Automat kann als Spezialfall eines nicht-deterministischen Automaten aufgefaßt werden. Zwischenformen: Ein partieller (deterministischer) Automat hat stets höchstens einen Folgezustand. Und ein vollständiger Automat hat stets mindestens einen Folgezustand. Weiters betrachtet man gelegentlich Automaten mit spontanen Übergängen (das sind solche, die keine Eingabe erfordern). Ein derartiger Automat kann stets auf einen funktionsgleichen ohne spontane Übergange zurückgeführt werden. Ein Akzeptor besteht somit aus: 1. einem Halbautomaten; 2. einem Anfangszustand q0 ∈ Q; 3. einer Teilmenge F ∈ P(Q) von Finalzuständen. Der Anfangszustand wird dann üblicherweise durch einen Pfeil gekennzeichnet, und jeder Finalzustand durch doppeltes einkreisen. 9.3.5 Definition. Wenn Σ ein Alphabet ist, dann bezeichnet Σ∗ die Menge aller Wörter über diesem Alphabet. Dabei ist eine Wort nichts anderes als eine Liste über der Menge Σ, aber statt α / w und v ¦ w schreiben wir einfach αw bzw. vw, und die leere Liste, das leere Wort, bezeichnen wir mit ². Ferner kürzt man z.B. das Wort ααααα durch α5 ab, und α0 = ². Eine Teilmenge von Σ∗ heißt dann eine Formale Sprache (über dem Alphabet Σ). 9.3.6 Definition. Die Zustandsüberführungsfunktion eines deterministischen Automaten wird rekursiv durch δ²∗ = id Q, ∗ ∗ ◦ δα = δw δαw 107 zu δ ∗ : Σ∗ → Q → Q verallgemeinert. Für nicht-deterministische Automaten definiert man ähnlich δ²∗ = id Q, [ ∗ ∗ (y). δw (q) = δαw y∈δα (q) ∗ δw (q) bezeichnet damit in jedem Fall die Menge aller Zustände, in welchen sich der Automat nach der Eingabe des Wortes w befinden kann, wenn er zuvor im Zustand q war. Insbesondere ist δα = δα∗ , für α ∈ Σ. 9.3.7 Definition. Sei A = (Σ, Q, q0 , δ, F ) ein deterministischer Automat. Dann definiert man die Sprache des Automaten als L(A ) := {w ∈ Σ∗ | δ ∗ (q0 ) ∈ F }, und man sagt, daß der Automat A eine Sprache L ∈ P(Σ∗ ) erkennt (accepts), wenn L = L(A ). Für nicht-deterministische Automaten definiert man ähnlich L(A ) := {w ∈ Σ∗ | δ ∗ (q0 ) ∩ F 6= ∅}, 9.3.8 Satz. Zu jedem nicht-deterministischen Automaten gibt es einen deterministischen Automaten, der dieselbe Sprache erkennt. Beweis. Im Prinzip ersetzt man die Zustandsmenge Q des nicht-deterministischen Automaten durch deren Potenzmenge P(Q), um die Zustandüberführung künstlich deterministisch zu machen“. Allerdings sind dann die meisten Zustände gar ” nicht erreichbar, sodaß man einfacher folgendermaßen vorgeht: Als Startzustand verwendet man die einelementige Menge {qo }. Dann betrachtet man für jede Eingabe α ∈ Σ die Menge aller Zustände, in welche der Automat damit gelangen kann. Für jede dieser Mengen bestimmt man wieder für jede Eingabe die Menge der dann möglichen Folgezustände, bis keine neuen Teilmengen mehr gefunden werden. Eine Teilmenge ist dann genau dann ein Finalzustand wenn sie mindestens einen Finalzustand des ursprünglichen Automaten enthält. Damit kann man stets einen deterministischen Automaten voraussetzen, und trotzdem auch nicht-deterministische (auch mit spontanen Übergängen) verwenden, wenn das einfacher ist. 9.4 Reguläre Sprachen 9.4.1 Definition. Die kleinste Klasse von formalen Sprachen, welche alle endlichen Sprachen umfaßt und abgeschlossen ist gegenüber Verkettung, Vereinigung und Iteration, heißt die Klasse der regulären Sprachen. Reguläre Sprachen werden zumeist durch reguläre Ausdrücke (regular expression, regex) beschrieben: 9.4.2 Definition. Sei Σ ein Alphabet. Dann ist jedes α ∈ Σ ein regulärer Ausdruck, und wenn r, s reguläre Ausdrücke sind, dann auch (rs), (r|s) und r∗ , entsprechend den definierenden Konstruktionen für reguläre Sprachen. 108 Natürlich kann man bei regulären Ausdrücken auf Klammern verzichten, wenn der Aufbau auch ohne diese klar ist. Darüberhinaus verwenden die meisten der gängigen Programme zur Verarbeitung von regulären Ausdrücken aus praktischen Gründen diverse Abkürzungen, z.B. r? = (r|²) r+ = rr∗ [xyz] = x|y|z .=Σ [c − u] = c|d| . . . |t|u [ˆxyz] = l1 |l2 |l3 | . . . |ln , falls Σ \ {x, y, z} = {l1 , . . . , ln } und viele mehr. Einen Vergleich der Syntaxregeln für reguläre Ausdrücke in verschiedenen Programmiersprachen bietet: http://www.greenend.org.uk/rjk/2002/06/regexp.html Automaten lassen sich auch verbinden: 9.4.3 Definition. Seien A1 , A2 zwei Automaten über demselben Eingabealphabet. Bei der Serienschaltung A1 A2 dieser Automaten werden alle Finalzustände von A1 mit dem Anfangszustand von A2 durch einen spontanen Übergang verbunden; der Anfangszustand wird von A1 übernommen, die Menge der Finalzustände von A2 ; die gesamte Zustandsmenge ist dabei die direkte Summe (disjunkte Vereinigung) der einzelnen Zustandsmengen. Bei der Parallelschaltung A1 +A2 dagegen wird, zusätzlich zur direkten Summe der Zustandsmengen, ein weiterer Zustand als Anfangszustand eingeführt, zusammen mit spontanen Übergängen von diesem zu den Anfangszuständen der Ausgangsautomaten; Für die Menge der Finalzustände wird die Vereinigung gebildet. Für die Rückkoppelung A ∗ braucht man nur einen Automaten, der durch spontane Übergänge von jedem Finalzustand zum Anfangszustand ergänzt wird; ferner wird die Menge der Finalzustände um den Anfangszustand ergänzt. 9.4.4 Definition. Seien L1 und L1 formale Sprachen über dem Alphabet Σ. Dann definiert man deren Verkettung als L1 L2 := {vw | v ∈ L1 , w ∈ L2 }. Ferner definiert man die Iteration einer fomalen Sprache L als [ Ln , L∗ := n∈N wobei Ln rekursiv definiert wird als L0 = {²}, Ln+1 = Ln L. 9.4.5 Satz. Seinen A1 , A2 endliche Automaten. Dann gilt L(A1 A2 ) = L(A1 )L(A2 ) L(A1 + A2 ) = L(A1 ) ∪ L(A2 ) L(A1∗ ) = L(A1 )∗ . 109 9.4.6 Satz. Eine Sprache ist genau dann regulär wenn sie durch einen endlichen Automaten erkannt wird. Beweis. Klarerweise kann man zu jeder endlichen Sprache einen erkennenden Automaten bilden. Und Satz 9.4.5 besagt gerade, wie die entsprechenden Automaten für eine Verkettung, Vereinigung oder Iteration einer Sprache zu konstruieren sind. Sei nun umgekehrt ein Automat A gegeben. Wir zeigen, daß L(A ) regulär ist. Dazu definieren wir zuerst die folgenden Sprachen: Y ∗ Ri,j := {w ∈ Σ∗ | δw (i) = j∧δv∗ (i) ∈ Y für jedes echte Präfix v von w mit 0 < |v| < |w|} Y Ri,j besteht damit aus all jenen Wörtern, die vom Zustand i in den Zustand j führen, und dabei zwischendurch nur in Zustände aus der Menge Y führen (i, j müssen aber keine Elemente von Y sein). Dann gilt [ Q L(A ) = R0,j . j∈F Q regulär ist. Zu diesem Zweck fahren Wir müssen also noch zeigen, daß jedes R0,j wir rekusiv folgendermaßen fort Y ∪{ k } Ri,j Y Y Y Y = Ri,j ∪ Ri,k (Rk,k )∗ Rk,j , ∅ sodaß wir alles auf die Ri,j zurückführen, die aber alle endlich sind. 9.4.7 Satz. Die Klasse der regulären Sprachen ist gegenüber allen boolschen Mengenoperationen (also auch Durchschnitt und Komplement) sowie gegenüber Spiegelung abgeschlossen. Beweis. Es ist nicht offensichtlich, wie ein regulärer Ausdruck für das Komplement einer regulärer Sprache ausschauen soll. Dafür kann man zu jedem Automaten A ganz einfach jenen konstruieren, der alle Wörter erkennt, die A nicht erkennt: man verwendet einfach Q \ F als Finalzustände. Für den Durchschnitt kann man dann etwa ein De Morgan Gesetz verwenden: L1 ∩ L2 = {({L1 ∪ {L2 ). Für die Spiegelung dagegen muß man lediglich den regulären Ausdruck spiegeln. 9.4.8 Bemerkung. Ferner ist die Klasse der regulären Sprachen gegenüber homomorphen Bildern und Substitutionen abgeschlossen. 9.5 Reguläre Sprachen 9.5.1 Definition. Ein vollständiger deterministischer endlicher Automat A heißt minimal wenn jeder andere Automat, der dieselbe Sprache erkennt, mindestens soviel Zustände wie A hat. 9.5.2 Satz. Zu jeder regulären Sprache gibt es, bis auf Isomorphie, genau einen diese erkennenden minimalen Automaten. 9.5.3 Satz. Alle folgenden Probleme sind für reguläre Sprachen entscheidbar: 110 1. L = ∅; 2. L ist endlich; 3. w ∈ L; 4. L1 = L2 ; 5. L1 ⊆ L2 . Beweis. 1. Für die leere Sprache gibt es entweder gar keinen regulären Ausdruck, oder sie wird durch ein spezielles Symbol bezeichnet, dessen Vorkommen dann lediglich zu prüfen ist. Auch einem durch seinen Zustandsgraphen dargestellen Automaten kann man das leicht anmerken: er erkennt genau dann die leere Sprache, wenn es keinen Weg vom Anfangszustand zu einem Finalzustand gibt. 2. Ein regulärer Ausdruck beschreibt genau dann eine endliche Sprache, wenn keine Iteration vorkommt. Für einen Automaten müßte man prüfen, ob sein Zustandsgraph einen Zyklus enthält, von dem aus es eine Abzweigung zu einem Finalzustand gibt. 3. Festzustellen, ob ein Wort zu einer Sprache gehört oder nicht, ist gerade die Aufgabe, die ein erkennender Automat (optimal) beherrscht. 4. Es ist mitunter nicht so offensichtlich, ob zwei reguläre Ausdrücke dieselbe Sprache beschreiben. Man kann aber von beiden einen minimalen Automaten berechnen und feststellen, ob diese isomorph sind. 5. L1 ⊆ L2 gilt genau dann wenn L1 ∪ L2 = L2 . 9.5.4 Lemma (Pumping Lemma). Zu jeder regulären Spache L gibt es eine Zahl n ∈ N, sodaß jedes Wort z ∈ L mit |z| ≥ n derart in z = uvw zerlegt werden kann, daß gilt: • |v| ≥ 1; • |uv| ≤ n; • uv i w ∈ L, für alle i ∈ N. Beweis. Laut Voraussetzung wird L von einem deterministischen endlichen Automaten erkannt. Wird nun ein Wort z ∈ L eingegeben, dessen Länge n größer ist als die Anzahl der Zustände des Automaten, so muß zumindest ein Zustand z2 mindestens zwei Mal angenommen werden. Entsprechend zerlegen wir z = uvw derart, daß der Automat nach der Eingabe von u im Zustand q2 ist und die Eingabe von v von q2 wieder nach q2 führt (w ist dann das Restwort). Dann gilt |v| ≥ 1 und |uv| ≤ n. Wird nun statt z = uvw ein Wort der Form uv i w eingegeben, so ändert sich nicht allzuviel, außer daß eben der Zyklus bei q2 nun i Mal durchlaufen wird. 111 Das Pumping Lemma kann man verwenden, um nachzuweisen, daß eine bestimmte Sprache nicht regulär ist. Dazu ist die negierte Variante praktisch: 9.5.5 Folgerung. Sei L eine formale Spache L. Kann man zu jedem n ∈ N ein ein Wort z ∈ L mit |z| ≥ n konstruieren derart, daß für jede Zerlegung z = uvw mit • |v| ≥ 1; • |uv| ≤ n; ein i gefunden werden kann, sodaß uv i w 6∈ L, dann ist L nicht regulär. 9.6 Grammatiken 9.6.1 Definition. Eine Grammatik G = (T, N, S, P) besteht aus • einem Alphabet Σ von Terminalzeichen; • einem Alphabet N von Nicht-Terminalzeichen; • einem Startsymbol S ∈ N ; • einer Menge von Produktionsregeln der Form l ⇒ r, mit l ∈ (N ∪ Σ)∗ \ Σ∗ und r ∈ (N ∪ Σ)∗ . 9.6.2 Definition. Sei G = (Σ, N, S, P) eine Grammatik, und u, w ∈ (N ∪ Σ)∗ . Dann ist w aus u ableitbar (Schreibweise: u _ w) wenn es Zerlegungen u = ale und w = are gibt, sodaß l ⇒ r eine Produktionsregel der Grammatik ist. Wie üblich, bezeichnet weiters _∗ die reflexiv-transitive Hülle von _. 9.6.3 Definition. Die von einer Grammatik G = (Σ, N, S, P) erzeugte Sprache ist definiert durch L(G) = {u ∈ Σ∗ | S _∗ u}. ¡ ¢ 9.6.4 Beispiel. Gegeben sie die Sprache G1 = {a, b}, {S}, S, P , wobei P aus folgenden Produktionen bestehe: S ⇒ ², S ⇒ SS, S ⇒ aSb, S ⇒ bSa. 112 Dann ist bespielsweise abba ein Wort der durch diese Grammatik erzeugten Sprache, denn es ist folgendermaßen aus S ableitbar: S ⇒ SS _ aSbS _ aSbbSa _∗ abba. Tatsächlich gilt: L(G1 ) = {w ∈ {a, b}∗ | #a (w) = #b (w)}. Begründung: einerseits ist klar, daß keine Produktionsregel die Bedingung #a (w) = #b (w) ändert, und umgekehrt läßt sich für jedes Wort, welches diese Bedingung erfüllt, eine Ableitung konstruieren. Sei z.B. w = avb, und gelte #a (w) = #b (w). Dann gilt auch #a (v) = #b (v), und daher (mit Induktion nach der Länge von w) S _∗ v. Mit S ⇒ aSb folgt dann S _∗ w. Ist eine Sprache durch eine Grammatik definiert, so können alle Wörter der Sprache effektiv aufgezählt werden. Ein passendes Programm muß nur, ausgehend vom Startsymbol, systematisch alle Möglichkeiten, Produktionsregeln anzuwenden, durchgehen, und alle dabei gefundenen Wörter von T ∗ ausgeben. Ein Test, ob ein gegebenes Wort w ∈ Σ∗ zu der Sprache gehört, ist damit allerdings nicht möglich. Im positiven Fall läßt sich dies zwar feststellen (weil es irgendwann einmal in der Aufzählung vorkommt), aber im negativen Fall muß man mitunter unendlich lange warten (Semientscheidungsverfahren). In vielen Fällen kann man sich auf gewisse Typen von Produktionsregeln beschränken. Die bekannteste Klassifizierung der Grammatiken is die ChomskyHierarchie. 9.6.5 Definition. Eine Grammatik (G = (Σ, N, S, P) heißt rechtslinear, falls alle Produktionsregel die Form A⇒x oder A ⇒ xB haben, mit A, B ∈ N , x ∈ (N ∪ Σ)∗ . Analog definiert man linkslineare Grammatiken (mit A ⇒ Bx statt A ⇒ xB). 9.6.6 Theorem. Eine Sprache läßt sich genau dann durch eine rechtslineare Grammatik definieren, wenn sie regulär ist. Beweis. Wir können uns auf den Fall beschränken, daß alle Produktionsregeln der Form A ⇒ xB ein x der Länge 1 verwenden (was gegebenenfalls durch Einführung zusätzlicher Nichtterminalsymbole erzwungen werden kann). Sei G = (Σ, N, S, P) eine rechtslineare Grammatik. Wir konstruieren eine Automaten, der L(G) erkennt: Als Eingabemenge ist natürlich Σ zu wählen. Als Zustandsmenge verwenden wir N ∪ {²}, wobei ² 6∈ Σ ∪ N . Startzustand ist S, der einzige Finalzustand ist ². Ein Zustandsübergang von einem Zustand A in einen Zustand B ∈ N sei dann bei der Eingabe α genau dann möglich, wenn A ⇒ αB in G ist. Ferner sei ein Zustandsübergang von einem Zustand A in den Zustand ² bei der Eingabe α genau dann möglich, wenn A ⇒ α in G ist. Umgekehrt kann man (auf dieselbe Weise) jedem Automaten eine rechtslineare Sprache zuordnen. 113 9.6.7 Satz. Eine Sprache L läßt sich genau dann durch eine linkslineare Grammatik definieren wenn ihre Spiegelung Lr durch eine rechtslineare Grammatik definierbar ist. Man beachte, daß die Klasse der regulären Sprachen unter Spiegelung abgeschlossen ist. Damit ergibt sich sofort: 9.6.8 Folgerung. Eine Sprache ist genau dann durch eine linkslineare Grammatik definierbar wenn sie durch eine rechtslineare Grammatik definierbar ist. 9.7 Kontexfreie Sprachen 9.7.1 Definition. Eine Grammatik G = (Σ, N, S, P) heißt kontextfrei, falls alle Produktionsregel die Form A⇒r haben, mit A ∈ N , r ∈ (N ∪ Σ)∗ . Eine Sprache heißt kontextfrei wenn sie durch eine kontextfreie Grammatik definiert werden kann. Wird eine Sprache durch eine nicht-kontextfreie Grammatik definiert, so heißt dies noch lange nicht, daß sie nicht kontextfrei ist: es könnte ja eine andere, kontextfreie, Grammatik geben, welche dieselbe Sprache erzeugt. 9.7.2 Satz. Jede reguläre Sprache ist kontextfrei. Beweis. Alle Produktionsregeln, die in einer rechtslinearen Grammatik erlaubt sind, sind auch in einer kontextfreien Grammatik erlaubt. 9.7.3 Satz. Zu jeder Ableitung in einer kontextfreien Grammatik gibt es einen Ableitungsbaum (auch: Syntaxbaum). 9.7.4 Beispiel. Ableitungsbaum. 9.7.5 Definition. Eine Grammatik heißt eindeutig, wenn es zu jedem Wort der dadurch definierten Sprache genau einen Ableitungsbaum gibt. 9.7.6 Definition. Ein Kellerautomat ist ähnlich wie ein normaler (endlicher) Automat, kann aber zusätzlich auf einen Kellerspeicher (Stack, Stapel) zugreifen. Das heißt die Zustandsüberführung darf zusätzlich vom obersten Zeichen im Kellerspeicher abhängen, und sie darf auch, als Nebeneffekt, ein Zeichen im Kellerspeicher ablegen oder davon entfernen. Ein Kellerautomat erkennt ein Eingabewort, wenn er sich nach dessen Abarbeitung in einem Finalzustand befindet und der Keller leer ist. 9.7.7 Satz. Kellerautomaten erkennen genau die kontextfreien Sprachen. 9.7.8 Beispiel. Kellerautomat zu kontextfreier Grammatik. Um nachzuweisen, daß eine Sprache nicht kontextfrei ist, genügt es natürlich nicht, wenn sie durch eine nicht-kontextfreie Grammtik gegeben ist. Man kann zu diesem Zweck wieder ein Pumping Lemma verwenden. 9.7.9 Theorem. Für jede kontextfreie Sprache ist entscheidbar, ob sie 114 • ein bestimmtes Wort enthält; • leer ist; • endlich ist. Nicht entscheibar dagegen ist, ob zwei kontextfreie Sprachen gleich sind oder ob die eine die andere enthält. 9.7.10 Theorem. Die Klasse der kontextfreien Sprachen ist abgeschlossen gegenüber Verkettung, Iteration und Vereinigung, nicht aber gegenüber Komplement und Durchschnitt. 9.7.11 Lemma (Pumping Lemma). Zu jeder kontextfreien Spache L gibt es eine Zahl n ∈ N, sodaß jedes Wort z ∈ L mit |z| > n derart in z = uvwxy zerlegt werden kann, daß gilt: • |vx| > 0; • |vwx| ≤ n; • uv i wxi y ∈ L, für alle i ∈ N. 9.7.12 Beispiel. Die Sprache L = {an bn cn | n ≥ 0} ist nicht kontextfrei. Für jedes n ∈ N wählen wir z = an bn cn , welches offensichtlich in L liegt und |z| > 0 erfüllt. Sei nun eine Zerlegung z = uvwxy gegeben, welche |vx| > 0 und |vwx| ≤ n erfüllt. Die erste Bedingung ergibt, daß v und x nicht beide leer sein können, und aus der zweiten erhalten wir, daß in vwx nicht alle drei Buchstaben vorkommen können. Wir müssen dann ein i finden, sodaß uv i wxi y 6∈ L. Wir wählen i = 2. Tatsächlich kommt der Buchstabe, der in vwx nicht vorkommt, in uv 2 wx2 y genauso oft vor wie in uvwxy, was aber für zumindest einen der anderen Buchstaben nicht zutrifft. Daher ist uv 2 wx2 y 6∈ L, woraus folgt, daß L nicht kontextfrei sein kann, weil das Pumping Lemma verletzt ist. 9.8 Kontextsensitive Sprachen 9.8.1 Definition. Eine Grammatik G = (Σ, N, S, P) heißt kontextsensitiv, falls alle Produktionsregel die Form uAv ⇒ urv haben, mit A ∈ N , r, u, v ∈ (N ∪ Σ)∗ , r 6= ². Eine Sprache heißt kontextsensitiv wenn sie durch eine kontextsensitive Grammatik definiert werden kann. 115 Wird eine Sprache durch eine nicht-kontextsensitive Grammatik definiert, so heißt dies noch lange nicht, daß sie nicht kontextsensitiv ist: es könnte ja eine andere, kontextsensitive, Grammatik geben, welche dieselbe Sprache erzeugt. 9.8.2 Satz. Jede kontextfreie Sprache ist kontextsensitiv. Beweis. Die meisten Produktionsregeln, die in einer kontextfreien Grammatik erlaubt sind, sind auch in einer kontextsensitiven Grammatik erlaubt. Ausnahme: Regeln der Form A ⇒ ². Es läßt sich aber zeigen (nicht ganz so leicht), daß man auf derartige Regeln verzichten kann. Es läßt sich sogar zeigen, daß jede monotone Grammatik (bei allen Regeln ist die rechte Seite leer oder länger als die linke) eine kontextsensitive Sprache beschreibt. Eine linear beschränkte Turingmaschine ist eine Turingmaschine (bzw. Rechenmaschine, Computer), die mit einem Hilfsspeicher auskommt, dessen Größe durch eine konstantes Vielfaches der Länge des Eingabewortes beschränkt werden kann. 9.8.3 Theorem. Eine Sprache ist genau dann kontextsensitiv, wenn sie durch eine linear beschränkte Turingmaschine erkannt wird. 9.8.4 Theorem. Für jede kontextsensitive Sprache ist entscheidbar, ob sie ein bestimmtes Wort enthält, nicht aber ob sie leer oder endlich ist. Nicht entscheibar ist auch, ob zwei kontextsensitive Sprachen gleich sind oder ob die eine die andere enthält. 9.8.5 Theorem. Die Klasse der kontextsensitiven Sprachen ist abgeschlossen gegenüber Verkettung, Iteration sowie allen boolschen Mengenoperationen. Im Vergleich zu den kontextfreien Sprachen gewinnen wir damit wieder alle Abgeschlossenheitseigenschaften (wie bei den regulären Sprachen) zurück, müssen dafür aber zwei Entscheidbarkeitseigenschaften opfern, nicht aber die wichtigste. 9.9 Turingmaschine Ein Automat hat außer einer endlichen Mengen von Zuständen Zugriff auf ein Eingabeband, welches sequentiell gelesen wird, und, wenn es ein Vollautomat ist, auf ein Ausgabeband, welches sequentiell beschrieben wird. Es ist nicht möglich, diese Bänder als Hilfsspeicher zu verwenden. Da der interne Speicher eines Automaten daher stets endlich ist, kann er nur reguläre Sprachen erkennen. Eine Verallgemeinerung stellen die Kellerautomaten dar, welche zusätzlich auf einen Kellerspeicher zugreifen können, und daher auch kontextfreie Sprachen erkennen können. Eine deutliche Verallgemeinerung ergibt sich, wenn das Eingabeband auch beschrieben und beliebig hin- und herbewegt werden kann. Man nennt dies dann eine Turingmaschine. Sie entspricht in etwa dem, wie man auch auf Papier mit Bleistift und Radiergummi mit Symbolen hantiert, d.h. rechnet. Das Band der Turingmaschine ist theoretisch unendlich lange; in endlicher Zeit kann aber nur ein endlicher Teil davon beschrieben werden. Dies entspricht einem unerschöpflichen Vorrat an Schmierpapier. 116 Der Folgezustand einer Turingmaschine ergibt sich aus dem momentanen Zustand und dem Zeichen an der aktuellen Leseposition des Bandes. Bei jeder Zustandsänderung wird darüberhinaus ein geeignetes Zeichen auf das Band geschrieben und dieses eventuell nach vor oder zurück bewegt. Gelegentlich ist es bequemer, auch mehrere Bänder zuzulassen. Außerdem gibt es auch bei den Turingmaschinen, so wie bei den Automaten, deterministische und nichtdeterministische Varianten. Eine deterministische Turingmaschine entspricht daher grob der Arbeitsweise eines gängigen Computers (mit beliebig erweiterbarem Speicher), während eine nicht-deterministische Turingmaschine einem Parallelrechner mit einem unbeschränkten Vorrat an Prozessoren entspricht. Die Turingmaschine wurde 1936 von Alan Turing eingeführt, um Berechenbarkeit und Entscheidbarkeit zu studieren. In der Folge wurde zahlreiche weitere Modelle für Rechenmaschinen entwickelt. Es stellte sich heraus, daß all diese Machinen dieselben Probleme bewältigen können, also gewissermaßen äquivalent sind. Man kann sich daher unter einer Turingmaschine genausogut ein Programm in einer gängigen Programmiersprache oder einen konkreten Computer vorstellen, oder auch einen Menschen, der mit Symbolen hantiert. Es liegt daher nahe, festzulegen, daß ein Problem genau dann berechenbar oder entscheidbar ist, wenn dies eine Turingmaschine zu leisten vermag. Diese Annahme heißt auch Churchsche These. 9.10 Rekursiv und Rekursiv aufzählbar Sei Σ ein endliches Alphabet. 9.10.1 Definition. Eine Funktion Σ∗ → Σ∗ heißt rekursiv, wenn sie durch eine Turingmaschine berechenbar ist. 9.10.2 Definition. Eine Teilmenge von Σ∗ (Sprache) heißt rekursiv, wenn ihre Indikatorfunktion rekursiv ist. Wenn eine Funktion von einer Turingmaschine berechnet wird, so bedeutet dies insbesondere, daß sie für jede mögliche Eingabe irgendwann einmal stehen bleibt (in einem finalen Zustand landet). Im allgemeinen kann es aber passieren, daß sie unentwegt fortläuft, ohne je ein Ergebnis zu liefern. 9.10.3 Definition. Eine Sprache A ⊆ Σ∗ heißt rekursiv aufzählbar falls sie von einer Turingmaschine erkannt wird, d.h. wenn es eine Turingmaschine gibt, welche genau dann irgendwann einmal stehen bleibt, wenn ein w ∈ A eingegeben wird. 9.10.4 Satz. Jede durch eine Grammatik definierte Sprache ist rekursiv aufzählbar. 9.10.5 Satz. Jede kontextsensitive Sprache ist rekursiv. 117 9.11 Abschlußeigenschaften Operation regulär kontextfrei kontextsensitiv rekursiv rekursiv aufzählbar ja ja ja ja ja ja ja ja nein nein ja ja ja ja ja ja ja ja ja ja ja ja ja ja nein Verkettung Iteration Vereinigung Durchschnitt Komplement 9.12 Entscheidbarkeitseigenschaften Problem regulär kontextfrei kontextsensitiv rekursiv rekursiv aufzählbar w∈L L=∅ L endlich L1 = L2 L1 ⊆ L2 ja ja ja ja ja ja ja ja nein nein ja nein nein nein nein ja nein nein nein nein nein nein nein nein nein 9.13 Berechenbarkeit Wir haben die logischen Operatoren (Konjunktion, Disjunktion, Implikation, Allquantor, Existenzquantor) mittels Introduktions- und Eliminationsregeln definiert. Ebenso ⊥, die Aussage, die stets falsch ist, und >, und ¬P steht als Abkürzung für P =⇒ ⊥. Dieses logische System heißt konstruktive (genauer: intuitionistische Logik). Ganz analog dazu haben wir Mengen, insbesondere die natürliche Zahlen, eingeführt. Wenn mittels dieser Regeln eine Funktion f : A → B definiert wird, so ist sichergestellt, daß zu jedem α ∈ A effektiv ein Term für f (x) angegeben werden kann. Durch Hinzunahme der Regel Tertium non datur, dem Prinzip vom ausgeschlossenen Dritten, ergibt sich die klassische Logik, welche der Großteil der mathematischen Literatur des 20. Jahrhunderts verwendet. Die klassische Logik ist irgendwie einfacher, denn sie hat nur 2 Wahrheitswerte, während die konstruktive Logik unendlich viele Wahrheitswerte unterscheidet, die nochdazu sehr kompliziert strukturiert sind. Außerdem gibt es in der klassischen Logik mehr Möglichkeiten, Sätze zu beweisen, und man kann damit auch Sätze beweisen, die konstruktiv nicht bewiesen werden könnten. Ein Nachteil der klassischen Logik ist dagegen, daß damit die Existenz von Funktionen bewiesen werden kann, die nicht einmal theoretisch berechnet werden können, also gar nicht funktionieren“. Dies ist insbesondere in der Compu” terwissenschaft recht lästig, da hier nur die berechenbaren Funktionen interessant sind, und zu deren Definition man Maschinenmodelle benötigt, von denen nicht unbedingt klar ist, ob damit wirkich der intuitive Begriff berechenbar erfaßt wird. Die Annahme, daß eine Funktion genau dann berechenbar ist, wenn sie auf einer Turing-Maschine berechenbar ist, heißt Church-Turing-These. Sie wird dadurch gerechtfertigt, daß die Funktionsweise heutiger Computer im wesentlichen 118 der Turingmachine entspricht, sowie, daß zahlreiche weitere Methoden, den Berechenbarkeitsbegriff festzulegen, dazu äquivalent sind rekursive Funktionen. Allerdings gibt es dabei auch Probleme: Einerseits ist der Begriff rekursiv einheitlich nur Funktionen von eimem Typ wie Σ∗ → Σ∗ oder N → N definiert, nicht aber z.B. für Funktionen vom komplizierterem Typ, wie R → R. Andererseits betrachten wir die Funktion p : N → N ( 0 falls es unendlich viele Primzahlzwillinge gibt p(n) = 1 falls es nur endlich viele Primzahlzwillinge gibt. Mittels Prinzip vom ausgeschlossenen Dritten erkennen wir sofort, daß diese Funktion konstant ist. Damit ist sie auch rekursiv. Andererseits weiß niemand, ob es unendlich viele Primzahlzwillinge gibt oder nicht. (Und wenn diese Frage doch irgendwann einmal geklärt werden sollte, nimmt man einfach irgendein anderes ungeklärtes Problem.) Daher haben wir keine Möglichkeit zur Verfügung, auch nur einen Funktionswert, etwa p(1), zu berechenen, nichteinmal, wenn uns beliebig viel Zeit und Speicherplatz zur Verfügung stünde. Schlimmer noch, es könnte sogar sein, daß die Frage, ob es unendlich viele Primzahlzwillinge gibt oder nicht, tatsächlich unentscheidbar ist (jedenfalls weiß man, daß es solche unentscheibare Aussagen über die natürlichen Zahlen gibt). Bis auf diese solche Fragen im Grenzbereich stimmen aber die rekursiven Funktionen mit denjenigen, deren Existenz konstruktiv bewiesen werden kann, überein, und beschreiben sehr gut den intuitiven Berechenbarkeitsbegriff. 9.14 Entscheidbarkeit Das Prinzip vom ausgeschlossenen Dritten liefert definitiv einen Widerspruch, wenn es eine Aussage P gibt, sodaß P ⇐⇒ ¬P, also eine Aussage, die genau dann wahr ist, wenn sie falsch ist. Tatsächlich läßt die deutsche Sprache derartige Aussagen zu, z.B.: P = Dieser Satz ist falsch“. ” Wenn P wahr ist, dann heißt das gerade, daß P falsch ist, und wenn P falsch ist, dann stimmt der Datz offensichtlich. Gilt nun das Prinzip vom ausgeschlossenen Dritten, so hat man damit einen Widerspruch, und damit ist jeder Satz sowohl wahr als auch falsch (ex falsum quodlibet), wodurch das ganze logische System sinnlos wird. Damit ist zuerst einmal klar, daß man bei natürlichen Sprachen die Regeln für klassische Logik nur mit Bedacht anwenden darf. Für formale Sprachen dagegen kann man derartige selbstbezügliche Sätze ausschließen. Sobald man allerdings die natürlichen Zahlen verwendet, hat man auch das Rekursionsprinzip, welches ja auch eine Art Selbstbezüglichkeit ausdrückt. Tatsächlich gelingt es einen Satz über die natürlichen Zahlen zu konstruieren, der dem obigen Satz P entspricht. Dies ist ein bemerkenswertes klassisches Resultat der Logik: 9.14.1 Theorem (Gödel’scher Unvollständigkeitssatz). Jedes formale logische System, welches ausdrucksstark genug ist, um darin die natürlichen 119 Zahlen zu beschreiben, ist entweder widersprüchlich oder beinhaltet unbeweisbare Sätze, von denen auch die Negation nicht beweisbar ist. Das Prinzip vom ausgeschlossenen Dritten läßt sich daher nur dadurch retten, daß man klar zwischen beweisbaren und wahren Sätzen unterscheidet. Dabei ergibt sich allerdings das praktische Problem, daß es unmöglich ist, die Klasse der wahren Sätze über die natürlichen Zahlen irgendwie formal zu definieren (sie sind nicht rekursiv aufzählbar). Für die Praxis relevant sind daher in jedem Fall nur die beweisbaren Sätze. Eine Variante dieses Satzes besagt, daß es unmöglich ist, die Konsistenz eines hinreichend komplexen logischen Systems zu beweisen. 9.15 Komplexitätsklassen Um die Komplexität von Algorithmen festzustellen, zählt man, wieviele Schritte dafür auf einer bestimmten Maschine (etwa einer Turingmaschine) notwendig sind Diese Zählung ist freilich sehr vom verwendeten Maschinenmodell ab und ist außerdem unnötig kompliziert. Meist versucht man, die Komplexität durch eine von der Länge des Inputs abhängige Funktion zu beschränken, wobei konstante Faktoren unberücksichtigt bleiben (O-Notation), womit, außer der Vereinfachung, auch eine gewisse Maschinenunabhängigkiet erreicht wird. Zu O-Notation: http://en.wikipedia.org/wiki/Big_O_notation 9.15.1 Definition. Ein Algorithmus ist polynomial, wenn es einen (fixen!) Exponenten k gibt, sodaß die Komplexität bei einem Input der Länge n durch O(nk ) beschränkt werden kann. 9.15.2 Beispiel. Die Addition von höchstens n-stelligen Binär- oder Dezimalzahlen ist (mit dem üblichen Algorithmus) durch O(n) beschränkt, also insbesondere polynomial (mit k = 1, er ist daher sogar linear ). Der übliche Algorithmus für die Multiplikation benötigt O(n2 ) Schritte, ist also ebenfalls polynomial, aber nicht linear. (Es gibt aber auch schnellere Algorithmen, die sich bei sehr großen Zahlen auszahlen; der Rekord liegt derzeit bei O(n log n log log n), was nur geringfügig mehr als linear ist). 9.15.3 Definition. • Ein Problem ist in der Klasse P, wenn es mit einer deterministischen Turingmaschine in polynomialer Zeit berechnet werden kann. • Ein Problem ist in der Klasse NP, wenn es auf einer nicht-deterministischen Turingmaschine in polynomialer Zeit berechnet werden kann. Oder: wenn dessen Lösung mit einer deterministischen Turingmaschine in polynomialer Zeit überprüft werden kann. • Ein Problem ist in der Klasse EXPSPACE, wenn es mit einer Turingmaschine mit einem höchstens exponentiell ansteigenden Speicher (wieder abhängig von der Länge des Inputs) gelöst werden kann. • Ein Problem heißt primitiv rekursiv (Klasse PR), wenn sie mit primitiver Rekursion (das heißt vereinfacht: nur mit for-Schleifen, aber ohne whileSchleifen) gelöst werden kann. 120 • Ein Problem ist rekursiv (mit while-Schleifen, aber terminierend) wird mit R bezeichnet. • Die Klasse RE besteht aus den Problemen, für die eine Turingmaschine in endlicher Zeit JA sagen kann, aber statt der Antwort NEIN möglicherweise nie terminiert. Natürlich gibt es dazwischen noch mehrere Abstufungen und Verfeinerungen, vgl. etwa http://en.wikipedia.org/wiki/List_of_complexity_classes, oder noch genauer http://qwiki.caltech.edu/wiki/Complexity_Zoo. 9.15.4 Satz. Es gilt: P ⊆ N P ⊂ EXPSPACE ⊂ P R ⊂ R ⊂ RE Es ist ein bekanntes offenes Problem, ob P = N P gilt. 9.15.5 Definition. Ein Problem ist NP-vollständig (NP-complete) wenn es in der Klasse NP ist und jedes andere NP-Problem in polynomialer Zeit darauf zurückgeführt werden kann. 9.15.6 Beispiel. Die üblichen arithmetischen Operationen, insbesondere das Lösen von linearen Gleichungssymstem und linearen (nicht-diskreten) Optimierungsproblemen), sowie die einfacheren“ graphentheoretischen Probleme (Eu” lerscher Weg, kürzester Weg, maximaler Durchfluß, Planarität, 2-Färbbarkeit) sind in der Klasse P . Auch das Erkennen kontexfreier Sprachen ist in der Klasse P . Viele diskrete Optimierungsaufgaben und Suchprobleme sind in der N P -vollständig, z.B. Graphen-Isomorphie, Hamiltonscher Weg in einem Graphen, TravellingSalesman-Problem, 3-Färbbarkeit. Das Lösen von algebraischen Gleichungssystemen über den rationalen Zahlen ist in EXPSPACE. Die Preßburger Arithmetik (eine Theorie der natürlichen Zahlen ohne Rekursion) oder die Theorie der formal rellen Körper (eine Theorie der reellen Zahlen ohne Grenzwerte) sind noch schwieriger, lassen sich mit primitiver Rekursion entscheiden. Die Ackermann-Funktion ist rekursiv, aber nicht primitiv rekursiv. Die Klasse der (in einem formalen System) beweisbaren Sätze ist rekursiv aufzählbar, aber im allgemeinen nicht rekursiv. Ebenso die Menge der pariell rekursiven Funktionen, oder die Menge der rekursiv aufzählbaren Probleme. Die Menge der wahren Sätze über die natürlichen Zahlen ist nicht rekursiv aufzählbar, ebenso wie die Menge der rekursiven Funktionen oder der Probleme der Klasse R. 121