В этой статье в Википедии о полноте Тьюринга говорится, что:
Нетипизированное лямбда-исчисление является полным по Тьюрингу, но многие типизированные лямбда-исчисления, включая Систему F, - нет. Ценность типизированных систем основана на их способности представлять наиболее типичные компьютерные программы при обнаружении большего количества ошибок.
Что является примером полной вычислимой функции, которая не вычислима системой F ?
Кроме того, поскольку Хиндли-Милнер это:
Ограничение Системы F
из-за того что:
проверка типов неразрешима для варианта System F в стиле Curry, то есть для варианта, в котором отсутствуют явные аннотации ввода.
Означает ли это, что лямбда-исчисление, лежащее в основе систем типа Хиндли-Милнера, также недостаточно полно?
Если это действительно так, поскольку haskell явно завершен по Тьюрингу, и мы знаем, что его основой являются лямбда-исчисление и система типов Хиндли-Милнера, какие функции, отсутствующие в лямбда-исчислении, добавлены для того, чтобы завершить тьюринг haskell?
источник
system T vs. system F
я нашел кое-что, что отвечает моему последнему подзапросу и перефразируется здесь так: как haskell добавил полноту Тьюринга к Системе FОтветы:
Система довольно выразительна. Как доказано здесь Жираром , функции типа (где определяется как ) являются точно определимыми функциями ( ) во втором порядке арифметики Хейтинга . Обратите внимание, что это то же самое, что и функции, определяемые в арифметике Пеано второго порядка .Н → Н Н ∀ Х . X → ( X → X ) → X N → N H A 2F N→N N ∀X. X→(X→X)→X N→N HA2
Возможно, вы захотите проверить Proofs и Types как более читабельный справочник. Обратите внимание , что это означает , что много программ могут быть записаны в системе F, от функции Аккермана переводчиков для системы Геделя . Как и для любого общего языка программирования (с некоторыми мягкими условиями), система не может реализовать собственный интерпретатор , то есть функцию которая принимает в качестве входного кода для термина системы и возвращает (код для) нормальную форму дляF e v a l : N → N t F tT F eval:N→N t F t , Доказательство включает в себя вариант диагонализирующей уловки, используемой для неразрешимости проблемы остановки. Андрей прекрасно объясняет это здесь .
Чтобы ответить на ваши другие вопросы: языки -calculus, лежащие в основе языков Hindley-Milner (HM), также не являются полными по Тьюрингу. На самом деле она значительно слабее , чем система , ближе выразительность просто напечатанная -исчисления.F λλ F λ
Haskell действительно завершен по Тьюрингу. Наиболее отличительной чертой, позволяющей это (хотя есть и другие), является наличие неограниченной рекурсии : определение любой программы (функции) может относиться к самой программе. Это похоже на добавление комбинатора, как это делается в определении PCF, которое просто набрано, но сохраняет полноту по Тьюрингу с комбинатором.YY Y
Обратите внимание, что существуют другие функции, которые делают Haskell Turing завершенным, но они обычно не считаются частью основного языка, например ссылки на функции, неограниченные типы данных и т. Д.
источник
Несколько вводит в заблуждение утверждение о том, что система печати Хаскелла является «системой типов Хинли-Милнера». Типы Haskell гораздо более мощные, включая, среди прочего, типы с более высоким родом. Действительно, система ввода настолько мощна, что вы можете встраивать языки программирования, полные по Тьюрингу, в систему набора, см. Здесь . Это не единственная причина мощи Хаскелла, сказал Коди о некоторых других.
источник