Algorithmus zum Testen, ob eine Sprache kontextfrei ist


18

Gibt es einen Algorithmus / ein systematisches Verfahren, um zu testen, ob eine Sprache kontextfrei ist?

Mit anderen Worten, testen Sie bei einer in algebraischer Form angegebenen Sprache (denken Sie an etwas wie ), ob die Sprache kontextfrei ist oder nicht . Stellen Sie sich vor, wir schreiben einen Webdienst, der Schülern bei all ihren Hausaufgaben hilft. Sie geben die Sprache an und der Webdienst gibt "kontextfrei" oder "nicht kontextfrei" aus. Gibt es einen guten Ansatz, um dies zu automatisieren?L={anbnan:nN}

Natürlich gibt es Techniken für den manuellen Beweis, wie das Pump-Lemma, das Ogden-Lemma, das Parikh-Lemma, das Interchange-Lemma und vieles mehr . Sie erfordern jedoch jeweils irgendwann einen manuellen Einblick, sodass nicht klar ist, wie sie in etwas Algorithmisches umgewandelt werden können.

Ich sehe, dass Kaveh an anderer Stelle geschrieben hat, dass die Menge der nicht kontextfreien Sprachen nicht rekursiv aufzählbar ist. Es scheint also keine Hoffnung zu geben, dass ein Algorithmus für alle möglichen Sprachen funktioniert. Ich nehme daher an, dass der Webdienst in der Lage sein muss, "kontextfrei", "nicht kontextfrei" oder "Ich kann nicht sagen" auszugeben. Gibt es einen Algorithmus, der oft eine andere Antwort liefern kann als "Ich kann es nicht sagen", für viele der Sprachen, die man in Lehrbüchern findet? Wie würden Sie einen solchen Webdienst aufbauen?


Um diese Frage richtig zu stellen, müssen wir entscheiden, wie der Benutzer die Sprache spezifizieren soll. Ich bin offen für Vorschläge, aber ich denke über Folgendes nach:

L={E:S}

Dabei ist ein Wortausdruck und ein System linearer Ungleichungen über die Längenvariablen mit den folgenden Definitionen:SES

  • Jedes von ist ein Wortausdruck. (Dies sind Variablen, die ein beliebiges Wort in .)Σ x,y,z,Σ

  • Jeder der ist ein Wortausdruck. (Implizit ist , sodass ein einzelnes Symbol im zugrunde liegenden Alphabet darstellen.)Σ = { a , b , c , } a , b , c , a,b,c,Σ={a,b,c,}a,b,c,

  • Jedes von ist ein Wortausdruck, wenn eine ist.ηaη,bη,cη,η

  • Die Verkettung von Wortausdrücken ist ein Wortausdruck.

  • Jedes von ist eine Längenvariable. (Dies sind Variablen, die jede natürliche Zahl enthalten können.)m,n,p,q,

  • Jedes von ist eine Längenvariable. (Diese stellen die Länge eines entsprechenden Wortes dar.)|x|,|y|,|z|,

Dies scheint breit genug zu sein, um viele der Fälle zu behandeln, die wir in Schulbuchübungen sehen. Natürlich können Sie auch jede andere Textmethode zum Angeben einer Sprache in algebraischer Form verwenden, wenn Sie möchten.


Wäre es nicht einfacher, mit der Regelmäßigkeit der Sprachen zu beginnen?
Yuval Filmus

@YuvalFilmus, sicher würde! Nun, da Sie es erwähnen, ist das eine großartige Idee. Denken Sie, dass das Problem für reguläre Sprachen durchführbar ist? Gerne frage ich einen Korrespondenten nach regulären Sprachen, wenn Sie das für wertvoll halten.
DW

2
Für reguläre Sprachen wäre es sicherlich einfacher. Übrigens gilt die allgemeine Nichtentscheidbarkeit nicht unbedingt für Sprachen der von Ihnen genannten Form.
Yuval Filmus

4
Ich befürchte, dieses Problem ist wahrscheinlich offen, zumindest ist ein konkreter Fall: cstheory.stackexchange.com/questions/17976 . Es könnte einen Weg geben, Unentscheidbarkeit für Ihr allgemeineres Problem zu erlangen, aber ich sehe es nicht.
SDCVVC

