Чому люди можуть вирішити певні проблеми, які не можна визначити?


44

Узгодження шаблону високого порядку - це нерозв'язна проблема. Це означає, що не існує алгоритму, який, з огляду на рівняння a => b, де aі bє відкритими термінами на просто набраному лямбдальному обчисленні, знаходить заміну Sтаким чином, що aS => bSтам, де =>розшифровується "має однакову Bn нормальну форму". Однак люди можуть вирішити цю проблему ефективно. Наприклад, враховуючи таку проблему:

a = (λt . t 
    (F (λ f x . (f (f (f x))))) 
    (F (λ f x . (f (f x)))))
b = (λ t . t
    (λ f x . (f (f (f (f (f (f x)))))))
    (λ f x . (f (f (f (f x))))))

Будь-яка людина, яка має достатньо знань щодо обчислення лямбда, зможе помітити, Fце "подвійна" функція для церковних чисел, швидко приходячи до рішення, яке

 F = (λ a b c . (a b (a b c)))

Моє запитання: якщо ця проблема не може бути вирішена, як люди можуть швидко та без зусиль її вирішити?


24
"люди можуть ефективно вирішити цю проблему" - необхідне цитування. Які ваші свідчення для цього? Показ одного прикладу, де ви можете це ефективно вирішити, не означає, що ви можете його ефективно вирішити для всіх випадків проблеми. Ви не можете довести "X є правдою для всіх X", показавши один приклад X, де X є істинним.
DW

33
Проблема не визначена означає, що не існує алгоритму, який би відповідав «так» або «ні» для кожного примірника проблеми. Це не означає, що можна знайти алгоритм, який вирішує деякі (або багато) випадки проблеми. [Хе. Як відповів DW, коли я писав це зауваження.]
Рік Декер

23
Вирішити цю проблему? Я навіть не розумію цієї проблеми.
MikeTheLiar

2
Я зрозумів, що це: це рішення є спеціальним рішенням. Кожен екземпляр проблеми має один - у більшості випадків не так легко мотивується, як у вашому прикладі, але ви завжди можете сказати "якщо ви отримаєте екземпляр X, виведіть Y", оскільки алгоритм можна судити лише на основі правильності - але жорстке кодування всіх таких рішень таким чином не призводить до обмеженої процедури (що є єдиним розумним видом, і, таким чином, те, що зазвичай мається на увазі). В іншому випадку, для того, щоб проблема була вирішена, вам не дозволяється бачити, який примірник наведено перед вибором стратегії алгоритму.
Вандермонде

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

Відповіді:


78

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

Невизначене означає "не існує алгоритму, який міг би вирішити всі екземпляри і який завжди припиняється". Ще може бути алгоритм, який може вирішити деякі випадки , навіть для невирішеної проблеми.

Тож немає протиріччя.


23
@srvm, так, це означає це. Наприклад, ось дурний приклад комп’ютерного алгоритму: "якщо вхід - це саме той приклад, поданий у вашому запитанні, тоді виведіть F = (λ a b c . (a b (a b c)))і зупиніть". Це комп’ютерний алгоритм, який вирішує проблему для деяких випадків (зокрема, саме для 1 випадку). Так, це нормально - задавати нове запитання на зразок цього, здається, правильно зробити. Як завжди, будь ласка, розкажіть, які дослідження ви зробили в питанні (слід зробити кілька, перш ніж задавати питання).
DW

10
Там, де справді важкі проблеми, стверджується, що навіть у NP повних проблем більшість випадків можна вирішити легко. Це відповідає моєму досвіду. Зазвичай є особливості проблеми, які роблять (принаймні частину) рішення очевидним. У важких з них ретельно збалансовані між успіхом і невдачею, але не багато хто з них.
Росс Мілікан

3
@srvm, якщо ви задумаєтесь над цим, вирішення складних проблем, таких, як це в особливих випадках , саме це має зробити оптимізатор.
Корт Аммон

2
@srvm: Прекрасним прикладом нерозв'язної проблеми, яку ми вирішуємо, що комп’ютери вирішуються майже щодня, - це проблема зупинки. Ми знаємо, що проблема зупинки не вирішена, але ми все ще зберігаємось у написанні вкладишів, статичних аналізаторів та компіляторів, які намагаються виявити небажані нескінченні петлі. Як ми це робимо, "правилом". Тобто, ми знаємо з людського досвіду (не алгоритм), що певні види коду потрапляють у нескінченний цикл. Тому ми просимо комп’ютер шукати відомі нам випадки. Ми знаємо, що такі програми ніколи не вловлюють усіх помилок. Але це краще, ніж нічого.
slebetman

2
для нащадків, нове посилання на: Де справді важкі проблеми
Алекс Мур-Ніємі

3

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

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

Неважко створити приклади, які змушують цих систем задихатися, і здається, що люди особливо добре ставляться до подібних проблем. Створення алгоритмів, наближених до людини за здатністю вирішувати подібні проблеми, є метою автоматичного доведення теореми та штучного інтелекту (для більш амбітних / нереалістичних спроб).


1

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


8
Це не лише переказ існуючої відповіді? Я знаю, що я критикував більшість ваших відповідей, тому наступне може звучати нещиро, але це не так. Дійсно, що ви хочете зробити свій внесок на сайт. Було б дійсно чудово, якби ви могли допомогти нам відповісти на деякі з наших 2500 питань без відповіді , а не на запитання, де ми вже маємо відповідь, де сказано все, що ви хочете сказати. Дякую!
Девід Річербі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.