Чи існує повне набране лямбда числення Тюрінга?


Відповіді:


37

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

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

ΓМ:

Більш практично, статично типізовані функціональні мови програмування мають в своїй основі типізоване обчислення лямбда, що дозволяє добре набирати комбінатор фіксованих точок . Наприклад, почніть з просто набраного лямбда-числення (або системи типу ML, або системи F, або будь-якої іншої системи типу на ваш вибір) і додайте правило, яке створює певний комбінатор точок, наприклад добре набрана. Правила, представлені вище, досить незграбні, оскільки вони вносять такі терміни, якΓ f : T TY=λf.(λх.f(хх))(λх.f(хх)) Y

Γf:ТТΓYf:ТΓf:ТТΓ(λх.f(хх))(λх.f(хх)):Т
Yf добре набрані, навіть якщо їх складові не надруковані - вони не є повністю композиційними. Просте виправлення - додати комбінатор точок фіксації як константа мови та надати для нього правило дельти; тоді простою справою є система типу та семантика скорочення із збереженням типу . Ви відійдете від чистого обчислення лямбда в царство обчислення лямбда з константами.
Γвиправити:(ТТ)Твиправитиff(виправитиf)

Дотримуючись чистого обчислення лямбда, цікавою системою типу є обчислення лямбда з типами перетину.

ΓМ:Т1ΓМ:Т2ΓМ:Т1Т2(Я)ΓМ:(Я)

Типи перетину мають цікаві властивості щодо нормалізації:

  • Лямбда-термін можна вводити, не використовуючи правило правило, якщо воно сильно нормалізується.Я
  • Лямбда-термін допускає тип, що не містить iff, він має нормальну форму.

Див. Характеристика лямбда-термінів, які мають типи об'єднання для ознайомлення з тим, чому типи перетину мають таку чудову область.

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

Зауваження до назв правил та : вони не мають формального значення, але їх вибирають свідомо. означає «введення», тому що ці правила введення - вони вводять символ ( або ) в тип нижче лінії. Подвійно ви знайдете правила усунення, коли символ з’являється над рядком, але не нижче. Наприклад, правило ввести перевірку лямбда-виразу в просто набраному лямбда-числі - це правило введення для , а правило для введення перевірки програми - це правило усунення для . (Я)(Я)Я

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