Sprachen und Programmiersprachen • Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen • Syntax legt die grammatikalische Korrektheit fest. • Semantik legt die Bedeutung von syntaktisch korrekten Wörtern/Sätzen fest. • Natürliche Sprachen sind in der Regel mehrdeutig: • „Öffne die Datei mit dem Editor“ • Der Satzteil „mit dem Editor“ kann hier als Attribut des Objekts „Datei“ oder als adverbiale Bestimmung des Verbs „Öffne“ verstanden werden. • Formale Sprachen sind dadurch gekennzeichnet, dass Syntax und Semantik eindeutig sind (und damit einer automatische Verarbeitung zugänglich sind). Der Trick dabei ist in der Regel ein geringer Sprachumfang (wenig Syntaxregeln). DigInf 05/06 1 Übersicht über die Entwicklung von Programmiersprachen Zeit Objektorientierte Sprachen Bspe: C++, Smalltalk, Eiffel, Java Funktionale Sprachen Bspe: LISP, ML, Miranda Konstrukte: Funktionen Logische Sprachen Bsp: Prolog Konstrukte: Fakten, Regeln Imperative / Prozedurale Sprachen Bspe: Fortran, Cobol, Algol, PL1, Ada, C Prozeduren, while, case, if Assembler Bspe: RS600-Assembler Konstrukte: MV, ADD, GET) Vorgängerbeziehung Maschinensprache 001001 DigInf 05/06 2 Übersicht über die Entwicklung von Programmiersprachen DigInf 05/06 3 Programmiersprache Hinweis: „formal“ meint hier syntaktisch formal. DigInf 05/06 4 Operationen auf Wörtern / Verketten DigInf 05/06 5 Klassen von unendlichen Sprachen • Die Menge V* aller Wörter über einem Alphabet V ist immer unendlich, sie ist also unabhängig vom zugrundeliegenden Alphabet immer eine unendliche Sprache. • Wir unterscheiden: • abzählbare Sprachen • überabzählbare Sprachen DigInf 05/06 6 Abzählbare Sprachen • Die Abzählbarkeit einer Menge kommt dadurch zum Ausdruck, dass man vom ersten, zweiten, etc. Element sprechen kann. • Es muss also möglich sein, die natürlichen so auf die Elemente der Menge zu verteilen, dass keines der Elemente ohne Nummer bleibt. • Definition: (Abzählbarkeit) • Eine Menge M ist abzählbar, falls es eine Funktion f: Nat M gibt, die surjektiv (d.h. alle Elemente von M kommen als Bildelement vor) oder falls M die leere Menge ist. DigInf 05/06 7 Abzählbare Sprachen • Die Menge der rationalen Zahlen ist abzählbar (Beweis mit Cantorschem Diagonalverfahren) • Beweis in der Vorlesungseinheit 2! • Die Menge der reellen Zahlen ist nicht abzählbar. • Beweis in der Vorlesung. Folgende Beweisschritte: • Einschränkung von Nat auf das Intervall [0,1) • Kodierung jeder reellen Zahl r durch eine Abbildung r: Nat\{0} {0,1, ..., 9} • Annahme einer surjektiven Abbildung von Nat auf [0,1) • Visualisierung durch Tabelle in der allen reellen Zahlen des Intervalls stehen (angegeben durch ihre Nachkommastellen) • Konstruktion der rellen Zahl diag aus dem Intervall • Nachweis, dass diag nicht in der Tabelle steht DigInf 05/06 8 Abzählbare Sprachen Satz: Alle Sprachen über endlichen Alphabeten sind abzählbar. 1. Schritt des Beweises: Die Menge V* aller Wörter über einem Alphabet V ist abzählbar. 2. Schritt des Beweises: Jede Teilmenge M´ einer abzählbaren Menge M ist abzählbar. 1. Beweisschritt: • Sei V={x1, ..., xn}. << sei eine Ordnungsrelation auf V, ohne Beschränkung der Allgemeinheit nehmen wir an: x1 << ...<< xn. • Wir ordnen V* gemäß der Länge der Wörter. Wörter gleicher Länge werden lexikographisch geordnet (also „alphabetisch“ sortiert). Damit gibt es eine Reihenfolge aller Wörter. Und damit ist V* abzählbar. DigInf 05/06 9 Abzählbare Sprachen 2. Beweisschritt: Sei M abzählbar und f: Nat M die nach Definition existierende surjektive Funktion. Wir definieren f´: Nat M´ durch: f´(n) = f(n), falls f(n) M´ = mit M´ beliebig gewählt, falls f(n) M´ Da f surjektiv ist, kommen alle Elemente von M´ als Bildelemente von f vor. Diese sind aber auch Bildelemente von f´ (Fall f(n) M´). Und damit ist f´ surjektiv. Und damit ist f´ eine Abzählung. DigInf 05/06 10 Aufzählbare Sprachen Definition: (Überabzählbarkeit) • Wenn eine Menge M so viele Element hat (so dicht ist), dass sie nicht mehr durchnummeriert werden kann (also wenn sie nicht abzählbar ist), dann heißt sie überabzählbar. Definition: (Aufzählbarkeit) • Eine Menge M heißt aufzählbar, falls es eine surjektive Funktion f: Nat M gibt und einen Algorithmus, der es gestattet, für jedes n Nat den Funktionswert f(n) zu berechnen. Die leere Menge heißt auch aufzählbar. • Die Menge {f(0), f(1), ..., f(n)} heißt Aufzählung von M. • Hinweis: Aufzählbarkeit fordert mehr als Abzählbarkeit, denn es muss zusätzlich den Algorithmus geben! • DigInf 05/06 11 Aufzählbare Sprachen • Satz: Jede endliche Menge ist aufzählbar. • Beweis: Sei M={m0, ..., mk} eine endliche Menge. Ein Programm zur Aufzählung von M kann nach folgendem Prinzip realisiert werden: Abhängig vom Eingabeparameter n = 0,1,2, ... wird mithilfe geeigneter Fallunterscheidungen für n<k das Ergebnis f(n)=mn zurückgegeben, für nk wird generell mk als Ergebnis gewählt. DigInf 05/06 12 Aufzählbare Sprachen • Satz: Sei V ein Alphabet. Dann ist die Menge V* aller Wörter über V aufzählbar. (Hinweis: V ist nicht notwendigerweise endlich!) • Beweis: Erzeuge , dann die Wörter der Länge 1, dann die Wörter der Länge 2, und so weiter, bei gleicher Länge in lexikographischer Reihenfolge. Für eine beliebige natürliche Zahl n ergibt sich f(n) aus dem n-ten Schritt dieses Verfahrens. • Betrachtung: Jede aufzählbare Sprache ist offensichtlich auch abzählbar. Umgekehrt gilt das nicht! DigInf 05/06 13 Entscheidbarkeit • Mit einer Aufzählung für eine Sprache kann man für jedes Wort der Sprache nach endlich vielen Schritten nachweisen, dass das Wort zu der Sprache gehört, denn bei der Aufzählung wird es ja nach endlich vielen Schritten erzeugt. • Hat man aber ein Wort gegeben, das nicht Element der Sprache ist, so kann man dies, falls die Sprache unendlich viele Wörter enthält, mit einer Aufzählung der Sprache nicht nachweisen. Denn dann läuft das Verfahren unendlich lang. Und wir wissen nach endlicher Zeit nicht, ob das Wort vielleicht später doch noch erzeugt wird. • Beispiel: Compiler soll entscheiden, ob eine Eingabe ein gültiges Programm ist. Dieses Problem lässt sich durch Aufzählung aller gültigen Programme nicht sinnvoll lösen! • Da uns solche Probleme in der Informatik öfter begegnen, sind die entscheidbaren Sprachen besonders interessant! DigInf 05/06 14 Entscheidbarkeit Definition: (Entscheidbarkeit) • Gegeben sei ein Alphabet V. Eine Sprache L V heißt entscheidbar, falls es einen abbrechenden Algorithmus, Entscheidungsverfahren genannt, gibt, der für jedes w V feststellt, ob w L oder w L. DigInf 05/06 15 Beispiel zur Entscheidbarkeit Alphabet: V = {a} Sprache: LV* mit L = {a2n | n Nat} Entscheidungsverfahren: Sei w V* beliebig gegeben. Streiche nach und nach immer wieder aa aus Wort w raus. Bleibt kein a übrig, gilt w L, sonst nicht. Bemerkungen: Offensichtlich ist jede endliche Sprache entscheidbar. Denn jedes zu prüfende Wort lässt sich mit allen Wörtern der Sprache vergleichen. DigInf 05/06 16 Entscheidbarkeit Satz: Jede entscheidbare Sprache ist aufzählbar. Beweis: Sei V ein Alphabet und L V* entscheidbar. Zähle V* auf und entscheide mit dem Entscheidungsverfahren für jedes bei der Aufzählung erzeugte w V*, ob w L oder w L. Übergeht man alle w L, so erhält man eine Aufzählung für L. Hinweis: Aus der Aufzählbarkeit einer Sprache folgt nicht die Entscheidbarkeit. Die Schwierigkeit liegt darin, für diejenigen Wörter eine Entscheidung zu treffen, die nicht in der Sprache enthalten sind. Man kann sich durch eine Aufzählung so viele Wörter anschauen wie man möchte, sie werden nicht dabei sein. Sie könnten aber prinzipiell ja später noch auftauchen. DigInf 05/06 17 Entscheidbarkeit Eine aufzählbare, aber nicht entscheidbare Sprache: Wenn man Computerprogramme und Eingaben für Computerprogramme als Wörter über einem Alphabet wie ASCII auffasst, so ist die Sprache L ASCII*, mit L = {xy | x ist ein Programm, y ist eine Eingabe, und x stoppt bei der Eingabe y nach endlich vielen Schritten} zwar aufzählbar, aber nicht entscheidbar. Dies folgt unmittelbar aus dem schon diskutierten Halteproblem. DigInf 05/06 18 Zusammenfassendes Mengendiagramm DigInf 05/06 19 Wieviele Probleme kann der Computer lösen? • ASCII ist ein endliches Alphabet. Also, lassen sich nur abzählbar viele Programme formulieren. • Eine einfache überabzählbare Menge von Problemen besteht darin, für jede reelle Zahl r die folgende Funktion fr: reelle Zahlen -> {0,1} zu berechnen: fr(x) = 1, falls x=r fr(x) = 0, sonst • Folglich ist nur eine verschwindend geringe Zahl von Funktionen berechenbar (ungefähr so wenige wie rationale Zahlen im Verhältnis zu reellen Zahlen existieren). DigInf 05/06 20 Grammatiken Definition: (Grammatik) Eine Grammatik ist ein Quadrupel G = (VN, VT, P,S) mit VN, VT sind endliche, nichtleere Mengen mit VN VT =. VN ist die Menge der nichtterminalen Symbole. VT ist die Menge der terminalen Symbole P ist eine endliche Menge von Regeln der Form mit (VN VT)+, (VN VT). Die Elemente von P werden Produktionen, Produktuionsregeln oder Grammatikregeln genannt. S VN ist das Startsymbol. DigInf 05/06 21 Grammatiken • Terminalsymbole beschreiben Symbole, die in den Sätzen der Sprache vorkommen. • Nicht-Terminalsymbole kommen nicht in den Sätzen der Sprache vor. Sie werden gebraucht, um die Anwendung der Ableitungsregeln zu koordinieren. • Das Startsymbol ist ein ausgezeichnete NichtTerminalsymbol. Es legt fest, mit welcher Ableitungsregel begonnen wird, um zu einem syntaktisch korrekten Satz der Sprache zu kommen. • Die Ableitungsregeln legen fest, wie eine Sequenz von Nicht-Terminal- und Terminalsymbolen durch eine Folge anderer Terminalsymbole und Nicht-Terminalsymbole ersetzt werden kann. DigInf 05/06 22 Produktionen Beispiel einer Produktion: • einfacher-deutscher-Satz = Subjekt Prädikat Objekt [adverbiale-Bestimmung] • Subjekt = Nomen | Personalpronomen • Personalpronomen = Ich | Du | ... • • • • • {} steht für 0 bis n-fache Wiederholung [] steht für Optionalität (0 oder einfaches Vorkommen) | trennt Varianten voneinander fett: Terminalsymbole, kursiv: Nicht-Terminalsymbole DigInf 05/06 23 Ableitungen Definition: (Ableitung) • DigInf 05/06 24 Erzeugte Sprache Definition: (Erzeugte Sprache) Die von der Grammatik G = (VN, VT, P,S) erzeugte Sprache * L(G) = {x VT* | S x} Die Wörter der von der Grammatik erzeugten Sprache werden auch als die grammatikalisch korrekten Wörter bezeichnet. Definition: (Äquivalenz von Grammatiken) Zwei Grammatiken G1 und G2 heißen äquivalent, falls gilt: L(G1) = L(G2) DigInf 05/06 25