Обчислення лямбда поза функціональним програмуванням?


21

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

По-друге, чи є користь для обчислення лямбди в царині інформатики, але поза межами функціональних мов програмування?

Відповіді:


15

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

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

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


Дуже дякую за вашу відповідь Дейв. Я вважаю, що формальна перевірка є найкращою причиною поки що щодо того, чому обчислення лямбда є корисним для мене для навчання, і досить смішно, я буду робити курс з офіційної перевірки в наступному семестрі. Чи ви також використовуєте лямбда-числення для офіційної перевірки програмного забезпечення, написаного будь-якою мовою, наприклад, імперативної або об'єктно-орієнтованої?
Яків

1
Ви не можете використовувати обчислення лямбда безпосередньо під час проведення офіційної перевірки, але воно з’явиться в основах формальної перевірки. Написання специфікацій часто включає написання на функціональній мові, навіть для імперативного / OO коду.
Дейв Кларк

Гаразд, це цікаво, спасибі, зараз у мене є трохи більше причин для цього. Чи знаєте ви, чи використовується лямбда-числення для створення будь-яких нефункціональних мов (на нижчих рівнях)?
Яків

1
АЛГОЛ. Скала. Зрештою, на ваше питання важко відповісти. Лямбда-обчислення стало частиною загальних знань для (більшості) дизайнерів мови, тому воно впливає на мовний дизайн, навіть якщо воно не використовується явно. Розгляньте блоки в Smalltalk або Ruby, анонімні класи на Java. Це закриття, тісно пов'язані з функціями вищого порядку в обчисленні лямбда.
Дейв Кларк

Гаразд, спасибі, Дейв, це дуже цінується.
Яків

17

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

По-перше, як вправу розминки, припустимо, хтось запитує у вас, чи є функція визначена f ( x ) = x 2 e x + log ( 1 + x 2 ) . Вам фактично не доведеться доводити, що це так, ви просто зауважуєте, що це склад диференційованих функцій, тому диференційований. Іншими словами, ви зробили легкий висновок, виходячи з форми визначення.f:RRf(x)=x2ex+log(1+x2)

Тепер для реального прикладу. Припустимо , що хто - то запитає вас чи функція визначається F ( х ) = ( λ F : C ( R ) . х - х е ( 1 + т 2 ) д т ) ( λ у : R . Макс ( x , sin ( y + 3 ) )f:RR

f(x)=(λf:C(R).xxf(1+t2)dt)(λy:R.max(x,sin(y+3))
є безперервним. Знову ж таки, ми можемо негайно відповісти "так", тому що функція визначена за допомогою -калькуляції і, починаючи з безперервних карт max , , sin тощо.λmaxsin

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


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

Ах, дуже погано, я б написав про це детальну відповідь.
Андрій Бауер

Вибачення з цього приводу. Не соромтесь додавати будь-які коментарі, якщо ви хочете додати будь-яку додаткову інформацію :)
Яків

2
λ



2

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

http://www.sfu.ca/~jeffpell/Ling406/LambdaAbstractionOH.pdf , https://files.nyu.edu/cb125/public/Lambda/


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