Blitzkurs Theoretische Informatik/ Sprachen allgemein

Aus Wikibooks
Zusammenfassung

Eine Sprache ist eine Menge von Wörtern, ein Wort ist eine Folge von Buchstaben aus einem Alphabet. Ein Alphabet ist eine Menge von Buchstaben. Die Länge von Wörtern bestimmt man mit Betragsstrichen. Das Nullwort heißt Man kann Buchstaben, Wörter und die Elemente von Alphabeten und Sprachen mit dem Konkatenationsoperator verketten. Die Potenzierung ist eine Mehrfachausführung der Konkatenation. Der Kleene-Stern-Operator ist die Vereinigung aller natürlichen Potenzen. Die absteigende Reihenfolge der Priorität dieser Operatoren ist: Potenzierung und Kleene-Stern, Konkatenation, Vereinigung.

Tag 1[Bearbeiten]

Zusammenfassung

Ein Compiler übersetzt Quelltext in ein lauffähiges Programm. Der Compilerbau fällt viel leichter, wenn man das Wissen der Theoretischen Informatik anwenden kann. Grundbegriffe bezüglich Sprachen: Buchstabe Alphabet (Menge von Buchstaben), Wort (Folge von Buchstaben), Sprache (Menge von Wörtern), (Menge aller Wörter über )

Mitte der 50er Jahre baute man den ersten Compiler. Ein Compiler ist ein Computerprogramm, das den Quelltext eines anderen Programms aus einer von Menschen überschaubaren Programmiersprache wie Pascal, BASIC oder C in eine ausführbare Folge von Nullen und Einsen übersetzt. Ein Compiler wandelt also Befehle, die der Programmierer dem Computer mittels einer formalisierten Sprache gibt, in das eigentliche Programm um. Mit dem ersten Compiler gab es erstmals die Möglichkeit, mit dem Computer fast wie mit einem Menschen zu reden und ihm mitzuteilen, was man ausrechnen möchte. Die Sprache, die damals verwendet wurde, heißt FORTRAN und wurde vor allem dafür entwickelt, den Computer als mächtige Rechenmaschine benutzen zu können. FORTRAN ist ein Akronym. Ausgesprochen heißt es formula translation. (englisch für Formelübersetzung)

Diesen Compiler zu bauen, dauerte insgesamt 18 Personenjahre. Heute ist das eine Praktikumsaufgabe für Informatikstudenten. Dieser enorme Effizienzgewinn beruht unter anderem auf dem Fortschritt in der Theoretischen Informatik. Man weiß heute vieles über Programmiersprachen. Man weiß, warum einige Sprachen, wie zum Beispiel Polnisch, nicht geeignet sind, mit dem Computer zu reden, andere dagegen, wie etwa Pascal, aber durchaus.

Dieser Blitzkurs wird zunächst ein paar Worte über Sprachen im Allgemeinen verlieren. Eigentlich ist alles ganz einfach solange man leicht Parallelen zur deutschen Sprache ziehen kann.

Eine Sprache  – mit dem Buchstaben bezeichnet man im Allgemeinen irgendeine ausgedachte Sprache – verfügt über ein gewisses Vokabular. Klar. Wie die Wörter, die die Sprache kennt, im Einzelnen lauten, ist erst einmal egal. Irgendein Wort kann man nennen. Das ist nicht das Wort selbst, sondern nur eine abstrakte Bezeichnung. Da ja nicht alle Wörter heißen können, nummeriert man sie durch:  – falls die jeweilige Sprache zufällig 2 128 verschiedene Wörter kennt. 2 128 Wörter sind nichts als 2 128 Folgen von Buchstaben. Es könnte sein, dass aus den drei Buchstaben und besteht. Der Übersichtlichkeit halber nennt man alle Buchstaben und gibt ihnen eine Nummer. In alter Mathematikermanier kann man den Index, also diese tiefergestellte Zahl, auch weglassen, wenn von einem beliebigen Buchstaben die Rede ist. Zum Beispiel: Das Wort beginnt mit dem Buchstaben und endet mit Das heißt, wir denken uns ein Wort, das mit dem gleichen Buchstaben beginnt, mit dem es endet. Das Wort Lagerregal erfüllt diese Regel, genauso wie Hirsch. Die Länge des Wortes ist nicht bekannt, also egal.

