Thử nghiệm có thể cho thấy sự vắng mặt của lỗi?


18

(n+1) điểm được yêu cầu để xác định duy nhất một đa thức bậc; ví dụ, hai điểm trong một mặt phẳng xác định chính xác một dòng.n

Có bao nhiêu điểm được yêu cầu để xác định duy nhất một hàm tính toán , với độ dài của một chương trình tính trong một ngôn ngữ cố định? (tức là một ràng buộc về độ phức tạp Kolmogorov của ).f ff:NNff

Ý tưởng là, ít nhất về mặt lý thuyết, người ta có thể chứng minh tính đúng đắn của một chương trình bằng cách thực hiện đủ các bài kiểm tra.

Nếu ta có một chương trình có độ dài rằng tính , có một ràng buộc về số lượng các chức năng mà có thể được tính với chiều dài nguồn gốc của nhiều nhất là .L f LPLfL

Do đó, người ta sẽ "chỉ" cần chứng minh rằng:

  • Lf có thể được tính với độ dài nguồnL
  • LP không tính toán bất kỳ hàm nào khác có thể tính toán theo byte hoặc ít hơn (bằng cách kiểm tra)L

Ý tưởng này có lẽ không có hậu quả thực tế (giới hạn chắc chắn là theo cấp số nhân).


4
Giả sử mô tả của bạn các chức năng được đưa ra trong nhị phân, sau đó có ít nhất 2L+11 chiều dài mô tả nhiều nhất là L . Nhưng bây giờ vấn đề là không giống như đa thức, hai hàm tính toán riêng biệt có thể dễ dàng lấy cùng một giá trị trên một số lượng đầu vào vô hạn. Do đó, vấn đề của bạn dường như là không thể đối với tôi.
Bruno

Tôi hiểu ý tưởng của bạn. Nhưng hai hàm tính toán riêng biệt có độ dài mô tả <= L sẽ khác nhau tại một số điểm (đối với một số n0). Có thể tìm thấy giá trị của n0 cho L?
pbaren

4
bạn có thể tìm thấy một điểm như vậy nếu tồn tại một điểm, chỉ cần tính toán các hàm trên tất cả các giá trị bằng cách sử dụng khớp nối, nhưng nếu không thì bạn sẽ không bao giờ biết, điều đó là không thể xác định được, có chiều dài trên kích thước chương trình không thay đổi bất cứ điều gì.
Kaveh

7
Trên thực tế, @Kaveh, theo lập luận của riêng bạn, giới hạn trên của sẽ cho bạn biết điều gì đó về nơi chúng khác nhau, chỉ là không phải là thứ gì đó có thể tính toán được. Nếu K ( f ) L , và f g , sau đó K ( x ) 2 L + c nơi c là độ dài của thuật toán bạn (@Kaveh) mô tả và x là chuỗi đầu tiên mà eg khác nhau. Đặc biệt, xK(f)K(f)LfgK(x)2L+ccxfgxđược giới hạn bởi một số chức năng giống Busy-hải ly của . Tuy nhiên, việc tìm kiếm tất cả các xK ( x ) 2 L + c hoặc máy tính BB vẫn uncomputable. Vì vậy, @pbaren: có một ràng buộc, nhưng nó không chỉ là theo cấp số nhân, nó không thể tính toán được. 2L+cxK(x)2L+c
Joshua Grochow

6
@Kaveh: Đó là ý của tôi bởi hàm "Busy-beaver-like": gọi là độ dài của chuỗi dài nhất có độ phức tạp Kolmogorov (sửa một máy vạn năng) nhiều nhất là n . Chỉ có rất nhiều chuỗi như vậy nên điều này được xác định rõ tùy theo sự lựa chọn của máy vạn năng. Sau đó B B ' ( 2 L + c ) là một trên ràng buộc: nếu hai (tổng cộng tính toán) chức năng của Kolmogorov phức tạp ở hầu hết các L đồng ý về tất cả các điểm đến chiều dài B B ' ( 2 L + c )BB(n)nBB(2L+c)LBB(2L+c), sau đó họ bằng nhau.
Joshua Grochow

Câu trả lời:


9

(Điều này có nghĩa là một nhận xét, nhưng đã đi lâu). Câu hỏi rất thú vị. Nếu bạn sẵn sàng nghĩ về các biện pháp phức tạp khác ngoài Kolmogorov, thì có một số câu trả lời trong lý thuyết Học tập có thể làm bạn hài lòng. Tôi để nó cho các chuyên gia trong khu vực.

Ví dụ, nếu tôi không nhầm, trong "Lý thuyết về khả năng học được" Valiant đã chứng minh rằng hàm boolean có thể được xây dựng lại với số "điểm dương" đa thức trên kích thước của công thức k-CNF của nó (đối với mọi k cố định và ý tôi là với "điểm tích cực" có dạng ).(x1,,xn,1)

