Відповіді:
Можна на практиці зробити кілька речей, які неможливо прямо виразити в обчисленні лямбда.
Приклад обчислення SF - приклад. Його виразна сила не є новиною; цікава частина статті (не показана на слайдах) - теорія категорій, що стоїть за нею. Обчислення SF є аналогом реалізації lisp, де ви дозволяєте функціям перевіряти подання їх аргументу - так ви можете писати такі речі, як (print (lambda (x) (+ x 2)))
⟹ "(lambda (x) (+ x 2))"
.
Ще один важливий приклад - паралельність Плоткіна або . Інтуїтивно кажучи, є загальний результат, який говорить про те, що лямбда-числення є послідовним: функція, яка бере два аргументи, повинна вибрати один, щоб оцінити спочатку. Неможливо записати лямбда-термін or
таким чином, що ( or
⊤ ⊥) ⟹ ⊤
, ( or
⊥ ⊤) ⟹ ⊤ і or
⊥ ⊥ ⟹ ⊥ (де ⊥ - термін, що не закінчується, а ⊤ - термін, що закінчується). Це відомо як "паралельне", оскільки паралельна реалізація може зробити один крок кожного скорочення та зупинятись, коли один з аргументів закінчується.
Ще одна річ, яку ви не можете зробити в обчисленні лямбда - це введення / виведення. Вам доведеться додати додаткові примітиви для цього.
Звичайно, всі ці приклади можна представити в обчисленні лямбда, додавши один рівень непрямості, по суті представляючи лямбда-терміни як дані. Але тоді модель стає менш цікавою - ви втрачаєте зв’язок між функціями в модельованій мові та лямбда-абстракціями.
Відповідь на ваше запитання залежить від того, як ви визначаєте "обчислення" та "представлені". З іншого боку, нитка на LtU, про яку згадується sclv , складається здебільшого з людей, що розмовляють один з одним через неправильні визначення різних термінів.
Відмінність, безумовно, не є однією з обчислювальних можливостей - кожна розглянута система є еквівалентною Тьюрінгу. Проблема полягає в тому, що проста еквівалентність Тьюрінга насправді нічого не говорить про структуру або семантику виразу. В цьому відношенні, в надзвичайно мінімалістською моделі обчислень, що вимагає складні кодування або нетривіальні початкові стану, він може бути навіть неясно , буде чи система є здатною універсальним обчисленням, або ілюзія універсальності створюються чиєї - то інтерпретація системи . Наприклад, дивіться це обговорення у списку розсилки щодо двошарової, 3-символьної машини Тьюрінга, зокрема проблем, які висунув Вуган Пратт.
У будь-якому випадку, проведена різниця між чимось на зразок:
Еквівалентність Тьюрінга означає лише, що система відповідає третьому критерію будь-якої обчислювальної функції, тоді як це найчастіше перший критерій, який нас цікавить, або в формальній системі логіки, або в мові програмування (якою мірою вони насправді відрізняються).
Це дуже неформальний опис, але найважливішу ідею можна прибити більш точно. У вищезгаданому потоці LtU можна знайти пару посилань на існуючі роботи за аналогічними лініями.
І комбінаційна логіка Шенфінкеля, і церковне обчислення Церкви спочатку розглядалися як дистильовані абстракції логічних міркувань, і як така їх структура дуже чітко відображається на логічному міркуванні і навпаки. Вони також мають припущення про розширення , таке, як описано правилом ета-скорочення: λx. f x
там, де x
це не відбувається f
, еквівалентно лише f
одному.
На практиці дуже суворе поняття розширення може бути занадто обмежуючим, тоді як нестримна інтенсивність робить місцеві міркування про суб-вирази важкими або неможливими.
Обчислення SF - це модифіковане числення комбінаторів, яке забезпечує, як примітивну операцію, обмежену форму інтенсивного аналізу: здатність деконструювати частково застосовані вирази, але не примітивні значення чи ненормовані вираз. Це трапляється, щоб чітко відобразити такі ідеї, як відповідність шаблонів, як це можна знайти в мовах програмування в стилі ML або макросах, як це знайдено в Lisps, але їх неможливо описати в SK-або λ-обчисленні, без ефективного впровадження інтерпретатора для оцінки "інтенсивних" термінів.
Отже, підсумовуючи: Облік SF не може бути представлений безпосередньо у λ-обчисленні в тому сенсі, що найкраще можливе представлення, швидше за все, передбачає реалізацію інтерпретатора SF-обчислення, і причиною цього є принципова семантична різниця: чи вирази мають внутрішній структури, чи вони визначені суто зовнішньою поведінкою?
Обчислення SF Баррі Джея здатне вивчити структуру термінів, до яких він застосовується, що є нефункціональним. Обчислення лямбда і традиційна комбінаційна логіка є суто функціональними, і тому не може цього зробити.
Існує багато розширень лямбда-числення, які роблять речі, що порушують чистоту, більшість з яких потребує певної фіксації стратегії перезапису, таких як додавання стану, елементів керування (наприклад, через продовження) або змінних логіки.