Який внесок обчислення лямбда в область теорії обчислення?


85

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

  • У чому сенс обчислення лямбда? Навіщо проходити всі ці функції / скорочення? Яка мета?
  • Як результат, мені залишається цікаво: Що конкретно зробив обчислення лямбда для просування теорії КС? Що це за внесок, який дозволив би мені мати «ага» момент розуміння необхідності його існування?
  • Чому обчислення лямбда не висвітлюється в текстах з теорії автоматів? Загальний маршрут - пройти різні автомати, граматики, машини Тьюрінга та класи складності. Обчислення лямбда включається лише до програми для курсів у стилі SICP (можливо, ні?). Але я рідко бачив, щоб це було частиною основної навчальної програми CS. Це означає, що це не все так цінно? Може, ні, і я, можливо, щось тут пропускаю?

Я знаю, що функціональні мови програмування базуються на лямбдальному обчисленні, але я не вважаю це вагомим внеском, оскільки він був створений значно раніше, ніж у нас були мови програмування. Отже, насправді в чому сенс пізнання / розуміння лямбдального обчислення, wrt його застосування / внесок у теорію?


6
Відповідний набір відповідей пояснює різницю в потужності між -calculus і TM: cstheory.stackexchange.com/questions/1117/…λ
Suresh Venkat,


5
Певним чином його внесок полягав у створенні поля. Не забувайте, що Церква спочатку придумала лямбда-числення, але спочатку це не було розглянуто як універсальну модель обчислення.
Dan Hulme

У своїх основних дослідженнях я Functional Programmingобговорював Haskell і трохи Lisp. Наступником цього було те Principles of Programming Languages, що використовувало ML та вводило обчислення лямбда. Як показують деякі відповіді, саме тут належить обчислення лямбда: у класі про мови програмування, набір тексту тощо
Shaz

це питання схожий на взаємозв'язок між ТМ та обчисленням лямбда & також обговорює історичний пріоритет обчислення лямбда
vzn

Відповіді:


96

λ -calculus має дві ключові ролі.

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

  • Це подання доказів у конструктивній логіці.

Це також відоме як листування Кері-Говарда . Спільно, подвійний погляд на -calculus як доказ і як (послідовну, функціональну, вищого порядку) мову програмування, посилений алгебраїчним почуттям -calculus (який не поділяють машини Тьюрінга), призвів до масового передача технологій між логікою, основами математики та програмування. Ця передача все ще триває, наприклад, в теорії типу гомотопії . Зокрема, розвиток мов програмування в цілому, а також набір дисциплін зокрема, немислимий без λ λ λ λλλλ-розрахунок. Більшість мов програмування зобов'язані певною мірою заборгованості перед Lisp та ML (наприклад, вивезення сміття для Lisp), які є прямими нащадками -calculus. Друга частина роботи, на яку сильно впливає -calculus, - це інтерактивні помічники доказу .λλ

Чи потрібно знати -calculus, щоб бути компетентним програмістом чи навіть теоретиком інформатики? Ні. Якщо вас не цікавлять типи, мови перевірки та мови програмування з функціями вищого порядку, то, мабуть, це модель обчислень, яка вам не дуже корисна. Зокрема, якщо вас цікавить теорія складності, то -calculus, мабуть, не є ідеальною моделлю, оскільки базовий крок зменшення є потужним: він може зробіть довільну кількість примірників на , тому λ ( λ x . M ) N β M [ N / x ] N β λ λ M N M Nλλ

(λx.M)NβM[N/x]
Nβє нереально базовим поняттям обліку мікроскопічних витрат на обчислення. Я думаю, що це головна причина, чому Теорія А не настільки захоплена рахунком. І навпаки, машини Тьюрінга не є надзвичайно натхненними для розвитку мови програмування, оскільки немає природних уявлень про машинний склад, тоді як для -cculus, якщо і це програми, то . Цей алгебраїчний погляд на обчислення природно пов'язаний з мовами програмування, які використовуються на практиці, і багато мовної розробки можна розуміти як пошук та дослідження нових операторів композиції програм.λλMNMN

Для енциклопедичного огляду історії -calculus див. Історію обчислення лямбда та комбінаторну логіку Кардона та Хіндлі .λ


8
Це дуже приємна відповідь.
Суреш Венкат

