Shopy 101
← Sprachen allgemein Sign in to download
\\varepsilon: |\\varepsilon| = 0.</math> Man kann Buchstaben, Wörter und die Elemente von Alphabeten und Sprachen mit dem Konkatenationsoperator <math>\\cdot</math> verketten. Die Potenzierung <math>X^y</math> ist eine Mehrfachausführung der Konkatenation. Der Kleene-Stern-Operator <math>X^\\star</math> ist die Vereinigung aller natürlichen Potenzen. Die absteigende Reihenfolge der Priorität dieser Operatoren ist: Potenzierung und Kleene-Stern, Konkatenation, Vereinigung."}},"i":0}}]}'> 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  :|\varepsilon |=0.} {\displaystyle \varepsilon :|\varepsilon |=0.} Man kann Buchstaben, Wörter und die Elemente von Alphabeten und Sprachen mit dem Konkatenationsoperator {\displaystyle \cdot } verketten. Die Potenzierung {\displaystyle X^{y}} ist eine Mehrfachausführung der Konkatenation. Der Kleene-Stern-Operator {\displaystyle X^{\star }} ist die Vereinigung aller natürlichen Potenzen. Die absteigende Reihenfolge der Priorität dieser Operatoren ist: Potenzierung und Kleene-Stern, Konkatenation, Vereinigung.

Tag 1

a,</math> Alphabet <math>\\Sigma</math>'' (Menge von Buchstaben), ''Wort <math>w</math>'' (Folge von Buchstaben), ''Sprache <math>L</math>'' (Menge von Wörtern), <math>\\Sigma^*</math> (Menge aller Wörter über <math>\\Sigma</math>)"}},"i":0}}]}'> 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 {\displaystyle a,} Alphabet {\displaystyle \Sigma } (Menge von Buchstaben), Wort {\displaystyle w} (Folge von Buchstaben), Sprache {\displaystyle L} (Menge von Wörtern), {\displaystyle \Sigma ^{*}} (Menge aller Wörter über {\displaystyle \Sigma })

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 {\displaystyle L} – mit dem Buchstaben {\displaystyle L} 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 {\displaystyle w} nennen. Das ist nicht das Wort selbst, sondern nur eine abstrakte Bezeichnung. Da ja nicht alle Wörter {\displaystyle w} heißen können, nummeriert man sie durch: {\displaystyle w_{1},w_{2},w_{3},\ldots w_{2127},w_{2128}} – falls die jeweilige Sprache zufällig 2128 verschiedene Wörter kennt. 2128 Wörter sind nichts als 2128 Folgen von Buchstaben. Es könnte sein, dass {\displaystyle w_{366}} aus den drei Buchstaben {\displaystyle a_{1},} {\displaystyle a_{2}} und {\displaystyle a_{3}} besteht. Der Übersichtlichkeit halber nennt man alle Buchstaben {\displaystyle a} 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 {\displaystyle w} beginnt mit dem Buchstaben {\displaystyle a} und endet mit {\displaystyle a.} 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 {\displaystyle a} 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 {\displaystyle \Sigma .} Das Alphabet {\displaystyle \Sigma } ist eine Menge von Buchstaben {\displaystyle a.}

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 {\displaystyle L,} 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 {\displaystyle \Sigma } besteht, für dieses Beispiel, aus den Buchstaben „A“, „B“, „a“ und „b“. Dann kennt die Sprache {\displaystyle \Sigma ^{\star }} 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 {\displaystyle \Sigma ^{\star }} gehören sämtliche Folgen von Buchstaben des Alphabets {\displaystyle \Sigma .} 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 {\displaystyle \Sigma ^{\star }} als Menge aller Wörter eine unendliche Menge.

