Я оспариваю претензию в статье, которую вы читаете. (Мне не платят за это, поэтому я приведу аргументирующий аргумент, а не доказательство.)
Хорошо известно, что, по крайней мере, при уменьшении нормального порядка (он же называется по имени) чистое лямбда-исчисление является тьюрингово-полным. Но если мы посмотрим на основополагающую статью Джона Рейнольдса Определение интерпретаторов для языков программирования высшего порядка , мы увидим, что Рейнольдс подробно обсуждает разницу между вызовом по имени и вызовом по значению. Критическая часть аргумента состоит в том, что для того, чтобы провести правильное различие, мы можем преобразовать программу в стиль продолжения . Преобразование CPS отличается для вызова по необходимости и вызова по значению, но результирующие преобразованные термины могут быть оценены в любом стиле.
Итак, вот вам аргумент: напишите программу лямбда-исчисления, которая имитирует машину Тьюринга, затем преобразует CPS, используя преобразование CBN, и вы можете оценить полученный код, используя стратегию сокращения CBV. Взрыв! Тьюринг.
На практике могу поспорить, что вы можете написать программу CBV для эмуляции машины Тьюринга; вероятно, достаточно выбрать подходящий комбинатор с фиксированной запятой, такой как & Theta; например. (Более известный Y-комбинатор работает только в рамках стратегии сокращения по имени, то есть сокращения в обычном порядке.)
Отказ от ответственности: Я давно не изучал лямбда-исчисление, и я уверен, что в приведенном выше аргументе есть несколько неправильных деталей. Но я уверен в сути. Это был не первый раз, когда я обнаружил что-то явно неправильное в онлайн-ресурсах о теории языка программирования.