9
Щодо "нереалізму" зменшення: Beniamino Accattoli та Ugo Dal Lago нещодавно довели дивовижний результат, вказавши, що кількість -ступенів до нормальної форми в будь-якій стандартній стратегії скорочення (наприклад, крайній зліва-зовнішній) є інваріантною складністю міра. Це означає, що навіть якщо реалізація -редукції сама по собі дорога, підрахунок кількості скорочень не є нереальною мірою складності (наприклад, це не вплине на визначення класу ). β β PβββP
Даміано Мацца

5
@DamianoMazza Оскільки це новий результат, він не міг бути впливовим в історії Теорії А. Крім того, я думаю, що цей результат має місце лише для деяких понять скорочення. Доповідь PR NP IIRC Asperti , до спільного використання показує, що P і NP руйнуються, якщо у вас є "оптимальна" стратегія скорочення в сенсі Ж.-Дж. Стягування.
Мартін Бергер

6
@MartinBerger: так, звичайно. Мій коментар мав на меті додати інформацію про складність зменшення, а не для того, щоб "виправити" ваше твердження про відсутність впливу на Теорію А (що я повторив у своїй відповіді). До речі, результат Accattoli та Dal Lago стосується звичайної , крайньої зліва скорочення ( пор. 2, c.2, l.11 їхньої статті). Ось чому це так цікаво (і варто згадати). Результат Асперті стосується, як ви кажете, зниження оптимального Леві, яке не є стратегією зменшення (зокрема, крайній зліва-крайній не є оптимальним для Леві). β ββββ
Даміано Мацца

27

Я думаю, що -calculus багато в чому сприяв цій галузі і все ще сприяє цьому. Випливають три приклади, і це не є вичерпним. Оскільки я не фахівець з -cculus, я, безумовно, пропускаю деякі важливі моменти.λλλ

  • По-перше, я думаю, що існування різних моделей обчислень, які, як виявляється, представляють саме той самий набір функцій, було в основі дисертації Церкви Тьюрінга , і -cculus відігравав головну роль поряд з машинами Тьюрінга і -рекурсивними функції.μλμ

  • По-друге, що стосується мови функціонального програмування, я не розумію її як неправдивий внесок : По суті, всі наші моделі обчислень були винайдені задовго до того, як щось трапилося в інформатиці! Таким чином, -calculus принесло інший погляд на обчислення, в деякому сенсі ортогональне для машин Тьюрінга, що є дуже плідним у галузі мов програмування (що є частиною поля теорії обчислень).λ

  • Нарешті, і як більш конкретний приклад я думаю про неявну обчислювальну складність, яка спрямована на характеристику класів складності за допомогою виділених мов. Перші результати, такі як теорема Беллантоні-Кука, були викладені з точки зору -рекурсивних функцій, але в останніх результатах використовуються словниковий запас і методики -cculus. Дивіться це коротке вступ до непередбачуваної обчислювальної складності для більшої кількості та покажчиків, або про розробки семінарів DICE .λμλ


20

λ

Що конкретно зробив лямбда-числення для просування теорії КС?

λλλ

λ

λ


2
λλππ

5
Якби я міг клонувати себе, я зробив би дублікат, щоб заглянути в P / NP, використовуючи BLL та реалізацію. Логічні відносини, здається, не є "природним доказом", дисципліна лінійного типу гарантує, що ви не можете релативізувати, а теореми про повсякденність повноти BLL, здається, дозволяють вам не турбуватися про те, чи немає класів алгоритмів, які ви пропустили. Взаємозв'язок між теорією лінійності та представлення також передбачає зв'язок із ГКТ. Я гадаю, все це тому, що ти змучений і розчарований. :)
Neel Krishnaswami

1
Привіт @NeelKrishnaswami, чи не могли б ви вказати мені на прочитання матеріалу, що стосується BLL (обмежена лінійна логіка) та природні докази?
Мартін Бергер