w</math> ist eine geordnete Folge von <math>a.</math>“, „Ein <math>\\Sigma</math> ist eine ungeordnete Menge von <math>a.</math>“, „Ein <math>L</math> ist eine geordnete Folge von <math>\\Sigma.</math>“, „Ein <math>L</math> ist eine ungeordnete Menge von <math>w.</math>“\n"},"2":{"wt":"Der Satz „Ein <math>L</math> ist eine geordnete Folge von <math>\\Sigma.</math>“ ist falsch. Diese Aussage bedeutet, dass eine Sprache eine Aneinanderreihung von Alphabeten wäre. Das ist natürlich Quatsch. Eine Sprache <math>L</math> definiert sich durch die Wörter, die zu ihr gehören. Anders ausgedrückt: „Ein <math>L</math> ist eine Menge von <math>w.</math>“\n\n"},"3":{"wt":"''<math>\\Sigma_b = \\{0; 1\\}</math> nennt man das ''binäre Alphabet.'' Welche Wörter kennt die Sprache <math>\\Sigma_b^\\star</math>?\n"},"4":{"wt":"„“, „0“, „1“, „00“, „01“, „10“, „11“, „000“, „001“, …\n\n"},"5":{"wt":"Wenn <math>\\Sigma = \\{ \\text{a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z} \\},</math> welches der folgenden Wörter gehört dann nicht zur Sprache <math>\\Sigma^\\star</math>?:<br/ >\n„monatlich“, „sichtbar“, „verlängern“, „quer“, „jxq“, „manchmal“\n"},"6":{"wt":"„verlängern“ gehört nicht dazu, denn es enthält mit „ä“ einen Buchstaben, den das Alphabet nicht kennt."}},"i":0}}]}'> Übung
Welche dieser Aussagen ist falsch?: „Ein {\displaystyle w} ist eine geordnete Folge von {\displaystyle a.}“, „Ein {\displaystyle \Sigma } ist eine ungeordnete Menge von {\displaystyle a.}“, „Ein {\displaystyle L} ist eine geordnete Folge von {\displaystyle \Sigma .}“, „Ein {\displaystyle L} ist eine ungeordnete Menge von {\displaystyle w.}
Der Satz „Ein {\displaystyle L} ist eine geordnete Folge von {\displaystyle \Sigma .}“ ist falsch. Diese Aussage bedeutet, dass eine Sprache eine Aneinanderreihung von Alphabeten wäre. Das ist natürlich Quatsch. Eine Sprache {\displaystyle L} definiert sich durch die Wörter, die zu ihr gehören. Anders ausgedrückt: „Ein {\displaystyle L} ist eine Menge von {\displaystyle w.}

{\displaystyle \Sigma _{b}=\{0;1\}} nennt man das binäre Alphabet. Welche Wörter kennt die Sprache {\displaystyle \Sigma _{b}^{\star }}?
„“, „0“, „1“, „00“, „01“, „10“, „11“, „000“, „001“, …

Wenn {\displaystyle \Sigma =\{{\text{a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z}}\},} welches der folgenden Wörter gehört dann nicht zur Sprache {\displaystyle \Sigma ^{\star }}?:

„monatlich“, „sichtbar“, „verlängern“, „quer“, „jxq“, „manchmal“

„verlängern“ gehört nicht dazu, denn es enthält mit „ä“ einen Buchstaben, den das Alphabet nicht kennt.

Tag 2

|w|</math> ist die Länge von <math>w,</math> also die Anzahl der Buchstaben. <math>|\\varepsilon|</math> ist 0. Die Konkatenation ist eine Operation, die Wörter aneinander hängt. Dabei ist die Reihenfolge wichtig. Die Konkatenation mit <math>\\varepsilon</math> hat keinen Effekt. Präfixe, Suffixe und Infixe sind Anwendungen der Konkatenation."}},"i":0}}]}'> Zusammenfassung

