Quine в чистом лямбда-исчислении


13

Я хотел бы привести пример квин в чистом лямбда-исчислении . Я был довольно удивлен, что я не мог найти один, прибегая к помощи. На странице квин есть списки квин для многих «настоящих» языков, но не для лямбда-исчисления.

Конечно, это означает определение того, что я имею в виду под квинем в лямбда-исчислении, которое я делаю ниже. (Я прошу что-то вполне конкретное.)

В некоторых местах, например, Larkin and Stocks (2004), я вижу следующее, цитируемое как «самовоспроизводящееся» выражение: (λx.xx)(λx.Иксx) . Это сводится к себе после одного шага бета-сокращения, придавая ему ощущение, похожее на quine. Тем не менее, он не похож на quine в том смысле, что он не завершается: дальнейшие бета-сокращения будут продолжать производить то же выражение, поэтому он никогда не приведёт к нормальной форме. Для меня quine - это программа, которая завершает и выводит сама себя, и поэтому я хотел бы получить лямбда-выражение с этим свойством.

Конечно, любое выражение, которое не содержит переопределений, уже находится в нормальной форме и поэтому будет завершаться и выводить себя. Но это слишком тривиально. Поэтому я предлагаю следующее определение в надежде, что оно допустит нетривиальное решение:

определение (предварительное): Квина в лямбда-исчислении - это выражение вида

(λИкс,A)
(где A обозначает некоторое конкретное выражение для лямбда-исчисления), такое что ((λИкс,A)Y) становится(λИкс,A) или чем-то эквивалентным ему при изменениях имен переменных при уменьшении до нормальной формы длялюбоговводаY .

Учитывая, что лямбда-исчисление является эквивалентом Тьюринга, как и любой другой язык, кажется, что это возможно, но мое лямбда-исчисление ржаво, поэтому я не могу придумать пример.

Ссылка

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


Не ответ на мой вопрос, но для моей будущей ссылки (и для будущих посетителей) было бы полезно иметь ссылку на wiki.haskell.org/Combinatory_logic , в которой кто-то имеет более глубокие мысли о квин, чем я.
— Натаниэль

Обратите внимание, что квине нужно создать собственный исходный код . Создание функции, которую она представляет, недостаточно.
— PyRulez

@PyRulez каков исходный код лямбда-выражения? Если это последовательность символов, то для лямбда-выражения невозможно вывести его, и, следовательно, мы можем определить слово «quine», чтобы означать что-то немного другое для лямбда-выражений, не опасаясь двусмысленности. С другой стороны, если вы думаете о исходном коде как о лямбда-выражении, то «исходный код» и «функция, которую он представляет» - это одно и то же. Так что я думаю, что я в порядке здесь.
— Натаниэль

есть церковь, кодирующая строки. Лямбда-исчисление quine должно выводить церковное кодирование строки символов, представляющих его.
— PyRulez

Конечно, это не сложно сделать, если вы определите это таким образом. Этот вопрос был о другом.
— Натаниэль

Ответы:


8

Вы хотите термин такой, что ∀ M ∈ Λ :Q∀M∈Λ

QM⊳βQ

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

  1. Предположим , находится в нормальной форме. Выберите M ≡ x (мы можем сделать это, потому что теорема должна выполняться для всех M ). Тогда есть три случая.QM≡xM

    • - некоторый атом а . Тогда Q M ≡ a x . Это не сводится к.QaQM≡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 ) (если x предполагается свободным в A , то для простоты мы можем просто выбрать M, эквивалентный любой переменной λ, над которой абстрагируется). Тогда Q M ≡ ( λ х . ) Х ⊳ & beta ; [ х / х ] ≡ . Поскольку ( λ x . A ) находится в нормальной форме, то и AQ(λx.A)xAMλQM≡(λИкс,A)Икс⊳βA[Икс/Икс]≡A(λx.A)A, Следовательно, мы не можем привести к ( λ x . A ) .A(λx.A)

    Поэтому, если такой существует, он не может быть в нормальной форме.Q

  2. Для полноты, предположим , что имеет нормальную форму, но не в нормальной форме (возможно , это слабо нормирующий), т.е. ∃ N ∈ & beta ; -NF с N ≢ Q такие , что ∀ M ∈ Л : Q M ⊳ & beta ; Q ⊳ & beta ; NQ ∃N∈β-nfN≢Q∀M∈Λ

    QM⊳βQ⊳βN

    Тогда при также должна существовать редукционная последовательность Q x ⊳ β N x ⊳ β N , потому что:M≡xQx⊳βNx⊳βN

    • возможносчет тогочто Q ⊳ & beta ; N .Qx⊳βNxQ⊳βN
    • должен нормализоваться, поскольку N является β -nf, а x является просто атомом.NxNβx
    • Если бы нормализовалось ни к чему, кроме N , то Q x имеет две β- nfs, что невозможно по следствию из теоремы Черча-Россера. (Теорема Черча-Россера по существу утверждает, что сокращения, как вы, наверное, уже знаете, слиты).NxNQxβ

    Но обратите внимание, что невозможно по аргументу (1) выше, поэтому наше предположение о том, что Q имеет нормальную форму, неверно.Nx⊳βNQ

  3. Если мы допустим такое , то мы уверены, что оно должно быть ненормализующим. В этом случае мы можем просто использовать комбинатор, который исключает любой аргумент, который он получает. Предложение Дениса работает очень хорошо: Q ≡ ( λ z . ( Λ x . Λ z . ( X x ) ) ( λ x . Λ z . ( X x ) ) ). Тогда только в двух β- сокращениях: Q MQ

    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)(λИкс,Икс)(λИкс,Икс)


2
Это интересный момент. В этом вопросе я попытался дать определение того, что в лямбда-исчислении может рассматриваться как нетривиальная квинна: ​​функция, которая при применении к любому входному значению бета-сводится к себе (вплоть до подстановки имен переменных). Возможно, это невозможно, но это не очевидно, по крайней мере, для меня.
— Натаниэль

8

Вот предложение:

Af=λt.(λz.t)

Y=λграмм,((λИкс,грамм (Икс Икс)) (λИкс,грамм (Икс Икс)))Aзнак равноYезнак равно(λИкс,λZ,(Икс Икс)) (λИкс,λZ,(Икс Икс))

AAλZ,AY(λZ,A)Y→βA→β(λZ,A)


(λz.A)y(λz.A)A

1
YYYA(λZ,A)YAAλZ,AA

1
This behaviour is not very surprising, because thince the "printing" of λ−calculUsснова инструкции, quine, печатающий свой собственный код, всегда выполняется. То, что вы спрашиваете, аналогично тому, как запрашивать квинну, чтобы при выполнении вывода ничего не печаталось (что невозможно по определению).
— Денис

Ahh, you're right of course. I should have seen that. I'm not sure whether to accept your answer or edit the question to ask for a better definition. I'll give it a bit of thought. (It still seems to me that it should be possible to give a non-trivial definition where you're asking for something that will terminate, but I'm not sure how.)
— Nathaniel

Сказав это, правда ли, что Z (Я предполагаю, что вы имеете в виду Z) не должен быть свободным в A? НапримерAможет быть что-то вроде if z==p then return q, otherwise return q. (Псевдокод, потому что я не уверен, возможно ли вообще определить оператор равенства для произвольных выражений в лямбда-исчислении, но я думаю, вы понимаете, о чем я.)
— Натаниэль
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.