Теорія реалізаційності: різниця у потужності між обчисленнями Лямбда та машинами Тюрінга


48

У мене є три споріднених підпитання, які виділені пунктами кулі внизу (ні, їх не вдалося розділити, якщо вам цікаво). Андрій Бауер писав тут , що деякі функції можна реалізувати за допомогою машини Тьюрінга, але не через лямбда-числення. Ключовим кроком його міркувань є:

Однак, якщо ми використовуємо обчислення лямбда, тоді [програма] c повинна обчислити число, що представляє собою машину Тюрінга з лямбда-терміна, що представляє функцію f. Це неможливо зробити (я можу пояснити, чому, якщо ви ставите це окремим питанням).

  • Я хотів би побачити пояснення / неофіційне підтвердження.

Я не бачу, як тут застосувати теорему Райса; було б застосовано до проблеми "чи є ця машина Turing та цей лямбда-термін L еквівалент?", оскільки застосування цього предиката до еквівалентних термінів дає той самий результат. Однак необхідна функція може обчислити різні, але еквівалентні, ТМ для різних, але еквівалентних лямбда-термінів.

  • Крім того, якщо проблема полягає в самоаналізу лямбда-терміна, я вважаю, що передача Gödel-кодування лямбда-терміна також буде прийнятною, чи не так?

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

  • Але оскільки тут лямбда-числення не може вирішити проблему, пов’язану з Тьюрінгом, машина, мені цікаво, чи можна визначити подібну проблему для обчислення лямбда і довести її нерозв'язною для машин Тьюрінга, чи насправді різниця у потужності на користь Машини Тьюрінга (що мене здивувало б).

Відповіді:


56

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

Основна ідея полягає в тому, що теза Церкви Тюрінга стосується лише функцій від - і для обчислення є більше, ніж це! Зокрема, коли ми пишемо програми, ми використовуємо функції вищого типу (наприклад, ).NN(NN)N

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

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

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

EDIT: Ось приклад функції, визначеної в PCF, але не в кодуванні TM + Goedel. Я оголошу isAlwaysTrueфункцію

 isAlwaysTrue : ((unit → bool) → bool) → bool

який повинен повернути true, якщо його аргумент ігнорує його аргумент і завжди повертає true, повинен повернути false, якщо його аргумент повертає false на будь-яких входах, і переходить у цикл, якщо його аргумент переходить у цикл на будь-яких входах. Ми можемо визначити цю функцію досить легко так:

isAlwaysTrue p = p (λ(). true) ∧ p (λ(). false) ∧ p (λ(). ⊥)

де є циклічне обчислення і є оператором на булевих. Це працює тому, що unit → boolв PCF є лише три мешканці , і тому ми можемо їх вичерпно перерахувати. Однак у моделі стилю кодування TM + Goedel pможна перевірити, як довго триває його аргумент для повернення відповіді та повернення різних відповідей на основі цього. Тож реалізація isAlwaysTrueз ТМ не відповідала б специфікації.


1
це відмінне опитування. дякую за посилання!
Суреш Венкат

Я щойно зрозумів, що забув прийняти відповідь, хоча мав намір прийняти вашу. Вибачте!
Blaisorblade

"Різниця в кодуванні означає, що ви можете проаналізувати синтаксис аргументу за допомогою кодування у стилі TM, а ви не можете зі стандартним представленням лямбда-числення". Крім того, те, що ви говорите, здається, говорить про те, що HOL - це більше, ніж теорія набраного лямбдального числення, це більше, ніж це?
Hibou57

Також про це: cs.virginia.edu/~evans/cs150/classes/class39/lecture39.pdf . Це в чомусь неправильно?
Hibou57

Шановний Ніл, чи маєш ти приклад функції, яка може бути реалізована в моделі обчислення лямбда, але не в моделі Тьюрінга?
Інго Блешшмідт

29

Що сказав Ніл, а також наступне.

Я хотів би підкреслити ( знову , знову і знову ), що подання вводу та випуску має значення. Якщо нам дозволяють змінювати уявлення, ми можемо досягти практично будь-чого (наприклад, зробити будь-яку задану функцію обчислювальною). Так, переходячи від представлення функцій на -термінах в уявлення чисел Геделя це НЕ прийнятний , якщо наша модель обчислень є -ісчісленіе (бо тоді операція каррінг стає неспроможним за допомогою -calculus).NNλλλ