{\displaystyle |w|} ist die Länge von {\displaystyle w,} also die Anzahl der Buchstaben. {\displaystyle |\varepsilon |} ist 0. Die Konkatenation ist eine Operation, die Wörter aneinander hängt. Dabei ist die Reihenfolge wichtig. Die Konkatenation mit {\displaystyle \varepsilon } 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 {\displaystyle (\varepsilon ).}

Über dem Alphabet {\displaystyle \Sigma } 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: {\displaystyle \varepsilon } oder „“. Beachte, dass {\displaystyle \varepsilon } nicht das Wort selbst ist, sondern nur ein Formelzeichen.

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

  • Wenn {\displaystyle w} aus den Buchstaben {\displaystyle a_{1}} und {\displaystyle a_{2}} besteht, dann kann man sagen {\displaystyle |w|=2.}
  • {\displaystyle |\varepsilon |=0}

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 {\displaystyle w_{1}} mit drei Buchstaben und {\displaystyle w_{2}} mit siebzig Buchstaben konkateniert, hat das Ergebnis dreiundsiebzig Buchstaben: {\displaystyle |w_{1}\cdot w_{2}|=|w_{1}|+|w_{2}|.} Diese Gleichung bedeutet, dass die Länge des Wortes, das bei der Konkatenation von {\displaystyle w_{1}} und {\displaystyle w_{2}} entsteht, mit der Addition der Länge von {\displaystyle w_{1}} und der Länge von {\displaystyle w_{2}} ausgerechnet werden kann.

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

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, {\displaystyle \varepsilon ,} 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 {\displaystyle \varepsilon } 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?

|(\\varepsilon \\cdot \\langle a_1, a_2, a_3, a_4, a_5 \\rangle) \\cdot \\text{vier}| = \\text{?}</math>\n"},"2":{"wt":"Die Klammern sind überflüssig. Wenn man ein Wort mit null Buchstaben <math>(\\varepsilon),</math> ein Wort mit fünf Buchstaben <math>(\\langle a_1, a_2, a_3, a_4, a_5 \\rangle)</math> und ein Wort mit vier Buchstaben <math>(\\text{vier})</math> konkateniert <math>(\\cdot),</math> dann beläuft sich die Länge <math>(||)</math> des Ergebnisses auf neun Buchstaben.</br />\n<math>|\\varepsilon \\cdot \\langle a_1, a_2, a_3, a_4, a_5 \\rangle \\cdot \\text{vier}| = 9</math>"}},"i":0}}]}'> Übung
{\displaystyle |(\varepsilon \cdot \langle a_{1},a_{2},a_{3},a_{4},a_{5}\rangle )\cdot {\text{vier}}|={\text{?}}}
Die Klammern sind überflüssig. Wenn man ein Wort mit null Buchstaben {\displaystyle (\varepsilon ),} ein Wort mit fünf Buchstaben {\displaystyle (\langle a_{1},a_{2},a_{3},a_{4},a_{5}\rangle )} und ein Wort mit vier Buchstaben {\displaystyle ({\text{vier}})} konkateniert {\displaystyle (\cdot ),} dann beläuft sich die Länge {\displaystyle (||)} des Ergebnisses auf neun Buchstaben.
{\displaystyle |\varepsilon \cdot \langle a_{1},a_{2},a_{3},a_{4},a_{5}\rangle \cdot {\text{vier}}|=9}

Tag 3

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 {\displaystyle L} als irgendeiner Sprache hast du auch schon eine ganz bestimmte Sprache kennen gelernt: {\displaystyle \Sigma ^{\star }} ist die Menge aller Wörter, die man aus dem Alphabet {\displaystyle \Sigma } bilden kann. Jede Sprache {\displaystyle L} über einem Alphabet {\displaystyle \Sigma } ist also eine Teilmenge der Sprache {\displaystyle \Sigma ^{\star }.} Sie ist maximal identisch mit {\displaystyle \Sigma ^{\star }.} 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 {\displaystyle L_{1}=\{{\text{Alt, Neu}}\}} und {\displaystyle L_{2}=\{{\text{heit, ertum}}\}} konkateniert, dann lautet das Ergebnis {\displaystyle L_{1}\cdot L_{2}=\{{\text{Altheit, Neuheit, Altertum, Neuertum}}\}.} 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: {\displaystyle L_{1}\cdot L_{2}} ist selten das gleiche wie {\displaystyle L_{2}\cdot L_{1}.}

