Literatur |
M. Sipser(2012). Introductiontothe Theory of Computation. 3.Aufl. Cengage Learning
Das Standardwerk aus dem angelsächsischen Raum und daher in Englisch verfasst. Unser Skriptum ist stark an diesem Buch orientiert und für einige Beweise wird darauf verwiesen. Das Buch enthält eine Vielzahl an Beispielen und Übungen und ist umfangreich illustriert.
D. Hoffmann (2015). Theoretische Informatik, Hanser
Prof. Ertel hält die Vorlesung Theoretische Informatik nach diesem Buch. Neben den Themen aus diesem Skript enthält es auch ein Kapitel über Logik. Es behandel Formale Sprachen und Endliche Automaten sequenziell, wohingegen wir beide Theorien parallel aufbauen. |
Lernziele |
Ziel des Faches Theoretische Informatik ist es, die theoretischen Grundlagen von Logik, formalen Sprachen, Automaten, Berechenbarkeit und Komplexitätstheorie zu vermitteln.
Die Prädikatenlogik als wichtige Grundlage für formale Verfahren in Programmverifikation, Hardwaredesign und künstlicher Intelligenz wird von Grund auf als formale Sprache mit deklarativer Semantik eingeführt. Der für automatische Beweiser und Verifikationssysteme wichtige Resolutionskalkül wird ausführlich behandelt.
Es wird ein vertieftes Verständnis von formalen Sprachen und Maschinenmodellen als Voraussetzung für die Entwicklung von Suchmaschinen, Lexern, Parsern und Compilern vermittelt. Weiter werden die Grenzen der Berechenbarkeit erlernt. Die Studierenden sollen verstehen, dass es Funktionen gibt, die ein Computer prinzipiell nicht berechnen kann. Die berechenbaren Sprachen werden schließlich in der Komplexitätstheorie in Klassen eingeteilt.
Im Einzelnen werden folgende Kompetenzen vermittelt:
- Die Chomsky-Hierarchie verstehen. Formale Sprachen mit Hilfe von Grammatiken erzeugen können. Zentrale Ergebnisse zu regulären und kontextfreien Sprachen beherrschen und nutzen können, insbesondere Pumping-Lemmata, reguläre Ausdrücke und CYK-Algorithmus. Anwendungsmöglichkeiten formaler Sprachen wiedergeben können. Abschlusseigenschaften und Entscheidbarkeitsergebnisse für die verschiedenen Sprachtypen kennen.
- Zentrale Ergebnisse zu endlichen Automaten und Kellerautomaten verstehen und anwenden können. Weitere Automatenmodelle kennen lernen und verwenden können.
- Verschiedene Konzepte und Varianten von Turingmaschinen und deren Ausdrucksmächtigkeit erlernen und anwenden können. Zusammenhänge verschiedener Berechenbarkeitsbegriffe und Programmiersprachenkonzepte erlernen. Zusammenhang von Turingmaschinen und Computern sowie die Church'sche These verstehen. Zentrale Entscheidbarkeitsbegriffe und deren Zusammenhänge herleiten können. Grenzen der Berechenbarkeit bzw. algorithmischen Lösbarkeit und das Halteproblem verstehen. Unentscheidbarkeit von Problemen mit Reduktion beweisen können.
- Algorithmische Komplexität nach dem O-Kalkül beherrschen. Zentrale Ergebnisse zu Komplexitätsklassen für Probleme (Komplexitätstheorie) erlernen. Grenzen der effizienten Berechenbarkeit und das SAT-Problem verstehen. NP-Vollständigkeit von Problemen mit polynomieller Reduktion beweisen können.
- Zentrale Ergebnisse zu Aussagenlogik und Beweisverfahren verstehen. Die Prädikatenlogik erlernen. Den Resolutionskalkül beherrschen. Grenzen der Logik kennen lernen.
|