Заява, реалізована в моделі -term, але не в моделі машини Тюрінга, - "не кожна функція має код Геделя", яка є якоюсь дурною. Я спробую придумати кращий і відредагувати цю відповідь.λNN


Редагувати 07.10.2013: Ось те, що я мав на увазі під «каррі стає непридатним». Припустимо, ми використовуємо нетипізований -calculus як нашу обчислювальну модель, але тоді ми вирішуємо, що ми повинні представляти карти з кодами Геделя (машин Тьюрінга, кодованих як церковні цифри). Звучить нешкідливо, правда? Зрештою, ми вважаємо, що мантра "машини Тюрінга і розрахунок рівноцінні".λNNλ

Ну а для того, щоб це нове представлення насправді було дійсним представленням , нам також потрібно реалізувати додаток і currying (адже "представляти функції" означає те саме, що і "представляти експоненційний об’єкт "). В Зокрема, ми повинні -term таким чином, що кожного разу, коли Черч представляє , то представлений . (Тут я пишу для церковного числа, що представляє число .) ТакийNNλappn¯f:NNf(k)appn¯k¯n¯nappлегко доступний, оскільки він становить інтерпретатор для машин Тьюрінга, реалізований в -calculus.λ

Але як щодо каррі? Для цього нам потрібно наступне. Припустимо, - це представлений набір. З огляду на будь-яку карту обчислену -term , нам потрібно показати, що переміщення також обчислюється деякими -term . Але розглянемо приклад, коли - це набір o fmaps представлений -terms, а - додаток. Тоді буде картою, яка діє як ідентичністьf : X × NN λ t ˜ f : X ( NN ) λ s X NN λ f ˜ f NN λ λ NN λXf:X×NNλtf~:X(NN)λsXNNλff~NN, але його реалізатор - це -терм, який перетворює -терміси, що представляють карти у відповідні коди Геделя. Такого -терміна не існує (наприклад, тому що це було б розривом у топологічній семантичній моделі).λλNNλ

Ви можете спробувати заперечити, що я не повинен був використовувати конкретний представлений набір карт представлений -terms, тому що ми "погодилися", що вони повинні бути представлені кодами Геделя . Але ти помилився б. Перш за все, я міг би використати інший із складнішим доказом, який би ухилився від вас, але все-таки досягти того ж результату. По-друге, є в категорії, а визначення експоненціальної вимагає того, щоб робота по догляду за всіма об'єктами. Ви повинні поважати категорію. Ви не можете просто випадковим чином розрізати м'яч і вивезти деякі предмети (ну, можна, але тоді ви м'ясником).NN λ X XXNNλXX


2
все ще чекаю на той кращий приклад ...
Жак Каретт

1
Ну, я можу придумати багато тверджень, які можна реалізувати за допомогою машин Тьюрінга, але не з -terms. Я гадаю, ти хочеш навпаки. Хммм. λ
Андрій Бауер

Я не розумію, як curry може стати непорушним. Ви повинні мати можливість повторно використовувати теорему smn, оскільки її доведення будує функцію на даних першого порядку (натурали). За тезою Церкви Тьюрінга, така поведінка щодо природників може бути реалізована як лямбда-термін (який використовує внутрішні функції внутрішньо, але я не бачу, як це заборонено). Можна аналогічно довести теорему utm, тому відповідно до вашого поста ми повинні зробити це. Що я пропускаю?
Blaisorblade

1
Я відповів у відповіді, що це означає, що currying стає непорушним, а саме те, що запропонований об'єкт не є експоненціальним у категорії представлених наборів.
Андрій Бауер

Дякую за пояснення! На жаль, я не можу повторно проголосувати. Я можу дотримуватися більшості технічних деталей; Я не знайомий з топологічними моделями, але я все одно знайомий із тим, що "ви не можете перевіряти функції у функціональному програмуванні / λ-числення". Ваш останній абзац також пояснює, чому я не можу пройти smn, тому що вказівка, отримана smn, знову створює коди Gödel, а не стандартні функції, як вам потрібно. Я буду розмірковувати над цим абзацом.
Blaisorblade
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.