Neben der Konkatenation kennst du eine weitere Rechenoperation: den Kleene-Stern. Wenn {\displaystyle \Sigma } ein Alphabet ist, dann ist {\displaystyle \Sigma ^{\star }} 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 {\displaystyle L=\{{\text{Alt, Neu}}\}.} Dann ist {\displaystyle L^{\star }=\{\varepsilon ,{\text{Alt, Neu, AltAlt, AltNeu, NeuAlt, NeuNeu, AltAltAlt, AltAltNeu, AltNeuAlt,}}\ldots \}.} Es handelt sich um eine unendliche Menge, die alle Wörter enthält, die man durch Konkatenation aus den Wörtern der Sprache {\displaystyle L} erhalten kann und außerdem noch das leere Wort {\displaystyle \varepsilon .}

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

Man kann den Kleene-Stern übrigens auf die Konkatenation zurückführen: {\displaystyle L^{\star }} ist die Menge aus {\displaystyle \varepsilon ,} allen Elementen aus {\displaystyle L,} allen Elementen aus {\displaystyle L\cdot L,} allen Elementen aus {\displaystyle L\cdot L\cdot L,} allen Elementen aus {\displaystyle L\cdot L\cdot L\cdot L} und immer so weiter. Man kann dafür den Begriff der Vereinigung von Mengen benutzen (mathematisches Symbol: {\displaystyle \cup }): {\displaystyle L^{\star }=\{\varepsilon \}\cup L\cup L\cdot L\cup L\cdot L\cdot L\cup \dotsb }

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:

{\displaystyle L=(\{{\text{a, b}}\}^{\star }\cdot \{{\text{a}}\}\cdot \{{\text{a, b}}\})\cup \{{\text{c}}\}}
Hier wird zunächst durch Sternbildung die Sprache {\displaystyle \{\varepsilon ,{\text{a, b, aa, ab, ba, bb, aaa, aab,}}\ldots \}} geschaffen. Diese Sprache und die Sprache {\displaystyle \{{\text{a}}\}} 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 {\displaystyle \{{\text{a, b}}\}} 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 {\displaystyle \{{\text{c}}\}} vereinigt. Das Ergebnis lautet also:
{\displaystyle L=\{{\text{c, aa, ab, aaa, aab, baa, bab, aaaa, aaab, abaa, abab, baaa, baab, bbaa, bbab, aaaaa, aaaab, aabaa, aabab,}}\ldots \}}
Die Definition {\displaystyle L=(\{{\text{a, b}}\}^{\star }\cdot \{{\text{a}}\}\cdot \{{\text{a, b}}\})\cup \{{\text{c}}\}} bedeutet also, dass die Sprache {\displaystyle L} aus dem Wort „c“ und allen Folgen der Buchstaben „a“ und „b“ besteht, deren vorletztes Glied ein „a“ ist. Nicht schlecht.

