Nếu họ chỉ đơn giản nói về độ phức tạp Kolmogorov (không giới hạn tài nguyên), thì sẽ không thể tính được (nếu không bạn có thể sử dụng máy tính K để đưa ra các mô tả ngắn về chuỗi x ∈ K , vì tất cả những gì bạn cần làm là mô tả máy và độ dài n của x , và chúng tôi có K ( x ) = n chưa K ( n ) ≤ log n ), do đó B sẽ uncomputable là tốt.KKx∈KnxK(x)=nK(n)≤lognB
Tuy nhiên, bài báo Abadi et al. tài liệu tham khảo ( Hartmanis. Độ phức tạp Kolmogorov tổng quát và cấu trúc của các tính toán khả thi. FOCS 1983. ) sử dụng độ phức tạp Kolmogorov giới hạn tài nguyên. Hãy để là một máy Turing phổ dụng hiệu quả. Xác định K U [ f ( n ) , g ( n ) ] là tập hợp các chuỗi x sao cho có một chuỗi d có độ dài | d | ≤ f ( | x | ) sao cho x = U (UKU[f(n),g(n)]xd|d|≤f(|x|) và việc tính toán U ( d ) mất nhiều nhấtthời gian g ( | x | ) . Ở đầu cột thứ hai trên p. 444 giấy đó, Hartmanis mô tả làm thế nào để sử dụng khái niệm này để xây dựng một (tính toán) oracle tương đối mà P ≠ N P .x=U(d)U(d)g(|x|)P≠NP
Đây là ý tưởng của Hartmanis, được điều chỉnh theo Abadi et al. kết quả. Đặt và t o w 3 ( n + 1 ) = 2 2 2 n (mà tôi tin là hàm bạn đã mô tả). Bởi diagonalization tiêu chuẩn (ví dụ như trong định lý cấp bậc thời gian), xây dựng một tally bộ C mà C ⊆ { 1 t o w 3 ( n ) : n ≥ 1 } vàtow3(1)=2tow3(n+1)=222nCC⊆{1tow3(n):n≥1} . Bây giờ đặt chuỗi đầu tiên có độ dài t o w 3 ( n ) từ K [ log n , n log n ] - K [ log n , n log log n ] vào K khi và chỉ khi 1 t o w 3 ( n ) ∈ C . TừC∈TIME[nlogn]−Ptow3(n)K[logn,nlogn]−K[logn,nloglogn]K1tow3(n)∈C , chúng tôi có C ∈ N P K .C={1n:(∃x)[|x|=n and x∈K]}C∈NPK
Chúng tôi cũng có , do đó P K ≠ N P K . Giả sử vì lợi ích của mâu thuẫn đó C ∈ P K . Sau đó, có một máy tiên tri đa thời gian M sao cho C = L ( M K ) . Tôi cho rằng điều này có nghĩa C ∈ P (không có oracle!), Trái ngược với xây dựng C . Đây là thuật toán đa thời gian: trên đầu vào x = 1 t o w 3 ( n 0C∉PKPK≠NPKC∈PKMC=L(MK)C∈PC :x=1tow3(n0)
Tính tất cả các chuỗi trong có độ dài nhỏ hơn | x | . Điều này có thể được thực hiện trong thời gian đa thức vì tất cả các chuỗi như vậy có độ dài tối đa log log log | x | và chúng ta chỉ cần kiểm tra tính toán của U ( d ) trên các chuỗi thậm chí nhỏ hơn d , trong khoảng thời gian vẫn còn rất nhỏ so với | x | .K|x|logloglog|x|U(d)d|x|
Chạy , mô phỏng các truy vấn tiên tri đến các chuỗi nhỏ hơn với kết quả của (1). Nếu M ( x ) từng truy vấn một chuỗi độ dài | x | , mô phỏng truy vấn đó với câu trả lời "KHÔNG".M(x)M(x)|x|
Bước lý do (2) làm việc đó, với độ dài đầu vào đủ lớn, nếu có một chuỗi có độ dài đó, M K không thể truy vấn y , vì vậy chúng ta có thể mô phỏng tất cả các truy vấn như vậy bằng câu trả lời KHÔNG. Nếu nó đã làm truy vấn y , sau đó chúng ta sẽ có y ∈ K [ log n , n k ] (trong đó n k giáp với thời gian chạy của M ), trái ngược với thực tế là chúng tôi đã chọn y là không trong K [ log n , n đăng nhập nhật kýy∈KMK yyy∈K[logn,nk]nkMy .K[logn,nloglogn]