Чи є обчислення лямбда чисто синтаксичним?


29

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

"Можуть бути анонімні функції" : функції лямбда не анонімні, їх просто називають лямбда. У математичних позначеннях допустимо використовувати одну і ту ж змінну для різних функцій, якщо назва не важлива. Наприклад, дві функції в Галуа-з'єднанні часто обидві називаються *.

"Функції можуть приймати функції як входи" : Не ново, ви можете це робити за допомогою звичайних функцій.

"Функції - це чорні поля" : Просто введення та виведення також є дійсними описами математичних функцій ...

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


2
Я не хочу робити повну відповідь на це, але функції не можуть приймати функції як вхідні дані. Я можу написати f (g (0)), але я не можу записати f (g, 0). Останнє називається "функціоналом" і вимагає різних правил.
Корт Аммон - Відновіть Моніку

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

Тобто Всі функціонали - це функції, не всі функції є функціоналами. Але всі правила, що стосуються функцій, стосуються функціоналів
Ніл

Відповіді:


63

За іронією долі, назва вказана на точці, але не так, як ви, здається, маєте на увазі, що це "числення лямбда - просто нотаційна умова", яка не є точною.

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

Я звернуся безпосередньо до ваших пунктів.

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

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

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

Насправді, аналогія між многочленами та лямбда-термінами дуже близька, і я підозрюю, що ви, можливо, не оціните різницю між многочленом та функцією, яку він представляє, тому я трохи деталізую. 3 Зазвичай, коли вводяться поліноми, як правило, з реальними коефіцієнтами, вони трактуються як реальні функції певного типу. Тепер розглянемо теорію регістрів зсуву лінійної зворотної зв'язку (LFSRs). Це багато в чому теорія (одноперемінних) многочленів над , але якщо ми вважаємо це функцією , то існує максимум таких функції. Однак існує нескінченна кількість многочленів над . 4Ж2F 2 F 2 4 F 2 F 2 F 2 F 2 2 N 2 N Ж2Ж24Ж2Один із способів побачити це - це те, що ми можемо інтерпретувати ці поліноми як щось інше, ніж функції, насправді будь-яка -алгебра буде робити. Для LFSR ми зазвичай трактуємо поліноми як операції над бітовими потоками, які, якби ми хотіли, можуть бути представлені як функції , хоча переважна більшість таких функцій не були б в образі інтерпретації LFSR.F2F2F22N2N

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

1 Можливо, питання може піти іншим шляхом. Можливо, у вас неправильне розуміння, що таке функція.

2 Це насправді не так просто. Для нетипового обчислення лямбда насправді немає сенсу наївно інтерпретувати довільні лямбда-терміни як теоретико-множинні функції . Ви можете почати це бачити, намагаючись сформулювати, якою має бути область інтерпретації. Якщо я трактую лямбда-термін як елемент множини , я також хочу інтерпретувати його як функцію на та оскільки я хочу інтерпретувати додаток як додаток функції. Ви закінчуєте (або ослаблення цього), що справедливо лише для одиночного набору. Що нам потрібно для нетипового обчислення лямбда - це рефлексивний об'єктDDDDDD, а для категорії множин немає нетривіальних рефлексивних об'єктів. Історія є досить різною для введених лямбда-термінів, але все ще може бути нетривіальною.

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

4 Ця проблема не виникає з полями, що характеризуються 0, як складні числа, дійсні значення, раціональні чи цілі числа, тому відмінність не така різка, хоча вона все ще існує.


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

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

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

2
@Neil: Зноска №2, зокрема, пропонує дуже чіткі докази того, що обчислення лямбда "робить щось нове", що "регулярні" функції "не можуть виконувати". Більш конкретний приклад недостатньо обгрунтованого лямбдаського виразу, див . Комбінатори з фіксованою точкою . У позиції Церкви також робить для цікавого читання, особливо функцій попередника.
Кевін

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

0

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

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


Чому я не можу зробити це за допомогою звичайних названих функцій? Якщо я напишу f(x)=let g(y)=x+y in g, кожен математик миттєво дізнається, що мається на увазі, і погодиться, що це розумний математичний об'єкт (можливо, до деяких суперечок про чіткість щодо домену f). Вони також будуть абсолютно щасливі, якщо я тоді запишу набір {f(n) | n ∈ ℕ}, який містить нескінченно багато функцій, і, зокрема, не обмежується лише наявністю обмеженої кількості імен.
Даніель Вагнер

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