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{M′i} (i=1,2,…,n)M′inii
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{k∈Z: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 Cnn≤n0n0C
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,…,n′M′iQ0
TM (su input ): ϵM′iϵ
- 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
- Questa simulazione potrebbe non arrestarsi (ad es. Se non è ciò che l'oracolo ritornerebbe effettivamente).oi
- Se la simulazione si interrompe, si che sia l'output massimo che dice sarebbe dato.Q 0hiQ0
- 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′<n0M′1,…,M′n′n−(n0−n′)<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 0ioiQ0M′in0n′(M′1,…,M′n′) ( M 1 , … , M n 0 )n0(M1,…,Mn0) ( M 1 , … , M n 0 ) n ′ ( M ′ 1 , … , M ′ nM′i(M1,…,Mn0)n′(M′1,…,M′n′)
uguale all'output massimo delle macchine che sostituiscono. QEDn0