Я хотел бы привести пример квин в чистом лямбда-исчислении . Я был довольно удивлен, что я не мог найти один, прибегая к помощи. На странице квин есть списки квин для многих «настоящих» языков, но не для лямбда-исчисления.
Конечно, это означает определение того, что я имею в виду под квинем в лямбда-исчислении, которое я делаю ниже. (Я прошу что-то вполне конкретное.)
В некоторых местах, например, Larkin and Stocks (2004), я вижу следующее, цитируемое как «самовоспроизводящееся» выражение: . Это сводится к себе после одного шага бета-сокращения, придавая ему ощущение, похожее на quine. Тем не менее, он не похож на quine в том смысле, что он не завершается: дальнейшие бета-сокращения будут продолжать производить то же выражение, поэтому он никогда не приведёт к нормальной форме. Для меня quine - это программа, которая завершает и выводит сама себя, и поэтому я хотел бы получить лямбда-выражение с этим свойством.
Конечно, любое выражение, которое не содержит переопределений, уже находится в нормальной форме и поэтому будет завершаться и выводить себя. Но это слишком тривиально. Поэтому я предлагаю следующее определение в надежде, что оно допустит нетривиальное решение:
определение (предварительное): Квина в лямбда-исчислении - это выражение вида
Учитывая, что лямбда-исчисление является эквивалентом Тьюринга, как и любой другой язык, кажется, что это возможно, но мое лямбда-исчисление ржаво, поэтому я не могу придумать пример.
Ссылка
Джеймс Ларкин и Фил Стокс. (2004) "Самовоспроизводящиеся выражения в лямбда-исчислении". Конференции в области исследований и практики в области информационных технологий, 26 (1), 167-173. http://epublications.bond.edu.au/infotech_pubs/158
источник
Ответы:
Вы хотите термин такой, что ∀ M ∈ Λ :Q ∀M∈Λ
Я не буду указывать никаких дополнительных ограничений на (например, в отношении его формы и того, является ли он нормализующим), и я покажу вам, что он определенно не должен быть нормализующим.Q
Предположим , находится в нормальной форме. Выберите M ≡ x (мы можем сделать это, потому что теорема должна выполняться для всех M ). Тогда есть три случая.Q M≡x M
Поэтому, если такой существует, он не может быть в нормальной форме.Q
Для полноты, предположим , что имеет нормальную форму, но не в нормальной форме (возможно , это слабо нормирующий), т.е. ∃ N ∈ & beta ; -NF с N ≢ Q такие , что ∀ M ∈ Л : Q M ⊳ & beta ; Q ⊳ & beta ; NQ ∃N∈β-nf N≢Q ∀M∈Λ
Тогда при также должна существовать редукционная последовательность Q x ⊳ β N x ⊳ β N , потому что:M≡x Qx⊳βNx⊳βN
Но обратите внимание, что невозможно по аргументу (1) выше, поэтому наше предположение о том, что Q имеет нормальную форму, неверно.Nx⊳βN Q
Если мы допустим такое , то мы уверены, что оно должно быть ненормализующим. В этом случае мы можем просто использовать комбинатор, который исключает любой аргумент, который он получает. Предложение Дениса работает очень хорошо: Q ≡ ( λ z . ( Λ x . Λ z . ( X x ) ) ( λ x . Λ z . ( X x ) ) ). Тогда только в двух β- сокращениях: Q MQ
Этот результат не очень удивителен, так как вы , по сути, просите термин, который исключает любые аргументы, которые он получает, и это то, что я часто упоминаю как прямое применение теоремы о фиксированной точке.
источник
С одной стороны, это невозможно, потому что предполагается, что квинна выводит свой собственный код, а чистое лямбда-исчисление не имеет средств для выполнения вывода.
С другой стороны, если вы предполагаете, что результирующее слагаемое является выходным, то каждая нормальная форма является квине.
Например, лямбда-член уже является нормальной формой, и, если предположить, что его выходные данные являются результирующей нормальной формой, выходные данные будут ( λ x . X ) . Таким образом, ( λ x . X ) является квине.(λx.x) ( λ х . х ) ( λ х . х )
источник
Вот предложение:
источник
if z==p then return q, otherwise return q
. (Псевдокод, потому что я не уверен, возможно ли вообще определить оператор равенства для произвольных выражений в лямбда-исчислении, но я думаю, вы понимаете, о чем я.)