Чи може тестування показати відсутність помилок?


18

(n+1) бали необхідні для однозначного визначення многочлена ступеняn ; наприклад, дві точки в площині визначають рівно одну пряму.

Скільки балів потрібно, щоб однозначно визначити обчислювальну функцію f:NN , враховуючи довжину програми, яка обчислює f у фіксованій мові? (тобто пов'язана зі складністю Колмогорова f ).

Ідея полягає в тому, що, принаймні теоретично, можна було б довести правильність програми, зробивши достатньо тестів.

Якщо є програма P довжини L , яка обчислює f , існує обмеження на кількість функцій , які можуть бути обчислені з довжиною джерела не більше ніж L .

Тому потрібно було лише "довести", що:

  • f можнаобчислити з довжиною джерелаL
  • P не обчислює жодну іншу функцію, яку можна обчислити в байтах або менше (шляхом тестування)L

Ця ідея, мабуть, не має практичних наслідків (межі, безумовно, повинні бути експоненціальними).


4
Припустимо , що ваші опису функцій наведені в двійковій системі , тобто не більше з довжини опису в більшості L . Але тепер проблема полягає в тому, що на відміну від многочленів, дві різні обчислювані функції можуть легко приймати однакові значення на нескінченній кількості входів. Таким чином, ваша проблема мені здається неможливою. 2L+11L
Бруно

Я розумію вашу ідею. Але дві чітко обчислювані функції довжини опису <= L повинні відрізнятися в якийсь момент (для деяких n0). Чи можна знайти значення n0, заданого L?
pbaren

4
Ви можете знайти таку точку, якщо вона існує, просто обчисліть функції всіх значень, використовуючи дотавлирование, але якщо їх немає, ви ніколи не дізнаєтесь, це не можна визначити, тому що довжина верхньої межі на розмір програми нічого не змінює.
Каве

7
Насправді, @Kaveh, за вашим власним аргументом, верхня межа дійсно розповідає вам про те, де вони відрізняються, а не щось обчислюване. Якщо K ( f ) L і f g , то K ( x ) 2 L + c, де c - довжина описаного алгоритму, який ви (@Kaveh) описав, а x - перша рядок, на якій f і g відрізняються. Зокрема, xK(f)K(f)LfgK(x)2L+ccxfgxє обмеженою деякою функцією зайнятості бобра, що дорівнює . Однак знайти все x таким, що K ( x ) 2 L + c або обчислити BB, все ще є незрівнянним. Отже, @pbaren: існує обмежене, але це набагато більше, ніж просто експоненціальне, воно незаперечне. 2L+cxK(x)2L+c
Джошуа Грохов

6
@Kaveh: Це те, що я мав на увазі під функцією "зайнятий бобер": нехай - це довжина найдовшої струни, складність якої у Колмогорова (виправити універсальну машину) становить не більше n . Таких рядків є лише кінцево багато, тому це чітко визначено до вибору універсальної машини. Тоді B B ( 2 L + c ) є верхньою межею: якщо дві (загально обчислювані) функції складності Колмогорова не більше L узгоджуються по всіх точках довжиною B B ( 2 L + c )BB(n)nBB(2L+c)LBB(2L+c), то вони рівні.
Джошуа Грохов

Відповіді:


9

(Це малося на увазі як коментар, але пішло довго). Дуже цікаве запитання. Якщо ви готові задуматися про інші заходи складності, окрім Колмогорова, то в теорії навчання є кілька відповідей, які можуть вас задовольнити. Я залишаю це для експертів у цій галузі.

Наприклад, якщо я не помиляюсь, у «Теорії вивченого» Валіант довів, що булева функція може бути реконструйована, отримавши поліноміальне число «позитивних точок» на розмір її формули k-CNF (для будь-якого фіксованого k , і я маю на увазі під "позитивними точками" ті форми ).(x1,,xn,1)

У TAOCP 7.2.1.6 Кнута дивовижно показано (використовуючи візерунок ялинки), що для реконструкції монтової булевої функції (тобто не зменшення в кожній змінній) вам потрібно точно балів.(n+1n/2+1)


7

Для продовження відповіді Дейго, стандартні межі складності вибірки з теорії навчання говорять вам, що якщо ви задоволені тим, що знайдете програму, яка є "приблизно правильною", вам взагалі не потрібно намагатися дуже багато балів. Скажімо, ми кодуємо програми у двійковій формі, так що є лише програми довжини d. Давайте припустимо також , що існує деякий розподіл по вхідних прикладів D . Можливо, ваша мета - знайти програму, для якої ви впевнені, що майже вірна ("Можливо, приблизно коректна", тобто як у моделі навчання Valiants PAC). Тобто ви хочете запустити алгоритм, який займе невелику кількість вибірок x D разом з f ( x )2dDxDf(x)І буде з ймовірністю , щонайменше вихідний яка - то програма P , яка збігається з F , щонайменше, ( 1 - е ) частки входів , взятих з D . (1δ)Pf(1ϵ)D

Ми просто намалюємо приклади x D та виведемо будь-яку програму P довжиною d, яка відповідає всім прикладам f . (Одне гарантовано існує, оскільки ми припускаємо, що f має складність Колмогорова не більше г ) ...mxDPdffd

Яка ймовірність того, що певна програма яка не погоджується з f на більш ніж ϵ частці прикладів, відповідає m обраним нами прикладам? Це не більше ( 1 - ϵ ) м . Ми хотіли б, щоб ця ймовірність була не більше δ / 2 d, щоб ми могли взяти союз, пов'язаний над усімPfϵm(1ϵ)mδ/2dпрограмами 2 d , і сказати, що з вірогідністю принаймні 1 - δ жодна "погана" програма не відповідає нашим накресленим прикладам . Розв’язуючи, ми бачимо, що достатньо взяти лише m 12d1δ приклади. (тобто лише лінійно багато в складності Колмогорова f ...)

m1ϵ(d+log1/δ)
f

До речі, подібні аргументи можуть бути використані для обгрунтування "бритви Оккама": з огляду на фіксовану кількість спостережень, серед усіх теорій, що їх пояснюють, слід вибрати ту, що має найменшу складність Колмогорова, оскільки є найменший шанс на перевищення.

Звичайно, якщо ви хочете перевірити єдину фіксовану програму таким чином, вам потрібен лише приклади ( 1 / δ ) / ϵ ) ...O(log(1/δ)/ϵ)