L</math> eine Sprache ist, welche Wörter kennt dann <math>L^\\star\\text{?}</math>\n"},"2":{"wt":"<math>\\varepsilon,</math> alle Wörter aus <math>L</math> sowie alle möglichen Konkatenationen von Wörtern aus <math>L.</math>\n\n"},"3":{"wt":"Nenne die Wörter der Sprache <math>L\\text{!}</math> <math>L = \\{ \\text{eklig} \\} \\cup \\{ \\text{furcht, wunder} \\} \\cdot \\{ \\text{bar} \\} \\cup \\{ \\text{sagen, lach, Untersuchungs} \\} \\cdot \\{ \\text{haft} \\} \\cup \\{ \\text{klein, hoef, haess, mensch} \\} \\cdot \\{ \\text{lich} \\} \\cup \\{ \\text{Energie, Wasser} \\} \\cdot \\{ \\text{einspar, verschwend, versorg} \\} \\cdot \\{ \\text{ung} \\}</math>\n"},"4":{"wt":"eklig, furchtbar, wunderbar, sagenhaft, lachhaft, Untersuchungshaft, kleinlich, hoeflich, haesslich, menschlich, Energieeinsparung, Energieverschwendung, Energieversorgung, Wassereinsparung, Wasserverschwendung, Wasserversorgung\n\n"},"5":{"wt":"Beschreibe die Sprache <math>L</math> formal! <math>L = \\{ \\varepsilon, \\text{a, b, aa, ba, bb, aaa, baa, bba, bbb, aaaa, baaa, bbaa, bbba, bbbb, aaaaa,} \\ldots \\}</math>\n"},"6":{"wt":"<math>L = \\{ b \\}^\\star \\cdot \\{ a \\}^\\star</math>"}},"i":0}}]}'> Übung
Wenn {\displaystyle L} eine Sprache ist, welche Wörter kennt dann {\displaystyle L^{\star }{\text{?}}}
{\displaystyle \varepsilon ,} alle Wörter aus {\displaystyle L} sowie alle möglichen Konkatenationen von Wörtern aus {\displaystyle L.}

Nenne die Wörter der Sprache {\displaystyle L{\text{!}}} {\displaystyle L=\{{\text{eklig}}\}\cup \{{\text{furcht, wunder}}\}\cdot \{{\text{bar}}\}\cup \{{\text{sagen, lach, Untersuchungs}}\}\cdot \{{\text{haft}}\}\cup \{{\text{klein, hoef, haess, mensch}}\}\cdot \{{\text{lich}}\}\cup \{{\text{Energie, Wasser}}\}\cdot \{{\text{einspar, verschwend, versorg}}\}\cdot \{{\text{ung}}\}}
eklig, furchtbar, wunderbar, sagenhaft, lachhaft, Untersuchungshaft, kleinlich, hoeflich, haesslich, menschlich, Energieeinsparung, Energieverschwendung, Energieversorgung, Wassereinsparung, Wasserverschwendung, Wasserversorgung

Beschreibe die Sprache {\displaystyle L} formal! {\displaystyle L=\{\varepsilon ,{\text{a, b, aa, ba, bb, aaa, baa, bba, bbb, aaaa, baaa, bbaa, bbba, bbbb, aaaaa,}}\ldots \}}
{\displaystyle L=\{b\}^{\star }\cdot \{a\}^{\star }}

Tag 4

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: {\displaystyle a_{1}\cdot a_{2}=\langle a_{1},a_{2}\rangle }
  • Auf Wörter angewendet kann man längere Wörter bilden: {\displaystyle \langle a_{1},a_{2},a_{3},a_{4}\rangle \cdot \langle a_{5},a_{6}\rangle =\langle a_{1},a_{2},a_{3},a_{4},a_{5},a_{6}\rangle }
  • Auf Sprachen angewendet kann man alle Wörter verlängern: {\displaystyle \{\langle a_{1},a_{2},a_{3}\rangle ,\langle a_{4},a_{5}\rangle \}\cdot \{\langle a_{6}\rangle ,\langle a_{7},a_{8}\rangle \}=}{\displaystyle \{\langle a_{1},a_{2},a_{3},a_{6}\rangle ,\langle a_{4},a_{5},a_{6}\rangle ,\langle a_{1},a_{2},a_{3},a_{7},a_{8}\rangle ,\langle a_{4},a_{5},a_{7},a_{8}\rangle \}}

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 {\displaystyle (2\cdot 2\cdot 2=2^{3}),} gibt es die Potenzierung auch als Zusammenfassung mehrerer Konkatenationen von Mengen und Folgen: {\displaystyle a\cdot a\cdot a=a^{3},L\cdot L\cdot L=L^{3}} und auch {\displaystyle \Sigma \cdot \Sigma \cdot \Sigma =\Sigma ^{3}.} 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. {\displaystyle \Sigma \cdot \Sigma } ist einfach die Konkatenation von je zwei Buchstaben. Das Ergebnis ist die Sprache, die alle zweibuchstabigen Wörter über {\displaystyle \Sigma } enthält. Für das binäre Alphabet {\displaystyle \Sigma _{\text{b}}=\{0,1\}} ist das {\displaystyle L=\Sigma _{b}^{2}=\{00,01,10,11\}.}

