Ihr mutigen und verbliebenen. Ich glaube, nächsten Dienstagmorgen,
den nächsten Dienstagmorgen, da lassen wir mal,
sind wir schon, Wetter schon aufgenommen?
Nimmst du es schon auf? Ja, sehr gut.
Also nächsten Dienstagmorgen, da gehen wir mal so eine Liste rum.
Und jeder, der da ist, trägt sich ein und
kriegt dann bei der Klausur gleich irgendwie 20 Punkte von Anfang an.
Und dann... Und das Schöne ist ja,
das wird nicht dazu führen,
dass jetzt nächsten Dienstag mehr Leute da sind,
sondern dass ich in meinem Postfach irgendwie 50 E-Mails anhäufen von Leuten,
die sagen, ich habe gehört, dass das passiert,
ich kann aber nicht am Dienstag,
das ist unfair und nö, nö,
nö,
Das sind die Zuhausegebliebenen. So, ich hoffe,
ihr hattet alle schöne Ostern. Gut. Meine waren schick
. Ich bin nicht so richtig zum Arbeiten gekommen.
Das kann man möglicherweise gleich auch an den Rechtschreibfehlern in den Folien sehen.
Ich bin mal gespannt. Eigenschaften kontextfreier Sprachen. Wir haben
letztes Mal Grammatiken eingeführt. Und da machen wir heute nochmal
ein bisschen weiter. Und ganz zum Schluss kommt nochmal so
ein zweites Pumping-Lämmer. Und vorher kommen wir aber ein bisschen
hoffentlich etwas einfachere Sachen.
Zur Auffrischung der Erinnerung
Informales Beispiel für so eine Grammatik. Die Idee war,
oben stehen die Regeln,
die Regeln kann man immer so lesen, dass man das,
was auf der linken Seite der Regeln steht, durch das,
was auf der rechten Seite der Regeln steht, ersetzen kann.
Wobei diese Balken, Trennstriche sind für mehrere Regeln,
die eben die gleiche linke Seite haben.
Also wir haben da die Regeln von Eagles nach L,
von Eagles nach I-L und von Eagles nach Idee. Ja,
und wenn man jetzt irgendwie, da war das Beispiel,
dass wir jetzt A, B, C 1 ableiten wollen,
dann kann man eben als erste von I nach Idee ableiten.
Also diese Regel hier oben benutzen von I
nach Idee
Dann kann man das I aus dem Idee nehmen und durch EL ersetzen.
Dann kann man das nochmal machen. Und zu guter Letzt
kann man das I eben direkt durch L ersetzen.
Und jetzt kann man eben Stück für Stück die drei Els
und dass die eben irgendwie durch Buchstaben und Zahlen ersetzen.
Na klar. Du hast jetzt erst die ersten beiden und dann das dritte.
Das soll extra illustrieren, dass es ziemlich egal ist. Also die Frage war,
ob es hier unten in der Reihenfolge in der letzten Zeile,
ob es da irgendwie einen Grund gibt,
worauf ich mit dem ersten anfange, dann das zweite nehme,
dann das vierte und dann das dritte.
Da habe ich extra so gemacht,
damit man eben sehen kann, dass es egal ist,
in welcher Reihenfolge man Gesetz mehr hat.
Also zu diesem Zeitpunkt, wenn da LLB steht,
kann man irgendeins von den Vieren nehmen untersetzen
Hättest du auch schon hier als hier Idee-Stand,
da hätte man auch schon das D durch eine Zahl ersetzen
können und dann mit dem E weitermachen können oder so,
kann man irgendwie beliebig auswählen. Dann formal,
formal ist so eine Grammatik, jetzt erstmal in der richtigen Allgemeinheit,
das eben war ja schon eine kontextfreie, jetzt ganz allgemein,
so ein endliches Alphabet von Non-Terminalen, das soll die Großbuchstaben sein,
die eben immer weiter ersetzt werden müssen.
Dann so ein endliches Alphabet von Terminalen,
wobei man eben der Einfachheit halber immer sagt,
dass die beiden das jung sein sollen,
also dass kein Symbol sowohl Terminal als auch Non-Terminal sein soll.
Und das Gesamtalphabet wird eben mit V bezeichnet
Dann haben wir diese endliche Menge von Produktion, da kommen wir gleich nochmal zu und eben das Startsymbol, mit dem man immer jede Ableitung beginnen muss. Dann hatten wir uns so als Abkürzung überlegt,
hier ist ja diese Menge der Produktion, so ein Kreuzprodukt,
das heißt irgendwie ein Tupel aus zwei Elementen und statt jetzt immer UV in P zu schreiben,
notiert man das eben meist bei Regeln irgendwie mit so einem Pfeil und mehrere Regeln,
weil man von UNAV gehen darf und von UNAV,
dann notiert man das eben,
was wir auf der ersten Folie auch schon gesehen haben mit so einem Balken und das Wichtige bei diesen Produktionen ist eben auf der rechten Seite der Produktion,
also hier rechts von dem Kreuz,
da darf irgendwie eine völlig beliebige Zeichenkette aus Terminalen und Non-Terminalen stehen und links das eben explizit,
deswegen wird das hier rausgenommen, keine Zeichenkette stehen,
die nur aus Terminalzeichen besteht,
sondern links muss immer irgendwie ein Non-Terminal stehen.
Und informal ist die Ableitungsregel eben, finde das,
was auf der linken Seite einer Regel steht und ersetze das irgendwie durch die rechte Seite. Und wenn man das formal notieren will,
dann sagt man eben die einschrittige Ableitung eines Wortes V aus U geschrieben irgendwie dann mit diesem Doppelpfeil,
definiert man eben so, dass man das eben schreiben darf,
genau dann, wenn U eben diese Form U1, WLU2 hat,
wobei WL eben die linke Seite einer Produktion ist Und V hat dann eben gerade die Form,
dass das U1 und U2 nicht angefasst wird,
sondern das WL wird rausgenommen und wird eben durch WR ersetzt,
also die rechte Seite so einer Produktion.
Und dann kann man eben dieses tiefer gestellte Gehen noch weglassen,
wenn man das möchte und mit dem Stern oben wird dann immer die reflexive,
transitive Hülle bezeichnet, wobei man vor allem eben dieses Transitive braucht,
dass man, wenn man jetzt mehrere Schritte macht und die nicht alle aufschreiben will,
dann macht man das eben mit dem Stern.
Ja, informal aktuelles Wort wehnehmen, gucken,
ob da irgendwie linke Seiten von Regeln auftreten,
falls ja eine davon auswählen,
nicht die terministisch oder beliebig
Und dann eben diese auftretende linke Seite durch die rechte Seite ersetzen. Und dann nochmal ein Beispiel,
irgendwie eine etwas andere Grammatik als eben,
da kann man dann eben diese Ableitung machen,
dass man zuerst eben die erste Regel hier von SGS nach ASB nimmt und das gemacht,
danach nimmt man das S und ersetzt es durch AB,
das ist die zweite Regel hier von S nach AB,
dann kann man AB durch C ersetzen,
dann haben wir hier das AB in der Mitte genommen und haben
das durch den C ersetzt und dann können wir ACB noch durch C ersetzen und dann kommen wir irgendwie bei dem C an.
Die Grammatik selbst hat jetzt nicht so viel Sinn,
das soll das nur illustrieren und man kann hier eben ganz nett sehen,
dass dass hier wird ja ein ARB durch den C ersetzt
und hier steht irgendwie dazwischen noch ein kleines C,
es wird auch durch den C ersetzt.
Man kann da eben schon erkennen,
dass das irgendwie non-terminal eben abhängig von dem Kontext ist,
in dem es sich befindet oder abhängig von dem Kontext,
in dem es sich befindet, wird es ersetzt.
Wenn ihr jetzt irgendwie hättet,
groß A, Kleinzäh und ihr setzt das durch irgendwas,
dann wird das eben möglicherweise woanders hin abgeleitet als groß A, Klein-D.
Deswegen ist das nicht kontextfrei und deswegen gibt es diese,
gleich die Einschränkung zu kontextfreien Grammatiken.
Vorher noch einmal kurz die Definition für die generierte oder erzeugte Sprache.
Wir fangen immer mit dem Staatssymbol an und zu den Wörtern wie,
die wir dann, zu denen wir dann kommen können,
durch eine Ableitung, die eben nur aus Terminalzeichen bestehen,
das sind die von der Grammatik generierte,
generierten Wörter
Also das nochmal zur Betonung, das ist immer das Ziel
irgendwie zu Wörtern zu kommen, die nur aus Terminalzeichen bestehen.
Ja, dann kontextfrei die ersten beiden Definitionen,
genauso wie eben auch Non-Terminale und Terminale und dann
wird diese Menge von Produktionen eben so eingeschränkt,
dass sie auf der linken Seite immer genau einen Non-Terminalzeichen steht.
Und dass wir dann eben unabhängig von dem Kontext, in dem steht,
ersetzt, also egal was links und rechts davon steht,
gucke ich mir nur das Non-Terminal an und ersetzt das.
Und deswegen nennt man die Grammatik eben Kontext 3.
Und dann hat man auch wieder ein Startsymbol und eben die
werden auch als Typ 2 Gramm Artikel
bezeichnet historisch
Jo. Und alle zusammengenommen sind die Familie der kontextfreien Sprachen.
Also so ähnlich wie ich mir bei den regulären Sprachen gesagt habe,
ich nehme mir alle DFAs und gucke,
welche Sprachen die akzeptieren,
die tue ich mir alle in diese Sprachfamilie weg.
So sage ich jetzt, ich nehme mir alle kontextfreien Grammatiken,
gucke mir an, welche Sprachen die generieren.
Und das packe ich dann alles in diese Familie der kontextfreien Sprachen,
abgekürzt CF. So, und da ungefähr haben wir
letztes Mal aufgehört. Jetzt kann man diese Grammatiken
noch weiter einschränken
Und gelangt dann zu diesen sogenannten Typ 3 Grammatiken oder den Rechtslinearen.
Wenn ihr euch mal auf das Rechtsliniejahr hier konzentriert,
da wird eben gesagt, die Produktion oder die Regeln sollen
immer so aussehen, dass links genau ein Non-Terminal steht.
Und auf der rechten Seite der Regel steht entweder etwas,
was nur aus Terminalzeichen besteht oder eben etwas,
was aus Terminalzeichen steht, gefolgt von einem Non-Terminal.
Deswegen rechtslinear, weil eben, wenn die Beispiele hier unten anguckt,
ihr habt immer so Zeichenketten,
irgendwie Links steht an Non-Terminal und rechts,
kommen irgendwie Terminalzeichen und ganz rechts dann eben das eine Non-Terminal,
auch das Y oder eben gar keins
So sehen typische Rechtslinienjahre Grammatiken aus. Also rechtslinial,
weil rechts dafür,
dass das neuen Terminal immer rechts steht und linear,
weil man so ähnlich wie in der Mathematik auch,
da steht quasi X hoch 1 oder Y hoch 1 oder irgendwie sowas.
Deswegen ging ja Fragen bis dahin. Gut,
dann was man sich jetzt, wofür man sich jetzt interessiert,
ist im Grunde genommen wieder diese Mächtigkeit dieser Sprachfamilie,
so ähnlich wie bei Reck auch.
Und man kann jetzt eine Verbindung herstellen zwischen den Automatenmodellen,
die wir bisher hatten und diesen Grammatiken
Einer der Hauptgründe, warum wir jetzt diese Rechtlinie eingeführt haben,
ist auch, weil man da dran ganz schön illustrieren kann,
dass die genauso mächtig sind wie endliche Automaten.
Und für die Kontextfreien kann man nachher zeigen,
dass die genauso mächtig sind wie die PDAs.
Aber wir gucken uns das mal erstmal an bei regulären Sprachen.
Dann steht da irgendwie eine Sprache, ist regulär, genau dann,
wenn sie von einer rechtslinearen Grammatik generiert werden kann.
Was wir schon wissen ist, wenn eine Sprache regulär ist,
dann gibt es irgendwie einen endlichen Automaten, einen DFA,
der die Sprache akzeptiert. Und was wir jetzt zeigen wollen,
ist, wenn es sowas gibt,
dann gibt es auch irgendwie eine Grammatik,
die diese Sprache generiert und eben andersrum,
wenn ich eine rechtslineare Grammatik habe,
dann kann ich
auch einen Automaten finden
Ja. Und das versucht man relativ häufig herzustellen,
dass man irgendwie zunächst verschieden aussehende Modelle hat,
die dann eben doch das Gleiche können, weil man dann,
je nachdem, was man gerade braucht,
sich eben unterschiedliche Sichtweisen rauspicken kann.
Deswegen sind solche Ergebnisse immer sehr praktisch. Und die Beweisidee hier ist relativ einfach,
wenn ihr euch überlegt, was passiert,
wenn ihr im Buchstaben mit dem Automaten lest,
dann geht ihr irgendwie eine Kante entlang von Zustand zu Zustand und in der Mitte steht eben Symbol.
Also solche Kanten hier, ZAZ, Strich,
wir haben das meistens beim DFA mit der Übergangsfunktion Delta gemacht,
dann wäre eben Delta von ZA gleichzeitig
Aber das ist das Gleiche, wie eben so eine Kante zu nehmen.
Wenn man da so ein Wort irgendwie liest,
dann geht man solche Kanten entlang. Und in der Grammatik,
in der man jetzt ja Stück für Stück dieses Wort,
was der Automat liest, versucht zu generieren,
da kann man eben anstatt dieser Kante eine Produktion nehmen,
Z und dann eben AZ-Strich.
Wobei diese beiden Z uns jetzt Striche in den Ecke in Klammern,
das sollen jetzt eben neue Non-Terminale sein und eben genau ein Non-Terminal,
nur damit man da jetzt nicht so völlig durcheinanderkommt mit den Sets und As.
Und das A ist eben ein Terminalzeichen und die ZZ-Strich,
wie gesagt, Non-Terminale. Und dann kann man sich schon vorstellen,
dass man immer mit dem, wenn ich eine rechtslineare Grammatik habe,
dann wird in jeder Satzform, also in jedem Wort,
wo noch irgendwie Non-Terminale drin sind,
da wird immer genau ein Non-Terminal auftreten,
das wird ganz recht sein.
Geht irgendwie von Z zu AZ-Strich und jetzt könnt ihr das Z-Strich durch irgendwas ersetzen,
vielleicht durch BZ-Strich, dann steht da schon irgendwie A,
B und Z-Strich, dann könnt ihr das wieder durch irgendwas anderes ersetzen.
Aber da steht immer ein Non-Terminal und da steht ganz rechts.
Und das ist immer gerade der Zustand, in dem der Automat wäre.
Und das Wort, was eben links von diesem aktuellen Zustand steht,
das ist eben das, was der Automat bis dato gelesen hat.
Und andersrum kann man das auch machen. Wenn man das formal ausführen will,
von die Richtung von der regulären Sprache zu der Grammatik.
Dann fangt ihr an und sagt, okay,
ich kriege also meine reguläre Sprache, sei A1,
also irgendwie ein DFA, der die Sprache akzeptiert.
Also A1 ist jetzt ein DFA mit eben der Eigenschaft,
dass die von ihm akzeptierte Sprache gerade R ist.
Und jetzt müssen wir eine rechtslineare Grammatik definieren,
die genau diese Sprache R eben generiert. So,
und dann kann man das so definieren, dass man eben sagt,
als Non-Terminalmenge nehme ich mir all die Zustände des Automaten
und mache da noch eckige Klammern drum,
damit man das ein bisschen unterscheiden kann.
Aber jedes dieser Dinger hier ist jetzt
genau ein Non-Terminal
Als Terminalmenge nimmt man genau das Eingabealphabet, als Staatszustand nimmt man eben den Z-0-Zustand des,
als Staatssymbol nimmt man den Staatszustand des Automaten.
Und jetzt kommt eben diese Produktionsmenge. Das erste ist so,
wie wir das eben uns schon angeguckt hatten, dass man eben sagt,
für jede Sonne kannte, mache ich mir so eine Produktion Z-AZ-Strich.
Und jetzt gibt es eben noch die zwei Sonderfälle. Wenn ich so eine Kante habe,
Z-AZ-Strich, die in einen Endzustand führt,
also wo ich nach Z-Strich bin, gehen kann und dann aufhören kann,
dann muss ich ja eine Produktion derart haben, es kann ja sein,
dass das Wort da zu Ende ist und der Automat das akzeptiert,
dann muss die Produktion ja so gewählt sein,
dass Ich auf der rechten Seite nicht so wie hier eben,
dass ich auf der rechten Seite nicht weiterhin dieses Non-Terminal habe,
sondern dass ich da aufhöre.
Deswegen führt man sich noch diese Produktionen ein, dass man eben sagt,
wenn ich so eine Kante habe von ZA nach Z-Strich und Z-Strich ist ein Endzustand,
dann generiere ich mir dann noch das A und höre dann eben auch auf.
Und dann als letztes,
wenn Z0 eben schon ein Endzustand ist,
also wenn der Staatszustand des Automaten Endzustand ist,
dann will ich ja das leere Wort auch akzeptieren können,
dann führe ich mir eben noch diese eine Produktion hinzu,
die dann eben dazu führt,
dass ich eben vom Staatssymbol aus direkt das leere Wort generieren kann.
Und dann wäre ich auch fertig
Das ist die Idee beim Übergang von der Grammatik zum Automaten
. Und jetzt muss man natürlich irgendwie noch zeigen,
dass das auch tatsächlich gilt, also dass tatsächlich wieder diese Mengengleichheit hier gilt,
muss man wieder irgendwie zwei Richtungen zeigen, muss man irgendwie sagen,
wenn ich ein Wort habe, das vom Automaten akzeptiert wird,
dann kann ich das auch von der Grammatik generieren.
Und wenn ich ein Wort habe,
das ich von der Grammatik generieren kann,
dann kann der Automat das auch akzeptieren und oben nochmal die Produktionsmenge,
die Idee ist halt, dass man sagt,
wenn ich so eine Erfolgsrechnung in dem Automaten 1 habe,
dann gehört zu dieser Erfolgsrechnung ja eine gewisse Menge von
Kanten,
die ich entlang gehe
Ich fange irgendwie im Startzustand Z0 an, lese irgendwie ein Symbol,
lande bei irgendeinem anderen Zustand und immer so weiter.
Und irgendwann lande ich eben bei einem Zustand ZN und wenn das,
das muss ja ein Endzustand sein, weil das Ganze ja eine Erfolgsrechnung ist.
Und das Wort, was da gelesen wird,
ist eben X-1 bis XN und genau dieser Erfolgsrechnung kann man eben durch die Regeln,
die immer aus diesen einzelnen Tupeln entstanden sind,
eben eine Acht bauen.
Also man fängt dann an mit der Regel Z0 X-1 Z1,
was eben dem hier entspricht.
Und dann als nächstes Z1 X-2Z2,
wobei hier die hier bei dem Z1 und hier bei dem Z2
jeweils auf der rechten Seite,
da fehlen noch
die Ecke in Klammern
Ja, und als letztes, weil ZN eben ein Endzustand ist,
würde man dann eben diese Regeln noch nehmen,
ohne das ZN auf der rechten Seite.
Naja, und jetzt würdet ihr eben als erste,
wenn ihr das als erste Produktion nehmt,
dann ist die erste Satzform, die ihr habt,
X-1, Z-1, dann ersetzt ihr Z1 durch X-2Z-2.
Das heißt, der nächste Satz von ihr habt das X-1,
X-2, Z2. Und das geht dann immer so weiter,
bis ihr eben als Satzform nur noch X-1 bis XN habt,
was gerade das Wort ist, was der Automat auch akzeptiert hätte.
Und dann habt ihr eben gezeigt, dass Wendeautomatenwort akzeptiert,
dann könnt ihr das Wort auch in der Grammatik generieren.
Da habt ihr die Richtung schon mal.
Und die Umkehrung gilt eben auch, kann man sich auch
relativ schnell überlegen,
wenn man irgendwie Produktion nimmt
Da muss man ja mit dieser, mit einer Produktion anfangen,
die eben Z0 auf der linken Seite hat.
Das entspricht gerade dem Staatszustand bei dem Automaten
und dann die Folge von Produktionen, die man nimmt,
entspricht eben gerade einer Folge von Kantenübergängen im Automaten.
Und dann kann der Automat eben dieses Wort,
was generiert wird von der Grammatik, auch akzeptieren.
Und da hat man insgesamt die Beziehung hier gezeigt. So,
und jetzt hat man aber erst gegeben, die Grammatik gezeigt,
dass man dann auch, alles drum gegeben,
die reguläre Sprache gezeigt, dass man auch eine Grammatik generieren kann.
Jetzt muss man es noch andersrum machen, gegebene Grammatik,
eine Rechtslineare eben auch zeigen,
dass sich dafür einen Automaten finden kann,
der die akzeptiert
Macht man dann so, ist im Grunde genommen die gleiche Idee,
wenn ich eine rechtsinnigare Grammatik habe,
dann definiere ich mir einen NFA mit eben.
Den Eigenschaften ist fast die gleiche Idee. Eben habe ich
mir zu den Zuständen jeweils ein Non-Terminal gemacht.
Jetzt sage ich, wenn ich so ein Non-Terminal A habe,
dann mache ich mir einen Zustand ZA.
Also für jedes Non-Terminal mache ich mir einen Zustand.
Und dann mache ich mir noch hier den, so einen besonderen Zustand,
Z Lamda, Terminale und Eingabesymbole sind wieder das Gleiche.
Staatszustand ist eben genau der Zustand, der aus dem Staatsymbol hervorgeht.
Endzustand ist dieses Z Lamda. Und dann sage ich,
wenn ich jetzt so Regeln habe, hier von Q geht es nach UR,
dann mache ich mir eben eine Kante, ZQ geht,
ZQ geht über U nach ZR.
Und wenn ich so eine Regel hier habe,
die ja bei der Grammatik dazu führen würde,
dass ich ein Wort generiert habe, weil ich dann kein Non-Terminal mehr habe,
dann gehe ich hier eben in den Endzustand und akzeptiere das Wort.
Und dann kann man auch wieder relativ schnell zeigen,
dass das funktioniert. Wo ist ein Fehler in der Konstruktion
? Leider Ungenauigkeit
Konstruktion ist eigentlich schon richtig, aber kann man eigentlich mit dem,
was wir bisher eingeführt haben, so nicht machen?
Wer sieht den Fehler? Ihr könnt ja mal durchgehen.
Die Zustandsmenge, dürfte man das so definieren?
Also die einzige Einschränkung, die wir bei der Zustandsmenge haben,
ist, die muss endlich sein.
Ist die endlich,
ja oder nein
Ich muss gleich mal wieder dieses Hit-Tool anschmeißen.
Da kriegt man mehr Feedback. Endlich ja oder nein?
Gibt es noch eine dritte Möglichkeit? Wenn ihr nochmal überlegt
bei den Grammatiken, da wurde explizit auch gesagt,
dass die Menge der Non-Terminale auch endlich sein muss.
Und wenn ich hier also, wenn ich hier für jedes Non-Terminal
einen Zustand einführen und ich habe nur endlich viele Non-Terminale,
dann werden das auch endlich viele Zustände.
Und dass ich noch einen dazu nehme, okay.
Ja, da fehlt ein N, okay.
Das ist nicht der gemeinte Fehler, ich meine was Inhaltliches.
Oder ist da noch ein Rechtschreibfehler? Nein, okay.
Zweitens, das Siegma, darf man das so definieren?
Sieg mal gleich, VT ist das okay
Ja, ist auch okay. Hat er auch nur als
Bedingung, endlich zu sein. Ist auch okay. Startzustandsmenge
. Geht das da? Start- und Endzustandsmenge? Beide gehen
die beide? Ja, ist das schlimm? Doch,
schon okay, ist eine Menge, die einen Zustand enthält.
Ist auch okay. Staatszustandsmengen ist auch okay, Endzustandsmengen ist auch okay.
Wir nähern uns. An welchem von diesen fünf Dingen kann
es liegen, wenn die ersten vier es nicht sind?
Jetzt guckt euch mal die Kantenübergänge hier an
Stört euch da gar nichts dran. Wie sieht denn so
ein Kantenübergang jetzt aus da? Ihr habt einen Zustand,
ZQ, ihr habt einen Zustand,
ZR und ihr habt einen Pfeil dazwischen, ne?
Und was steht nach der Definition auf dem Pfeil drauf?
Genau, mehrere Buchstaben. Und eigentlich haben wir das
so definiert, dass da nur ein Buchstabe draufstehen darf.
Also das Problem ist hier dieses U da, Da vier aus VT-Stern sein.
Also irgendwie aus mehreren Terminalzeichen. Und eigentlich haben wir den NFA so definiert,
dass der auch immer nur ein Buchstaben pro Kante lesen darf.
Kann man natürlich relativ schnell fixen. Also wenn ihr jetzt,
wenn man sich da dran stört, dann sagt man eben,
okay, ZQZR und dazwischen führe ich mir Zwischenzustände ein
eben für das erste Symbol von Uwes gelesen wird.
Das zweite Symbol von Uwes gelesen wird und so weiter.
Und die Zustände werden sonst von nichts erreicht.
Dann komme ich von ZQ nach ZR genau dann,
wenn ich das U lese und sonst nicht.
Ist also kein Hinderungsgrund. Da nochmal zum Nachbereiten.
Man kann da
Zwischenzustände einführen
So, jetzt kann man, ich habe gerade überlegt,
ob ich das als Klausuraufgabe stelle.
Also für euch so zum Notizmachen, gute Klausuraufgabe.
Finden Sie den Fehler? Ah, jetzt kann man das,
also jetzt haben wir gezeigt, dass diese,
diese rechtslinearen Grammatiken und die DFAs Äquivalenz zueinander sind.
Jetzt haben wir mittlerweile übrigens schon vier oder fünf Modelle für
reguläre Sprachen. Wir können einmal den DFA nehmen,
wir können den NFA nehmen,
wir können diesen NFA mit Lambda-Kanten nehmen,
wir können rationale Ausdrücke nehmen und wir können rechtslineare Grammatiken nehmen.
Die tun alle
das Gleiche
Jetzt kann man auch zeigen,
dass so eine Sprache kontextfrei ist, genau dann,
wenn sie von einem PDA mit Leam Keller akzeptiert wird.
PDA kennt ihr noch, das war dieser Automat,
der eben zusätzlich zu dem Eingabeband noch irgendwie den Keller hat
und immer auf das oberste Symbol zugreifen darf.
Und kontextfrei war eine Sprache eben genau dann,
wenn ich so eine kontextfreie Grammatik habe, die diese Sprache generiert.
Beweis ist umfangreicher, hat eine ähnliche Idee,
ähnlich im Sinne von zu der Grammatik,
den Automaten konstruieren und zu dem Automaten die Grammatik.
Die eine Richtung ist noch relativ einfach,
wenn ihr eine kontextfreie Grammatik nehmt und ihr wollt dazu
ein PDA konstruieren,
der die gleiche Sprache akzeptiert,
dann macht ihr das so
Das ja am Anfang, indem ihr erstmal noch gar nichts vom Eingabeband lest,
tut ihr einfach mal das Staatssymbol der Grammatik auf den Keller.
Und danach ersetzt ihr immer,
also habt ihr für jede Regel sozusagen Übergang in diesem Zustand,
indem ihr eben das Symbol S durch die rechte Seite von S ersetzt.
Das habt ihr für jede Regel und für Terminalzeichen macht ihr das so,
dass ihr das Terminalzeichen sowohl vom Keller löschen könnt,
als auch vom Eingabeband lesen könnt.
Und dann funktioniert das schon. Das ist noch relativ einfach.
Die Umkehrrichtung zu einem PDA, eine Grammatik zu erzeugen,
ist schwieriger. Das war eben deswegen so einfach,
weil die rechtslineare Grammatik und der Automat, die sehen halt sehr ähnlich aus.
Jetzt muss man darauf achten, dass man eben nicht nur
vom Eingabeband was liest, sondern auch noch einen Keller hat.
Das ist das erste Problem. Und das zweite Problem ist,
die PDAs hier, Die waren ja immer nicht die Terministe definiert.
Das heißt, sie müssen auch noch irgendwie damit klarkommen,
dass, ihr müsst irgendwie in der Grammatik abbilden,
dass der PDA unter Umständen unterschiedliche Dinge tut.
Und sobald eine davon zum Ergebnis führt,
muss das in der Grammatik eben auch zum akzeptierten Wort führen.
Das macht das Ganze noch mehr komplizierter. Wenn ihr das mal lesen wollt,
im Hauptcraft Ulmen steht das und im Skript ist es zumindest angetatscht.
Also im Skript steht die Konstruktion, aber es wird
nicht mehr bewiesen, dass die Konstruktion auch korrekt ist.
Ja, und zu guter Letzt,
hier steht ja mit Lea im Keller und wir hatten ja einmal erwähnt,
dass eben mit leerem Keller und mit Endzustand akzeptieren Äquivalent ist.
Das heißt, die Aussage da,
die gilt auch für PDAs,
die mit Endzustand akzeptieren
Und der Arbeit haben wir zumindest drei Möglichkeiten,
eine kontextfreie Sprache zu beschreiben, PDA, der mit Leam Keller akzeptiert,
PDA, der mit Endzustand akzeptiert und eben kontextfreie Grammatik.
Und wichtig hier, ne? Die PDA-Modelle sind aber nicht deterministisch.
Also mit deterministischen Kellerautomaten kriegt ihr die Sprachfamilie der kontextfreien Sprache nicht hin.
Ihr braucht diesen Nicht-Eterminismus. Das andere gucken wir uns nochmal an,
wenn wir nochmal irgendwann wirklich Zeit haben,
dann können wir uns nochmal angucken,
was eigentlich beim Kellerautomaten mit, was beim Kellerautomaten passiert,
wenn man den nur deterministisch macht.
Fragen bis dahin, Abschlusseigenschaften nochmal ganz kurz nur. Wir hatten ja bei regulären Sprachen,
wenn ihr das noch erinnert, da haben wir uns so Sachen angeguckt,
wie das die gegenüber Vereinigung abgeschlossen sind,
gegenüber Komplexprodukt gegenüber Durchschnitt zum Beispiel,
das war die Idee mit dem Produktautomaten,
wo man sich dann irgendwie gegeben zwei Automaten,
jetzt will man Automaten bauen, der das Produkt akzeptiert.
Und dann hat man gesagt,
dann baue ich mir das doch in den Automaten so,
dass ich mir mit dem Automaten immer ein Tupel von Zuständen merke,
nämlich wo ich im ersten Automaten bin und wo ich im
zweiten Automaten bin
Und jetzt kann man sich das Gleiche wieder angucken bei dieser Familie,
der kontextfreien Sprachen und was relativ schnell geht, ist zu zeigen,
dass die gegenüber Vereinigung, Komplexprodukt und Sternenbildung abgeschlossen sind,
macht man mit Grammatiken, wenn ich mir eine Grammatik,
also eine Grammatik G1 und eine Grammatik G2 nehme,
die jeweils irgendwie eine Sprache, eine Kontextfreisprache L1 und L2 akzeptiert,
dann ist jetzt immer die Fragestellung,
wie generiere ich eine Grammatik, die die Vereinigung,
das Komplexprodukt oder die Sternenbildung akzeptiert, Vereinigung ist relativ einfach,
man schmeißt halt die beiden Non-Terminalmengen zusammen, macht sich ein neues Staatssymbol
Und dann übernimmt man alle Produktionen und die einzige Produktion,
die man dazu nimmt, ist eben die,
die von S3 nach S1 geht und die,
die von S3 nach die einzigen beiden, die man hinzunimmt,
von S3 nach S1 und von S3 nach S2.
Und dann hat man eine Grammatik, die gerade die Vereinigung akzeptiert, warum?
Naja, ich fange mit dem Startsymbol S3 an und als erstes,
ich habe ja nur zwei Möglichkeiten, was ich machen kann.
Entweder gehe ich zu S1 oder ich gehe zuerst zwei.
Und wenn ich in S1 bin, kann ich ein Wort
aus LG1 ableiten und wenn ich in S2 bin,
kann ich ein Wort aus LG2 ableiten.
Dann kriege ich die alle hin. Für das Komplexprodukt hier
Ganz ähnliche Idee, ich schmeiße wieder die ganzen Non-Terminale zusammen und so weiter.
Und ich fühle mir halt eine neue Produktion,
ein von neuem Staatssymbol S4 zu S1S2. Jetzt muss ich
immer anfangen mit von S4 zu S1S2. S1 kann ich zu
einem Wort aus der ersten Sprache ableiten.
Er ist 2 zu einem Wort aus der zweiten Sprache.
Kommt also genau ein Wort raus, das irgendwie diese Form hat.
L1. L2. Das Wort aus L1 kriege ich über der Staats-
und US1 und das Wort aus L2 über das Staatssymbol.
S2. Dann klappt das auch. Und die Sternbildung hier,
da kann man sich schon überlegen,
das wird eine ähnliche Idee sein wie hier
Da sagt man eben von meinem neuen Staatssymbol S5,
gehe ich zu dem ursprünglichen Staatssymbol S1 und halt wieder zu S5.
Und jetzt kann ich dadurch, dass ich diese Produktion hier
beliebig oft anwende, kriege ich so eine Kette von S1.
Und jedes S1-Ding kann ich eben ableiten zu einem Wort aus L1.
Und irgendwann sage ich, okay, ein S5,
irgendwann habe ich genug Wort und eine ist fünf,
leite ich dann eben zu Lander ab hier.
Und dann habe ich eben so und so viele S1er erzeugt
und kann eben daraus jedes Wort jeweils da draußen Wort aus L1 ableiten.
Und dann kriege ich also insgesamt ein beliebiges Wort aus
L1 Stern hin
Das sind da schon die Ideen für diese Abschlusseigenschaften.
Was man ein bisschen formaler machen müsste als das,
was ich eben gesagt habe, weil man muss eben streng formal immer zeigen,
dass diese Mengengleichheit dann wirklich gilt.
Ich habe das eben immer nur einmal kurz ein bisschen illustriert,
geht aber relativ schnell. Also im Grunde genommen das,
was ich eben gesagt habe und dann nochmal die Rückrichtung,
die sehr ähnlich aussieht und dann ist man da fertig.
Nur hier nochmal als Notiz,
damit ihr beim Nachbereiten nicht denkt, dass man da aufhört,
sondern man muss eben danach noch zeigen,
dass diese Behauptung der Gleichheit dann immer auch wirklich gilt
Gut. Und dann kann man zeigen,
dass die nicht abgeschlossen sind gegenüber Durchschnitt, Komplimentbildung und Mengendifferenz.
Ist deswegen ganz interessant, weil die regulären Sprachen gegenüber diesen Operationen abgeschlossen sind.
Also die regulären Sprachen sind gegenüber Durchschnitt abgeschlossen gegenüber Komplimentbildung und Mengendifferenz.
Und die kontextfreien eben nicht. Kann man immer Gegenbeispiel für angeben,
also irgendwie zwei Sprachen, die beide kontextfrei sind,
sodass dann der Schnitt nicht kontextfrei ist.
Ist aber nicht so erbaulich, deswegen habe ich das mal geskippt.
Wer die Beispiele sehen möchte, kann das im Skript nachlesen
Achso, die sind übrigens auch da, die verteilen wir abgleich.
Also die verteilen wir gleich in Indigungsgruppen. Fragen bis dahin.
Die Fragen. Dann machen wir jetzt nochmal was Neuartiges.
Bisher waren diese kontextfreien Grammatiken ja ziemlich generell.
Also das einzige, was wir hatten als Bedingung,
war auf der linken Seite muss ein Non-Terminal stehen,
auf der rechten Seite
irgendeine Zeichenkette
Das, was wir jetzt machen wollen, ist,
wir wollen eine sogenannte Normalform basteln. Also eine Form,
die viel, viel stärker die erlaubten Regeln einschränkt,
was dazu führt, dann hat man nur zwei,
also gleich werden wir sehen,
dass man dann nur zwei Arten von Regeln hat.
Das macht es bei etlichen Beweisen einfacher,
weil man dann immer sagen muss, naja,
die Regel sieht entweder so aus oder so und bei dem
passiert das und das und bei dem passiert das und das.
Dann hat man da immer nur eine Fallunterscheidung, wo man zwei Fälle hat.
Und bei einigen Algorithmen hilft das eben auch,
weil man dann weiß, die Grammatik sieht so und so
aus und da muss man eben auch nur zwei Fälle abarbeiten.
Und die sogenannte Chomsky-Normalform sieht wie folgt aus, ist eine kontextfreie Grammatik,
aber alle Produktionen haben sind in einer dieser beiden Formen.
Also auf der linken Seite immer ein Non-Terminal,
das ist aber allgemein so bei der kontextfreien Grammatik und auf der
rechten Seite stehen entweder genau zwei Non-Terminale oder genau ein Terminalzeichen.
Das ist Chomsky Normalform. Sie hat übrigens ein Problem,
welches Wort kann man damit nicht ableiten?
Wenn das so definiert wird, was kann man damit
auf keinen Fall ableiten
So gestellt kann man eigentlich nur so in eine Richtung denken.
Also es wird wahrscheinlich, weil das ja total allgemein
da steht, nicht um irgendein spezielles Wort gehen.
Also man wird jetzt nicht sagen können irgendwie, oh,
das Wort A, B, C wird man damit nicht ableiten können.
Welches Wort bleibt so übrig? Nee, nee,
nee, das ist ja schon viel zu kompliziert.
Ja, genau, das leere Wort. Weil ich habe ja hier verlangt irgendwie,
da muss auf jeden Fall so ein Terminalzeichen stehen und dann kann ich
das leere Wort nicht ableiten, das wird nicht funktionieren.
Weil man das ja aber gerne haben möchte,
gibt es noch sowas wie eine erweiterte Chompsky-Normalform,
sehen wir auch gleich
Was jetzt aber spannend ist, ist, dass man,
egal wie die kontextfreie Grammatik aussieht,
also da kann man sich ja jetzt beliebig wilde Regeln vorstellen,
man kann immer eine äquivalente Grammatik konstruieren, die nur solche Regeln hat.
Plus eventuell eben eine zur Erzeugung des leeren Wortes. Satz sieht so aus,
zu jeder Kontextfreien gemeint, die G kann eine äquivalente,
kontextfreie Grammatik G-Strich konstruiert werden, also eine Grammatik,
die die gleiche Sprache akzeptiert, generiert, für die eben Folgendes gilt.
Ist Lamm da gar nicht in LG drin,
also meine Ursprungsgrammatik G, wenn die das leere Wort gar nicht generiert,
dann ist meine Grammatik G-Strich in Trumpsky Normalform und wenn Lamm da da drin ist,
in LG, dann ist G-Strich nur in erweiterter Chomsky-Normalform.
Das bedeutet, ich habe eine Lamder-Produktion,
nämlich vom Staat sowohl zu Lamda und alle anderen Produktionen sind dann
eben in Chomsky-Normalform und außerdem kommt erst Strich auf keiner rechten Seite in der Regel vor.
Ja, das macht man deswegen,
weil wenn das irgendwo auf einer rechten Seite vorkommt,
dann sind die Regeln wieder nicht von dieser schönen Art A,
B, C, sondern weil ich dann theoretisch ja das eine wieder zum Lamde ableiten könnte, wird das dann wuselig.
Und auch wenn das hier jetzt ein bisschen länglich so klingt,
im Grunde genommen ist die Aussage,
ich kann jede kontextfreie Grammatik auf diese Form bringen,
dass sie nur solche Regeln benutzt
Plus eben eventuell den Zusatz, wenn ich Lamda irgendwie erzeugen will,
dann gibt es noch die Möglichkeit vom Staatssymbol zusammen da zu gehen.
Das kann man machen. Da kann man
sich schon vorstellen, das ist wahrscheinlich nicht so einfach.
Da gibt es jetzt sechs Schritte, die man nacheinander abarbeiten muss.
Und nach jedem Schritt entsteht eine äquivalente Grammatik.
Im ersten Schritt wird die Grammatik Lamda freigemacht,
gucken wir jetzt gleich, um was das bedeutet.
Dann wird sie reduziert, gucken wir uns auch gleich an,
was das bedeutet. Und dann die nächsten drei Regeln,
hier Kettenregeln, ersetzen langer Termineregeln, verkürzen zu langer Regeln,
die dienen im Grunde genommen dazu,
zu lange zu lange rechte Seiten zu verkürzen und ganz zum Schluss eventuelle Hinzunahme einer Landerregel,
das ist eben für, wenn Chomsky Normalform nicht reicht,
sondern man in die erweiterte Chomsky Normalform gehen will.
Und das, was wir jetzt machen, ist,
wir gehen jetzt alle diese sechs Schritte durch. Ich zeige euch immer einmal formal,
was man machen muss und dann ein Beispiel,
wie das eben in einem Beispiel aussieht,
was wir ein bisschen skippen, ist die Beweise,
dass die jeweils dabei rauskommende Grammatik tatsächlich äquivalent ist.
Ich sage das immer mal irgendwie nebenher,
wie man das machen könnte,
aber bei den meisten Sachen ist es auch relativ offensichtlich,
dass sie äquivalent sein müssen,
aber streng genommen müsste man das eben für jeden dieser Schritte
einmal nochmal irgendwie kurz erklären,
warum das denn nun äquivalent sind
Joa. Dann mal los, ne? Lamm da freimachen.
Beim Lamm da freimachen, was man jetzt machen möchte,
ist, man will keine Landerproduktion mehr drin haben.
Also man will keine Produktion der Atmir drin haben,
dass sie von A zu Lamda komme. Ich will auch nicht mehr sowas haben,
wie wenn ich von A zu BC komme und von B zu Lamda und von C zu Lamda,
dann komme ich ja theoretisch auch von A zu Lamda,
das will ich auch alles nicht mehr haben.
Das soll alles raus. Was man macht ist,
jetzt kommt so ein ganz typisches Verfahren für kontextfreie Grammatiken
oder allgemein für Grammatiken
Wenn ich sowas hier bestimmen will, alle Non-Terminale,
von denen aus sich irgendwie zum leeren Wort Lamda komme,
dann fange ich an mit einer Menge M0.
Da nehme ich mir all die Non-Terminale rein, von denen ich direkt zu Lamda komme.
Ihr fangt also sozusagen auf den rechten Seiten der Grammatik an,
guckt, wo steht da überall Lamda und die linken Non-Terminale,
die nehmt ihr jetzt dazu.
Die schreibt euch alle in eine Menge. Jetzt kommt da von mir
aus die Menge ABC raus und als nächstes nehmt ihr euch in die Menge M1,
dann eben die Symbole,
die ihr in M0 schon hattet und es kommen die Non-Terminale dazu,
die zu einem Wort ableiten,
das nur aus Symbolen besteht,
die ihr eben schon bestimmt habt
Ja, wenn ihr im ersten Schritt, in M0,
wenn ihr da irgendwie A, B, C bestimmt,
und ihr habt jetzt irgendwie eine Regel,
wo gesagt wird, von E geht es zu CCB,
dann kann ich ja das CC und das B,
das kann ich ja alles auch zu lange ableiten,
also auch mein neues D,
deswegen soll das dann in die Menge auch dazukommen.
Das mache ich immer so weiter. Und irgendwann muss es so
ein K geben, bei dem diese Mengen eben gleich sind.
Warum? Ich schmeiße ja bei keinem Schritt was raus,
es kommt höchstens immer wieder was dazu.
Und es kommen aber immer nur Non-Terminale dazu,
weil diese Menge der Non-Terminale endlich ist, muss das irgendwann mal aufhören.
Also im Worst Case hört es dann auf, wenn ich alle Non-Terminale habe.
Die Menge nennt man dann auch irgendwie V-Lamda,
weil das eben die Non-Terminale sind,
die zu Landa ableiten
Und jetzt kommt ein fieser Schritt. Jetzt definiert man sich eine Substitution,
wie das funktioniert, gucken wir uns gleich an. Einmal kurz als Definition,
die Non-Terminale, die nicht in V-Lamm da drin sind,
Dino und Herminale, die nicht in, wow,
die Non-Terminale, die nicht in V-Lamm da drin sind,
die bildet man einfach direkt auf die Menge ab,
die eben dieses Non-Terminal enthält und die Non-Terminale,
die in V-Lamm da drin sind,
die bildet man auf die Menge ab,
Non-Terminal und eben Lamda.
Da fehlt das Slash.
Wenn man das hat,
dann kann man eben die neue Grammatik dadurch definieren,
dass man die gleichen Non-Terminale nimmt,
die gleichen Terminale und als Produktionsmenge nimmt man genau die Produktion A von VDA,
das sind auch ein Fehler,
der hat das V eben nicht Lander ist und V eben aus dieser Menge Sigmar W ist für so eine Produktion A.W.
Gucken wir uns das mal ein Beispiel an,
dann wird das verständlicher. Die Behauptung gleich ist,
dass dann eben die so generierte Grammatik LG1 gleich LG ist,
ohne eben Lander, Lander wird da nicht milderiert.
Im Beispiel, wenn ihr sowas ihr habt,
als Produktion von C geht es nach Lamda,
von B geht es nach XC oder nach ACX,
von A geht es nach B oder nach CC,
Dann fängt man jetzt an und guckt zuerst,
von welchen Non-Terminalen kommt man direkt zu Lamda.
Das ist irgendwie nur das C hier oben.
Von C geht es direkt zu Lamda. Das heißt,
das nimmt man dazu. Als nächstes nimmt man sich die,
von denen man zu einem Wort kommt, das nur aus Cs besteht.
Das ist eben nur von dem A möglich. Von A
geht es zu CC. Dann kommt das A noch dazu.
Und jetzt würde man gucken, gibt es irgendwo eine rechte Seite,
die nur aus As und Cs besteht.
Gibt es nicht, weil hier steht jetzt irgendwie noch das kleine X.
Hier steht noch auch das kleine X. Das B kommt also
nicht mehr dazu. Das heißt,
die Menge M2 und M1 sind gleich,
da hört man dann auf
So bestimmt man sukzessive diese Non-Terminale, die zu Lamda ableiten. Und jetzt würde man,
wenn man jetzt eine Substitution anwenden will,
also hat jetzt nichts mit dem vorherigen zu tun,
nur wenn man das jetzt irgendwie machen möchte,
dann wendet man Siegmar eben auf ein Wort U an und
in U werden dann eben die Symbole aus V Lamda gestrichen.
Entweder keins davon, einige davon, alle davon. Im Beispiel,
wenn ihr für V Lamda beispielsweise AC bestimmt habt und ihr wendet jetzt diese Substitution,
die sich daraus ergibt auf diese Zeichenkette XA, B, C, Y an.
Jetzt könnt ihr sozusagen Aus diesem Wort X, ABC,
Y, die Symbole A und C beliebig rausstreichen und all die unterschiedlichen Wörter,
die dabei entstehen, die nehmen wir in eine Menge.
Und die Wörter, die dabei entstehen, sind eben X,
A, B, C, Y,
ihr streicht gar keinen Buchstaben, XBC, Y,
ihr streicht genau das A, X, A,
B, Y, ihr streicht genau das C und XB,
Y, ihr streicht beide.
Das sind die Wörter, die da entstehen können. Und beim zweiten Beispiel, ACA,
also X, ACA, auch wieder im ersten Fall,
ihr streicht gar nichts, im zweiten Fall,
ihr streicht das erste A, dritter Fall,
ihr streicht das C, vierter Fall, ihr streicht das zweite A, der Fall.
Ihr streicht wahlweise AC oder CA, da kommt in beiden
Fällen XA raus oder ihr streicht beide As oder ihr schreibt alle Reisenwohle.
Das sind dann die Sachen, die hier so rauskommen können.
Und bei der, bei dieser Geschichte hier mit den Produktionen,
jetzt würdet ihr halt alle Produktionen nehmen,
also ihr fast alle Produktionen AV an.
Quatsch, ihr nehmt alle Produktionen AW, Entschuldigung,
indem alle Produktionen AW und auf die rechte Seite wendet ihr jeweils diese Substitution hier an.
Und das, was da rauskommt, das ist dann ja so ein V,
sieht man weh. Und wenn das nicht Lamda ist,
dann wird das eine neue Produktion AV. Also wenn wir hier,
wenn wir das rausgekriegt hätten, als Menge VSV Lamda,
und ihr hättet irgendwie eine Produktion gehabt von GroßD, geht es zu XACA.
Dann hättet ihr jetzt die Produktion von GroßD,
geht es zu XACA, von GroßD geht es zu XCA,
von GroßD geht es zu XAA,
von GroßD geht es zu X-AC und so weiter.
Die Produktion hätte die alle dazugenommen. Was sie nicht dazunehmend sind,
Produktionen, die nach Lamda gehen,
also wenn hier das kleine X nicht stehen würde,
Dann könnte man hier ja noch das Lamda dazunehmen.
Die Produktion kommt nicht dazu, weil hier eben explizit steht,
V soll Ungleichlander sein. Spreche, kriegt eine Grammatik raus,
in der gar keine Lamdaproduktion mehr drin sind.
Die fliegen alle raus. So, das ist der
erste Schritt. Mit dem kann man insbesondere auch testen,
ob Lamda in der generierten Sprache von G ist.
Wenn ihr das mal irgendwie entscheiden wollt, warum auch immer,
dann würdet ihr diese Menge V Lamda konstruieren und dann eben gucken,
ob das Staatssymbol da drin ist
Dann wisst ihr, das Lamda-Element aus LG ist,
wie ihr das gemacht habt. Und wenn man das mal machen möchte,
beispielsweise eine Grammatik zu generieren, die nur eine Landerproduktion hat,
was wir ganz zum Schluss auch brauchen werden,
dann würde man eben gucken,
ob es da drin ist und falls ja,
dann fühlt man sich ein neues Startsymbol erst neu ein,
lässt das auf Lamda abbilden und dann führt man sich noch für jede Produktion von dem alten Staatsymbol zu weh,
diese neue Produktion ein.
Dann hat man es erreicht,
dass es nur diese eine Lamda-Produktion gibt und dass es neue
auf keiner rechten Seite auftritt,
war ja
ein neues Symbol
So, das zum Landerfreimachen. Man kann die Technik auch abwandeln,
also wenn ihr, ja, wenn ihr da mal guckt,
hier wollte man ja all die Terminal,
all die Non-Terminale bestimmen, die eben zu Lander ableiten.
Man kann das auch benutzen, nur beispielsweise all die Non-Terminale zu bestimmen, die zu A ableiten. Ja,
dann schreibt man hier, als statt Lander A hin,
wenn bestimmt mal alle,
die zu einem Wort aus A-Stern ableiten,
dann bestimmt man hier alle Worte,
die irgendwie zu einem Wort aus A Stern gehen und dann kann man sukzessive all die Non-Terminale bestimmen,
die eben zu Non-Terminalen gehen,
die weiter aus A Stern ableiten,
die leiten dann ja auch wieder Wörter aus A Stern
ab und so weiter
Das kann man auch machen. So, zweiter Schritt, reduzieren.
Beim Reduzieren möchte man nur noch produktive und erreichbare Non-Terminale haben. Produktiv sind Non-Terminale,
wenn sie eben irgendwie zu einem Wort abgeleitet werden können,
das nur aus Non-Terminal, das nur aus Terminalen besteht.
Und erreichbar sind sie, wenn es irgendwie eine Möglichkeit gibt,
vom Staatssymbol dahin zu kommen. Umgangssprachlich würde man sagen,
alle anderen Non-Terminale sind auf wenig nützlich,
weil wenn ich von einem Non-Terminal gar nicht zu einem Wort kommen kann,
das nur aus Terminalzeichen besteht,
Dann kann ich damit offensichtlich kein Wort generieren,
das in der Grammatik ist.
Also kann ich das Non-Terminar gleich ganz rausschmeißen. Und wenn es nicht erreichbar ist,
dann komme ich da vom Staatssumbol gar nicht hin.
Gleiche Aussage, dann kann ich es auch rausschmeißen.
Deswegen reduzieren. Und deswegen ist Reduzieren auch allgemein nützlich,
also auch für andere Grammatiken. Wenn man das jetzt machen möchte,
kann man relativ ähnlich wie eben,
wir wollen jetzt erstmal die produktiven Non-Terminale rausfinden, also die Non-Terminale,
die irgendwie zu einem Wort gehen, das nur aus Terminalzeichen besteht.
Jetzt nimmt man sich als Menge M0 die Menge der Terminalzeichen und als jeweils nächste Menge,
nimmt man sich dann Aldi-Non-Terminale, die zu einem Wort ableiten,
das nur aus Symbolen der vorherigen Menge besteht.
Wenn die erste Menge VT ist, Also M0 ist ja VT,
dann sind in M1 all die Non-Terminale,
die zu einem Wort ableiten, das nur aus Terminal-Zeichen besteht.
Das ist ja auf jeden Fall produktiv. Und in die
nächste Menge kommen dann die Non-Terminale, die zu einem Wort ableiten,
das nur aus Terminalzeichen besteht oder eben aus Non-Terminalen,
die direkt zu einem Wort aus Terminalen abgeleitet werden können.
Und das macht man dann immer so weiter.
Und auch da muss dann irgendwann ein Index K kommen,
bei dem eben MK gleich MK plus 1 ist, auch wieder wegen dieser Endlichkeitsgeschichte.
Da hört man dann auf. Und jetzt will man ja die produktiven,
jetzt will man ja nur die produktiven Non-Terminale haben,
deswegen definiert man sich jetzt die neue Grammatik so, dass man sagt,
Non-Terminale, meine neue Non-Terminalmenge soll genau aus den alten Non-Terminalen bestehen,
die eben auch in MK drin sind.
Also sprich die, die produktiv sind. Alle anderen schmeiße
ich einfach raus. Und gegebenenfalls nehme ich halt Essen noch
dazu. Weil das Staatssymbol will ich nicht rausschmeißen.
Das nehme ich dann nochmal dazu. Terminalzeichen lasse ich.
Und bei den Produktionen erlaube ich eben auch nur,
dass auf der linken Seite ein produktives Non-Terminal steht und auf
der rechten Seite irgendwas bestehend aus produktiven Non-Terminalen oder eben in M0
sind sie ja noch drin,
Und als viertes eben das Staatsboot ist. Also,
was ich mache, ich bestimme sukzessive die Menge der produktiven Non-Terminale.
Ich fange sozusagen wieder auf den rechten Seiten an,
gucke auf den rechten Seiten, wo stehen da nur Terminalzeichen,
dann bestimme ich die Non-Terminale, die dazu passen.
Das mache ich immer weiter. Und danach streiche ich
im Grunde genommen alles raus, wo noch Non-Terminale stehen,
die eben nicht produktiv sind.
Das versteckt sich hier und da bei der Schnittbildung.
Das ist der erste Schritt mit dem Produktiv,
jetzt will man
die Erreichbaren noch machen
Da macht man auch wieder sowas ähnliches, nur dass man jetzt sozusagen bei den linken Seiten anfängt.
Man fängt halt mit dem Startsymbol an und dann nimmt man jeweils die Non-Terminale hinzu,
die eben irgendwie auf der rechten Seite einer Regel stehen,
wenn auf der linken Seite ein Symbol steht,
das sich bereits als erreichbar nachgewiesen habe. Sprich,
da ist es ganz einfach, ihr fangt mit S an,
also mit dem Startsymbol oder mit der Strich,
dann schreibt ihr alle Non-Termine alle in eurer Menge,
die irgendwie auf der rechten Seite von Produktionen stehen,
bei denen dieses S auf der linken Seite ist und dann geht ihr als nächstes eben all die Symbole durch,
die ihr jetzt neu hinzugenommen habt,
guckt euch von denen die linke Seite an und welche
neuen Symbole auf der rechten Seite stehen und die nehmt ihr
dann auch hinzu
Und das macht ihr immer so weiter, bis ihr
irgendwie wieder so ein Index K habt mit dieser Eigenschaft.
Und als Grammatik G2 nehmt ihr dann eben nur die Produktion hinzu,
bei denen die rechte und linke Seite nur erreichbare Non-Terminale enthalten.
Dann seid ihr auch wieder fertig. Kann man auch formal
so ähnlich machen, wie hier wieder mit dem.
Habe ich mir bei dem Fall gespart. Genau.
Das sollt ihr auch in den, was war da,
wo steht er da? Genau, man kann den Schritt
auch alleine machen, dass man eine Grammatik einfach nur reduziert.
Und das sollt ihr in den Präsenzaufgaben machen,
deswegen gibst du dem Schritt auch
kein Beispiel
Achtet bei, wenn ihr diese Präsenzaufgaben macht,
achtet mal da drauf, wie bei diesen beiden Techniken,
bei dem ersten Fall, diesem Produktivmachen.
Da wird eben bei den Regeln immer auf der rechten Seite
angefangen und man guckt sich dann die linken Seiten an
und füllt irgendwie seine Menge MI auf.
Und bei dem anderen, bei dem Erreichbaren,
da fängt man eben auf der linken Seite der Regeln an,
guckt dann immer, was steht auf der rechten und füllt damit seine MIs auf.
So, das waren auch die beiden längsten Schritte.
Der Rest ist eher einfacher. Dritter Schritt Kettenregeln entfernen.
Was man jetzt nämlich noch haben kann,
sind irgendwie solche Regeln hier.
Von A geht es nach
Die sind deswegen blöd, weil die eben nicht dieser Trumpsky-Normalform entsprechen.
Trumpsky-Normalform wollten wir ja nur Regeln haben, die von A
nach B-C gehen oder eben von A zu einem Terminalzeichen Klein A.
Solche Regeln will man also nicht mehr haben. Die Idee ist,
wenn ich so eine Regel habe, dann,
wenn ich die benutze, passiert ja eigentlich nicht viel,
außer dass ich A durch B ersetze.
Dann kann ich auch gleich gucken, was kann ich eigentlich
mit B machen? Und die rechten Seiten von B kann ich
mir dann sozusagen als rechte Seiten von A da hinschreiben.
Also wenn es von B zu,
nehme man von B
geht es zu Klein
Ja, dann kann ich auch einfach die Regeln rausschmeißen und sagen, es geht von A zu Plan D.
Das hat dann den gleichen Effekt. Problem ist,
es könnte ja so eine Kette von Kettenregeln geben,
von A geht es zu B, von B geht es zu C,
von C geht es zu D und erst von Ros D geht es dann vielleicht zu,
was auch immer, Klein, E,
Klein F. Das müsste ich auch auffangen.
Deswegen definiert man sich eben diese, so eine Relation mit,
keine Ahnung, kleiner, kleiner, genau dann,
wenn es so eine Produktion gibt,
dann guckt man sich die reflexive, transitive Hülle davon an.
Und dann definiert man sich wieder etwas länglich. Ich gucke mir an,
gib so eine, wenn A und B eben in dieser Relation dann zueinander stehen,
sprich, wenn es einen Weg von Kettenregeln gibt,
der mich von A zu B führt.
Und es gibt ein P2,
also in der vorherbestimmten Grammatik eine Regel von B nach W,
wobei wir jetzt eben nicht nur aus einem Non-Terminal besteht.
Weil da hätte ich ja nichts gewonnen, dann würde ich wieder eine Kettenregel einführen.
Dann nehme ich mir diese Produktion von A nach W hinzu.
Also das, was man macht, ist, man bestimmt diese Relation.
Und dann guckt man sich einfach, jetzt nimmt man sich zwei Symbole,
die in dieser Relation stehen, eben A und B.
Und dann sagt man, okay,
jetzt gucke ich mir alle rechten Seiten von B an
Und wenn die rechte Seite von B eben nicht nur aus einem Non-Terminal besteht,
dann nehme ich mir die als rechte Seite von A. Beispiel dazu,
wenn ihr das hier als Regeln habt oben,
dann kann man sich überlegen,
A und B steht eben in dieser Relation wegen der Kettenregel,
B und C steht direkt in dieser Relation wegen der Kettenregel.
Und wenn A und B in dieser Relation stehen und B
und C in dieser Relation entsteht eben auch A und C
in der Relation.
Ich komme von A zu B
zu C. Ja
Welche Produktionen sind da jetzt drin? Erstmal als erstes hier all die Produktionen,
die man oben auch hatte, die aber keine Kettenregeln sind.
Also die Produktion A nach B habe ich rausgenommen,
aber die Produktion A nach CB ist drin geblieben.
All die Produktion, die keine Kettenregeln sind, bleiben drin.
Und jetzt geht man eben durch. Ich weiß irgendwie,
es gilt, dass ich von A zu B komme.
Jetzt gucke ich mir die rechten Seiten von B an.
Das ist einmal das große C und einmal das kleine D.
Und die führe ich mir als rechte Seiten von A ein.
Das heißt, ich komme von A zu D,
weil ich eben von B zu D komme.
Und theoretisch könnte ich mir auch einführen,
von A zu C, aber das wird eben explizit ausgeschlossen,
weil dann hätte ich ja wieder eine neue Kettenregel eingeführt,
die will ich ja nicht
Dann guckt man sich als nächstes an,
von B geht's zu C, was sind die rechten Seiten von C,
das ist nur das kleine E,
also komme ich von B zum kleinen E, was ist das hier?
Oder als letztes von A komme ich zu C,
die rechten Seiten von C sind das eh,
also komme ich von A zu E.
Das sind dann die neuen Produktionen. Und man sieht,
es gibt keine Kettenregeln mehr und man kann sich relativ schnell überlegen,
dass das auch äquivalent ist. Warum,
wenn ich vorher von A zu B gegangen bin und dann von B zu D,
dann kann ich genau diese Ableitung jetzt zwar nicht mehr machen,
aber ich kann ja direkt von A zu D gehen,
dann ist das okay.
Ich kann alles, was ich vorher machen konnte,
eben auch machen,
nur mit weniger Schritten
Vierter Schritt, der vierte ist ganz einfach. Es könnte jetzt passieren,
dass auf der rechten Seite die Länge größer ist als eins und mehr als ein Terminalzeichen auftreten.
Und bei der Chompsky-Normalform wollten wir das ja explizit so haben,
dass auf der rechten Seite entweder zwei Non-Terminal auftreten oder ein Terminalzeichen.
Das heißt, wenn wir sowas haben, eine Produktion,
bei dem die rechte Seite länger als eins ist und die Terminalzeichen enthält,
dann ersetzen wir eben jedes Terminal durch so ein neues Non-Terminal.
Beispiel, wenn ich sowas hier habe,
dann kriege ich eben diese Regeln die rechte Seite hier,
die rechte Seite BC,
die ist länger als eins und enthält auch mehr als ein,
äh, mehr als ein Terminal, BC,
aus beiden mache ich ein neues Non-Terminal, die rechte Seite Gruß
B, Kleinzee,
hat auch dieses Terminalzeichen Kleinzee und ist länger als eins,
also, ersetze ich das auch, die Regel hier hat als Länge eins,
das ist okay, die fasse ich dann nicht an.
So, das ist also relativ einfach,
da sieht man auch schnell ein, dass das Äquivalent ist.
Jetzt kann ja noch das Problem auftreten, dass ich noch zu lange Regeln haben kann.
Also ich könnte ja jetzt beispielsweise sowas haben,
wie von Groß A geht es zu Groß B, Groß, C, Groß D.
Darum habe ich mich bisher noch nicht gekümmert. Ich weiß,
alle Non-Terminale sind produktiv, ich weiß, alle Non-Terminale sind erreichbar,
ich weiß, ich habe keine Kettenregeln mehr und ich weiß,
auf den rechten Seiten treten,
wenn die Regel zu lang ist, eben keine Terminalzeichen mehr auf.
Aber jetzt kann ich noch zu lange Regeln haben. Deswegen,
wenn es jetzt noch solche Regeln gibt, mit W ist größer zwei,
also auf der rechten Seite haben wir etwas, was länger ist als zwei,
dann muss man die irgendwie auf die Länge zwei bringen.
Das sieht fies aus
Das ist die formale Schreibweise für, wenn auf der rechten Seite vier Buchstaben stehen,
dann mach doch aus den ersten dreien einen Non-Terminal.
Und dann machst du aus dieser Regel mit drei Non-Terminalen,
also wenn ich jetzt A geht nach B-C-D-E habe,
warte mal, ich habe doch ein Beispiel, ja.
Und ich habe von A geht es nach B-C-D,
dann mache ich mir als Produktion jetzt,
von A geht es zu dem Non-Terminal
B-C-D,
das soll jetzt ein Non-Terminal sein und zu dem Non-Terminal
So, und dann muss ich mir natürlich hierfür irgendwie für das BCD,
was ich vorher hatte,
wieder was einführen und dann sage ich mir von dem einem Non-Terminal BCD,
hat immer noch eine Länge, die größer ist als größeres als zwei ursprünglich.
Deswegen geht es zu dem Non-Terminal BC und dem D und
von dem BC letztendlich geht es dann eben zu dem.
Beide Non-Terminalen wie Kleinzieh. Da habe ich also aus dieser
länglichen Regel irgendwie mehrere Regeln gemacht,
bei denen jetzt die rechte Seite immer aus genau zwei Non-Terminalen
Genau, und das findet man hier eben in so Geschichten wie,
hier wird jetzt beispielsweise gesagt,
wenn A nach W eine Produktion ist aus der vorherigen Grammatik und W,
länger ist als Drei.
Also so wie in dem Beispiel eben eine Vier,
dann lässt sich W ja so in VX zerlegen,
dass X eben ein einzelnes Non-Terminal ist und V davor hat eben die Länge irgendwie mindestens zwei.
Und dafür führe ich mir dann eben dieses neue Non-Terminal V
in Klammern ein und dann habe ich das eben.
Und das danach ist dann eben für Regeln,
die die Länge 3,
2 und 1 haben
Ja, genau. Aber an dem Beispiel kann man das
relativ schnell sehen, was formal da ein bisschen umständlich steht.
Ihr macht also auf so einer langen Zeichenkette von Non-Terminalen
eben eine Zeichenkette, die nur aus zwei Non-Terminalen besteht,
indem ihr euch eben ein einzelnes Non-Terminal einführt.
Das, was wichtig ist dabei, ist,
dass jetzt eben diese beiden Klammern und das BCD,
das ist jetzt eben ein Non-Terminal.
Den Sprung muss man irgendwie machen. Wer sich daran stört,
kann sich auch irgendwie ein Non-Terminal groß X einführen und sich irgendwie nur in den Indie-CB-CD schreiben.
Aber ihr könnt das auch mit solchen Klammern machen.
Er ist halt unter Umständen ein bisschen gucken,
dass er immer unterschiedliche Klammerpaare benutzt, damit er nicht durcheinander kommt,
aber Ansonsten geht das eigentlich ganz gut.
Und jetzt sind wir auch fast fertig. Letzter Schritt,
wir hatten ja diese Geschichte mit Chomsky Normalform und erweiterter Chomsky Normalform,
wenn man im ersten Schritt hatte,
dass das Staatssymbol S in diesem V-Lam da drin war,
dann galt ja das Lamda in der generierten Sprache drin ist,
ist es jetzt nicht mehr, weil wir ja alle Lamdaproduktionen gelöscht haben.
Deswegen fügen wir dann jetzt eben noch mal,
wenn wir das machen wollen, so ein neues Staatssymbol hinzu,
er ist neu mit dieser einen Produktion erst neu nach Lamda.
Damit können wir dann eben Lamda generieren und dann noch mal
für jede Produktion aus der vorhergenerierten Grammatik von S geht es nach W,
fügen wir diese Produktion S9 nach W hinzu
Erst neu ist das neue Staatssymbol. Es behalten wir aber,
aber es ist jetzt einfach nur Non-Terminal und wir behalten
auch alle diese Produktion von S geht's nach W.
Weil es könnte ja sein, dass S irgendwo auf der rechten Seite auftritt.
Deswegen wollen wir das behalten. Aber dann die Produktion
führen wir eben noch hinzu. Das führt halt dazu,
dass S9 nirgendwo auf der rechten Seite auftritt und dass diese
Produktion erst neu nach Lamde auch die einzige Lamdeproduktion ist.
Ja, und jetzt sind wir angekommen. Jetzt haben wir
eine Grammatik G6 und die erfüllt tatsächlich diese Bedingungen im Satz,
nämlich dass ich von jedem Non-Terminal entweder zu genau zwei Non-Terminalen
komme oder zu einem Terminalzeichen
Vater. So, wozu das Ganze? Einerseits können wir jetzt
das zweite Pumping-Lämmer beweisen, haben ihn aber für Coltisfreisprachen,
was man dann wieder benutzen kann,
um eben Grenzen nachzuweisen, sprich,
welche Sprachen sind nicht kontextfrei.
So sieht das aus
Das sieht zumindest ähnlich aus, ne? Also vorher hatten wir,
wenn L eine reguläre Sprache ist,
dann gibt es eine natürliche Zahl,
sodass jedes Wort aus L mit der Länge mindestens N in UVW zerlegt werden kann,
mit UV Kleiner gleich N und V größer gleich eins.
Und dann eben UV hoch IWNL. Jetzt sieht das ein bisschen komplizierter aus,
man kann das Wort jetzt irgendwie in UVW XY zerlegen,
mit der Eigenschaft, das VWX Kleiner gleich N ist,
VX größer gleich 1 und man dann eben an
den V und dem X
pumpen kann
Wichtig dabei zu bemerken ist, dieses VWX.
Vorher hatten wir nämlich diesen schönen Fall,
weil wir ja Z ja zerlegt haben mit UVW,
weil das UV immer vorne in dem Wort.
Jetzt wird hier über das U gar nichts gesagt,
sondern es wird nur gesagt, das VWX-Kleiner gleich Ende ist.
Das heißt, dieses VWX kann irgendwie über das Wort rüber wandern.
Also wenn ihr in diesem Beispiel von A auch NBUN,
dann kann das VWX eben in den vorderen As sein oder
irgendwie an der Grenze zwischen den As und Bs oder in den Bs.
Das kann also rüberwandern über das Wort
Sehen wir gleich auch nochmal. Dann gibt es hier
diese Geschichte mit Bud. Hier diese Geschichte, mit dem
das VX größer gleich eins sein kann. Ja,
dann kannst du auch so Fälle geben, wie das das V,
das leere Wort ist oder das X,
das leere Wort oder dass die beide nicht leer sind.
Da merkt man schon, man wird gleich irgendwie mit Fallunterscheidungen
zu tun haben. Und hier ist das Wichtige,
dass V und das X, die gehen gleichzeitig hoch.
Also ihr könnt sowas betrachten wie UV-Quadrat W X Quadrat Y.
Ihr könnt nicht sowas betrachten wie UV hoch 1 W
X hoch 5. Die Eas ging gleichzeitig hoch
Wenn wir das beweisen wollen würde, dann würde man von dieser Tomsky-Normalform ausgehen.
Und dann hat man auch wieder ein kombinatorisches Argument.
Man setzt dann, also man geht von der Thomsky-Normalform aus
und jetzt setzt man sich K als Menge der Non-Terminale.
Und dann kann man sich N als 2 hoch K setzen.
Und mit diesem N kann man nachher arbeiten.
Warum? Ihr habt ja K viele Non-Terminale und jedes Non-Terminal
kann ja auf zwei Non-Terminale abgeleitet werden.
Von A kann es nach Großbigos C gehen.
Das heißt, nachher irgendwie so und so viel Ableitung,
Schritten muss irgendwann anfangen,
sich irgendwann anfangen,
Dinge zu wiederholen
Kann man auch einen Ableitungsbaum für einführen, da kann man das dann sehen.
Und das kann man dann benutzen, um das eben zu zeigen.
Wenn ihr das nachlesen wollt, findet ihr das im Skript.
Den wollte ich jetzt nicht zeigen. Ich wollte die Anwendung jetzt nochmal euch zeigen,
also eine Sprache, die nicht kontextfrei ist und dann eben zeigen,
wie man das mit dem Pumping dann mal machen kann.
Wenn euch der Beweis aber interessiert, ist ganz lustig,
könnt ihr das im Skript nachlesen. Und wie gesagt,
wenn ihr es lest, könnt ihr mal im Hinterkopf behalten,
wo da das kombinatorische Argument ist,
das setzt sich eben irgendwie mit diesem K und diesem N zusammen.
Weil man muss ja So ähnlich wie man bei dem endlichen Automaten gesagt hat,
wenn ich ein Wort lese, das mehr Zustände,
das mehr Symbole hat, als ich Zustände habe,
dann muss ich einen Zustand wiederholen.
Und hier mache ich so Geschichten wie,
wenn ich eine Ableitung betrachte, die so lang ist,
dass sich irgendwann mal Non-Terminale wiederholen müssen und wann muss das auftreten?
Also da nochmal die Aussage. Z lässt sich zerlegen in
UVW XY, VW X Klein-Erlech-N, hm,
VX Größe gleich 1.
Und ich kann da pumpen
Ähnliches Spiel wie auch bei den regulären Sprachen,
gegebene Sprache, von der ich zeigen will,
dass sie nicht kontextfrei ist, annehmen sie wäre kontextfrei,
dann gilt das Pumpinglemmer, sei Kar,
die Zahl aus dem Pumpinglemmer, sich irgendwie ins Wort suchen,
das länger ist als K und das in älteren ist.
Und dann zeigen, dass man jede Zerlegung von Z in UVW XY,
die den ersten beiden Bedingungen entspricht, im Widerspruch zu dritten führen kann,
zum Widerspruch zu dritten führen kann.
Beispiel, typisches Beispiel auch in Bio-NCON. Auch in BON war nicht,
auch in Bio-N war nicht regulär, auch in Bio-NCORN ist nicht kontextfrei,
Und bevor ihr jetzt so denkt, das geht immer so weiter,
nein, tut es nicht.
Danach bleiben die Worte in der Sprachfamilie. Also A,
auch ein Biochen, C, auch ein Deo-Rennen ist in
der gleichen Sprachfamilie, wie das hier.
Aber es sind beide nicht Kontexthalten. Wie machen wir das? Angenommen,
ey, wäre kontextfrei, dann gilt das Pumping-Lämmer für kontextfreie Sprachen.
Sei Karl die Zahl aus dem Pumping-Lämmer. Und jetzt müssen wir
irgendein Wort wählen, abhängig von diesem K. So, das,
was man da meistens ja, was tatsächlich auch wieder funktioniert.
Ich nehme jetzt Z gleich A, hoch KB,
hoch KC hochkam. Das ist in Älteren offensichtlich.
Und es ist offensichtlich auch länger als K.
Das hat ja
die Länge
So,
jetzt gucken wir uns eine Zerlegung an von Z in UVW XY,
die die ersten beiden Eigenschaften dieses Pumpinglamers erfüllt,
die also VWX-Kleider gleich K erfüllt und VX größer gleich 1. So,
und jetzt kommt das Problem,
das ist ja eine Zerlegung in UVW XY und ich weiß nur,
was über das VW X. Das heißt,
das U kann ein beliebiges Präfix dieses Wortes Z einnehmen und dann kommt erst mein VW X.
Das kann man sich aber irgendwie hier dieses A-Hoch-KB, hoch KC,
hoch K und mein VW X hat höchstens die Länge K.
Das heißt, was nicht sein kann,
ist das VW X in den ASBs und Cs liegt
Weil ich habe ja schon K viele Bs. Es kann also nicht
über die Bs komplett rübergehen und auch noch As und Cs enthalten.
Das geht nicht. Was sein kann, fünf Fälle,
das V, eigentlich das VW X, aber damit auch das VX,
das ist entweder in den As drin, komplett,
oder es ist komplett in den Bs drin,
oder es ist komplett in den Cs drin,
oder es ist eben hier an so einer Grenze von As zu Bs oder von Bs zu Cs.
So was klar. Im Grunde genommen,
wie bei dem A auch NBORN auch,
wo man gesagt hat, UV-Kleider gleich N,
dann ist das eben in den A-Hochends vorne drin.
Und hier kann ich jetzt aber vorne das Prefix noch
beliebig lang machen
Und trotz der vielen Fallunterscheidung ist es eben meistens so,
dass man jetzt irgendwelche Fälle analog behandeln kann.
Man sieht schon irgendwie die drei Fälle hier in A plus,
B plus, C plus, die werden wahrscheinlich ähnlich gehen.
Gehen sie auch. Wenn ich mir einen dieser Fälle nehme und
ich pumpe an dem V und dem X. Wenn ich mir beispielsweise den Fall hier nehme,
VX ist nur in den As drin und besteht eben wegen dieser zweiten Bedingung hier auch mindestens aus einem A. Wenn ich da jetzt dran pumpe,
wenn ich mir also das Wort UV-Quadrat WX Quadrat Y angucke,
da habe ich irgendwie plötzlich mir As,
als ich Bs und Cs habe,
kommen ja welche dazu
Also, wenn ich das mache für die ersten drei Fälle,
dann führt die Betrachtung dieses Wortes bereits zum Widerspruch,
weil ich dann eben entweder mehr As habe,
als ich Bs und Cs habe oder mir Bs habe,
als ich As und Cs habe oder mir Cs habe,
als ich As und Bs habe,
was dann eben nicht mehr in Älteren ist.
Und für die anderen beiden Fälle, dass das eben entweder
den As und Bs drin ist oder in den Bs und Cs,
kann man nochmal eine Fallunterscheidung machen.
Entweder enthält eins davon, V oder X oder auch beide,
sowohl As als auch Bs.
Also es ist so an der Grenze,
dass es irgendwie das Wort A,
B ist
Dann kann ich dadurch, dass ich pumpe, kriege ich ein Wort,
das nicht mal mehr in den Arsch stellen, wir stellen C-Stern drin ist.
Weil wenn ich A, B da zweimal hinschreibe,
dann habe ich ja sowas wie Carfiela As, dann kommt ein B,
dann kommt nochmal ein A und dann kommt wieder die Bs.
Das kann also nicht sein. Das ist dann
sofort nicht mehr in L. Und wenn man sowas hat,
wie das V in den As drin ist und X in den Bs,
dann kann ich da trotzdem dran pumpen, habe aber keinen Widerspruch,
weil die Anzahl der C ist jetzt geringer als die Anzahl der As und der Bs.
Aber das wäre der Grund hier, der Letzte,
warum dieser Ansatz bei A hoch NB hoch N
nicht funktioniert
Und auch in Biorien ist ja auch kontextfrei, da soll das ja nicht funktionieren.
Aber wenn ihr das Ganze versucht durchzuhühnern mit A auch NBON,
dann klappt das bis zu der Stelle genauso.
Und an der Stelle scheitert das. Weil man an
der Stelle dann sagen würde, ach so,
wenn ein V jetzt A hoch J ist und X ist B hoch J,
dann habe ich ja eine Zerlegung, an der ich beliebig pumpen kann.
Und ich habe trotzdem immer gleich viele ASVBs. Aber hier in
der Sprache soll ich explizit gleich viele As wie Bs wie Cs haben.
Das heißt, wenn ich hier jetzt dran pumpe,
dann habe ich mehr As und Bs, als ich Cs habe.
Und das ist eben verboten. Ja,
habe ich einen Widerspruch und bin fertig
Fragen. Nochmal um die Unterschiede zum ersten Pumping-Lemmer klarzumachen.
Das VWX wandert über das Wort.
Das ist der Grund für die vielen Fallunterscheidungen
Und oft kann man aber sowas machen wie,
das ist in einem Block,
also wenn man jetzt bei diesem A auch in Biochenziehoch in,
da kann man zum Beispiel sagen,
die As sind der erste Block,
die Bs sind der zweite Block,
die Cs sind der dritte Block,
dann ist das VWX eben entweder in einem dieser drei Blöcke oder an der Grenze Zweierblöcke.
Darüber kann man dann irgendwie ganz gut argumentieren und dann kann man
halt bei sehr vielen Sachen eben trotz der vielen Fälle,
die es zu unterscheiden gibt, so die Fallunterscheide machen,
dass man sagt, naja, ganz viele Fälle sind halt analog.
Also in dem Beispiel eben die Fälle,
dass das in A plus ist,
in B plus oder in C plus, die waren alle analog.
Das ist quasi ein Fall und die Fälle,
dass es in A plus B plus ist oder in B
plus C plus,
das ist auch gleich
Ja, und das nochmal als Anmerkung, wie beim ersten Pumpinglämmer,
ihr könnt auch hier V hoch 0, X hoch 0 betrachten.
Also das I darf auch zu null gewählt werden,
was eben dazu führt, dass das V und das X wegfällt.
Und in einigen Fällen braucht man das auch. Also wenn
ihr zum Beispiel die Sprache habt, A hoch N,
B hoch N und jetzt C hoch M mit der Eigenschaft,
das M größer sein soll als N,
dann hilft dir das Pumpen an den Cs nicht,
aber den kann man eventuell wegnehmen und hat dann seinen Widerspruch.
So, noch, also da haben wir sie jetzt benutzt,
wo die Trumpsky Normalform auch hilfreich ist, ist,
wenn man das Wortproblem für kontextfreie Sprachen lösen will.
Das ist das Problem, gegebene kontextfreie Grammatik und ein Wort wird das Wort von der Grammatik generiert.
Und bei Automaten ist sowas immer relativ einfacher,
so insbesondere bei DFAs, wenn ich das Wortproblem bei DFAs lösen will,
gegeben der DFA und das Wort akzeptierte das ja oder nein,
lass ich ihn einfach arbeiten auf dem Wort und dann,
wenn ich in einen Endzustand komme, dann weiß ich halt,
ja, der hat das akzeptiert.
Hier ist das ja schwieriger,
weil wenn ihr irgendwie das Wort habt und die Grammatik,
ihr wisst ja gar nicht unter Umständen,
welche Regeln ihr benutzen wollt,
um irgendwie zu diesem Wort
zu kommen
Das Wortproblem ist also sehr viel schwieriger zu lösen.
Geht aber auch, geht auch sehr elegant. Kommen wir,
wenn ich Zeit finde, nächstes oder übernächstes Mal baue ich das nochmal ein.
Für heute erstmal Zusammenfassung, Typ 3 und Typ 2 Grammatiken haben wir uns angeguckt.
Typ 3 Grammatiken, dass wir diese mit Rechtslinear,
das ist Äquivalent zu DFAs, Typ 2 Grammatiken,
das sind die kontextfreien, das ist Äquivalenz PDAs.
Da wir gut, wenn ihr wisst,
wie ihr das einzusortieren habt, dass ihr eben wisst,
diese Art von Grammatik passt zu dem Automaten,
die Art von Grammatik passt,
zu dem anderen Automaten,
dann haben wir uns noch Abschlusseigenschaften angeguckt
Vereinigung, Komplexprodukt und Sternbildung ging und insbesondere Durchschnitt und Komplimentbildung
ging nicht, obwohl das ja bei DFAs geht.
Dann haben wir noch die Chomsky-Nomalform hergestellt,
inklusive in diesem ersten und zweiten Schritt,
die man eben auch alleine machen kann und die dann eben trotzdem sinnvoll sind,
wovon eben den zweiten jetzt in den Präsenzaufgaben machen sollt.
Und wir haben eben noch das zweite Pumpinglamer kennengelernt und da wieder gesehen,
obwohl wir jetzt mächtiger geworden sind als bei regulären Sprachen,
gibt es weiterhin Sprachen,
die wir so nicht generieren oder akzeptieren können
Nächstes Mal, jetzt ist nämlich sozusagen schon Halbzeit,
also zumindest für den ersten Teil ist Halbzeit.
Wir verlassen jetzt so ein bisschen dieses Gebiet mit Automaten und Grammatiken,
jetzt schon leider, und machen nächstes Mal Touring-Maschinen,
was, ist auch wieder ein Automatenmodell,
aber da geht es jetzt gar nicht mehr so sehr um das Automaten-artige dabei,
sondern das ist ein Modell,
mit dem man Algorithmen modellieren kann und sich eben über die Berechenbarkeit von Dingen Gedanken machen kann.
Also welche Probleme kann ich mit dem Computer lösen,
welche nicht
Und nächstes Mal werden wir eben dieses Maschinenmodell einführen,
illustrieren, warum das tatsächlich genauso mächtig ist wie irgendwie,
keine Ahnung, C oder Java.
Und dann diese abstrakte Denkweise benutzen,
um eben zu zeigen, dass es gewisse Probleme gibt,
die gar nicht vom Computer lösbar sind.
So, Gruschel, Gruschel, Gruschel. Ja,
ich bin eigentlich auch fertig. Gut, dann bis
nächsten Montag. Denkt dran, euch die Skripte abzuholen.
Also wir bringen die in die Übungsgruppen, aber denkt dran,
dass ihr irgendwie da seid und die mitnehmt.