Чому функціональні мови Тьюрінга завершені?


22

Можливо, моє обмежене розуміння теми є неправильним, але це те, що я розумію поки що:

  • Функціональне програмування засноване на обчисленні лямбда, сформульованому Церквою Алонцо.

  • Імперативне програмування базується на моделі машини Тьюрінга, зробленої Аланом Тьюрінгом, студентом Церкви.

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

Якщо функціональне програмування базується на обчисленні Лямбда, а не на машині Тьюрінга, то чому деякі (або всі) з них описуються як Тьюрінг завершеними, а не повними Ламбда чи чимось подібним? Чи є термін "повнота Тьюрінга" яким-небудь особливим для машин Тьюрінга, чи це просто слово?

Нарешті, якщо імперативні мови базуються на машині Тьюрінга, а комп'ютери - це в основному машини Тьюрінга, без нескінченної пам'яті, чи означає це, що вони працюють краще, ніж функціональні мови програмування на наших сучасних ПК?

Якщо це так, то що було б еквівалентом машини для числення лямбда?

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


6
Не відповідь, але ви згадали, що не всі версії обчислення лямбда є Turing завершеними. Простий набраний лямбда-обчислення та більш міцні версії Coq і Agda, засновані на перевірку припинення, не є Turing завершеними (тому що вони мають вирішальні проблеми зупинки). Сильно типізовані мови, такі як Haskell і SML, обходять це, дозволяючи довільну рекурсію за допомогою комбінатора точок, термін з типом (a -> a) -> a.
jmite

Просто так неправильно говорити "визначено, що Тьюрінг завершений". Чи можемо ми змінити назву?
Андрій Бауер

@AndrejBauer Дякую за редагування заголовка, але мені цікаво, чому це ( визначено як Повернення завершено ) не так? Це тому, що це прикметник? Чи описане було б краще слово, ніж визначати?
Абдул

1
@Abdul Ну, проблема - у слові "визначено". Якщо ви говорите, що "функціональні мови визначені як Тьюрінг завершені", ви говорите, що або визначення "функціональної мови", або визначення "цілінг Тьюрінга" означає, що функціональні мови є Тьюрінгом завершеними. Власне кажучи, жодне визначення цього не говорить.
Tanner Swett

Відповіді:


20

Коротше кажучи :

