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


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 ∈ ΛQ∀M∈Λ

QM⊳βQ

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

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

    • a Q M ≡ a x aQ - деякий атом . Тоді . Це не можна звести до .aQM≡axa
    • ( 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∈β-nfN≢Q∀M∈Λ

    QM⊳βQ⊳βN

    Тоді з також повинна існувати послідовність скорочення , оскільки:Q x ⊳ β N x ⊳ β NM≡xQx⊳β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)))M⊳1β(λ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.