Я читал в течение нескольких недель о лямбда-исчислении, но я еще не видел ничего, что существенно отличалось бы от существующих математических функций, и я хочу знать, является ли это просто вопросом обозначения, или есть какие-либо новые свойства или правила, созданные аксиомами лямбда-исчисления, которые не применяются к каждой математической функции. Так, например, я прочитал это:
«Могут быть анонимные функции» : лямбда-функции не являются анонимными, они просто называются лямбда-функциями. В математических обозначениях допустимо использовать одну и ту же переменную для разных функций, если имя не важно. Например, обе функции в соединении Галуа часто называются *.
«Функции могут принимать функции в качестве входных данных» : это не ново, вы можете сделать это с помощью обычных функций.
«Функции - это черные ящики» : только входы и выходы также являются допустимыми описаниями математических функций ...
Это может показаться дискуссией или мнением, но я считаю, что должен быть «правильный» ответ на этот вопрос. Я хочу знать, является ли лямбда-исчисление просто нотационным или синтаксическим соглашением для работы с математическими функциями, или существуют ли какие-либо существенные или семантические различия между лямбдами и обычными функциями.
Ответы:
По иронии судьбы, название является точным, но не в том смысле, в котором вы, кажется, имеете в виду, что это «является лямбда-исчислением просто условным обозначением», что не является точным.
Лямбда-термины не являются функциями 1 . Это фрагменты синтаксиса, то есть наборы символов на странице. У нас есть правила для манипулирования этими коллекциями символов, наиболее существенно сокращение бета. Вы можете иметь несколько различных лямбда-терминов, которые соответствуют одной и той же функции. 2
Я рассмотрю ваши вопросы напрямую.
Во-первых, лямбда не является именем, которое используется повторно. Это не только сбивает с толку, но мы не пишем (или ), что бы мы делали, если бы было именем для функции, точно так же, как мы пишем . В мы могли бы заменить (если он был определен лямбда-термином) лямбда-термином, производящим что-то вроде означающее выражение, которое может представлять функцию, а не объявление, объявляющее функцию (с именемλ(x) (λ x) λ f(x) f(x) f (λy.y)(x) (λy.y) λ или что-нибудь еще). Во всяком случае, когда мы перегружаем терминологию / нотацию, это (можно надеяться) делается таким образом, чтобы его можно было устранить через контекст, что, конечно же, не может иметь место для лямбда-терминов.
Ваш следующий пункт в порядке, но несколько не имеет значения. Это не соревнование, где есть Условия и Командные Лямбда команды, и победить может только один. Основное применение лямбда-терминов - изучение и понимание определенных видов функций. Полином не является функцией, хотя мы часто их небрежно идентифицируем. Изучение полиномов не означает, что кто-то думает, что все функции должны быть полиномами, и при этом полиномы не должны «делать» что-то «новое», чтобы их стоило изучать.
Теоретические функции множеств не являются черными ящиками, хотя они полностью определяются отношением ввода-вывода. (Они буквально являются их отношением ввода-вывода.) Лямбда-термины также не являются черными ящиками, и они не определяются их отношением ввода-вывода. Как я упоминал ранее, вы можете иметь разные лямбда-члены, которые производят одинаковое отношение ввода-вывода. Это также подчеркивает тот факт, что лямбда-члены не могут быть функциями, хотя они могут вызывать функции. 2
На самом деле, аналогия между полиномами и лямбда-терминами очень близка, и я подозреваю, что вы, возможно, не оцените различие между полиномом и функцией, которую он представляет, поэтому я уточню немного. 3 Обычно, когда вводятся полиномы, обычно с реальными коэффициентами, они рассматриваются как действительные функции определенного типа. Теперь рассмотрим теорию сдвиговых регистров с линейной обратной связью (LFSR). Это в значительной степени теория (одномерных) многочленов над , но если мы будем рассматривать это как функцию от , то таких функций будет не более . Существует, однако, бесконечное количество полиномов над . 4F2 F2→F2 4 F2 Один из способов убедиться в этом состоит в том, что мы можем интерпретировать эти полиномы как что-то отличное от функций , и на самом деле подойдет любая -алгебра. Для LFSR мы обычно интерпретируем полиномы как операции над битовыми потоками, которые, если бы мы хотели, могли бы быть представлены как функции , хотя Подавляющее большинство таких функций не было бы в образе интерпретации LFSR.F2→F2 F2 2N→2N
Это относится и к лямбда-терминам, мы можем интерпретировать их как вещи, отличные от функций. Они также являются гораздо более удобными для работы объектами, чем обычно бесконечно бесконечные наборы функций. Они оба гораздо более вычислительные, чем произвольные функции. Я могу написать программу для работы с полиномами (с коэффициентами, по крайней мере, вычислимо представимыми) и лямбда-членами Действительно, нетипизированные лямбда-члены являются одной из оригинальных моделей вычислимых функций. Эта более символическая / синтаксическая, вычислительная / вычислительная перспектива обычно более подчеркнута, особенно для нетипизированного лямбда-исчисления, чем более семантические интерпретации лямбда-исчисления. набранныйЛямбда-термины являются гораздо более управляемыми вещами и обычно (но не всегда) легко интерпретируются как теоретико-множественные функции, но также могут обычно интерпретироваться в еще более широкий класс вещей, помимо функций, чем нетипизированное лямбда-исчисление. У них также есть своя собственная синтаксическая теория и очень глубокая связь с логикой .
1 Возможно, проблема может пойти другим путем. Может быть, у вас неправильное представление о функции.
2 Это на самом деле не так просто. Для нетипизированного лямбда-исчисления не имеет смысла наивно интерпретировать произвольные лямбда-члены как теоретико-множественные функции . Вы можете начать видеть это, когда попытаетесь сформулировать, какой должна быть область интерпретации. Если я интерпретирую лямбда-термин как элемент множества , я также хочу иметь возможность интерпретировать его как функцию на и в поскольку я хочу интерпретировать приложение как приложение функции. В итоге вы получите (или ослабление этого), которое верно только для синглтонного набора. Что нам нужно для нетипизированного лямбда-исчисления - это рефлексивный объектD D D DD⊆D и для категории множеств нет нетривиальных рефлексивных объектов. История довольно немного отличается для типизированных терминов лямбды, но все еще может быть нетривиальными.
3 Если вы четко понимаете это различие, аналогия должна быть довольно информативной.
4 Эта проблема не возникает с полями характеристики 0, такими как комплексные числа, вещественные числа, рациональные числа или целые числа, поэтому различие не такое резкое, хотя оно все еще существует.
источник
Подумайте о концепции переменных. В старых языках, таких как базовый, у вас не было динамического распределения, и вам нужно было одно имя для каждой переменной. (Это не совсем точно, потому что у вас есть массивы, но идея в том, что ...) во многих задачах вам нужно иметь возможность выделять столько переменных, сколько вы хотите, не ограничиваясь количеством имен, которые определяет ваша программа.
Лямбда-функции позволяют избавиться от того же ограничения на имена функций, позволяя вашей программе определять столько функций, сколько ей нужно, и «хранить» их в тех же сложных структурах данных, что и другие переменные. Это не то, что вы могли бы сделать с обычными именованными функциями.
источник
f(x)=let g(y)=x+y in g
, каждый математик мгновенно узнает, что имеется в виду, и согласится, что это разумный математический объект (возможно, вплоть до некоторых утешений относительно ясности в областиf
). Они также будут очень счастливы, если я тогда запишу набор{f(n) | n ∈ ℕ}
, который содержит бесконечное количество функций и, в частности, не ограничен только конечным числом имен для использования.