Що характеризує імперативні мови програмування як наближені до машин Тьюрінга і до звичайних комп'ютерів, таких як ПК (самі ближче до машин з випадковим доступом (ОЗУ), а не до машини Тьюрінга)) - це концепція явної пам'яті, яку можна змінити для зберігання (проміжні результати ). Це автоматичний вигляд обчислень, з поняттям стану (що включає керування кінцевим станом і вміст пам'яті), яке може змінюватися в міру продовження обчислень.

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

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

Посилання на Тьюрінга як мірку обчислюваності виходить, мабуть, з того, що його модель, машина Тьюрінга була найближчою до цього обмеження фізичної реалізації, що зробило його більш інтуїтивно зрозумілою моделлю обчислення.

Подальші міркування :

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

Всі вони відображають деякі аспекти різних методик, які використовуються математиками для вираження чи проведення обчислень. І більшість з них певною мірою використовуються як основа деяких мов програмування (наприклад, Snobol для систем переписування, APL для комбінаторів, Lisp / Схема для лямбда-числення) і часто можуть поєднуватися різними способами в сучасних мовах програмування.

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

Назва могла бути різною. Вибір машини Тюрінга (ТМ) як еталону, ймовірно, пов'язаний з тим, що це, мабуть, найпростіша з цих моделей, імітуючи уважно (хоча й спрощено) спосіб обчислення людини і досить простий у здійсненні (в обмеженій обмеженій формі) ) як фізичний пристрій, настільки, що машини Тьюрінга були побудовані з наборами Lego . Основна ідея не вимагає математичної витонченості. Ймовірно, простота та реалізація моделі надали їй таке референтне положення.

У той час, коли Алан Тьюрінг створив свій обчислювальний пристрій, на столі були складені інші пропозиції, які слугували формальним визначенням обчислюваності, що є вирішальним питанням для основ математики (див. Entscheidungsproblem ). Пропозиція Тьюрінга тогочасними експертами розглядалася як одна з найбільш переконливо охоплених відомих робіт щодо того, якою має бути обчислюваність (див. « Обчислюваність та рекурсія» , Р. І. Соаре, 1996, див. Розділ 3.2). Різні пропозиції виявилися рівнозначними, але Тьюрінг був більш переконливим. [з коментарів Юваля Філімуса]

Слід зазначити, що, з апаратної точки зору, наші комп'ютери - це не машини Тьюрінга, а скоріше те, що називається машинами з випадковим доступом (ОЗП) , які також є Тьюрінгом завершеними.

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

Це швидко призвело до розробки моделей обчислень вищого рівня, які почали змішувати до нього різноманітні обчислювальні методи, такі як виклики підпрограми та функцій, іменування місця пам'яті, розміщення імен, кількісне визначення та фіктивні змінні, які вже використовуються в певній формі в математиці та логіці і навіть дуже абстрактних поняттях, таких як рефлексія ( Lisp 1958).

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

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

Тепер ви ніколи не повинні дивитися на комп'ютер як на сире обладнання. Він містить булеву схему, яка робить дуже елементарну обробку. Але значна частина цього рухається мікропрограмами всередині комп'ютера, про які ви ніколи не дізнаєтесь. Тоді у вас є операційна система, яка змушує ваш комп'ютер виглядати навіть інакше, ніж апаратне забезпечення. Крім того, у вас може бути віртуальна машина, яка виконує байт-код, а потім мова високого рівня, наприклад, Pyva і Jathon, або Haskell або OCaml, який можна скласти в байт-код.

На кожному рівні ви бачите іншу модель обчислень. Дуже важко відокремити апаратний рівень від програмного рівня, таким чином призначити машині конкретну обчислювальну модель. І оскільки вони всі перекладаються, ідея про остаточну модель обчислення апаратних засобів є в значній мірі ілюзією.

Машина обчислення лямбда існує: це комп’ютер, який може зменшити вираження лямбда-числення. Оголошення, яке легко зробити.

Про спеціалізовані машинні архітектури

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

До них належать

  • Burroughs B5000 і його наступники (1960 - е), які були адаптовані для ефективної реалізації рекурсії, представленої в свій час на мові Алгол 60 .

  • На початку 1980-х Western Digital WD / 9000 Pascal MicroEngine , машини, засновані на мікропрограмованому байт-коді, спеціалізованому для мови програмування Pascal .

  • Кілька марок машин Lisp у 1980-х роках.

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

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

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


Вибір машини Тьюрінга в якості посилання, наскільки це фактично зроблено, мотивується здебільшого історично: Тьюрінг першим придумав задовольняюче визначення обчислюваності.
Yuval Filmus

@YuvalFilmus І чому це було більше "задовольняючим визначенням обчислюваності".
бабу

Саме так подумав Гедель. Тут у Боба Соара є кілька слів: cs.uchicago.edu/~soare/Publications/compute.ps .
Yuval Filmus

@YuvalFilmus Це 46 сторінок. Я маю на увазі, я навожу кілька причин, чому це повинно бути більш задоволеним. Вони можуть бути наївними. Якщо є більше переконливих, які пояснюють успіх, то це буде чітко згадуватися.
бабу

Подивіться на Розділ 3.2. Були попередні визначення обчислюваності, але вони не були переконливими. Тюрінг був першим, хто був переконливим, принаймні для деяких ключових людей.
Yuval Filmus

21

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

Імперативні мови не засновані на машинах Тьюрінга. Вони засновані на машинах оперативної пам'яті. Ваш комп'ютер - це оперативна пам'ять. Машини Тьюрінга є приємною теоретичною моделлю, але вони не дуже хороші моделі реальних комп'ютерів.

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


"Машини Тьюрінга - це приємна теоретична модель, але вони не дуже хороша модель фактичних комп'ютерів". За винятком нестачі нескінченної пам’яті, які ще є причини, що вона не є хорошою моделлю для фактичних комп’ютерів? Крім того, чи правильно я вважаю, що функціональні мови базуються на лямбдальному обчисленні?
Абдул

5
λ

11
Імперативні мови , як правило, дозволяють доступи масиву в постійна час, в C A[x]. Машини Тьюрінга не можуть цього робити постійно. Ось чому навіть у теоретичній інформатиці час роботи алгоритмів аналізується на моделі машини ОЗУ, а не на моделі машини Тьюрінга.
Yuval Filmus

14
Власне, машини Тьюрінга - це користь власне комп'ютерів ... за винятком того, що коли Тьюрінг писав свою роботу, "комп'ютер" був описом роботи для людини, яка працює з ручкою та папером. Голова для читання / запису - це модель ручки, стрічка - це модель нескінченної стопки аркушів паперу (просто розріжте їх на невеликі смужки і склейте їх разом), алфавіт - це модель, ну, наш алфавіт , а кінцеві переходи є моделлю обмеженої кількості правил, які можна зберегти в голові.
Йорг W Міттаг

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

10

Оскільки "повний Тьюрінг" просто означає "він може обчислити все, що може обчислити машина Тьюрінга".


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

1
@YuvalFilmus: його можна було б назвати мамою Алана Тьюрінга, але твердження тут полягає в тому, що це не ;-)
Стів Джессоп

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