Trong TAOCP 7.2.1.6 của Knuth, nó được thể hiện theo một cách đáng kinh ngạc (sử dụng mẫu cây Giáng sinh) để tái tạo một hàm boolean đơn (nghĩa là không giảm trong mỗi biến), bạn cần chính xác điểm.(n+1n/2+1)


7

Để tiếp tục câu trả lời của Deigo, giới hạn độ phức tạp mẫu chuẩn từ lý thuyết học tập cho bạn biết rằng nếu bạn hài lòng với việc tìm một chương trình "gần đúng", bạn không cần phải thử rất nhiều điểm. Hãy nói rằng chúng tôi đang mã hóa các chương trình nhị phân, do đó chỉ có chương trình có độ dài d. Cho phép giả cũng rằng có một số phân phối qua ví dụ đầu vào . Có lẽ mục tiêu của bạn là tìm một chương trình mà bạn khá chắc chắn là gần như đúng ("Có lẽ là gần đúng", như trong mô hình học tập của Valiants PAC). Nghĩa là, bạn muốn chạy một thuật toán sẽ lấy một số lượng nhỏ mẫu cùng với và sẽ có xác suất ít nhất là D x ~ D f ( x ) ( 1 - δ ) P f ( 1 - ε ) D2dDxDf(x)(1δ)sản lượng một số chương trình mà đồng ý với trên ít nhất một phần đầu vào rút ra từ . Pf(1ϵ)D

Chúng ta chỉ cần vẽ ví dụ và xuất ra bất kỳ chương trình có độ dài đồng ý với trên tất cả các ví dụ. (Một người được đảm bảo tồn tại vì chúng ta giả sử có độ phức tạp Kolmogorov nhiều nhất ) ...x D P d f f dmxDPdffd

Xác suất mà một chương trình cụ thể không đồng ý với trên nhiều hơn một phần của các ví dụ là phù hợp với các ví dụ chúng tôi đã chọn là gì? Đó là nhiều nhất . Chúng tôi muốn xác suất này ở mức tối đa để chúng tôi có thể liên kết ràng buộc trên tất cả các chương trình và nói rằng với xác suất ít nhất , không có chương trình "xấu" nào phù hợp với các ví dụ rút ra của chúng tôi. Giải quyết, chúng tôi thấy rằng chỉ cần lấy các ví dụ . (tức là chỉ tuyến tính nhiều trong độ phức tạp Kolmogorov củaf ε m ( 1 - ε ) m δ / 2 d 2 d 1 - δ m 1Pfϵm(1ϵ)mδ/2d2d1δf

m1ϵ(d+log1/δ)
f...)

BTW, các đối số như thế này có thể được sử dụng để biện minh cho "Occam's Razor": đưa ra một số quan sát cố định, trong số tất cả các lý thuyết giải thích chúng, bạn nên chọn một lý thuyết có độ phức tạp Kolmogorov thấp nhất, bởi vì có ít khả năng bị quá mức nhất.

Tất nhiên, nếu bạn chỉ muốn kiểm tra một chương trình cố định duy nhất theo cách này, bạn chỉ cần các ví dụ ...O(log(1/δ)/ϵ)


3

Đây là một câu trả lời tầm thường: giả sử, sau đó bạn cần biết giá trị của ở tất cảđiểm để xác định duy nhất . Do đó, cách tiếp cận bạn phác thảo hoàn toàn không giúp ích gì cho bạn, trừ khi bạn bằng cách nào đó biết rằng độ dài của chương trình cực kỳ ngắn: ngắn hơn nhiều so vớichút ít.f | N | f L lg | N |Llg|N|f|N|fLlg|N|

Hãy xem xét họ các hàm , trong đó được định nghĩa là hàm nếu và nếu . Lưu ý rằng độ phức tạp Kolmogorov của điện toán là vềbit, vì bạn có thể mã hóa giá trị của trong mã nguồn và sau đó tất cả những gì bạn cần là một câu lệnh điều kiện đơn giản ( phụ).F={fi:iN}fifi(x)=1i=xfi(x)=0ixfilg|N|iO(1)

Tuy nhiên, bạn không thể phân biệt với hàm all-zeros trừ khi bạn kiểm tra nó ở đầu vào . Bạn không thể phân biệt vớifiififjijf|N|fi|N|1


0

Bạn có thể làm cho chương trình dài tùy ý. Vì vậy, với bất kỳ chương trình nào, bạn có thể quyết định liệu ngôn ngữ của nó có tương đương với ngôn ngữ của chương trình này hay không. Bạn không thể làm điều đó theo định lý của Rice.


1
Bạn có một điểm hợp lệ rằng ý tưởng kiểm tra chương trình bằng cách chạy nó trong một số trường hợp sẽ không hoạt động nói chung.
Tsuyoshi Ito
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.