Come capire se una lingua è riconoscibile, riconoscibile o decidibile?


8

Se hai una lingua L, senza fare alcuna prova, c'è un modo per capire se è riconoscibile o riconoscibile o decidibile?

Fondamentalmente tutti i suggerimenti o trucchi che possono essere utilizzati per dire. O forse i modelli comuni da cercare per dire che tipo è?


"senza fare alcuna prova", posso provarti un po '. (:
Ran G.

1
In matematica un "trucco" è di solito chiamato "teorema", e in alcune occasioni un "lemma".
Andrej Bauer,

Alcuni schemi comuni sono quelli affrontati dal teorema di Rice (dimostrando un insieme indecidibile) e dal teorema di Rice-Shapiro (dimostrando un insieme irriconoscibile). Questi sono particolarmente utili per lo schema "l'insieme delle TM (codificate)M tale che, correndo Mosserviamo questo comportamento "
chi

Risposte:


6

L è riconoscibile

Una lingua L è riconoscibile se e solo se esiste un verificatore per L, dove un verificatore è una macchina di Turing che si ferma su tutti gli input e per tutti wΣ*, wLcΣ*.V accetta w,c. Comunemente,c è pensato come un "certificato" o "prova" che w è dentro L e il verificatore V controlla se c è una prova valida di w essendo in L. (Nota che questa definizione equivale alla definizione del riconoscitore perché possiamo costruire un riconoscitore per una lingua da un verificatore per quella lingua). Ora per determinare se una lingua è presente in RE, possiamo porre la seguente domanda:

Dato una stringa wL, Si potrebbe dimostrare chewL?

Ad esempio, considera HUNLT={M,w | M è una TM che si ferma w}. HUNLT è riconoscibile perché per dimostrarlo M si ferma w, Posso solo dirti il ​​numero di passaggi che dovresti eseguire M per e se M si ferma dopo tanti passaggi, ne saresti convinto M,wHUNLT.

L è riconoscibile

Allo stesso modo, una lingua L è riconoscibile se e solo se il suo complemento è riconoscibile, o in altre parole se esiste un verificatore per L¯. Quindi, per vedere se una lingua è in co-RE, possiamo chiedere:

Dato una stringa wL, Si potrebbe dimostrare chewL?

Riprendendo l'esempio di HUNLT, possiamo usare questa intuizione per dimostrarlo HUNLTnon è riconoscibile. Questo perché se ti dicessi che qualche macchinaM non si ferma sull'input w, non c'è proprio niente che io possa dirti per convincerti di questo fatto. Potrei correreM su w ma anche se stiamo guardando M correre e non l'ho ancora visto fermarsi, non sappiamo che non andrà a fermarsi in futuro.

L è decidibile

Finalmente una lingua L è decidibile se entrambi L e L¯sono riconoscibili. Quindi, se la risposta ad entrambe le due domande precedenti è sì, allora la lingua è decidibile.

