Czy testy mogą wykazać brak błędów?


18

(n+1) punkty są wymagane do jednoznacznego określenia wielomianu stopnia ; na przykład dwa punkty na płaszczyźnie określają dokładnie jedną linię.n

Ile punktów jest wymaganych do jednoznacznego określenia funkcji obliczeniowej , biorąc pod uwagę długość programu, który oblicza w ustalonym języku? (tj. związany ze złożonością Kołmogorowa ).f:NNff

Chodzi o to, że przynajmniej teoretycznie można udowodnić poprawność programu, wykonując wystarczającą liczbę testów.

Jeśli ma się programu o długości , który oblicza nie jest związana z liczbą funkcji, które mogą być obliczone przy długości źródła co najwyżej .PLfL

Dlatego należałoby „tylko” udowodnić, że:

  • f można obliczyć na podstawie długości źródłaL
  • P nie oblicza żadnej innej funkcji obliczalnej w bajtach lub mniejszej (przez testowanie)L

Pomysł ten prawdopodobnie nie ma praktycznych konsekwencji (granice z pewnością będą miały charakter wykładniczy).


4
Załóżmy, że opis funkcji podane w systemie binarnym, to istnieją co najwyżej opisu długość co najwyżej . Ale teraz problemem jest to, że w przeciwieństwie do wielomianów, dwie różne funkcje obliczeniowe mogą z łatwością przyjąć te same wartości na nieskończonej liczbie danych wejściowych. Zatem twój problem wydaje mi się niemożliwy. L.2L+11L
Bruno,

Rozumiem twój pomysł. Ale dwie wyraźne funkcje obliczeniowe o długości opisu <= L powinny się w pewnym momencie różnić (dla niektórych n0). Czy można znaleźć wartość n0 dla danego L?
pbaren

4
można znaleźć taki punkt, jeśli taki istnieje, wystarczy obliczyć funkcje dla wszystkich wartości przy użyciu połączenia typu jaskółczy ogon, ale jeśli go nie ma, to nigdy się nie dowiesz, jest nierozstrzygalny, posiadanie górnej granicy rozmiaru programu nic nie zmienia.
Kaveh

7
W rzeczywistości, @Kaveh, według twojego własnego argumentu, górna granica mówi ci coś o tym, gdzie się różnią, po prostu nie jest czymś obliczalnym. Jeśli K ( f ) L i f g , to K ( x ) 2 L + c, gdzie c jest długością algorytmu opisanego przez ciebie (@Kaveh), a x jest pierwszym łańcuchem, na którym różnią się f i g . W szczególności xK(f)K(f)LfgK(x)2L+ccxfgxjest ograniczona przez jakąś funkcję Busy-bobra . Jednak znalezienie wszystkich x takich, że K ( x ) 2 L + c lub obliczenie BB jest nadal niemożliwe do obliczenia. @Pbaren: istnieje granica, ale jest to coś więcej niż wykładniczy, nie można jej obliczyć. 2L+cxK(x)2L+c
Joshua Grochow

6
@Kaveh: To właśnie miałem na myśli przez funkcję „zajęty jak bóbr”: niech będzie długością najdłuższego łańcucha, którego złożoność Kołmogorowa (naprawić uniwersalną maszynę) wynosi co najwyżej n . Istnieje tylko wiele takich ciągów, więc jest to dobrze zdefiniowane, aż do wyboru maszyny uniwersalnej. Zatem B B ( 2 L + c ) jest górną granicą: jeśli dwie (obliczalne) funkcje złożoności Kołmogorowa co najwyżej L zgadzają się na wszystkich punktach do długości B B ' ( 2 L + c )BB(n)nBB(2L+c)LBB(2L+c), to są równe.
Joshua Grochow

Odpowiedzi:


9

(To miało być komentarzem, ale trwało długo). Bardzo interesujące pytanie. Jeśli chcesz pomyśleć o innych miarach złożoności poza Kołmogorowem, w teorii uczenia się znajdziesz odpowiedzi, które mogą cię zadowolić. Zostawiam to ekspertom w tej dziedzinie.

Na przykład, jeśli się nie mylę, w „Teorii uczenia się” Valiant udowodnił, że funkcję boolowską można odtworzyć, biorąc pod uwagę wielomianową liczbę „punktów dodatnich” wielkości jej wzoru k-CNF (dla dowolnego ustalonego k , i mam na myśli z „dodatnimi punktami” te formy ).(x1,,xn,1)

W TAOCP 7.2.1.6 Knutha pokazano w zadziwiający sposób (przy użyciu wzoru choinki), że do rekonstrukcji monotycznej funkcji boolowskiej (tj. Nie zmniejszania się w każdej zmiennej) potrzebujesz dokładnie punktów.(n+1n/2+1)