2
Це коротко і мило, але, можливо, трохи занадто коротко. Що робить "машина" Тьюрінга? Ну і серед речей, які вони "роблять", - це читання та запис стрічок, а лямбда-вирази цього не роблять. Краще було б "Моделі обчислень, повні за Тьюрінгом, дозволяють обчислювати всі обчислювані функції".
Теодор Норвелл

@TheodoreNorvell Я думаю, що ваш коментар схожий на те, що я думав. Я знав, що обчислення лямбда і машина Тьюрінга є рівноцінними за потужністю, але різні за механізмом (і тепер я дізнався, що існують інші), але мені було цікаво, чи термін «повнота Тюрінга» якимось чином особливий для машини Тьюрінга, або якби це було лише ім'я.
Абдул

6

Здається, на одне із запитань ще не відповіли:

Якщо це так, то що було б еквівалентом машини для числення лямбда?

Lisp машина . Обладнання, розроблене спеціально для підрахунку моделі LISP для обчислення. Стаття у Вікіпедії розповідає про комерційну продукцію, але мій директор навчання в університеті мав вручну в своєму кабінеті.


0

Функціональні мови у формі обчислення лямбда, винайдені Церквою, були доведені Тьюрінгом завершеними. це фактичний математичний доказ, який можна знайти в опублікованих наукових працях шляхом "зменшення" обчислення лямбда до операцій / розрахунків на машинах Тьюрінга. Приблизно в часі газети Turings 1936 р. і після цього були запропоновані / розповсюджені різні "всебічні" моделі обчислення. він не відразу зрозумів , що всі вони були еквівалентні. докази, що вони були рівнозначними, були опубліковані приблизно в кінці 1930-х та 1940-х роках після папери Turings.

Машина Тьюрінга концептуально (але не функціонально) простіша за інші моделі, і це, мабуть, значна частина причини того, що повнота Тьюрінга названа його ім'ям. інші ідеї, такі як обчислення лямбда, є більш абстрактними і починаються / зароджуються переважно з теорії математики / логіки. Тьюрінг запропонував теоретичну машину . «Машина» буквально «фізичний пристрій». його чудовий концептуальний об'єкт / конструкція, що з’єднує / об'єднує два різні світи, прикладний та теоретичний. він надає нове абстрактне значення фізичним особам, наприклад, "час і простір". не випадково математики іноді посилаються на "технології", "машини" або "пристрої" доказів. Тьюрінгу вдалося геніально сплавити все це у своєму концептуальному винаході. його визначення досить просте, але аналіз його виявляє деякі найнеординарніші поведінки, що виникали коли-небудь в історії наукової / математичної думки. Тьюрінг був першим вченим / математиком, який зрозумів значну частину цього значення / сили / потенціалу.


Іншими словами, можна сказати, що Тьюрінг був першим, хто визначив / «визнав» значення явища повноти Тьюрінга і, в свою чергу, КС «визнає» його за це монументальне досягнення завдяки використанню терміна.
vzn

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