Limite inferiore al numero di chiamate oracolo per la risoluzione di istanze del problema di arresto


9

Ho riscontrato la seguente domanda, che è un esercizio facile (spoiler di seguito).

Ci vengono fornite istanze del problema di arresto (ovvero le TM ) e dobbiamo decidere esattamente quale di loro si ferma su . Cioè, dobbiamo produrre . Ci viene dato un oracolo per il problema dell'arresto, ma dobbiamo usarlo un numero minimo di volte.M 1 , . . . , M n ϵ { i : M mi  fermo su  ϵ }nM1,...,Mnϵ{i:Mi halts on ϵ}

Non è difficile dimostrare che può essere fatto con chiamate .log(n+1)

La mia domanda è: possiamo dimostrare un limite inferiore? C'è motivo di sospettare che un tale limite sarà molto difficile da trovare?

La risposta alla domanda stessa (spoiler, mouse hover):

Considera il caso di TM. Possiamo costruire una TM che esegue in parallelo e si ferma se almeno due di loro si fermano (altrimenti si blocca). Allo stesso modo, possiamo costruire una TM che si ferma se almeno una di esse si ferma. Possiamo quindi chiamare l'oracolo su . Se si ferma, allora possiamo far funzionare le macchine in parallelo e attendere che si fermi. Possiamo quindi chiamare l'oracolo sull'ultimo. Se l'oracolo dice "no", allora eseguiamo l'oracolo su . Se si ferma, quindi facciamo funzionare le macchine fino a quando uno si ferma, ed è l'unico che si ferma. Se non si ferma, nessuno di loro si ferma. Estendere questo a macchine è facile.H 2 M 1 , M 2 , M 3 H 1 H 2 H 1 H 1 n3H2M1,M2,M3H1H2H1H1n

La prima osservazione su questa domanda è che sembra impossibile risolvere usando strumenti di teoria delle informazioni, poiché facciamo affidamento cruciale sulla nostra capacità di ottenere informazioni facendo funzionare le macchine senza l'oracolo.


@Kaveh - come ha scritto Neal Young, dobbiamo calcolare l'esatta serie di macchine per fermare.
Shaull

Risposte:


11

Il risultato può essere trovato in

Le loro prove dimostrano infatti che il problema non può essere risolto con meno di query su qualsiasi set , per non parlare del problema di arresto stesso. Per alcune notazioni, il tuo problema è talvolta indicato con o (a seconda della notazione preferita per il problema di arresto).X C K n C H A L T nlog2nXCnKCnHALT

Per questo e molti risultati correlati, vedere anche:


10

EDIT: L'argomento con cui avevo risposto non era sbagliato, ma era un po 'fuorviante, in quanto mostrava solo che il limite superiore doveva essere stretto per alcuni (il che è in realtà banale, poiché deve essere stretto quando e il limite è 1).n = 2nn=2

Ecco un argomento più preciso. Mostra che se il limite superiore di è libero per qualsiasi particolare , allora per tutto il numero di chiamate all'oracolo richieste è .n n O ( 1 )log2nn nO(1)

