Каков вклад лямбда-исчисления в области теории вычислений?


85

Я просто читаю лямбда-исчисление, чтобы «узнать это». Я рассматриваю это как альтернативную форму вычислений в отличие от машины Тьюринга. Это интересный способ работы с функциями / сокращениями (грубо говоря). Некоторые вопросы продолжают мучить меня, хотя:

  • Какой смысл в лямбда-исчислении? Зачем проходить все эти функции / сокращения? Какова цель?
  • В результате у меня остается вопрос: что именно сделал лямбда-исчисление, чтобы продвинуть теорию CS? Что это был за вклад, который позволил бы мне иметь «ага» момент понимания необходимости его существования?
  • Почему лямбда-исчисление не рассматривается в текстах по теории автоматов? Обычный маршрут - прохождение различных автоматов, грамматик, машин Тьюринга и классов сложности. Лямбда-исчисление включено только в учебную программу для курсов стиля SICP (возможно, нет?). Но я редко видел, чтобы это было частью основной учебной программы CS. Означает ли это, что это не так уж и ценно? Может и нет, а может я что-то здесь упустил?

Я знаю, что функциональные языки программирования основаны на лямбда-исчислении, но я не рассматриваю это как действительный вклад, поскольку он был создан задолго до того, как у нас появились языки программирования. Итак, на самом деле, какой смысл знать / понимать лямбда-исчисление, его приложения / вклад в теорию?


6
Соответствующий набор ответов объясняет разницу в силе между калькуляцией и ТМ: cstheory.stackexchange.com/questions/1117/…λ
Суреш Венкат


5
В некотором смысле, его вклад заключался в создании поля. Не забывайте, что сначала Черч придумал лямбда-исчисление, но сначала оно не рассматривалось как универсальная модель вычислений.
Дэн Халм

В своих основных исследованиях я Functional Programmingобсуждал Haskell и немного Lisp. Преемник этого был Principles of Programming Languages, который использовал ML и ввел лямбда-исчисление. Как показывают некоторые ответы, именно в этом и заключается лямбда-исчисление: в классе о языках программирования, наборе текста и т. Д.
Shaz

этот вопрос аналогичен взаимосвязи между ТМ и лямбда-исчислением, а также обсуждает исторический приоритет лямбда-исчисления
vzn

Ответы:


96

калькуляция выполняет две ключевые роли.λ

  • Это простая математическая основа последовательного, функционального вычислительного поведения высшего порядка.

  • Это представление доказательств в конструктивной логике.

λλλλλ

λλ

(λx.M)NβM[N/x]
NβλλMNMN

λ


8
Это очень хороший ответ.
Суреш Венкат

9
βββP

5
@DamianoMazza Так как это новый результат, он не мог повлиять на историю Теории А. Кроме того, я думаю, что этот результат справедлив только для некоторых понятий сокращения. Документ IIRC Асперти P = NP, вплоть до совместного использования, показывает, что P и NP разрушаются, если у вас есть «оптимальная» стратегия сокращения в смысле Ж.-Ж. Леви.
Мартин Бергер

6
βββ


20

λ

Что именно сделал лямбда-исчисление, чтобы продвинуть теорию CS?

λλλ

λ

λ


2
λλππ

5
Если бы я мог клонировать себя, я бы сделал дубликат, чтобы изучить P / NP, используя BLL и реализуемость. Кажется, что логические отношения не являются «естественными доказательствами», дисциплина линейного типа гарантирует, что вы не можете сделать релятивизацию, а теоремы BLL о политимической полноте, кажется, позволяют вам не беспокоиться о том, существуют ли классы алгоритмов, которые вы пропустили. Взаимосвязь между линейностью и теорией представления также предполагает связь с GCT. Я полагаю, что все это - то, почему вы мучаетесь и расстраиваетесь. :)
Нил Кришнасвами

1
Эй, @NeelKrishnaswami, не могли бы вы указать мне на чтение материала, который связывает BLL (линейную ограниченную логику) и естественные доказательства?
Мартин Бергер

Относительно B против A: лямбда-исчисление только лучше структурирует те же вычисления, но не может, например, создавать лучшие алгоритмы. Благодаря исключению среза и свойству подформулы результата, любая программа с типом первого порядка может быть написана без функций первого класса. Но исключение вырезки соответствует дублированию кода: поэтому мы снова обнаруживаем, что вам не нужны функции более высокого порядка, если вы хотите сделать достаточное копирование. (Дефункционализация Рейнольдса позволяет избежать даже копирования, но это глобальное преобразование, поэтому лучше оставить его компилятору).
Blaisorblade

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

13

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

Какой смысл в лямбда-исчислении? Зачем проходить все эти функции / сокращения?

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

