Nach 2 fehlgeschlagenen Versuchen, die von @Hendrik Jan abgelehnt wurden (danke), ist hier ein weiterer, der nicht erfolgreicher ist. @Vor hat ein Beispiel für eine deterministische CF-Sprache gefunden, bei der die gleiche Konstruktion angewendet würde, wenn sie korrekt wäre. Dies ermöglichte es, einen Fehler bei der Verankerung des Strings in der Anwendung des Lemmas zu identifizieren . Das Lemma selbst scheint nicht schuld zu sein. Dies ist eindeutig eine zu vereinfachende Konstruktion. Weitere Details finden Sie in den Kommentaren.y
Die Sprache ist nicht kontextfrei.L = { u x v y∣ u , v , x , y∈ { 0 , 1 }∗{ ϵ } , ∣ u ∣ = ∣ v ∣ , u ≠ v , ∣ x ∣ = ∣ y ∣ , x ≠ y }
Es ist hilfreich, die Charakterisierung berücksichtigen u | = | v | , d ( u , v ) ≥ 2 } wobei d die Hamming-Distanz ist, vorgeschlagen von @sdcvvc. Woran man denken muss, sind 2 ausgewählte Positionen in jeder halben Saite, so dass sich die entsprechenden Symbole unterscheiden.L = { u v : | u | = | v | , d( u , v ) ≥ 2 }
Dann betrachten Sie eine Zeichenkette so, dass i < j und i + j gerade sind. Es ist eindeutig in der Sprache L, indem u und x irgendwo zwischen den beiden Einsen geschnitten werden. Wir wollen diese Zeichenkette im ersten Teil zwischen den Einsen pumpen, damit sie 10 j 10 j wird, was nicht in der Sprache sein soll.10ich10ji < ji + jux10j10j
Wir versuchen zunächst, Ogdens Lemma zu verwenden , das dem Pump-Lemma ähnelt, aber auf oder mehr auffällige Symbole angewendet wird , die in der Zeichenfolge markiert sind, wobei p die Pumplänge für markierte Symbole ist (aber das Lemma kann mehr pumpen, weil es auch pumpen kann nicht markierte Symbole). Die Pumplänge p hängt nur von der Sprache ab. Dieser Versuch wird fehlschlagen, aber der Fehler wird ein Hinweis sein.ppp
Wir können dann wählen und Symbole in der ersten Folge von i 0 markieren . Wir wissen, dass keine der beiden Einsen in der Pumpe sein wird, weil sie einmal herauspumpen kann (Exponent 0), anstatt hinein zu pumpen. Und das Herauspumpen der Einsen würde uns aus der Sprache bringen.i = pich
Wir könnten jedoch auf beiden Seiten der zweiten 1 genauso schnell oder sogar schneller auf der rechten Seite pumpen, so dass die zweite 1 niemals durch die Mitte der Saite gelangen würde. Auch Ogdens Lemma legt keine Obergrenze für die Größe des zu pumpenden Materials fest, so dass es nicht möglich ist, das Pumpen so zu organisieren, dass die genaueste 1 genau in der Mitte der Saite liegt.
Wir verwenden eine modifizierte Version des Lemmas, hier Nash's Lemma genannt, die diese Schwierigkeiten bewältigen kann.
Wir brauchen zuerst eine Definition (es hat wahrscheinlich einen anderen Namen in der Literatur, aber ich weiß nicht welche - Hilfe ist willkommen). Eine Zeichenkette wird als Löschen einer Zeichenkette v bezeichnet, wenn sie aus v durch Löschen von Symbolen in v erhalten wird . Wir werden u ≺ v beachten .uvvvu ≺ v
Nashs Lemma:
Wenn eine kontextfreie Sprache ist, gibt es zwei Zahlen p > 0 und q > 0, so dass für jede Zeichenfolge w mit einer Länge von mindestens p in L und für jede Art, p oder mehr der Zeichenfolgen zu „markieren“, gilt Positionen in w , w können wie folgt geschrieben werden: w = u x y z v mit der Zeichenfolge u , x , y , z , v , so dassLp > 0q> 0wpLpwww = u x yzvuxyzv
- hat mindestens eine markierte Position,x z
- hat höchstens p markierte Positionen undx yzp
- es gibt 3 Strings x , y , z derart , daß
x^y^z^
- , y ≺y, z ≺z,x^≺ xy^≺ yz^≺ z
- , 1 ≤ | y | ≤ q , und1 ≤ ∣ x^z^∣ ≤ q1 ≤ ∣ y^∣ ≤ q
- ist in L für jedes i ≥ 0 und für jedes j ≥ 0 .u xjx^ichy^z^ichzjvLi ≥ 0j ≥ 0
Beweis : Ähnlich wie der Beweis von Ogdens Lemma, jedoch werden die Teilbäume, die den Zeichenfolgen und x z entsprechen, so beschnitten, dass sie keinen Pfad mit dem doppelten gleichen nicht-terminalen Wert enthalten (mit Ausnahme der Wurzeln dieser beiden Teilbäume). Dies notwendigerweise begrenzt die Größe der erzeugten Zeichenfolge x z und y durch eine Konstante q . Die Zeichenfolgen x j und z j für j ≥ 0 , die einer unbeschnittenen Version des Baums entsprechen, werden hauptsächlich mit j = 1 verwendetyx zx^z^y^qxjzjj≥0j=1 Vereinfachung der Rechnungslegung bei Anwendung des Lemmas.
Wir ändern den obigen Beweis Versuch die Markierung ganz links Symbole 0, aber sie werden von gefolgt 2 q Symbole 0 , um sicherzustellen , dass wir im linken Teil des Strings, zwischen den beiden 1 der Pumpe. Dass insgesamt machen i = p + 2 q 0'en zwischen der 1'en (tatsächlich i = p + q wäre ausreichend, da die am weitesten rechts liegenden 1 nicht sein kann , z , die einfach zu entfernen erlauben würden).p2qi=p+2qi=p+qz^
Was bleibt, ist gewählt zu haben, damit wir genau die richtige Anzahl von Nullen pumpen können, so dass die beiden Sequenzen gleich sind. Bisher besteht die einzige Einschränkung für j darin, größer als i zu sein . Und wir wissen auch, dass die Anzahl der Nullen, die bei jedem Pumpen gepumpt werden, zwischen 1 und q liegt. Also sei h Produkt der ersten q ganzen Zahlen. Wir wählen j = i + h .jjihqj=i+h
Da das Pumpinkrement - was auch immer es ist - in [ 1 , q ] ist , teilt es h . Sei k der Quotient. Wenn wir genau k- mal pumpen , erhalten wir einen String 10 j 10 j, der nicht in der Sprache ist. Daher ist L nicht kontextfrei.d[1,q]hkk10j10j
.
Ich denke, ich werde niemals
eine Schnur sehen, die so schön ist wie ein Baum.
Wenn es keine Syntaxanalyse gibt, ist
die Zeichenfolge nichts anderes als eine Farce