La differenza tra macchine di Turing deterministiche e non deterministiche sta nella funzione di transizione. Nelle macchine di Turing deterministiche la funzione di transizione è una funzione parziale:δ
δ:Q×B→Q×B×{left,right}
il che significa che dato uno stato e un simbolo di nastro hai uno o nessuno stato, inserisci il simbolo a destra e la direzione per spostarti. Tuttavia, nelle macchine di Turing non deterministiche questo sembra (qui è l'insieme dei sottoinsiemi di un insieme):P
δ:Q×B→P(Q×B×{left,right})
significa che non hai nessuno o più stati, simboli di nastro da scrivere o direzione in cui spostarti. Questo dà alla tua macchina la possibilità di scegliere efficacemente in tale stato e simbolo del nastro tra i diversi "rami" di calcolo possibili.
In pratica, ciò significa che possiamo calcolare output diversi per lo stesso input. Pertanto, il linguaggio di una macchina di Turing non deterministica è l'insieme di parole per le quali troviamo una derivazione nelle transizioni definite. Una corsa specifica potrebbe non trovare tale derivazione ma l'importante è che possa verificarsi. Quindi quando "indovini" stai solo scegliendo uno dei possibili rami del calcolo.
Esempio di utilizzo
L={(M1,M2):there exists at least one word accepted by both TM at the same time}
In questo caso si potrebbe semplicemente "indovinare" una parola ed eseguire e su controllando che se entrambi accettano, accettano allo stesso tempo. L'ipotesi potrebbe funzionare introducendo uno stato con transizioni che scrivono su alcuni nastri / o e che esce leggendo qualsiasi simbolo sulla macchina generale.wM1M2wq01
Ad essere sincero, non ho riscontrato alcun esempio di cattivo uso di questa "ipotesi", ma verificare che ogni volta che questa frase venga usata correttamente, si riduca per verificare che si possano costruire automi con questa struttura che simulano le ipotesi.