7

Aby kontynuować zgodnie z odpowiedzią Deigo, standardowe granice złożoności próby z teorii uczenia się mówią ci, że jeśli jesteś zadowolony ze znalezienia programu, który jest „w przybliżeniu poprawny”, nie musisz próbować zbyt wielu punktów. Powiedzmy, że kodujemy programy w formacie binarnym, więc są tylko programy o długości d. Pozwala przypuszczać, że istnieje jakiś podział na przykłady wejściowe D . Być może Twoim celem jest znalezienie programu, co do którego masz pewność, że jest prawie odpowiedni („Prawdopodobnie w przybliżeniu poprawny”, tj. Jak w modelu uczenia się Valiants PAC). Oznacza to, że chcesz uruchomić algorytm, który pobierze niewielką liczbę próbek x D razem z f ( x )2dDxDf(x)I z prawdopodobieństwem będzie co najmniej wyjściu pewien program P , która zgadza się z F na co najmniej ( 1 - ε ) frakcji wejść sporządzonych z D . (1δ)Pf(1ϵ)D

Po prostu narysujemy przykładów x D i wyprowadzimy dowolny program P o długości d, który zgadza się zf na wszystkich przykładach. (Istnieje jedna gwarancja, że ​​istnieje, ponieważ zakładamy, że f ma złożoność Kołmogorowa co najwyżej d ) ...mxDPdffd

Co jest prawdopodobieństwo tego, że dany program , który jest przeciwny f o więcej niż ε frakcji przykładach są zgodne z m przykładach wybranych? To jest większość ( 1 - ε ) m . Chcielibyśmy przyjąć to prawdopodobieństwo za najwyżej δ / 2 d , abyśmy mogli wziąć związek związany we wszystkich programach 2 d i powiedzieć, że z prawdopodobieństwem co najmniej 1 - δ żaden „zły” program nie jest zgodny z naszymi narysowanymi przykładami . Po rozwiązaniu widzimy, że wystarczy wziąć tylko m 1Pfϵm(1ϵ)mδ/2d2d1δ przykłady. (tj. tylko liniowo wielu w złożoności Kołmogorowaf...)

m1ϵ(d+log1/δ)
f

BTW, takie argumenty mogą być wykorzystane do uzasadnienia „brzytwy Ockhama”: biorąc pod uwagę stałą liczbę obserwacji, spośród wszystkich teorii, które je wyjaśniają, powinieneś wybrać tę o najniższej złożoności Kołmogorowa, ponieważ jest najmniejsza szansa na przeregulowanie.

Oczywiście, jeśli chcesz sprawdzić tylko jeden stały program w ten sposób, potrzebujesz tylko przykładów ...O(log(1/δ)/ϵ)


3

Oto banalna odpowiedź: zakładając, że , musisz w ogóle znać wartość f | N | wskazuje na jednoznaczne określenie f . Dlatego podejście, które szkicujesz, wcale ci nie pomaga, chyba że w jakiś sposób wiesz, że długość L programu jest wyjątkowo krótka: znacznie krótsza niż lg | N | bitówLlg|N|f|N|fLlg|N|

Rozważ rodzinę funkcji , gdzie f i jest zdefiniowane jako funkcja f i ( x ) = 1, jeśli i = x oraz f i ( x ) = 0, jeśli i x . Zauważ, że złożoność obliczeń F i Kołmogorowa dotyczy lg | N | bitów, ponieważ można na stałe zakodować wartość iF={fi:iN}fifi(x)=1i=xfi(x)=0ixfilg|N|iw kodzie źródłowym, a następnie wystarczy prosta instrukcja warunkowa (dodatkowa ).O(1)

Jednakże, nie można odróżnić z funkcji all-zer chyba go przetestować na wejściu í . Nie można odróżnić f I od f j chyba przetestować na wejściu I lub j . Dlatego trzeba ocenić f wcale | N | Wejścia, aby jednoznacznie określić, które f I mamy do czynienia. (OK, technicznie, trzeba ocenić go na | N | - 1 wejść, ale co tam).fiififjijf|N|fi|N|1


0

Możesz ustawić program dowolnie długo. Biorąc pod uwagę każdy program, możesz zdecydować, czy jego język jest równoważny z językiem tego programu. Nie możesz tego zrobić według twierdzenia Rice'a.


1
Masz rację, że pomysł sprawdzenia programu przez uruchomienie go w kilku instancjach nie będzie w ogóle działał.
Tsuyoshi Ito
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.