Ad esempio, considera L={un'nBn | nN}. Dato una stringawL, posso dimostrarti questo wL? Certo, potrei contare il numero diun'se il numero di Bse mostrano che sono uguali, quindi Lè riconoscibile. Che dire sewL? Potrei provare che una stringa non è presenteL mostrando che non è né del modulo un'nBm o che c'è una discrepanza nel numero di un's e BS. Così,Lè riconoscibile. Poiché è sia riconoscibile che riconoscibile,L è anche decidibile.

Riferimento: sono un TA per un corso introduttivo di teoria della computabilità / complessità presso la mia università e il mio professore ha realizzato questa guida animata davvero utile per ragionare su lingue regolari, decidibili e riconoscibili.


Grazie per quel link! e grazie al tuo prof per averlo fatto! è stato grandioso
annullare il

2

Idee principali

Essere riconoscibili significa che puoi costruire un processo automatico (torneremo su quello in seguito) che accetta una parola come parametro tale

  • Se il processo automatico termina, restituisce SÌ o NO.
  • Questo processo automatico non deve terminare su ogni input, ma deve terminare se la parola di input è nella lingua.

Essere riconoscibili significa la lingua wΣ*,wL (o, in inglese, l'insieme di tutte le parole che non sono presenti L, cioè complementare) è riconoscibile.

Essere decidibili significa che puoi costruire un processo automatico che accetta una parola come input, tale che

  • Il processo automatico termina sempre
  • Risponde SÌ o NO. Se risponde SÌ, la parola è nella lingua, se risponde NO, la parola non è nella lingua.

Un risultato importante è quello L è decidibile se e solo se L è riconoscibile e riconoscibile.


L'idea per dimostrare questo risultato è che è possibile creare un processo automatico dai processi che la riconoscibilità e la co-riconoscibilità ti danno, alternando i passaggi di entrambi i processi, fino a quando uno di questi ti dà la risposta SÌ. Uno di questi deve farlo, poiché ogni parola è o non è nella lingua)


Processi automatici

Senza essere troppo formali, sono stati progettati molti tipi di macchine, e sostanzialmente tutte sono state collegate a tipi di lingue (tali tipi dipendono dagli strumenti necessari per definire tali lingue. Per ulteriori informazioni, Gerarchia di Chomsky può aiutare).

Il solito significato di processo automatico, per quanto riguarda la decidibilità, è una macchina di Turing. È possibile definire una macchina di Turing in modo tale che possa:

  • Ricevi valori dall'input
  • Memorizza i valori
  • Leggi i valori memorizzati
  • Calcola le operazioni matematiche di base sui valori
  • Prova le proprietà matematiche di base su tali valori e agisci di conseguenza, eventualmente eseguendo il loop.

Fondamentalmente, una Turing Machine può fare tutto ciò che puoi definire in un programma, tranne che è un oggetto matematico, con memoria e tempo infiniti da dedicare a un calcolo. Non sempre termina.

Un'altra proprietà importante di Turing Machines, è che puoi descrivere una macchina Turing come una sola parola (questa è la codifica), e esiste una macchina Turing che, data come input la codifica di una macchina Me una parola w, può simulare il calcolo di M sull'ingresso w. Questo sarà importante tra poco.


Ricordiamo solo che le lingue normali - che sono (quasi) il tipo più semplice di linguaggio a cui puoi pensare da un punto di vista matematico - hanno la proprietà peculiare di essere chiuse sotto complemento. Ciò significa sostanzialmente che su tali lingue le nozioni di riconoscibilità e decidibilità sono equivalenti. Questo non regge quando sali nella Gerarchia di Chomsky.


Esempio di una lingua indecidibile

Studieremo il problema di Halting . La domanda è: possiamo costruire una Turing Machine che, data la codifica di un'altra Turing MachineM e una parola w, decide seM termina con l'input w ?

Ovviamente, questo è riconoscibile , poiché non ci resta che simulareM su wfino a quando non termina, e quando lo fa, dire SÌ. Tuttavia, seMnon termina mai, non diremo NO, quindi riconosciamo questa lingua, ma non la decidiamo. È stato dimostrato che questa lingua non può essere decisa da una macchina di Turing. Ciò comporta un normale schema matematico: un argomento diagonale, che non definirei intuitivo. Puoi controllare questo schizzo di prova per abituarti.

Per riassumere

Non sarai in grado, in una lingua, di dichiarare se è decidibile o no. Non esiste alcun algoritmo in grado di farlo, e dimostrare che una lingua non è decidibile richiede un po 'di pensiero e può richiedere alcune conoscenze su Turing Machines, argomenti diagonali, ecc ...

Tuttavia, ecco il mio modo personale di gestire questa domanda. Di solito, quando studio una lingua, presumo che sia decidibile, a meno che non mostri una forma di riferimento al modo in cui Turing Machine funziona. In tal caso, inizio a diffidare e provo a definire un algoritmo che decide la lingua. Se questo non sembra facile, a volte aiuta a dividere il lavoro in algoritmi di riconoscimento e di riconoscimento congiunto. Se ancora non riesco a farlo, proverei a stabilire una connessione tra questa lingua e un'altra indecidibile, come "Se riesco a decidere quella lingua, posso decidere il problema dell'arresto". Questa è una riduzione di Turing a un problema indecidibile, quindi il primo problema non può essere decidibile. Se tutto ciò fallisce, posso provare a usare argomenti diagonali, ma questo può essere un po 'complicato.


1

Un trucco è che se la lingua è finita, allora sai per certo che è decidibile - dato che puoi "hardcodificare" una macchina per accettare qualsiasi cosa in quella lingua. Tuttavia trovo che il modo più semplice sia semplicemente ridurre da un'altra lingua


Lo stesso vale per le lingue co-finite.
Raffaello

Inoltre, una lingua con uno spazio di soluzione finito dato il suo input sarà decidibile poiché è possibile eseguire la ricerca della forza bruta.
jmite,

1

Come ho già detto nel mio commento sopra, trovo utile pensare allo spazio di soluzione del problema.

Pensa a qualcosa del genere SUNT. Sappiamo che è decidibile, dal momento che per testarlo c'è un numero finito di soluzioni che dobbiamo provare. Se esiste una serie finita di condizioni da verificare, in cui una di queste garantisce un sì e nessuna di esse garantisce un no, il problema è decidibile, poiché controlliamo solo le condizioni in successione. Si noti che questo insieme di condizioni potrebbe essere molto ampio (come nel caso di problemi NP-completi).

Consideriamo ora quando lo spazio della soluzione è numerabilmente infinito e possiamo generare ogni possibile soluzione in sequenza e testare ogni soluzione è decidibile. In questo caso sappiamo che il problema è riconoscibile. Ad esempio, un problema che chiede "c'è un numero naturale tale che ..." è riconoscibile, perché possiamo iniziare da 0 e continuare a provare ogni numero in sequenza. Se esiste una soluzione, siamo sicuri di trovarla, ma non c'è necessariamente un limite al tempo necessario per trovarla. Inoltre, questo algoritmo non si fermerebbe mai se non esistesse tale numero intero, quindi non dimostra che un problema sia decidibile.

Puoi applicare la stessa tecnica all'insieme di tutte le stringhe, tutti i numeri interi, tutti i grafici o qualsiasi struttura finita che possiamo enumerare. Questo non funzionerebbe per trovare un numero reale o un insieme (forse infinito) di stringhe.

Si noti tuttavia che alcuni problemi potrebbero avere spazi di soluzione infinitamente numerabili ed essere ancora decidibili.


"Se lo spazio della soluzione è numerabilmente infinito, allora sappiamo che il problema è riconoscibile." -- Non necessariamente. Innanzitutto, lo spazio della soluzione potrebbe non essere effettivamente enumerabile (Esempio: "Esiste una TM che calcola una funzione totale e quindi [predicato non banale]?"). In secondo luogo, la decisione se l'oggetto considerato sia una soluzione può essere indecidibile (esempio: "Trova una TM che non si ferma su 77.").
Raffaello

Ah, questa è un'idea. Lo sappiamoNP{L| L Deciodun'Ble}, quindi ciò implicherebbe che se possiamo dimostrare che un problema si trova in NP (o P per quella materia), ne consegue semplicemente. Ciò potrebbe aiutare a restringerlo.
Steven,

Inoltre: "Qualsiasi cosa con un" insieme limitato di possibilità "da provare sarà decidibile" - no. L'arresto del problema ha due possibili risposte ma è indecidibile.
Raffaello

@Steven Sì, ma questa è una prova ancora più dura. (L'insieme a cui ti riferisci è in genere indicato con R, l'insieme delle lingue ricorsive (ly decidable).)
Raffaello

Immagino che dovrei chiarire. L'idea è che non puoi forzare bruscamente il problema dell'arresto nel modo in cui puoi, per esempio, 3-SAT. Oppure come, quando esegui qualcosa su un PDA, puoi provare tutti i possibili percorsi anche se non è deterministico. Ma per una TM, non puoi perché potrebbe durare all'infinito, quindi l'insieme di "cose ​​da provare", cioè i possibili percorsi attraverso il programma, non è finito.
jmite,

0

Il trucco per vedere se una lingua è indecidibile è porsi la domanda "posso codificare un calcolo della macchina di Turing usando questa lingua"? O più in generale, "diventa complicato come quello che succede in un calcolo?". Naturalmente a volte questa codifica è difficile e aiuta a conoscere un elenco di problemi indecidibili da ridurre (come il problema di corrispondenza post). Se non trovi tale riduzione, prova a pensare agli algoritmi per decidere la tua lingua. Ad esempio, il linguaggio degli elenchi di numeri interi in ordine crescente non è finito, ma è facile progettare un algoritmo che verifica se un elenco è ordinato in ordine crescente, quindi questo linguaggio è decidibile. E per molte lingue, non sappiamo della loro decidibilità, quindi questa è una domanda difficile.


Questa risposta sta promuovendo un'intuizione sbagliata, vedi qui .
Raffaello

Non sono d'accordo che sia un'intuizione sbagliata. Naturalmente non ho menzionato tutti i problemi, ad esempio il linguaggio può essere presentato in un modo eccessivamente complicato come nel tuo esempio, e quindi bisogna prima semplificarlo, per arrivare alla sua "essenza". Inoltre, non ho menzionato il fatto che esistono linguaggi indecidibili "sopra" l'arresto e "sotto" l'arresto, perché non penso che aiuti l'intuizione a questo livello.
Denis
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.