Wie viele verschiedene Buchstaben gibt es eigentlich? Das hängt von der Sprache ab. Zu jeder Sprache gehört ein Alphabet. Man symbolisiert es üblicherweise mit dem griechischen Großbuchstaben Das Alphabet ist eine Menge von Buchstaben

Eine Sprache ist also nichts als die Menge aller Wörter, die man verstehen muss, um von sich behaupten zu können, diese Sprache zu kennen. Üblicherweise verwendet man den Buchstaben um irgendeine Sprache zu bezeichnen. Es gibt eine wichtige Ausnahme von dieser Regel. Wenn man eine Sprache als die Menge sämtlicher Wörter, die man aus einem Alphabet bilden kann, definieren möchte, kann man stattdessen den Kleene-Stern [ˈkliːni] (nach dem Informatiker Stephen Cole Kleene) verwenden:

Das Alphabet besteht, für dieses Beispiel, aus den Buchstaben „A“, „B“, „a“ und „b“. Dann kennt die Sprache die Wörter „“, „A“, „B“, „a“, „b“, „AA“, „AB“, „Aa“, „Ab“, „BA“, „BB“, „Ba“, „Bb“, „aA“, „aB“, „aa“, „ab“, „“bA, „bB“, „ba“, „bb“, „AAA“, „AAB“, … Zur Sprache gehören sämtliche Folgen von Buchstaben des Alphabets Das sind unendlich viele. Auch das Wort, das aus keinem einzigen Buchstaben besteht, gehört dazu. Es sind eben alle Wörter, die mit den Buchstaben des Alphabets auskommen. Auch wenn das Alphabet nur aus einem einzigen Buchstaben besteht, ist die Sprache als Menge aller Wörter eine unendliche Menge.

Übung


Tag 2[Bearbeiten]

Zusammenfassung

ist die Länge von also die Anzahl der Buchstaben. ist 0. Die Konkatenation ist eine Operation, die Wörter aneinander hängt. Dabei ist die Reihenfolge wichtig. Die Konkatenation mit hat keinen Effekt. Präfixe, Suffixe und Infixe sind Anwendungen der Konkatenation.

Gestern hast du das leere Wort kennen gelernt. Das erscheint vielleicht nicht besonders sinnvoll. Aber wenn ein Wort eine Folge von beliebig vielen Buchstaben ist, dann kann es eben auch eine Folge von genau null Buchstaben sein. Das ist wissenschaftliche Exaktheit. Wenn man mit Wörtern rechnet, (Ja, das kommt noch.) dann kann ein Wort aus null Buchstaben ziemlich nützlich sein. Deshalb erhält es ein Symbol. Man bezeichnet das leere Wort normalerweise mit dem griechischen Kleinbuchstaben Epsilon

Über dem Alphabet mit den Buchstaben „A“, „B“, „a“ und „b“ gibt es ganz schön viele Wörter der Länge 50. (gut eine Quintillion) Es gibt sechzehn Wörter der Länge 2: „AA“, „AB“, „Aa“, „Ab“, „BA“, „BB“, „Ba“, „Bb“, „aA“, „aB“, „aa“, „ab“, „“bA, „bB“, „ba“ und „bb“. Es gibt vier Wörter der Länge 1: „A“, „B“, „a“ und „b“. Und es gibt ein Wort der Länge 0: oder „“. Beachte, dass nicht das Wort selbst ist, sondern nur ein Formelzeichen.

Für die Länge eines Wortes gibt es eine einfache Schreibweise mit Betragsstrichen:

  • Wenn aus den Buchstaben und besteht, dann kann man sagen

Jetzt aber zum Rechnen mit Wörtern: Im Deutschen kann man Wörter aneinander hängen, um neue Wörter zu bilden. Aus „kennen“ und „lernen“ wird „kennenlernen“. In der Theoretischen Informatik nennt man das Konkatenation und man verwendet dafür das Multiplikationszeichen: „kennen“ ⋅ „lernen“ = „kennenlernen“. Wenn man mit drei Buchstaben und mit siebzig Buchstaben konkateniert, hat das Ergebnis dreiundsiebzig Buchstaben: Diese Gleichung bedeutet, dass die Länge des Wortes, das bei der Konkatenation von und entsteht, mit der Addition der Länge von und der Länge von ausgerechnet werden kann.

