Wie kann ich bei einer Sprache direkt sagen, ohne auf die Produktionsregeln zu achten, dass diese Sprache nicht regulär ist?
Ich könnte Pumping Lemma gebrauchen, aber einige Leute sagen nur mit Blick auf die Grammatik, dass dies keine reguläre ist. Wie ist es möglich?
Antworten:
Die Haupteigenschaft von DFAs / NFAs ist der Mangel an unbegrenztem Speicher. Wenn Sie sich eine Sprache ansehen und der einzige Algorithmus (der später in einen endlichen Automaten übersetzt werden sollte), den Sie sich vorstellen können, erfordert diese Eigenschaft, dh Sie glauben, dass jeder Algorithmus, der sie erkennt, sich an eine beliebige große Anzahl von Dingen erinnern muss (wie in Ihrem Beispiel) dann ist diese Sprache wahrscheinlich nicht regulär.n
Natürlich sollten Sie immer daran denken, dass mathematische Intuition falsch sein kann, und der einzige Weg, sich Ihrer Intuition sicher zu sein, besteht darin, sie zu beweisen.
EDIT: Ich werde die letzte Frage in den Kommentaren hier wegen Platzmangels beantworten.
Das Problem ist nicht, wie groß die Wörter werden können (normalerweise werden Sie auf unendlich viele reguläre Sprachen stoßen, weil jede endliche Sprache regulär ist, und das ist ziemlich langweilig), sondern wie sehr sich das EDA daran erinnern muss.einmbn m , n
einnbn ein b 's. Dies erfordert unbegrenzten Speicher. Wenn ich mir eine Sprache anschaue und sehe, dass jeder Algorithmus, den ich mir vorstellen kann, unbegrenztes Gedächtnis benötigt, wird meine Intuition, dass die Sprache nicht regelmäßig ist, stärker. Wenn ich in angemessener Zeit keinen "intelligenten" Algorithmus finden kann (der eine konstante Menge an Speicher benötigt) (wie viel Zeit angemessen ist, liegt bei Ihnen), werde ich versuchen zu beweisen, dass die Sprache nicht regelmäßig ist.
Im Beispiel muss man sich nicht an m , n erinnern . Der Algorithmus muss nur sicherstellen, dass sie positiv sind und dass das Wort richtig geordnet ist. Dies ist eine endliche Liste, und jedes der Elemente in der Liste benötigt eine konstante Speichermenge. Vergleichen Sie dies mit a n b n , für das ein einfacher Alogrithmus erforderlich ist, um sich daran zu erinnern, dass die Anzahl von a gleich der Anzahl von b ist
Hoffe das macht es etwas klarer.
quelle
Genau. Nachdem Sie das Pumping-Lemma oder eine der anderen Techniken einige Male (von Dutzenden) verwendet haben, werden Sie die Muster in Sprachen sehen, die verhindern, dass sie regelmäßig sind. ist eine sehr grundlegende, die Sie wahrscheinlich bereits gemeistert haben. Das ist also auch eine Frage der Erfahrung, nicht nur der Intuition.einn… B.n
Ein guter Weg, um Ihre Intuition zu testen, ist das Betrachten dieser Sprachen:
Welche sind kontextfrei?
quelle
Sie können tatsächlich entscheiden, ob eine Sprache regelmäßig ist, indem Sie ziemlich einfache Berechnungen durchführen, anstatt einen vollständigen Beweis zu erbringen. Sie müssen lediglich ein sehr leistungsfähiges Kriterium anwenden: Eine Sprache ist genau dann regulär, wenn sie endlich viele Quotienten hat.
quelle