3

Ось тривіальна відповідь: припустимо, що , тоді вам потрібно знати значення f взагалі | N | вказує на однозначне визначення f . Тому підхід, який ви накреслюєте, зовсім не допомагає вам, якщо ви якось не знаєте, що довжина L програми надзвичайно коротка: набагато коротша, ніж lg | N | біт.Llg|N|f|N|fLlg|N|

Розглянемо сімейство функцій , де f i визначено функцією f i ( x ) = 1, якщо i = x і f i ( x ) = 0, якщо i x . Зауважте, що складність обчислювальних функцій Колмогорова f i становить приблизно lg | N | біт, оскільки ви можете жорстко кодувати значення iF={fi:iN}fifi(x)=1i=xfi(x)=0ixfilg|N|iу вихідному коді, і тоді все, що вам потрібно, - це просте умовне твердження ( extra).O(1)

Однак ви не можете відрізнити від функції нуля, якщо ви не перевірите її на вході i . Ви не можете відрізнити f i від f j, якщо ви не перевірите на вході i або j . Таким чином, ви повинні оцінити п на всіх | N | вхідні дані, щоб однозначно визначити, з якими ф я ми маємо справу. (Гаразд, технічно, вам потрібно оцінити це на | N | - 1 входах, але що завгодно.)fiififjijf|N|fi|N|1


0

Ви можете зробити програму довільно довгою. Отже, з огляду на будь-яку програму, ви можете вирішити, чи є її мова еквівалентною мові цієї програми. Ви не можете цього зробити за теоремою Райса.


1
У вас є дійсна думка, що ідея перевірити програму, запустивши її в декількох екземплярах, взагалі не буде працювати.
Tsuyoshi Ito
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.