Bei der Konkatenation ist die Reihenfolge der Operanden entscheidend. muss nicht das gleiche sein wie Es gibt nur zwei Ausnahmen: Zum Einen ist die Reihenfolge dann egal, wenn und identisch sind. Zum Anderen könnte aber auch eins der Wörter sein. Egal, ob man oder oder rechnet, das Ergebnis ist immer wieder

Die Konkatenation führt uns zum Thema Affixe. Präfixe und Suffixe kennst du bestimmt. Präfixe sind im Deutschen zum Beispiel „ver-“, „aus-“ und „um-“. Das sind keine ganzen Wörter, sondern Anfangsstücke von Wörtern, die den Wörtern andere Bedeutungen geben. Aus „schieben“ wird „verschieben“, aus „Steuer“ wird „Aussteuer“, aus „formen“ wird „umformen“. Auf der anderen Seite gibt es Suffixe wie „-ung“, „-en“ und „-ig“. Das sind wieder Affixe (Teilwörter), die man an das Ende eines Wortes hängt, um die Bedeutung und in diesem Fall auch die Wortart festzulegen. „Richtung“, „richten“ und „richtig“ sind drei völlig verschiedene Wörter, obwohl der Wortstamm sich nicht ändert. Nur die Suffixe sind unterschiedlich.

Es ist naheliegend, dass es sich beim Anfügen von Affixen um nichts weiter als eine Konkatenation handelt. Dabei ist „Aus“ ein Präfix von „Aussteuer“ und „um“ ein Präfix von „umformen“. „ung“ ist ein Suffix von „Richtung“ und „ig“ ist ein Suffix von „richtig“. „en“ ist sowohl Präfix als auch Suffix von „enthalten“. Das kommt dir vielleicht komisch vor, weil doch eigentlich „ent-“ das Präfix von „enthalten“ ist. Als Informatiker muss man sich bei der Festlegung der Affixe aber nicht unbedingt an die grammatikalischen Gegebenheiten im Deutschen halten. Man kann auch feststellen, dass „vers“ ein Präfix von „verschieben“ und „hten“ ein Suffix von „richten“ ist. Für solch eine Behauptung würde dir jeder Deutschlehrer eine Ohrfeige verpassen, aber in der Theoretischen Informatik kann man das durchgehen lassen. Und es kommt noch besser: „verschieben“ ist sowohl Suffix als auch Präfix von „verschieben“. Nein, das war jetzt kein Tippfehler. „verschieben“ beginnt mit „verschieben“ und „verschieben“ endet mit „verschieben“. Stimmt doch, oder? Wenn du diese seltsame Logik verstanden hast, kannst du weiterlesen: „“ ist sowohl Suffix als auch Präfix von „Fensterkitt“. Das Wort, das aus keinem Buchstaben besteht, ist überhaupt immer Präfix und Suffix von jedem Wort. Kann man so sehen. Versuche einfach, es dir vorzustellen. „Fensterkitt“ beginnt mit keinem Buchstaben. Danach kommt nochmal kein Buchstabe. Dann erst kommt das große „F“.

Nach dem „F“ und vor dem „e“ steht kein Buchstabe. Also ist auch tausendfach Infix von „Fensterkitt“. „pferd“ ist Infix von „Kupferdraht“ und außerdem ist „verschieben“ Infix von „verschieben“. Aber irgendwie ist es doch auch lustig, oder?

Übung


Tag 3[Bearbeiten]

Zusammenfassung

Die Konkatenation, der Kleene-Stern und die Vereinigung kann auf Sprachen angewendet werden.

Lass uns kurz wiederholen: Wenn man von einer Sprache redet, meint man eine Ansammlung von Wörtern. Der Mathematiker hat für ungeordnete Ansammlungen den Begriff Menge. Wenn die Dinge geordnet sind, spricht man dagegen von einer Folge. Eine Sprache ist deshalb eine Menge von Wörtern, weil es egal ist, in welcher Reihenfolge man die Wörter aufschreibt. Die Wörter selbst sind aber keine Mengen, sondern Folgen von Buchstaben, denn es ist überhaupt nicht egal, in welcher Reihenfolge man die Buchstaben aufschreibt. (Wer jetzt an eine gewisse Studie an einer englischen Universität denkt – nein, die Reihenfolge der Buchstaben ist wirklich nicht egal.)

