Informatik I, Seite 1 EINFÜHRUNG IN DIE INFORMATIK I (Script zur Vorlesung vom 8.11.95, 76021 Brauer) Zu Beginn der Vorlesung wurde folgende studienbegleitende Literatur empfohlen: - Goos, Informatik I, Springer-Verlag, - als Ergänzung: Broy, Informatik I, II . Dann folgte eine Übersicht über den Stoff, der in Informatik I behandelt wird: 1. Konzepte und Denkweisen der Informatik 1.1 Informatik: Was ist - was war - was wird? 1.2 Rechnen und Argumentieren als Textverarbeitung 1.3 Grundbegriffe (Goos, Kap. 1) 2. Formalismen (Goos, Kap. 2, 3, 4) 3. Funktionales Programmieren (Goos, Kap. 5, 6, 7) (verwendete Programmiersprache: Standard ML) I. Was ist Informatik? Hierzu einige Stichworte: - eine neuartige Wissenschaft - Informatik ist Kooperationspartnerin für jede andere Wissenschaft und jede andere Sparte praktischer Tätigkeit - nicht nur geistige Durchdringung des Problems (wie zB. in der Philosophie), sondern auch praktische Machbarkeit ist relevant - einerseits geisteswissenschaftliche Züge, andererseits ingenieurwissenschaftliche Aspekte - oftmals wird die Bedeutung der Informatik unterschätzt (da sie nicht so offen in ihren Produkten erkennbar ist). Der Denkansatz der Informatik ist es, Aspekte intelligenten Verhaltens von Lebewesen formal zu modellieren. Beispiele für Intelligenzaspekte sind: - Zahlenrechnen - Logisches Schlußfolgern - Suchen, Sortieren - Formelmanipulation - Analyse, Übersetzung formaler Sprachen - Adaption - Reagieren - Lernen - Klassifikation - Gestalterkennung - Aufmerksamkeitssteuerung - Szenenanalyse /- interpretation - Sprachverstehen - Diagnostizieren - Konfigurieren - Planen - Handeln - Reflektieren / Nachdenken. Klassisch wird die Informatik als Computerwissenschaft aufgefaßt: Informatik = Information + Automatik. Eine moderne Auffassung ist: Informatik = Intelligenzformalisierungstechnik. Informatik I, Seite 2 Zu den Aufgaben der Informatik gehört es, Wissen - zu gewinnen, - (wiederauffindbar) zu speichern, - zu verarbeiten, - anzuwenden (Intelligenz erfordernde Aufgaben zu erledigen). Ein Informatiksystem ist die technische Realisierung eines formalen Modells. Von der Realität zum formalen Modell: Dieser Übergang findet nicht durch Abstraktion (die das Detail als unwichtig impliziert), sondern durch Reduktion (= Zurückführen einer Sache (der Realität) auf eine ganz andere Sache (die formale Beschreibung eines Informatiksystems)) statt. Formale Modelle sind bestimmt durch - die zu modellierenden Realitätsaspekte, - die theoretischen Möglichkeiten und Grenzen für formale Beschreibungen, - die Eigenschaften der zu konstruierenden Informatiksysteme. II. Entwicklung der Informatik Die Informatik hat sich in verschiedenen Stufen entwickelt: 1. Pionierzeit (30er Jahre): - Turing-Zuse-Paradigma: Die rechnende Hilfskraft - Schlagwort: Datenverarbeitung - Computer simuliert den einzelnen Menschen als Rechnenden - Computernutzung: Formelauswertung - "Leerer" Computer: Eingabe: 1. Programme (Maschinencode), 2. Daten Tätigkeit: Berechnung einer Funktion Ausgabe: Daten. 2. Aufbau der Informatik (70er Jahre): - Erweitertes Turing-Zuse-Paradigma - Schlagwort: Informationsverarbeitung - Computer(system) - als Teil einer Organisation - simuliert: Hierarchie von Informationsverarbeitern - Computernutzung: Informatiksystem. - "Nichtleerer" Computer: Eingabe: 1. Programm in höherer Sprache, 2. Daten Tätigkeit: verschiedene Interpretationen der Eingabe, Berechnung einer Funktion: (1) Programm → Programm, (2) Daten → Daten Ausgabe: 1. Programme, 2. Daten. Informatik I, Seite 3 Parallel zum Wandel in Fragen der Unternehmensführung (Teams, Gruppen statt strenger Hierarchie) änderte sich auch die Auffassung in der Informatik. 3. Auffassungsänderung (Ende der 80er Jahre): - Neues Paradigma (Petri, Dijkstra, Hewitt, Milner, Minsky) - Gruppe: autonome, intelligent miteinander kommunizierende Akteure (Individuen) in Interaktion mit ihrer Umwelt. - Schlagwort: Wissensverarbeitung (Repräsentationstransformation) - Computernutzung: Verteiltes, nebenläufiges, reaktives System (aus Menschen, Computern, Maschinen, ...) in Interaktion mit anderen Systemen - Nebenläufigkeit: Unabhängigkeit, Einschränken durch Organisation wegen (a) Konkurrenz (traditionelle Informatik), (b) Kooperation (KI) - Computerinhalt: strukturierte Ansammlung von Daten, Verfahren zur Interpretation und Verarbeitung von Daten, Verhaltensregeln für Kommunikation - Computertätigkeit: reagieren auf Anfragen, steuern und regeln, lernen Informatik I, Seite 4 EINFÜHRUNG IN DIE INFORMATIK I (Script zur Vorlesung vom 9.11.95, 76021 Brauer) Die Konsequenzen des neuen Paradigmas (sh. Vorlesung vom 8.11.95) sind: • Der Computer ist nicht nur ein Werkzeug, sondern auch ein Medium für Kommunikation (Petri) und "Partner" beim Problemlösen (KI). (Assistenzcomputer) • Die Notwendigkeit, sich grundsätzlich und in jedem Einzelfall zu überlegen: Welche Rolle spielen Mensch und Computer im System? • Es wird ein ganzheitlicher Ansatz für die Systemplanung nötig (Einbindung in die (Arbeits-) Welt, Prozeß- statt Produktverarbeitung (Qualitätskontrolle). • Der Verzicht auf zentrale Steuerung (Zwang) und hierarchische Organisation (Unterordnung) zugunsten von Kooperation und Selbstorganisation mit dezentraler Entscheidungsfindung mittels Kommunikation. • Bessere Anwendbarkeit • Neue Sicht alten Informatikwissens • Umfassender Begriff der Informatik • Änderung von Ausbildungskonzepten. III. Ursprünge der Denkansätze der Informatik Die Informatik hat eine wesentlich breitere Grundlage als die Elektrotechnik oder die Mathematik. Sie ist nicht bloß eine "formale Computerwissenschaft", sondern hat auch Einflüße aus den Bio- und Humanwissenschaften. Biologie: • Allgemeine Systemtheorie, Kybernetik: System, Information, Rückkopplung, laterale Inhibition, Selbstorganisation • Neuroinformatik: Neuron, Neuronales Netz, Neuronales Lernen • Naturanalyse, Optimierungsverfahren: Gene, Mutation, Selektion, Evolution • Artifical Life, Comp. Ethology, bottom up AI, Verhaltensbasierte Robotik: Sensomotorische Instruktion, Signalverarbeitung, funktionale Module Beispiele von Wissenschaftlern: Kybernetik: Wiener, Neuro.: McCulloch / Pitts, Evolut.: Rechenberg, Holland. Informatik I, Seite 5 Humanwissenschaften: • Kognitionswissenschaften, KI/Kerninformatik: Symbolverarbeitung, Freges Kompositionsprinzip, Wissensrepresentationsformalismen • Konnektionismus: Vernetztes System von Prozessoren, Eingabeabh. Strukturveränderungen, Lernverfahren • Artifical Life, Kognitive Robotik: Sensomotorische Interaktion, Modulare Struktur IV. Philosophische Überlegungen Der traditionellen Grundvorstellung zufolge besteht ein enger Zusammenhang zwischen Denken und Symbolverarbeitung (Fregesches Kompositionsprinzip), siehe Wittgenstein I (Tractatus): logischer Aufbau der Welt. Diese steht im Gegensatz zu zB. Heideggers Ansicht. V. Zur Weiterentwicklung der Informatik (siehe WorldWideWeb) 1.2 Rechnen und formales Argumentieren (Denken) als Textverarbeitung 1.2.1 Informelle Begründung Das Denken als Textverabeitung zu betrachten, ist unter anderem deshalb sinnvoll, da die Produkte des Denkens, also zB. Sprache, Logik, Mathematik, als Texte darstellbar sind. Zugrunde liegt dem Text ein Alphabet (Menge von Zeichen). Die Zeichenfolgen sollen linear auf Karopapier geschrieben werden (ein Karo pro Zeichen), außerdem soll es Bleistift und Radiergummi geben. Das elementare Alphabet ist: 0 = leeres Kästchen, 1 = Kästchen markiert (zB. Darstellung komplexer Zahlen als Muster aus leeren und markierten Karos). Beispiel: Die natürlichen Zahlen N = { 0, 1, 2, ... } Darstellung von n ∈ N durch unäre Darstellung u(n): Aktionen: • Ein Karo betrachten, ob leer oder markiert • Karo markieren (1 statt 0 schreiben) • Markierung entfernen (0 statt 1 schreiben • Karo nicht verändern • Zum linken Nachbarkaro gehen (oder eine konstante Anzahl von Kästchen nach links) • Zum rechten Nachbarkaro gehen (oder eine konstante Anzahl von Kästchen nach rechts) Rechenoperation: Nachfolgerbestimmung Der Nachfolger von n ∈ N ist n + 1: Informatik I, Seite 6 EINFÜHRUNG IN DIE INFORMATIK I (Script zu den Vorlesungen vom 15. und 16.11.95, 76021 Brauer) Beispiel 1: Nachfolgerfunktion Sei u(n) die in der Vorlesung vom 9.11.'95 beschriebene unäre Darstellung einer natürlichen Zahl, s(n) die Nachfolgerfunktion mit s(n) = n + 1. Eingabe (Argument): u(n) Ausgabe(Fkts.-wert): u(s(n)) = u(n + 1) Verfahren zur Berechnung: Eine 1 hinzufügen. Im Prinzip ist es durch die Nachfolgerfunktion möglich, die gesamte Mathematik der natürlichen Zahlen auf der Ebene der unären Darstellung zu beschreiben (auch wenn die unäre Darstellung zweifellos nicht die effizienteste Repräsentation der natürlichen Zahlen ist). Die Addition n + m kann natürlich auch auf die Nachfolgerfunktion zurückgeführt werden, allerdings ist eine "trickreiche" Berechnung effizienter, wenn dies vielleicht auch auf Kosten der Klarheit des Berechnungsverfahren geht: Gegeben: Verfahren: Den Zwischenraum markieren und links eine 1 entfernen. Ergebnis: Eine andere Kodierung als die unäre ist zB. die Braille-Schrift (zweidimensional). Außerdem werden Kodierungen oft mit Zusatzeigenschaften ausgestattet (Verschlüsselung, Paritätsbit, siehe Goos). Beispiel 2: Logik Logische Aussagen sind entweder wahr oder falscch. Logische Operatoren sind zB. "und", "oder", "nicht", "Wenn ..., dann ...". Beispiel: "Wenn es regnet, dann ist die Straße naß." (Gegebene Regel) Feststellung: "Es regnet." (Eingabe) Folgerung: "Die Straße ist naß." (Ergebnis) Modus ponens: "Wenn A, dann B." A B Logik kann also als Textverarbeitung gesehen werden. Erster Versuch einer Modellbildung "Maschinelle" Textverarbeitung mit Hilfe von Akteuren (Teams). Akteure: Spezialisiert auf einzelne Aktionen. T: if Karo leer then rufe x else rufe y. M: ersetze 0 durch 1. N: ändere nichts E: ersetze 1 durch 0 Informatik I, Seite 7 Feststellung: ( T, M, E, N) - Akteure als Teams können jede beliebige Zeichenfolge ( 0/1-Folge) in jede beliebige andere umformen; d.h. alle Textverarbeitungsaufgaben lösen (Instruktionen für Team). Zur Vereinfachung sollen im folgenden nur sequentielle Aktionen (im Gegensatz zu parallelen) betrachtet werden. Benötigt werden folgende Festlegungen: (1) Es muß ein aktuelles Karo ausgezeichnet werden: . Nur das aktuelle Karo wird bearbeitet. Beim Start ist das erste Karo links von der Eingabe das aktuelle Karo. (2) Kooperation: Akteure erhalten Namen (Nummern 1, 2, ...). Zur Bewegung auf dem Karo Papier werden neue Akteure eingeführt: MR: Wie M, dann wird rechts benachbartes Karo aktuell. ML: Wie M, dann wird links benachbartes Karo aktuell. NR, NL, ER, EL analog. S: Stop. Beispiel 3: Eingabe: Ausgabe: Instruktionsfolge: T1: T( NRT2 , NLS ) T2: T( NLS , ERT3 ) T3: T( MRT4 , NLS ) T4: T( MRT5 , NLS ) T5: T( NLS , ERT6 ) T6: T( NLS , NRS ) Beispiel 4: Team für s(n) Eingabe: Instruktionsfolge: T1: T( MLS, NRS) Beispiel 5: Addition Eingabe: Instruktionsfolge: T1: T( NRT1 , ERT2 ) T2: T( MLT3 , NRT2 ) T3: T( NRT4 , NLT3 ) T4: T( NRS , NLS ) Annahme: Das Karoband ist beliebig um leere Karos verlängerbar. Informatik I, Seite 8 Definition: Eine Funktion f: N → N heißt berechenbar (Team-berechenbar), wenn ein Team von Akteuren existiert, das in umformt und stoppt für jedes n ∈ N. 1.2.2 Busy-Beaver-Spiel ( T. Rado 1960 ) Beim Busy-Beaver-Spiel starten die Teams auf einem leeren Band, schreiben 1'en, und stoppen dann nach endlich vielen Schritten. Beispiel 1: Folgendes Team aus 2 Akteuren schreibt drei 1'en: T1: T ( MRT2 , NLS ) T2: T ( MLT2 , NLT1 ) Beispiel 2: Dieses Team aus 3 Akteuren schreibt sechs 1'en: T1: T( MRT2 , NLT3 ) T2: T( MRT3 , NRS ) T3: T( MLT1 , ELT2 ) Wettbewerb der Kategorie n (∈ ∈ N) Zu n ist ein Team aus n Akteuren gesucht, das die Maximalzahl von 1'en auf das leere Band schreibt. Behauptung: (1) Für n = 2 ist Bsp. 1 kein Sieger, (2) Für n = 3 ist Bsp. 2 ein Sieger. Der Wettbewerb definiert eine Funktion R : N → N. R ( n ) = Maximalzahl von 1'en, die n Akteure auf ein leeres Band schreiben und (nach endlich vielen Schritten) stoppen können. Bemerkung: R ( n ) ist wohldefiniert für jedes n, eine Vorschrift zur Berechnung lautet: 2n (a) Man stelle alle Akteurteams aus n Akteuren zusammen,d.h. [3⋅ 2 ⋅ ( n + 1)] Teams. (b) Man lasse alle Teams arbeiten. Wenn sie fertig sind, stelle man die Zahl der 1'en fest, die das Maximum bilden. Tabelle bisher bekannter Werte der Rado-Funktion: n 0 R(n) 0 1 1 2 4 3 6 4 5 6 13 ≥ 4098 ≥ 95524079 Für n ≥ 5 ist die Rado-Funktion noch nicht berechnet, nur untere Grenzen sind bekannt. Zur Berechnung der unteren Grenze von R ( 5 ) wurden 11 Millionen Schritte gebraucht, für die Berechnung der unteren Grenze von R ( 6 ) 8⋅ 1015 Schritte. Informatik I, Seite 9 Eigenschaften von R Feststellung: R ist streng monoton wachsend: R (n + 1) > R (n), n ∈ N. Beweis: Im Team für R (n) ersetzt man S durch Tn+1 und fügt Tn+1: T ( MRS, NRTn+1 ) an. Das so konstruierte Team besteht dann aus (n + 1) Akteuren und macht genau einen Strich mehr als das Team für R (n), also R (n + 1) ≥ R (n) + 1 ⇒ R (n + 1) > R (n). Theorem: R ist nicht berechenbar. Beweis: (1) Vorüberlegung: Aus 2 Teams kann durch Hintereinanderschreiben von t Modifikationen ein neues Team gebildet werden: Team G T1 T2 T3 ... Tn Team F T1 T2 T3 ... Tm Team G • F T1 ... Tn Tn+1 ... Tn+m Im neuen Team G • F sind die Akteure T1 bis Tn wie in G definiert, nur das S stets durch Tn+1 ersetzt ist. Die Akteure Tn+1 bis Tn+m sind wie die Ti in F definiert, wobei aber für Ti: T (...Tj, ...Tk) folgende Änderungen vorgenommen werden: i → i + n , j → j + n , k → k + n. Wenn G die Funktion g berechnet, F die Funktion f, dann berechnet G • F die Funktion f ( g ( )). (2) Teams bilden: (a) B4: T1: T( MLT2 , ELT3 ) T2: T( MRT1 , NLT1 ) T3: T( NLS, NLT4 ) T4: T( MRT4 , ERT2 ) B4 schreibt 12 Einsen auf das leere Band: (b) B4 • B4 •⋅ ⋅⋅ ⋅⋅ ⋅ •B4 = ( B4 ) schreibt 12 m Einsen. m Stück m (c) B'4 entsteht aus B4 durch Ändern von T3. Hier: T3: T( NRS, ... ), dadurch erfolgt der Stop direkt links neben den Einsen. ( ) n−1 • B' 4 , n ∈ Ν (d) D n = B 4 Dn hat 4 n Akteure und schreibt 12 n Einsen. Informatik I, Seite 10 (3) Indirekter Beweis: Angenommen, die Behauptung ist falsch. Dann ist R (n) berechenbar für jedes n ∈ N; d.h. es existiert ein Team TR von k Akteuren mit Nun wird Dn • TR betrachtet. Dieses Team schreibt R (12n) Einsen auf das leere Band und hat 4n+k Akteure. Also kann es im Wettbewerb der Kategorie 4n+k mitmachen, wo es sicher nicht besser ist als der Sieger. Es gilt also: (I) R (4n+k) ≥ R (12n). Da k eine feste Zahl ist, existiert ein n0 mit 12n0 ≥ 4n0+k, also gilt wegen der Monotonie von R: (II) R (12n0 ) < R (4n0+k). Aus (I) und (II) folgt: R (4n0+k) ≥ R (12n0 ) > R (4n0+k), Widerspruch! Also ist die Annahme falsch, das Theorem bewiesen. Nachdenken: (1) Berechenbarkeitsbegriff ist richtig. (2) Busy-Beaver-Funktion: In der Def. steckt das sog. "Halteproblem" (Frage, ob für eine Berechnungsvorschrift feststellbar ist, ob sie zu Halt führt). Folgerung: Das Halteproblem für Teams von Akteuren ist nicht entscheidbar. Folgerung: R wächst schneller als jede berechenbare Funktion, d.h. es existiert zu jeder berechenbaren Funktion f eine natürliche Zahl nf mit R (n) > f (n) für n > nf. Informatik I, Seite 11 EINFÜHRUNG IN DIE INFORMATIK I (Script zu den Vorlesungen vom 22.11.95 und 23.11.95, 76021 Brauer) Bisher wurden sog. Teams von Akteuren betrachtet. Diese Teams sind in der Literatur unter dem Namen Turingmaschinen bekannt ( A. M. Turing 1936). Dabei ist ein Team für eine Aufgabe zuständig, die Berechnung eines Funktionswertes. Im folgenden jedoch sollen Formeln ausgewertet werden: "4 + 5" → "9" "4 ⋅ 5" → "20" "5 ⋅ ( x + 2 ) − 7 = 13" → "x = 2" 1.2.3 Wortverarbeitende Kalküle Beispiel 1: Lösen von Gleichungen Die Zahlen im Beispiel sollen unär dargestellt werden. ((( 5u ⋅ ( x + 2u )) − 7u ) = 13u ( 5u ⋅ ( x + 2u )) = ( 13u + 7u ) ( F1 − F2 ) = F3 F1 = ( F3 + F2 ) Allgemeine Regeln Prämisse Konklusion ( 5u ⋅ ( x + 2u )) = ( 13u + 7u ) ( 5u ⋅ ( x + 2u )) = 13u 7u F1 = ( F2 + F3 ) F1 = F2 F3 Prämisse Konklusion Beispiel 2: Addition unärer Zahlen 111+11 → +11111 Regel: 1+ +1 Allgemeine Struktur von Regeln: α1 , α2 , .... , αn β β Prämissen Konklusion prämissenfreie Regel Der Kalkül: - Zeichen - die zulässige endliche Menge von Regeln - Vorschrift über die Anwendung der Regeln - keine Anwendungsreihenfolge ( "nichtdeterminiert (nichtdeterministisch)" ) Definition: Sei ein Alphabet A (endliche (geordnete) Menge von Zeichen) gegeben. Eine beliebige Folge von Zeichen aus A, d.h. a1 a2 .... an mit ai ∈ A, i = 1, ... , n, n ∈ N ( ≥ 0 ), heißt Wort über A der Länge n. Für n = 0 haben wir das sog. leere Wort ε. Bezeichnungen: | w | = Länge von w, |ε | = 0 A* = { w | w ist Wort über A } A+ = A* \ {ε } Informatik I, Seite 12 Auf A* ist die Verknüpfungsrelation Konkatenation (Hintereinanderschreiben, Verkettung) folgendermaßen definiert: w, v ∈ A* mit w = a1... an , v = b1... bm , dann ist w v = w . v = a1... an b1... bm. Für die Konkatenation gilt: 1) | w v | = | w | + | v | für alle w, v aus A* 2) w ε = ε w = w für alle w aus A*. Definition: u ∈ A* heißt Teilwort von w ∈ A*, wenn w = v1 u v2, wobei v1, v2 ∈ A*. u heißt Anfangswort von w, wenn v1 = ε. u heißt Endwort von w, wenn v2 = ε. Definition: Kanonischer Post-Kalkül ( E. Post, 1936 ) : 2 Alphabete: A Zeichenalphabet, V Variablenalphabet, A ∩ V = ∅. Endlich (normalerweise) viele Regeln der Form w1 Z1 w2 Z2 ......... wn Zn wn+1 w'1 Z'1 w'2 Z'2 ......... w'm Z'm w'm+1 mit wi , w'k ∈ A* und { Z'1, Z'2, ..... , Z'm } ⊆ { Z1, Z2, ..... , Zn } ⊆ V. Beispiel 3: (siehe Beispiel 1) w1 = ( , w2 = − , w3 = )= , w4 = ε , w'1 = ε , w'2 = =( , w'3 = + , w'4 = ) , Zi = Z'i = Fi , i = 1, 2, 3 Beispiel 4: Addition unärer Zahlen Z1 1 + Z2 Z1 + 1 Z2 Beispiel 5: aZ bZ a Zab Zc Daraus läßt sich ableiten: a ⇒ a b ⇒ b a b ⇒ a b a. Definition: Ein Semi-Thue-System (STS) (Axel Thue, 1914 ), ist ein normaler Post-K. mit Regeln der Gestalt : Z1 u Z2 Z1 v Z2 Dadurch wird u durch v ersetzt, während der Kontext unverändert bleibt. Andere Schreibweise für die Regeln eines STS sind: u → v oder ( u , v ). Beispiel 4 stellt ein STS mit 1+ → +1 dar. Beispiel 6: STS: +→ε A={+,1} Dieses STS liefert die Addition unärer Zahlen: 11+111 ⇒ 11111. Informatik I, Seite 13 Dabei ist zu beachten, daß nun keine Karos mehr betrachtet werden, sondern einfach über A* gearbeitet wird! Es gilt: Jeder wortverarbeitende Kalkül ( z.B. Kanon. Post-Kalkül ) läßt sich effektiv durch STS ( mit Hilfszeichen ) simulieren. Beispiel 7: Alphabet: A = { a , b } , Regel: a b → ε. Welche Worte w ∈ A* können zu ε reduziert werden ? Beispiele für Reduzierungen: aababb ⇒ aabb ⇒ ab ⇒ ε und aabbaa ⇒ abaa ⇒ ε. Setzt man a = Klammer auf = "( " und b = Klammer zu = ")", so erkennt man, daß die Regel nichts anderes tut, als korrekte Klammerpaare aus dem Wort zu streichen, d.h. es werden alle korrekten Klammerausdrücke zu ε reduziert. Die Menge der durch obiges STS reduzierten wohlgeformten Klammerausdrücke heißen: Dyck-Sprache über A. Genauere Beschreibung von STS: Metaregeln für die Anwendung der STS-Regeln: u→ v 1) Prüfe, ob u im Wort w vorkommt. Wenn ja, dann heißt u → v anwendbar auf w. 2) Wenn u → v anwendbar ist, wähle beliebiges Vorkommen von u in w (1. Grund für Nichtdeterminismus), etwa w = s u t. Ersetze dies durch v, was w ' = s v t ergibt. Schreibweise: w ⇒ w '. ⇒ D. h. die Regel: u → v definiert die Relation R (ableitbar) auf A*. 3) Wenn mehrere Regeln gegeben sind, ist freigestellt, welche man anwendet (2. Grund für Nichtdeterminismus). Definition: Iterierte Anwendung von Regeln: "Allgemeine Ableitungsrelation" Gegeben: STS : ℑ = ( A, ℜ ) ( mit ℜ als Regelmenge und A als Alphabet). Für w, w ' ∈ A* gilt w ⇒* w ' genau dann, wenn w = w ' ( Null Regelanwendungen) oder w = w1 ⇒ w2 ⇒ ..... ⇒ wn+1 = w ', wobei n ≥ 0, wi ∈ A*, die Regeln natürlich aus ℜ . STS definieren auf verschiedene Weise Teilmengen von A* (formale Sprachen). I.A. wählt man ein festes s ∈ A* • Erzeugung: { w ∈ A* | s ⇒* w } • Reduzierung: { w ∈ A* | w ⇒* s }. Um die Erzeugungskapazität von STS zu erhöhen, nimmt man zum eigentlichen Alphabet A noch ein Hilfsalphabet N von Nichtterminalen (Variablen, Hilfszeichen) hinzu. Die Elemente von A heißen dann Terminale. Ein solchermaßen erweitertes STS wird beschrieben durch ein Quadrupel: STS: ℑ = ( A , N, ℜ , S ) , wobei S aus N ist und Startsymbol genannt wird. Die Sprache von ℑ ( von ℑ erzeugte Sprache) ist: L ( ℑ )= { w ∈ A* | S ⇒* w, wobei nur zur Ableitung nur Regeln aus ℜ benutzt werden } = { v ∈ (A ∪ N )* | S ⇒* v } ∩ A*. Das Arbeitsalphabet von ℑ, über dem die Regeln definiert sind, ist A ∪ N. D.h. für (u → v) ∈ ℜ ist u, v ∈ ( A ∪ N )*. Informatik I, Seite 14 Beispiel 8: ℑ = ( { a , b} , { S }, ℜ , S ) mit ℜ = { ( S → aSb) , ( S → SS ), ( S → ε ) }. Dann gilt: S ⇒* ab, da S ⇒ aSb ⇒ aSSb ⇒ aaSbSb ⇒ aabSb ⇒ aababb. Im obigen Beispiel wird die linke Seite einfach ersetzt, was in folgender Definition aufgegriffen wird: Definition: Ein verallgemeinertes STS (mit Nichtterminalen) G = ( A, N, P, S ) mit S ∈ N heißt kontextfreie Grammatik, wenn gilt: wenn u → v aus P , so ist u ∈ N. Definition: Ein Markov-Algorithmus ( A.A.M, 1948 ) ist ein verallgemeinertes STS, bei dem 1) die Regeln numeriert sind: "i : u → v ", 2) gewisse Regeln als haltend ausgezeichnet sind: "→." . Metaregeln für die Benutzung eines M.A. Gegeben: ein Wort w. • Wähle Regel mit kleinster Nummer, die auf w anwendbar ist: i : u → v. • Ersetze das erste Vorkommen von u in w von links aus durch v. • Ist die Regel haltend, so hält der Algorithmus. Andernfalls beginne von vorne ( wende auf w ' (w ⇒1 w ' ) den Alg. an ). Informatik I, Seite 15 EINFÜHRUNG IN DIE INFORMATIK I (Script zu den Vorlesungen vom 29.11.95 und 30.11.95, 76021 Brauer) Satz: Die kontextfreie Grammatik G mit den Regeln [1] S → aSb [2] S → SS [3] S → ab erzeugt genau die Worte aus { a, b}+, die durch das STS mit der Regel ab → ε auf ε reduziert werden. Beweis: (1) Behauptung: Wenn w ein von G erzeugtes Wort ist, dann ist w auch auf ε reduzierbar. Beobachtung: Die Reihenfolge der Regelanwendungen ist beliebig. Beweis: Sei w gegeben mit S ⇒* w und w ≠ ε. Es wird die Länge |w| betrachtet: |w| = 1: unmöglich. |w| = 2: S ⇒ w = ab, w ist also reduzierbar. |w| > 2: Betrachte den letzten Schritt der Ableitung: S ⇒* uSv ⇒ uabv = w. Suche Ableitung für uv = w': Wie entstand das S in uSv ? Zwei Fälle sind möglich: 1) Durch Regel [1]: S ⇒* u'Sv' ⇒ u'aSbv' mit u'a = u und bv' = v. Dann gilt auch: S ⇒* u'Sv' ⇒ u'abv' = uv = w'. 2) Durch Regel [2]: S ⇒* xSy ⇒ xSSy ⇒* uSv. O.E.d.A. : "Das rechte S ist das letzte.": y ⇒* v, xS ⇒* u mit S ⇒* z, xz ⇒* u. Dann gilt auch: S ⇒* xSy ⇒* xzy ⇒* uy ⇒* uv = w'. Also: Ist w ableitbar, dann ist w reduzierbar auf w' = uv und w' ist wieder ableitbar und kürzer als w. Auf w' obiges anwenden usw.: Fertig! (2) Behauptung: Wenn w auf ε reduzierbar ist, dann existiert eine Ableitung S ⇒* w. Beobachtung: Reihenfolge der Reduktionsschritte ist beliebig, also ganz links reduzieren! Beweis: Ableitungsfolge aus umgekehrter Reduktionsfolge konstruieren: |w| betrachten: |w| = 1: unmöglich |w| = 2: w = ab, S ⇒ ab. |w| = 3: unmöglich |w| = 4: (i) w = aabb, S ⇒ aSb ⇒ aabb, (ii) w = abab, S ⇒ SS ⇒ abS ⇒ abab. Annahme: Behauptung ist bewiesen für alle Wörte mit Länge ≤ m, m gerade. Es wird also nun w betrachtet mit |w| = m+2: Reduziere w: w = uabv mit u = ak, k ≥ 0 (wg. Reihenfolge) . uv ist reduzierbar, da w reduzierbar ist, uv ist aber auch ableitbar (lt. Annahme!). Dann sind wiederum zwei Fälle zu unterscheiden: 1) v = bv' : S ⇒* u'Sv' ⇒ u'abv' = uv. Dann gilt: S ⇒* u'Sv' ⇒ u'aSbv' ⇒ u'aabbv' = uabv = w. 2) v = av' : Dann existiert eine Zerlegung v' = zz' mit S ⇒* uSz' ⇒* uazz' = uv, S ⇒* az. Dann gilt: S ⇒* uSz' ⇒ uSSz' ⇒ uabSz' ⇒ uabazz', d.h. S ⇒* uabv = w. Informatik I, Seite 16 Beispiel für einen Markov-Algorithmus: A = {a, b}, N = {X, Y, Z} 1: aaY → aYa 2: abY → bYa 3: baY → aYb 4: bbY → bYb 5: Xa → aYaX 6: Xb → bYbX 7: Y → z 8: Z →ε 9: X →. ε 10: ε →X aba ⇒ Xaba ⇒ aYaXba ⇒ aYabYbXa ⇒ aYbYabXa ⇒ aYbYabaYaX ⇒ aYbYaaYbaX ⇒ aYbYaYabaX ⇒ aZbZaZabaX ⇒ abaabaX ⇒ abaaba. Feststellung: Der MA berechnet d: A* → A* mit w → ww. Bemerkung: Die Funktion kann von einem MA nicht ohne Hilfszeichen berechnet werden. Feststellung: Die Teams von Akteuren sind durch einen MA simulierbar. A = {0, 1}, N = { T1, T2, T3, ... , Tn } Dabei wird durch uTixv ersetzt. Startregel des MA: Schlußregel des MA: ε → T10 S →. ε , (S bedeutet stop) Die Teams werden durch Regelgruppen ersetzt, zB.: Ti: T( MRX, ELY ) mit X, Y ∈ { Tj, Tk, S } wird ersetzt durch Ti00 → 1X0 Ti01 → 1X1 Ti0 → 1X0 0Ti1 → Y00 1Ti1 → Y10 Ti1 → Y00 . Die Schlußregel muß ganz nach vorne. Satz: Jede ( Team-) berechenbare Funktion ist MA-berechenbar. Beweis: siehe oben und Zusammensetzen von MA'en M1 • M2 : Erst M1, dann M2 anwenden. Regeln von M1 • M2: S →. ε : Schlußregel M1' : Regeln von M1, ohne Startregel, S durch Tn+1 ersetzen M2' : Regeln von M2, ohne Schlußregel, Ti durch Ti+n ersetzen. ε →T10 : Startregel Informatik I, Seite 17 Die so konstruierten MA sind spezielle MA: In jeder Regel gibt es nur 1 Hilfszeichen, Weberschiffchen- (Shuttle-) Algorithmus. (1) Jeder MA ist durch Shuttle-MA simulierbar. (2) Jede berechenbare Funktion ist Shuttle-berechenbar. (3) Busy-Beaver-Funktion ist nicht MA-berechenbar. (4) Es gibt keinen Kalkül / Algorithmus, der von einem beliebigen Verfahren (Kalkül / Algorithmus) feststellt, ob er angesetzt auf ein Wort je hält. Bemerkung: Ein Busy-Beaver-Team als Wort über: V = { 0, 1, ( , ), /, : , M, N, E, L, R, S} Ti: T (ABTj , CDTk ) wird zu T1...1: T(ABT1...1 / CDT1...1) i Einsen j Einsen k Einsen. Definiere eine formale Sprache LBBH ⊆ V*: LBBH sei die Menge aller Worte aus V*, die Darstellungen von BB-Teams sind, die halten (nach einem Start auf leerem Band). Satz: Die Frage, ob für w ∈ V* gilt w ∈ LBBH , ist nicht entscheidbar. (wenn w ∈ V* nicht in LBBH ist, kann ich ewig warten...) Aber es gilt: LBBH ist effektiv erzeugbar: Man erzeuge die BB-Team-Worte (lexikographisch geordnet) und simuliere parallel jedes BB-Team. Zusammenfassung: Alphabet A, Worte über A: A* Funktionen f: A* → A*, diese können "partiell" sein, d.h. nicht überall definiert. f: D → A* (mit D ⊆ A) heißt berechenbar, wenn ein Kalkül existiert, der zu d ∈ D stets f (d) bestimmt (in endlicher Zeit). U ⊆ A* heißt aufzählbar (berechenbar), wenn ein Kalkül existiert, und ein w ∈ A* mit w ⇒* u (oder u ⇒* w) für jedes u ∈ U (LBBH ist aufzählbar). U ⊆ A* heißt entscheidbar, wenn ein Kalkül existiert und w1, w0 ∈ A* mit u ⇒* w1 (und w0 nicht aus u ableitbar) für alle u ∈ U und mit u ⇒* w0 für alle u ∈ A*\U (und w1 nicht aus u ableitbar). Feststellung: U ⊆ A* entscheidbar g.d.w. U und A*\U aufzählbar. U ⊆ A* entscheidbar g.d.w. die sog. charakteristische Fkt. von U chU: A* → {0, 1} mit w → 1, wenn w ∈ U, sonst w → 0, berechenbar ist. Es gibt aufzählbare, nicht entscheidbare Sprachen (L BBH). Ist f: A* → A* berechenbar (total), dann ist f(A*) aufzählbar. Informatik I, Seite 18 EINFÜHRUNG IN DIE INFORMATIK I (Script zur Vorlesung vom 6.12.95, 76021 Brauer) Zusammenfassung: Alle "vernünftigen", "allgemeinen" Begriffe von Kalkül / Algorithmus sind gleichwertig. "Berechenbar","entscheidbar","aufzählbar" sind allgemein. Un-Berechenbarkeit, Un-.... bleibt Un-..... 1.3 Chomsky-Grammatiken und formale Sprachen 1.3.1 Allgemeine Konzepte Trivialgrammatik des Deutschen: Der Grammatik läßt sich auch so formulieren: S → SG SA SG → ArNo SA → PrOb Ar → der | die | das usw. Definition: Eine Phrasenstrukturgrammatik (Chomsky-Grammatik) ist ein VSTS (verallgemeinertes STS): G = ( Σ, N, P, S ), Σ ∩ N = ∅. P : Menge der Produktionen (Regeln, endlich viele), V = Σ ∪ N, S∈N L ( G ) = { w ∈ Σ* | S ⇒* w } : die von G erzeugte Sprache. Informatik I, Seite 19 Produktionen, Grammatiken und Sprachen werden in Typen eingeteilt: Produktionen: Typ 0 Ch-0: u → w , u, v ∈ V Typ 1 Ch-1: uAv → urv , r ≠ ε ; kontextsensitiv Typ 2 Ch-2: A → u , u ∈ V* ; kontextfrei Typ 3 Ch-3: A → uB, u Σ*, B ∈ N ; rechtslinear (regulär) Grammatik vom Typ i: Alle Produktionen vom Typ k ≥ i ; mindestens eine vom Typ i. Sprache vom Typ i: Wenn eine Grammatik vom Typ i für die Sprache existiert. Bemerkung: Eine durch eine Gr. vom Typ i gegebene Sprache kann vom Typ k+i ( k≥1) sein. Beispiele: AB → Ab, A → a, B → b, S → AS, S → B (Typ 1) aber: S ⇒* A...AS ⇒ A...AB ⇒ A...Ab ⇒* a...ab , einfacher ist also: S → aS | b (Typ 3). Satz: Die Chomsky-Sprachklassen bilden eine echte Hierarchie, d.h. für i = 0,1,2 existiert eine Sprache Li vom Typ i, die nicht vom Typ i+1 ist. Zum Beispiel: L2 = { anbn | n ≥ 1 } ist kontextfrei, L1 = { anbncn | n ≥ 1 } ist kontextsensitiv, L0 = LBBH ist aufzählbar, aber nicht entscheidbar, also nicht kontextsensitiv, denn: Kontextsensitive Sprachen sind entscheidbar, denn S ⇒* u ⇒* v für G vom Typ 1 impliziert |u| < |v|. Entscheidungsverfahren: Gegeben: G vom Typ i, w ∈ Σ* Verfahren: Versuche alle Ableitungen S ⇒* v mit |v| ≤ |w| (es sind ja endlich viele). Entweder kommt w vor oder nicht. Eine Grammatik für L1 ist: S → abc | aAbc , Ab → bA , Ac → Bbcc , bB → Bb , aB → aaA, aB →aa . 1.3.2 Kontextfreie Grammatiken und Sprachen Typische kontextfreie Sprachen sind: Dycksprache, Formeln der Arithmetik (arithmetische Ausdrücke). < ar. Ausdruck > ::= < ar. Ausdruck > + < ar. Ausdruck > | < ar. Ausdruck > * < ar. Ausdruck > | ( < ar. Ausdruck > ) | x S → S + S | S * S | ( S ) | x , dabei entspricht → dem ::= und < ... > den Nichtterminalen. Informatik I, Seite 20 Die Syntaxdiagramme sind eine graphische Darstellung für kontextfreie Grammatiken: Sei ein vollständiges Team von Produktionen für A ∈ N gegeben, so daß keine andere Produktion mit A links existiert: A → u1 | u2 | ... | un . Das zugehörige Diagramm ist: bedeutet : für u = vav' (a ∈ Σ ), für u = vBv' ( B ∈ N ). Beispiel: x + x * ( x + x ) wird in einem Baum analysiert: Informatik I, Seite 21 Kapitel 2 2.1 Halbgruppen und Monoide Definition: Sei H eine Menge, • eine zweistellige Verknüpfung auf H: h • h' ∈ H für alle h, h' aus H. Es gelte das Assoziativgesetz a • ( b • c ) = ( a • b ) • c für alle a, b, c aus H. Dann heißt ( H , • ) Halbgruppe. Informatik I, Seite 22 EINFÜHRUNG IN DIE INFORMATIK I (Script zu den Vorlesungen vom 13.12.95 und 14.12.95, 76021 Brauer) (im folgenden wird noch einmal an Kapitel 1 angeschlossen) Syntaxanalyse: Finden aller (allerwesentlich verschiedenen) Ableitungen eines Wortes (Satzes, Programms). In natürlichen Sprachen gibt es zahlreiche Mehrdeutigkeiten: Prinzipielle Verfahren zur Syntaxanalyse Testen, ob w ∈L(G), w ∈∑* 1. Erzeugung: Versuche Ableitung "Top-Down" zu finden. Start mit S, dann werden die Regeln angewendet: S ⇒ w1 ⇒ .... ⇒ wn ≈ w , wobei durch ≈ angedeutet werden soll, daß während der Anwendung der Regeln auf das Ergebnis geschaut wird. Während der Ableitung kann man in Sackgassen gelangen, dann wird Rücksetzen notwendig. 2. Reduktion Starte mit w, versuche die Produktionen "rückwärts" anzuwenden. v→u u→v Statt G jetzt R G anwenden, solange bis S erreicht ist. Auch hier Sackgassen, Rücksetzen. Kapitel 2: Halbgruppen und Relationen 2.1 Halbgruppen und Monoide Definition: Sei H eine Menge, Κ eine zweistellige Verknüpfung: K: H × H → H Es gelte das Assoziativgesetz a • ( b • c ) = ( a • b ) • c für alle a, b, c aus H. Dann heißt ( H , • ) Halbgruppe. Eine Halbgruppe heißt Monoid, wenn sie ein Einselement (neutrales Element) e besitzt mit e • h = h • e = h für alle h ∈ H. Feststellung: Eine Halbgruppe hat höchstens ein Einselement. Ein Monoid genau eines. Beweis: Indirekt, Annahme: Es existieren zwei verschiedene Einselemente e und e'. Widerspruch durch: e = e • e' = e'. Informatik I, Seite 23 Beispiele: 1. A sei eine Menge, dann ist A* Monoid mit ε als Einselement. Bem.: A* ist sogar ein freies Monoid, d.h. aus a1 • a2 • ..... • an = b1 • b2 • ..... • bm folgt n = m, ai = bi für i = 1, 2, ..., n. 2. ( N, ⋅ ) ist Monoid, 1 ist Einselement. ( N0, +) ist Monoid, 0 Einselement (neutrales Element). 3. 4. ( H, ⋅ ) Halbgruppe, P( H ) = Menge aller Teilmengen von H (Potenzmenge). Verknüpfung auf P(H) : Komplexprodukt: U • V = { u ⋅ v | u ∈ U, v ∈ V }, U, V ⊆ H. Dann ist ( P(H), • ) Halbgruppe. Sie ist nicht frei , denn ∅ • U = ∅. Ist ( H, ⋅ ) Monoid, dann auch ( P(H), • ) mit dem Einselement {e}. Definition: Sei ( H, ⋅ ) Halbgruppe, U ⊆ H. U heißt Unterhalbgruppe von ( H, ⋅ ), wenn U • U ⊆ U. U heißt Untermonoid, wenn H Monoid mit Einselement e und e ∈ U ist. E ⊆ H. Dann wird definiert: E1 := E, für i ∈ N: Ei+1 := Ei ⋅ E. Weiterhin: ∞ + i E = E = {e 1 ⋅ e 2 ....⋅e n | n ∈ Ν, e i ∈ E} U i=1 E+ ist die von E erzeugte (Unter-) Halbgruppe (von (H, ⋅ )), denn E+ • E+ ⊆ E+ und E+ ist die kleinste (bzgl. ⊆ ) Unterhalbgruppe U ⊆ H mit E ⊆ U. Ist ( H, ⋅ ) Monoid, e Einselement. Dann: E° := {e}, E* := E° ∪ E+ . E* ist das von E erzeugte Monoid. Beispiele: ( N, ⋅ ) = ( P*, ⋅ ) ( P = die Menge der Primzahlen ) ( N0, ⋅ ) = ({1}*, + ) Σ Alphabet, ( Σ*, • ) = ( Σ*, • ) Satz: E endlich, E ⊆ H, ( H, • ) Halbgruppe. Dann ist E* aufzählbar, wenn • effektiv berechenbar ist. Beweis: Bilde E1, E2, E3, ..... Informatik I, Seite 24 2.2 Relationen Definition: Seien M, N Mengen. Jede Teilmenge ζ ⊆ M × N heißt Relation (zweistellig). ζ = Menge von Paaren "Graph der Relation". Statt (x, y) ∈ ζ wird auch geschrieben: x ζ y. Beispiel: M Einwohner, N gemeldete Autos. ζ entspricht "besitzt". Definition: Umkehrrelation ζ -1 zu ζ (Inverse, Konverse, Transponierte): ζ-1 = { (y,x) | (x,y) ∈ ζ }. Ein häufiger Fall ist: M = N. Eigenschaften der Relation ζ ⊆ M × M: reflexiv: x ζ x für alle x ∈ M irreflexiv: für kein x gilt x ζ x symmetrisch: x ζ y impliziert y ζ x f.a. x, y ∈ M antisymmetrisch: aus x ζ y und y ζ x folgt stets x = y transitiv: x ζ y und y ζ z impliziert x ζ z f.a. x, y, z ∈ M Äquivalenzrelation (verallg. Gleichheit): Rel., die reflexiv, symmetrisch und transitiv ist. Feststellung: Die Äquivalenzrelation ζ definiert eine Zerlegung von M in Äquivalenzklassen [x]ζ = { y ∈ M | x ζ y } Gilt nicht a ζ b, dann [a]ζ ∩ [b]ζ = ∅ (wegen Transitivität). M= U [ x]ζ x∈M z ∈ [x]ζ impliziert [z]ζ = [x]ζ, also unabhängig vom Repräsentanten. partielle Ordnung: reflexive und transitive Relation Halbordnung: antisymmetrische Relation totale / lineare Ordnung: Halbordnung und für x, y ∈ M gilt stets x ζ y oder y ζ x. strenge Halbordnung: irreflexive Halbordnung Beispiele: M = N (ohne die 0): ζ: ≤ auf N (partiell), x ζ y: x teilt y (Halbordnung), ζ: < auf N (streng). Definition: Verknüpfung ( 2-stelliger) Relationen ζ ⊆ L × M, τ ⊆ M × N: ζ • τ = { (x, z) | x ∈ L , z ∈ N, es ex. y ∈ M mit (x, y) ∈ ζ, (y, z) ∈ τ }. Feststellung: Verknüpfung ist assoziativ. Also bilden Rel. auf M einen Monoid mit Einselement ∇ = { (x, x) | x ∈ M }. Bemerkung: 1. Relation ζ ⊆ M × N ist auffaßbar als Transformation ζ: M → N (oder Abb. M → P(N)) x → { y ∈ N | x ζ y } = ζ (x) 2. Ist | ζ(x) | = 1 für jedes x ∈ M, dann ist ζ Abb. (totale). 3. Ist | ζ(x) | ≤ 1, dann partielle Abb. Informatik I, Seite 25 Allgemeine Bemerkung: I.a. werden n-stellige Relationen ζ ⊆ M1 × M2 × .... × Mn betrachtet. relationale Datenbanken ≈ Ansammlungen von Relationen Operationen auf Relationen: ∪, \, ∩ (Mengenoperationen) Komponentenauswahlen (Selektion) ( , ↑, ..... , ↑, ..... ) Weglassen von Komponenten (Projektion) Zusammenkleben ( ..... () ...... ) Datendefinitionssprachen, Datenmanipulationssprachen (zB. SQL) arbeiten mit Relationen. 2.3 Graphen Definition: Sei E Menge (Ecken, Knoten). Dann heißt G = ( E, K ) mit K ⊆ E × E gerichteter Graph (Digraph) K heißt die Menge der Kanten. Graphische Darstellung: Ecke x: Kante (x, y) : x• x→y Beispiel: G = ( {a, b, c, d} , { (a, b), (a, c), (a, d), (b, c), (d, b), (d, c) } ) Bemerkung: Rel. ζ ⊆ E × E definiert Graph: Gζ = ( E, ζ ). Definition: ζ sei symmetrische Relation über E. Dann heißt (E, ζ ) ungerichteter Graph (kurz Graph). Statt (x, y) ∈ ζ und ( y, x ) ∈ ζ: { x, y }. Definition: (E, K) sei Digraph. Für E' ⊆ E und K' = { (x, y) ∈ K | x, y ∈ E' } ist G' = (E', K') der von E' erzeugte Teilgraph. Vollständigkeit eines Graphen bedeutet, daß zwischen je zwei Ecken x u. y (x ≠ y) eine Kante (x, y) existiert. Weg im Graph: Kantenfolge (e0, e1), (e1, e2 ), ....., (en-1, en), ei-1≠ ei, (ei-1, ei ) ∈ K; "von e0 nach en", Länge n. Ein Weg der Länge ≥ 1 heißt Kreis (Zyklus), wenn e0 = en. Beim ungerichteten Kreis heißt der Graph eulersch: Jede Kante des Graphen kommt genau einmal vor, hamiltonsch: Jede Ecke des Graphen kommt genau zweimal vor. Bemerkung: Eulersche Kreise finden ist leicht, hamiltonsche sehr schwer. Informatik I, Seite 26 Definition: Ein Graph heißt zusammenhängend, wenn "zwischen je zwei Ecken x, y ein Weg von x nach y oder von y nach x existiert". Ein gerichteter Graph ohne Kreise heißt azyklisch, ein ungerichteter Graph ohne Kreis kreislos oder Wald. Ein zusammenhängender, kreisloser, ungerichteter Graph heißt Baum. Satz: G sei ein ungerichteter Graph, n Ecken, m Kanten. Dann sind äquivalent: 1. G ist Baum. 2. Zwischen je 2 Ecken existiert genau ein Weg. 3. G zusammenhängend; durch Weglassen einer (bel.) Kante wird G unzusammenhängend. 4. G zusammenhängend und m = n - 1. 5. G kreislos: Hinzufügen einer Kante ergibt genau einen Kreis. Informatik I, Seite 27 EINFÜHRUNG IN DIE INFORMATIK I (Script zu den Vorlesungen vom 20.12.95 und 21.12.95, 76021 Brauer) Welche Repräsentation für Relationen und Graphen? G = { e1, e2, ... , en } , K = ( E, K ) Adjazensmatrix: n x n - Matrix A = (aik ) über { 0, 1 } mit aik = 1, wenn (ei ,ek ) ∈ K, sonst aik = 0 Zum Graphen aus der letzten Vorlesung entsteht also folgende Adjazensmatrix: a b c d 0 1 1 1 a 0 0 1 0 b 0 0 0 0 c 0 1 1 0 d A entspricht der charakteristischen Funktion von K ⊆ E×E. Adjazensliste: Jeder Ecke ei wird die Menge Ei = { es | (ei , es) ∈ K } zugeordnet. Diese wird als Liste dargestellt. A-Matrix von Φ•Γ: Normiertes Produkt der A-Matrizen von Φ und Γ ( normiert ≈ jedes k ≥ 1 durch 1 ersetzt) Φ ⊆ E×E sei Relation, transitive Hülle von Φ ist Φ+ im Monoid der Rel., reflexive Hülle transitive Hülle von Φ ist Φ* = ∆ ∪ Φ+ . (x, y) ∈ Φ g.d.w. ein Weg im Graphen von Φ von x nach y existiert. Satz: (1) Φ = Φ+ g.d.w. Φ transitiv (2) Φ = Φ* g.d.w. Φ transitiv und reflexiv (3) Φ = (Φ ∪ Φ-1) g.d.w. Φ Äquivalenzrelation (4) Floyd-Warshell: Φ Relation über E={ e1, e2, ... , en } Für k ≥ 2 sei Γ(k) = { (ei, es) | es ex. Weg (ei, x1), (x1, x2), ... , (xl-1, es), l ≤ k, xr ∈ { e1, e2, ... , en }, r = 1, 2, ..., l - 1}, ferner sei Γ(1) = Φ. Für k ≥ 1 gilt: Γ(k) = Γ(k-1) ∪ { (ei, es) | ei Γ(k-1) el und el Γ(k-1) es } Es ist: Φ+ = Γ(n), für reflexives Φ ist Φ* = Φ+ ∪ ∆. Beweis (von (4)): (a) Φ+ ⊆ Φn-1 , weil Φn ⊆ Φn-1, denn Kantenfolge der Länge n im Graph ( E, Φ ) geht über n+1 Ecken - nicht alle können verschieden sein. Also Kantenf. verkürzbar (Zyklus weglassen) ergibt Kantenf. mit Länge ≤ n-1. (b) Beweis von (*) mit vollständiger Induktion über k. Γ(n) = Φn-1 (c) Anmerkung: (4) kann auch als Algorithmus zur Bestimmung der kürzesten Wege dienen. Informatik I, Seite 28 2.4 Ordnungsrelationen a) b) c) d) Φ azyklische Relation (d.h. mit azyklischem Graph) auf U, definiert eine Halbordnung ≤ auf U: a ≤ b g.d.w. a Φ* b., definiert eine strenge Halbordnung < auf U: a < b g.d.w. a Φ+ b. Halbordnung ≤ liefert eine azyklische Relation Φ durch a Φ b g.d.w. a ≠ b und a ≤ b. Φ ist die zu ≤ gehörige strenge Halbordnung. Menge U mit HO ≤ (bzw. strenge HO < ), dann heißt (U, < ) streng halbgeordnete Menge. Seien Φ, Γ azyklische Relationen. Wenn Φ+ = Γ+ , so definieren beide die gleiche strenge HO. Feststellung: Φ ⊆ Γ ⊆ Φ+ impliziert: Φ+ = Γ+. Beweis: Φ•Φ ⊆ Õà ⊆ Φ+•Φ+=Φ+, usw. (Iteration): + Φ(n) ⊆ Γ(n) ⊆ Φ+ für alle n, also n n + + Φ = UΦ ⊆ U Γ = Γ ⊆ Φ n . n Definition: Gegeben eine Relation Γ. Der Graph G(Φ) der kleinsten (im Teilmengensinne) Relation Φ mit Φ ⊆ Γ ⊆ Φ+ = Γ+ heißt Hasse-Diagramm zu Γ. G(Φ) ist Teilgraph von G( Γ ) , der dieselbe strenge HO wie Γ definiert und minimal ist. Bemerkung: Das Hasse-Diagramm existiert nicht immer. Satz: Sei (U, Γ ) eine endliche streng halbgeordnete Menge. Dann definiert Γ − Γ2 das Hasse-Diagramm zu Γ. Beweis: Benutze (Γ − Γ2)+ = Γ+. e) ( U, ≤ ) HO, T ⊆ U t ∈ T heißt minimales Element von T, wenn t' ≤ t ⇒ t' = t gilt. Definition: (U, ≤ ) heißt fundiert, wenn jede nichtleere Teilmenge von U ein minimales Element besitzt. Relation Φ Graph * Φ : "ausführlich", "minimal", "Hasse-Diagramm" Matrizen / Listen Verwendung: Verwendung: Verwendung: Rechnen mit Beziehungen Suchen, Wandern Algorithmen für Rechner Satz: Sei ( U, ≤ ) HO. Dann sind äquivalent: (i) U ist fundiert ( ii ) Es existiert keine unendliche absteigende Kette .... u2 < u1 < u0 . ( iii ) Jede absteigende Kette ... u2 ≤ u1 ≤ u0 ist endliche. Anmerkung: ( ii ), ( iii ) beschreiben eine noethersche HO. Informatik I, Seite 29 Beweis: ( ii ) ist äquivalent zu ( iii ), klar. ( i ) impliziert ( iii ) ( iii ) impliziert ( i ): Annahme: ≤ ist nicht fundiert, d.h. es existiert T ⊆ U, ∅ ≠ T, T ohne minimales Element. Da ti nicht minimales Element, muss es ti+1 geben mit ti+1 < ti , konstruiere unendliche absteigende Kette .... < t2 < t1 < t0 ∈ T, Widerspruch! Bemerkung: Lexikographische Ordnung von A*: absteigend geordnetes Alphabet a < b, a, b ∈ A. ε ≤ x , x ∈ A* w = uv, dann u ≤ w xay < xby' , xy, y' ∈ A*, a,b ∈ A, a < b Die Lex. O. ist nicht noethersch im Sinne von Goos. Die inverse Ordnung ist nicht fundiert: a < aa < aaa < ... < an < ... < b , falls a < b. Auf Am ist die Ordnung noethersch und artinsch. Theorem: (Noethersche Induktion, fundierte Induktion) (*) Sei ( U, ≤ ) fundierte HO, < die zu ≤ gehörige str. HO. Aussage: P(x) ist für alle x ∈ U wahr, g.d.w. für jedes y ∈ U gezeigt werden kann: "Ist P(z) wahr für alle z < y, so ist auch P(y) wahr" (und für alle minimalen Elemente u ∈ U ist P(u) wahr ). Beweis: Sei Up = { x ∈ U | P(x) wahr }, M = U \ Up M ≠ 0, wg. Fundiertheit existiert ein minimales Element m ∈ M. Ist nun P(m) falsch, aber ist für alle z < m P(z) wahr, so gibt es genau zwei Möglichkeiten a) m ist auch minimales Element in U, d.h. es existiert kein z mit z < m. Dann muß nach (*) P(m) gelten, Widerspruch! b) m ist kein minimales Element, d.h. es existiert z mit z < m, also ist P(m) wegen (*) wahr. Bemerkung: U = N (natürliche Zahlen), ≤ ergibt vollständige Induktion. Folgerung: Sei Φ azyklische Relation, Φ* fundiert, (in der Vorlesung war unklar, ob auch V(y) = { z ∈ U | y Φ z } endlich für jedes y ∈ U gefordert werden muß). Φ heiße lokal endlich, wenn für jedes x ∈ U DiNf(x) = { y ∈ U | y Φ x } endlich ist. Φ heiße global endlich, wenn für jedes x ∈ U Nf(x) = { y ∈ U | y Φ* x } endlich ist. Dann gilt: Φ* global endlich, wenn Φ lokal endlich. Beweis: Noethersche Induktioin anwenden auf ( U, Φ* ) P(x) ≈ "Nf(x) ist endlich" Sei z minimal in U, d.h. Nf(z) = {z}, stimmt. Sei y ∈ U, y nicht minimal: Nf(y) = {y} ∪ { q | q ∈ Nf(z), z Φ y }(ist endlich, da lokal endlich). Jetzt (*) anwenden: Wenn alle Nf(z) endlich, ist Nf(y) endlich. Also: Nf(x) ist stets endlich. Informatik I, Seite 30 Anwenden auf Bäume: T Baum, wähle beliebige Ecke t0. t0 ist die Wurzel. Nachfolger von t0 (Sohn, Kind, Tochter) ist jede Ecke t mit (t0, t) ∈ K. Nachfolger einer Ecke t, die Nachfolger einer Ecke t' ist: jedes t'' ≠ t' mit (t', t) ∈ K. strenge HO auf Baum T: t < t', wenn t direkter Nachfolger von t' ist. Dann ist T gerichteter Graph ("Knoten" statt "Ecken",ein Knoten ohne Nachfolger heißt Blatt). Spezialfall obiger Folgerung für Bäume (Lemma von König): T sei Baum mit (a) es existiert kein unendlich langer Weg (Ast) in T (b) Von jedem Knoten sind nur endlich viele Knoten zu erreichen. Dann ist T endlich. Beweis: " Nf (t0) endlich" ist zu zeigen: d.h. globale Endlichkeit. Einige Vergnüglichkeiten über Weihnachten :-) STS: 0011 → 111000 Frage: Ist jede Ableitung w ∈ { 0, 1}* endlich? (Zantema) Time flies like an arrow. Fruit flies like a banana. (Groucha Marx) Informatik I, Seite 31 EINFÜHRUNG IN DIE INFORMATIK I (Script zu den Vorlesungen vom 10.1.96 und 11.1.96, 76021 Brauer) Anmerkung zum Script vom 20.12.95, Folgerung aus der Noetherschen Induktion: V(y) endlich ist als Forderung überflüssig !! Rückblick auf das letzte Jahr: A. Was ist Informatik / Wie arbeiten Informatiker/-innen ? Verantwortung / Ethik in der Informatik: Studentenpfarrer Probst wird am 18.1 und 15.2 noch Vorlesungen zu diesem Thema halten. B. Beschreiben von Systemen und dem Verhalten von Systemen. Text → Textverarbeitung: STS C. Gegenstände und ihre Beziehungen: Verküpfungen (Monoide), Relationen, Funktionen, Ordnungen D. Behandeln komplizierter Gegenstände, Systeme - Analysieren: Zerlegen, Reduzieren, Top-Down - Konstruieren: Erzeugen, Zusammensetzen, Bottom-Up • • • • sequentiell / parallel / nebenläufig deterministisch / nichtdeterministisch (Beschreibungsebene) Korrektheit: - nichts läuft falsch (safety) - es gibt tatsächlich Resultate (terminiert, lebendig) direkte Beweise - Induktion: über den natürlichen Zahlen, strukturelle, noethersche - logische Schlußketten Kapitel 3: Algebren und Termalgebren Es besteht ein grundsätzlicher Unterschied zwischen a) einer Formel und dem Ergebnis der Auswertung der Formel b) der Spezifikation und der Realisierung Formeln: Sei A eine Menge, n ∈ N0 : eine Abbildung f: An → A heißt n-stellige Operation auf A. Σ ist die Menge aller Operationen auf A und heißt Signatur. Σ = Σ(0) ∪ Σ(1) ∪ Σ(2) .... , wobei Σ(i) die Menge der i-stelligen Operationen in Σ ist. (A, Σ ) ist eine Struktur, die Objekte/Gegenstände und die zulässigen Operationen auf diesen Objekten zusammenfasst. Ist f ∈Σ(0), dann ist f ein Operator ohne Argumente, also eine Konstante. I.a. ist Σ(0) ≠ ∅ und aufzählbar. Sei nun Σ Signatur, X die Menge aller möglichen Argumente/Elementaroperanden (Σ(0) ⊆ X) Dann ist ein wohlgeformter Term über Σ und X : • Jedes a ∈ X. • Wenn f ∈ Σ(n) und a1, a2, ..., an Terme sind, dann ist auch f(a1, ..., an) ein Term. • Sonst nichts (d.h. ein Term muß in endlich vielen Schritten aus den beiden obigen Formen konstruierbar sein. Informatik I, Seite 32 Terme lassen sich darstellen als gerichtete Bäume: f( a1, a2, ..., an) entspricht: a ∈ X entspricht : Beispiel: Sei U eine Menge, ( Ρ(U), Σ(0), { C }, { ∩ , ∪ } ), wobei P(U) die Potenzmenge von U und C der Komplemenoperator ist. Außerdem gilt: Σ(0) ⊆ P(U), Σ(0) = P(U) für U endlich. Der Term C (N ∩ M) ∪ K mit M, N, K ⊆ U läßt sich folgendermaßen als Baum darstellen: Schreibweisen für Terme (Formeln / Ausrücke): • f (a1, a2, ... , an ) : Funktionsschreibweise • a f b : Infix-Schreibweise, wenn f zweistellig ist • f a1 a2 ... an : Präfix-Schreibweise, wenn f n-stellig ist • a1 a2 ... an : Postfix-Schreibweise, wenn f n-stellig ist Zwischen der Schreibweise von Termen und der Durchlaufsteuerung der zugehörigen Bäume besteht ein Zusammenhang. Beispielsweise gehören folgende Durchlaufsteuerungen zur Präfixschreibweise: Beginne mit Wurzel Schreibe Ecke auf (f) Schreibe die Terme der Unterbäume a1, a2, ... an auf (von links nach rechts) bzw. zur Infixschreibweise: Schreibe Term für linken Unterbaum Schreibe Ecke (f) Schreibe Term für rechten Unterbaum Informatik I, Seite 33 Sei Σ Signatur, X die Menge von Elementaroperanden, X ⊇ Σ(0), T die Menge der Terme über Σ und X, Q die Menge von Gesetzen (Axiomen) über die Anwendung von Operatoren("Gleichungen") Dann heißt @ = ( T, Σ, Q ) algebraische Struktur oder abstrakte Algebra. Für Terme t, t' gilt t =Q t' genau dann, wenn t sich mit den Gesetzen aus Q in t' umformen läßt und umgekehrt. Beispiel: Boolesche Algebra B = ( Tbool , Σbool , Qbool ) mit Σbool = { 0 , 1, C, ∨, ∧ } mit Σ(0) = {0, 1}, Σ(1) = { C }, Σ(2) = { ∨ , ∧ } Tbool : Menge der Terme über Σbool und X = { 0, 1, x, y, z, ... } (x, y, z sind mögliche konkrete Elemente) Qbool : Axiome B1, B2 , ... , B10 der booleschen Algebra B1: (Assoziativgesetz) (x ∧ y) ∧ z = x ∧ ( y ∧ z ) (x ∨ y) ∨ z = x ∨ ( y ∨ z ) B2: (Kommutativgesetz ) x ∧ y = y ∧ x x∨y=y∨x B3: (Indempotenz) x∧x=x x∨x=x B4: (Verschmelzung) (x ∨ y) ∧ x = x (x ∧ y) ∨ x = x B5: (Distributivgesetz) x ∨ (y ∧ z) = (x ∨ y) ∧ (x ∨ z) x ∧ (y ∨ z) = (x ∧ y) ∨ (x ∧ z) B6: (Modularität) x ∧ (y ∨ z) = (x ∧ y) ∨ z , falls x ∧ z = z ("Nebenbedingung") B7: (Neutrale Elemente) x ∧ 0 = 0 x∨0=x x∧1=x x∨1=1 B8: (Komplement) x∧Cx=0 x∨Cx=1 B9: (Involution) C (C x) = x B10: (De Morgansche ...) C ( x ∧ y) = C x ∨ C y C (x ∨ y) = C x ∧ C y Über algebraische Strukturen Aussagen machen: • Auf B ist eine Halbordnung ≤ definiert durch x ≤ y g.d.w. x ∧ y = x (g. d. w. x ∨ y = y). • Gelten in B' = ( Tbool , Σbool , Q'bool) die jeweils ersten der Gesetze B1 - B5 und entweder B8 oder B10 , so ist B' boolesche Algebra. • Ist A eine Menge mit Σ(0) ⊆ X ⊆ A und zu jedem f ∈ Σ(n) eine Abb. fA: An → A, die Q erfüllt, gegeben, so ist @ = (A, Σ, Q) konkrete Algebra, A ihre Trägermenge. @ heißt Σ - Algebra, wenn Σ wichtig ist und betont werden soll. Beispiele: (P(U), Σbool , Qbool ): konkrete boolesche Algebra für U endlich (N0 , +) konkretes Monoid. Informatik I, Seite 34 Strukturerhaltende Abbildung zwischen Algebren: ( A, Σ, Q ) , (B, Σ', Q' ), Σ und Σ' sind gleichartige Signaturen, Q und Q' sind gleichartige Gesetze: bis auf Umbenennungen gleich, in Q' eventuell mehr Gesetze. Dann heißt h : A → B Homomorphismus, wenn für alle Paare f ∈ Σ(n) , f ' ∈ Σ' (n) (die "gleiche" Operatoren bezeichnen), die mittels h in Beziehung stehen, gilt: h(f (x1 , x2 , ...., xn )) = f ' (h (x1), h(x2), ... , h(xn)) für alle x1,...,xn , d.h. das Diagramm kommutiert (Homomorphismusbedingung). Beisp.: (N, ⋅ ) → ( No , + ) ⋅ →+ 1→0 p → 1 für alle Primzahlen p zB.: 2 ⋅ 2 = 4 → 1 + 1, 2 ⋅ 3 = 6 → 1 + 1 Sei h: (A, Σ, Q) → (B, Σ ', Q ' ) Homomorphismus. Dann ist ≡h mit a ≡h b g.d.w. h (a) = h (b) eine Äquivalenzrelation auf A. Außerdem ist ≡h eine Kongruenzrelation. Für ai ≡h bi , i = 1, ..., n, f ∈ Σ(n) gilt stets f (a1, ... , an) ≡h f(b1,...,bn) (Homomorphismus-Bedingung). Die Äquivalenzklassen entsprechen den Kongruenzklassen: [a]h = { a' ∈ A | a ≡h a ' } Für A/≡h = { [a]h | a ∈ A } heißt (A/≡h, Σ, Q ) Quotientenalgebra. Ein surjektiver Homomophismus heißt Epimorphismus, ein bijektiver Homomorphismus heißt Isomorphismus. Beispiel: h (N, ⋅ ) → (N0 , +) [n]h = alle Zahlen, die gleich viele Faktoren wie n in der Primfaktorzerlegung haben. Isomorphe Algebren werden oft als gleich angesehen (miteinander identifiziert). Informatik I, Seite 35 EINFÜHRUNG IN DIE INFORMATIK I (Script zur Vorlesung vom 17.1.96, 76021 Brauer) KORREKTUR zum 10/11.1.96 Das 6. Axiom der Booleschen Algebra (B6, Modularität) muß folgendermaßen lauten: x ∧ (y ∨ z) = (x ∧ y) ∨ z , falls x ∧ z = z ("Nebenbedingung") oder (x ∧ (y ∨ (x ∧ z)) = (x ∧ y) ∨ (x ∧ z) und x ∨ ( y ∧ (x ∨ z)) = (x ∨ y) ∧ (x ∨ z)) Termalgebren Sei gegeben eine Signatur Σ, eine Menge X ⊇ Σ(0) von Elementaroperationen. Sei T die Menge der Terme über Σ und X. Dann ist ( T, Σ, ∅ ) freie Termalgebra. Die Anwendung von f ∈ Σ(n) auf t1, t2, ..., tn ∈ T ergibt: Zwei Terme sind nur dann gleich , wenn sie identisch sind (induktiver Vergleich). Beispiel: X = Σ(0) = {a}, Σ(1) = {f}, Σ(i) = ∅ für i ≥ 2 T = {a, f(a), f (f (a)), ... } Wenn wie im obigen Beispiel X = Σ(0) gilt, dann heißt T0 = T0 ( Σ ) initiale Grundtermalgebra (inital: jeder Term wird nur von c ∈ Σ(0) ausgehend aufgebaut, Grundterm:die Terme aus T kommen in jeder Σ-Algebra vor). Beispiel: ΣN = {0}, ΣN(1) = {succ} (succ(n) = n+1), ΣN(i) = ∅, i ≥ 2. T0 ( ΣN ) hat die Termmenge T0 = { 0, succ ( 0 ), succ ( succ ( 0 ) ), ... }. T0 ist also die Algebra der natürlichen Zahlen Sei A = (A, Σ, Q ) beliebige Σ-Algebra, A(0) entspreche Σ(0) durch die bijektive Zuordnung: Φ: Σ(0) → A(0) Φ läßt sich eindeutig zum Homomorphismus erweitern durch: Φ: T0 ( Σ ) → (A, Σ, Q ) f ( t1, ... , tn ) → f ( Φ ( t1) , ... , Φ ( t2 )) (induktiv) Φ heißt Spezialisierungsabbildung , Φ( T0 ) ⊆ A Spezialisierung von T0 . heißt von T0 erreichbar, wenn Φ Epimorphismus ist. T0/≡Φ hängt (außer von Σ ) nur ab von Q, also wird T0/≡Φ als T0 ( Σ, Q ) bezeichnet. Ist erreichbar, so folgt die Isomorphie von und T0 ( Σ, Q ). A A Beispiel: B ist Grundtermalgebra zu Σ = { 0, 1, C, ∧ , ∨ }. Konkrete Boolesche Algebra ({ F, W }, {C, ∧ , ∨}, {B1, ... , B10}) Φ : 0 → F, 1 → W oder Φ : 0 → W, 1 → F B Prinzip der strukturellen Induktion auf Termalgebren T über Σ , X Für alle Terme t ∈ T gilt die Aussage p(t) ("Eigenschaft" p), wenn gilt: 1. p(a) gilt für jedes a ∈ X 2. Für jedes n ∈ N und jedes f ∈ Σ(n) gilt: Falls p (a1), ... , p(an) für a1, ... , an ∈ T gilt, so gilt auch p ( f (a1, ... , an )). A Informatik I, Seite 36 Das ist ein Spezialfall der noetherschen Induktion, wenn man folgende Halbordnung < auf T betrachtet: t < t' genau dann, wenn t weniger Operatoren als t' enthält. Beispiel: In B ist jedes Element durch einen Term ohne ∧ darstellbar. Beweis: p (t) : t ist ohne ∧ darstellbar 1. p(0), p(1) gelten 2. Seien t1, t2 Terme, für die p(t1) und p(t2) Dann gelten auch p( Ct1), p( t1 ∨ t2 ). Wegen t1 ∧ t2 = C(Ct1 ∨ Ct2) gilt auch p( t1 ∧ t2 ). Termalgebren mit Variablen "allgemeine" Formeln, Variable ≈ Unbestimmte ≈ logische Variable V sei eine aufzählbare Menge von Variablenbezeichnern. Dann kann man X = Σ(0) ∪ V als eine Menge von "Konstanten" auffassen. (T, Σ, ∅) : Algebra mit Variablen T0 ( Σ ) : Unteralgebra ohne Variablen. Die Spezialabbildung Φ wird folgendermaßen erweitert: für a ∈ Σ(0) : Φ(a) wie früher für v ∈ V: Φ(v) ∈ A beliebig. A Sei = (A, Σ, Q) Σ - Algebra, die Spezialisierung von T( Σ, V ) sein soll. Wie ist ≡Q definiert ? Umformungen mittels Q sollen "Gleiches" ergeben, also: t =Q t' g.d.w. Φ(t) = Φ(t') bei beliebiger Wahl von Φ(v) für v ∈ V. Informatik I, Seite 37 EINFÜHRUNG IN DIE INFORMATIK I (Script zur Vorlesung vom 25.1.96 und 26.1.96, 76021 Brauer) Eine (abstrakte) Semantik erreicht man durch Einschränkungen für die "Bedeutung" der Symbole der Signatur. → Quotientenalgebra der Grundtermalgebra ≈ abstrakten Datentyp ADT. Je mehr Gleichungen Algebren haben, desto weniger verschieden sind sie: In der Informatik sind ADTs zumeist nicht homogene Algebren, sondern heterogene Algebren. In diesen gibt es Konstanten verschiedener Sorten , die Operatoren sind deshalb sortenbezogen. Beispiel: NAT (natürliche Zahlen) Signatur: ΣNAT Konstanten: 0 : {∅} → NAT true, false : {∅} → BOOL Operatoren: s: NAT → NAT +: NAT × NAT→ NAT ≤: NAT × NAT → BOOL ∧ , ∨ : BOOL × BOOL → BOOL C: BOOL → BOOL Gesetze: x+0=x x + s(y) = s(x+y) 0 ≤ x = true s(x) ≤ 0 = false s(x) ≤ s(y) = x ≤ y Informatik I, Seite 38 Eine anschauliche Darstellung eines ADT ist das Signaturdiagramm: Allgemeiner Signaturbegriff Eine Signatur ist ein Paar ( S, F), wobei S eine Menge von Sortenbezeichnern (für verschiedene Trägermengen) ist, und F eine Menge von Operatorbezeichnern mit Angabe von Argumentsorten und Ergebnissorten. Ein Operator f aus F hat also folgende Funktionalität: f: (s1, ... , sn ) → sn+1 , si ∈ S, weiter wie im vorher definierten spezielleren Signaturbegriff. WICHTIG: Jeder Term hat eine Sorte, d.h. die Ergebnissorte des "obersten" Operators. Bemerkung: Ein ADT ist nur eine Spezifikation. Diese kann verschieden implementiert werden. Bei der Programmentwicklung sollte also erst der ADT definiert und bewiesen werden, daß er die Benutzeranforderungen erfüllt. Dann erst wird der ADT implementiert und wiederum für die Implementierung bewiesen, daß sie die Gleichungen des ADT erfüllt. Rechnen in Termalgebren mit Variablen T( Σ, V), V = U Vs , wobei Vs die Menge der Variablen der Sorte s ist. s∈ S Terme können als Formulare aufgefaßt werden, die Variablen entsprechen den Feldern für die Eintragungen. Informatik I, Seite 39 Beispiel: Fläche des Kreisrings Eine besondere Spezialisierungsabbildung ist G : T( Σ, V ) → T( Σ, V), wobei G durch die Abbildung G : V → T( Σ, V ) bestimmt wird. G (v) ≠ v gilt dabei nur für endlich viele v ∈ V, zB. v1, ... , vn. Dann schreibt man: G = [ t1/v1, ... , tn/vn ], mit G (vi ) = ti ( t/v bedeutet: t ersetzt v). G heißt dann Substitution. Regeln zur Anwendung der Substitution G = [ t / v ] • G (u) = t, falls u = v • G (u) = u, falls u ≠ v, u ∈ X = Σ(0) ∪ V • G ( f (u1, ... , un )) = f ( G (u1), ... , G (un)), n ≥ 1 Bemerkungen: 1. G (to) = to , wenn to Grundterm ist. 2. Ist t1 Grundterm, so heißt G = [t1/v] Grundsubstitution. Termersetzungssysteme Beispiel: Boolesche Algebra (a ∧ b) ∨ ( b ∧ a) umformen: mit B2: (a ∧ b) ∨ ( a ∧ b) mit B3': (a ∧ b) Hier funktionieren die Axiome des ADT als Ersetzungsregeln. Termersetzungsregeln: l → r , mit l, r ∈ T ( Σ, V ), l und r sind von gleicher Sorte, l ∉ V, Var (r) ⊆ Var (l) (Var ( t ) = Menge aller Variablen in t). Die Gleichung a = b ergibt 2 TE - Regeln: a → b, b → a. l → r wird folgendermaßen auf t ∈ T ( Σ, V ) angewendet: Sei t' irgendein "Unterterm" von t ("Unterbaum"), etwa t = f ( ... , g ( ... , t', ... ), ...). t' wird durch s' ersetzt, wenn t' → s' eine "Instanz" der Regel l → r ist. Informatik I, Seite 40 Beispiel: (a ∧ b ) ∨ (b ∧ a) : b ∧ a → a ∧ b ist Instanz von B2 mit G = [ b/x, a/y ] ⇒ (a ∧ b ) ∨ (a ∧ b) : (a ∧ b) ∨ (a ∧ b) → (a ∧ b) ist Instanz von B'3 mit G = [ a ∧ b / x ] ⇒ (a ∧ b ) Ein allgemeines Termersetzungssystem besteht aus einer Menge von TE-Regeln, Metaregeln wie bei STS plus Anwendungsregel. Textersetzung ist ein Spezialfall der Termersetzung, ein Wort ist dabei ein kammartiger Term: Eine Regel, zB. nt → nat , wird dann dargestellt wie folgt: Kapitel 4: Logik An die Stelle inhaltlicher Überlegungen treten in der Logik formale (syntaktische, strukturelle) Schlüsse (Umformungen). Die Vorgehensweise dabei ist: • "Elementaraussagen" (Operanden) festlegen • Logische Operatoren festlegen Die "Wahrheit" der komplexen Aussagen, die auf diese Weise gebildet werden können, wird durch Termauswertung ermittelt: Zuerst wird die Wahrheit der Elementaraussagen festgestellt, und dann die Operatoren angewendet (Fregesches Kompositionsprinzip). 4.1 Aussagenlogik Eine Aussagenlogische Formel ("Aussage") ist ein Term der initialen (freien) Termalgebra T( ΣB, V) zur Signatur ΣB zur Booleschen Algebra B = ( {0, 1}, {¬ , ∧ , ∨ }). Damit ist die Syntax festgelegt. 0 und 1 stehen für Wahrheitswerte falsch, wahr bzw. false, true. Informatik I, Seite 41 Als Abkürzungen werden neue Operatoren eingeführt: • p → q für ¬ p ∨ q • p ≡ q für ( p → q) ∧ ( q → p) • • n 0 i =1 i =1 n 0 i =1 i =1 V p i für p1 ∨ ... ∨ pn , V p i = 0 Λ p i für p1 ∧ ... ∧ pn , Λ p i = 1 Die Variablen stehen für Elementaraussagen. Die konkrete Bedeutung einer logischen Formel ergibt sich aus der Festlegung auf ein bestimmtes Szenarium, hier "Interpretation" I genannt: I: 0 → f (falsch, false) 1 → w (wahr, true) Eine Zuordnung (Substitution) der Variablen zu f, w, heißt "Belegung" der Variablen: G : V → {f, w} Um eine Vorschrift zur Auswertung der Formeln angeben zu können, ist eine Interpretation der Operatoren nötig: I ( ¬ A) = f, wenn I(A) = w, sonst f I ( A ∧ B ) = w, wenn I (A) = I (B) = w, sonst f I ( A ∨ B ) = f, wenn I (A) = I (B) = f, sonst w Hierbei ist I Homomorphismus von T ( ΣB , V ) → B' = ( {f, w}, {¬, ∧ , ∨ } ). Informatik I, Seite 42 EINFÜHRUNG IN DIE INFORMATIK I (Script zur Vorlesung vom 31.1.96 und 1.2.96, 76021 Brauer) In der Aussagenlogik gibt es für eine Formel A nur endlich viele Interpretationen IG . Wahrheitstafel: Seien x1, ... , xn alle Variationen in A: G(x1) ............................................ G(xn) IG (A) f ................................................ f f ................................................ w . . . . f ................................................ w w ............................................... f . . . . w ............................................... w z.B. A = p ∧ ( ¬ p ∨ q ) : p f f w w q f w f w ¬p w w f f ¬p∨q w w f w A f f f w Definition: Eine aussagenlogische Formel A heißt erfüllbar (satisfiable), wenn IG existiert mit IG (A) = w (Erfüllbarkeitsproblem). Dann heißt IG Modell für A. A heißt unerfüllbar, wenn kein Modell für A existiert. A heißt allgemeingültig (ist Tautologie) , wenn alle Interpretationen Modelle sind. Satz: A ist allgemeingültig ⇔ ¬ A ist unerfüllbar (denn es gibt nur die zwei Wahrheitswerte w und f ). Satz: Ersetzt man in den Axiomen B1, ... , B10 der Booleschen Algebra stets = C 0 1 durch durch durch durch ≡ ¬ f w so sind die so entstehenden aussagenlogischen Formeln Tautologien. Informatik I, Seite 43 Folgerungen und Kalküle Aus einer Menge von Formeln sollen logische Konsequenzen gefolgert werden. Dabei heißt IG Modell für , wenn IG Modell für jedes F aus ist. Eine Formel A ∈ T ( ΣB , V ) folgt automatisch aus , wenn jedes IG , das Modell für ist, auch Modell für A ist, in Zeichen :: A (logischer Schluß, von wird auf A geschlossen, A kann aus hergeleitet werden). Wenn = ∅ und :: A, dann ist A Tautologie. F F F F F F F F F F Frage: Kann man logische Schlüsse auch syntaktisch (d.h. durch Formelmanipulation) gewinnen ? Antwort: Ja, durch logische Kalküle. Ein Kalkül ist eine Sammlung von Regeln. Eine "Ableitung" (hier Herleitung) wird geschrieben als: # A (A ist aus ableitbar). Für ein Kalkül ist stets zu zeigen: 1. Korrektheit: Wenn # A, dann auch :: A. 2. Vollständigkeit: Wenn :: A, dann # A. F F F F F F 4.1.2 Sequenzenkalkül Die Regeln im Sequenzenkalkül haben die Form: F1 F2 F3 1 2 3 F F F G1 G2 G3 mit Zusatzbedingungen Eine Zeile F G heißt Sequenz und bedeutet: Aus der Voraussetzung (Formelmenge) und der Zusatzvoraussetzung F (Formel) folgt logisch als Konsequenz G (Formel), d.h. ∪ {F} :: G. Die gesamte Regel bedeutet: Aus der Sequenz 1 F1 G1 und der Sequenz 2 F2 G2 folgt die Sequenz 3 F3 G3. F F F F F F Beispiel: (Indirekter Beweis) F F F ¬p ¬p p q ¬q Eine Herleitung ist eine Folge von Regelanwendungen auf Basisregeln: L 1: Annahme, Voraussetzung , wenn F ∈ F L 2: Erweiterung, Monotonie F , wenn F F F ' F F F ⊆ F ' F bis A entsteht: F # A. Informatik I, Seite 44 L 3: Disjunktion (A) F F G F F (F ∨ G) H H H L 4: Disjunktion (B) F F F (F ∨ G) F F F (G ∨ F) L 5: Fallunterscheidung F G F G F ¬F G F L 6: Widerspruch F ¬F F ¬F F F G ¬G Der Kalkül ist korrekt (unmittelbar klar) und vollständig (schwerer zu beweisen). Beispiel I Behauptung: (ex falso quodlibet , "aus dem Falschen was beliebt") F F F ¬F G F Herleitung: (1) F F F ¬F Voraussetzungen (2) F ¬ G F F ¬G ¬F wegen L2 (3) F G wegen L6 Beispiel II Behauptung: (Kettenregel) F F F G F G F Herleitung: (1) F F (2) F F G (1) und (2) sind die Voraussetzungen (3) F ¬ F F L2 mit (1) (4) F ¬ F ¬ F L1 (5) F ¬ F G e.f.q. mit (3), (4) (6) F G L5 mit (2), (5) Informatik I, Seite 45 Beispiel III Behauptung: F F F F ( F→G ) G Herleitung: (1) F F (2) F ¬ F F (3) F ¬ F ¬ F (4) F ¬ F G (5) F G G (6) F (¬F ∨ G) G (7) F (¬F ∨ G) (8) F G L2 L1 e.f.q. L1 L3 Voraussetzung Kettenregel 4.1.3 Hornklauseln, Resolution (Grundlagen für Prolog) Klausellogik: Eine Formel F heißt Klausel, wenn sie von der Form P1 ∧ P2 ∧ .... ∧ Pm → Q1 ∨ Q2 ∨ .... ∨ Qn , m, n ≥ 0 ist. Obige Formel ist äquivalent zu: ¬ P1 ∨ ¬ P2 ∨ .... ∨ ¬ Pm → Q1 ∨ Q2 ∨ .... ∨ Qn . Die Pi , Qh heißen Atome (Variablen, Konstanten), Atome und negierte Atome heißen Literale. Eine Klausel heißt eine Hornklausel, wenn n ≤ 1, also von der Form P1 ∧ P2 ∧ .... ∧ Pm → Q ist. Für m ≥ 1 liegt eine Implikation vor, für m = 0 das Faktum Q. Implikationen und Fakten bilden zusammen die Datenbasis D bilden. Um festzustellen, ob D :: A gilt, A also die logische Konsequenz aus D ist, wird geprüft, ob D ∧ ¬ A unerfüllbar ist (wegen D → A = ¬ D ∨ A = ¬ (D ∧ ¬ A) ). Diese Überprüfung wird durch den Resolutionskalkül (Widerlegungskalkül) durchgeführt. Dieser ist zwar allgemein anwendbar auf Klauseln, "effizient" aber erst bei Hornklauseln. Grundidee der Resolution ( ¬ A ∨ B ) ∧ (A ∨ C ) ≡ ( ¬ A ∨ B ) ∧ (A ∨ C) ∧ ( B ∨ C) (*) Wenn also (B ∨ C) (die sogenannte Resolvente) unerfüllbar ist, dann ist auch (*) unerfüllbar. Die Resolvente ist genau dann unerfüllbar, wenn sie leer ist. Verfahren: Gegeben ist eine aussagenlogische Form als Konjunktion von Klauseln, versuche zwei Disjunktionen zu finden, die sich resolvieren lassen (auf die (*) anwendbar ist), solange, bis eine Resolvente leer wird. Dieses Verfahren ist korrekt und vollständig. Beispiel: (A ∨ B ∨ ¬ C) ∧ (¬ A) ∧ ( A ∨ B ∨ C ) ∧ (A ∨ ¬ B ) (1) (2) (3) (4) Aus (1) und (2) ergibt sich die Resolvente (A ∨ B) (5), aus (4) und (5) ergibt sich A (6), aus (2) und (6) ergibt sich schließlich die leere Resolvente. Informatik I, Seite 46 Um F :: A zu beweisen, wendet man auf F ∪ { ¬ A } die Resolution an. Voraussetzung dafür ist, daß alle Formeln als Konjunktionen von Klauseln vorliegen. 4.2 Prädikatenlogik Im Gegensatz zur Aussagenlogik gibt es in der Prädikatenlogik Individuen, deren Eigenschaften durch Prädikate festgelegt werden. Diese Individuen sind dabei Terme wie bei den ADT's, also Funktionen, Variablen und Konstanten. Die Prädikate sind n-stellige Funktionen: Term → { w, f }. Die logischen Junktoren sind ¬, ∧ , ∨ . Die Quantoren beziehen sich auf Individuen: Allquantor: ∀x , "für alle, für jedes" Existenzquantor: ∃x , "es existiert" Mit diesen Mitteln wird die Prädikatenlogik erster Stufe gebildet. Beispiel: (Wege in gerichteten Graphen) x, y, z : Variable (für Ecken) kante (x , y) : 2-stelliges Prädikat, "es führt eine gerichtete Kante von x nach y" weg (x, y) : 2-stelliges Prädikat, "es gibt einen Weg von x nach y" Folgende Aussagen können nun gemacht werden, die immer gelten sollen (Regeln): • ∀x weg (x, x) • ∀x ∀y ∀z (kante (x, z) ∧ weg (z, y) → weg (x, y)) Um einen speziellen Graphen zu beschreiben, sind weitere Aussagen (Fakten) nötig: • kante (a, b) • kante (a, e) • kante (b, c) • kante (c, d), wobei a, b, c, d, e Konstante sind. Um nun z.B. auf die Anfrage weg (a, d) eine Antwort zu erzeugen, werden die Regeln auf die Fakten angewandt, wobei die Variablen substituiert werden: Versuche: (1) z = e: kante (a, e) // Cut-Off (2) z = b: kante (a, b) ∧ weg (b, d) → weg (a, d) mit x = a und y = d, also versuche weg (b, d) zu beantworten .... kante (c, d) ∧ weg (d, d) ist erfüllt, also ... Bemerkungen: (1) Es muß eine passende Variablensubstitution gefunden werden (Unifikation) !! (2) Die Resolution ist nichtdeterministisch. Syntax der Prädikatenlogik erster Stufe mit Gleichheit (Identität) Alphabet: A = V ∪ Σ ∪ P, wobei V, Σ und P paarweise disjunkt sind. V = { v0, v1, ... } aufzählbare Menge von Variablen Σ = Σ(0) ∪ Σ(1) ∪ Σ(2) .... Funktionssymbole mit Stelligkeit Terme sind Elemente von T( Σ, V ) (somit freie Termalgebra). Informatik I, Seite 47 P = P(1) ∪ P(2) .... Prädikatensymbole (Relationssymbole) mit Stelligkeit. In P(2) liegt das spezielle Prädikat "=" (Infixnotation: t = t' ). p (t1, t2, ... , tn) mit p ∈ P(n) und ti ∈ T(Σ, V) Terme heißt atomare Formel (einfachste Formel, die wahr oder falsch sein kann). F0 = F0( P, Σ, V ) sei die Menge der atomaren Formeln. Dann läßt sich die Menge F der syntaktisch korrekten Formeln der Prädikatenlogik 1. Stufe folgendermaßen induktiv definieren: (1) F0 ⊆ F (2) F, G ∈ F impliziert ¬ F, F ∧ G, F ∨ G ∈ F (3) F ∈ F, v ∈ V impliziert ∀v F, ∃v F ∈ F (4) sonst nichts Ein Literal ist eine atomare Formel oder eine negierte atomare Formel: p(...) , ¬ p(...), t1 = t2 , ¬ (t1 = t2). Eine quantorenfreie Formel ist eine Formel, in der keine Quantoren auftreten. Variablenbindung: In ∀x F, ∃x F ist x eine gebundene Variable. x ∈ V heißt frei in F, wenn sie in F vorkommt und nicht gebunden ist. Beispiel: F = ( ∃x p(x, f (y))) ∨ ¬ ∀ y g ( y, g (k, h(x))) , k konstant (1) (2) (3) (4) (5) (6) (1), (2), (4), (5) sind gebunden, (3) und (6) sind frei. Informatik I, Seite 48 EINFÜHRUNG IN DIE INFORMATIK I (Script zu den Vorlesungen vom 7.2.96, 8.2.96 und 14.2.96, 76021 Brauer) In prädikatenlogischen Formeln treten zwei Arten von Variablen auf: 1. die freien Variablen: das sind die wirklichen Variablen, die globalen Variablen/Größen 2. die gebundenen Variablen: die scheinbaren Variablen, die lokalen Variablen/Größen Die Bindung von Variablen kann ineinander verschachtelt sein; welche Variable gemeint ist mit ein und derselben Bezeichnung hängt also vom Bindungsbereich (scope, Gültigkeitsbereich) ab. Um Verwechslungen zu vermeiden, sollte man also statt ∃ x (p(x) ∧ ∀ x g (x , y) ∨ g(x, x)) zB. das innere x in z umbenennen, so daß die Formel folgende Gestalt annimmt: ∃ x ( p(x) ∧ ∀ z g (z , y) ∨ g(x, x)). Induktive Definition der Menge frei ( F ) der freien Variablen in der Formel F: • frei ( L ) = Menge der Variablen in L, wenn L ein Literal ist ( (¬) p(t1, ..., tn)) • frei ( F • G ) = frei ( F ) ∪ frei ( G ) für • = ∨ , ∧ , →, ≡ • frei ( Q x F ) = frei ( F ) \ { x } für Q = ∀, ∃ In der Definition soll dabei der Bindungsbereich für die Variable x die kleinste Teilformel anschließend an Q x sein. Um den Bindungsbereich auszudehnen, benutzt man zB. die Schreibweise ∀ x : A ... B und meint damit ∀ x (A ... B) . Gebundene Variablen sind in Variablen, die noch nicht in der Formel erscheinen, umbenennbar (siehe oben). Semantik prädikatenlogischer Formeln Szenario, Weltausschnitt festlegen: 1. Es muß ein Universum bzw. ein Individuenbereich U definiert sein, aus dem die Werte für Variablen und Konstanten stammen. U darf nicht leer sein. 2. Des weiteren muß eine Abbildung I der Funktionen und Prädikatensymbole vorliegen: Σ ∪ P → Menge der Fkt. /Präd. über U, dh.: f ∈ Σ(m) , I f : Um → U p ∈ P(n), I p : Un → {w, f } oder I (p) ⊆ Un WICHTIG: das "=" aus P wird stets als die Gleichheit in U interpretiert! A = ( U, I ) heißt Struktur. Für eine feste Struktur sind verschiedene Belegungen (von Variablen) möglich. Eine Belegung α : V → U wird erweitert auf α ' : T ( Σ, V ) → U. A Induktive Definition der Interpretation von Formeln: Gegeben sei die Interpretation I = ( , α )mit der Belegung α : • I ( t1 = t2 ) = w , wenn α (t1) = α (t2), sonst f • I ( p (t1, ..., tn)) = w, wenn (α (t1), ..., α (tn)) ∈ I( p ), sonst f • I ( ¬ F ) = w, wenn I (F) = f, sonst w • I ( F ∧ G ) = w, wenn I (F) = w und I(G) = w, sonst f • I ( F ∨ G) = w, wenn I (F) = w oder I(G) = w, sonst f • I ( ∀ x F ) = w, wenn für jedes a ∈ U gilt: I[a/x] (F) = w, sonst f • I ( ∃ x F ) = w, wenn es ein a ∈ U gibt mit I[a/x] (F) = w, sonst f Dabei ist I [a/v] die Interpretation , die aus I entsteht, wenn man α durch α [a/v] ersetzt: α [ a/v ] (x) = α (x), wenn x ≠ v, sonst a. Informatik I, Seite 49 I heißt Modell für die Formel F, wenn I(F) = w. F heißt erfüllbar, wenn F ein Modell besitzt. F heißt unerfüllbar, wenn F kein Modell besitzt. F heißt allgemeingültig , wenn ¬F unerfüllbar ist. Die Formel F und G heißen semantisch äquivalent g.d.w. jedes Modell von F Modell von G ist und umgekehrt. Offenbar gilt: ¬∃ x F ist semantisch äquivalent zu ∀ x ¬F. Satz: Kommt die Variable y nicht in F vor, so gilt: I ist Modell für ∀ x F ⇔ I ist Modell für ∀ y F [ y/x ]. Beispiel: F = ∀ x p(x, f(x)) ∧ q (g(a, f(z))) U = N0 = {0, 1, 2, ... } I p = { (m,n) ⊆ U2 | m < n } I q = { n ∈ U \ {0} | n ist Primzahl } I f = succ I g = add Ia=2 Belegung: α1: α1(z) = 2, I1(F) = w α2: α2(z) = 1, I2(F) = f Erweiterung des Sequenzenkalküls: Neue Regeln L 14: Spezialisierung (gilt nur wegen U nichtleer) F ∀xF F F L 15: Generalisierung (falls x nicht frei in F) F F F ∀xF L 16: Existenzialisierung S F[ t / x ] F F ∃xF L 17: Existenzialisierung A (falls y in der unteren Sequenz nicht frei ist) F F[ y / x ] G G F ∃xF L 18: Gleichheit t=t L 19: Substitution F F t = t' F[t / x] F[t' / x] Satz: Der erweiterte Sequenzenkalkül ist korrekt und vollständig. Informatik I, Seite 50 Beispiel: Behauptung (L20): F ∀x ∀y F F ∀y ∀x F Beweis: x, y nicht frei in F F ∀x ∀y F F ∀y F F F F ∀x F F ∀y ∀x F Annahme L14 L14 L15 L15 Behauptung: t1 = t2 F t F 2 = t1 Beweis: F F F F t1 = t2 t 1 = t1 t1 = t2 L18, L2 t2 = t1 L19 auf t1 = t1 ≈ (x = t1) [t1 / x] anwenden t2 = t1 Kettenregel Satz 1: Die allgemeingültigen (bzw. unerfüllbaren) Formeln der Prädikatenlogik 1- Stufe sind aufzählbar (Allgemeingültigkeit ist semientscheidbar, wenn sie vorliegt, kann das festgestellt werden). Satz 2: Allgemeingültigkeit ist nicht entscheidbar. Bemerkung: Es existieren prädikatenlogische Formeln, die erfüllbar sind, aber nur unendliche Modelle besitzen. Frage: Wie kann man die Prädikatenlogik 1. Stufe zur Aussagenlogik spezialisieren? Antwort: Indem man alle Quantoren und Variablen verbietet. Atomare Formeln p (t1, ... , tn ) hat für eine feste Struktur einen festen Wahrheitswert, entspricht also einer aussagenlogische atomaren Formel. Verschiedene Strukturen entsprechen verschiedenen Belegungen der aussagenlogischen atomaren Formel. Bemerkung: ∀ x ∈ N ∃ y ∈ Z : p (x, y) ist zu lesen als Ableitung von: ∀ x ( N(x) → ∃ y ( Z(y) ∧ p(x , y)) Die Mengen bzw. ADT's N und Z sind in "reiner" Prädikatenlogik als Prädikate zu schreiben. Informatik I, Seite 51 Normalformen Satz: Jede quantorenfreie prädikatenlogische Formel F hat eine sematisch äquivalente Darstellung in konjunktiver Normalform (Nf): n mi ∧∨L ij F semantisch äquivalent zu i = 1 j =1 , wobei die Lij Literale sind. Analog gibt es eine disjunktive Normalform (∨ ∧). Satz: Jede prädikatenlogische Formel F hat eine pränexe Nf , d.h. ist semantisch äquivalent einer Formel der Gestalt Q1 x1 Q2 x2 ... Qn xn F' mit Qi = ∀, ∃ und F' quantorenfrei. Beweis (strukturelle Induktion): a) Ist F quantorenfrei, so stimmt die Behauptung. b) F = ∀ x A ∧ ∀ y B ist sem. äq. zu ∀ x ∀ y ( A ∧ B ), wenn F "bereinigt" ist, d.h. keine verschiedenen Variablen mit gleicher Bezeichnung auftreten. usw. Satz: Jede prädikatenlogische Formel F hat eine SKOLEMSCHE NF, d.h. ist erfüllbarkeitsäquivalent zu einer Formel in pränexer Nf ohne Existenzquantoren (d.h. eine universell quantifizierte Formel ) : ∀ x1 ∀ x2 ... ∀ xn G, G quantorenfrei. Eine Formel G heißt erfüllbarkeitsäquivalent zu F g.d.w. Wenn F ein Modell hat, so auch G und umgekehrt (die Modelle können verschieden sein). Beweis: Sei F in pränexer Nf: F = ∀ x1 ... ∀ xn ∃ y M (M kann Quantoren enthalten). Das ∃ y kann nun durch folgenden Trick von Skolem eliminiert werden: Wenn ein y zu jedem xi so existiert, daß M ( ... ) erfüllbar ist, dann kann ein neues f ∈ Σ(n) definiert werden mit f (x1,...,xn) = y. Dann gilt: F ist erfüllbar g.d.w ∀ x1 ... ∀ xn M[f(x1,...,xn) / y] erfüllbar ist. Logisches Programmieren Die Resolution wird für die Skolemform ohne Quantoren durchgeführt. Bei der Suche nach ¬a bzw. a muß am Terme mit Variablen vergleichen: Dann werden die Terme miteinander unifiziert, d.h. es wird eine geschickte Substitution gesucht, die die Terme gleich macht. Informatik I, Seite 52 Kapitel 5 : Funktionales Programmieren Gleichzeitig zur Erfindung der Turingmaschine 1936 wurde 1936 auch der Lambda Kalkül ( λ - Kalkül ) von A. Church als Funktionsbeschreibungsformalismus eingeführt. Beide Begriffe sind äquivalente Begriffe für Berechenbarkeit. Es gibt 4 Arten von Programmiersprachen: • funktionale / applikative Sprachen: Programm: Definition von Funktionen/Termen (inklusive Daten) Ausführung: Anwendung der Definition liefert das Ergebniss rückstandsfrei, d.h. ohne Seiteneffekte / Nebeneffekte. • logische / deklarative Sprachen: Programm: Deklarationen (entsprechen den Prädikaten) Ausführung: Feststellen, ob das Prädikat erfüllbar ist. Ausgabe: Erfüllende Belegung. • imperative / prozedurale Sprachen: Programm: Folge von Anweisungen zur Änderung des Speicherinhalts Ausgabe: Teil des Speicher-Inhalts • objektorientierte Sprachen: Programm: Objekte ≈ ADT (abstrakte Datentypen) Ausgabe: Kommunikation ; Nachrichtenversand Prinzip der funktionalen Programmiersprachen Ein funktionales Progmrmm ist ein Ausdruck E (der sowohl Algorithmen als auch Eingabe enthält). E wird verändert mittels eines Termersetzungssystems, d.h. ein Teilterm P wird in P' geändert: E[P] → E[P'] ( P ⇒* P' bzgl. der Regeln). Beispiel: (7+4)*(8+5*3) → 11*(8+15) → 11*23 → 253. Elementarer λ - Kalkül Der λ-Kalkül ist eine Notation/Sprache zur Beschreibung aller berechenbarer Funktionen. Funktionen werden nicht als Argument/Werte-Paare, sondern als "Vorschriften" zur Berechnung angesehen. Statt f(x) = 2*x+1, wobei f der Name der Funktion ist, wird jetzt die anonyme Funktionsdefinition (ohne Namen), aber mit Angabe des Arguments (der Variablen) angegeben: λ x . 2*x+1 einstellige Funktion λ y . 2*y+1 ist dieselbe Funktion Es gibt drei Regeln zur Verarbeitung von λ-Ausdrücken: α - Konversion: Durch diese Regel wird die Umbenennung gebundener Variablen vorgenommen: λ x . M →α λ y . M[ y / x ] β - Konversion: Durch sie wird die Anwendung von Funktionen auf Daten (Application) geregelt: (λ x . 2*x+1) 3 →β 2 * 3 + 1 ( λ x . M ) N →β M[ N / x ] Bei der Substitution von x durch N muß auf Namenskonflikte geachtet werden, so ist etwa ( λ x . ( λ y . y + x )) y NICHT zu λ y . y+y ableitbar, sondern vor der Substitution muß noch eine α-Konversion durchgeführt werden: →α (λ x . (λ z .z+x)) y →β λ z . z+y Durch Substitution von N für x [N / x] in M darf keine in N freie Variable in M gebunden werden. Dann ist [N / x] zulässig für M. Informatik I, Seite 53 η - Konversion: Diese Regel ist für das Weglassen "redundanter" λ's zuständig: (λ x . M x) ist dieselbe Funktion wie (M), wenn M keine freien Vorkommen von x enthält. λ x . M x →η M Beispiel: λ x . 1+x →η 1+ (wird als einstellige Funktion succ aufgefaßt). λ x . λ y . * y x →η λ x . * x →η * Formale Syntax von λ -Ausdrücken Gegeben seien eine aufzählbare Menge V von Variablen und eine aufzählbare Menge C von Konstanten. Die Terme über V und C, die Funktionen beschreiben, heißen λ -Ausdrücke. Induktive Definition von λ-Ausdrücken: • v ∈ V und c ∈ C sind λ-Ausdrücke • F und A seien λ-Ausdrücke. Dann ist auch (F A) ein λ-Ausdruck (F ist die Funktion/der Algorithmus, die/der auf A angwendet wird). Für F und A ist keinerlei (Typ-) Einschränkung gegeben (ungetypter λ -Kalkül), so ist zB. FF ein erlaubter λ-Term. • Ist x ∈ V und M ein λ-Ausdruck, so ist auch (λ x . M) ein λ-Ausdruck. Bemerkung: Ist x freie Variable in M, dann ist λ x . M Funktion: x → M[x/x]. Die so erzeugte initiale Termalgebra sei Λ. Im λ-Ausdruck (λ x . F) heißt x Parameter und F Funktionsrumpf. Der Bindungs-/Freiheitsbegriff für Variablen ist analog zur Prädikaten-Logik, so sind zB. in λ x . F alle x in F gebunden, in λ x . y x hingegen ist y frei. F heißt geschlossener λ -Ausdruck, wenn F keine freien Variablen enthält. Notation (1) (λ x1 x2 ... xn . M) statt (λ x1 . (λ x2 . ( ... (λ xn . M) ... ))), d.h. Funktionen mit mehreren Argumenten werden durch iterative Zusammensetzung einstelliger Funktionen konstruiert (currying ) (zB. add(x , y) = addy (x)). (2) F M1 M2 ... Mn statt (... (F M1) M2) ... Mn ) Beispiel: Kombinatoren I=λx.x K = λ x y . x entspricht λ x . (λ y . x) K* = λ x y . y S = λ x y z . x z ( y z ) entspricht λ x . (λ y . (λ z . ((x z) (y z)))) Generalvoraussetzung: Von λ-Ausdrücken soll stets angenommen werden, daß bei Anwendung der α - oder βKonversion keine Namenskonflikte entstehen, d.h. im ganzen Ausdruck ist keine gebundene Variable so bezeichnet wie eine freie Variable (kann durch α-Konversion erreicht werden), es liegt also ein bereinigter λ -Ausdruck vor. Beispiel: (1) I M →β M (2) K M →β λ y . M (Aufpassen: K y ⇒α , β λ z . y). Also: K M N = (K M) N →β (λ y . M ) N →β M (da y nach Generalvor. nicht frei in M) (3) K* M N →β (λ y . y) N →β N (4) S M N L ⇒* M L (N L) Informatik I, Seite 54 Operationelle Semantik Durch die oben eingeführten α, β und η-Konversionen ist ein Kalkül definiert, der verschiedene λ-Ausdrücke, die die gleiche Funktion darstellen, auf Normalform bringt. Also sind F und F' gleiche Funktionen, wenn F ⇒*α, β, η F' . Ein λ-Ausdruck ist also dann in Normalform, wenn keine β- oder η- Konversionen anwendbar sind. Aber: (λ λ x . x x) (λ λ x . x x) hat keine Normalform !! Informatik I, Seite 55 EINFÜHRUNG IN DIE INFORMATIK I (Script zu den Vorlesungen vom 21.2.96 und 22.2.96, 76021 Brauer) Wdh.: Operationelle Semantik des λ -Kalküls (Transformationsregeln) Auf der Algebra der λ-Ausdrücke wird durch die 3 Regeln α, β, η (Konversionsregeln) ein Reduktionssystem (Termersetzungssystem) definiert (sh. Script vom 7/8/14.2.96). Reduktionsrelation: F ⇒x F' , wenn F' aus F in einem Schritt durch x-Konversion (x = α, β, η) entsteht. ⇒α, β, η* ist dann die transitive Hülle der Vereinigung von ⇒α , ⇒β , ⇒η. ⇔α, β, η* ist die transitive Hülle der Vereinigung von ⇒α, β, η* und (⇒α, β, η*) -1. Satz: i. ⇒α, β, η* ist konfluent, hat also auch die Church-Rosser-Eigenschaft, d.h.: Gilt F ⇒α, β, η* F1 und F ⇒α, β, η* F2, dann existiert stets F3 mit F1 ⇒α, β, η* F3 und F2 ⇒α, β, η* F3. Gilt F ⇔α, β, η* F' , so existiert stets G mit F ⇒α, β, η G und F' ⇒α, β, η G. ii. Definition: Der λ-Ausdruck N heißt Normalform Nf des λ-Ausdrucks F, wenn F ⇒α, β, η* N und N ist nicht durch β- oder η-Konversionen veränderbar. Dann gilt: Jeder λ-Ausdruck hat höchstens eine Nf (bis auf α-Konversionen). Diese kann durch Linksauswertung gewonnen werden ((λ ... M) N). iii. Nicht jeder λ-Ausdruck hat eine Nf [Bsp.: (λ x . x x) (λ x . x x)] und es gibt λ-Ausdrücke, bei denen nicht jede Reduktionsfolge ⇒α, β, η* zu einer Nf führt, obwohl sie existiert. Faule Auswertung (lazy evaluation) Unter fauler Auswertung versteht man bei Linksauswertung (z.B. (λ a b . M[a,b] ) A B ) eine so vorgenommene Auswertung, daß A, B nicht angesehen (ausgewertet) werden, sondern daß die β-Konversion linksangewendet wird: ⇒β M [A/a , B/b], egal was A, B ergeben würden. Faule Auswertung heißt auch verzögerte Auswertung oder auch call by need / call by name. Der Gegensatz zur faulen Auswertung ist die strikte Auswertung (eager evaluation, call by value). Diese Auswertungsstrategie berechnet erst alle Argumente und übergibt sie erst dann an die Funktion (d.h. in ((λ a b . M[a,b]) A B ) erst Nf für A (NA) und für B (NB) bestimmen und dann β-Konversion anwenden: ((λ a b. M) NA NB) ⇒β M[ NA/a , NB/b]. Eventuell können aber NA und NB nicht bestimmt werden! ). Beim λ-Kalkül führt bei bestimmten Ausdrücken nur call-by-name (lazy evaluation) zum Erfolg. Funktionsdefinitionen Sei v Variable, F λ-Ausdruck. Dann ist (v = F ) eine benannte Funktionsdefinition (mit v als Namen), die Variable v wird also an F gebunden (deutbar als Belegung von v). Eine Folge (v1 = F1) ... (vn = Fn) F mit n ≥ 0 heißt Programm (in F werden dann v1, ... , vn vorkommen). Informatik I, Seite 56 Beispiel: (f = ( λ v . v )) f t liefert t. Rekursion Eine Funktionsdefinition ( w = λ v . t ) darf in t wieder die Variable w enthalten. Das ergibt einen rekursiven Aufruf von w. Beispiel: ( w = λ x y . x (w K* ( t y )) y ) w K z wird folgendermaßen ausgewertet: wkz= ((λ x y . x (w K* (t y ) ) y) K z) = ((λ y . K ( w K* (t y )) y ) z ) = ( K (w K* (t z)) z) = (w K* (t z)) = (( λ x y . x (w K* ( t y )) y ) K* (t z)) = (K* (w K* (t (t z))) (t z)) = =tz Bei der Auswertung rekursiver Programme muß lazy evaluation angewendet werden, wie aus dem obigen Beispiel ersichtlich wird. Bei strikter Auswertung kann Endlosrekursion entstehen: (w = λ v . w v) w F würde folgendermaßen ausgeführt: w F = (λ v . w v) F= w F usw. Bedingte λ -Ausdrücke b t t' = { für b = K : t , für b = K* : t' Also können im λ-Kalkül Wahrheitswerte durch K für wahr und durch K* für falsch definiert werden. ifthenelse wird dann definiert durch: ifthenelse = λ b t' t''. (b t' t'') Beispiel: ifthenelse B R T = (λ b t t''. b t' t'') B R T = B R T (verzögerte Auswertung von B, R und T !), wird B zu K ausgewertet, ist B R T = R, wird B zu K* ausgewertet, ergibt sich B R T = T. Darstellen der booleschen Algebra (Aussagenlogik) im λ -Kalkül true = K, false = K* , für ifthenelse b t' t'' wird kurz geschrieben: B → t' | t''. Dann wird weiterhin definiert: not = λ b . ( B → K* | K ) and = λ p q . ( p → q | K* ) or = λ p q . (p → K | q ) Bei der Auswertung solcherart definierter boolescher Ausdrücke wird wieder lazy evaluation benutzt! Darstellung natürlicher Zahlen (A. Church) Sei fn x Abkürzung für f (f ... (f x) ...) , n ∈ N0, z.B. f0 x = x = x , f2x = f (f x) Dann seien die natürlichen Zahlen im λ-Kalkül repräsentiert durch: c0 = (λ f x . x), c3 = (λ f x . f (f (f x))), cn = (λ f x . (fn x)) Informatik I, Seite 57 Sei A+ = (λ x y p q . (x p (y p q))). Dann gilt: A+ cn cm = cn+m. Sei A* = (λ x y z . (x (y z))). Dann gilt: A* cn cm = cn*m. usw. Daß heißt, alle berechenbaren Funktionen über N0 sind im λ-Kalkül darstellbar. "Nächster Schritt": LISP Das Hauptproblem von LISP besteht darin, daß nicht statische Bindung (wie im λ-Kalkül gefordert) vorliegt, sondern dynamische Bindung. Neue LISP-Varianten (z.B. SCHEME) sind mit statischer Bindung ausgestattet. Die wichtigste Idee von LISP ist die Darstellung von Fakten und Daten in einer Datenstruktur, der Liste (≈ Baum). Definition der Liste a) Eine Liste ist aufgebaut aus Atomen (an Blättern): Jede Folge von Buchstaben / Ziffern ist Atom. Das ausgezeichnete Atom nil repräsentiert den Wahrheitsdefiniert falsch als auch den Sachverhalt des undefinierten. Das ausgezeichnete Atom t repräsentiert den Wahrheitswert wahr. Also: B = {nil, t} b) Listendefinition in BNF (Backus-Nauer-Form): Liste ::= Atom | ' ( ' Liste '.' Liste ' ) ' (Kontextfreie Notation: L → A | ( L . L ) ) Beispiel: a, b, c, d, e sind Atome, ((a . (b . nil )).((c . nil) . (d . (e . nil )))) eine Liste. c) Operationen: eq: Atom × Atom → B (Gleichheit) atom: Liste → B ( t, wenn Argument Atom ist, sonst nil ) car: Liste → Liste ( (car (x . y)) = x // Linkes Register) cdr: Liste → Liste ( (cdr (x . y)) = y // Rechtes Register) d) LISP-Schreibweise von λ -Ausdrücken λ x1 ... xn . s ≈ (lambda (x1 ... xn) s) s n ≈ (s n) (f = s) ≈ (label f s) a ≈ (quote a) kurz 'a (das Atom a, nicht eventueller Funktionsname) (b → s | u ) ≈ (cond (b s) (t u)) (Spezialfall von (cond (B1 s1) ... (Bn sn)) ) Informatik I, Seite 58 Beispiel: Erweiterung des Vergleichsoperators eq auf Listen equal: Liste × Liste → B a) λ-Kalkül: equal = λ s1 s2 . (atom s1 → (atom s2 → (eq s1 s2) | nil ) | (atom s2 → nil | (equal (car s1) (car s2) → (equal (cdr s1) (cdr s2)) | nil ))) b) LISP: (label equal (lambda (s1 s2) (cond ((atom s1) (cond ((atom s2) (eq s1 s2)) (t nil))) (cond ((atom s2) nil ) (t (cond ((equal (car s1) (car s2)) (equal (cdr s1) (cdr s2))) (t nil ))))))) Informatik I, Seite 59 EINFÜHRUNG IN DIE INFORMATIK I (Script zu den Vorlesungen vom 28.2.96 und 29.2.96, 76021 Brauer) Eigenschaften von SML • • • • • • statische Bindung strikte Auswertung , call by value (außer bei ifthenelse) strenge Typisierung (Typinferenz) polymorphes Typsystem (Typvariable, Unifikation), damit ist nicht Overloading gemeint Ausnahmemechanismus (exceptions) Modulkonzept (separate Übersetzung) Grundlegende Programmiermethoden Grundidee: Komplexitätsreduktion (für Aufgabenst., Programmierer, Wartungsingenieure) Man versucht ein großes Programmier-Projekt in Teile zu zerlegen, wobei auf folgendes zu achten ist: 1. Die Teile sollen einfacher bearbeitbar sein als das Ganze. 2. Eventuell schon vorhandene Teile sollen wiederverwendet werden. 3. Die Zusammensetzung der Teile soll einfach sein bzgl. der Kommunikation, die zwischen den Teilen stattfindet. Einfachste Schemata für das Vorgehen • Fallunterscheidung: ifthenelse (cond ( , ) ( , ) ... ( , )) case of (bewachte Anweisung) • Sequentielle Zerlegung: Schritte, die nacheinander abgearbeitet werden • Rekursion: Kombination von Fallunterscheidung und sequentieller Zerlegung (Problem der Terminierung) Beispiel: Die n-te Fibonacci-Zahl (n = 0, 1, ...) ist die Zahl der Knoten auf Stufe n. Das rekursive Bildungsgesetz lautet dann: Fib(0) = Fib(1) = 1 Fib(n) = Fib(n-1) + Fib (n-2) für n > 1 Informatik I, Seite 60 Bewertung der Knoten der Bäume 1. Knoten numerieren: mit 0 beginnen, schichtenweise 2. den Knoten Werte zuordnen; W(k) ist der Wert des k-ten Knotens: W(0) = 0 W(k) = k - W(Vorgängernummer) Beobachtung: Nummer des Vorgängers des k-ten Knotens = Wert des (k-1)sten Knotens Also neue Definition von W: W(0) = 0 W(k) = k - W( W(k-1)) Es liegt eine geschachtelte Rekursion vor. Achtung: Kleine Änderungen der Definition haben große Wirkungen: (1) W'(0) = 1 W'(k) = k - W( W(k-1)) Dann: W'(1) = 1 - W'(W'(0)) = 1 - W'(1), hat keine Lösung in Z! (2) W''(0) = 0 W''(k) = k+W''( W''(k-1)) Dann: W''(1) = 1, W''(2) = 2+W''(1) = 3, W''(3) = 3+W''(3), hat keine Lösung! Weiteres Beispiel: Sei g: N0 × N0 → N0 definiert durch: g(0, y) = 1, y ∈ N0 g(x, y) = g(x-1, g(x-y, y)) (nur für x,y ∈ N0, x ≥ y, vollständig definiert) Dann: g(1,2) = g (0, g (-1, 2)). Bei verzögerter Auswertung ergibt sich 1, ansonsten ist g(1,2) undefiniert. Bei rekursiven Funktionen muß also a) die Terminierung und b) die partielle Korrektheit beachtet werden! Kapitel 6 "Mehrfachmengen" / Multimengen: siehe GOOS Kapitel 7 : Algorithmenkonstruktion Komplexität von Algorithmen / Programmen Ein Algorithmus / Programm arbeitet auf Klassen von Einzelaufgaben, -fällen, -problemen. Der "Aufwand" des Algorithmus hängt also von der "Größe" der Eingabe ab. Der Aufwand von Algorithmen wird in drei Größen gemessen: • Zeit in Elementarschritten (die eine konstante Zeit benötigen) als Elementarschritt können zB. Addition, Subtraktion verwendet werden, nicht Multiplikation, da diese schon eine auf der Addition und Subtraktion aufbauende komplexere Operation ist. • Platz in Speicherstellen für Zwischenrechnungen • Kommunikationsaufwand Die Größe der Eingabe ist die Zahl der Basiselemente, aus denen die Eingabe besteht. Informatik I, Seite 61 Komplexitätsfunktionen K(n): Komplexitätsfunktionen bilden die Größe n der Eingabe eines Problemfalles auf ein Maß für den Aufwand der Lösung ab. Mögliche Fälle von Eingaben sind: • der schwierigste Fall (worst case) • der mittlere Fall (average case) • der einfachste Fall (best case) Gesucht sind zu Algorithmen / Programmen die Funktionen: Kwc (n), Kac (n) und Kbc (n). Diese Funktionen werden meist nur in Schranken angegeben (wc: obere Schranke, bc: untere Schranke). Die O-Notation (und verwandte Notationen) Beispiel: Gegeben: endliche Menge S ⊆ Z, c ∈ Z Gesucht: Antwort auf die Frage: c ∈ S ? Also wird ein Algorithmus gesucht für die Berechnung der Funktion contains: Ρ(Z) × Z → BOOL ( S, c) → true, falls c ∈ S, false sonst Lösung: contains (S, c) = false für S = ∅, true für selel (S) = c, sonst contains (S\{selel(S)}, c) mit selel: Ρ(Z) → Z, S → s, s ∈ S Zeitkomplexität T...(n) Größe des Problems: n = |S| Twc(n) = 3n+1, wenn c ∉S Tvery best(n) = 1+1+1, falls c ∈ S und selel liefert sofort c Taverage(n) = (3n+3n+1)/2 = 3n+1/2 Anmerkung: obige Zeitangaben hängen natürlich von der Wahl der Elementarschritte ab. Definition: O-Notation : obere Schranke Gegeben: Zwei stetige Funktionen f, g : N0 → R+ "f wächst höchstens so schnell wie g", d.h. f = O(g) (f ist Groß O von g), wenn ∃n0 ∈N0 ∃c ∈ R+ ∀ n ≥ n0 : f(n) ≤ c g(n). Achtung: O(g) = { f | f = O(g) im obigen Sinne }, d.h. f = O(g) :⇔ f ∈ O(g). Die Schreibweise O(g) = f ist also unsinnig. Die O-Notation wird für worst-case-Abschätzungen benutzt. Beispiel: n + 3 = O(n) 3n+7 = O(n) 700 n2 + 10n + 2700 = O(n2) Satz: f = O(g) g.d.w. limn→∞(f(n)/g(n)) existiert. Bemerkungen: • die O-Notation betrachtet die Funktion asymptotisch • logb x = (logb a) (loga x), deshalb bei O-Notation nur log schreiben (ohne Basis) • O(n) = O(n/2) • O(1) = O(n) = O(nk) = O(2n) (von links nach rechts lesen, "=" bedeutet hier "⊆"). • der Aufwand für Elementarschritt / Elementarspeicherstelle: O(1) (also konstant) Informatik I, Seite 62 Typische Laufzeiten von Algorithmen O(log n): logarithmisch, Suchen in Mengen O(n): lineare Laufzeit, Bearbeitung jedes Elementes einer Menge O(n log n): Gute Sortieralgorithmen O(n2): quadratisch, primitive Sortierverfahren O(nk), k ≥ 2: polymielle Laufzeit: vertretbare Laufzeit O(2n) exponentielle Laufzeit: Backtracking Weitere Notationen: (1) f wächst mindestens so schnell wie g f = Ω (g) (Großomega) g.d.w g = O(f) für untere Schranken (2) f u. g wachsen in etwa gleich schnell f = Θ(g) (Theta), falls g = O(f) und f = O(g) (3) f wächst langsamer als g f = o(g) g.d.w. limn→∞ (f(n)/g(n)) = 0 (4) f wächst schneller als g f = ω (g) g.d.w. g = o(f)