Lass uns noch ein wenig mit den Potenzen herumspielen: {\displaystyle x^{1}} ist in der Mathematik definiert als {\displaystyle x.} 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: {\displaystyle \Sigma ^{1}=\Sigma } und {\displaystyle L^{1}=L.}

Neben der Potenzierung mit 1 gibt es noch einen weiteren Sonderfall: den der Potenzierung mit 0. {\displaystyle x^{0}=1} 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 {\displaystyle \{\varepsilon \}} (eine Menge, deren einziges Element {\displaystyle \varepsilon } ist), weil {\displaystyle \{\varepsilon \}} das neutrale Element der Konkatenation von Mengen ist. {\displaystyle \Sigma \cdot \{\varepsilon \}=\Sigma ,L\cdot \{\varepsilon \}=L.}

Um das kurz zusammenzufassen: {\displaystyle \Sigma ^{0}} ist {\displaystyle \{\varepsilon \},} {\displaystyle \Sigma ^{1}} ist {\displaystyle \Sigma }, also einfach die Menge aller Buchstaben oder anders ausgedrückt: die Menge aller Wörter der Länge 1, {\displaystyle \Sigma ^{2}} ist die Menge aller möglichen Konkatenationen von je zwei Buchstaben, also die Menge aller Wörter der Länge 2, {\displaystyle \Sigma ^{x}} ist die Menge aller Wörter der Länge {\displaystyle x.} 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 {\displaystyle \Sigma ^{0}\cup \Sigma ^{1}\cup \Sigma ^{2}\cup \dotsb ,} dann erhält man einfach alle Wörter, also {\displaystyle \Sigma ^{\star }.} 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 ∞.

L</math> über dem Alphabet <math>\\Sigma = \\{a, b, c \\}</math> mit der folgenden Eigenschaft: Alle Wörter beginnen mit vier „a“, enden mit vier „a“ und enthalten mindestens zwei „b“.\n"},"2":{"wt":"<math>L = \\{ a \\}^4 \\cdot \\Sigma^\\star \\cdot \\{ b \\} \\cdot \\Sigma^\\star \\cdot \\{ b \\} \\cdot \\Sigma^\\star \\cdot \\{ a \\}^4</math> oder<br />\n<math>L = \\{ a^4 \\} \\cdot \\Sigma^\\star \\cdot \\{ b \\} \\cdot \\Sigma^\\star \\cdot \\{ b \\} \\cdot \\Sigma^\\star \\cdot \\{ a^4 \\}</math>"}},"i":0}}]}'> Übung
Definiere eine Sprache {\displaystyle L} über dem Alphabet {\displaystyle \Sigma =\{a,b,c\}} mit der folgenden Eigenschaft: Alle Wörter beginnen mit vier „a“, enden mit vier „a“ und enthalten mindestens zwei „b“.
{\displaystyle L=\{a\}^{4}\cdot \Sigma ^{\star }\cdot \{b\}\cdot \Sigma ^{\star }\cdot \{b\}\cdot \Sigma ^{\star }\cdot \{a\}^{4}} oder
{\displaystyle L=\{a^{4}\}\cdot \Sigma ^{\star }\cdot \{b\}\cdot \Sigma ^{\star }\cdot \{b\}\cdot \Sigma ^{\star }\cdot \{a^{4}\}}

