Theoretische Informatik und Logik Homepage zu dieser LVA: http://www.logic.at/lvas/wiki/185263 Bernhard Gramlich, [email protected] Marion Oswald, [email protected] 1 Vorlesungsteil Vorlesungtermine: Do, 18:15—19:45, HS 5 Fr, 15:15—16:45, Inf HS Ausnahmen: Fr, 7.10., 15:15—16:45, HS 5 Fr, 21.10., 15:15—16:45, HS 6 2 Übungsteil • Übungsgruppen (UE) — betreut von TutorInnen — Anmeldung ab nächster Woche im TUWEL — Erste Übungseinheit: 19.10./20.10. 2011 — WICHTIG: Ankreuzen und uploaden (pdf) der Übungsbeispiele im TUWEL (Termine beachten!) — Übungsbeispiele rechtzeitig auf Homepage bzw. im TUWEL • Abgabegespräche (AG) — bei LVA-Leitern — Anmeldung im TUWEL — Termine: KW 46 bzw. KW 50/51 — Übungsbeispiele rechtzeitig auf Homepage bzw. im TUWEL 3 Beurteilung Übung (max. 40 Punkte) • Übungsgruppen (UE) — 6 UE-einheiten — 4 Beispiele pro Einheit — Punkte pro Einheit: 0-4 • Abgabegespräche (AG) — 2 Abgabegespräche — 4 Beispiele pro AG — Punkte pro AG: 0-8 4 Beurteilung Vorlesungprüfung (max. 60 Punkte) • Haupttermin: Do 19.01.12, 18:15-20:15, Anmeldung (TISS)! • 3 Ersatztermine im Sommersemester • Voraussetzung: positiver UE-teil — mindestens 1 Punkte pro AG — mindestens 10 Punkte in UE 1-3 und AG1 — mindestens 10 Punkte in UE 4-6 und AG2 5 Gesamtnote Gesamtpunkte Note 100 − 86 1 85 − 71 2 70 − 61 3 60 − 51 4 50 − 0 5 6 Unterlagen • Skriptum • Vorlesungsfolien • Bücher für ersten Teil: — P.Linz: An Introduction to Formal Languages and Automata. Jones and Bartlett Publishers Inc., 2001. — J.Hopcroft, R.Motwani, J.Ullman: Einführung in die Automatentheorie, Formale Sprachen und Komplexitätstheorie. Pearson Studium, 2002. Weitere Literatur: siehe Homepage der Lehrveranstaltung. Weitere Informationen • Primäre Anlaufstelle für Fragen: http://www.logic.at/lvas/wiki/185263 • TU-Help-Form: www.informatik-forum.at 7 Lehrziel und Inhalt Ziel: Vermittlung von Grundbegriffen der theoretischen Informatik und der Logik, Einführung in ihre mathematisch-formale Methodik. Inhalt: • Formale Sprachen und Automaten • Aussagenlogik • Prädikatenlogik 8 Formale Sprachen und Automaten Inhalt • Grundlagen • Reguläre Sprachen: reguläre Mengen, reguläre Ausdrücke (Algebra, EBNF, grep), Syntaxdiagramme • Endliche Automaten (EA): reguläre Menge → NEA → DEA → reguläre Menge • Grammatiken, Chomsky-Hierarchie • Turingmaschinen • Grenzen der Berechenbarkeit, (Un)Entscheidbarkeit • Weiterführende Themen 9 Was sind formale Sprachen? Formale Sprache: (un)endliche Menge von endlichen Zeichenketten Beispiele: Programmiersprachen (C, Java, . . . ) Markup-Sprachen (Html, . . . ) Kommunikationsprotokolle Terme prädikatenlogische Formeln Warum formale Spezifikation? Referenz für Anwender, Implementierer, Auftragnehmer/geber Automatische Programmgenerierung: Compilergeneratoren Formale Verifikation (Korrektheit, Deadlockfreiheit, . . . ) Automatisches Beweisen Kriterium für Spezifikationsmethode: Endlichkeit 10 Beispiele für Spezifikationsmethoden Reguläre Ausdrücke: DOS: dira*.exe Unix: ^[0-9]+\.[0-9]*(E[+-]?[0-9]+)?$ Syntaxdiagramme: digit digit . ScaleFactor 11 Automaten: digit digit q0 q1 q4 +, − digit digit digit . digit E q2 q3 q5 Grammatik: Satz → HwP ZwP HwP → Art Hw ZwP → Hzw HwP Zw Art → der | das Hw → Student | Skriptum Hzw → wird Zw → lesen 12 Grundlagen: Wörter Alphabet: endliche, nicht-leere Menge atomarer Symbole (Σ, T ). Wort über Σ: endliche Folge von Symbolen aus Σ. Länge eines Wortes w über Σ (geschrieben |w|): Anzahl der Symbole, die w enthält. Für ein Wort w (über Σ) der Länge n schreiben wir auch w = a1 a2 . . . an wobei jedes ai ∈ Σ Wort mit der Länge 0: Leerwort, geschrieben ε, d.h. |ε| = 0 13 Konkatenation: Hintereinanderschreiben von Wörtern Seien x, y Wörter mit |x| = n, |y| = m, dann ist x · y = xy |xy| = n + m Achtung: x · y = y · x Potenzbildung: Verkettung eines Wortes w mit sich selbst · . . . · w wk = w · w k w0 = ε wn = w · wn−1 14 Grundlagen: Sprachen Σ+ : Menge aller Wörter über Σ. Σ∗ : Menge aller Wörter (inklusive ε) über Σ. Formale Sprache: beliebige Teilmenge L von Σ∗ L ⊆ Σ∗ Es gilt: + Σn Σ = wobei Σn = {s1 · · · sn | si ∈ Σ, 1 ≤ i ≤ n} n≥1 Σ∗ = Σ+ ∪ {ε} Σ∗ , ·, ε bildet Monoid. 15 Spezielle Eigenschaften von Wörtern Für ein Wort w ∈ Σ∗ , wobei w = xuy für Wörter x, u, y ∈ Σ∗ heißt x Präfix, u Teilwort und y Suffix von w. Für ein Wort w ∈ Σ∗ und ein Symbol a ∈ Σ bezeichnen wir die Anzahl der Symbole a in w mit |w|a Sei w = a1 a2 . . . an−1 an . Dann ist wr = an an−1 . . . a2 a1 das Spiegelbild von w. Ein Wort w heißt Palindrom, wenn w = wr gilt. 16 Operationen auf Sprachen P(Σ∗ ): Menge aller Sprachen L ⊆ Σ∗ . Konkatenation von Sprachen L1 , L2 : L1 · L2 = {w1 · w2 | w1 ∈ L1 , w2 ∈ L2 } Potenzbildung einer Sprache L: L0 = {ε} und Ln+1 = L · Ln für n ≥ 0. ∗ L = Ln n≥0 + L = Kleene-Stern“ ” Ln n≥1 P(Σ∗ ), ·, {ε} bildet Monoid. 17 Rechenregeln für Sprachoperatoren A · (B · C) = (A · B) · C A · (B ∪ C) = A · B ∪ A · C Assoziativität von· Distributivität von· (B ∪ C) · A = B · A ∪ C · A Distributivität von· (A ∪ {ε})∗ = A∗ {ε} · A = A (A∗ )∗ = A∗ A · {ε} = A A · A∗ = A+ {} · A = {} A∗ · A = A+ A · {} = {} A+ ∪ {ε} = A∗ P(Σ∗ ), ∪, ·, {}, {ε} bildet nichtkommutativen Semiring. 18 Reguläre Sprachen • Gebildet durch Vereinigung, Konkatenation und Stern • Äquivalent: endliche Automaten, reguläre Grammatiken Anwendungen in der Informatik: • Compilerbau: Tokens bilden reguläre Sprache, verarbeitet durch Scanner (Lexer). Reguläre Ausdrücke dienen als Eingabe für Scannergeneratoren (lex, flex). • Texteditoren: erweiterte Suche • DOS, Unix-Shells, grep, awk, Perl, Xml, . . . 19 Induktive Definition Gegeben: Grundmenge A0 ⊆ B, Bildungsregel f : B n → B Stufenweise Konstruktion von Mengen: Ai+1 = Ai ∪ {f (e1 , . . . , em ) | e1 , . . . , em ∈ Ai } Limes von Ai für i nach unendlich: A = Ai i≥0 Definition. A heißt abgeschlossen unter f , wenn gilt: x1 , . . . , xn ∈ A ⇒ f (x1 , . . . , xn ) ∈ A 20 Beispiel: B = N, A0 = {0}, f : N → N, f (n) = n + 2. Ai+1 = Ai ∪ {f (n) | Ai ∈ N | } A = i≥0 Ai (gerade Zahlen) A0 = {0}, A1 = {0, 2}, A2 = {0, 2, 4}, ... 21 Satz. (a) A ist abgegeschlossen unter f . (b) Ist A′ abgeschlossen unter f und gilt A0 ⊆ A′ ⊆ B, dann gilt A ⊆ A′ . D.h.: A ist die kleinste Menge, die A0 enthält und abgeschlossen ist unter f . Schema der induktiven Definition A ist die kleinste Menge, für die gilt: (a) A0 ⊆ A (b) x1 , . . . , xn ∈ A ⇒ f (x1 , . . . , xn ) ∈ A (A ist abgeschlossen unter f ) 22 Definition. Die Menge Lreg (Σ) der regulären Mengen (Sprachen) über Σ ist die kleinste Menge, sodass (a) {}, {a} ∈ Lreg (Σ) für alle a ∈ Σ (b) A, B ∈ Lreg (Σ) ⇒ A ∪ B, A · B, A∗ ∈ Lreg (Σ) Beispiel. Real-Zahlen digit = {0, . . . , 9} scale = {E, E+, E−} · digit + real = digit + · {.} · digit ∗ · ({ε} ∪ scale) 23 Algebraische Notation s statt {s} für s ∈ Σ ε statt {ε} ∅ statt {} ∗ L1 + L2 statt L1 ∪ L2 L1 L2 statt L1 · L2 L∗ bleibt L∗ hat die höchste Priorität, + die niedrigste. Beispiel. Real-Zahlen (algebraisch) digit = 0 + ··· + 9 scale = E (ε + + + −) digit digit ∗ real = digit digit ∗ . digit ∗ (ε + scale) 24 EBNF-Notation EBNF reg. Menge Kommentar AB A·B Aufeinanderfolge A|B A∪B Alternativen [A] {ε} ∪ A {A} A∗ Wiederholung (A) (A) Gruppierung "s" {s} s∈Σ Option Beispiel. Real-Zahlen (EBNF) real = digit {digit} "." {digit} [scale] scale = "E" ["+"|"-"] digit {digit} digit = "0"|"1"|"2"| · · · |"9" 25 Syntaxdiagramme Syntaxdiagramm A s A A A B A B A reg. Menge EBNF A A {s} "s" A+ A{A} A∗ {A} A·B AB A∪B A|B A ∪ {ε} [A] 26 Beispiel. Real-Zahlen (Syntaxdiagramm) real digit digit . scale + E digit 27 scale digit 0 1 .. .. .. . . . 9 Reguläre Definitionen Verwendung von Abkürzungen für reguläre Teilausdrücke. Erhöht nicht die Ausdruckskraft. Bessere Strukturierung, bessere Lesbarkeit. Keine direkte oder indirekte Rekursivität: digit = {0, . . . , 9}, digits = digit · digits ∪ {ε} ist nicht zulässig! 28 egrep unter Unix Ausdruck selektiert s Zeichen s (kein Spezialsymbol) \s Zeichen s . alle Zeichen außer Zeilenende ^ Zeilenanfang $ Zeilenende [s1 · · · sn ] alle Zeichen in {s1 , . . ., sn } [^s1 · · · sn ] alle Zeichen außer {s1 , . . ., sn } r* null Mal oder öfter r r+ ein Mal oder öfter r r? null oder ein Mal r 29 Ausdruck selektiert r{i} i Mal r r{i,} i Mal oder öfter r r{i,j} i bis j Mal r r1 r2 r1 gefolgt von r2 r1 |r2 r1 oder r2 (r) r Beispiel. Real-Zahlen (egrep) ^[0-9]+\.[0-9]*(E[+-]?[0-9]+)?$ 30