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?
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:
dove è un'espressione di parole e è un sistema di disuguaglianze lineari rispetto alle variabili di lunghezza, con le seguenti definizioni:S
Ciascuno di è un'espressione di parole. (Rappresentano variabili che possono contenere qualsiasi parola in .)Σ ∗
Ognuno di è un'espressione di parole. (Implicitamente, , quindi rappresentano un singolo simbolo nell'alfabeto sottostante.)Σ = { a , b , c , ... } a , b , c , ...
Ognuno di è un'espressione di parole, se è una variabile di lunghezza.η
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.)
Ciascuno di è una variabile di lunghezza. (Questi rappresentano la lunghezza di una parola corrispondente.)
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.