Wie kann ws mit | w | = | s | und w ≠ s kontextfrei sein, während w # s nicht ist?


9

Warum macht (wenn ja) der Separator # einen Unterschied zwischen den beiden Sprachen?

Nehmen wir mal an:

L={ws:|w|=|s|w,s{0,1},ws}

L#={w#s:|w|=|s|w,s{0,1},ws}

Hier ist ein Beweis und ein Grammatik, die L als CFL

Und unten füge ich einen Beweis für L#CFL :

Macht das # -Zeichen wirklich einen Unterschied? wenn ja, warum ist das so? und wenn nicht, welcher der Beweise ist falsch und wo?

Beweis, dass L#CFL :

Es sei angenommen , haft Widerspruch , daß LCFL . Sei p>0 die Pumpkonstante für L die durch das Pump-Lemma für kontextfreie Sprachen garantiert wird. Wir betrachten das Wort s=0m1p#0p1m wobei m=p!+p so sL . Da |s|>p , nach dem Pump-Lemma existiert eine Darstellung s=uvxyz , so dass |vy|>0 ,|vxy|p unduvjxyjzL für jedesj0 .

Wir bekommen einen Widerspruch durch Fälle:

  • Wenn v oder y# enthalten : Dann erhalten wir für i=0 , dass uxz kein # enthält , also ist uxzL im Widerspruch.
  • Wenn sowohl v als auch y# überlassen bleiben : Dann erhalten wir für i=0 , dass uxz die Form w#x , wobei |w|<|x|, So uxzL .

  • Wenn sowohl v als auch y richtig zu # : Ähnlich wie im letzten Fall.

  • Wenn v links von # bleibt, ist y rechts davon und |v|<|y|: Dann erhalten wir für i=0 , dass uxz die Form w#x , wobei |w|>|x|, So uxzL .

  • Wenn v links von # bleibt, ist y rechts davon und |v|>|y|: Ähnlich wie im letzten Fall.

  • Wenn v links von # bleibt, ist y rechts davon und |v|=|y|: Dies ist der interessanteste Fall. Da |vxy|p , v muss im 1p Teil von s und y im 0p Teil enthalten sein. Es gilt also, dass v=1k und y=0k für dasselbe 1kp (tatsächlich muss es sein, dassk<p/2 ). Für jedesj0 gilt, dass uvj+1xyj+1z=0m1p+j·k#0p+j·k1m , wenn also passiert, dassm=p+j·k , dann giltuvj+1xyj+1zLim Widerspruch. Um dies zu erreichen, müssen wirj=(mp)/k, was nur gültig ist, wennmpdurchkteilbar ist. Denken Sie daran, dass wirm=p+p!, alsomp=p!undp!istwie gewünschtdurch1kpteilbar.

Antworten:


7

Ihr Beweis ist richtig und ich habe mich geirrt. Ich brauchte eine Weile, um herauszufinden, wo meine Verwirrung war, aber mit Yuvals Hilfe glaube ich, dass ich es verstanden habe.

Betrachten wir die drei Sprachen

L=={xy|x|=|y|,xy},L#={x#yxy}, andL=#={x#y|x|=|y|,xy}.

Wie wir hier gesehen haben , ist kontextfrei. Der Trick besteht in der Grammatik darin, Symbole "rechts" zu generieren, diese aber später (oder umgekehrt) "links" zu zählen, um sicherzustellen, dass nicht übereinstimmende Symbole an übereinstimmenden Positionen angezeigt werden. Die Längenbedingung ist trivial, da sie sich auf eine gerade Länge reduziert. Sie können eine NPDA mit einer ähnlichen Idee erstellen, indem Sie den Stapel verwenden, um die Position anzupassen.L=

ist auch kontextfrei. Der Beweis ist noch einfacher: Die nicht übereinstimmenden Symbole erscheinen in der gleichen Entfernung vom Anfang bzw. der Separator. Ungleiche Längen können separat geprüft werden. Der Nichtdeterminismus "wählt" zwischen den beiden Optionen.L#

Nun, wie Sie zeigen, ist nicht kontextfrei. Deshalb brechen die Beweise für die beiden anderen Sprachen zusammen.L=#

  1. Wenn wir in der Grammatik für ein Trennzeichen in der Mitte erzeugen müssen, können wir Symbole nicht von "links" nach "rechts" "neu zuweisen".L=
  2. Anstelle von "akzeptieren, wenn die Längen ungleich sind oder nicht übereinstimmen" müssen wir "akzeptieren, wenn die Längen gleich sind und nicht übereinstimmen". Nichtdeterminismus kann uns beim und nicht helfen !

Es läuft also intuitiv darauf hinaus, dass Bedingungen der Form " " und " | x | = | y | " beide "kontextfrei" sind, in dem Sinne, dass sie mit einem Stapel überprüft werden können, aber keine endliche Kontrolle verwenden. Daher kann ein PDA einen, aber nicht beide ausführen.xy|x|=|y|

Der PDA für "betrügt", da er diese Bedingungen für x und y nicht wirklich überprüft ; es teilt das Wort auf andere Weise auf. Das ist nicht mehr möglich, wenn Sie das Trennzeichen haben.L=xy


Nachtrag: Ich habe mutig behauptet, dass weil CFL gegen inversen Homomorphismus geschlossen ist. Es ist zwar wahr, dass f ( L = # ) = L = mit f der Identität, außer dass # gelöscht wird, aber das ist nicht relevant. f - 1 ( L = ) = L # ; Über L = # kann nichts gesagt werden.L=CFLL=#CFLf(L=#)=L=f#f1(L=)=L#L=#


Nachtrag II: Beachten Sie, dass ist trivial kontextfrei. Daher haben wir mit L L # = L = # ein schönes Beispiel dafür, dass CFL nicht gegen Schnittpunkte geschlossen wird.L={x#y|x|=|y|}LL#=L=#

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.