Чому Lambda Calculus не може представляти комбінаторів?


18

Ця стаття передбачає, що є комбінатори (що представляють символічні обчислення), які не можуть бути представлені обчисленням лямбда (якщо я правильно розумію):

Відповіді:


20

Можна на практиці зробити кілька речей, які неможливо прямо виразити в обчисленні лямбда.

Приклад обчислення SF - приклад. Його виразна сила не є новиною; цікава частина статті (не показана на слайдах) - теорія категорій, що стоїть за нею. Обчислення SF є аналогом реалізації lisp, де ви дозволяєте функціям перевіряти подання їх аргументу - так ви можете писати такі речі, як (print (lambda (x) (+ x 2)))"(lambda (x) (+ x 2))".

Ще один важливий приклад - паралельність Плоткіна або . Інтуїтивно кажучи, є загальний результат, який говорить про те, що лямбда-числення є послідовним: функція, яка бере два аргументи, повинна вибрати один, щоб оцінити спочатку. Неможливо записати лямбда-термін orтаким чином, що ( or⊤ ⊥) ⟹ , ( or⊥ ⊤) ⟹ ⊤ і or⊥ ⊥ ⟹ ⊥ (де ⊥ - термін, що не закінчується, а ⊤ - термін, що закінчується). Це відомо як "паралельне", оскільки паралельна реалізація може зробити один крок кожного скорочення та зупинятись, коли один з аргументів закінчується.

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

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


11

Відповідь на ваше запитання залежить від того, як ви визначаєте "обчислення" та "представлені". З іншого боку, нитка на LtU, про яку згадується sclv , складається здебільшого з людей, що розмовляють один з одним через неправильні визначення різних термінів.

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

У будь-якому випадку, проведена різниця між чимось на зразок:

  • Речі, які можна представити безпосередньо в системі, призначаючи семантику примітивним операціям таким чином, що операції обов'язково зберігають семантику
  • Речі, які можна представити "опосередковано", вказавши процедуру інтерпретації, що виконується поза системою, де інтерпретація вважається "простішою", ніж система в якомусь сенсі
  • Речі, які можуть бути імітовані в системі за допомогою повного шару непрямості, наприклад, побудова інтерпретатора для іншої системи, яка забезпечує безпосереднє подання.

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

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


І комбінаційна логіка Шенфінкеля, і церковне обчислення Церкви спочатку розглядалися як дистильовані абстракції логічних міркувань, і як така їх структура дуже чітко відображається на логічному міркуванні і навпаки. Вони також мають припущення про розширення , таке, як описано правилом ета-скорочення: λx. f xтам, де xце не відбувається f, еквівалентно лише fодному.

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

Обчислення SF - це модифіковане числення комбінаторів, яке забезпечує, як примітивну операцію, обмежену форму інтенсивного аналізу: здатність деконструювати частково застосовані вирази, але не примітивні значення чи ненормовані вираз. Це трапляється, щоб чітко відобразити такі ідеї, як відповідність шаблонів, як це можна знайти в мовах програмування в стилі ML або макросах, як це знайдено в Lisps, але їх неможливо описати в SK-або λ-обчисленні, без ефективного впровадження інтерпретатора для оцінки "інтенсивних" термінів.

Отже, підсумовуючи: Облік SF не може бути представлений безпосередньо у λ-обчисленні в тому сенсі, що найкраще можливе представлення, швидше за все, передбачає реалізацію інтерпретатора SF-обчислення, і причиною цього є принципова семантична різниця: чи вирази мають внутрішній структури, чи вони визначені суто зовнішньою поведінкою?


Що ви маєте на увазі, що існують різні погляди на те, як обчислення можуть бути представлені на машині Тьюрінга?
hawkeye

5

Обчислення SF Баррі Джея здатне вивчити структуру термінів, до яких він застосовується, що є нефункціональним. Обчислення лямбда і традиційна комбінаційна логіка є суто функціональними, і тому не може цього зробити.

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


2
Дивіться також розширену дискусію / дискусію в Lambda the Ultimate: lambda-the-ultimate.org/node/3993
sclv
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.