Perché il simbolo vuoto non è considerato parte dell'alfabeto di input di una macchina Turing?


12

Le definizioni delle macchine di Turing sono sempre esplicite sul fatto che il simbolo vuoto non faccia parte dell'alfabeto di input.

Mi chiedo cosa vada storto quando lo faresti diventare parte dell'alfabeto di input, perché effettivamente il simbolo vuoto sembra già essere parte dell'input.

Per spiegare che "sembra" nell'ultima frase, considera quanto segue.

Nella configurazione predefinita, un numero infinito di simboli vuoti appare sulla destra dell'input. Quando la testina del nastro si sposta sul primo simbolo vuoto, il calcolo può semplicemente continuare, poiché non è necessario che sia uno stato di accettazione o rifiuto.

Supponiamo ora che il calcolo scriva successivamente simboli dall'alfabeto di input a destra di quel primo simbolo vuoto, quindi ritorni nella posizione più a sinistra mentre ritorni allo stato iniziale. Sarebbe quindi "ricominciare" con un nastro diverso. In effetti, ora inizia con un input diverso, dove ci sono simboli di input a destra dello spazio vuoto che prima non c'erano. L'input sembra includere efficacemente il simbolo vuoto. L'ulteriore comportamento della macchina ora potrebbe anche essere diverso: dopo aver incontrato di nuovo lo spazio vuoto, ora incontrerà diversi simboli a destra.

Supponendo che questo scenario sia davvero possibile, perché non dovresti considerare il simbolo vuoto parte dell'alfabeto di input e perché non permetteresti di includerlo come parte dell'input "iniziale"?

Forse è solo un modo per definire l'input in modo che non sia sempre infinito?


Quando ero in classe, ho progettato le macchine di Turing che hanno usato il β (il simbolo del bianco locale) nel loro input come separatori di campo.
Giosuè

Risposte:


23

Il motivo principale è che consente alla macchina di rilevare la fine del suo input: è (il carattere precedente) il primo spazio vuoto. Se si consentivano spazi vuoti nell'input, la macchina non potrebbe mai sapere se potrebbe trovare più input scansionando più a destra. Ovviamente, potresti risolverlo avendo un carattere speciale "end of input", ma poi devi insistere sul fatto che ciò non può apparire nell'input, quindi hai spostato il problema a un livello più profondo.

Inoltre rende le condizioni iniziali molto più facili da specificare: l'input è la sezione non vuota del nastro iniziale, che deve essere finita e contigua. E se vuoi che un carattere vuoto faccia parte dell'alfabeto di input, puoi sempre aggiungere un carattere aggiuntivo (chiamalo "spazio" o qualcosa del genere) e fai in modo che la macchina si comporti come vuoi quando lo vede.


2
Ah, certo, senza poter determinare la fine dell'input iniziale, alcuni calcoli sarebbero impossibili. Ma per il resto non c'è nulla di speciale nel simbolo. E immagino che sia questione di economia terminologica usare il simbolo in bianco, dato che ti serve comunque quello nel tuo alfabeto. Penso che sarebbe stato più ovvio per me se inizialmente definito con un simbolo di fine input esplicito e un'osservazione che non era strettamente necessario e spesso escluso.
Confusione,

1
{00}0,{11}1,{10,01}b

2
Visto che la macchina di Turing ha bisogno di regole che governano ciò che fa se legge uno spazio vuoto, e può avere una regola che gli dice di scrivere uno spazio, non significa che lo spazio fa effettivamente parte del suo alfabeto? Non vedo perché l'input potrebbe non contenere spazi. Che ne dici di codificare elementi di input usando i caratteri non vuoti e un singolo spazio vuoto come separatore? Quindi più spazi vuoti consecutivi indicano la fine dell'input.
Rosie F,

3
@YonatanN Certo. È "semplice" ma avere un simbolo vuoto è più semplice.
David Richerby,

3
@RosieF Lo spazio vuoto fa parte dell'alfabeto del nastro; l'alfabeto di input è un sottoinsieme di quello. E, sicuramente, potresti impostare convenzioni su come l'input può contenere spazi in determinate circostanze (come hai fatto tu), ma ciò rende le definizioni più complesse. Definizioni più complesse significano che è più difficile provare cose sulle macchine di Turing. E, dal momento che le macchine Turing sono davvero utilizzate solo per provare cose (se vuoi progettare un vero computer, non sarà una TM) non è un buon compromesso.
David Richerby,

6

È possibile definire il simbolo vuoto per far parte dell'alfabeto. Il problema è che se una macchina di Turing con input b010010b (dove b sta per vuoto ) non legge mai oltre la seconda b, la macchina si comporterà esattamente allo stesso modo su tutti gli input che iniziano con b010010b.

Queste macchine di Turing sono chiamate prefetture di Turing e sono molto utili per dimostrare alcuni teoremi sulla complessità di Kolmogorov.


5

Risposta molto breve: l' alfabeto nastro è l'insieme di simboli che possono apparire sul nastro e include il simbolo vuoto. L' alfabeto di input è l'insieme di simboli che possono apparire nell'input iniziale e non include il simbolo vuoto. L'alfabeto principale di cui la macchina si preoccupa è l'alfabeto nastro: ha ancora bisogno di regole su cosa fare quando vede uno spazio vuoto, per esempio.

Questa distinzione è importante, come altri hanno già detto, in modo che la macchina possa dire dove finisce il suo input. È la stessa ragione per cui non puoi (utilmente) mettere un carattere zero nel mezzo di una stringa in C: il carattere zero è riservato per indicare "l'ultimo carattere diverso da zero prima che questa sia la fine dei dati, quindi quando vedi questo, hai finito ". Se devi aspettarti zero caratteri nel mezzo della stringa, scrivere strlendiventa molto più difficile.

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.