Re B vs. A: лямбда-обчислення полягає лише в тому, щоб краще структурувати одні і ті ж обчислення, але, наприклад, не можна створювати кращі алгоритми. За допомогою усунення скорочень та властивості підформули в результаті будь-яка програма типу першого порядку може бути записана без функцій першого класу. Але усунення скорочень відповідає дублюючому коду: тому ми знову виявляємо, що вам не потрібні функції вищого порядку, якщо ви готові зробити достатню кількість копіювання. (Дефункціоналізація Рейнольдса дозволяє уникнути навіть копіювання, але це глобальна трансформація, тому краще залишити компілятор).
Blaisorblade

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

13

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

У чому сенс обчислення лямбда? Навіщо проходити всі ці функції / скорочення?

Який сенс булевої алгебри, або реляційної алгебри, або логіки першого порядку, або теорії типів, або якогось іншого математичного формалізму / теорії? Відповідь полягає в тому, що вони не мають їм притаманної мети, навіть якщо їх дизайнери створили їх з тією чи іншою метою. Лейбніц, будуючи основи Булевої алгебри, мав на увазі певний філософський проект ; Бул вивчав це з власних причин. Робота де Моргана про реляційну алгебру також була мотивована різними його проектами; У Періса і Фреге були свої мотивації до створення сучасної логіки.

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

  • Для когось це зручне позначення для розмови про обчислення; альтернатива машинам Тьюрінга тощо.

  • Для іншого це міцна математична основа, на якій можна побудувати більш досконалу мову програмування (наприклад, Маккарті, Стенлі).

  • Третій особі це суворий інструмент для надання семантики природних, а також мов програмування (наприклад, Монтег, Фітч, Крацер).

Я вважаю, що обчислення лямбда - це формальна мова, яку варто вивчити заради себе. Ви можете дізнатися той факт, що в нетиповому обчисленні лямбда ми маємо цих маленьких звірів, які називаються "Y-комбінаторами", і як вони допомагають нам визначити рекурсивні функції та зробити доказ нерозбірливості таким елегантним та простим. Ви можете дізнатися дивовижний факт, що існує інтимне відповідність між просто набраним лямбдальним численням і типом інтуїтивної логіки . Є багато інших цікавих тем, які слід вивчити (наприклад, як нам дати семантику обчислення лямбда? Як ми можемо перетворити обчислення лямбда в дедуктивну систему на зразок FOL?)


Ознайомтесь із вступом Hindley & Seldin до комбінаторів та λ – Calculus . «Ламбда-обчислення» Барендрегта - це біблія, тож якщо ви зачепилися за Хіндлі та Селдіна, тут є багато тем як семантичного, так і синтаксичного характеру.


6
Я не купую цей аргумент "заради себе". Суть математичного формалізму полягає у з'ясуванні нашого розуміння певної концепції. Те, що з’ясовується, може розвинутися з часом, але якщо формалізм не допоможе нам більш чітко думати про якусь ідею, вона зазвичай вимирає. У цьому сенсі це справедливо для aks, як числення лямбда з'ясовує поняття обчислення способом, який не підпадає під ТМ.
Сашо Ніколов

1
Я думаю, що можна вивчити обчислення лямбда, не думаючи про зменшення та заміщення як обчислення. Якщо я маю рацію і це насправді можливо, то ми можемо зацікавити обчисленням лямбда, навіть якщо нас зовсім не цікавлять обчислення. Але дякую за ваш коментар; Я спробую відповідно відредагувати свою відповідь, як тільки отримаю можливість.
Хунан Ростомян

@SashoNikolov - "у спосіб, який не підпадає під ТМ". За визначенням це неможливо, оскільки LC та TM є рівнозначними. Все, що ви можете висловити або довести одним, можна і з іншим (і навпаки). Таким чином, вони роблять одне одного зайвим (як вони обидва із загальною рекурсивною теорією, ще один формальний еквівалентний формалізм). Чи означає це, що ми повинні викинути всі системи, еквівалентні TM, але самі TM? Я б не сказав цього, оскільки іноді речі легше виразити в LC, ніж TM, або навпаки. Це просто інший спосіб говорити про обчислюваність.
Габріель Л.

1
@GabrielL. Якщо ви читали все пропозицію, він говорить : «як же лямбда - обчислення прояснити поняття обчислення таким чином , що не включена в категорію ДЧ». Два математичних визначення, які формально є еквівалентними, все ще можуть з'ясувати одне й те саме поняття різними та взаємодоповнюючими способами. Мій коментар означав, що розумно запитати, яку ясність отримують шляхом вираження обчислюваності з точки зору лямбда-числення, а не з точки зору ТМ. Мова йде зовсім не про формальну еквівалентність.
Сашо Ніколов

