Розв’язування функціональних рівнянь для невідомих функцій в обчисленні лямбда


14

Чи існують методи розв’язання функціональних рівнянь для невідомих функцій в обчисленні лямбда?

Припустимо, у мене функція ідентичності визначена як такою:

Ix=x

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

I=λx.x

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

Звичайно, функція ідентичності використовується лише як приклад. Мене цікавлять більш загальні методи розв’язання таких рівнянь. Зокрема, я хотів би знайти функцію яка відповідає такій вимозі:B

Bf(λx.M)=(λx.fM)

тобто "вводить" задану функцію у задану функцію лямбда ( λ x . M ) перед її "тілом" M (що є деяким довільним виразом лямбда), можливо, розбираючи її і будуючи нову, щоб вона став параметром, до якого застосовується функція f .f(λx.M)Mf

Відповіді:


13

Це відома проблема, відома як Об'єднання вищих порядків .

На жаль, ця проблема загалом не вирішена. Існує вирішальний фрагмент, відомий як Фрагмент малюнка Міллера. Він широко використовується, серед іншого, для перевірки типу залежно типізованих програм з метавимірюваними або відповідності шаблонів. Цей фрагмент є тим, де змінні об'єднання застосовуються лише до чітко пов'язаних змінних програми.

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

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

B=λf g x .f (g x)

Ми маємо:

  • B f (λx.M)
  • за α- еквівалентності=B f (λy.[y/x]M)α
  • =λx.f ((λy.[y/x]M)x)
  • =λx.f ([x/y][y/x]M)
  • =λx.f M

1
Так, здається, це подобається :) Смішне, що я майже отримав це рішення, але чомусь думав, що дзвінок на щось "виконає це", зіпсувавши вираз: q Що я пропустив, це що ми можемо замінити змінну іншою змінною, зв'язаною зовні. (λx.M)
BarbaraKwarc

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

3
Це об'єднання вищого порядку? Здається, питання стосується нетипового обчислення лямбда, а не просто набраного лямбдального числення.
Пітер Тейлор

2

Я думаю, що у мене є часткова відповідь щодо рівняння з функцією тотожності:

Ix=x

Ми хочемо вирішити це, знайшовши формулу для , яка буде мати форму ( λ p . M ) з деяким ще невідомим виразом M як її тілом. Давайте підставимо його до I у вихідному рівнянні:I(λp.M)MI

(λp.M)x=x

x

M[p/x]=x

Mpx

I=(λx.x)

що, звичайно, є правильною відповіддю :)


ω

ωω=ωω

ω(λx.M)M

(λx.M)ω=ωω

M

M[x/ω]=ωω

xMωωωMxx

ω=(λx.xx)

що насправді так :)


Але я маю відчуття, що це може бути так легко лише тому, що права сторона вже була у тому вигляді, який ми шукаємо.


M[x/ω]=ωωω=(λx.xx)

У цих двох простих випадках - так, є: просто замініть підміну. Але, як я вже сказав, ці випадки можуть спрацювати з чистою "удачею": правий бік вже в потрібній формі. Коли я спробував це на кількох складніших прикладах, це не вийшло. Це саме те, що я шукаю: для алгоритмічного шляху.
BarbaraKwarc

1
ωω=ωωωω
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.