Чи існують якісь цілі введені лямбда-калькуляції Тьюрінга? Якщо так, то які кілька прикладів?
Чи існують якісь цілі введені лямбда-калькуляції Тьюрінга? Якщо так, то які кілька прикладів?
Відповіді:
Так, авжеж. Багато набраних лямбда-обчислень приймають лише сильно нормалізуючі умови за конструкцією, тому вони не можуть виражати довільних обчислень. Але типовою системою може бути все що завгодно; зробіть його досить широким, і ви можете висловити всі детерміновані обчислення.
Система тривіального типу, що включає фрагмент обчислення лямбда-повного Тьюрінга, є тією, яка приймає кожен термін як добре набраний (з верхнім типом ).
Більш практично, статично типізовані функціональні мови програмування мають в своїй основі типізоване обчислення лямбда, що дозволяє добре набирати комбінатор фіксованих точок . Наприклад, почніть з просто набраного лямбда-числення (або системи типу ML, або системи F, або будь-якої іншої системи типу на ваш вибір) і додайте правило, яке створює певний комбінатор точок, наприклад добре набрана. Правила, представлені вище, досить незграбні, оскільки вони вносять такі терміни, якΓ ⊢ f : T → T Y
Дотримуючись чистого обчислення лямбда, цікавою системою типу є обчислення лямбда з типами перетину.
Типи перетину мають цікаві властивості щодо нормалізації:
Див. Характеристика лямбда-термінів, які мають типи об'єднання для ознайомлення з тим, чому типи перетину мають таку чудову область.
Таким чином, у вас є система типів, яка визначає повну мову Тьюрінга (оскільки кожен термін добре набрана), і просту характеристику завершення обчислень. Звичайно, оскільки система цього типу характеризує нормалізацію, вона не вирішується.
Зауваження до назв правил та : вони не мають формального значення, але їх вибирають свідомо. означає «введення», тому що ці правила введення - вони вводять символ ( або ) в тип нижче лінії. Подвійно ви знайдете правила усунення, коли символ з’являється над рядком, але не нижче. Наприклад, правило ввести перевірку лямбда-виразу в просто набраному лямбда-числі - це правило введення для , а правило для введення перевірки програми - це правило усунення для .