{"id":2251,"date":"2009-02-24T21:08:59","date_gmt":"2009-02-24T20:08:59","guid":{"rendered":"https:\/\/www.herr-rau.de\/wordpress\/?p=2251"},"modified":"2018-03-26T09:18:20","modified_gmt":"2018-03-26T07:18:20","slug":"formale-sprachen-teil-4-kontextsensitive-sprachen","status":"publish","type":"post","link":"https:\/\/www.herr-rau.de\/wordpress\/2009\/02\/formale-sprachen-teil-4-kontextsensitive-sprachen.htm","title":{"rendered":"Formale Sprachen, Teil 4: Kontextsensitive Sprachen (und \u00dcberblick)"},"content":{"rendered":"<div style='text-align:right;'><small>(<a href='https:\/\/www.herr-rau.de\/wordpress\/2009\/02\/formale-sprachen-teil-4-kontextsensitive-sprachen.htm#comments'>36 Kommentare.<\/a>)<\/small> <\/div><h3>1. \u00dcberblick und Wiederholung<\/h3>\n<p>Im Lauf dieser Serie habe ich formale Sprachen <a href=\"https:\/\/www.herr-rau.de\/wordpress\/2009\/01\/formale-sprachen-teil-1-die-chomsky-hierarchie.htm\">vorgestellt<\/a>, dann eine Untergruppe davon, die <a href=\"https:\/\/www.herr-rau.de\/wordpress\/2009\/01\/formale-sprachen-teil-2-regulaere-sprachen.htm\">regul\u00e4ren Sprachen<\/a>. Im letzten Beitrag ging es dann um eine \u00fcbergeordnete Gruppe, die <a href=\"https:\/\/www.herr-rau.de\/wordpress\/2009\/01\/formale-sprachen-teil-3-kontextfreie-sprachen.htm\">kontextfreien Sprachen<\/a>. Die ersteren haben praktische Anwendungen etwa bei den regul\u00e4ren Ausdr\u00fccken, die f\u00fcr Suchen\/Ersetzen genutzt werden. Die zweite Gruppe ist wichtig beim Beschreiben von nat\u00fcrlichen Sprachen und vor allem von Programmiersprachen.<\/p>\n<p>Die beiden \u00fcbrigen Gruppen von Sprachen haben weniger direkte Anwendungsm\u00f6glichkeiten. Allerdings sind sie f\u00fcr die theoretische Informatik trotzdem interessant. Deshalb will ich jetzt etwas weiter ausholen und fange von der anderen Ecke an.<\/p>\n<p>Zur Wiederholung:<\/p>\n<ol>\n<li>Ein <strong>Alphabet<\/strong> ist eine endliche Menge von Zeichen, zum Beispiel {a,b} oder {a,b c, d, e, f, &#8230; z}. Diese Zeichen k\u00f6nnen alle aus mehr als einem Buchstaben bestehen, k\u00f6nnen auch das sein, was man konventionell unter W\u00f6rtern versteht. Wichtig ist nur, dass sie f\u00fcr die Zwecke der Sprachbeschreibung als unteilbar betrachtet werden. Das Alphabet einer Programmiersprache besteht also etwa aus {if, else, while, for &#8230;}, aber ich beschr\u00e4nke mich in den meisten meiner Beispiel auf das einfache Alphabet {a, b}.<\/li>\n<li>Ein <strong>Wort<\/strong> ist eine beliebige endliche Folge von Zeichen aus einem Alphabet. <\/li>\n<li>Eine <strong>Sprache<\/strong> ist eine Teilmenge aller m\u00f6glichen W\u00f6rter, die man aus einem Alphabet bilden kann.<\/li>\n<\/ol>\n<p>Die W\u00f6rter von endlichen Sprachen kann man einfach aufz\u00e4hlen, aber selbst das kann umst\u00e4ndlich werden, und bei Sprachen, die aus unendlich vielen W\u00f6rtern bestehen, geht das schon mal gar nicht. Gibt es \u00fcberhaupt Sprachen mit unendlich vielen W\u00f6rtern? Ja klar, wenn die W\u00f6rter beliebig lang sein k\u00f6nnen. Die Menge der Primzahlen ist unendlich gro\u00df, und die Menge aller Primzahl-Darstellungen in Dezimalschreibweise ebenso: {2, 3, 5, 7, 11, 13, 17, 19&#8230;}. Das Alphabet zu dieser Sprache besteht aus zehn Zeichen und sieht so aus: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}.<\/p>\n<p>Wenn man eine Sprache mit unendlich vielen W\u00f6rtern beschreiben will, kann man das mit einer Phrasenstruktur-Grammatik tun. Die umfangreichsten Bestandteile einer solchen Grammatik sind die Produktionsregeln, zum Beispiel:<br \/>\nA -> b<br \/>\nDiese Regel besagt, dass ich immer dann, wenn in einer Zeichenfolge ein &#8222;A&#8220; auftaucht, ich es durch ein &#8222;b&#8220; ersetzen kann. <\/p>\n<p>Wieso die Unterscheidung zwischen Gro\u00df- und Kleinbuchstaben? Unser Alphabet sei weiterhin nur {a, b}. W\u00f6rter k\u00f6nnen also nur aus diesen Zeichen bestehen, alles, was andere Zeichen enth\u00e4lt, kann schon mal \u00fcberhaupt nicht Teil der Sprache sein. Grammatiken benutzen allerdings zus\u00e4tzlich so eine Art Hilfsvariablen. Die d\u00fcrfen nat\u00fcrlich nicht so aussehen wie die Zeichen des Alphabets, und damit es da keine Verwechslung gibt, nimmt man konventionell Gro\u00dfbuchstaben f\u00fcr die Hilfsvariablen, in Zukunft &#8222;Nichtterminale&#8220; genannt, und Kleinbuchstaben f\u00fcr Alphabetzeichen oder &#8222;Terminale&#8220;. Das ist aber nur eine Konvention.<\/p>\n<p>Mit einer Grammatik &#8211; also einem Alphabet, einer Menge an Nichtterminalen, einem Startpunkt und vor allem einer Menge an Produktionsregeln &#8211; kann man W\u00f6rter erzeugen. Nehmen eine Beispielgrammatik mit dem Alphabet {a, b}, den Nichtterminalen {S} und diesen Produktionsregeln (der Strich | steht als Abk\u00fcrzung f\u00fcr &#8222;oder&#8220;):<\/p>\n<ol>\n<li>S -> bS | aS | b<\/li>\n<\/ol>\n<p>Damit kann ich verschiedene W\u00f6rter ableiten. Man beginnt immer beim Startpunkt S und ersetzt den Teil links vom Pfeil durch den Teil rechts vom Pfeil. Wenn etwas herauskommt, was nur noch aus Kleinbuchstaben besteht, dann ist die Ableitung dieses Wortes fertig:<br \/>\nS -> b<br \/>\nS -> bS -> bb<br \/>\nS -> bS -> bbS -> bbb<br \/>\nS -> aS -> aaS -> aaaS -> aaaab<br \/>\nS -> bS -> baS -> baaS -> baabS -> baabb<br \/>\nDiese Grammatik beschreibt die (unendlich umfangreiche) Sprache aller W\u00f6rter, die auf b enden.<\/p>\n<h3>2. Die vier wichtigsten Grammatik-Arten<\/h3>\n<h4>2.1 Allgemeine Phrasenstrukturgrammatiken (Chomsky-0)<\/h4>\n<p>F\u00fcr alle Phrasenstrukturgrammatiken gilt: links vom Pfeil muss mindestens ein Nichtterminal stehen. Denn nur aus Nichtterminalen kann man ableiten. Regeln k\u00f6nnen also so aussehen:<\/p>\n<p>aAa -> baAab<br \/>\nA -> BBBBB<br \/>\nA -> B<br \/>\naAa -> B<\/p>\n<p>Sprachen, die durch eine solche allgemeine Grammatiken beschrieben werden, geh\u00f6ren zum Typ Chomsky 0. Ihnen werde ich ich einen sp\u00e4teren Blogeintrag widmen. Vorgeschmack 1: Mit einer solchen Grammatik kann man die W\u00f6rter aller Sprachen aufz\u00e4hlen, die sich \u00fcberhaupt irgendwie aufz\u00e4hlen lassen. Was man mit einer Chomsky-0-Grammatik nicht darstellen kann, kann man auch mit keinem anderen Mittel aufz\u00e4hlen. Vorgeschmack 2: Alles, was sich \u00fcberhaupt berechnen l\u00e4sst, l\u00e4sst sich mit einer solchen Grammatik berechnen. Was sich mit einer Chomsky-0-Grammatik nicht berechnen l\u00e4sst, kann man auch mit keinem anderen Mittel berechnen.<br \/>\nWas das Erzeugen von W\u00f6rtern mit Berechnen zu tun hat, werde ich weiter unten erkl\u00e4ren.<\/p>\n<h4>2.2 Kontextsensitive bzw. monotone Grammatiken (Chomsky-1)<\/h4>\n<p>Es gilt all das oben gesagte, nur mit der weiteren Einschr\u00e4nkung, dass die Produktionsegeln alle folgende Form haben m\u00fcssen:<br \/>\nxAy -> xzy, wobei x und y beliebige Kombinationen sind und auch leer sein d\u00fcrfen. A ist ein Nichtterminal, z eine beliebige, aber nicht leere Zeichenfolge.<br \/>\nDie Regeln sehen zum Beispiel so aus:<\/p>\n<p>A -> a<br \/>\nA -> aB<br \/>\nbA -> baB<\/p>\n<p>An den letzten beiden Regeln sieht man, warum diese Grammatik kontextsensitiv hei\u00dft. Die vorletzte Regel lautet, dass jedes A durch aB ersetzt werden kann, egal in welchem Zusammenhang es steht. Die letzte Regel sagt indirekt auch, dass ein A durch aB ersetzt werden kann, aber eben nur dann, wenn direkt davor ein b kommt. Der Kontext ist also wichtig.<\/p>\n<p>Alternativ kann man einen anderen Aspekt dieser Sprachen betonen und die Einschr\u00e4nkung anders formulieren: Links vom Pfeil d\u00fcrfen nie mehr Zeichen stehen als rechts vom Pfeil. Diese Art Grammatik hei\u00dft dann nicht kontextsensitiv, sondern &#8222;monoton&#8220;. Die Regeln k\u00f6nnen so aussehen:<\/p>\n<p>A->a<br \/>\naA->Bb<br \/>\nAAA->bbbbb<br \/>\nAA -> bb<\/p>\n<p>Die Grammatik hei\u00dft deshalb monoton, weil die Ableitungen nie k\u00fcrzer werden, sondern immer gleich viele Zeichen haben wie die Vorg\u00e4nger oder noch mehr. Das ist das gleiche &#8222;monoton&#8220; wie in &#8222;monoton steigend&#8220; aus der Kurvendiskussion im Mathematikunterricht.<\/p>\n<p>Man kann jede monotone in eine kontextsensitive Grammatik umwandeln. (Andersrum braucht man das nicht, da laut der Definition oben jede kontextsensitive Grammatik ohnehin monoton ist.) Beide Arten beschreiben die gleiche Art von Sprache, die kontextsensitiven Sprachen (Chomsky 1).<\/p>\n<p>Zu den kontextsensitiven Sprachen geh\u00f6rt die Verdopplungssprache, also die Sprache aller W\u00f6rter mit der Eigenschaft, dass die erste H\u00e4lfte des Worts gleich der zweiten H\u00e4lfte ist. Man kann auch menschliche Sprachen und Programmiersprachen mit einer kontextsensitiven Grammatik beschreiben. Allerdings erfordert diese Grammatikart so viel Rechenzeit (siehe unten), dass man sich in der Praxis mit kontextfreien Grammatiken begn\u00fcgt oder mit anderen, nur ein bisschen kontextsensitiven Grammatikwn, die in der Komplexit\u00e4t zwischen Chomsky 1 und Chomsky 2 liegen.<\/p>\n<h4>2.3 Kontextfreie Phrasenstrukturgrammatiken (Chomsky-2)<\/h4>\n<p><a href=\"https:\/\/www.herr-rau.de\/wordpress\/2009\/01\/formale-sprachen-teil-3-kontextfreie-sprachen.htm\">Siehe \u00e4lteren Beitrag.<\/a><br \/>\nWie oben, mit der zus\u00e4tzlichen Einschr\u00e4nkung, dass links vom Pfeil nur genau ein Zeichen stehen darf. Und das muss logischerweise dann immer ein Nichtterminal sein, da ja ganz allgemein gilt, dass es davon links immer mindestens eines geben muss. Typische Regel:<\/p>\n<p>A -> aaBbb<\/p>\n<p>Diese Regel hei\u00dft kontextfrei, weil jedes A durch aaBbb ersetzt werden kann, egal in welchem Kontext es steht. Zu den kontextfreien Sprachen geh\u00f6ren im gro\u00dfen und ganzen die Programmiersprachen. Oder die Sprache {a<sup>n<\/sup>b<sup>n<\/sup>, wobei das <sup>n<\/sup> f\u00fcr die Anzahl hintereinander folgenden n geh\u00f6rt}.<\/p>\n<h4>2.4 Regul\u00e4re Grammatiken (Chomsky-3)<\/h4>\n<p><a href=\"https:\/\/www.herr-rau.de\/wordpress\/2009\/01\/formale-sprachen-teil-2-regulaere-sprachen.htm\">Siehe \u00e4lteren Beitrag.<\/a><br \/>\nWie oben, nur mit der zus\u00e4tzlichen Einschr\u00e4nkung, dass rechts vom Pfeil nur stehen darf: 1 Terminal <em>oder<\/em> 1 Nichtterminal <em>oder<\/em> 1 Terminal, gefolgt von 1 Nichterminal. (Oder andersrum, erst das NT, dann das T, aber dann immer so.) Typische Regeln:<\/p>\n<p>A -> a | B | aB<\/p>\n<h3>3. Sprachen und Rechnen<\/h3>\n<p>Wieso \u00fcberhaupt berechnen? Was haben W\u00f6rter mit Berechnungen zu tun? Viel. Nehmen wir als Alphabet diese Menge an Zeichen: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, .}, dann sind W\u00f6rter dazu zum Beispiel: 1, 10, 2.4, 101, 993, 256, 3.14159 und alle anderen denkbaren Kombinationen.<br \/>\nSprachen zu diesem Alphabet k\u00f6nnten sein: {alle nichtnegativen geraden Zahlen} oder {alle Primzahlen} oder {alle Zahlen mit der Quersumme 7} oder {alle Zahlen n, f\u00fcr die gilt a<sup>n<\/sup>+b<sup>n<\/sup>=c<sup>n<\/sup>}. Wenn man eine Grammatik hat, mit der man genau die Sprache erzeugen kann, die aus gesuchten W\u00f6rtern besteht, dann hat man eine Grammatik, mit der man diese Aufgaben berechnen kann.<\/p>\n<p>Als Beispiel f\u00fcr eine Grammatik, die nur nichtnegative gerade Zahlen erzeugt, habe ich einfach die Beispielgrammatik von oben genommen (f\u00fcr die Sprache aller W\u00f6rter, die auf b enden) und nur wenig ge\u00e4ndert:<\/p>\n<ol>\n<li>S -> GS | US | G<\/li>\n<li>G -> 0 | 2 | 4 | 6 | 8<\/li>\n<li>U -> 1 | 3 | 5 | 7 | 9<\/li>\n<\/ol>\n<p>Beispielableitung: S -> US -> UGS -> UGUS -> UGUG -> 1GUG -> 12UG > 123G -> 1232<\/p>\n<p>Wenn man wissen will, ob eine Zahl eine gerade Zahl ist, muss man schauen, ob sie mit der Grammatik erzeugt werden kann => Wortproblem.<\/p>\n<p>Die Aussagen &#8222;Man kann etwas berechnen&#8220; und &#8222;Es gibt eine Grammatik, die die entsprechenden W\u00f6rter (und nur die) erzeugt&#8220; sind \u00e4quivalent. Wie man das begr\u00fcnden kann, steht im n\u00e4chsten Eintrag. Die Grammatik f\u00fcr {alle Zahlen n, f\u00fcr die gilt a<sup>n<\/sup>+b<sup>n<\/sup>=c<sup>n<\/sup>, mit a,b,c,n als ganzen Zahlen} w\u00e4re zwar absurd kompliziert, <strike>und bis vor einem guten Jahrzehnt h\u00e4tte man nicht gewusst, ob man das \u00fcberhaupt berechnen kann, und wenn ja, wie.<\/strike> Aber da es sich berechnen l\u00e4sst, wie man inzwischen wei\u00df, ist prinzipiell auch eine Grammatik dazu m\u00f6glich. <small>Die dazu geh\u00f6rende Sprache sieht \u00fcbrigens so aus <strike>{2}<\/strike> {1, 2}, aber das wei\u00df man halt auch erst hinterher.<\/small><\/p>\n<p>Denkbarer ist eine Grammatik f\u00fcr die Sprache {alle Primzahlen}. Mit einer regul\u00e4ren Grammatik geht das nicht, mit einer kontextfreien auch nicht, mit einer kontextsensitiven &#8211; vermutlich schon, obwohl ich das Beispiel nirgendwo gefunden habe. Aber nach den n\u00e4chsten Abschnitten wird vielleicht klar, wie ich zu der Annahme komme. Mit einer allgemeinen Grammatik, also vom Typ Chomsky 0, l\u00e4sst sich diese Sprache auf jeden Fall beschreiben &#8211; denn bekanntlich l\u00e4sst sich alles, was sich berechnen l\u00e4sst, mit einer solchen Grammatik beschreiben. Und dass sich berechnen l\u00e4sst, ob eine gegebene Zahl eine Primzahl ist oder nicht, das wei\u00df man, da es Algorithmen daf\u00fcr gibt (mit dem <a href=\"http:\/\/de.wikipedia.org\/wiki\/Sieb_des_Eratosthenes\">Sieb des Eratosthenes<\/a> etwa).<\/p>\n<h3>4. Das Wortproblem<\/h3>\n<p>F\u00fcr alle Sprachen ist das Wortproblem interessant: Geh\u00f6rt ein gegebenes Wort zur Sprache L oder nicht? F\u00fcr regul\u00e4re und kontextfreie Sprachen ist das Wortproblem relativ leicht zu l\u00f6sen. Es gibt Algorithmen daf\u00fcr, man kritzelt ein bisschen mechanisch auf dem Papier herum oder l\u00e4sst den Computer rechnen, und nach kurzer Zeit wei\u00df man, ob das Wort zur Sprache geh\u00f6rt oder nicht. Kunstst\u00fcck: Beim Suchen nach einem regul\u00e4ren Ausdruck im Textverarbeitungsprogramm muss das Programm ja f\u00fcr jede Zeichenfolge \u00fcberpr\u00fcfen, ob sie zu der von dem regul\u00e4ren Ausdruck beschriebenen Sprache geh\u00f6rt oder nicht. Und beim Programmieren macht einen die Java-Programmierumgebung darauf aufmerksam, dass da irgendwo ein Fehler ist, dass zum Beispiel eine Klammer fehlt &#8211; dass das gegebene Programm eben <em>nicht<\/em> zur Sprache {alle syntaktisch korrekten Java-Programme} geh\u00f6rt.<\/p>\n<p>Auch f\u00fcr kontextsensitive Sprachen ist das Wortproblem &#8222;entscheidbar&#8220;. Entscheidbar hei\u00dft, dass man sicher sagen kann, ob ein gegebenes Wort zu einer gegebenen kontextsensitiven Sprache geh\u00f6rt, oder ob das nicht der Fall ist.<\/p>\n<p><small>Allerdings kann die Berechnung happig werden. Bei manchen Sprachen vom Typ Chomsky 1 w\u00e4chst die erforderliche Rechenzeit nur polynomiell an, bei anderen dagegen zum Beispiel exponentiell. Vereinfacht gesagt, wenn man f\u00fcr ein Wort der L\u00e4nge n berechnen will, ob es zur Sprache geh\u00f6rt, braucht man im ersten Fall gr\u00f6\u00dfenordnungsm\u00e4\u00dfig n<sup>2<\/sup> Rechenschritte, was viel, aber machbar ist. F\u00fcr andere Sprachen braucht man dagegen gr\u00f6\u00dfenordnungsm\u00e4\u00dfig 2<sup>n<\/sup> Rechenschritte, was f\u00fcr lange W\u00f6rter \u00e4u\u00dferst viele Rechenschritte erfordert.<br \/>\nGehen wir mal davon aus, das ein Rechenschritt eine Millionstelsekunde braucht. Braucht man f\u00fcr ein Wort der L\u00e4nge 100 im ersten Fall 1\/100 Sekunde, sind es im anderen Fall 4*10<sup>14<\/sup> Jahre. Aber das mit dem P und dem NP ist eigentlich schon wieder ein anderes, auch sehr spannendes Thema.<\/small><\/p>\n<p>Notfalls probiert man einfach alles aus, und zwar nach dem folgenden Algorithmus:<\/p>\n<p>Schritt 1: Nimm den Startpunkt S und wende jede darauf anwendbare Regel an.<br \/>\nSchritt 2: Wende jede anwendbare Regel auf die in Schritt 1 enstandenen Zeichenfolgen an.<br \/>\nSchritt 3: Wende jede anwendbare Regel auf die in Schritt 2 enstandenen Zeichenfolgen an.<br \/>\nUnd immer so weiter.<\/p>\n<p>Hier die Produktionsregel f\u00fcr ein m\u00f6glichst einfaches Beispiel:<\/p>\n<ol>\n<li>S -> aSBC<\/li>\n<li>S -> aBC<\/li>\n<li>CB -> BC<\/li>\n<li>aB -> ab<\/li>\n<li>bB -> bb<\/li>\n<li>bC -> bc<\/li>\n<li>cC -> cc<\/li>\n<\/ol>\n<p>Man beginnt bei S und wendet, wie oben angeben, nach und nach jede anwendbare Regel an. Und immer so weiter. Ich habe mal den Anfang des so entstehenden Baums aufgezeichnet. Die Ziffern geben jeweils die Nummer der Regel an, die angewendet wurde, um von der oberen Zeichenfolge zur darunter stehenden zu kommen.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/chomsky1-baum.jpg\" alt=\"chomsky1-baum\" title=\"chomsky1-baum\" width=\"550\" height=\"506\" class=\"alignnone size-full wp-image-2252\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/chomsky1-baum.jpg 550w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/chomsky1-baum-150x138.jpg 150w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/p>\n<p>Von manchen Zeichenfolgen aus geht keine weitere Verzweigung mehr ab. Das kann daran liegen, dass die Zeichenfolge nur noch aus Terminalen besteht (also ein Wort der Sprache ist, die von der Grammatik beschrieben wird) oder daran, dass man in eine Sackgasse geraten ist und sich keine der Regeln mehr anwenden l\u00e4sst. Das ist Pech, aber das ist ein Problem bei kontextsensitiven Grammatiken, anders als bei den bisher behandelten Typen Chomsky 3 und Chomsky 2.<\/p>\n<p>Um zu begr\u00fcnden, dass sich das Wortproblem entscheiden l\u00e4sst, macht man sich die Eigenschaft zu nutze, dass die Grammatik monoton ist, also nie zu k\u00fcrzeren Zeichenfolgen f\u00fchrt. Wenn ich wissen will, ob &#8222;aabc&#8220; zu der Sprache geh\u00f6rt, gehe ich einfach solange allen Zweigen nach, bis ich a) keine Regel mehr anwenden kann oder b) die Zeichenfolge im Zweig l\u00e4nger als 4, der L\u00e4nge meines Ausgangsworts, geworden ist. Wenn das Wort bis dahin nicht konstruiert worden ist, dann wird es das auch nie werden &#8211; denn k\u00fcrzer k\u00f6nnen die Zeichenfolgen nicht werden. Man sieht also aus dem B\u00e4umchen oben, dass &#8222;aabc&#8220; genauso wenig ein Wort der Sprache ist wie &#8222;bca&#8220; oder &#8222;abbc&#8220;. Wenn ich wissen will, ob &#8222;aaabbbccc&#8220; (L\u00e4nge 9) zur Sprache geh\u00f6rt, muss ich den Baum noch weiter aufspannen &#8211; bis alle Zweige zu Sackgassen oder l\u00e4nger als 9 werden oder ich vorher auf dieses Wort sto\u00dfe.<\/p>\n<p>Die Anzahl der Zweige w\u00e4chst exponentiell mit der L\u00e4nge des zu \u00fcberpr\u00fcfenden Wortes, das hei\u00dft, dass auch die Rechenenzeit exponentiell w\u00e4chst, wie oben beschrieben. Aber fr\u00fcher oder sp\u00e4ter, notfalls viel sp\u00e4ter, hat man eine eindeutige Antwort, ob das Wort dazu geh\u00f6rt oder nicht.<\/p>\n<h4>5. Offene Fragen bis zum n\u00e4chsten Mal<\/h4>\n<p>Wie wird begr\u00fcndet, dass man mit einer Chomsky-0-Grammatik alles berechnen kann, was man \u00fcberhaupt berechnen kann?<br \/>\nWas kann man denn nicht berechnen?<br \/>\nWie begr\u00fcndet man, dass etwas nicht berechenbar ist?<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/ssl-vg03.met.vgwort.de\/na\/43e26d317b4b48999cddb16ac4df0593\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>(36 Kommentare.) 1. \u00dcberblick und Wiederholung Im Lauf dieser Serie habe ich formale Sprachen vorgestellt, dann eine Untergruppe davon, die regul\u00e4ren Sprachen. Im letzten Beitrag ging es dann um eine \u00fcbergeordnete Gruppe, die kontextfreien Sprachen. Die ersteren haben praktische Anwendungen etwa bei den regul\u00e4ren Ausdr\u00fccken, die f\u00fcr Suchen\/Ersetzen genutzt werden. Die zweite Gruppe ist wichtig [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":2252,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25,195],"tags":[227],"class_list":["post-2251","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-informatik","category-lieblingseintraege","tag-informatik"],"_links":{"self":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/2251","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/comments?post=2251"}],"version-history":[{"count":2,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/2251\/revisions"}],"predecessor-version":[{"id":10824,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/2251\/revisions\/10824"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media\/2252"}],"wp:attachment":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media?parent=2251"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/categories?post=2251"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/tags?post=2251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}