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 Λ :QMΛ

QMβQ

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

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

    • - некоторый атом а . Тогда Q M a x . Это не сводится к.QaQMaxa
    • является некоторым приложением ( 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β-nfNQMΛ

    QMβQβN

    Тогда при также должна существовать редукционная последовательность Q x β N x β N , потому что:MxQxβ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)))M1β(λ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. (Псевдокод, потому что я не уверен, возможно ли вообще определить оператор равенства для произвольных выражений в лямбда-исчислении, но я думаю, вы понимаете, о чем я.)
Натаниэль