Tag 5

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 {\displaystyle \cup .} 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 {\displaystyle \cdot .} 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 {\displaystyle \varepsilon .} 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: {\displaystyle \{\varepsilon \}.} Außerdem gibt es den Sonderfall der Konkatenation mit der leeren Menge {\displaystyle \{\}:\Sigma \cdot \{\}=\{\}.}
  • Potenzierung {\displaystyle X^{y}.} Die mehrfache Konkatenation von Mengen kann zu einer Potenzierung zusammengefasst werden: {\displaystyle L\cdot L=L^{2}.} Das neutrale Element der Potenzierung ist die 1. Die Potenzierung mit 0 ergibt {\displaystyle \{\varepsilon \}.} Die Potenzierung kann nicht auf Folgen angewendet werden.
  • Kleene-Stern {\displaystyle X^{\star }.} Der Kleene-Stern ist die Vereinigung aller Potenzierungen. {\displaystyle \Sigma ^{\star }=\{\varepsilon \}\cup \Sigma \cup \Sigma \cdot \Sigma \cup \Sigma \cdot \Sigma \cdot \Sigma \cup \dotsb =\Sigma ^{0}\cup \Sigma ^{1}\cup \Sigma ^{2}\cup \Sigma ^{3}\cup \dotsb }

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 {\displaystyle L=(L_{1}\cdot (L_{2}^{\star }))\cup (L_{1}^{3})} kommt auch völlig ohne Klammern aus: {\displaystyle L=L_{1}\cdot L_{2}^{\star }\cup L_{1}^{3}.}

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 {\displaystyle |w|=12,} dann weißt du, dass das Wort {\displaystyle w} 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. {\displaystyle |\Sigma |=26} heißt, dass das Alphabet 26 Buchstaben hat und {\displaystyle |L|=2\cdot |\Sigma |} 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

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.

w</math> stellt man mit Betragsstrichen dar: <math>|w| = n.</math> Das Nullwort heißt <math>\\varepsilon</math> (Epsilon): <math>|\\varepsilon| = 0.</math>\n\n"},"5":{"wt":"Der Kleene-Stern kann auf die Potenzierung zurückgeführt werden. Wie ist das zu verstehen?\n"},"6":{"wt":"Das Ergebnis des Kleene-Stern-Operators ist die Vereinigungsmenge aller Potenzen: <math>\\Sigma^\\star = \\Sigma^0 \\cup \\Sigma^1 \\cup \\Sigma^2 \\cup \\dotsb</math>\n\n"},"7":{"wt":"<math>\\Sigma = \\{ \\text{a, b, c, d} \\}</math> ist ein Alphabet. <math>L = \\{ \\text{aaa, bbb, ccc, ddd} \\}</math> ist eine Sprache über <math>\\Sigma.</math> Berechne <math>\\Sigma^\\star, L^\\star</math> und <math>a^\\star\\text{!}</math>\n"},"8":{"wt":"<math>\\Sigma^\\star = \\{ \\varepsilon, a, b, c, d, aa, ab, ac, ad, ba, \\ldots, dcabad, \\ldots \\}</math><br/>\n<math>L^\\star = \\{ \\varepsilon, aaa, bbb, ccc, ddd, aaaaaa, aaabbb, aaaccc, aaaddd, bbbaaa, \\ldots, dddcccaaabbbaaaddd, \\ldots \\}</math><br/>\n<math>a^\\star = \\{a\\}^\\star = \\{ \\varepsilon, a, aa, aaa, aaaa, \\ldots \\}</math>\n\n"},"9":{"wt":"Entwirf eine Sprache über dem Alphabet <math>\\Sigma = \\{ a, b, c, d, e \\},</math> deren Wörter drei oder fünf Buchstaben lang sind und als mittleren Buchstaben ein c haben!\n"},"10":{"wt":"<math>L = \\Sigma^2 \\cdot \\{ c \\} \\cdot \\Sigma^2 \\cup \\Sigma \\cdot \\{ c \\} \\cdot \\Sigma</math>\n\n"},"11":{"wt":"Beschreibe formal, dass das Wort <math>w</math> mit dem gleichen Buchstaben beginnt, mit dem es endet!\n"},"12":{"wt":"Sei <math>\\Sigma</math> ein Alphabet, <math>a \\in \\Sigma</math> ein Buchstabe und <math>w \\in \\Sigma^\\star</math> ein Wort. Es existiert ein Wort <math>v \\in \\Sigma^\\star,</math> so dass gilt <math>w = a \\cdot v \\cdot a.</math>\n"}},"i":0}}]}'> Übung
Ordne den Begriffen „Wort“, „Alphabet“ und „Sprache“ die Begriffe „Folge“ und „Menge“ zu! Welche Rolle nimmt der „Buchstabe“ ein?
  • Wort: Folge von Buchstaben
  • Alphabet: Menge von Buchstaben
  • Sprache: Menge von Wörtern