Es wäre hilfreich, einige Beispielwörter in der Sprache anzugeben.
Schlagen Sie

Antworten:


0

Nach dem Satz von Rice kann nicht entschieden werden , ob die von einer Turing-Maschine akzeptierte Sprache eine nicht-triviale Eigenschaft hat (hier: kontextfrei sein). Sie müssten also die Leistung Ihrer Erkennungsmaschinerie (oder Beschreibung) einschränken, damit Turing nicht vollständig ist, um auf eine Antwort zu hoffen.

Für einige Sprachbeschreibungen ist die Antwort trivial: Wenn es sich um reguläre Ausdrücke handelt, ist es regulär, also kontextfrei. Wenn es sich um kontextfreie Grammatiken handelt, dito.


Ich bin mit all Ihren Kommentaren einverstanden, aber ich bin nicht sicher, wie dies die Frage beantwortet oder wie dies verwendet wird, um die Frage zu beantworten. Mir sind all diese Fakten bekannt. Ich beschreibe eine bestimmte Art der Sprachangabe. Schlagen Sie vor, dass es Turing-complete ist? Für mich ist es wahrscheinlich nicht vollständig. Ein System linearer Ungleichungen ist nicht Turing-vollständig, daher vermute ich / spekuliere ich, dass ich es bereits genug eingeschränkt habe, um nicht Turing-vollständig zu sein. Auch für die Methode, die ich zur Angabe von Sprachen angegeben habe, ist dies nicht trivial, da es sich nicht um einen regulären Ausdruck und keine kontextfreie Grammatik handelt.
DW

-2

Jede Sprache, die von einem Push-Down-Automaten akzeptiert wird, ist eine CFL. Hier ist eine detaillierte Aufschlüsselung, um festzustellen, ob eine Sprache CFL ist oder nicht. Überprüfen Sie, ob die Sprache CFL ist oder nicht


Dies ist kein Algorithmus.
Xskxzr

Ich verstehe nicht, wie dies die Frage beantwortet. Mir ist bewusst, dass eine Sprache kontextfrei ist, wenn sie von einem PDA akzeptiert wird, aber das scheint nicht hilfreich zu sein, um einen Algorithmus der in der Frage angeforderten Form zu finden. Der geeksforgeeks-Artikel, auf den Sie verlinken, enthält keinen vollständigen Algorithmus für dieses Problem. Es werden nur nicht erschöpfende Sonderfälle aufgeführt, die einfacher sind (und es ist keine gute Referenz, da einige der Aussagen etwas skizzenhaft / zweifelhaft sind).
DW

AFAIK, dafür gibt es noch keinen gut strukturierten Algorithmus. (korrigiere mich wenn ich falsch liege). Das Beste, was wir tun können, ist, nach Fällen zu suchen.
SiluPanda

-3

Probieren Sie die JFLAP-Software aus, wenn Sie nur ein CFG überprüfen möchten. Vielleicht können Sie sogar JFLAP-Entwickler bitten, Ihnen den Code oder den Algorithmus für die Software zu geben. Sie können JFLAP hier herunterladen http://www.jflap.org/jflaptmp/ es ist kostenlos, erfordert jedoch JDK oder JRE oder so. Oder vielleicht können Sie auch andere ähnliche Software und deren Entwickler ausprobieren.


1
Ich bin mir nicht sicher, ob dies die Frage beantwortet. JFLAP bietet keine Funktion, die eine Sprache in mathematischer Notation akzeptiert und angibt, ob sie kontextfrei ist oder nicht.
Yuval Filmus

THEOREM 2.20 im Sipser-Buch Eine Sprache ist nur dann kontextfrei, wenn ein Pushdown-Automat sie erkennt. Und Sie können PDA in JFLAP aus einer Grammatik
erstellen

Sie haben vielleicht Recht mit mathematischer Notation, die nicht in JFLAP geschrieben werden kann, aber Sie können trotzdem alle Regeln einer Grammatik schreiben und diese entweder in einen PDA umwandeln oder sagen, dass es sich nicht um eine CFG oder einen anderen Fehler handelt
Haseeb Hassan Asif,

{anbncn:nN}

1
Ich stelle mir vor, dass JFLAP eine kontextfreie Grammatik in einen äquivalenten PDA konvertieren kann , aber dies ist hier absolut keine Hilfe.
Yuval Filmus
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.