Які функції не може обчислювати система F?


28

У цій статті із Вікіпедії про повноту Тьюрінга вказується, що:

Нетипічне обчислення лямбда - це Тьюрінг завершений, але багато типізованих лямбда-розрахунків, включаючи систему F, не є. Значення набраних систем ґрунтується на їх здатності представляти найбільш типові комп'ютерні програми при виявленні більшої кількості помилок.

Що таке приклад загальної обчислювальної функції, яка не піддається системі F ?

Крім того, оскільки hindley-milner - це:

Обмеження системи F

через те, що:

перевірку типу не можна визначити для варіанту в стилі Крірі System F, тобто такого, у якого відсутні явні анотації введення тексту.

Чи означає це, що обчислення лямбда, що лежать в основі систем типу Хіндлі-Мілнер, також не закінчується?

Якщо це правда, оскільки haskell явно завершений, і ми знаємо, що його основою є обчислення лямбда та система типу hindley-milner, які функції, які відсутні в обчисленні лямбда, додаються для того, щоб завершення термінів Haskell завершилося?



Приклад функції, завдяки якій Haskell turing завершується, - це інтерфейс з кодовим кодом.
Трисмегістос

@cody дякую за ваш коментар. Я не знайомий із системою T. Я прав, якщо вважати, що це система T, згадана тут ? як система T порівнює та протиставляє їй систему F?
Майк HR

ПРИМІТКА, на Google в Google system T vs. system Fя знайшов щось, що відповідає моєму остаточному підпиту, який тут перефразовано так: Як haskell додав Turing-повноту до системи F
Майк HR

1
Я думаю, що @Trismegistos порушує цікаве філософське питання: що саме таке Haskell, де його межі?
Мартін Бергер

Відповіді:


45

FNNNX. X(XX)XNNHA2

TFeval:NNtFt. Доведення передбачає варіант діагоналізуючого трюку, який використовується для невирішеності проблеми зупинки. Андрій тут прекрасно пояснює .

λF λ

YY

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


1
Ого, це дивовижна відповідь і відповідає на все прекрасно. Дякую!
Майк HR

"Як і для будь-якої загальної мови програмування ..." Це не зовсім правильно. На моє розуміння, є кілька самоперекладачів для загальної кількості мов, які виключають незавершені програми як неправильні. Дивіться цей документ
jmite

@jmite, як заявлено, моя вимога правильна. Цей документ згадується у пов'язаній дискусії, і Андрій має кілька зауважень у своєму блозі: math.andrej.com/2016/01/04/…
cody

11

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


Спасибі. моє основне опромінення hindley-milner пройшло через haskell, так що, мабуть, я міг припустити, що типи вищого роду були частиною цього. Хіндлі-мілнер просто посилається на умовивід про тип (так, швидше за все, алгоритм W)? чи це щось більше? Я розумію, що є математична основа цього в обчисленні лямбда, я просто намагаюся зрозуміти, де будуть логічні межі між потужною системою типу haskell і якою буде мінімальна реалізація системи "типу Хіндлі-Мілнер".
Майк HR

Примітка. Якщо когось цікавить потужність системи типу haskell, я рекомендую відео Едварда Кметта на хек , який заглиблюється (глибоко) в теорію категорій за допомогою системи типу haskell.
Майк HR

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