(Sicuramente è non , in modo che il limite superiore non è mai sciolto! Ma io in realtà non prova che qui, e dato l'altra risposta al problema, non sembra vale la pena perseguire.)O(1)

Considera il problema di calcolare l'output massimo :

Data una -tupla delle macchine di Turing, calcola l'output massimo (delle macchine di Turing che si arrestano, se eseguito su ). Se nessuno di essi si ferma, restituisce 0.( M 1 , , M n ) ϵn(M1,,Mn)ϵ

In funzione di , il numero peggiore di chiamate oracolari richieste per calcolare questa funzione è lo stesso del numero richiesto per decidere quale di macchine arrestate. (Se so quali macchine si fermano, posso facilmente calcolare il massimo output. Viceversa, se voglio sapere quali macchine si fermano, dopo la costruzione nella dichiarazione del problema, posso costruire macchine dove esegue tutti gli dati macchine in parallelo, poi fermate e in uscita se di loro ha mai battuta d'arresto. la potenza massima sarà dirmi il numero che battuta d'arresto. Da quel che posso computare esattamente quale fermata.)n { M i } ( i = 1 , 2 , , n ) M i n i inn{Mi} (i=1,2,,n)Minii

Ora, lascia che sia il numero intero più piccolo (se presente) in modo che valga quanto segue: nn0n

Usando chiamate oracle, si può calcolare l'output massimo di macchine date. (Cioè, il limite superiore non è stretto per .)nC(n)=max{kZ:2k<n}nn

Chiaramente , perché . In effetti, anche , perché , ma è indecidibile calcolare l'output massimo di macchine fornite (senza chiamate oracolo). Ora considera più grande :C ( 1 ) = - 1 n 0 > 2 C ( 2 ) = 0 2 nn0>1C(1)=1n0>2C(2)=02n

Reclamo: se è finito, quindi, per qualsiasi , si può calcolare l'output massimo di macchine date in chiamate oracle . n n C ( n 0 ) n0nnC(n0)(Nota che se è finito, allora .) C( n 0 )=O(1)n0C(n0)=O(1)

Prova. . Lo dimostriamo per induzione su . I casi di base sono , che detengono per definizione di e .n n 0 n 0 Cnnn0n0C

Sia la TM che, date le macchine Turing , calcola l'output massimo usando solo le chiamate all'oracolo.n 0 C ( n 0 )Q0n0C(n0)

Correggi qualsiasi . Dati macchine , calcolare il massimo output come segue. n M 1 , , M nn>n0nM1,,Mn

Concentrati sui primi macchine. Prendi in considerazione l'esecuzione di su queste macchine . Si noti che rende le chiamate verso l'oracolo, e ci sono solo possibili risposte da parte l'oracolo di queste chiamate. Si noti che per definizione . Facciamo indicano il esimo possibile risposta. Per ogni , costruisci una macchina che simula su queste macchine come segue: Q 0 n 0 Q 0M1,,Mn0Q0n0Q0n = 2 C ( n 0 )C(n0)n=2C(n0)o i i i = 1 , , n M i Q 0n=2C(n0)<n0oiii=1,,nMiQ0

TM (su input ): ϵMiϵ

  1. Simula sulle macchine , ma invece di chiamare l'oracolo, assumere le risponde oracolo in base alle .n 0 ( M 1 , , M n 0 ) o iQ0n0(M1,,Mn0)oi
  2. Questa simulazione potrebbe non arrestarsi (ad es. Se non è ciò che l'oracolo ritornerebbe effettivamente).oi
  3. Se la simulazione si interrompe, si che sia l'output massimo che dice sarebbe dato.Q 0hiQ0
  4. Coda di rondine tutte le macchine . Se uno di essi emette mai , arrestare ed emettere . ( M 1 , , M n 0 ) h i h in0(M1,,Mn0)hihi

Ora, nella sequenza data di macchine, sostituisci le prime macchine con queste macchine . Restituisce il valore calcolato ricorrendo su questa sequenza di macchine. (Notare che l'oracolo non viene chiamato prima di ricorrere, quindi l'oracolo viene chiamato solo una volta raggiunto il caso base.)n 0 M 1 , , M n 0nn0M1,,Mn0M 1 , , M n n - ( n 0 - n ) < nn<n0M1,,Mnn(n0n)<n

Ecco perché questo calcolo è corretto. Per tale che sia la risposta `` corretta '' dell'oracolo alle query, si fermerebbe e darebbe il massimo output corretto delle macchine originali . Pertanto, l'output massimo delle macchine è almeno l'output massimo delle macchine . D'altra parte, al punto 4, nessun può fornire un output maggiore del risultato massimo di . Pertanto, il massimo output delle macchineo i Q 0 M i n 0 n ( M 1 , , M n ) n 0ioiQ0Min0n(M1,,Mn) ( M 1 , , M n 0 )n0(M1,,Mn0) ( M 1 , , M n 0 ) n ( M 1 , , M nMi(M1,,Mn0)n(M1,,Mn) uguale all'output massimo delle macchine che sostituiscono. QEDn0

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.