Является ли лямбда-исчисление чисто синтаксическим?


29

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

«Могут быть анонимные функции» : лямбда-функции не являются анонимными, они просто называются лямбда-функциями. В математических обозначениях допустимо использовать одну и ту же переменную для разных функций, если имя не важно. Например, обе функции в соединении Галуа часто называются *.

«Функции могут принимать функции в качестве входных данных» : это не ново, вы можете сделать это с помощью обычных функций.

«Функции - это черные ящики» : только входы и выходы также являются допустимыми описаниями математических функций ...

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


2
Я не хочу делать из этого полный ответ, но функции не могут принимать функции в качестве входных данных. Я могу написать f (g (0)), но я не могу написать f (g, 0). Последнее называется «функционалом» и требует разных правил.
Корт Аммон - Восстановить Монику

Функционалы @CortAmmon являются функциями. Функция - это просто набор пар (хотя, строго говоря, это тройка (D, R, G), где D - это область, R - это диапазон, а G - это граф (набор пар), еще одна небольшая проблема, с которой я столкнулся. с принятым ответом, но это ни здесь, ни там). Так что, если D - это набор функций, и вы берете пары, где первый элемент - это функция из D, то у вас есть функция. Проверьте Википедию: «Функционал - это отображение [функция] ...»
Нил

Т.е. все функционалы являются функциями, а не все функции являются функционалами. Но все правила, которые применяются к функциям, относятся к функционалам
Нил,

Ответы:


63

По иронии судьбы, название является точным, но не в том смысле, в котором вы, кажется, имеете в виду, что это «является лямбда-исчислением просто условным обозначением», что не является точным.

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

Я рассмотрю ваши вопросы напрямую.

Во-первых, лямбда не является именем, которое используется повторно. Это не только сбивает с толку, но мы не пишем (или ), что бы мы делали, если бы было именем для функции, точно так же, как мы пишем . В мы могли бы заменить (если он был определен лямбда-термином) лямбда-термином, производящим что-то вроде означающее выражение, которое может представлять функцию, а не объявление, объявляющее функцию (с именемλ(x)(λ x)λf(x)f(x)f(λy.y)(x)(λy.y)λили что-нибудь еще). Во всяком случае, когда мы перегружаем терминологию / нотацию, это (можно надеяться) делается таким образом, чтобы его можно было устранить через контекст, что, конечно же, не может иметь место для лямбда-терминов.

Ваш следующий пункт в порядке, но несколько не имеет значения. Это не соревнование, где есть Условия и Командные Лямбда команды, и победить может только один. Основное применение лямбда-терминов - изучение и понимание определенных видов функций. Полином не является функцией, хотя мы часто их небрежно идентифицируем. Изучение полиномов не означает, что кто-то думает, что все функции должны быть полиномами, и при этом полиномы не должны «делать» что-то «новое», чтобы их стоило изучать.

Теоретические функции множеств не являются черными ящиками, хотя они полностью определяются отношением ввода-вывода. (Они буквально являются их отношением ввода-вывода.) Лямбда-термины также не являются черными ящиками, и они не определяются их отношением ввода-вывода. Как я упоминал ранее, вы можете иметь разные лямбда-члены, которые производят одинаковое отношение ввода-вывода. Это также подчеркивает тот факт, что лямбда-члены не могут быть функциями, хотя они могут вызывать функции. 2

На самом деле, аналогия между полиномами и лямбда-терминами очень близка, и я подозреваю, что вы, возможно, не оцените различие между полиномом и функцией, которую он представляет, поэтому я уточню немного. 3 Обычно, когда вводятся полиномы, обычно с реальными коэффициентами, они рассматриваются как действительные функции определенного типа. Теперь рассмотрим теорию сдвиговых регистров с линейной обратной связью (LFSR). Это в значительной степени теория (одномерных) многочленов над , но если мы будем рассматривать это как функцию от , то таких функций будет не более . Существует, однако, бесконечное количество полиномов над . 4F2 F2F24F2Один из способов убедиться в этом состоит в том, что мы можем интерпретировать эти полиномы как что-то отличное от функций , и на самом деле подойдет любая -алгебра. Для LFSR мы обычно интерпретируем полиномы как операции над битовыми потоками, которые, если бы мы хотели, могли бы быть представлены как функции , хотя Подавляющее большинство таких функций не было бы в образе интерпретации LFSR.F2F2F22N2N