Дело в том, что независимо от причины, по которой Церковь могла создать лямбда-исчисление, смысл лямбда-исчисления варьируется от одного практикующего к другому.

  • Кому-то это удобная запись для разговоров о вычислениях; альтернатива машинам Тьюринга и так далее.

  • С другой стороны, это прочная математическая основа для построения более сложного языка программирования (например, McCarthy, Stanley).

  • Для третьего лица это строгий инструмент для предоставления семантики как естественных, так и языков программирования (например, Montague, Fitch, Kratzer).

Я думаю, что лямбда-исчисление является официальным языком, который стоит изучать ради него самого. Вы можете узнать тот факт, что в нетипизированном лямбда-исчислении у нас есть эти маленькие звери, называемые Y-комбинаторами, и как они помогают нам определять рекурсивные функции и делают доказательство неразрешимости таким элегантным и простым. Вы можете узнать удивительный факт, что существует тесное соответствие между просто типизированным лямбда-исчислением и типом интуиционистской логики . Есть много других интересных тем для изучения (например, как мы должны дать семантику лямбда-исчисления? Как мы можем превратить лямбда-исчисление в дедуктивную систему, такую ​​как FOL?)


Посмотрите введение Хиндли и Селдина в комбинаторы и λ – исчисление . «Лямбда-исчисление» Барендрегта - это Библия, поэтому, если вы зацепили Хиндли и Селдина, есть много тем как семантического, так и синтаксического характера.


6
Я не покупаю этот аргумент "ради себя". Смысл математического формализма заключается в разъяснении нашего понимания некоторой концепции. То, что выясняется, может развиваться с течением времени, но если формализм не поможет нам более четко подумать о какой-либо идее, она обычно вымирает. В этом смысле это справедливо для того, чтобы объяснить, как лямбда-исчисление объясняет концепцию вычислений так, как это не относится к ТМ.
Сашо Николов

1
Я думаю, что можно изучать лямбда-исчисление, даже не думая о сокращении и замене как о вычислении. Если я прав, и это на самом деле возможно, тогда мы можем иметь интерес к лямбда-исчислению, даже если мы вообще не заинтересованы в вычислениях. Но спасибо за ваш комментарий; Я постараюсь изменить свой ответ соответственно, как только у меня будет шанс.
Унан Ростомян

@SashoNikolov - «таким образом, что это не относится к ТМ». По определению это невозможно, поскольку LC и TM эквивалентны. Все, что вы можете выразить или доказать с одним, вы можете с другим (и наоборот). Таким образом, они делают друг друга излишними (как они делают с общей рекурсивной теорией, еще один TM-эквивалентный формализм). Означает ли это, что мы должны выбросить все системы, эквивалентные TM, кроме самой TM? Я бы так не сказал, поскольку иногда в LC выражать вещи легче, чем в TM или наоборот. Это просто еще один способ говорить о вычислимости.
Габриэль Л.

1
@GabrielL. Если вы прочитаете предложение целиком, оно скажет: «Как лямбда-исчисление разъясняет концепцию вычислений так, как это не относится к ТМ». Два математических определения, которые формально эквивалентны, могут по-прежнему разъяснять одну и ту же основную концепцию различными и взаимодополняющими способами. Мой комментарий означал, что разумно спросить, какая ясность достигается выражением вычислимости в терминах лямбда-исчисления, а не в терминах ТМ. Это вовсе не формальная эквивалентность.
Сашо Николов

Понял - успел как-то пропустить ключевое слово. Спасибо за ответ.
Габриэль Л.

12

Тьюринг утверждал, что математика может быть сведена к комбинации символов чтения / записи, выбранных из конечного набора, и переключения между конечным числом психических «состояний». Он подтвердил это в своих машинах Тьюринга, где символы записываются в ячейках на ленте, а автомат отслеживает состояние.

Однако машины Тьюринга не являются конструктивным доказательством этого сокращения. Он утверждал, что любая «эффективная процедура» может быть реализована на некоторой машине Тьюринга, и показал, что универсальная машина Тьюринга может реализовать все эти другие машины, но на самом деле он не дал набор символов, состояний и правил обновления, которые реализуют математику. так, как он утверждал. Другими словами, он не предложил «стандартную машину Тьюринга» со стандартным набором символов, который мы можем использовать для записи нашей математики.

Лямбда-исчисление, с другой стороны, именно это. Черч специально пытался объединить нотации, используемые для записи нашей математики. Как только было показано, что LC и TM эквивалентны, мы можем использовать LC в качестве нашей «стандартной машины Тьюринга», и каждый сможет читать наши программы (ну, в теории;)).

Теперь мы могли бы спросить, почему трактовать ЛК как примитив, а не как диалект ТМ? Ответ заключается в том, что семантика LC является денотационной : термины LC имеют «внутреннее» значение. Существуют церковные цифры, есть функции сложения, умножения, рекурсии и т. Д. Это делает ЛЦ очень хорошо согласованным с практикой (формальной) математики, поэтому многие (функциональные) алгоритмы все еще представлены непосредственно в ЛК.

