EDIT: L'argument auquel j'avais répondu n'était pas faux, mais il était un peu trompeur, en ce qu'il montrait seulement que la limite supérieure devait être serrée pour certains (ce qui est en fait trivial, car il doit être serré lorsque et la limite est 1).n = 2nn=2
Voici un argument plus précis. Il montre que si la limite supérieure de
est lâche pour tout particulier , alors pour tous le nombre d'appels oracle requis est .n n O ( 1 )log2nn nO(1)
(Ce n'est sûrement pas , donc la borne supérieure n'est jamais lâche! Mais je ne prouve pas réellement que ici, et étant donné l'autre réponse au problème, cela ne semble pas valoir la peine d'être poursuivi.)O(1)
Considérez le problème du calcul de la sortie maximale :
Étant donné un -tuple des machines Turing, calculez la sortie maximale (des machines Turing qui s'arrêtent, si elles sont exécutées sur ). Si aucun d'entre eux ne s'arrête, retournez 0.( M 1 , … , M n ) ϵn(M1,…,Mn)ϵ
En fonction de , le nombre le plus défavorable d'appels oracle requis pour calculer cette fonction est le même que le nombre requis pour décider laquelle des n machines données arrêter. (Si je sais quelles machines s'arrêtent, je peux facilement calculer la sortie maximale. Inversement, si je veux savoir quelles machines s'arrêtent, en suivant la construction de l'énoncé du problème, je peux construire des machines { M ′ i } ( i = 1 , 2 , … , N )
où M ′ i exécute toutes les n machines données en parallèle, puis s'arrête et produit inn{M′i} (i=1,2,…,n)M′inisi leur HALT jamais. La sortie maximale me dira le nombre qui s'arrête. À partir de cela, je peux calculer exactement l'arrêt.)i
Maintenant, soit le plus petit entier n (le cas échéant) tel que ce qui suit soit vrai:n0n
n nC(n)=max{k∈Z:2k<n}nn
Clairement , car . En fait, également, car , mais il est indécidable de calculer la sortie maximale de machines données (sans appels Oracle). Considérons maintenant un plus grand :C ( 1 ) = - 1 n 0 > 2 C ( 2 ) = 0 2 nn0>1C(1)=−1n0>2C(2)=02n
: si est fini, alors, pour tout , on peut calculer la sortie maximale de machines données dans appels oracle. n n C ( n 0 ) n0nnC(n0)(Notez que si est fini, alors .) C( n 0 )=O(1)n0C(n0)=O(1)
Preuve. . Nous le prouvons par récurrence sur . Les cas de base sont , qui détiennent par définition et .n ≤ n 0 n 0 Cnn≤n0n0C
Soit la MT qui, compte tenu des machines de Turing, calcule la sortie maximale en utilisant uniquement les appels vers l'oracle.n 0 C ( n 0 )Q0n0C(n0)
Fixez . Étant donné les machines , calculez la sortie maximale comme suit. n M 1 , … , M nn>n0nM1,…,Mn
Concentrez-vous sur les premières machines. Pensez à exécuter sur ces machines. Notez que fait des à l'oracle, et il n'y a que réponses possibles par l'oracle à ces appels. Notez que par définition . Soit la ème réponse possible. Pour chaque , construisons une machine
qui simule sur ces machines comme suit: Q 0 n 0 Q 0 C ( n 0 ) n ′ = 2 C ( n 0 ) n ′ = 2 C ( n 0 ) < n 0 o i i i = 1 , … , n ′ M ′ i Q 0M1,…,Mn0Q0n0Q0C(n0)n′=2C(n0)n′=2C(n0)<n0oiii=1,…,n′M′iQ0
TM (en entrée ): ϵM′iϵ
- Simuler sur les machines , mais au lieu d'appeler l'oracle, supposons que les répond oracle selon .n 0 ( M 1 , … , M n 0 ) o iQ0n0(M1,…,Mn0)oi
- Cette simulation pourrait ne pas s'arrêter (par exemple si n'est pas ce que l'oracle retournerait réellement).oi
- Si la simulation s'arrête, soit la sortie maximale qui, selon , serait donnée.Q 0hiQ0
- En queue d'aronde toutes les machines . Si l'un d'eux sort jamais , arrêtez et . ( M 1 , … , M n 0 ) h i h in0(M1,…,Mn0)hihi
Maintenant, dans la séquence donnée de machines, remplacez les premières machines par ces machines . Renvoie la valeur calculée en récursif sur cette séquence de machines. (Notez que l'oracle n'est pas appelé avant la récurrence, de sorte que l'oracle n'est appelé qu'une fois le cas de base atteint.)nn0M1,…,Mn0n′<n0M′1,…,M′n′n−(n0−n′)<n
Voici pourquoi ce calcul est correct. Pour le tel que est la réponse `` correcte '' de l'oracle aux requêtes, s'arrêterait et donnerait la sortie maximale correcte des machines d'origine. Ainsi, la sortie maximale des machines
est au moins la sortie maximale des machines . Par contre, à l'étape 4, aucun
ne peut donner une sortie supérieure à la sortie maximale de . Ainsi, la sortie maximale des machineso i Q 0 M ′ i n 0 n ′ ( M ′ 1 , … , M ′ n ′ ) n 0 ( M 1 , … , M n 0 ) M ′ i ( M 1 , … , M n 0 ) n ′ ( M ′ 1 , … , M ′ nioiQ0M′in0n′(M′1,…,M′n′)n0(M1,…,Mn0)M′i(M1,…,Mn0)n′N 0(M′1,…,M′n′)
est égal à la sortie maximale des machines qu'ils remplacent. QEDn0