Außer der Tatsache, dass Folgen geordnet sind und Mengen eben nicht, gibt es noch einen weiteren Unterschied: Nur in Folgen können Glieder auch mehrfach vorkommen. Das dürfte leicht nachzuvollziehen sein: Ein Wort als Folge von Buchstaben kann natürlich einzelne Buchstaben mehrmals enthalten. Das Wort „Rentner“ zum Beispiel hat nur einen Buchstaben, der nicht zweimal darin vorkommt. Demgegenüber gibt es aber keinen Grund, weshalb eine Sprache als Menge von Wörtern ein Wort gleich zwei- oder dreimal kennen sollte. Entweder es gibt dieses Wort oder es gibt es nicht. Aus dem gleichen Grund ist übrigens ein Alphabet keine Folge, sondern eine Menge von Buchstaben: Es gibt keine Alphabete, die zweimal den gleichen Buchstaben enthalten. Und es ist auch völlig egal, in welcher Reihenfolge man die Buchstaben eines Alphabets aufschreibt, solange man keinen vergisst.

Um also den Folgen- bzw. Mengenbegriff noch einmal zusammenfassend auf einige bisher gelernte Begriffe anzuwenden:

  • Ein Buchstabe ist irgendetwas, was man nicht definiert.
  • Ein Alphabet ist eine Menge von Buchstaben.
  • Ein Wort ist eine Folge von Buchstaben.
  • Eine Sprache ist eine Menge von Wörtern.

Neben als irgendeiner Sprache hast du auch schon eine ganz bestimmte Sprache kennen gelernt: ist die Menge aller Wörter, die man aus dem Alphabet bilden kann. Jede Sprache über einem Alphabet ist also eine Teilmenge der Sprache Sie ist maximal identisch mit Aber es ist natürlich genauso möglich, dass man sich für ein Alphabet mit sechsundzwanzig Buchstaben eine Sprache ausdenkt, die nur drei Wörter kennt.

Mit Sprachen kannst du nun fast genauso rechnen wie mit Wörtern. Wenn man zum Beispiel die beiden Sprachen und konkateniert, dann lautet das Ergebnis Es passiert hier also nichts anderes als dass alle Wörter der einen Sprache mit allen Wörtern der anderen Sprache konkateniert werden. Beachte, dass dabei wieder die Reihenfolge der Operanden entscheidend ist: ist selten das gleiche wie

Neben der Konkatenation kennst du eine weitere Rechenoperation: den Kleene-Stern. Wenn ein Alphabet ist, dann ist die Sprache mit allen aus den Buchstaben dieses Alphabets gebildeten Wörtern. Den Kleene-Stern kann man aber nicht nur auf Alphabete, sondern auch auf Sprachen anwenden. Nehmen wir für dieses Beispiel die Sprache Dann ist Es handelt sich um eine unendliche Menge, die alle Wörter enthält, die man durch Konkatenation aus den Wörtern der Sprache erhalten kann und außerdem noch das leere Wort

Der Kleene-Stern auf Sprachen angewendet funktioniert also ähnlich wie der Kleene-Stern auf Alphabete angewendet, die du ja schon kennst: Wenn die Menge aller Wörter ist, die man durch Konkatenation aus den Elementen von bilden kann – zuzüglich  –, dann ist ebenso die Menge aller Wörter, die man durch Konkatenation aus den Elementen von bilden kann – zuzüglich Wenn ein Alphabet ist, dann ist eine Sprache. Wenn aber schon eine Sprache ist, dann ist immer noch eine Sprache.

Man kann den Kleene-Stern übrigens auf die Konkatenation zurückführen: ist die Menge aus allen Elementen aus allen Elementen aus allen Elementen aus allen Elementen aus und immer so weiter. Man kann dafür den Begriff der Vereinigung von Mengen benutzen (mathematisches Symbol: ):