С другой стороны, семантика программ ТМ является оперативной : значение определяется как поведение машины. В этом смысле мы не можем вырезать какой-то фрагмент ленты и сказать «это дополнение», потому что это зависит от контекста. Поведение машины, когда она попадает в этот участок ленты, зависит от состояния машины, длины / смещения / и т.д. аргументов, сколько ленты будет использовано для результата, повредила ли какая-либо предыдущая операция этот участок ленты и т. д. Это ужасный способ работы («Никто не хочет программировать машину Тьюринга»), поэтому многие (императивные) алгоритмы представлены в виде псевдокода.


5

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

исторический приоритет!

Лямбда-исчисление было введено, по крайней мере, еще в 1932 году в следующей ссылке:

  • А. Черч, "Набор постулатов для основания логики", Анналы математики, Серия 2, 33: 346–366 (1932).

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

  • Тьюринг, AM (1936). «О вычислимых числах с приложением к задаче Энтшайдуна». Труды Лондонского математического общества. 2 (1937) 42: 230–265. DOI: 10,1112 / ПНИЛИ / s2-42.1.230

другими словами, основной ответ заключается в том, что лямбда-исчисление во многих отношениях является конечной унаследованной системой TCS. он все еще существует во многом так же, как и Cobol, хотя не так много нового происходит в языке! Похоже, что это самая ранняя система вычислений по Тьюрингу, которая была введена и даже предшествует фундаментальной идее Полноты Тьюринга. только более поздний ретроспективный анализ показал, что лямбда-исчисление, машины Тьюринга и проблема почтовой корреспонденции были эквивалентны и ввели концепцию эквивалентности Тьюринга и тезис Черча-Тьюринга .

Лямбда-исчисление - это просто способ изучения вычислений из логически-ориентированных программ, с точки зрения представления их как математических теорем и выводов логических формул и так далее. это также показывает глубокую связь между вычислениями и рекурсией и дальнейшую тесную связь с математической индукцией .

это несколько примечательный факт, потому что он предполагает, что во многих отношениях (по крайней мере, теоретические ) источники вычислений были в основном в логике / математике , тезис, подробно изложенный / расширенный Дэвисом в его книге « Двигатели логики / математики и происхождение компьютер . (Конечно, происхождение и фундаментальная роль булевой алгебры также усиливают эту концептуальную историческую структуру.)

следовательно, драматично, можно даже сказать, что лямбда-исчисление немного похоже на педагогическую машину времени для изучения истоков вычислений!


1
Кроме того, Лямбда-исчисление также, по-видимому, находилось под сильным влиянием Principia mathematica от Уайтхеда / Рассела, что также послужило источником вдохновения для Годельса . некоторые из этих исследований были также вдохновлены 10-й проблемой Хилбертса на рубеже веков, которая требовала алгоритмического решения до того, как «алгоритм» был точно (математически) определен, и фактически этот квест во многом и привел к последующему точному техническому определению.
2011 года

Между прочим / уточнение / iiuc это были фактически постканонические системы, которые были изучены 1-м Постом, и, очевидно, более простая проблема почтовой корреспонденции является особым случаем. Кроме того, именно Клини сыграла важную роль в разработке концепции полноты по Тьюрингу (не входит в это название), помогая доказать, что все 3 основные системы взаимозаменяемы / эквивалентны (ТМ, Лямбда-исчисление, Постканоническая система).
ВЗН

см. также тезисы Википедии об истории Церкви-Тьюринга , в которых прослеживаются многие исторические детали / взаимосвязи
vzn

4
Мне трудно не обижаться на сравнение Кобола.
Нил Торонто

-2

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

Во время изучения предмета в университете у меня была похожая мысль по этому поводу; Итак, я поставил перед лектором вопрос «почему» и ответил: «Составители». Как только она упомянула об этом, сила сокращения и умение оценивать, как лучше всего манипулировать им, внезапно сделали всю цель того, почему это было и остается потенциально полезным инструментом.

Ну, это, так сказать, был мой "ага" момент.

По моему мнению, мы часто считаем языки высокого уровня, шаблоны, автоматы, сложность алгоритмов и т. Д. Полезными, потому что мы можем связать их с «поставленной задачей»; тогда как исчисление Ламдбы кажется слишком абстрактным. Тем не менее, все еще есть те, кто работает с языками на низком уровне - и я думаю, что лямбда-исчисление, исчисление объектов и другие связанные с ними формализации помогли им понять и, возможно, разработать новые теории и технологии, из которых затем может извлечь пользу обычный программист. Действительно, по этой причине он, вероятно, не является основным модулем, но (по причинам, которые я изложил) будет несколько странных - кроме академиков - которые могут найти его неотъемлемой частью выбранной ими карьеры в вычислительной технике.


Что за "ага" на компиляторах ?
кандидат наук

Ваш последний абзац кажется совершенно умозрительным, и вы никогда не объясняете, почему одно слово «компиляторы» отвечает на вопрос.
Дэвид Ричерби

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