Una macchina che non si ferma mai fa sempre un ciclo?


22

Una macchina di Turing che ritorna ad uno stato precedentemente incontrato con la sua testina di lettura / scrittura sulla stessa cella dello stesso identico nastro verrà catturata in un ciclo. Tale macchina non si ferma.

Qualcuno può fare un esempio di una macchina che non si ferma mai e che non si collega?


1
Solo una nota: il nastro può anche essere diverso: una condizione (ma non necessaria) sufficiente per un loop infinito quando la TM entra nella stessa cella al passo e al passo nello stesso stato, è che al passo il la parte del nastro visitata dalla testina tra il passo e il passo è uguale alla porzione corrispondente appena prima di inserire . t 2 > t 1 t 2 t 1 t 2 t 1t1t2>t1t2t1t2t1
Vor

4
Se una TM dovesse funzionare in loop per non arrestarsi, si sarebbe in grado di risolvere abbastanza facilmente il problema di arresto per le TM: ricordare tutte le configurazioni precedenti e ad ogni passaggio, vedere se ci si trova in una configurazione che si è vista prima, e in tal caso, sai che la cosa non si ferma (altrimenti, dato che assumiamo che debba essere in loop per funzionare per sempre, non funzionerà per sempre, cioè si fermerà, nel qual caso alla fine conoscerlo).
Patrick87,

Ispirato dalla risposta di @Niel de Beaudrap: una macchina da turismo potrebbe calcolare la sequenza oeis.org/A014445 e fermarsi quando ottiene un numero dispari. Potrebbe calcolare oeis.org/A016742 come una somma corrente e fermarsi quando il numero è dispari. Potrebbe calcolare x^2dove i xcicli tra -100e 100e il ciclismo vengono eseguiti con un modulo e arrestarsi quando il risultato è negativo. Potrebbe calcolare x%2dove x varia da zero a infinito positivo e fermarsi quando il risultato è uguale a 2. Nel linguaggio assembly do / while / for loop tutti scendono facendo un salto condizionale, ma cond jump da solo significa poco.
Leonid,

Il presupposto della domanda è vero solo per le macchine deterministiche.
Raffaello

Risposte:


15

Considera la TM che sposta sempre la testina del nastro verso destra e stampa uno speciale simbolo del nastro non vuoto ad ogni passo. Ciò significa che la TM non si ferma mai, poiché si sposta sempre verso destra e non ripete mai uno stato, poiché dopo k passi la testina del nastro si trova sopra la kth cella della macchina. Di conseguenza, ogni configurazione della macchina è diversa da tutte le altre e la macchina esegue sempre dei cicli.

Potremmo anche dimostrare in modo non costruttivo l'esistenza di tali macchine. Supponiamo per contraddizione che ogni TM che non si ferma mai alla fine si chiuda. Ciò significa che se si avvia una TM su una stringa w , alla fine si verificherà una delle seguenti condizioni:Mw

  1. ferma, oM
  2. ripete una configurazione.M

In questo caso, il problema di arresto sarebbe decidibile come segue. Data una TM e una stringa w , simula M su w , in ogni punto scrivendo il contenuto del nastro, lo stato corrente e la posizione corrente del nastro. Se questa configurazione è duplicata, l'output "non si ferma". Altrimenti, se M si ferma su w , l'output "si ferma". Poiché uno di questi è garantito alla fine, questo processo termina sempre, quindi avremmo un algoritmo per il problema di arresto, che sappiamo che non esiste.MwMwMw

Spero che sia di aiuto!


Hah, battiti per quella modifica. Vedi il mio commento sulla domanda. Mi piace questo modo di spiegare perché non tutte le TM che non si fermano devono fare un loop ... costruisce l'intuizione.
Patrick87,

@ Patrick87- Mi dispiace, non ho notato il commento. Ho pensato all'addendum sul mio tragitto giornaliero e mi sono seduto per entrare non appena sono tornato.
templatetypedef

Nessun problema, amico ... Sono contento che tu l'abbia aggiunto, dal momento che penso sia un buon modo per spiegarlo. L'ho aggiunto solo come commento e non come risposta, dal momento che mi hai battuto. : D
Patrick87,

In realtà, in termini di arresto del problema tale che tornare indietro e cambiare il nastro all'infinito sembra essere il "vero problema". Quei vagabondi che puoi rilevare.
Raffaello

12

Una macchina di Turing che calcola tutte le posizioni decimali di π (o qualsiasi altra frazione non terminante, in qualsiasi base) non si ferma mai e può essere fatta scrivere su ogni cella solo un numero finito di volte. Naturalmente, il fatto che non vi sia transizione verso uno stato di arresto sarebbe un omaggio morto, ma è almeno un esempio naturale.

Un caso più interessante (ma anche ambiguo) sarebbe una macchina di Turing che calcola iterativamente la funzione Collatz sul suo input, termina se e solo se ottiene l'intero 1. La famosa congettura di Collatz

f(n)={3n+1,if n is odd;n/2,if n is even,
è che per qualsiasi input, questa procedura alla fine si interrompe. Ma non è noto se questo sia il caso. Può fallire in due modi diversi, in linea di principio: o può trovare una sequenza di numeri interi che circola (corrispondente all'esistenza di un numero intero n tale che per un certo numero di composizioni, dove n  ≠ 1); o potrebbe essere che ci siano catene di numeri interi n , f (n) , f (f (n))fff(n)=n, ... che divergono asintoticamente all'infinito. Se esistono sequenze di quest'ultimo tipo, ciò implicherebbe che la macchina di Turing che ho descritto sopra non si ripeterà, poiché il nastro verrebbe continuamente cambiato in numeri sempre più grandi.

Mi piace giocare con le cifre di pi. Una MT potrebbe fermarsi ogni volta che il quadrato di qualsiasi cifra piequivale esattamente a 7.
Leonid

@Leonide: potresti certamente considerare una macchina di Turing che accetta alcuni input e si ferma su una condizione determinata da quell'input. È anche possibile specificare le condizioni in cui si interrompe una parte dell'input. E potresti fornire un input, come descrivi, impostando un vincolo che non è mai soddisfatto.
Niel de Beaudrap,

10

Considera qualsiasi macchina di Turing senza interruzioni che non sposta mai la testina di lettura / scrittura a sinistra.


Alcuni di loro ancora loop. </nitpicking>
Raffaello

5

Se ciò fosse vero, allora il problema dell'arresto sarebbe decidibile. Dovresti semplicemente registrare ogni coppia (nastro, stato) vista quando esegui la macchina di Turing, e la macchina si fermerebbe (nel qual caso si ferma ovviamente), o vedrai una coppia che hai visto prima, nel qual caso la macchina non si ferma.

Poiché il problema dell'arresto è indecidibile, questo non può essere vero. (Vedi altri esempi per contro esempi.)


Cosa aggiunge questa risposta alla risposta di templatetypedef ?
Raffaello

Immagino di no. Scusa, in qualche modo ho perso quella risposta quando ho scritto la mia.
Ricorsivamente
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.