Jetzt kennst du schon drei Operationen, die du auf Sprachen anwenden kannst: Konkatenation, Kleene-Stern und Vereinigung (denn Sprachen sind ja strenggenommen auch nur Mengen). Mithilfe dieser Rechenoperationen kannst du recht komplizierte Sprachen formal darstellen. Dazu ein Beispiel:


Hier wird zunächst durch Sternbildung die Sprache geschaffen. Diese Sprache und die Sprache werden anschließend konkateniert, was letztlich auf eine Konkatenation aller Wörter der ersten Sprache mit „a“ hinausläuft. Also enden alle Wörter mit dem Buchstaben „a“. Das Ergebnis wird dann noch einmal mit konkateniert. Es gibt also jetzt von allen Wörtern eine Variante, die auf „a“ endet und eine, die auf „b“ endet. Aber der vorletzte Buchstabe aller Wörter ist immer noch „a“. Wir haben also bis jetzt alle mindestens zwei Buchstaben langen Wörter aus den Buchstaben „a“ und „b“ in einer Sprache zusammengefasst, deren vorletzter Buchstabe ein „a“ ist. Jetzt wird diese aber noch mit der Sprache vereinigt. Das Ergebnis lautet also:

Die Definition bedeutet also, dass die Sprache aus dem Wort „c“ und allen Folgen der Buchstaben „a“ und „b“ besteht, deren vorletztes Glied ein „a“ ist. Nicht schlecht.

Übung


Tag 4[Bearbeiten]

Zusammenfassung

Alphabete, Sprachen, Wörter und Buchstaben können potenziert werden. Der Kleene-Stern kann auf die Potenzierung zurückgeführt werden.

Du hast den Punktoperator (Konkatenation) kennen gelernt. Diese Operation kann man vielseitig einsetzen:

  • Auf Buchstaben eines Alphabetes angewendet kann man damit Wörter bilden:
  • Auf Wörter angewendet kann man längere Wörter bilden:
  • Auf Sprachen angewendet kann man alle Wörter verlängern:

Möglicherweise erinnert dich die Konkatenation an die Multiplikation von Zahlen, vor allem wegen der Schreibweise mit dem mittigen Punkt. Diese Verbindung ist gar nicht so falsch. Genauso wie man die mehrfache Multiplikation einer Zahl mit sich selbst einfacher als Potenz darstellen kann gibt es die Potenzierung auch als Zusammenfassung mehrerer Konkatenationen von Mengen und Folgen: und auch Besonders das letzte Beispiel ist interessant. Die Konkatenation von Alphabeten müsste dir eigentlich neu vorkommen, weil sie noch nie vorher in diesem Kurs erwähnt wurde. Andererseits ist sie aber auch nichts außergewöhnliches. ist einfach die Konkatenation von je zwei Buchstaben. Das Ergebnis ist die Sprache, die alle zweibuchstabigen Wörter über enthält. Für das binäre Alphabet ist das

Lass uns noch ein wenig mit den Potenzen herumspielen: ist in der Mathematik definiert als Also mit 1 kann man immer potenzieren, ohne dass sich an der Zahl etwas ändert. Diese Regel kann man ohne Abstriche in die Theoretische Informatik übernehmen: und

Neben der Potenzierung mit 1 gibt es noch einen weiteren Sonderfall: den der Potenzierung mit 0. steht in jedem Mathebuch. Jede Potenzierung mit 0 ergibt 1, weil 1 das neutrale Element der Multiplikation ist. Wenn man diese Regel auf die Theorie der formalen Sprachen überträgt, lautet sie: Jede Potenzierung mit 0 ergibt (eine Menge, deren einziges Element ist), weil das neutrale Element der Konkatenation von Mengen ist.

Um das kurz zusammenzufassen: ist ist , also einfach die Menge aller Buchstaben oder anders ausgedrückt: die Menge aller Wörter der Länge 1, ist die Menge aller möglichen Konkatenationen von je zwei Buchstaben, also die Menge aller Wörter der Länge 2, ist die Menge aller Wörter der Länge Fällt nicht eine gewisse Ähnlichkeit zum Kleene-Stern auf? Wenn man alle Wörter der Länge 0, alle Wörter der Länge 1, alle Wörter der Länge 2 und so weiter zusammenfasst, also dann erhält man einfach alle Wörter, also Jetzt dürfte dir klar sein, weshalb der Kleene-Stern ausgerechnet ein hochgestellter Stern ist. Der Stern ist ein Platzhalter für alle möglichen Exponenten von 0 bis ∞.