Зрозумів - вдалося якось пропустити там ключове слово. Дякую за відповідь.
Габріель Л.

12

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

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

З іншого боку, саме лямбда-числення. Церква спеціально намагалася уніфікувати позначення, які використовувались для запису нашої Математики. Як тільки було показано, що LC та TM є рівнозначними, ми могли б використовувати LC як нашу «стандартну машину Тюрінга», і кожен зможе прочитати наші програми (ну, теоретично;)).

Тепер ми можемо запитати, чому трактувати ЖК як примітив, а не як діалект ТМ? Відповідь полягає в тому, що семантика LC є денотаційною : терміни LC мають "внутрішнє" значення. Є церковні цифри, є функції додавання, множення, рекурсії тощо. Це робить LC дуже добре узгодженим з тим, як (формальна) практикується математика, через що багато (функціональні) алгоритми все ще представлені безпосередньо в LC.

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


5

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

історичний пріоритет!

Обчислення лямбда було введено щонайменше ще в 1932 р. Наступним викладом:

  • А. Церква, «Набір постулатів для основи логіки», «Анали математики», серія 2, 33: 346–366 (1932).

машина Тьюринга була введена в ~ 1936 , так Lambda Обчислення передує поява ТМА на кілька років!

  • Тьюрінг, А.М. (1936). "Про обчислювані номери з додатком до проблеми Entscheidungs". Праці Лондонського математичного товариства. 2 (1937) 42: 230–265. doi: 10.1112 / plms / s2-42.1.230

тому іншими словами, основною відповіддю є те, що обчислення Ламбди багато в чому є остаточною спадковою системою TCS. його все ще майже так само, як і Кобол , навіть не так багато нового розвитку відбувається в мові! це, здається, є найбільш ранньою системою обчислень Тюрінга, яка була введена і навіть передує основній ідеї повноти Тьюрінга. Лише пізніше ретроспективний аналіз показав, що обчислення Лембда, машини Тюрінга та Пост-кореспондентська проблема були рівнозначними та запровадили концепцію еквівалентності Тьюрінга та тезу Церкви Тьюрінга .

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

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

отже, драматично, можна навіть сказати, що обчислення Ламбди є чимось схожим на педагогічну машину часу для вивчення джерел обчислень!


1
доповнення, на обчислення Ламбди також, мабуть, сильно вплинув Математика Принципії Уайтхед / Рассел, яка також була головним натхненником для Гомельса ТММ . Деякі з цих досліджень також були натхнені проблемою Гільбертса на 10 столітті на рубежі століть, яка вимагала алгоритмічного рішення до того, як «алгоритм» був точно визначений (математично), і насправді цей квест значною мірою призводить до більш пізнього точного технічного визначення.
vzn

btw / уточнення / iiuc, це були фактично постові канонічні системи, які вивчалися першою поштою, і, мабуть, простіша проблема кореспонденції пошти є особливим випадком. також саме Кліне сприяв розробці концепції повноти Тьюрінга (не належить до цієї назви), допомагаючи довести всі три основні системи, взаємозамінні / еквівалентні (ТМ, обчислення Ламбди, Пост-канонічна система).
vzn

дивіться також Вікіпедію " Історія Церкви Тюрінга", яка простежує багато історичних деталей / взаємозв'язків
vzn

4
Мені важко не ображатися на порівняння Кобола.
Ніл Торонто

-2

Я щойно натрапив на цю посаду і, незважаючи на те, що моя посада була досить пізньою в день (рік!), Я подумала, що, можливо, моя "копійка стоїть" може бути корисною.

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

Добре, що так би мовити було моїм "ага" моментом.

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


Що було "ага" на компіляторах ?
Кандидат наук

Ваш останній абзац здається цілком умоглядним, і ви ніколи не пояснюєте, чому одне слово "компілятори" відповідає на це питання.
Девід Річербі

@PhD: Бета-зменшення та підміна не використовуються під час запуску програм, а використовуються всередині оптимізації компіляторів. Це не головне значення лямбда-числення, але це дуже конкретне застосування.
Blaisorblade
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.