Heute haben wir vier, fünf Themen vor.
Heute heißt es also Ärmel hochkrempeln und heute wird es anstrengend.
Ich wiederhole am Anfang einmal ganz kurz, was wir gestern gemacht haben.
Und dann will ich mit euch einmal die Konstruktionsmethoden für Grammatiken
machen. Da gibt es so zwei Techniken,
die gucken wir uns einmal ganz schnell an.
Dann gucken wir uns den Zusammenhang zwischen Grammatiken und Automaten an.
Und dann kommt zum eigentlichen Thema Eigenschaften und Grenzen.
Da wollen wir uns einmal angucken, Abschlusseigenschaften ganz kurz.
Chomsky Normalform ein bisschen länger. Das sollte dann
auch auf dem aktuellen Übungszettel machen
Und einmal noch mal das Pumping noch mal anschneiden für kontextfreie Sprachen.
Das ist so das Programm für heute. Wiederholung. Grammatiken haben wir gesagt,
es gibt Non-Terminale, es gibt Terminale, Produktion und Staatssymbol.
Und das Ziel ist eben ausgehend von so einem Staatssymbol,
S, Eng-Non-Terminal, durch Anwendung von diesen Produktionen,
irgendwie zu Zeichenketten zu kommen, die nur aus Terminalzeichen bestehen.
Und so als gängige Schreibweise hat sich halt eingeführt,
die non-Terminale groß zu schreiben, die Terminale klein.
Und dann ist das Ziel eben quasi von den Großbuchstaben zu
den kleinen Buchstaben
zu kommen
Und so wie hier die Grammatik ganz allgemein definiert ist,
kann eben auf der linken Seite der Produktion etwas relativ Beliebiges stehen.
Es muss eben auf jeden Fall ein Non-Terminal da stehen. So,
und weil das irgendwie zu mächtig ist und auch ein bisschen kompliziert damit zu arbeiten,
hat man dann diese kontextfreien Grammatiken eingeführt,
wo alles ganz genauso definiert ist, bis auf die Produktion.
Da sagt man auf der linken Seite der Produktion,
muss jetzt genau ein Non-Terminal stehen.
Vorher mindestens ein Non-Terminal und dann eben irgendwie beliebig viel drumherum.
Und jetzt genauer hin und herminein
Ja, dann das Arbeiten damit mit den Ableitungen,
dass man gesagt hat,
ich komme genau dann von U durch Anwendung von Regeln und Gehen nach V,
wenn ich eben U so zerlegen kann in U1,
WLU2,
wobei U1 und U2 irgendwelche ganz beliebigen Zeichenketten sind und WL ist eben die linke Seite einer Regel,
also WLWR ist eine Produktion,
WL ist die linke Seite einer Regel und dann ist die Idee eben,
dass ich dieses WL nehme und durch WR ersetze,
das U1 und 2 links und rechts davon bleibt ganz genau
so und da habe ich halt die linke Seite der Regel
durch die rechte Seite ersetzt und das ist ein Ableitungsschritt
Und wenn ich mehrere Ableitungsschritte auf einmal machen will,
also irgendwas zwischen null und einer endlich vielen Zahl,
dann schreibe ich das eben nicht mit dem Pfeil nur,
sondern mit so einem Pfeil mit Sternen.
Und wenn ich es nicht brauche, lasse ich das Geh weg.
Ja, und dann da nochmal zusammengefasst, wie das aussieht,
aktuelles Wort betrachten, im Wort linke Seiten suchen,
falls welche auftreten, durch rechte Seiten ersetzen. So,
und dann haben wir irgendwie so eine Grammatik hier,
die ist sogar schon kontextfrei,
die Idee bei der Schreibweise, der Pfeiltrend quasi,
die linke und rechte Seite von den Produktionen und auf den rechten Seiten
so ein Balken bedeutet, gleiche linke Seite.
Also haben wir da irgendwie die Produktion von S
nach XY und von S
nach Lamda
Und nach dem Komma kommen dann eben weitere Regeln mit neuer,
linker Seite. Das haben wir irgendwie von S nach XY,
von S nach Lamda, dann von X nach AXB,
von X nach AB,
von Y nach CY und von Y nach 10.
Die haben wir alle. Und dann kann man zum Beispiel
so eine Ableitung machen, S nach XY, erste Regel hier benutzt.
Dann wurde hier das X durch AXB ersetzt, im zweiten Schritt.
Im dritten Schritt wurde irgendwie aus dem Y so ein CY,
das war die Regel hier.
Im nächsten Schritt hat man das nochmal gemacht,
da kann man so
eine Kette von Cs erzeugen
Vorletzten Schritt hier, da ist irgendwie das X weg.
Das ist irgendwie, was ist da,
da ist ein A und B dazu gekommen für das X,
also muss ich irgendwie die Regel hier benutzt haben, X nach Abi.
Und im letzten Schritt ist das Y weg und es sind C dazu gekommen,
da habe ich irgendwie die Regel, die benutzt, Y nach 10.
Dann ist man vom Staatssymbol aus,
also von dem S hier, zu einem Wort gekommen irgendwie,
ne, zwei As, zwei WS gefolgt von 3Cs.
Und dann ist eben die generierte Grammatik,
all die Wörter W, die nur aus Terminalzeichen bestehen,
die ich eben von S-Out generieren kann
Und wenn ich jetzt alle kontextfreien Grammatiken nehme,
dann sage ich eben alles, was kontextfreie Grammatiken generieren an Sprachen,
diese Sprachfamilie soll die Familie der kontextfreien Sprachen sein.
Fragen? Das ist so. Die Buzzwords, die wir
gestern gehabt haben, und quasi die Grundlagen zu dem Thema.
Fragen dazu. Was meint ihr denn,
was die Grammatik hier unten,
welche Sprache generiert die denn
Ein Wort sehen wir ja, aber so kann man sich überlegen,
was passiert da so allgemein, wenn ich das irgendwie mal wieder mache?
Genau. Auch NB hoch N,
C hoch N oder nehmen wir mal was Einfaches besser aussprechen kann,
A hoch KB, hoch K und C hoch L. Idee,
ich erzeuge am Anfang mit, oder das Lando geht auch noch,
ich erzeuge am Anfang mit S XY
Und jetzt kann ich mir also überlegen,
was passiert mit dem X und was passiert mit dem Y?
Das Y ist einfacher hier, wenn ich das Y mir angucke,
was ich damit erzeuge, ist,
ich benutze beliebig auf die erste Regel, also CY.
Damit produziere ich immer ein weiteres C und das Y steht dann immer am Ende.
Und irgendwann habe ich genug Cs produziert und dann breche ich mit so einem C ab.
Also mit dem Y erzeuge ich irgend so einen C-Hoch-K,
mit einem beliebigen K mindestens eins, so in der Details,
aber so C hochkam. Und mit dem X,
da habe ich auch eigentlich nur eine Regel,
wo das X weiter entstehen bleibt,
genauso wie hier bei dem YC und CY,
habe ich hier auch nur eine Regel,
wo das X stehen bleibt und irgendwann habe ich diesen Abbruch mit Abi.
Und vorher steht das X da ja in der Mitte
Das führt dazu, dass der linke und rechte Teil dieser Regel gleichmäßig wächst.
Also nach einem Anwenden steht da AXB, nach zweimal anwenden,
A-Quadrat XB, nach dreimal anwenden, A hoch 3,
XB hoch 3, nach Firmen anwenden, Aho 4X,
B hoch 4, ihr versteht das System.
Und irgendwann breche ich halt damit ab. Das heißt,
damit erzeuge ich A hoch KB hoch K und dann kann ich hier sagen,
naja, von S nach XY mit dem XA hoch KB
hoch K und mit dem Y C hoch N.
Das sind so, da sieht man schon das,
worauf wir gleich hinaus wollen. Die beiden Konstruktionstechniken,
die man so bei Grammatiken, bei kontextfreien Grammatiken gut benutzen kann.
Das eine ist so ein lineares Wachsen nach rechts oder nach links
, so wie bei Y,
C,
Da kann man quasi so eine Kette von Symbolen irgendwie erzeugen und das Non-Terminal,
das wandert eben irgendwie nach rechts oder nach links und irgendwann hört es auf.
Und dann stehen halt die erzeugten Symbolien, die stehen in
keinem Zusammenhang, die werden halt einfach generiert. Und hier,
da kann man halt die linke und rechte Seite in Zusammenhang
setzen und eben gerade sowas erreichen wie bei A hoch NB hochenden.
Das sind so die Konstruktionsideen, auf die wir jetzt hinaus wollen.
Wenn ich die Sprache da habe, wie sieht da für
eine Grammatik aus
Dem, was wir eben so gehabt haben,
wie würde man das jetzt machen?
A, Stern-B-Stern, also irgendwie beliebig viele A,
ist gefolgt von beliebig vielen Bs.
Naja, eben hatten wir beliebig viele Cs,
das Verallgemeine wäre jetzt
Ja, ja, genau. Also wird X und 17
in der Non-Terminale gemacht. Genau. Also ich mache erst
sowas wie von S geht's nach AS von mir aus.
Damit kann ich die ganzen AS erzeugen.
Oder irgendwann sage ich von dem Großen, was, so,
jetzt gehe ich zum neuen Non-Terminal und mit dem erzeuge ich die BS.
Ah, das, was du eben mit XY meintest, genau.
Also, es geht AS hier sogar noch anders.
Es geht nach AB, A, das Große A erzeugt
die ganzen kleinen As und das große B erzeugt die ganzen kleinen Bs.
Also hier mit dem B, Klein B, Großb,
da erzeuge ich so einen String von kleinen Bs und irgendwann
höre ich mit dem Lamda halt auf
Man hätte das auch so machen können,
dass man hier sagt, es geht von S zu A
und erzeuge ich mit den As erstmal diese Geschichte.
Und irgendwann kann ich das große A,
ein großes B umwandeln und dann erzeuge ich damit die Bs.
Vollständigkeit halber, non-terminale, terminale Staatssymbol. Das gibt man meistens gar nicht an,
weil in den Produktionen schon die ganzen Infos drinstecken.
Also meistens gibt man nur die Produktionen an,
hält sich daran, dass S eben irgendwie der Staatssymbol ist
und Großbuchstaben für non-terminale Kleinbuchstaben für Terminale und dann ist klar,
was VNVT und was der Staatssymbol ist.
Jetzt haben wir die Produktion, jetzt hat man hier
diese Produktion angegeben, die Idee ist auch klar.
Jetzt muss man halt noch zeigen,
dass das tatsächlich das tut, was man haben will.
Also dass wieder LG
gleich M gilt
Dann nochmal die Grammatik. Und jetzt muss man
irgendwie zeigen, dass M eine Timing von LG ist.
Und genauso wie wir das bei Automaten auch gemacht haben,
sei wie ein Wort aus dieser Sprache.
M, dann lässt sich das irgendwie ja darstellen als A hoch
NB hoch M. Und jetzt zeigen wir halt,
dass wir das in G ableiten können mit der Idee,
die wir eben hatten, dass man sagt,
von SG zu AB,
da erzeuge ich durch beliebig häufiges Anwenden oder in dem Fall durch Enmaliges anwenden,
A hoch N, Groß A.
Und dann lösche ich das große A mit der Landeproduktion hier.
Und dann mache ich das Gleiche nochmal für das B,
da erzeuge ich dann durch emmmalige Anwendung
B hoch M und lösche das dann irgendwann.
Und dann habe ich genau das Wort A auch in B
hoch Emma Zeug.
Also ist das in der Sprache drin
Andersrum, wenn ich sage,
LG soll das M sein oder wenn ich das zeigen will,
dann kann man sich zunächst überlegen, dass diese Produktionen hier,
die von dem A ausgehen und analog die,
die von dem B ausgehen,
dass die eben immer ein Wort aus entweder A-Stern oder B-Stern generieren.
Also mit jeder Produktion erkennen wir zunächst das B-Element aus A-Stern
für jedes V mit A-Stern wie Gilden,
ehemalige Anwendung von der ersten Produktion führt zu dieser Satzform und
dann kann ich nur irgendwann mit dem A-Lam da abbrechen und
dann habe ich halt etwas aus A-Stern erzeugt und ebenso gilt das für Wörter,
die ich aus B ableiten kann
Ja, und dann sehe ich schon hier,
ich kann nur von S zu AB gehen,
danach komme ich gar nicht mehr zum S zurück.
Und mit der Begründung von ihm weiß ich,
vom großen A kann ich nur ein Wort aus A-Stern
ableiten und vom großen B nur ein Wort aus B-Stern.
Und dann bin ich schon fertig. Ich muss mit AB
beginnen, A zu A, IB zu BJ.
Und dann habe ich die Form. Und dann ist das Wort,
von dem wir ursprünglich ausgegangen waren, wo ist es denn?
Warum habe ich
eine Uhr geschrieben
Das U, da macht irgendwie keinen Sinn. Ach so,
das heißt, U hat die Form,
eine Ableitung eines Wortes U aus LG, genau,
okay, da ist es Ableitung eines Wortes U aus LG,
muss nun mit der Produktion beginnen und dann von dem A
zu AI von dem B zu BJ.
Und das heißt, insgesamt hat man abgeleitetes Wort, eben diese Form AIBJ.
Und da ist es auch in Ämteren, fertig.
Zweites Beispiel, auch in Bio-N, wie mache ich das?
Haben wir eben gerade gehabt, Idee.
Mit welchen Produktionen
Genau. Also, von S geht's nach ASB oder eben nach Lamda.
Da ist also noch weniger Produktion als eben.
Und mit der Anwendung der ersten Produktion hier,
die kann ich halt jetzt irgendwie ihm mal anwenden.
Und dann habe ich A hoch ISB-Hochi. Und irgendwann will
ich ja zum Wort kommen, das neue Terminal-Zeichen besteht.
Das muss ich irgendwann das S löschen. Das geht nur mit
der Regel da. Und dann habe ich auch Hibi-Hochi.
Wieder der Beweis, erste Timing-Beziehung M-Timing von LG.
Das ist immer ziemlich einfach, weil man einfach nur zeigt,
dass man für Wörter, die in der Menge sind,
irgendwie eine Ableitung hat.
Und die hat man ja meistens bei der Konstruktion irgendwie im Kopf gehabt.
Wenn ich also so ein Wort habe,
dann kann ich NG eben durch enmaheilige Benutzung der ersten Produktion hier hinkommen.
Auch NSB hoch N und dann lösche ich
das S. Fertig
Andersrum geht es genauso einfach, weil man jetzt eben
nur zwei Regeln hat, die man betrachten muss.
Also bei der zweiten höre ich auf, deswegen passiert da nicht so viel.
Aber wenn W eben aus der generierten Sprache von G ist,
dann ist die einzige Möglichkeit, zum Wort zu kommen,
eben diese Lamda-Produktion erst nach Lamda.
Und vorher kann man eben ihm mal diese Produktion benutzen.
Also habe ich irgendwie diese Form. Und damit bin ich
auch da fertig. Das sind so die zwei Konstruktionsmethoden,
die es da gibt. Das eine ist eine Zeichenkette sequenziell aufzubauen,
so wie bei diesem AhochK,
in dem man eben das neunte Herminal im Allgemeinen
einfach irgendwie an Rand setzt
Und wenn man so zwei Teile hat,
die man in Beziehung setzen will,
so wie hier bei dem A auch NBON,
dann klappt das eben, indem man dieses Non-Terminal nach innen setzt.
Das sind so die zwei, zwei, drei Tricks,
die es da so gibt.
Gut. Welche Sprache generiert denn
die Grammatik da
Wobei die einzelnen Punkte in etwas Kurznotation sind,
also gemeint ist, die Sprache im ersten Beispiel,
auch ein Buch NCON mit N aus den natürlichen Zahlen.
Etwas struderige Kurznotation da
Ja, genau, ne? Mehrheit siegt hier. Auch ein Beuch in A-Hoch-N
und dann BC Hoch-N. Wenn man sich das hier überlegt,
wenn man einfach zweimal die Produktion anwendet, dann habe ich A,
SBC und danach habe ich A, A, B,
C, B, C. Wenn ich das dreimal mache,
habe ich A, A und dann B, C,
B, C, B,
C. Also komme ich irgendwie auf Wörter dieser zweiten Form.
Hier habe ich irgendwie einen anderen Wechsel drin.
Das würde ich so hinkriegen, wenn ich mache A,
B, C,
S und auch in Beuch-N,
Das wird ein bisschen schwierig.
Und die? Was generiert die
Ja, genau. Auch wieder die Mehrheit hier. Auch in Ciorambiochrin,
wenn ich die Regel hier von S nach ASB,
die kann ich erst mal irgendwie ein paar Mal anwenden.
Dann habe ich sowas wie A-Hoch-I-S-B-Hoch-I. Irgendwann sage ich dann,
okay, jetzt habe ich genug davon,
linker und rechter Teil ist irgendwie in Zusammenhang gesetzt.
Jetzt ersetze ich das S durch den C. Jetzt steht das C, aber in der Mitte.
Jetzt habe ich also A-Hoch-I-C, B-Hoch-I. Und mit dem C,
mit der Argumentation, die wir vorhin schon hatten,
erzeuge ich jetzt irgendwie so ein Wort aus C-Stern,
was halt unabhängig ist von den ifielen As und Bs,
die ich schon gelesen habe.
Und das kommt dann also in die Mitte.
Also kriege ich das hier, ein linker Teil,
A auch N, rechter Teil B hoch, N,
die stehen in einer Beziehung und hier das
Unabhängig davon halt beliebig viele Cs in der Mitte irgendwie.
Jo. Da nochmal so die Zusammenfassung,
auch hier nochmal die Betonung im ersten Schritt,
dass hier es dann immer irgendwie zu zeigen, also kriegt eine Sprache.
Aufgabe ist dann eine Grammatik zu konstruieren, die die Sprache generiert.
Und dann ist das erstmal eine Behauptung und dann muss man das eben zeigen.
Und zwei Techniken haben wir jetzt kennengelernt und wollen mit denen
auch nochmal ein bisschen üben in den Übungsaufgaben.
Und jetzt, was recht häufig auftritt, ist so eine Frage,
Gegeben ein Wort, wird das eigentlich von der Grammatik generiert.
Also ich habe eine Grammatik erzeugt,
habe mir irgendwie was dabei gedacht und jetzt frage ich mich,
gegeben dieses Wort wird das tatsächlich von der Grammatik generiert.
Typisches Setting, in Programmiersprachen der Sintax der Sprache gegeben durch eine Grammatik.
Jetzt flattert da irgendwie ein Textdring rum und ich will wissen,
ist der eigentlich okay, ja oder nein?
Hätte ich das nicht als Grammatik gegeben, sondern als Automat wäre das einfach.
Warum? Was mache ich dann? Was mache ich,
wenn ich einen Automaten habe und entscheiden will,
ob W-Element aus LA gilt
Genau, ich lege weh dem Automaten vor,
wenn er akzeptiert, ist gut,
wenn er nicht akzeptiert ist, dann akzeptiert er nicht.
Zumindest mit deterministischen Modellen geht das immer ziemlich gut.
Wenn nicht die terministischen sind immer so schwierig,
aber mit deterministischen geht das ziemlich gut. Bei Grammatiken schwierig,
kommen wir vielleicht nochmal dazu, wie man das da lösen kann.
Aber erstmal sieht man hier irgendwie bei Automaten einfach,
bei Grammatiken nicht so einfach. Jetzt könnte man erstmal denken,
okay, dann haben die vielleicht keinen Zusammenhang.
Weil nur wenn das Problem bei der einen schwer zu lösen,
bei dem einem schwer zu lösen ist und bei dem anderen einfach,
dann könnte es ja sein,
dass die Modelle nicht so viel miteinander zu tun haben
Tatsächlich kann man zeigen, dass die ganz viel miteinander zu tun haben.
Und man kann zum Beispiel zeigen, dass die regulären Sprachen,
da brauche ich nicht mal die ganzen kontextfreien Grammatiken,
da reicht mir so ein Teil der kontextfreien Grammatiken.
Wie kann man reguläre Sprachen mit Grammatiken ausdrücken? Wäre eine
Idee, also von der Vorstellung her, reguläre Sprache.
Jetzt weiß man, es gibt ja irgendeinen Formulismus,
der diese reguläre Sprache beweist, beschreibt. Ich kann jetzt entweder
einen DFA nehmen oder einen NFA oder einen regulären Ausdruck,
die Dinger, die wir halt bisher so hatten.
Am angenehmsten war es meistens irgendwie zu sagen,
okay,
ich nehme vollständigen DFA
Und jetzt wäre die Aufgabe, gegeben dieser vollständigen DFA für
unsere reguläre Sprache, eine Grammatik zu basteln,
die die Sprache generiert, die dieser Automat akzeptiert. Genau,
das mit dem die Schleife explizit zu behandeln brauchst du gar nicht,
aber dieses Weitergehen, das kann ich durch die Produktionen ausdrücken
und das Schleife ist dann ja auch quasi ein Weitergehen,
nur dass ich halt von da nach da weitergehe.
Aber wie drücke ich jetzt quasi dieses Weitergehen oder auch die Schleife,
wie drücke ich das mit einer Produktion aus?
Wie kann ich
das machen
Wenn ihr euch überlegt, eine Schleife, Quatsch,
einen Kantenübergang im Automaten, ist ja so ein Triebel,
oder kann als Triebel angesehen werden, Zustand, Symbol,
das ich lese, Nachfolgezustand.
Dass das Triebel, Produktion waren jetzt irgendwie keine Triebel,
sondern Tupel, kriege ich das ja trotzdem irgendwie reingefriemelt.
Ich kann das fast eins zu eins übernehmen.
Aus Zuständen mache ich
Ja, genau. Zu dem neuen neuen Terminal, genau.
Ich mache aus jedem Zustand ein Non-Terminal. Und wenn ich vorher hatte,
aus Z geht es mit A zu Z-Strich,
da geht es jetzt eben von dem Non-Terminal-Z zu dem A-Z-Strich.
Dann habe ich quasi das kleine A generiert und habe den
Zustandswechsel dadurch abgebildet, dass jetzt das Non-Terminal ausgetauscht hat.
Das ist die ganze Idee. Jetzt muss man noch
ein bisschen aufpassen mit Staatszustand und Endzustand oder so,
aber so im Grunde genommen ist das die ganze Idee.
Und wir brauchen ja gar nicht die ganzen kontextfreien Grammatiken dafür.
Es reicht ja dieses mit I-Non-Terminal auf der linken Seite
und auf der rechten Seite brauchte ich tatsächlich auch immer
nur einen Non-Terminal
Das kann man noch ausnutzen. Deswegen einmal kurz definieren,
kontextfreie Grammatik heißt Linear, wenn linke Seite steht immer Nonterminal weiterhin,
das soll ja weiterhin eine kontextfreie Grammatik sein,
aber auf der rechten Seite gibt es eben auch nur genau ein Nonterminal oder gar keins.
Also Terminal-Zeichen, Non-Terminal-Terminal-Zeichen oder eben nur Terminal-Zeichen. Also Linearität
soll bedeuten, auf der rechten Seite maximal ein Non-Terminal.
Und dann führt man sich noch linkslinear und rechtslinear ein,
wo man eben sagt, weiterhin linear,
also genau ein Non-Terminal, aber entweder sage ich,
wenn, dann wird es ganz link stehen oder wenn,
dann wird es ganz rechts stehen
Und uns reichen jetzt hier rechtslineare Grammatiken und die heißen auch Typ 3 oder regulär,
weil man für die eben gerade zeigen kann,
dass die wieder die regulären Sprachen erfassen,
typische Produktion hier von A, geht's nach BECEX,
von A geht's nach BY, von A geht's nach A.
Also man sieht hier, entweder steht auf der rechten Seite nur Terminalzeichen,
auch beliebig viele, aber eben irgendwie nur Terminalzeichen.
Oder wenn auf der rechten Seite so ein Non-Terminal steht,
dann steht das eben ganz rechts.
Deswegen rechts linear. Also linear kommt daher,
dass da nur einsteht und rechts,
weil es halt
ganz rechts steht
Dafür kann man jetzt eben relativ einfach zeigen, dass das
genau die regulären Sprachen erfasst. Eben mit der Idee,
wenn ich sowas hier habe wie A, B,
Y, dann rührt das jetzt eben daher,
dass ich im Automaten einen Zustand A hatte,
einen Zustand Y und dass ich mit einer B-Kante von A nach Y gegangen bin.
Also wenn ich so ein Setting habe beim Automaten,
dann bastel ich mir so eine Produktion und dann kann ich
halt jeden Kantenübergang im Automaten durch die Produktion ausführen.
Und dabei eben das Symbol, was der Automat liest
mit der Grammatik generieren. Deswegen kann man mir zeigen,
wenn eine Sprache regulär ist,
dann gibt es eine rechtslineare Grammatik dafür und sogar auch andersrum
Und Beweisidee, wie gesagt, wenn ein Buchstaben im Automaten gelesen wird,
dann benutze ich ja so eine Kante hier, ZAZ-Strich.
Und das bauen wir jetzt durch diese Produktion nach,
wobei die ZETs in den eckigen Klammern eben nur ein Terminale sein sollen.
Und andersrum geht es dann gleich auch. Wollen wir einmal uns angucken,
wie das genau geht, von der regulären Sprache zur Grammatik.
Wenn ich also so ein DFA habe hier,
der die Sprache eher akzeptiert,
dann definiere ich mir jetzt eine rechtslineare Grammatik mit den folgenden Regeln.
Nonterminale, quasi die Zustände, das mit den eckigen Klammern,
nur damit man unterscheiden kann. Set ist jetzt der Zustand
und mit eckigen Klammern, ist es das Nonterminal.
Terminalzeichen, das sieht man, das macht ja Sinn,
der Automat akzeptiert, der wird aus Sigmar Stern,
also will ich auch Word of Sigmar Stern generieren können
Staatssymbol, gerade das Symbol, was quasi dem Staatszustand entspricht. Und jetzt bei den Produktionen,
die erste Zeile haben wir ja schon gehabt hier,
dass wir gesagt haben, naja,
wenn ich so eine Kante im Automaten habe,
dann baue ich mir jetzt so eine Produktion.
Und jetzt gibt es eben noch diese Sachen mit den End- und den Startzuständen.
Und da sagt man eben, wenn Z-Strichen Endzustand ist,
also wenn ich so eine Kante habe, mit der ich einen Endzustand besuche,
dann gibt es neben der Produktion von Z geht es nach AZ-Strich.
Die gibt es ja weiterhin. Also wenn ich so eine Kante habe,
Z-AZ-Strich hier, dann sage ich in der ersten Zeit, ich habe diese Produktion.
Und weil Z Strich jetzt aber auch ein Endzustand ist,
führe ich mir noch diese Produktion ein,
wo ich eben von Z das A generiere und dann das einzige Non-Terminal,
was ich ja die ganze Zeit habe, lösche.
Das heißt, ich kann nichts weitermachen. Also habe ich dieses Wort generiert,
was den Automaten ja auch in den Endzustand Z Strich führt.
Und der Automat würde ja, wenn das Wort zu Ende ist, akzeptieren.
Also gebe ich der Grammatik hier die Möglichkeit, abzubrechen.
Und dann gibt es noch den einen Sonderfall,
wenn Z0 in Endzustand ist, also wenn der Staatszustand ein Endzustand ist,
dann führe ich diese Lambla-Produktion hier ein.
Die zweite und dritte Zeile hätte man auch so machen können,
dass man einfach gesagt hätte,
für jeden Endzustand gibt es eine Lambla-Produktion,
hat den gleichen Effekt
Aber so hat man es erreicht, dass man
nur genau eine Landerproduktion hat und die es vom Staatssymbol.
Das will man manchmal haben, das ist manchmal ganz praktisch.
Ja, jetzt muss man noch zeigen,
dass es das tut, oben nochmal die Grammatik-Definition.
Und wenn man jetzt also so eine Erfolgsrechnung in A1 hat,
dann ist man irgendwie so Kanten ja entlang gegangen.
Vom Staatszustand Z0 aus, zu einem Endzustand ZN.
Und das hat eben gerade das Wort X1, X2,
Dödödöb bis XN, das ist gelesen worden und wurde akzeptiert.
Jetzt muss ich halt zeigen, dass ich das in
der Grammatik bauen kann. Nein,
wenn es aber diese ganzen Kanten im Automaten gibt,
dann kann ich eben einfach nach und nach genau
die Regeln anwenden,
die den Kanten entsprechen
Bei der letzten Kante, da nehme ich eben nicht die Kante,
die Produktion ZN minus 1, XN ZN, sondern ich nehme die Produktion,
die eben einfach nur von ZN minus 1 nach XN geht,
die ja existiert, weil ZN ja ein Endzustand ist.
Also dann habe ich, wenn es in A1 eine Erfolgsrechnung gibt,
dann kann ich das Wort auch in der Grammatik ableiten.
Und jetzt muss man noch zeigen,
wenn ich ein Wort in der Grammatik ableiten kann,
dann gibt es auch eine Erfolgsrechnung im Automaten,
damit man insgesamt gezeigt hat, die Grammatik,
die ich hier eben angegeben habe,
die akzeptiert tatsächlich die von dem Automaten generiert tatsächlich die vom Automaten akzeptierte Sprache.
Und diese Umkehrung, die geht ja auch relativ schnell,
da sagt man, naja, in der Grammatik kann ich
ja nur mit dem Staatssymbol Z 0 anfangen.
Und ich kriege das Symbol nur irgendwann weg,
wenn ich so eine Produktion hier benutzt habe.
Und dann kann man wieder sagen, all die Produktionen,
die ich nach und nach benutze, entsprechend kannten im Automaten.
Also komme ich vom Automaten irgendwie vom Staatszustand zu einem Endzustand.
Und dann gibt es noch den Sonderfall mit dem Lamda in Z0.
Ja, ist ja hier
auch möglich
Also wenn du, wenn Z-Strichen Endzustand ist,
und es so eine Kante gibt,
die dich von engem Zustand in den Endzustand reinführt im Automaten,
dann gibt es ja trotzdem,
also dann gibt es ja so eine Kante hier und dann gibt es ja diese Produktion.
Du könntest die also benutzen und dann hast du ja weiterhin
dieses Non-Terminal-Z-Strich und kannst mit dem ja wieder abbilden,
dass du aus dem Automaten rausgehst.
Also wenn es jetzt Strichen Endzustand ist,
dann hast du quasi die Möglichkeit,
entweder die erstgenannte Produktion zu nehmen oder die zweite oder Typen
der ersten Produktion,
wenn es mehr gibt
Wenn man, wie gesagt, das hier, die dritte Zeile,
wenn man die einfach für alle Endzustände nimmt und die zweite dann weglässt,
dann ist es noch ein bisschen offensichtlicher.
Dann kannst du quasi immer zum Endzustand irgendwie gehen und dann entweder sagen,
ich möchte noch weitergehen oder ich möchte zu Lamnah abbrechen.
So, genau, wichtig ist, ich habe mir jetzt nur angegeben,
Grammatik zu einem Automaten und dann habe ich beide Richtungen gezeigt.
Also die erste steht hier und die zweite,
die Umkehrung geht auch, haben wir eben ein bisschen mündlich gemacht.
Jetzt habe ich das gezeigt, weil ich ja jetzt,
jetzt weiß ich also zu jeder,
zu jeder regulären Sprache gibt es eine rechtslineare Grammatik,
die die Sprache generiert
Und jetzt muss ich noch,
weil ich hierhin geschrieben habe, genau dein Wenden,
also beide Richtungen, jetzt muss ich auch noch zeigen,
zu jeder rechtslinearen Grammatik gibt es auch einen Automaten,
der die Sprache akzeptiert.
Geht fast genauso, wenn ich so eine rechtslineare Grammatik habe,
dann definiere ich mir den NFA auf die folgende Art und Weise.
Für jedes Non-Terminal, also für jedes ASVN, mache ich mir halt einen Zustand.
Zusätzlich brauche ich irgendwie noch dieses Z-Lamda, das kommt gleich warum.
Symbole, die ich lese, entsprechend wieder genau den Symbolen,
die ich in der Grammatik generieren will. Startzustand ist dann gerade der Zustand,
der dem Startsymbol in der Grammatik entspricht, Endzustand,
da brauche ich ihn, Endzustand, das ist dieses Z-Lamda.
Und dann ist halt die Idee, wenn es eine Kante gibt,
nee, Moment, hier, wenn es eine Produktion gibt, vom Non-Terminal Q zum Non-Terminal
R und U ist irgendwie so eine Zeichenkette aus Terminalzeichen,
dann mache ich mir eben so eine Kante, Z-Q-U-R,
wenn es so eine Produktion ist,
die quasi in der Grammatik dazu führt, dass ich abbreche,
wenn er rechts kein Non-Terminal mehr erzeugt wird,
dann gibt es halt keins, dann bin ich fertig.
Und da mache ich mir dann als Regel,
dass ich in diesem Endzustand Z-Lamda gehe.
Und da habe ich
das erreicht
NFA, weil hier das U, das kann auch Lamda sein,
also kann ich hier auch irgendwie Lamda-Kanten haben.
Und man könnte sich jetzt noch daran stören, dieses U aus VT-Stern hier.
Das könnte aus mehreren Symbolen bestehen. Also es könnte
eine Produktion geben, von Kuh geht es nach kleinen A-Klein-B-Groß-R.
Das haben wir streng genommen bei DFAs und NFAs nicht eingeführt,
dass ich mehr als ein Symbol an der Kante stehen habe.
Und wer sich daran stört, der führt hier dann halt einfach,
statt eine Kante zu haben,
von ZQ geht es mit A, B nach ZR,
dann führe ich mir halt noch einen Zwischenzustand ein.
Dann sage ich von ZQ geht es mit dem A
in irgendeinen Zwischenzustand und dann mit dem B zu ZR,
dann habe ich das wieder
Und dann kann man genauso wie eben zeigen, dass das wieder das hier erreicht,
was wir erreichen wollten, dass RG gleich LA2 ist.
Nun? Genau. Und dann ist man da fertig.
Da steht nochmal der Hinweis, wer sich daran stört,
dass da mehr als ein Buchstabe steht,
der kann da noch zwischen Zwischenzuständen einführen.
Und das führt eben dazu, dass es ein NFA ist.
Einmal kann das Ulien Lamnder sein, das ist schon mal,
da spricht schon mal sehr für den NFA und dann kann
es hier ja auch irgendwie eine Produktion geben mit A,
B und mit A,
C und dann
habe ich da auch so
einen Nicht-Determinismus drin
Also es reicht ja auch schon,
dass ich mit Kuh von Kuh mit A zu R kommen
kann und von Kuh mit A zu S oder so,
dann war ja auch schon nicht die Terminismus.
Deswegen brauche ich da einen NFA, aber das macht ja nichts,
wenn ich einen LFA habe, dann weiß ich auch die Sprache regulär.
Ja, jetzt hat man das gezeigt und dann weiß man,
zu jeder regulären Sprache gibst,
die ersten vier hatten wir schon und jetzt ist noch einer dazugekommen,
also auch eine rechtslineare Grammatik gibt es, das wird immer mehr.
Und die waren ja eine Einschränkung der kontextreinen Grammatiken und jetzt kann man zeigen,
dass Also, jetzt wissen wir, erst mal wissen wir jetzt,
die kontextfreien Sprachen können also alles, was regulär ist.
Also wir haben die reguläre Sprachfamilie und die kontextfreien können auf
jeden Fall schon mal alles, weil diese speziellen kontextfreien Grammatiken,
nämlich die Rechtslinie an, die erfassen das schon.
Gleichzeitig wissen wir aus dem, was wir vorhin gemacht haben,
A, Hoch-NB hoch-N, kriegen wir hin.
Und wir wissen von der letzten Vorlesung mit dem Pumpinglamer auch,
in B, Hoch-N kriegen wir nicht als reguläre Sprache hin.
Ergo, Sprachfamilie der kontextfreien Sprachen,
echt größer als Sprachfamilie der regulären Sprachen
Kann man jetzt, wenn man möchte,
noch weiter treiben und sich überlegen, was ist denn das Automatenmodell,
was den Kontext freien Sprachen, kontextfreien Grammatiken entspricht.
Bisher weiß ich nur, rechtslineare Grammatiken sind entsprechenden DFAs und
NFAs und so. Das kann ich mich fragen,
na gut, wenn ich jetzt aber wieder all das hinzunehme,
was mir kontextfreie Grammatiken erlauben, wo bin ich dann?
Und dann bin ich bei dem, was wir einmal
so kurz vorletztes Mal hatten, mit diesem Kellerautomaten.
Wenn eine Sprache kontextfrei ist, sprich,
wenn es für die eine kontextfreie Grammatik gibt,
die sie generiert, dann kann ich so einen Kellerautomaten angeben,
der C mit Leam Keller oder wahlweise auch mit Endzustand akzeptiert.
Wollen wir nicht machen, ist deutlich umfangreicher,
läuft aber aufs gleiche hinaus
Idee ist halt, wenn man diesen Keller hat,
dass man auf den Keller ständig Teile der Produktionen ablegt,
wenn ich eine lange rechte Produktion habe,
dann lege ich da so alles ab und danach arbeite ich das quasi ab.
Und wenn auf dem Keller dann Nonterminal ist,
dann packe ich wieder auf den Keller die ganze rechte Seite oder das
ist so grob die Idee, mit dem Keller zu arbeiten,
indem man da immer die rechten Seiten der Produktionen drauf tut.
Ja. Und jetzt... Das haben wir jetzt. Das sind unsere beiden Sprachfamilien,
Reck und CF und wir wissen, Sprachfamilie ist echt größer als,
also CF ist echt größer als Reck,
mit diesem A,
auch in Biocheln wissen wir das
Huh. Fragen. Das war der zweite Punkt für heute.
Also Konstruktionsmethoden haben wir jetzt gehabt. Primär für sowas wie auch NBON,
das neun Terminal in die Mitte schreiben,
damit man links und rechts gleichmäßig wächst oder für sowas wie C hoch M,
das neun Terminal einfach nach links oder rechts schreiben und linear erwachsen.
Das waren die beiden Konstruktionsmethoden. Dann wieder muss man
immer zeigen, L von G ist tatsächlich M.
Und jetzt haben wir uns angeguckt,
es gibt einen ganz engen Zusammenhang zwischen Automaten und Grammatiken,
auch wenn das zuerst nicht so aussieht.
Und damit haben wir uns dann jetzt eben noch überlegt,
wie diese beiden Sprachfamilien zusammenhängen
Das waren so die zwei Punkte für jetzt Fragen.
Dann kann man sich jetzt fragen, bei Reck haben wir das ja gemacht,
mit den Abschlusseigenschaften. Jetzt kann man sich fragen,
ist CF, hat das auch die ganzen vielen Abschlusseigenschaften,
die Reck hat oder hat das irgendwie weniger?
Da steht noch mal, was Abschluss bedeutet, Abschluss,
wenn ich eine Operation habe, wie zum Beispiel die Vereinigung,
möchte ich jetzt wissen, wenn zwei Mengen kontextfrei sind,
ist dann auch die Vereinigung kontextfrei.
Und jetzt wird hier so behauptet,
die kontextfreien Sprachen sind abgeschlossen gegenüber Vereinigung,
Konkretenation und Sternbildung
Dann könnten wir jetzt auch versuchen, mit Kellerautomaten zu machen,
aber bleiben wir mal dem Setting mit Grammatiken.
Da geht es relativ schnell. Wenn ich also zwei Grammatiken
habe für die zwei Sprachen, also G1 für L1,
G2 für L2, und ich will jetzt zeigen,
dass dann auch die L1 vereinigt L2 eine Kontextfreisprache ist.
Jetzt muss ich also eine Grammatik basteln,
die die Vereinigung von L1 und L2 generiert.
Eine Idee
Das ist relativ einfach, ja. Ja,
man hört ja erst mal so eine Produktion, der zweite,
man denkt zuerst, beim Staatssymbol, das... Warte.
Ich bin mir gar nicht sicher, ob du das also,
also du nimmst alle Produktionen dazu von der zweiten Grammatik,
das hast du quasi alle Produktionen auf einmal,
alle Produktionen von G1 und alle Produktionen von G2.
Das klingt schon mal gut. Und was machst du jetzt
mit dem Staatssymbol? Ja, das ist implizit sozusagen,
also wenn man das dann aufschreibt,
dann auf die rechte Seite des Staatsimpuls, dass das reden würde,
was auf dem Bein bleibt in der Seite.
Der Bein sprach nach vorher. Der Staatssymbole. Ja. Echt,
meinst du, das erste reicht? Wenn ihr sie nur zusammenschmeißt,
dann hast du jetzt kein Staatssymbol oder du hättest zwei,
das wäre irgendwie doof.
Also musst du irgendwie, irgendwas musst du nochmal mit dem Staatssymbol.
Klappt, einfacher ist, neue Staatssymbol einführen und von da
zu den beiden Staatssymbolen der beiden Gewaltigen geben, fertig.
Das andere geht auch, dass du sagst,
ich nehme alle rechten Seiten der einen Produktion und knall die
da dazu.
Aber das andere ist einfacher
Konkretationen, fast genauso. Also Vereinigung war jetzt die Idee,
ich fühle mir, also ich schmeiße alle Produktionen zusammen und fühle mir ein neues Startsymbol X ein,
von dem komme ich einmal zur S1 und einmal zur S2. Konkretination?
Genau. Einfach zur Konkordination der beiden Staatssymbole quasi und Sternbildung fast genauso,
kann man sich dann überlegen. Also hier nochmal aufgeschrieben,
die Grammatik geht reih für die Vereinigung,
ich vereinige die Non-Terminale, nehme mir ein Staatssymbol dazu,
ich vereinige die Terminalzeichen und ich nehme die,
halt dieses neue Staats-Mules 3 und die Produktion mache ich eben
so Funktionsmengen der Einzelnen vereinigen und dann eben diese eine Produktion hinzufügen,
von S3 geht es nach S1 oder S2.
Also im Grunde genommen steht er gerade ein bisschen umständlich,
im Grunde genommen alles zusammenschmeißen und dann eben dieser eine neue Produktion einführen.
Und dann ist die Behauptung,
die von G3 generierte Sprache ist tatsächlich L1 vereinigt,
L2. Naja, wenn ich ein Wort habe aus L1 vereinigt L2,
dann ist das entweder in L1 drin oder in L2.
Wenn es in L1 drin ist, dann kann ich das von S1 aus produzieren.
Naja, dann kann ich das in G3 jetzt,
indem ich von S3 nach S1 gehe und dann produziere,
auch machen
Genau das Gleiche, wenn das in den L2 drin ist.
Und wenn ich eben Wort aus G3 habe, Rückrichtung,
dann muss ich von S3 zuerst nach S1 oder S2
gegangen sein und habe dann eben Produktion benutzt.
Ja, und das kann ich dann eben,
dann habe ich entweder ein Wort aus L1 abgeleitet oder
ein Wort aus L2. Ja,
Ich glaube, ich muss vorher noch dafür sorgen oder ich möchte vorher
noch dafür sorgen, dass die Non-Terminale alle unterschiedlich benannt sind.
Also ich habe zwei Grammatiken, G1G2 und dann belasse ich
die Non-Terminale in der einen Grammatik, so wie sie sind.
Und in der anderen Grammatik, da kriegen die alle noch einen Strich.
Dann heißen die alle unterschiedlich. Ich ändere nicht die generierte
Sprache der zweiten Grammatik und dann kann ich das machen.
Wenn ich das nicht mache, dann könnte ich jetzt nämlich plötzlich
so Sachen machen, wie dass ich von S2 ausgehe.
Eigentlich ja jetzt mit den Regeln für die Grammatik G2 arbeiten will.
Und wenn da jetzt aber plötzlich ein Nonnen-Terminal dabei ist,
für das ich eine Regel in G1 habe,
kann ich die plötzlich benutzen.
Das ist doof, das will ich nicht.
Also ich will vorher dafür sorgen,
dass die beiden hier V1, N und V2 N,
dass die
das junkt sind
Das kriege ich auch hin und da funktioniert das auch alles.
Zweitens, genau, was Kim eben schon meinte,
hier von S4 geht es nachher S1S2. Und dann habe ich
eben von S1 aus generiere ich ein Wort aus LG1 und
aus von S2 generiere ich ein Wort aus LG2 und verknüpfe die.
Dann habe ich genau das hier. Und die letzte für die Sternbildung,
da haben wir genau diese Idee von dem A Stern generieren quasi,
dass ich jetzt von meinem neuen Startsymbol S5 aus erstmal so eine Kette von S1 generiere,
bis ich irgendwann genug habe,
dann höre ich mit den Lamm da auf.
Und von jedem dieser S1 kann ich dann ja
ein Wort aus LG1 generieren.
Und dann habe ich gerade L1 Stern.
Die gehen also
auch alle super hier
War eine andere, genau, haben wir gedacht.
Nicht abgeschlossen gegenüber Durchschnitt, Komplimentbildung und Mengendifferenz.
Also deutlich weniger Abschlusseigenschaften als bei regulären Sprachen,
die waren gegenüber das alles abgeschlossen.
Gelingt immer durch Angabe eines Gegenbeispiels. Jetzt bräuchte man erstmal
ein Gegenbeispiel. Wir kennen ja noch gar keine Sprache,
die nicht kontextfrei ist. Von welcher vermutet ihr denn,
dass sie vielleicht nicht kontextfrei sein könnte?
Könnt ihr euch eine überlegen, die vielleicht nicht kontextfrei sein könnte?
Wir haben ja jetzt so zwei Konstruktionsmethoden kennengelernt.
Einen linken Teil mit Rechenteil in Verbindung setzen oder irgendwie so linear rübergehen.
Ich kann mir das jetzt überlegen,
so geht das vielleicht irgendwas nicht
Was kann ich damit vielleicht nicht machen?
Muss man jetzt auch gar nicht so kompliziert denken,
wie irgendwie A hoch P mit P ist Prim oder so,
sondern so kann man irgendwie eleganter machen.
Was wird wahrscheinlich nicht gehen? Genau, auch in Bio-NC
hoch Ende. Warum nicht? Naja,
ich kann zwar einen Link mit dem rechten Teil irgendwie in Beziehung setzen,
sowas wie auch in B hoch N,
aber jetzt kann ich da irgendwie nicht quasi nicht rausspringen und sagen,
naja,
und genauso viele Bs will ich jetzt
nochmal erzeugen
Das kriege ich irgendwie nicht hin. Das hängt damit zusammen,
dass ich irgendwie immer nur ein Non-Terminal auf der linken Seite habe.
Und dass das eben kontextfrei ersetzt wird. Dadurch kriege ich
das nicht hin. Welchen Kontext mitbenutzen dürfte, dann könnte ich
so bestimmte Geschichten machen, dass ich das vielleicht hinkriege.
Aber so wird höchstwahrscheinlich auch im Bio-HCON nicht gehen. Wenn ich also durch den Schnitt Zweiersprachen,
von denen ich weiß, dass sie kontextfrei sind,
A hoch N, Bio hoch N,
C hoch N hinkriege und dann noch beweisen würde,
dass das tatsächlich nicht kontextfrei ist,
jetzt haben wir es ja nur so grob begründet,
dann wüsste ich,
okay,
gegenüber Schnitt ist es
nicht abgeschlossen
Wie kriege ich das denn hin? Zwei kontextfreie Sprachen schneiden
, sodass A-Hoch-N-B-Hoch-N-C-O-N rauskommt. Genau. A-Hoch-N-B-Hoch-N-C-O-M und A-Hoch-M-B-Hoch-N-C
hoch-N. Hier die Geschichte. Ich nehme einmal die Sprache,
wo ich gleich viele ASVBs habe,
aber dann beliebe ich viele Cs und die Sprache,
wo ich gleich viele As, nein,
wo ich gleich viele BSVCs habe und vorneweg beliebig viele As.
Wenn ich die schneide, dann kommt genau die Sprache raus,
gleich viele As, wie gleich viele Bs, wie gleich viele Cs.
Und wenn ich von der nachfolgend noch zeige,
dass die tatsächlich nicht kontextfrei ist, weiß ich,
kontextfreie Sprachen sind nicht überschnitt abgeschlossen.
Und der Rest, also Komplimentbildung und Meng-Differenz,
das folgt dann ganz schnell mit dem Morgen.
Also wenn ich weiß, sie sind nicht gegenüber Schnitt abgeschlossen,
dann können sie jetzt nicht gegenüber Kompliment abgeschlossen sein.
Wenn sie es wären, dann wäre sie gegenüber Kompliment und Vereinigung
abgeschlossen, also auch gegenüber Schnitt, wegen dem Morgen.
Also sind sie auch nicht gegenüber Kompliment abgeschlossen. Wenn sie nicht gegenüber Kompliment abgeschlossen sind,
dann können sie aber auch nicht gegenüber Mengendifferenz abgeschlossen sein,
sonst müsste ja sowas wie Sigmar Stern ohne L gehen.
Also geht das dann beides nicht.
Da habe ich die alle erschlagen. Krux ist,
ich muss immer noch zeigen,
dass auch RBO-Erziehung eher nicht geht
Da hilft uns dann der große Bruder vom Pumping Lemmer.
Das zweite Pumping Lemmer. Und bis wir da gleich sind,
brauchen wir noch so eine Normalform für kontextfreie Grammatiken.
Normalform ist immer schön. Normalform bedeutet, es gibt
eine Form, in die ich jede Grammatik bringen kann.
Das ist deswegen praktisch,
weil wenn ich dann irgendwie argumentieren will über in Beweisen,
wie sich Grammatiken verhalten oder wenn ich Algorithmen implementieren will für Grammatiken.
Und ich weiß, alle Regeln haben eine bestimmte Form,
weil die Grammatik vorher in Normalform gebracht wurde.
Dann habe ich
viel weniger Fallunterscheidungen.
Sehr praktisch
Und die Chomsky-Normalform kommt hinzu, die ist als Normalform,
na, weiß gar nicht, wie ich es sagen soll, sehr einfach.
Sieht so aus. Kontextfreie Grammatik ist in Chomsky-Normalform,
genau dann, wenn alle Produktionen von dieser Form sind.
Entweder, also ein Non-Terminal auf der linken Seite habe ich immer,
aber auf der rechten Seite habe ich jetzt entweder genau zwei Non-Terminale oder genau ein Terminalzeichen.
Das sind die einzigen beiden Formen von Produktionen,
die es gibt in der Chomsky-Normalform.
Und jetzt wird die Aussage gleich sein,
ich kann jede kontextfreie Grammatik in Chomsky-Normalform bringen.
Mit einer Ausnahme, welcher
Was würde ein Stück, warum kann ich bestimmt nicht jede Kontextfreie Grammatik in diese Form bringen?
Ich kann sogar eine riesige Klasse nicht in diese Form bringen.
Alle die? Alle die? Na,
geht mal so durch, Wörter der Länge null,
Wörter der Länge 1, Wörter der Länge 2,
ihr könnt jetzt zum Beispiel Wörter der Länge null erzeugen.
Nee, das ist irgendwie doof. Also Johnski Normalphone klingt zwar
sehr cool da gerade, aber es wäre jetzt irgendwie eine Vollkatastrophe,
dann kann ich ja keine Sprachen generieren, die Lamm da enthalten als Wort.
Deswegen führt man sich noch sowas ein wie eine erweiterte Chompsky-Normalform,
wo man sagt, na gut, es darf diese eine Produktion geben,
die von Staat sind, wohl zu Lamm da geht.
Sonst sehen die aber alle so aus. Und dann will
man zusätzlich noch haben, dass das S nirgendwo,
also der Staat im Wohl S, nirgendwo auf der rechten Seite auftritt.
Weil wenn es das doch täte, dann habe ich nämlich doch dieses Ding,
dass ich irgendwann zwischendurch das S löschen kann.
Und das will ich nicht. Sondern ich will dann sagen,
okay, es gibt diese Möglichkeit, zu Lamm da zu kommen,
einfach nur, um das in der Menge drin zu haben und danach alles in Chompsky-Normalform und insbesondere kein Löschen von Non-Terminalen und so.
Also wenn ihr euch das hier anguckt,
das Spannende hier sind so Sachen wie, ich weiß zum Beispiel,
das Wort, was ich generiere,
wird auf jeden Fall länger
Also die Satzform, die ich habe, kann nie kürzer werden.
Das kann ich benutzen, wenn ich mir Gedanken darüber machen will.
Wir hatten ja vorhin einmal kurz dieses Wortproblem, wo wir gesagt haben,
hey, das ist für Automaten schwieriger und für Grammatiken irgendwie sieht es komplizierter aus.
Wenn ihr eine Grammatik habt, die in dieser Jumpsky-Normalform ist,
dann seid ihr plötzlich in der Lage, dass ihr sagen könnt,
oh, ich muss nur endlich viele Produktionen ausprobieren.
Weil für ein Wort der Länge N könnt ihr halt nur
mit solchen Regeln hier, A, B, C,
irgendwie Satzform der Länge Ende erzeugen und die dann zu Terminalzeichen ableiten.
Mehr könnt ihr gar nicht machen. Also gibt es nur so
endlich viele Möglichkeiten, die man da so durchprobieren muss.
Es bringt halt nichts mit A, B, C,
Satzform der Länge N plus 1 zu erzeugen,
weil ich dann kein Wort der Länge N rauskriege
Und für sowas ist das halt wunderschön. Also man kann
die benutzen zum Beweis des Pumping-Lämmers und für den Algorithmus für das Wort Problem.
So, und die wollen wir jetzt konstruieren und man kann sich vielleicht schon vorstellen,
dass das irgendwie kompliziert wird, weil wir müssen,
wofür müssen wir alles sorgen?
Wir müssen dafür sorgen, dass wir rauskriegen oder dass wir
diese ganzen Landerproduktionen weghaben. Die wollen wir alle nicht haben.
Also wenn es irgendwie von B zu Lamda geht oder so,
wollen wir nicht, das muss alles weg.
Dann will ich keine Produktion haben, wo auf der rechten
Seite ein Non-Terminal steht, also sogenannte Kettenregeln von Großart zu
Groß B will ich nicht haben. Da kann man sich überlegen,
vielleicht kriegt man die so weg, dass man sagt,
naja,
von Großart zu Groß B und dann von Groß B irgendwo hin,
da kann ich auch gleich von GroßA
zu diesem irgendwo hingehen
Und dann kriegt man es vielleicht weg. Dann will ich
als nächstes weghaben, dass die rechten Seiten zu lang sind.
Also dass da irgendwie mehr als zwei Symbole stehen.
Dann will ich auch noch weghaben, dass da unterschiedliche Sachen stehen können.
Also Non-Terminale und Terminale, wenn die alles weghaben.
Das klingt schon nach so einem mehrschrittigen Ding.
Aber tatsächlich kann man das machen. Man kann zeigen,
ich kann es weder kontextfreien Grammatik, so eine äquivalente Grammatik generieren,
die in Trumpsky Normalform ist. Oder eben für den Spezialfall,
dass das Lamm da mit drin sein soll,
dann ist eben vom Staatssymbol zu Lamda,
das ist dann die einzige Lamda-Produktion,
alle anderen Produktionen in Trumpsky Normalform und Essstrich
kommt auf keine rechten Seite vor
Das geht im Grunde genommen so, dass man sich,
man überlegt sich gleich im ersten Schritt,
wird Landa generiert, ja oder nein?
Und falls ja, merkt man sich das und fügt das
im letzten Schritt wieder hinzu.
So. Okay, und die wollen wir jetzt machen?
Sechs Schritte. Im Beweis werden in sechs Schritten jeweils neue Äquivalente Grammatiken erzeugt,
das stimmt nicht ganz,
in einem Schritt wird keine äquivalente Grammatik erzeugt,
nämlich im ersten
Die danach sind alle äquivalent und im sechsten füge ich es
dann wieder hinzu, sodass ich wieder zu ursprünglichen Äquivalent bin.
Steht aber auch gleich auf den einzelnen Folien. Ich gebe jetzt so die Konstruktion an,
also die einzelnen sechs Schritte,
dann kommt bei den meisten so ein kurzes Beispiel hinten dran
und dann machen wir immer so ein bisschen mündlich,
dass tatsächlich die so neu generierte Grammatik äquivalent ist zu der ursprünglichen.
Das bauen wir mal so mündlich ein. Hier steht,
überspringen wir, überspringen, das stimmt nicht ganz,
wir machen das so ein bisschen mündlich.
So, und das Verfahren machen wir deswegen,
damit nochmal was Händisches drin ist, wo man üben kann,
Formalismen zu lesen und sie händisch als Algorithmus quasi auszuführen.
Und das Setting dafür ist quasi, dass man weiß,
okay, wenn ich so ein Ding dann habe,
dann kann ich eben schön das Pumping-Lämmer beweisen,
schön das Wortproblem lösen, praktisch.
So, was passiert? Als erstes wollen wir das Land da freimachen.
Das Ziel ist also, ich will keine Produktion haben,
die von B geht es nach Lamda.
Solche Produktion will ich nicht mehr haben. Dazu muss ich
ja erstmal ermitteln, wer alles zu Lamda geht.
Das mache ich wie folgt. Ich nehme mir in so
eine Menge M0, erstmal alle Non-Terminale,
die direkt zu Lamda gehen
Ja, das sind nämlich ganz bestimmt Landerproduktionen. Jetzt gibt es hier aber das Problem,
wenn da sowas drin ist wie A, B,
C und ich habe noch die Möglichkeit,
von D zu A, B, C zu gehen,
dann komme ich ja auch von D zu Lamm da.
Ich gehe von D zu A, B, C,
von denen drei zu Lamda, will ich das D also auch mit aufsammeln.
Das heißt, ich muss das sukzessive immer weitermachen.
Ich habe mir als M0, all die Non-Terminale genommen, die zu Lamda gehen.
Und jetzt nehme ich mir in die nächste Menge M1 halt alles,
was schon in M0 drin ist und nehme noch die Non-Terminale hinzu,
von denen ich so ableiten kann,
dass auf der rechten Seite nur Non-Terminale stehen,
die ich eben schon bestimmt habe.
Und das mache ich
immer weiter
Bis ich irgendwann so ein K habe,
wo nichts Neues mehr dazugekommen ist. Muss existieren,
ich habe ja nur endlich viele Non-Terminale, muss also irgendwann abbrechen.
Und dann setzt man als V-Lamda, das sind quasi die Non-Terminale,
die zulande ableiten, das ist das MK.
So. Und jetzt kommt ein bisschen was Verworrenes. Wenn ich
jetzt eine Produktion habe, von S geht's zu ABC.
Und ABC sind vielleicht alle sogar in dieser Menge V-Lamda drin.
Das heißt, von denen komme ich überall zu Lamda
Dann ist es ja aber so, dass ich da mit
zwar zu Landa kommen kann, aber nicht muss.
Oder Umständen gibt ja auch noch was anderes. Das heißt,
ich will irgendwie abbilden, dass ich jetzt von S zu ABC komme.
Und ich muss mir auch merken, auf der rechten Seite,
ich hätte von A zum Beispiel auch direkt zu Landa kommen können.
Ich habe aber diese Produktion A zu Landa nicht mehr.
Deswegen muss ich mir dazu basteln,
von S geht es zu ABC und von S geht es zu BC,
von S geht es zu C, von S geht es zu AB und all sowas.
Das muss ich mir alles dazu bauen. Um abzubilden,
dass man eventuell mit einem dieser Dinger zu Landa gegangen wäre
oder dass man die Möglichkeit gehabt hätte.
Das definiert man sich formal über solche Substitutionen
Dass man sagt, wenn ich ein Non-Terminal habe,
das gar nicht in V-Lamm da drin ist,
dann passiert auch nichts,
dann bilde ich das quasi wieder auf sich ab,
also auf die Menge, die dieses Symbol enthält.
Und wenn es drin ist, dann bilde ich es auf
die Menge A-Lamm da ab. Warum macht man das?
Das führt jetzt dazu, dass man sagen kann,
ich will die folgenden Produktionen drin haben in meiner neuen Grammatik.
Vom Non-Terminal A geht es zu V,
wobei V eben nicht Lambla sein soll.
Ja, ich will ja keine Lambla-Produktion mehr drin haben.
Und V soll ein Element sein aus,
und jetzt wird diese Substitution angewendet,
Substitutionen angewendet auf rechte Seite von AW.
Also ich nehme mir
eine Produktion, AW
Und wenn da auf die rechte Seite der Produktion,
auf das W, wendig diese Substitution Sigma an.
Und das, was da alles rauskommt, das sind meine neuen rechten Seiten.
Das führt dazu, was ich eben beschrieben habe,
dass man quasi auf der rechten Seite nach und nach all die Symbole löscht,
von denen man zu Lamda hätte gehen können.
Und dann ist tatsächlich die so definierte Grammatik, die erfüllt gerade,
dass sie fast äquivalent ist zu ursprünglichen, nur halt ohne das Lamda.
Kann man sich dann ziemlich schnell überlegen. Wir gucken uns mal erstmal
ein Beispiel an und dann begründen wir das nochmal hier.
Wenn ich die Grammatik hier oben habe, Oder diese Produktion.
Ja, und ich will jetzt diese Menge Faulanda bestimmen.
Also die Menge aller Non-Terminale, die zu Lamda ableiten können.
Dann gucke ich einmal rüber und suche erstmal die Lamda-Produktion raus.
Da gibt es irgendwie nur die hier, von Z geht es zu Lamda.
Dann kommt also in die Menge M0, kommt das von C,
Entschuldigung, die Menge M0 kommt dann das C.
Als nächstes gucke ich, gibt es irgendwo rechte Seiten,
wo nur das C auftritt. Ist der Fall,
von A, komme ich nach CC. Jetzt ist ja die Idee,
wenn ich von A zu CC komme und ich komme von C zu Lamda,
dann kann ich also von A zu CC,
von dem einen C zu Lamda,
von dem anderen C zu Lamda,
dann bin ich auch von A
zu Lamda gekommen
Deswegen nehme ich jetzt das A mit rein.
Das ist also im M1 das A drin.
Jetzt gucke ich als nächstes, gibt es irgendwo rechte Seiten,
wo Wörter auftreten, die nur aus Cs und As bestehen.
Mit der gleichen Begründung. Wenn das wieder der Fall ist,
dann kann ich auch die linke Seite wieder zu Lande ableiten.
Gibt es aber nicht, weil hier bei ACX,
da tritt ja noch das X auf,
bei XC tritt auch noch das X auf,
B hatten wir sowieso noch gar nicht.
Also bin ich fertig. Kommt nichts Neues dazu,
M2 ist gleich M1. Jetzt gucken wir uns nochmal an,
wie das aussieht, wenn ich eine Substitution anwende.
Beispiel für die Anwendung der Substitution,
soll jetzt nichts mit dem Obing
zu tun haben
Wenn ich eine rechte Seite habe, die so aussieht,
X-A-B-C, Y. Ich habe jetzt irgendeine Regel,
die rechte Seite ist X-A-B-C,
Y. Und in meinem V Lamna habe ich vorher irgendwie bestimmt AC.
Soll wie gesagt nichts mit dem Beispiel da oben zu tun haben,
aber in meinem V Lamna ist trotzdem jetzt irgendwie AC drin.
Und ich habe jetzt irgendwie eine Produktion, da sieht die
rechte Seite so aus. Was ich jetzt mache ist,
ich nehme die gleiche linke Seite und als rechte Seite
nehme ich all die Elemente, die hier drin stehen.
Also Substitutionen angewendet auf X-A-B-C, Y, alles,
was da rauskommt, das sind meine neuen rechten Seiten.
Was passiert da? Ich nehme quasi dieses Wort
Und für jedes Symbol, was in Frau Lamda ist,
kann ich mich entscheiden, lösche ich das oder nicht.
Beim ersten habe ich es gar nicht gelöscht,
da habe ich weder das A noch das Ziel gelöscht.
Beim zweiten habe ich das A gelöscht, beim dritten habe ich
das Z gelöscht, beim vierten habe ich beide gelöscht.
Das, was nicht passieren darf, ist,
der Fall tritt hier bei beiden nicht auf, aber das,
was nicht passieren darf, ist, dass ich alles lösche,
dann hätte ich ja wieder das leere Wort.
Das ist da zwar mit drin streng genommen in der Menge,
Substitutionen auf etwas angewendet,
also wenn ich da jetzt zum Beispiel hätte AC,
dann würde ich die Substitution auf AC anwenden,
da käme das leere Wort raus,
das wäre in der Menge drin
Würde man hier aber jetzt nicht mit reinnehmen,
weil das Foul dann zwar in Sigma W ist,
aber es ist eben nicht ungleich lamm da.
Also hier kommen nur Produktionen dazu, die mindestens die längere Eins haben.
Das ist jetzt hier in dem Eins. Wo bitte?
Meine Menge im Eins. Warum das eine Buchstabe ist.
Warum sollte er? Ja. Ja. Aber es geht ja
um die Non-Terminale, die du zu Lande ableiten kannst.
Also die Non-Terminale, B zum Beispiel,
von denen du irgendwie durch Ableitungen zum Wort Landa kommen kannst.
Du kommst zum Wort X. Da tritt zwar das Landa mit auf,
aber es geht darum, dass du das leere Wort ableiten kannst.
Illustriert da oben irgendwie zu jedem AV, bestimmen wir,
ob A, Stern Landa gilt.
Also nicht irgendwie Lammde und irgendwas anderes dazwischen.
Genau. Ja. Habt ihr das verstanden?
Das ist ein bisschen wild mit den Substitutionen und so.
Die Idee ist eigentlich relativ einfach, die Aufschreibweise ist halt schwierig. Man bestimmt halt nochmal,
man bestimmt hier im ersten Schritt, all die Non-Terminale,
mit denen ich zum leeren Wort kommen kann dann, wenn man die hat,
dann guckt man sich jetzt alle rechten Seiten seiner Regeln an.
Und wenn da bei einer rechten Seite eben diese Non-Terminale auftreten,
dann kommen alle Produktionen hinzu, die man erreicht, wenn man die löscht.
Alle Produktionen, die man erreicht, wenn man diese auf der rechten Seite löscht, ja.
Dann kann man sich das hier relativ schnell überlegen,
so wenn so ein Wort aus LG ist,
dann muss das eben auch, Lamm,
da kriege ich nicht hin, deswegen fliegt das raus,
aber sonst muss das in LG drin gewesen sein,
weil ich quasi die gleichen Produktionen benutze,
nur dass ich eben Symbole gelöscht habe,
von denen ich sonst eben zu Lamm
da gegangen wäre
Damit kann man sich das ziemlich schnell überlegen,
ist das, dass die Gleichheit da gilt.
Schwieriger erster Schritt. Was man übrigens gewonnen hat, weil,
ja. Aus dem Arzt geht halt mal zum Beispiel.
Wo bist du? Bei dem Sinkwa. Ja,
okay. Tiefe daraus. Hat es eben gefragt.
Das war jetzt auch. Da wäre Lamm da drin,
in der Menge hier wäre Lamm da drin,
also in Sigmar AC wäre das Lamm da drin
Das führt nur hier, wenn man die neuen Produktionen aufschreiben will,
da wäre das das eine Ding, was nicht dazu käme.
Alle anderen aus dieser Menge kommen als neue rechte Seite hinzu.
Also die alte ist quasi dabei und alle neun.
Aber das lammt dann nicht, weil man das halt hier explizit ausschließt.
V-Ungleichlamder. Und das will man ja auch nicht haben,
weil wir ja gerade keine Lamblaproduktion haben.
Aber bei Sigmar erzählen wir es drin. Okay,
was man noch machen kann mit der Technik, man kann hier Lambla-Element LG entscheiden.
Warum? Naja, wenn S in V-Lam da drin ist,
dann bedeutet das ja gerade, ich komme von S zu Lambla.
Und das kann man benutzen, um nachher zu sagen,
okay, jetzt die nachfolgenden Schritte, die konstruieren tatsächlich immer Grammatiken,
die Äquivalent sind zu
Also die im zweiten, dritten, vierten Schritt generierten,
die sind jetzt alle Äquivalenz zu der eben konstruierten LG1.
Und im allerletzten Schritt, da sagt man dann,
wenn ich im ersten genau diesen Fall hatte,
also wenn ich im ersten Schritt S-Element V-Lande hatte,
dann bastel ich jetzt noch was dazu,
damit ich wieder die Grammatik habe,
damit ich eine Grammatik habe wie Äquivalenz ursprünglichen ist.
Das kann man dann machen. So, zweiter Schritt,
Kettenregeln entfernen. Solche Regeln hier stören einen auch von A
nach B. Warum stören die einen? Ich will ja
nur noch Regeln haben, linke Seite ein Symbol,
Rechte Seite
zwei Symbole
Oder eben ein Terminalzeichen, aber nicht ein Non-Terminalzeichen.
Was macht man? Man definiert sich hier so ein Operator,
der halt sagt, von A, geht es zu B,
genau dann, wenn es so eine Produktion gibt,
so eine Kettenregel von A nach B.
Und von der bestimme ich die reflexive und transitive Hülle. Sprich,
wenn ich von A zu B komme und von B zu C,
dann ist eben auch A, C in dieser Relation hier.
Kleiner, kleiner Stern. Eigentlich bräuchte man noch einen Algorithmus,
damit man das gut machen kann. Unsere Beispiele sind so klein gehalten,
dass man das immer händisch machen kann. Ansonsten klappt das,
gibt es dazu Algorithmen, dass man das,
also wenn man jetzt irgendwie 100 Symbole hat oder so,
dann gibt es da ganz praktische Algorithmen für
So, und was macht man jetzt? Naja,
wenn man die jetzt bestimmt hat, diese reflexive,
transitive Hülle, wenn ich jetzt zum Beispiel weiß,
es geht von A zu C, irgendwie über Kettenregeln,
dann nehme ich jetzt quasi die rechte Seite von C,
die keine Kettenregeln mehr sind und nehme die direkt als rechte Seiten von A. Dann habe ich das auch.
Also wenn ich,
jetzt definiere ich mir die Grammatik wieder so non-terminal,
übernehme ich mir, Terminal übernehme ich mir,
Staatssymbol übernehme ich mir, aber als Produktionen,
da nehme ich mir jetzt von A geht es nach W mit der Eigenschaft W soll eben kein Non-Terminal sein und es existiert in meiner vorherigen Grammatik,
deswegen hier P1, eine Produktion,
die mich von B zu W führt und Von A komme ich zu B nur über Kettenregeln.
Also nicht von A zu B,
nur über Kettenregeln komme und von B zu einem W,
was eben kein Non-Terminal mehr ist, also keine Kettenregel,
dann komme ich jetzt von A direkt dahin.
Kann man sich auch wieder ganz schnell überlegen, dass diese Äquivalenz hier gelten muss.
Ich habe ja im Grunde genommen nur gesagt,
diese Schritte, die ich mit Kettenregeln gemacht habe,
die überspringe ich jetzt und gehe direkt von da dahin.
Beispiel, wenn ich die Grammatik hier oben habe,
von A geht es nach B oder nach CB,
von B geht es nach C oder D,
von C geht es nach E,
dann habe ich diese drei Relationen hier oder diese drei Dinge in meiner Relation.
Ich komme von A zu B, das ist direkt diese Kettenregel.
Ich komme von B zu C, das ist direkt diese,
wenn ich die beiden habe, von A zu B,
von B zu C, dann komme ich eben auch von A zu C.
Und gleichzeitig, weil es ja die reflexive Hülle sein soll,
gilt auch, dass jedes neuen Terminal X eben zu sich selbst in dieser Relation steht.
Das führt dazu, dass hier quasi das B auch A sein kann,
dass ich hier dann habe,
irgendwie A steht zu sich selbst in der Relation,
von A geht zu weh, also nehme ich A weder auch wieder rein,
sprich ich nehme alle Produktionen dazu, die keine Kettenregeln sind.
Also die Produktion, die ich bisher hatte,
die keine Kettenregeln sind, die nehme ich halt wieder dazu.
Das ist hier die erste Zeile, die nehme ich alle
Und dann überlege ich mir, A ist mit B in Relation.
Von B komme ich zum kleinen D. Also komme ich
auch von A zum kleinen D. Dann überlege ich mir,
B ist mit zehn Relationen,
von C komme ich zum kleinen E. Also komme ich auch
von B zu E. A ist mit zehn Relationen,
von C komme ich zum kleinen E,
also komme ich auch von A zum kleinen E. Ehrlich.
Das sind die Schritte. Also quasi die Kettenregeln überspringen.
Direkt zum Ergebnis der Kettenregeln gehen. Das war der zweite.
Dritter Schritt, reduzieren. Da gibt es drei RL3B,
also es sind zwei Teilschritte bei drittens
Tut man trotzdem beide deswegen in einen Schritt,
weil man auch allgemein gegebene Grammatik sagen kann, so,
jetzt reduzieren wir die. Was will man da machen?
Ich will zuerst alle nicht produktiven Non-Terminale entfernen. Produktiv bedeutet,
wenn ich vom Non-Terminal zu einem Wort kommen kann,
das nur aus Terminalzeichen besteht, dann ist es produktiv.
Wenn es nicht produktiv ist, dann geht das also nicht.
Sprich, ich komme von meinem Non-Terminal nicht zu einem Wort aus
neues Terminalzeichen besteht. Naja, dann kann ich es rausschmeißen,
weil dann trägt es nichts dazu bei,
zu den generierten Wörtern der Sprache
Was macht man so ähnlich wie im ersten Schritt?
Da sind wir von Lamda ausgegangen und haben sukzessive all
die Non-Terminale bestimmt, mit denen ich zu Lamda komme.
Gehe ich jetzt von Terminalsymbolen aus und bestimme sukzessiv alle Non-Terminale, die mir zu Terminalzeichen führen.
Also ich packe in M.0 diese Menge VT und dann gucke ich immer,
gibt es eine Regel,
bei der auf der rechten Seite nur Terminalzeichen stehen,
wie aus M.0 am Anfang, dann nehme ich die Non-Terminale dazu,
die da auf der linken Seite stehen.
Dann gucke ich als nächstes,
jetzt habe ich zum Beispiel das Non-Terminal A und B bestimmt,
als nächstes gucke ich,
gibt es eine rechte Seite,
wo nur Terminalzeichen aufstehen und die
eben bestimmten Non-Terminale
Falls ja, komme ich ja von dem Non-Terminar,
was jetzt auf der linken Seite steht,
wieder zu einem Wort, das nur das Terminal-Zeichen besteht.
Und das mache ich immer so weiter,
bis ich wieder so einen Abbruch habe. Und auch da,
Abbruch muss ich haben, ich habe nur endlich viele Non-Terminale.
Und dann schmeiße ich, das sieht jetzt ein bisschen kompliziert aus,
aber im Endeffekt, ich schmeiße einfach alles raus,
wo Non-Terminale auftreten, die nicht produktiv sind.
Also ich nehme mir als Non-Terminale hier, der Schnitt,
ich nehme mir nur die Terminal-Zeichen, die eben produktiv sind.
Und zusätzlich, das will ich nicht rausschmeißen,
egal ob es produktiv ist oder nicht,
das S. Hier ist es deswegen weiterhin das Staatssymbol.
Terminal-Zeichen bleiben und hier bei den Produktionen linke Seite die produktiven Non-Terminale,
rechte Seite, produktive Non-Terminale oder eben etwas aus VT.
Sprich, ich habe eine Grammatik, wo nur noch produktive Non-Terminale drin sind.
Wird auch wieder äquivalent sein, warum? Naja,
ich habe ja nur Sachen rausgeschmissen, die nicht produktiv sind,
passiert nichts. Das sind die Produktiven und als nächstes bestimme
ich die Erreichbaren. Wenn erreichbar bedeutet,
vom Staatssymbol aus gibt es irgendwie die Möglichkeit,
dahin zu kommen, wenn ich da nicht hinkommen kann,
dann tut es auch wieder nichts zu der generierten Sprache bei.
Deswegen nehme ich hier auch das S weiterhin dazu,
weil das S, das Weiderstaatsmut ist auf jeden Fall erreichbar.
Wenn ich von Essen nirgendwo hinkomme, naja,
dann kann ich ja
nichts machen
Erreichbare neun Terminale, das ist jetzt der Schritt, der geht quasi andersrum.
Wir haben jetzt zweimal den Schritt gemacht, von den rechten
Seiten der Regeln ausgehen und uns zu den linken Seiten durcharbeiten.
Jetzt machen wir ihn andersrum, wir gehen vom Staatssymbol aus
und bestimmen sukzessive alle Non-Terminale, die wir auf rechten Seiten sehen.
Wir fangen beim Staatssymbol an, das sehen wir immer.
Und jetzt suche ich mir, gehe ich alle Produktionen durch,
wo auf der linken Seite ein Non-Terminal ist,
von dem ich schon weiß, dass es erreichbar ist.
Und dann gucke ich mir an, stehen auf der rechten Seite Non-Terminale.
Falls ja, sind die erreichbar und ich nehme die dazu
Jetzt kommt, wenn ich sowas habe,
viel von S geht es nach klein A, Groß A,
dann weiß ich, oh, Groß A ist erreichbar,
ich kann das sehen, dann nehme ich das dazu.
Wenn dann, jetzt gucke ich,
wo komme ich überall mit dem A hin,
wenn ich da irgendwie zu Groß B, Groß C komme,
weiß ich, die beiden sind auch erreichbar,
dann gucke ich mir als nächstes an die rechten Seiten von Groß B,
Groß C und so weiter.
Auch da gibt es wieder irgend so einen Kader,
dass das abbricht. Und dann macht man das im Grunde
genommen genauso wie eben, man schmeißt alle Produktionen raus,
bei denen nicht erreichbare Non-Terminale auf der linken Seite stehen.
Nicht auf der rechten, weil das kann ja gar nicht passieren,
ich kann kein, also die,
bei denen das nicht erreichbare auf der linken steht.
Es gibt ja nicht den Fall,
dass die linke Seite erreichbar ist,
aber die rechte
Kassiert ja nicht, wenn die linke Seite erreichbar ist,
dann ist die Rechte ja auch sofort erreichbar.
Also schmeiße ich halt hier raus, wo die linke Seite nicht erreichbar ist.
Ja, und auch da kann man dann relativ schnell zeigen,
dass diese Äquivalenz gilt. Da gibt es kein Beispiel zu,
das solltet ihr in den Präsenzaufgaben machen. Stimmt das?
Ja, stimmt. Präsentaufgaben. Was man da nämlich machen kann,
gegebene Grammatik, eine Äquivalente reduzierte Grammatik konstruieren, das ist deswegen schön,
weil alle Non-Terminale dann sowohl produktiv als auch erreichbar sind,
sprich die sind nützlich.
Das machen wir in den Präsenzaufgaben. Erster Schritt,
Lander frei machen, zweiter Schritt, Kettenregeln entfernt,
dritter Schritt reduzieren. Jetzt ist das schon ganz praktisch,
wir haben keine Kettenregeln mehr, wir haben keine Lander-Regeln mehr und alles,
was da so drinsteckt, ist irgendwie nützlich.
Was mich jetzt noch stört, ist, die rechten Seiten können noch zu lang sein.
Also die rechten Seiten können ja jetzt aus mir,
aus mehr als zwei Non-Terminalen bestehen oder Terminale und Non-Terminale gemischt haben.
Finde ich beides doof. Behandelt man beides nacheinander jetzt,
erster Schritt, in der Trumpsking-Nummer,
auf der rechten Seite steht es nur genau ein Non-Terminal,
ein Terminal stehen, sprich, wenn ich rechte Seiten habe,
bei denen ich irgendwas im Widerspruch dazu habe.
Sprich, länger als eins und enthält ein Terminal.
Ja, genau. Den Fall Länge eins und Non-Terminal gibt es
gar nicht mehr. Länge eins und Terminal ist okay,
ist schon ein Schomski-Normal-Form. Aber länger als eins und enthält
noch ein Terminal, das finde ich doof.
Da macht man aber was ganz Einfaches. Man ersetzt auf
den rechten Seiten jedes Terminal A durch ein neues Non-Terminal.
Balken A, Ecken wie Klammern A. Achso, und vergessen.
Und führt dann eine neue Regel ein, dass es von hier,
von diesem neuen Non-Terminal direkt zu A komme.
Sonst habe ich ja jetzt plötzlich was eingeführt,
was nicht mehr
produktiv ist
Genau, und dann ist man damit fertig. Ganz einfach. Also,
wenn ich die Regeln hier habe, von A zu Klein C,
ist super, das ist in Chomsky Normalform.
Die anderen beiden sind nicht in Chomsky Normalform. Was mache ich
also? Ich führe mir neue Non-Terminale B in Klammern C
in Klammern ein und jetzt eben noch die Regeln.
Von diesen B in Klammern geht es direkt zu dem kleinen B,
von dem Zeh in Klammern geht es direkt zu dem kleinen Zeh.
Dann sind die alle in Chomsky Normalform. Ja, dann ist
der Fall abgefrühstückt. Jetzt stört einen noch der Fall und
der sieht gleich in der formalen Definition ziemlich wild aus.
Jetzt stört einen noch der Fall als letztes,
dass die rechten Seiten zu lang sein können
Hier tritt das jetzt gerade nicht auf. Hier sind es
zwei Symbole, da sind es zwei Symbole,
da ist ein Symbol, da ist alles super.
Aber es kann ja jetzt auch noch sein, dass ich
eine rechte Seite habe, die aus acht Symbolen besteht.
Das ist doof. Ich wollte ja maximal zwei Non-Terminale haben.
Was macht man jetzt? Im Grunde genommen führt man sich
einfach so ähnlich wie hier, neue Non-Terminale ein.
Wenn ich sowas habe wie A, B, C,
also alles Non-Terminale jetzt, A, B, C,
aber es ist zu lang, dann sage ich halt,
na gut, dann mache ich mir ein neues Non-Terminal,
A, B mit Klammern drum und von dem komme ich zu Abi.
Und wenn ich A, B, C,
D habe, dann sage ich, naja gut,
dann mache ich mir das Non-Terminal, A, B,
C D, das lasse ich so.
Und von A, B, C komme ich zu A,
B, C, wobei A, B,
wieder das neues neuen Terminal ist und von dem komme ich zu Abi.
Ich mache das jetzt einfach immer kleiner. Sieht in der
formalen Definition ziemlich wild aus, da schon angedeutet.
Sind noch Regeln A, W mit W länger, zwei vorhanden,
müssen wir die auf die Länge 2 bringen, machen wir so.
Beweis zur Übung. Was passiert? Ich gucke mir an,
halte ich vorher eine Produktion, die länger ist als zwei,
also mindestens die Länge drei hat.
Falls ja, dann splitte ich quasi das hinterste Non-Terminal ab
Das lasse ich also so. X ist okay. Und den vorderen Teil,
das V, den, den nehme ich jetzt,
und baue mir dafür dieses neue Non-Terminal-V wieder irgendwie mit Klammern.
Da komme ich ja so von A zu VX.
Und jetzt muss ich definieren, naja, wenn ich da jetzt
also dieses V habe, dann wird das wieder weiter abgesplittet.
Und das mache ich quasi sukzessive so weiter,
bis ich nur noch rechte Seiten habe mit genau zwei Non-Terminalen.
Wie sieht das aus im Beispiel, wenn ich sowas hier habe,
von A geht es nach B-C-D-E,
dann splitte ich also zuerst diese drei ab,
Von dem geht es dann nicht direkt zu B-CD, sondern wieder Non-Terminal-B-C.
Das hat ja immer noch die Länge mehr als zwei und
von dem geht es dann direkt zu B-C. Wichtig, in dem Schritt,
es wird nicht einfach irgendwie geguckt und das gerade so mit Gefühl gemacht,
das könnte man als Mensch machen.
Der Algorithmus sagt halt irgendwie, ich splitte immer nur hier hinten
ein Non-Terminal ab. Sonst könnte man denken, naja,
B-C-D-E, dann mache ich mir aus B-C-Non-Terminal und aus D-E-Non-Terminal
und gehe von denen dann direkt zu B-C und D-E.
Das wäre für einen Menschen auch
total okay
Wenn man aber jetzt wirklich hier diesen Algorithmus ausführen will,
dann musst du halt irgendwie nach einer bestimmten Vorschrift arbeiten und die Vorschrift hier ist eben,
dass man sagt, okay,
wenn das Wort länger ist als zwei,
dann splitte bitte immer den letzten Buchstaben ab,
der darf einen Non-Terminal bleiben und alles,
was davor steht, wird ein Non-Terminal,
das dann eben sukzessive wieder BCD geht zur rechten Seite BCD und wenn die wieder zu lang ist,
also wieder länger als zwei,
dann wieder den vorderen Teil absplitten oder hinterer Teil,
das letzte Symbol ist okay und der vordere Teil wird
ein Non-Terminal und das macht man dann sukzessive durch
Okay, letzter Schritt, wenn im ersten Schritt S in V Lamda war,
dann weiß ich ja, Lamda ist in LG.
Und bisher haben wir aber nur gezeigt, alle Grammatiken,
die wir da so sukzessive generiert haben,
die waren immer äquivalent zu G1,
aber G1 war eben nicht äquivalent zu LG,
sondern nur zu LG ohne Lamda.
Und wenn da so Lamda drin ist,
dann müssen wir das irgendwie wieder einführen.
Wenn S auf keiner rechten Seite ist,
dann fügen wir einfach zu der zuletzt generierten Grammatik wieder
dieses Eslam da hinzu und sind fertig
Und wenn es irgendwo auf der rechten Seite auftritt,
wenn man sich noch mal dran erinnert, Tomsky Normalform,
dann wollte man das, das wollte man nicht haben,
sondern Eslamna sollte die einzige Produktion Landerproduktion sein und dann sollte
das Essen nirgendwo auf der rechten Seite auftreten.
Wenn es das also tut, neue Startsymbol einführen und von S.
Neu geht es zu Lamda und von S. Neu zu W
für jede Produktion S nach W, dann habe ich das.
Nicht von S. Neu zu essen, dann habe ich
mir wieder eine Kettenregel eingeführt.
Deswegen dieser etwas umständliche Weg hier
Und der Sinn, warum man das macht, ist,
wenn es sonst auf der rechten Seite auftritt und ich füge
mir einfach erst zu Lamm da ein, naja,
das ist doof, weil der kann nicht irgendwie produzieren,
produzieren, produzieren.
Und wenn ich dann so eine Form habe,
wo ein S auftritt, dann kann ich das da plötzlich rauslöschen.
Das ist doof, dass wir nicht haben. Das widerspricht diesem,
dass das Wort bei der Chompsky Normalform die ganze Zeit wächst.
Jedes Mal, wenn ich irgendwie eine Regel anwende, wächst das Wort.
Es sei denn, ich gehe zum Terminalzeichnen, bleibt es gleich.
Und dann hat man hier eine Grammatik G6 und die
erfüllt die im Satz aufgestellten Bedingungen.
Hui. Und dafür kann man sie jetzt benutzen.
Chompsky Normalform kann benutzen oder das Pumpy Lamer Kontext reinsparen
Das sieht fast genauso aus wie das Pumping-Lämmer für reguläre Sprachen, nur komplizierter.
Aber auch nicht so viel komplizierter. Wenn L-Kontext frei ist,
dann gibt es eine natürliche Zahl N,
sodass jedes Wort ZNL mit Z größer gleich N,
bis dahin kommt uns das sehr bekannt vor, in die Form.
Sieht länger aus. UVW XY zerlegt werden kann. Ich zerlege
das Wort Z jetzt also nicht mehr nur in diese Dreiteilwörter UVW,
sondern ich zerlege, es sind fünf Teilwörter, UVW XY.
Erster Unterschied, fünf Teilwörter. Zweiter Unterschied,
ich habe zwar wieder so Bedingungen kleiner gleich N
und größer gleich
Es gibt also wieder irgendwie Schleifen oder Wiederholungen oder sowas,
aber das VWX, also dieses Teilwort,
von dem ich weiß, dass es kleiner gleich N ist,
das beginnt jetzt nicht am Anfang des Wortes,
sondern vorneweg kommt ein U oder kann ein U kommen und dann erst kommt dieses VWX.
Das führt dazu, dass bei den Argumentationen gleich
dieses VWX über das Wort rüberwandern kann.
Vorher wussten wir immer, UV Kleiner gleich N,
es ist also irgendwie in den ersten Endbuchstaben drin.
Jetzt wissen wir, VWX und vorneweg kann noch das U kommen,
das heißt, diese VWX kann an irgendeiner Stelle
im Wort sein
Wir wissen aber, es ist kleiner gleich Ende.
Wenn das Wort also irgendwie sowas ist wie A hoch NB hoch,
NC hoch N, dann wissen wir VWX,
kann vorne in den ersten Ars drin sein,
kann zwischen den Ars und Bs liegen,
kann in den mittleren Bs sein,
kann zwischen den Bs und Cs liegen,
kann hinten in den Cs sein.
Es kann nicht aus A, Bs und Cs bestehen,
dann wäre es länger als N.
Solche Fallunterscheidungen kann man gleich machen. Gleichzeitig,
dann weiß man noch, VX ist größer gleich eins.
Sieht auch so ähnlich aus wie beim Pumping-Name für reguläre Sprachen,
aber es wird nichts über das Wie gesagt.
Also hier wird irgendwie gesagt, wenn ich diese Teilwörter V&X nehme,
die zusammengenommen, auch wenn die in dem Wort gar nicht nebeneinander auftreten,
aber die beiden zusammengenommen,
die sind mindestens die Länge eins
Und dann wird gesagt, an den beiden kann ich pumpen.
UV-Hoch-I-W-X-U-I-Y ist in Älteren. Wenn man sich einmal kurz überlegen
will, wie könnte man versuchen, das zu beweisen?
Brauchen wir wieder irgendwie so ein Wiederholungsding, so ähnlich wie wir
das bei den Automaten auch gemacht haben. Die Idee ist,
wenn ihr eine Ableitung in der Grammatik habt,
also ihr sagt, okay, wenn die Sprache kontextfrei ist,
dann gibt es eine Grammatik, die die generiert,
dann gibt es die Grammatik in Chomsky-Normalform,
die die generiert oder in erweiterter Chomsky-Normalform.
Und jetzt könnt ihr sagen, naja,
wenn ich also so ein Non-Terminal-S habe,
dann generiert das Abi
Also maximal zwei neue Non-Terminale. Das heißt,
nach einem Schritt, also wenn ihr euch das als Baum vorstellt,
wenn ihr euch das nicht so linear vorstellt,
sondern als Baum, dann habt ihr oben das S.
Danach habt ihr maximal zwei Non-Terminale. Die beiden können maximal
wieder zu zwei neuen Terminalen gehen, ab der Sophia.
Die vier können wieder maximal jeder zu zwei gehen, habt ihr acht,
16, 32, 64 und so weiter. Jetzt könnt ihr euch überlegen,
wenn ihr den Baum so weit macht,
dass ihr unten zwei hochendviele Symbole habt oder ich glaube zwei auch N plus eins,
aber tut ihr jetzt gar nicht so am Ende,
wenn ihr das hier zwei hochendmal macht,
dann habt ihr einen Pfad in dem Baum,
der die Länge N plus eins hat,
von dem Startsymbol bis zu dem da
Diesem Symbol da unten. Und in dem Pfad,
wenn ihr jetzt für dieses N die Anzahl der Non-Terminale nehmt, wiederholt sich Non-Terminal.
Also wenn ihr in der Grammatik endviele Non-Terminale habt,
dann sagt ihr, das End tritt da schon auf.
Wenn ihr K viele Non-Terminale habt, dann sagt ihr,
ich gucke mir jetzt Wörter an, die mindestens die Länge 2 hoch K haben.
Oder 2 hoch K plus 1 müsste ich jetzt irgendwie im Detail kurz durchrechnen.
Wenn ihr 2 UK habt oder 2 UK habt bis 1,
wenn ihr Wörter dieser Länge betrachtet, dann muss der Ableitungsbaum,
der muss dann irgendwie oberste Ebene ein Symbol,
zwei Symbole, vier Symbole und so weiter,
der Pfad dadurch,
da müssen sich
Non-Terminale wiederholen
Und dann könnt ihr sagen, naja, wenn sich Non-Terminale wiederholen,
dann kann ich quasi diesen Teilbaum von, nehmen wir mal an,
X wiederholt sich von X zu X, diesen Teilbaum,
den kann ich immer wieder dahin schreiben.
Ich hätte ja von X zu X und irgendwann habe ich
dieses X, das unterste, zu einem Terminalwort abgeleitet.
Das hätte ich ja nicht machen müssen.
Ich hätte ja den gleichen Baum da wiederhin tun können.
Und wieder und wieder und wieder. Deswegen kann ich dann
dran pumpen und deswegen wiederholen sich auch VX und nicht das W,
weil das W ist dieses Ding, was ich irgendwann mal machen muss,
um von meinem X zum Terminalwort zu kommen.
Da werde ich also immer haben. Entweder habe ich,
wiederholt sich X gar nicht, dann komme ich von X
direkt zu W oder ich komme von X zu X.
Und dann habe ich links und rechts Sachen stehen und gehe
dann vor dem noch zu dem
Da steht es nochmal, wer das nochmal euch genau angucken wollt,
hier im Hauptkurt Unmensch steht das echt schön drin.
Aber die Kernidee ist eben,
ihr setzt für das K oder ihr setzt seit K hier
die Anzahl der Non-Terminale und dann nehmt ihr als N so eine Zahl,
die hier diese Größe hat.
Und wenn ihr dann so einen Ableitungsbaum betrachtet,
dann wisst ihr, oh, da müssen Wiederholungen auftreten und
mit denen hat das dann was zu tun.
Okay, wir wollen es nicht beweisen, wir wollen es einfach nur benutzen.
Beispiel dazu, ah, auch ein Bio-HNC hochenden,
da sind wir auch fertig für heute.
Auch ein Bio-HNC hochenden ist nicht kontextfrei
Genau der gleiche Durchgang wie beim Pumpinglammer für reguläre Sprachen.
Angenommen, es wäre kontextfrei, dann gilt das Pumpinglammer. Irgendwie ein Wort suchen,
das in der Sprache drin ist und was irgendwie abhängt von dieser Pumpinglammerzahl,
sei gerade die Zahl aus dem Pumpinglammer,
wir betrachten das Wort AOKB hoch, Katzi hochkam.
Das ist in Älteren offensichtlich und es ist länger als K auch offensichtlich.
Jetzt wieder alle Zerlegungen betrachten, die die ersten beiden Eigenschaften erfüllen.
Sei Z in UVW XY, eine Zerlegung, die die ersten beiden Eigenschaften erfüllt.
VWX ist kleiner als die Pumpinglammerzahl, VWX ist größer.
Und jetzt tritt genau dieser Fall auf,
wenn ihr dieses Wort habt, A,
B, A, hoch KB hoch,
KC hoch,
K. Und ihr zerlegt das in UVW XY
Und ihr holt alle diese Zerlegung betrachten. Und ihr wisst nur,
VWX ist kleiner, gleich K. Dann könnte es sein,
dass das vorne noch in den ersten Kfien Ars drin sitzt.
Je nachdem, wie lang das genau ist,
je nachdem, wie lang U ist,
da kann es irgendwie drin sitzen, in den ersten Ars.
Zweite Möglichkeit, das U ist irgendwie ein bisschen länger.
Das U nimmt schon so den Raum von einigen Ars ein.
Und das VWX ist erst Ars und dann noch Bs.
Vielleicht 3As und 4Bs oder irgendwie sowas.
Sowas kann auch sein. Das ist irgendwie in diesem
Bereich an der Grenze ist. Nicht nur in dem Block der Ars,
sondern hier zwischen den Blöcken. Oder es kann komplett in
den Bäs liegen mit der gleichen Argumentation wie bei den Ars.
Oder es kann eine Grenze BC liegen mit der gleichen Argumentation
wie Grenze AB oder es kann in den Cs liegen.
Die fünf Fälle gibt es. Und man weiß, VX ist größer gleich eins.
Deswegen kann man hier wieder so mit Plussen arbeiten.
Also VX ist entweder besteht es nur aus As oder es
besteht nur aus Bs oder es besteht nur aus Cs oder
es besteht aus As und Bs oder es besteht aus Bs und Cs.
Aber der eine Fall, das ist aus A,
Bs und Cs besteht,
der existiert nicht
Dann hätte man nämlich ein Problem. Oder auch der Fall,
dass das V in den Ars drin ist und das X in den C so.
In dem Fall würde nicht mal was passieren, aber... Nee,
in dem Fall würde nicht mal was passieren. So,
und wenn ich jetzt an den Dingern pumpe,
dann habe ich genau dieses Problem, wenn ich an dem VX pumpe,
habe ich einen Widerspruch, dann habe ich mehr A,
als ich B ist und C es habe.
Wenn ich an dem,
wenn es in den B ist und ich dran pumpe,
auch einen Widerspruch, habe ich mir Bs als Jahres und C es habe,
wenn es in den C ist und ich pumpe da dran, gleicher Widerspruch.
Und jetzt kann man sich noch überlegen, also 1, 2,
3 gehen analog und 4 und 5 gehen auch analog,
splitten aber wieder in zwei Fälle auf.
Es gibt den Fall, dass eins von den Dingern V oder X
, dass das sowohl As als auch Bs enthält.
Das ist auch doof, wenn ich da dran pumpe,
dann ist das Wort nicht mal ein Arsch,
der ein B ist, der ein C-Stern drin.
Und es gibt den Fall, das V aus As besteht und X und X aus Bs.
Dann habe ich zwar keinen Widerspruch zu Arsch,
der B ist Stern-C-Stern, aber wenn ich dann da dran pumpe,
dann habe ich vielleicht gleich viele ASV Bs, aber nicht mehr so viele WCs.
Auch ein Widerspruch. Also für die ersten drei Fälle,
einmal dran pumpen, habe ich schon einen Widerspruch,
da ich dann eben mir As als die anderen habe oder mehr Bs als die anderen und so weiter.
Und für die anderen beiden nochmal eine Fallunterscheidung,
wenn V oder X sowohl A als auch B enthält,
dann ist das Wort nicht mal mehr ein Arsch,
Stern-B,
Stern-C stellen,
wenn ich daran pumpe
Wenn so ein V-As und Bs enthält und ich pumpe da
einmal dran, dann habe ich ja irgendwie A hoch
N plus J viele As, dann kommen die paar Bs,
die von meinem V kommen, dann kommen wieder ein paar
As möglicherweise und dann kommen wieder Bs so, das ist irgendwie doof.
Genau, dann habe ich da so einen Widerspruch.
Und wenn ich sowas habe wie Vs in den As drin und X ist in den Bs,
dann habe ich wieder, wenn ich daran pumpe,
nicht mehr so viele Cs,
wie ich As und Bs habe.
Also Widerspruch. Das, worauf ihr achten müsst,
ist, ihr macht den Anfang ganz genauso wie beim regulären,
wie beim Pumpeleam für reguläre Sprachen,
aber danach kann dieses VWX eben
über das Wort wandern
Und man muss gucken, wo kann das jetzt überall liegen?
Wie habe ich mein Wort Parameter? Wie habe ich
mein Wort gewählt hier? Wie habe ich das gewählt?
Auch Kabiokazeoka, wo kann das jetzt überall drin liegen?
Und all die Fälle muss ich dann unter Umständen getrennt betrachten.
Viele kann man aber auch analog betrachten, also oft,
gerade bei dem Beispiel, kann man sagen, 1,
2, 3 gehen analog, 4, 5 gehen analog,
dann haben wir also eigentlich nur zwei Fälle zu betrachten.
Ja, anders als beim Pumpinglamour,
VW X wandert über das Wort mehrere Fallunterscheidungen,
oft kann man aber so analog Sachen behandeln mit in einem Blog,
Grenze zwei Blöcke und sowas.
Und da nochmal zum Betonen,
dass da kann man auch immer benutzen,
also ein I gar nicht pumpen,
vielleicht kriegt man auch damit
den Widerspruch hin
Supi. Ja, das hatte ich ja schon erwähnt,
für das Wortproblem kann man, dass die Jumpsky Normalform super benutzen.
Zusammenfassung am Ende, das waren die ganzen Definitionen, die wir gestern und heute hatten.
Die oberen drei Bullets hatten wir gestern und hier rechtslinäre Grammatiken
kamen heute nochmal dazu und das war der ganze,
das war die ganzen Items, die wir heute gemacht haben.
Heute haben wir echt viel gemacht, war bestimmt auch anstrengend.
Konstruktionstechniken haben wir kennengelernt, nochmal so auch in Biorenne,
in denen man in die Mitte wächst.
A-Sterne, in denen man irgendwie am Rand wächst. Dann haben wir uns angeguckt,
das ist rechtslinäre Grammatiken gibt und dass die das Gleiche können
wie DFAs und wir haben einmal kurz erwähnt,
dass kontextfreie Grammatiken dann eben Das Gleiche können wie PDAs.
Abschlusseigenschaften angeguckt, Chomsky-Nomalform hergestellt mit zwei speziellen Unterpunkten,
die man auch getrennt benutzen kann,
also die man einfach so benutzen kann, ohne eine Chomsky-Nomalform herzustellen.
Und mit einem zweiten Pumping-Lämmer haben wir dann eben gesehen,
dass es Sprachen gibt, die nicht in kontextfrei sind und mit dem,
was wir vorher einmal kurz diskutiert hatten, daraus voll kontextfreie Sprachen,
nicht gegenüber Schnitt abgeschlossen, nicht gegenüber Kompliment abgeschlossen,
nicht gegenüber Mengendifferenz abgeschlossen.
Fragen? Okay, dann geht es ab heute
dann mit dem Übungsbetrieb wieder los und...
Dann sind wir am Ende. Schöne Woche.
Danke fürs Durchhalten