Eine elegante Definition für „Buchstabe“ lautet: „Ein Buchstabe ist ein Wort der Länge 1.“ Da ein Wort eine Folge von Buchstaben ist, hat man damit den Buchstaben mit sich selbst definiert. Genauer kann man es leider nicht ausdrücken. Man müsste sagen: Der Buchstabe ist.


Was ist die Länge eines Wortes, wie bestimmt man sie und wie nennt man das Wort mit der Länge 0?
Da ein Wort eine endliche Folge von Buchstaben ist, ist die Länge eines Wortes die Anzahl der Buchstaben. Dabei müssen nicht alle Buchstaben verschieden voneinander sein. Die Länge eines Wortes {\displaystyle w} stellt man mit Betragsstrichen dar: {\displaystyle |w|=n.} Das Nullwort heißt {\displaystyle \varepsilon } (Epsilon): {\displaystyle |\varepsilon |=0.}

Der Kleene-Stern kann auf die Potenzierung zurückgeführt werden. Wie ist das zu verstehen?
Das Ergebnis des Kleene-Stern-Operators ist die Vereinigungsmenge aller Potenzen: {\displaystyle \Sigma ^{\star }=\Sigma ^{0}\cup \Sigma ^{1}\cup \Sigma ^{2}\cup \dotsb }

{\displaystyle \Sigma =\{{\text{a, b, c, d}}\}} ist ein Alphabet. {\displaystyle L=\{{\text{aaa, bbb, ccc, ddd}}\}} ist eine Sprache über {\displaystyle \Sigma .} Berechne {\displaystyle \Sigma ^{\star },L^{\star }} und {\displaystyle a^{\star }{\text{!}}}
{\displaystyle \Sigma ^{\star }=\{\varepsilon ,a,b,c,d,aa,ab,ac,ad,ba,\ldots ,dcabad,\ldots \}}
{\displaystyle L^{\star }=\{\varepsilon ,aaa,bbb,ccc,ddd,aaaaaa,aaabbb,aaaccc,aaaddd,bbbaaa,\ldots ,dddcccaaabbbaaaddd,\ldots \}}
{\displaystyle a^{\star }=\{a\}^{\star }=\{\varepsilon ,a,aa,aaa,aaaa,\ldots \}}

Entwirf eine Sprache über dem Alphabet {\displaystyle \Sigma =\{a,b,c,d,e\},} deren Wörter drei oder fünf Buchstaben lang sind und als mittleren Buchstaben ein c haben!
{\displaystyle L=\Sigma ^{2}\cdot \{c\}\cdot \Sigma ^{2}\cup \Sigma \cdot \{c\}\cdot \Sigma }