Комбінаторна логікаКомбінаторна логіка — це нотація для усунення необхідності кількісних змінних в математичній логіці. Вона була введена Мойсеєм Шейнфінкелем[1] і Гаскеллем Каррі,[2] та використовується в інформатиці як теоретична модель обчислень, а також як основа для розробки функціональних мов програмування. Вона заснована на комбінаторах, які були введені Шейнфінкелем у 1920 році разом з ідеєю створення аналогічного способу для побудови функцій та видалення будь-яких згадок про змінні, особливо в логіці предикатів.[3] Комбінатор — це функція вищого порядку, яка використовує тільки застосування функції та раніше визначені комбінатори, щоб визначити результат на своїх аргументах. У математиціКомбінаторна логіка спочатку створювалася як «пре-логіка», яка б пояснювала роль кількісних змінних в логіці шляхом їх усунення. Іншим способом усунення кількісних змінних є логіка предикативного функтора Квайна. Хоча виразність комбінаторної логіки зазвичай перевищує за цим параметром логіку першого порядку, виразність логіки предикативного функтора ідентична логіці першого порядку (Квайн 1960, 1966, 1976). Оригінальний винахідник комбінаторної логіки, Мойсеєм Шенфінкелем, не опублікував нічого про комбінаторну логіку після своєї оригінальної статті 1924 року. Гаскелл Каррі знову відкрив комбінатори, працюючи викладачем в Принстонському університеті наприкінці 1927 року.[4] У 1930-х роках Алонзо Черч і його учні в Принстоні винайшли конкурентний формалізм для функціональної абстракції — лямбда-числення, що виявилося більш популярним, ніж комбінаторна логіка. Підсумком цих історичних обставин було те, що до тих пір, поки теоретична інформатика не почала цікавитися комбінаторною логікою в 1960-х і 1970-х роках, майже вся робота з цього питання була зроблена Гаскеллем Каррі та його учнями, i Робертом Фейсом[en] в Бельгії. У статтях написаних Каррі та Фейсом (1958) і Каррі та інші (1972) можна знайти огляд ранньої історії комбінаторної логіки. Для більш сучасного трактування комбінаторної логіки та лямбда-числення див. книгу Барендрегта[5], яка розглядає моделі Дана Скотта, розроблені для комбінаторної логіки в 1960-х і 1970-х роках. В обчислювальній техніціУ інформатиці комбінаторна логіка використовується як спрощена модель обчислень, що використовується в теорії обчислюваності та теорії доведення. Незважаючи на свою простоту, комбінаторна логіка охоплює багато суттєвих особливостей обчислення. Комбінаторну логіку можна розглядати як варіант лямбда-числення, в якому лямбда-вирази (що представляють функціональну абстракцію) замінюються обмеженим набором комбінаторів, примітивних функцій, в яких відсутні зв'язані змінні. Лямбда-вирази легко трансформувати в комбінаторні вирази, а редукція комбінатора набагато простіше, ніж редукція лямбди. Тому комбінаторна логіка була використана для моделювання деяких нетривких функціональних мов програмування та апаратного забезпечення[en]. Найчистішою формою цього погляду є мова програмування Unlambda[en], єдиним примітивом якого є комбінатори S і K, доповнені символом вводу/виводу. Не будучи практичною мовою програмування, Unlambda представляє певний теоретичний інтерес. Комбінаторній логіці можна надати різні інтерпретації. Багато ранніх робіт Каррі показали, як перевести набори аксіом для звичайної логіки в комбінаторні логічні рівняння (Хіндлі і Мередіт 1990). Дана Скотт в 1960-х і 1970-х роках показав, як поєднати теорію моделей та комбінаторну логіку. Огляд лямбда-численняЛямбда-числення стосується об'єктів, які називаються лямбда-виразами, які можна представити такими трьома формами рядків:
де v — ім'я змінної, що складається з попередньо визначеного нескінченного набору імен змінних, і та є лямбда-термінами. Вирази типу називаються абстракціями. Змінна v називається формальним параметром абстракції, і є тілом абстракції. Вираз представляє функцію, яка, будучи застосована до аргументу, зв'язує формальний параметр v з цим аргументом, а потім обчислює отримане значення — тобто повертає , у якому кожне входження v замінено на аргумент. Вирази типу називаються аплікаціями. Аплікації моделюють виклик або виконання: функція, представлена , повинна бути викликана із у якості аргументу, і результат обчислюється. Якщо (іноді його називають аплікацією) є абстракцією, термін може бути редукований: , що є аргументом, може бути заміщений в тіло замість формального параметра з , і результат — новий лямбда-вираз, еквівалентний попередньому. Якщо лямбда-вираз не містить підвиразів типу , тоді він не може бути редукованим, та вважається, що він перебуває у нормальній формі[en]. Вираз являє собою результат обрання терміна E і заміщення в ньому всіх вільних входжень v на a. Таким чином, ми записуємо: За домовленістю, ми вважаємо скороченням (тобто, застосування є асоціативним зліва). Мотивацією для визначення цього скорочення є те, що воно фіксує істотну поведінку всіх математичних функцій. Наприклад, розглянемо функцію, яка обчислює квадрат числа. Ми можемо написати: Квадратом x є (Використовується «» для вказівки множення) x тут є формальним параметром функції. Щоб оцінити квадрат для конкретного аргументу, скажімо 3, вставляємо його в визначення замість формального параметра:
Для оцінки отриманого виразу , нам доведеться вдатися до наших знань про множення і число 3. Оскільки будь-яке обчислення є просто композицією оцінки відповідних функцій на відповідних примітивних аргументах, цього простого принципу заміщення достатньо, щоб захопити істотний механізм обчислення. Більш того, у лямбда-численні такі поняття, як '3' та '' можуть бути представлені без будь-якої потреби у визначених ззовні примітивних операторах або константах. Можливо ідентифікувати терміни в лямбда-численні, які, якщо їх правильно інтерпретувати, ведуть себе як число 3 і подібно оператору множення, як у кодуванні Черча[en]. Як відомо, лямбда-числення є обчислювально еквівалентним за потужністю для багатьох інших відомих моделей для обчислення (включаючи машини Тьюринга); тобто будь-який розрахунок, який можна виконати в будь-якій з цих інших моделей, може бути виражений в лямбда-численні і навпаки. Згідно з тезою Черча-Тюрінга, обидві моделі можуть виражати будь-які можливі обчислення. Можливо, дивно, що лямбда-числення спроможне являти собою будь-яке можливе обчислення, використовуючи лише прості поняття абстракції та аплікації функції, засновані на простому текстовому заміщенні виразів на змінні. Але ще більш примітним є те, що абстракція навіть не потрібна. Комбінаторна логіка є моделлю обчислення, еквівалентною лямбда-численням, але без абстракції. Перевага цього полягає в тому, що оцінювання виразів у лямбда-численні є досить складним, оскільки семантика заміщення повинна бути задана з великою обережністю, щоб уникнути проблем із захопленням змінних. Навпаки, оцінювання виразів у комбінаторній логіці набагато простіше, оскільки не існує поняття заміщення. Комбінаторне численняОскільки абстракція є єдиним способом виробництва функцій у лямбда-численні, щось має замінити його в комбінаторному численні. Замість абстракції комбінаторне числення забезпечує обмежений набір примітивних функцій, з яких можуть бути побудовані інші функції. Комбінаторні виразиКомбінаторний вираз має одну з таких форм:
де x — змінна, P — одна з примітивних функцій, і є застосування комбінаторних термінів і . Самі примітивні функції є комбінаторами, або функціями, які, якщо розглядати їх як лямбда-вирази, не містять вільних змінних. Щоб скоротити позначення, застосовується загальна домовленість , або навіть , позначає термін . Це та ж сама загальна домовленість (ліва асоціативність) що й для кількох аплікації в лямбда-численні. Редукція в комбінаторній логіціУ комбінаторній логіці кожен примітивний комбінатор має правило редукції форми
де Е — термін, що позначає лише змінні з множини x1 ... xn. Саме таким чином примітивні комбінатори ведуть себе подібно функціям. Приклади комбінаторівНайпростішим прикладом комбінатора є I , комбінатор ідентичності, який визначається таким чином: (I x) = x для всіх термінів x. Іншим простим комбінатором є K , який виробляє постійні функції: (K x) — це функція, яка, для будь-якого аргументу, повертає x , так що ми говоримо: ((K x) y) = x для всіх виразів x і y. Або, відповідно до домовленості щодо кількох аплікацій,
Третім комбінатором є S , що є узагальненою версією аплікації:
S застосовує x до y після першої підстановки z в кожен з них. Або по-іншому, x застосовується до y всередині середовища z. Враховуючи S і K, I не потрібен, оскільки цей комбінатор може бути побудово з двох інших:
для будь-якого виразу х. Зауважимо, що хоча ((SKK) x) = (I x) для будь-якого x, (SKK) сама по собі не дорівнює I. Ми говоримо, що терміни поширюються однаково[en]. Рівень екстенсивності відображає математичне поняття рівності функцій: дві функції рівні, якщо вони завжди дають однакові результати для тих самих аргументів. Навпаки, самі вирази, разом із редукцією примітивних комбінаторів, фіксують поняття інтенсіональної рівності функцій: дві функції рівні, тільки якщо вони мають ідентичні реалізації до розширення примітивних комбінаторів, коли вони застосовані до достатньої кількості аргументів. Існує багато способів реалізації функції ідентичності; (SKK) і I є серед цих шляхів, а також (SKS). Ми будемо використовувати слово еквівалентність для позначення екстенсійної рівності, залишаючи рівність для ідентичних комбінаторних виразів. Більш цікавим комбінатором є комбінатор фіксованої точки[en] або комбінатор Y , який можна використовувати для реалізації рекурсії. Повнота базису S-KS і K можуть бути складені так, щоб виробляти комбінатори, які є екстенсивно рівними будь-якому лямбда-виразу, а отже, за тезою Черча, до будь-якої обчислювальної функції. Доказом є перетворення, T[ ], який перетворює довільний лямбда-член в еквівалентний комбінатор. T[ ] може бути визначено таким чином[6]:
Цей процес також відомий як усунення абстракції. Це визначення є вичерпним: будь-який лямбда-вираз буде підпорядковуватися рівно одному з цих правил (див. Підсумок лямбда-числення вище). Це пов'язано з процесом абстракції в дужках, який приймає вираз E, побудований зі змінних, і аплікацію, та повертає комбінаторний вираз [x]E, в якому змінна x не є вільною, так що [x]Ex = E виконується. Дуже простий алгоритм абстракції в дужках визначається індукцією за структурою виразів таким чином:
Абстракція в дужках індукує переклад з лямбда-термінів на комбінаторні вирази, інтерпретуючи лямбда-абстракції за допомогою алгоритму абстракції в дужках. Перетворення лямбда-вираза в еквівалентний комбінаторний термінНаприклад, ми перетворимо лямбда-термін λx.λy.(y x) до комбінаторного терміна:
Якщо застосувати цей комбінаторний термін до будь-яких двох термінів x і y, він зменшується таким чином:
Комбінаторний вираз (S (K (SI)) (S (KK) I)) набагато довше за лямбда-вираз, λx.λy.(ух), що є типовим. Загалом, T[ ] конструкція може розширити лямбда-вираз довжини n до комбінаторного виразу довжини Θ(n3)[7]. Пояснення Т[ ] перетворенняT[ ] перетворення мотивується прагненням усунути абстракцію. Два особливих випадки, правила 3 та 4, тривіальні: λx.х явно еквівалентно I, а λx.Е явно еквівалентно (K T[E]), якщо x не з'являється вільно в E. Перші два правила також є простими: змінні перетворюються самі на себе, а аплікації, дозволені в комбінаторних термінах, перетворюються на комбінатори просто шляхом перетворення апліканту та аргументу на комбінатори. Інтерес представляють правила 5 та 6. Правило 5 просто говорить, що для перетворення складної абстракції на комбінатор, ми повинні спочатку перетворити його тіло на комбінатор, а потім видалити абстракцію. Правило 6 фактично видаляє абстракцію. λx.(Е₁ Е₂) являє собою функцію, яка приймає аргумент, скажімо, a, і замінює його на лямбда-вираз (Е₁ Е₂) замість х, отримуючи (Е₁ Е₂)[х := a]. Але підставляючи a в (E₁ E₂) замість x, це те ж саме, що й підстановка його на обидва E₁ і E₂, таким чином: (E₂ E₂)[x := a] = (E₁[x := a]E₂[x := a]): (λx . (E ₂ E ₂) a) = ((λx . E) a) (λx . E) a))
За екстенсійної рівності,
Тому для знаходження комбінатору, що еквівалентний λx.(E₁ E₂), достатньо знайти комбінатор, що еквівалентний (S λx.E₁ λx.E₂), та: (S T[λx.E₁] T[λx.E₂]) очевидно відповідає умовам. Кожен з E₁ та E₂ має строго меншу кількість аплікацій, ніж (E₁ E₂), тому рекурсія повинна закінчуватися в лямбда-виразі без жодних аплікацій — або змінні, або вирази виду λx.E. Спрощення перетворенняη-редукціяКомбінатори, що генеруються T[ ] перетворенням можуть бути зменшені, якщо взяти до уваги правило η-редукції :
λx.(E x) — функція, яка приймає аргумент x, і застосовує до нього функцію E; це екстенсійно дорівнює самій функції E. Тому достатньо перетворити E у комбінаторну форму. Враховуючи це спрощення, виникає цей приклад:
Цей комбінатор еквівалентний більш ранньому, довшому:
Аналогічно, оригінальна версія T[ ] перетворення трансформувала функцію тотожності λf.λx.(f x) до (S (S (K S) (S (K K) I)) (K I)). За правилом η-редукції λf.λx.(f x) перетворюється в I. Одноточковий базисІснують одноточкові базиси, з яких кожен комбінатор може бути складений екстенсійно рівним будь-якому лямбда-члену. Найпростішим прикладом такого базису є {X}, де:
Не важко переконатися, що:
Оскільки {K, S} є базисом, то {X} також є базисом. Мова програмування Iota[en] використовує X в якості свого єдиного комбінатора. Іншим простим прикладом одноточкового базису є:
X' не потребує η контракції для отримання K і S. Фактично існує безліч таких базисів.[8] Комбінатори B, CНа додаток до S і K, стаття Шейнфінкеля включала в себе два комбінатори, які зараз називаються B і C, з такими скороченнями:
Він також пояснює, як вони в свою чергу можуть бути виражені, використовуючи тільки S і K:
Ці комбінатори надзвичайно корисні при перекладі логіки предикатів або лямбда-числення в комбінаторні вирази. Їх також використовували Каррі, і набагато пізніше Девід Тернер[en], чиє ім'я було пов'язане з їх обчислювальним використанням. Використовуючи їх, ми можемо розширити правила перетворення таким чином:
Використовуючи комбінатори B і C , перетворення λx.λy.(y x) виглядає так:
І дійсно, (C I x y) зменшується до (y x):
Мотивація тут полягає в тому, що B і C є обмеженими версіями S. У той час як S приймає значення і замінює його на обидва додатки і його аргумент перед виконанням програми, C виконує заміну тільки в застосуванні, а B - тільки в аргументі. Сучасні назви для комбінаторів випливають з докторської дисертації Хаскелла Каррі 1930 року (див. B, C, K, W System[en]). У оригінальній роботі Шейнфінкеля те, що ми називаємо S, K, I, B і C, називали S , C , I , Z і T відповідно. Зменшення розміру комбінатора, що випливає з нових правил перетворення, також може бути досягнуто без введення B і C, як показано в розділі 3.2.[9] CLK проти CLI численняНеобхідно розрізняти CLK, як описано в цій статті, і обчислення CLI. Відмінність полягає в тому ж, що й між λK і λI численням. На відміну від обчислення λK, обчислення λI обмежує абстракцію до λx.E де x має принаймні одне вільне входження в E. Як наслідок, комбінатор K не присутній у λI обчисленнях, а також у численні CLI. Константами CLI є: I, B, C і S, які є основою для складання всіх термінів CLI (рівність по модулю). Кожен термін λI може бути перетворений в рівний комбінатор CLI згідно з правилами, подібними до описаних вище для перетворення термінів λ K в комбінатори CLK. Див. розділ 9 у Барендрегта (1984). Зворотне перетворенняПеретворення L[ ] від комбінаторних виразів до лямбда-виразів тривіальне:
Зазначимо, однак, що це перетворення не є зворотним перетворенням будь-якої з версій T[ ] що ми бачили. Нерозв'язність комбінаторного численняНормальною формою[en] є будь-який комбінаторний термін, в якому примітивні комбінатори, які виникають, якщо такі є, не застосовуються до достатньої кількості спрощених аргументів. Не можна вирішити, чи має загальний комбінаторний термін нормальну форму; чи еквівалентні два комбінаторні терміни, і т. д. Це еквівалентно нерозв'язності відповідних задач для лямбда-виразів. Однак прямий доказ полягає в такому: По-перше, зауважте, що цей вираз
не має нормальної форми, оскільки вона зводиться до себе після трьох кроків, а саме:
і, очевидно, жоден інший порядок зменшення не може зробити вираз більш коротким. Тепер припустимо, що N було комбінатором для виявлення нормальних форм, таких що
Тепер нехай
Тепер розглянемо термін (S I I Z). Чи має (S I I Z) нормальну форму? Так, але тоді і тільки тоді, коли:
Тепер нам потрібно застосувати N до (S I I Z). Або (S I I Z) має нормальну форму, або ні. Якщо він має нормальну форму, то вищенаведене зменшується таким чином:
але Ω не має нормальної форми, тому ми маємо протиріччя. Але якщо (S I I Z) не має нормальної форми, вищезгадане зменшується таким чином:
це означає, що нормальна форма (S I I Z) просто I, інше протиріччя. Тому гіпотетичний комбінатор N нормальної форми не може існувати. Аналог теореми Райса для комбінаторної логіки говорить, що немає повного нетривіального предиката. Предикат є комбінатором, який, коли застосовується, повертає або T, або F. Предикат N нетривіальний, якщо існують два аргументи A і B такі, що N A = T і N B = F. Комбінатор N повний тоді і тільки тоді, коли N M має нормальну форму для кожного аргументу M. Тоді аналог теореми Райса говорить, що кожен повний предикат тривіальний. Доведення цієї теореми досить просте.
З цієї теореми нерозв'язності відразу випливає, що немає повного предиката, який може розрізняти терміни, які мають нормальну форму, і терміни, які не мають нормальної форми. Також випливає, що немає повного предиката, наприклад EQUAL, так що:
ВикористанняКомпіляція функціональних мовДевід Тернер використовував свої комбінатори для реалізації мови програмування SASL[en]. Кеннет Е. Іверсон використовував примітиви на основі комбінаторів Каррі в його мові програмування J, наступнику APL. Це дозволило Іверсону застосувати так зване мовчазне програмування[en], тобто програмування у функціональних виразах, що не містять змінних, а також потужні інструменти для роботи з такими програмами. Виявляється, мовчазне програмування можливе в будь-якій APL-подібній мові з визначеними користувачем операторами.[10] ЛогікаІзоморфізм Каррі-Говарда передбачає зв'язок між логікою і програмуванням: кожне доведення теореми інтуїціоністської логіки відповідає скороченню типового лямбда-терміна і навпаки. Крім того, теореми можна ідентифікувати за допомогою сигнатур типу функцій. Зокрема, типізована комбінаторна логіка відповідає системі Гільберта в теорії доказів. Комбінатори K і S відповідають аксіомам
Обчислення, що складається з AK, AS і MP, є повним для імплікаційного фрагмента інтуїціоністської логіки, що можна побачити таким чином. Розглянемо множину W всіх дедуктивно замкнутих множин формул, упорядкованих за включенням. Тоді є інтуїціоністичним кадром Крипке, і ми визначаємо модель в цьому кадрі таким чином: . Це визначення підпорядковується умовам задоволення →: з одного боку, якщо , і таке, що і , то за modus ponens. З іншого боку, якщо , то за теоремою про дедукцію, таким чином, дедуктивне змикання є елементом таким, що , , і . Нехай A будь-яка формула, яка не є доказовою в численні. Тоді A не належить до дедуктивного замикання X порожньої множини, таким чином і А не є інтуїтивно дійсним. Див. такожПримітки
Подальше читання
Посилання
|
Portal di Ensiklopedia Dunia