Übung


Tag 5[Bearbeiten]

Zusammenfassung

Die Potenzierung und der Kleene-Stern, die Konkatenation und die Vereinigung haben in dieser Reihenfolge absteigende Priorität. Der Betragsoperator kann auch auf Mengen angewendet werden und bestimmt deren Mächtigkeit.

Das ist der letzte Tag in dieser Wochenlektion und er soll nun genutzt werden, das bisher Gelernte zu systematisieren. Folgende Rechenoperationen sind bekannt:

  • Vereinigung Die Vereinigung kann nur auf Mengen, nicht auf Folgen angewendet werden. Mengen sind Alphabete und Sprachen. Die Vereinigung zweier Mengen enthält alle Elemente der einen sowie alle Elemente der anderen Menge. Das neutrale Element der Vereinigung ist die leere Menge { }. Die Vereinigung einer Menge mit der leeren Menge hat keinen Effekt.
  • Konkatenation Wird die Konkatenation auf Buchstaben und Wörter angewendet, werden die Operanden in der gegebenen Reihenfolge aneinander gehängt. Dabei entstehen immer Wörter, da auch Buchstaben streng genommen nichts als Wörter der Länge eins sind. Das neutrale Element bei der Konkatenation von Wörtern ist das leere Wort Wird diese Operation dagegen auf Alphabete und Sprachen, also Mengen, angewendet, werden die Elemente der Mengen paarweise aneinandergehängt. Das neutrale Element ist hierbei die Menge mit keinen weiteren Elementen außer dem leeren Wort: Außerdem gibt es den Sonderfall der Konkatenation mit der leeren Menge
  • Potenzierung Die mehrfache Konkatenation von Mengen kann zu einer Potenzierung zusammengefasst werden: Das neutrale Element der Potenzierung ist die 1. Die Potenzierung mit 0 ergibt Die Potenzierung kann nicht auf Folgen angewendet werden.
  • Kleene-Stern Der Kleene-Stern ist die Vereinigung aller Potenzierungen.

Dabei lässt sich die Vereinigung mit der Addition, die Konkatenation mit der Multiplikation und die Potenzierung und der Kleene-Stern mit der klassischen Potenzierung vergleichen, zumindest hinsichtlich ihrer Wertigkeit. Die Gleichung kommt auch völlig ohne Klammern aus:

Bei der Nennung der Operatoren fiel bislang oft einer unter den Tisch, der tatsächlich eine Sonderstellung einnimmt: Der Betragsoperator, mit dem man unter anderem die Länge eines Wortes bestimmt. Wenn irgendwo steht dann weißt du, dass das Wort aus zwölf Buchstaben besteht. Was du bis jetzt noch nicht weißt, aber gleich erfahren wirst, ist, dass man den Betragsoperator auch auf Mengen anwenden kann. Man bestimmt dann, aus wie vielen Elementen die Menge besteht oder, etwas elaborierter ausgedrückt, wie mächtig die Menge ist. heißt, dass das Alphabet 26 Buchstaben hat und heißt, dass die Sprache doppelt so viele Wörter wie das Alphabet Buchstaben hat.

So viel zum Thema Sprachen allgemein. Beschäftige dich bitte morgen, wenn nicht morgen und übermorgen, noch mit dieser Wochenlektion und dem dazugehörigen Rückblick bevor du mit der neuen Wochenlektion anfängst. Es heißt, man muss eine Sache elfmal gehört haben, damit man sie nicht mehr vergisst. Es klingt vielleicht paradox, aber wenn du schnell vorankommen willst, musst du dein Tempo drosseln.

Rückblick[Bearbeiten]

Diese Rückblick-Abschnitte sollen dir nicht nur helfen, dein erworbenes Wissen zu festigen, sondern sie sollen dir auch die Möglichkeit geben, zu testen, wie souverän du bereits entsprechende Fragestellungen lösen kannst. Es handelt sich hierbei um eine Ansammlung von Übungen. Versuche zuerst, die Aufgaben selbst zu lösen bevor du dir die Lösungen ansiehst.

Übung