Algoritmo per verificare se una lingua è senza contesto


18

Esiste un algoritmo / procedura sistematica per testare se una lingua è senza contesto?

In altre parole, dato un linguaggio specificato in forma algebrica (pensa a qualcosa come ), verifica se il linguaggio è privo di contesto o meno . Immagina di scrivere un servizio web per aiutare gli studenti a fare tutti i compiti; si specifica la lingua e il servizio Web genera "senza contesto" o "senza contesto". Esiste un buon approccio per automatizzare questo?L={un'nBnun'n:nN}

Esistono ovviamente tecniche per la prova manuale, come il lemma di pompaggio, il lemma di Ogden, il lemma di Parikh, il lemma di interscambio e altro qui . Tuttavia, ciascuno di essi richiede una visione manuale a un certo punto, quindi non è chiaro come trasformarne uno in qualcosa di algoritmico.

Vedo che Kaveh ha scritto altrove che l'insieme di linguaggi senza contesto non è enumerabile in modo ricorsivo, quindi sembra che non ci sia speranza che nessun algoritmo funzioni su tutte le lingue possibili. Pertanto, suppongo che il servizio web dovrebbe essere in grado di produrre "senza contesto", "non senza contesto" o "non posso dirlo". Esiste un algoritmo che sarebbe spesso in grado di fornire una risposta diversa da "Non so dirlo", su molte delle lingue che è probabile che si vedano nei libri di testo? Come costruiresti un tale servizio web?


Per porre bene questa domanda, dobbiamo decidere come l'utente dovrà specificare la lingua. Sono aperto ai suggerimenti, ma sto pensando a qualcosa del genere:

L={E:S}

dove è un'espressione di parole e è un sistema di disuguaglianze lineari rispetto alle variabili di lunghezza, con le seguenti definizioni:SES

  • Ciascuno di è un'espressione di parole. (Rappresentano variabili che possono contenere qualsiasi parola in .)Σ X,y,z,...Σ*

  • Ognuno di è un'espressione di parole. (Implicitamente, , quindi rappresentano un singolo simbolo nell'alfabeto sottostante.)Σ = { a , b , c , ... } a , b , c , ...un',B,c,...Σ={un',B,c,...}un',B,c,...

  • Ognuno di è un'espressione di parole, se è una variabile di lunghezza.ηaη,bη,cη,η

  • La concatenazione di espressioni di parole è un'espressione di parole.

  • Ognuno di è una variabile di lunghezza. (Questi rappresentano variabili che possono contenere qualsiasi numero naturale.)m,n,p,q,

  • Ciascuno di è una variabile di lunghezza. (Questi rappresentano la lunghezza di una parola corrispondente.)|x|,|y|,|z|,

Questo sembra abbastanza ampio da gestire molti dei casi che vediamo negli esercizi da manuale. Naturalmente, puoi sostituire qualsiasi altro metodo testuale per specificare una lingua in forma algebrica, se lo desideri.


Non sarebbe più facile iniziare con la regolarità delle lingue?
Yuval Filmus,

@YuvalFilmus, certo! Ora che me lo dici, è un'ottima idea. Pensi che il problema sia fattibile per le lingue normali? Sarei felice di chiedere un corrispondente sulle lingue normali, se pensi che possa essere prezioso.
DW

2
Sarebbe sicuramente più facile per le lingue normali. A proposito, la non decidibilità generale non si applica necessariamente alle lingue della forma menzionata.
Yuval Filmus,

4
Temo che questo problema sia probabilmente aperto, almeno un caso specifico è: cstheory.stackexchange.com/questions/17976 . Potrebbe esserci un modo per ottenere indecidibilità per il tuo problema più generale, ma non lo vedo.
sdcvvc,

sarebbe utile dare alcune parole di esempio nella lingua. suggerire ulteriori ricerche / collaborazioni in Computer Science Chat
vzn

Risposte:


0

Secondo il teorema di Rice , vedere se il linguaggio accettato da una macchina di Turing ha proprietà non banali (qui: essere libero dal contesto) non è decidibile. Quindi dovresti limitare il potere dei tuoi macchinari (o descrizione) di riconoscimento per renderlo non Turing completo nella speranza di una risposta.

Per alcune descrizioni linguistiche la risposta è banale: se è per espressioni regolari, è regolare, quindi senza contesto. Se si tratta di grammatiche libere dal contesto, idem.


Sono d'accordo con tutti i tuoi commenti, ma non sono sicuro di vedere come questo risponde alla domanda o di usare questo come rispondere alla domanda. Sono a conoscenza di tutti questi fatti. Descrivo un modo particolare di specificare le lingue. Stai suggerendo che è Turing completo? Non sembra essere Turing completo per me. Un sistema di disuguaglianze lineari non è completo di Turing, quindi sospetto / speculo di averlo già limitato abbastanza da non essere completo di Turing. Inoltre, per il metodo che ho dato per specificare le lingue, non è banale, in quanto non è un'espressione regolare e non una grammatica senza contesto.
DW

-2

Qualsiasi lingua è accettata da un Push Down Automata, è un CFL. Ecco una suddivisione dettagliata per determinare se una lingua è CFL o meno. controlla se la lingua è CFL o no


Questo non è un algoritmo.
xskxzr,

Non vedo come questo risponda alla domanda. Sono consapevole che una lingua è senza contesto se è accettata da un PDA, ma ciò non sembra aiutare a trovare un algoritmo del modulo richiesto nella domanda. L'articolo geeksforgeeks a cui ti colleghi non fornisce un algoritmo completo per questo problema; elenca solo casi speciali non esaustivi che sono più facili (e non è un ottimo riferimento, poiché alcune delle sue affermazioni sono un po 'imprecise / dubbie).
DW

AFAIK, non esiste ancora un algoritmo ben strutturato per quello. (correggimi se sbaglio). Il meglio che possiamo fare è verificare la presenza di casi.
SiluPanda,

-3

Prova il software JFLAP se vuoi solo controllare un CFG. Puoi anche chiedere agli sviluppatori JFLAP di darti il ​​codice o l'algoritmo per il software. puoi ottenere JFLAP da qui http://www.jflap.org/jflaptmp/ è gratuito ma richiede JDK o JRE o qualcosa del genere. O forse puoi provare altri software simili e i loro sviluppatori.


1
Non sono sicuro che questo risponda alla domanda. JFLAP non ha alcuna funzione che accetta un linguaggio in notazione matematica e ti dice se è privo di contesto o meno.
Yuval Filmus,

TEOREMA 2.20 nel libro Sipser Una lingua è libera dal contesto se e solo se un automa pushdown lo riconosce. E puoi costruire PDA in JFLAP da una grammatica
Haseeb Hassan Asif

Forse hai ragione sulla notazione matematica che non può essere inserita in JFLAP ma puoi comunque mettere tutte le regole di una grammatica e può convertirla in un PDA o dire che non è un CFG o qualche altro errore
Haseeb Hassan Asif

{un'nBncn:nN}

1
Immagino che JFLAP possa convertire una grammatica senza contesto in un PDA equivalente, ma qui non è assolutamente d'aiuto.
Yuval Filmus,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.