Se eles estivessem simplesmente falando sobre a complexidade Kolmogorov (sem limite de recursos), seria incontestável (caso contrário, você poderia usar uma máquina que computa para fornecer descrições curtas das cadeias , pois tudo o que você precisa fazer é descrever a máquina e o comprimento de , e temos ainda ), portanto, seria uncomputable bem.KKx∈KnxK(x)=nK(n)≤lognB
No entanto, o artigo Abadi et al. A referência ( Hartmanis. Complexidade generalizada de Kolmogorov e a estrutura de cálculos viáveis. FOCS 1983. ) usa uma versão Kolmogorov complexed-bounded version. Seja uma eficiente máquina universal de Turing. Defina para serem os conjuntos de cadeias modo que exista uma cadeia de comprimento tal que e o cálculo de levam no máximo . No topo da segunda coluna da pág. 444 desse artigo, Hartmanis descreve como usar esse conceito para construir um oráculo (computável) em relação ao qualUKU[f(n),g(n)]xd|d|≤f(|x|)x=U(d)U(d)g(|x|)P≠NP.
Aqui está a ideia de Hartmanis, adaptada ao Abadi et al. resultado. Deixe e (que acredito ser a função que você descreveu). Pela diagonalização padrão (por exemplo, como no teorema da hierarquia de tempo), construa um conjunto de registros modo que e . Agora coloque a primeira cadeia de comprimento de em iff . Como , temos .tow3(1)=2tow3(n+1)=222nCC⊆{1tow3(n):n≥1}C∈TIME[nlogn]−Ptow3(n)K[logn,nlogn]−K[logn,nloglogn]K1tow3(n)∈CC={1n:(∃x)[|x|=n and x∈K]}C∈NPK
Também temos , portanto, . Suponha, por uma questão de contradição, que . Depois, há uma máquina oráculo poli-tempo tal que . Eu afirmo que isso implica (sem o oráculo!), Contrariando a construção de . Aqui está o algoritmo poly-time: na entrada :C∉PKPK≠NPKC∈PKMC=L(MK)C∈PCx=1tow3(n0)
Calcular todas as strings em de comprimento estritamente menor que. Isso pode ser feito em tempo polinomial, porque todas essas cadeias possuem comprimento no máximo, e precisamos apenas testar o cálculo de em cadeias ainda menores , por períodos de tempo ainda muito pequenos em comparação com.K|x|logloglog|x|U(d)d|x|
Execute , simulando consultas do oracle para cadeias menores com os resultados de (1). Se alguma vez consultar uma sequência de comprimento, simule essa consulta com uma resposta "NÃO".M(x)M(x)|x|
A etapa de razão (2) trabalha que, para comprimentos de entrada suficientemente grandes, se houver uma string com esse comprimento, não pode consultar , portanto podemos simular todas essas consultas com uma resposta NO. Se o fizesse consulta , então teríamos (onde limita o tempo de execução de ), contradizendo o fato de que nós escolhemos ser não em .y∈KMK yyy∈K[logn,nk]nkMy K[logn,nloglogn]