Это относится и к лямбда-терминам, мы можем интерпретировать их как вещи, отличные от функций. Они также являются гораздо более удобными для работы объектами, чем обычно бесконечно бесконечные наборы функций. Они оба гораздо более вычислительные, чем произвольные функции. Я могу написать программу для работы с полиномами (с коэффициентами, по крайней мере, вычислимо представимыми) и лямбда-членами Действительно, нетипизированные лямбда-члены являются одной из оригинальных моделей вычислимых функций. Эта более символическая / синтаксическая, вычислительная / вычислительная перспектива обычно более подчеркнута, особенно для нетипизированного лямбда-исчисления, чем более семантические интерпретации лямбда-исчисления. набранныйЛямбда-термины являются гораздо более управляемыми вещами и обычно (но не всегда) легко интерпретируются как теоретико-множественные функции, но также могут обычно интерпретироваться в еще более широкий класс вещей, помимо функций, чем нетипизированное лямбда-исчисление. У них также есть своя собственная синтаксическая теория и очень глубокая связь с логикой .

1 Возможно, проблема может пойти другим путем. Может быть, у вас неправильное представление о функции.

2 Это на самом деле не так просто. Для нетипизированного лямбда-исчисления не имеет смысла наивно интерпретировать произвольные лямбда-члены как теоретико-множественные функции . Вы можете начать видеть это, когда попытаетесь сформулировать, какой должна быть область интерпретации. Если я интерпретирую лямбда-термин как элемент множества , я также хочу иметь возможность интерпретировать его как функцию на и в поскольку я хочу интерпретировать приложение как приложение функции. В итоге вы получите (или ослабление этого), которое верно только для синглтонного набора. Что нам нужно для нетипизированного лямбда-исчисления - это рефлексивный объектDDDDDDи для категории множеств нет нетривиальных рефлексивных объектов. История довольно немного отличается для типизированных терминов лямбды, но все еще может быть нетривиальными.

3 Если вы четко понимаете это различие, аналогия должна быть довольно информативной.

4 Эта проблема не возникает с полями характеристики 0, такими как комплексные числа, вещественные числа, рациональные числа или целые числа, поэтому различие не такое резкое, хотя оно все еще существует.


8
Это удивительный ответ, который я просто должен сказать. Действительно устраняет некоторые недопонимания для меня. Благодарность!
the0ther

4
Я хотел бы ответить на это подробно! Много вещей, которые я хотел бы продолжить. В целом, хотя это было очень полезно для меня, и, видимо, для некоторых других людей, так что спасибо за исчерпывающий и взвешенный ответ.
Нил

1
Здесь есть только один момент, с которым я не согласен: вы утверждаете, что многочлены не должны «делать» что-то «новое», чтобы их стоило изучать. Конечно они делают! Конечно, в зависимости от вашего поля «новое» может иметь разные значения (например, чистый математик не будет различать векторы столбцов и векторы строк, потому что они изоморфны, но статистик может расценить это различие как полезное для целей вычислений). Любой новый формализм должен оправдывать себя.
Нил

2
@Neil: Сноска № 2, в частности, предлагает некоторые очень четкие доказательства того, что лямбда-исчисление «делает что-то новое», что «обычные» функции «не могут выполнять». Для более конкретного примера необоснованного лямбда-выражения см. Комбинаторы с фиксированной запятой . В позиции Церкви также делает для увлекательного чтения, особенно функций предшественника.
Кевин

1
Я бы добавил, что лямбды как функции не делают ничего полезного. Единственное, что вы можете сделать с лямбдой, это передать ей лямбду, и она возвращает лямбду. У вас нет возможности проверить, что делает получившаяся лямбда. Вы можете только передать ему другую лямбду, чтобы получить другую лямбду взамен. Как функции, набор «лямбда-функций» ведет себя точно так же, как одноэлементное множество, содержащее только функцию тождества. Только рассматривая ввод и вывод лямбды как выражения, вы можете дифференцировать лямбда-выражения.
Флориан Ф

0

Подумайте о концепции переменных. В старых языках, таких как базовый, у вас не было динамического распределения, и вам нужно было одно имя для каждой переменной. (Это не совсем точно, потому что у вас есть массивы, но идея в том, что ...) во многих задачах вам нужно иметь возможность выделять столько переменных, сколько вы хотите, не ограничиваясь количеством имен, которые определяет ваша программа.

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


Почему я не могу сделать это с обычными именованными функциями? Если я напишу f(x)=let g(y)=x+y in g, каждый математик мгновенно узнает, что имеется в виду, и согласится, что это разумный математический объект (возможно, вплоть до некоторых утешений относительно ясности в области f). Они также будут очень счастливы, если я тогда запишу набор {f(n) | n ∈ ℕ}, который содержит бесконечное количество функций и, в частности, не ограничен только конечным числом имен для использования.
Даниэль Вагнер

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