Una risposta spudoratamente copiata da me stesso :
Una Turing Machine multi-nastro è per lo più uguale a una macchina single-tape, tranne per il fatto che abbiamo una funzione di transizione estesa dove è il numero di nastri. Quindi in ogni stato, la funzione di transizione legge il contenuto di ogni nastro, si sposta in un nuovo stato, (forse) scrive qualcosa su ogni nastro e sposta ogni testa - proprio come una normale TM, tranne ora che abbiamo più cose da leggere, scrivere e muoviti. kQ × ΓK→ Q × ΓK× { L , R }KK
Come suggerisce la tua domanda, tale macchina può essere simulata da una TM a nastro singolo . Ancora meglio, può essere fatto solo con un rallentamento quadratico (quindi per le classi polinomialmente chiuse, è sufficiente parlare di macchine a nastro singolo).
La prova di ciò è in qualche modo coinvolta e facilmente disponibile con una semplice ricerca sul Web, quindi traccerò semplicemente la mappatura dei tasti su un singolo nastro.K
L'idea di base è piuttosto semplice; aggiungiamo semplicemente alcuni nuovi simboli e teniamo traccia di ogni nastro e ci dirigiamo uno dopo l'altro. Ad ogni passo del calcolo possiamo aver visitato solo una quantità finita di qualsiasi nastro, quindi abbiamo solo bisogno di archiviare queste informazioni su ogni nastro. Quindi per ogni aggiungiamo un nuovo simbolo a che indicherà dove si trova la testa (per ogni nastro) in qualsiasi punto del calcolo. Introduciamo anche un carattere separatore in che indicherà l'inizio e la fine dei nastri "virtuali". Dato inputγ _ Γ # Γ ω = ω 1 … ω n # ω 1 _ … ω n # ⊔ _ # ⊔ _ # … # ⊔ _ # ⏟ k sezioni, una per nastro ⊔ ⊔ ⊔ ⊔ ⊔ ⊔ ...γ∈ Γγ--Γ#Γω = ω1... ωn(possiamo supporre che anche sulla macchina multi-nastro tutto l'input sia sul primo nastro - dimostrando perché è un buon esercizio) sulla macchina multi-nastro, la nostra macchina a nastro singolo avrà input
# ω1---... ωn# ⊔--# ⊔--# … # ⊔--#k sezioni, una per nastro⊔ ⊔ ⊔ ⊔ ⊔ ⊔ ...
Quindi utilizziamo lo stato della macchina a nastro singolo per codificare lo stato in cui si trova la macchina a nastro multiplo e quali sono le testine. La funzione di transizione della macchina a nastro singolo è una simulazione multistadio della funzione di transizione a nastro multiplo, in cui eseguiamo le diverse azioni del nastro in modo appropriato, spostando il singolo nastro su ciascuna sezione a turno. Le uniche rughe rimaste stanno spostando tutto quando esauriamo lo spazio in una sezione (ma una tale macchina secondaria è un semplice esercizio) - non riduciamo mai le dimensioni di ogni sezione.K
Un semplice (si spera) semplice esempio:
Supponiamo di avere una TM a 3 nastri, in cui l'alfabeto di input è solo , l'alfabeto di nastro è e l'input è . Lo stato iniziale del nastro della macchina è simile a:
" " indica dove si trova la testina di lettura / scrittura su ogni nastro.Σ = { 0 , 1 }Γ = { 0 , 1 , ⊔ }ω = 10101
Cassetta 1:Cassetta 2:Cassetta 3:1∧0101 ⊔ ⊔ ⊔ …⊔∧⊔ ⊔ ⊔ ⊔ ⊔ ...⊔∧⊔ ⊔ ⊔ ⊔⊔ ...
∧
Per costruire la macchina a nastro singolo combinata, è necessario aggiungere nuovi simboli all'alfabeto del nastro:
- Abbiamo bisogno di un simbolo che indichi l'inizio e la fine dei nastri simulati
- Per ogni simbolo in abbiamo anche bisogno di una versione che indichi che la testina simulata si trova su quel carattere sul nastro simulato.Γ
Quindi, per la macchina a nastro singolo, il nostro nuovo alfabeto per nastro è . Lo stato iniziale del nastro è:
Notare la differenza tra la testa della macchina (il ) e le teste simulate dei 3 nastri simulati (i caratteri sottolineati). Ovviamente il nastro si estende all'infinito a destra come al solito. Ho anche tradito leggermente spostando la testina sul primo carattere della prima stringa; rigorosamente dovrebbe iniziare sulla cella più a sinistra, ma questo è un banale tecnicismo.Γ'= { 0 , 1 , ⊔ , 0-, 1-, ⊔--, # }
# 1-∧0101 # ⊔--# ⊔--# ⊔ ⊔ ⊔ ...
∧
Quindi abbiamo tre sezioni contrassegnate (tra i segni ), che corrisponderanno ai 3 nastri della macchina originale.#
Ora inventiamo un'azione per la macchina. Diciamo che la macchina originale legge dal primo nastro, se vede un , scrive un sul secondo nastro, se vede uno scrive un sul terzo nastro. Ad ogni lettura o scrittura, la testa si sposta verso destra.1101
Quindi, dopo il primo "passo" (che forse richiede diversi stati e transizioni nella macchina reale), i nastri dovrebbero avere un sul secondo nastro e la prima e la seconda testina si saranno spostate a destra di un passo:1
Cassetta 1:Cassetta 2:Cassetta 3:1 0∧101 ⊔ ⊔ ⊔ ...1 ⊔∧⊔ ⊔ ⊔ ⊔ ...⊔∧⊔ ⊔ ⊔ ⊔ ⊔ ...
Al secondo giro, il primo nastro legge uno , quindi invece scriviamo sul terzo nastro:0
Cassetta 1:Cassetta 2:Cassetta 3:10 1∧01 ⊔ ⊔ ⊔ ...1 ⊔∧⊔ ⊔ ⊔ ⊔ ...1 ⊔∧⊔ ⊔ ⊔ ⊔ ...
La macchina a nastro singolo simula questo spostando la sottolineatura (usando la versione alternativa dei caratteri in e scrivendo sul nastro simulato appropriato. Quindi, dopo il primo passo, il nastro combinato appare come:Γ'
# 1 0-∧101 # 1 ⊔--# ⊔--# ⊔ ⊔ ⊔ ...
Dopo il secondo passo:
# 10 1-∧01 # 1 ⊔--# 1 ⊔--# ⊔ ⊔ ⊔ ...
Ovviamente questa è una visione di alto livello del processo: non ho tentato di spiegare come costruire gli stati o come ogni nastro simulato si allunga (per questo, hai bisogno di una piccola routine che controlli se ti sei imbattuto nel estremità del nastro simulato, quindi sposta tutto a destra di un passo e si stringe in un nuovo spazio vuoto, ovvero aggiunge celle a nastro simulate solo quando sono necessarie).