Квінка в чистому лямбдальному обчисленні


13

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

Звичайно, це означає визначити, що я маю на увазі під кволею в обчисленні лямбда, що я роблю нижче. (Я прошу щось досить конкретне.)

У деяких місцях, наприклад, Ларкін і Запаси (2004), я бачу таке, що цитується як "самовідтворюється" вираз: . Це зводиться до себе після одного кроку бета-зменшення, надаючи йому якось почуття, подібне до квінта. Однак він не схожий на квоту, оскільки він не закінчується: подальше бета-скорочення продовжує створювати той самий вираз, тому воно ніколи не зводиться до нормальної форми. Для мене quine - це програма, яка закінчується і видає себе, і тому я хотів би вирази лямбда з цим властивістю.(λx.xx)(λx.xx)

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

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

(λx.A)
A( λ х . а )((λx.A)y)(λx.A)y

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

Довідково

Джеймс Ларкін та Філ Стокс. (2004) "Самовідтворювані вирази в обчисленні лямбда" Конференції з досліджень та практики інформаційних технологій, 26 (1), 167-173. http://epublications.bond.edu.au/infotech_pubs/158


Не відповідь на моє запитання, але для моєї власної майбутньої довідки (і для майбутніх відвідувачів) корисним буде посилання на wiki.haskell.org/Combinatory_logic , в якому хтось має набагато глибші думки про лайків, ніж я.
Натаніел

Зауважте, що квінці потрібно створити власний вихідний код . Виробництво функції, яку вона представляє, є недостатньою.
PyRulez

@PyRulez, що таке вихідний код лямбда-виразу? Якщо це послідовність символів, тоді лямбда-вираз неможливо вивести його, і, отже, ми можемо визначити слово «quine», щоб означати щось трохи інше для лямбда-виразів, не боячись неоднозначності. З іншого боку, якщо ви вважаєте, що вихідний код є самою лямбда-експесією, то "вихідний код" і "функція, яку він представляє" - це одне і те ж. Тому я думаю, що тут я все в порядку.
Натаніель

є церковне кодування для рядків. Ламбда-обчислювальний ряд повинен виводити церковне кодування рядків символів, що представляють його.
PyRulez

Зрозуміло, що це не важко зробити, якщо ви визначите це саме так. Це питання стосувалося іншої речі.
Натаніель

Відповіді:


8

Ви хочете, щоб термін таким, що :M ΛQMΛ

QMβQ

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

  1. Припустимо знаходиться в нормальній формі. Оберіть (ми можемо це зробити, тому що теорему потрібно виконати для всіх ). Тоді є три випадки.M x MQMxM

    • a Q M a x aQ - деякий атом . Тоді . Це не можна звести до .aQMaxa
    • ( R S ) Q M ( R S ) x ( R S ) ( R S ) x ( R S )Q - деяке застосування . Тоді . - це нормальна форма за гіпотезою, тому також є в нормальній формі і не зводиться до .(RS)QM(RS)x(RS)(RS)x(RS)
    • ( λ x . A )Q - деяка абстракція (якщо має бути вільним в , то для простоти ми можемо просто вибрати еквівалент будь-якій змінній тези). Тоді . Так знаходиться в нормальній формі, так . Отже, ми не можемо звести до .(λx.A)A M λ Q M ( λ x . A ) x β A [ x / x ] A ( λ x . A ) A A ( λ x . A )xAMλQM(λx.A)xβA[x/x]A(λx.A)AA(λx.A)

    Отже, якщо такий існує, він не може бути у звичайній формі.Q

  2. Для повноти, припустимо, має нормальну форму, але не знаходиться в нормальній формі (можливо, вона слабо нормалізується), тобто з такий, що : N β -nf N Q M Λ Q M β Q β NQ Nβ-nfNQMΛ

    QMβQβN

    Тоді з також повинна існувати послідовність скорочення , оскільки:Q x β N x β NMxQxβNxβN

    • Q β NQxβNx можна тим , що .QβN
    • N β xNx повинен нормалізуватися, оскільки - -nf, а - просто атом.Nβx
    • Якщо повинні були нормалізуватися до чогось іншого, крім , то у є два -nfs, що неможливо через наслідки теореми Церкви-Россера. (Теорема Церкви-Россера по суті стверджує, що скорочення є злитими, як ви, напевно, вже знаєте.)N Q x βNxNQxβ

    Але зауважимо, що неможливий за аргументом (1) вище, тому наше припущення про те, що має нормальну форму, неможливо.QNxβNQ

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

    Q(λz.(λx.λz.(xx))(λx.λz.(xx)))
    β
    QM(λz.(λx.λz.(xx))(λx.λz.(xx)))M1β(λx.λz.(xx))(λx.λz.(xx))1β(λz.((λx.λz.(xx))(λx.λz.(xx)))Q

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


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

9

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

З іншого боку, якщо припустити, що отриманий термін є результатом, то кожна нормальна форма - це лайка.

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


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

8

Ось пропозиція:

Ми вибираємо для точки фіксування функції .Af=λt.(λz.t)

Це можна зробити за допомогою комбінатора точок фіксації та встановлення .Y=λg.((λx.g (x x)) (λx.g (x x)))A=Yf=(λx.λz.(x x)) (λx.λz.(x x))

Тепер ми покажемо, що - це квінт. Дійсно, зводиться до , тому це означає, що для будь-якого , .A λ z . A y ( λ z . A ) y β A β (AAλz.Ay(λz.A)yβAβ(λz.A)


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

1
Ах, в цьому випадку я впевнений, що це неможливо через наступну інтуїцію (не доказ, але майже): ви хочете, щоб не грало жодної ролі, оскільки це повинно працювати для кожного , тому не повинно бути вільним у . Тоді просто зводиться до . Тепер ви хочете, щоб зменшився до . Цей останній вираз не може бути нормальною формою, оскільки всередині можна знову зменшити ...yyyyA(λz.A)yAAλz.AA
Денис

1
Така поведінка не дуже дивно, тому що після "друку" знову вказівки, друк власного коду завжди можна виконати. Те, що ви запитуєте, схоже на запит у quine таким, що якщо ви виконаєте результат, він нічого не надрукує (що неможливо за визначенням). λcalculus
Денис

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

Хоча, сказавши це, чи справді це правда, що (я маю на увазі, що ви маєте на увазі ) не повинно бути вільним в ? Напр., може бути чимось за принципом . (Псевдокод, тому що я не впевнений, чи можливо навіть визначити оператор рівності для довільних виразів в обчисленні лямбда, але я думаю, ви бачите, що я маю на увазі.)z A AzzAAif z==p then return q, otherwise return q
Натаніел
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.