Saf lambda hesabında bir quine


13

Saf lambda hesabında bir kine örneği istiyorum . Google'da bir tane bulamadığım için oldukça şaşırdım. Quine sayfası , birçok "gerçek" dil için quines listeler, ancak lambda hesabı için değil.

Tabii ki, bu, aşağıda yaptığım lambda hesabındaki bir quine ile ne demek istediğimi tanımlamak anlamına geliyor. (Oldukça spesifik bir şey istiyorum.)

Birkaç yerde, örneğin Larkin ve Stocks (2004), aşağıdakileri "kendi kendini kopyalayan" bir ifade olarak görüyorum: . Bu, tek bir beta azaltma adımından sonra kendi kendine azalır ve bir şekilde kine benzeri bir his verir. Bununla birlikte, sonlandırılmaması, benzersiz değildir: daha fazla beta azaltma aynı ifadeyi üretmeye devam edecektir, bu yüzden asla normal forma indirgenmeyecektir. Bana göre bir quine kendini sonlandıran ve çıktısını veren bir program ve bu özellik ile lambda ifadesi istiyorum.(λx.xx)(λx.xx)

Elbette, redexes içermeyen herhangi bir ifade zaten normal formdadır ve bu nedenle kendiliğinden sona erecek ve çıkacaktır. Ama bu çok önemsiz. Bu nedenle, önemsiz olmayan bir çözümü kabul edeceği umuduyla aşağıdaki tanımı öneriyorum:

tanım (geçici): Lambda hesabındaki bir kine, ( belirli bir lambda hesabı ifadesi anlamına gelir formunun bir ifadesidir olur ya, normal biçimde azaltılmış değişken isimleri değişiklikler altında ona eşdeğer bir şey , herhangi giriş .

(λx.A)
A((λx.A)y)y(λx.A)y

Lambda hesabının diğer diller gibi Turing eşdeğeri olduğu göz önüne alındığında, bu mümkün olmalı gibi görünüyor, ancak lambda hesabım paslı, bu yüzden bir örnek düşünemiyorum.

Referans

Larkin ve Phil Stocks Karşılaştırması. (2004) "Lambda Analizinde Kendini Kopyalayan İfadeler" Bilgi Teknolojisinde Araştırma ve Uygulama Konferansları, 26 (1), 167-173. http://epublications.bond.edu.au/infotech_pubs/158


Soruma bir cevap değil, ancak kendi gelecekteki referansım için (ve gelecekteki ziyaretçiler için) , birinin benden daha çok quines hakkında daha derin düşüncelere sahip olduğu wiki.haskell.org/Combinatory_logic'e bir bağlantıya sahip olmak yararlı olacaktır .
Nathaniel,

Bir kinin kendi kaynak kodunu üretmesi gerektiğini unutmayın . Temsil ettiği işlevi üretmek yeterli değildir.
PyRulez

@PyRulez lambda ifadesinin kaynak kodu nedir? Bir karakter dizisi ise, lambda ifadesinin çıktısını alması imkansızdır ve sonuç olarak belirsizlik korkusu olmadan lambda ifadeleri için biraz farklı bir şey ifade etmek için "quine" kelimesini tanımlayabiliriz. Öte yandan, kaynak kodunun lambda sınırdışı edilmesinin kendisi olduğunu düşünüyorsanız, "kaynak kodu" ve "temsil ettiği işlev" aynı şeydir. Bence burada iyiyim.
Nathaniel

telleri kodlayan bir kilise var. Bir lambda hesabı sorgusu, onu temsil eden karakter dizisinin kilise kodlamasını çıkarmalıdır.
PyRulez

Elbette, bu şekilde tanımlarsanız, bunu yapmak zor değildir. Bu soru farklı bir şeyle ilgiliydi.
Nathaniel,

Yanıtlar:


8

Bir dönem istiyorum böyle :M ΛQMΛ

QMβQ

üzerinde başka bir kısıtlama belirtmeyeceğim (örneğin formu ve normalleşip normalleşmediği konusunda) ve size kesinlikle normalleştirilmemesi gerektiğini göstereceğim.Q

  1. Varsayalım olduğu de normal formda. seçin (bunu yapabiliriz çünkü teoremin tüm için tutması gerekir ). Sonra üç vaka var.QMxM

    • Q bir atom . Sonra . Bu .aQMaxa
    • Q bir uygulamadır . Sonra . hipotez ile normal bir formdur, bu nedenle de normal formdadır ve indirgenemez .(RS)QM(RS)x(RS)(RS)x(RS)
    • Q bazı soyutlamadır ( serbest olması gerekiyorsa , basitlik için değişken özetleri ne olursa olsun eşdeğerini seçebiliriz ). Daha sonra . Yana normal formda, yani bir . Sonuç olarak biz azaltamaz için .(λx.A)xAMλQM(λx.A)xβA[x/x]A(λx.A)AA(λx.A)

    Yani böyle bir eğer varsa, bu uygulama olamaz içinde normal formda.Q

  2. Bütünlüğü sağlamak için, varsayalım olan normal formu değil ama içinde , örneğin, (belki de zayıf normalize olan) normal formda olan şekilde : Q Nβ-nfNQMΛ

    QMβQβN

    Daha sonra azaltma dizisi de olmalıdır , çünkü:MxQxβNxβN

    • QxβNx , mümkündür .QβN
    • Nx normalleşmelidir, çünkü bir -nf'dir ve sadece bir atomdur.Nβx
    • Eğer dışında bir normalize edildi , ardından iki sahiptir Kilise-Rosser teoremine bir doğal sonucu ile mümkün değildir -nfs. (Church-Rosser teoremi, aslında bildiğiniz gibi indirimlerin birbirine karıştığını belirtir.)N Q x βNxNQxβ

    Ancak yukarıdaki (1) argümanı ile mümkün olmadığına dikkat edin , bu nedenle normal bir biçime sahip olduğu varsayımız kabul edilebilir değildir.QNxβNQ

  3. Böyle bir izin verirsek, normalleştirmemesi gerektiğinden eminiz. Bu durumda, aldığı argümanı ortadan kaldıran bir birleştirici kullanabiliriz. Denis'in önerisi işe yarıyor: Sonra sadece iki redükte: 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

Eğer bu durum sonuç çok şaşırtıcı değil edilir esasen ortadan kaldırır Herhangi bir bağımsız değişken aldığı bir dönem için soran ve bu sık sık sabit nokta teoremi doğrudan uygulama olarak belirtilen görmek bir şeydir.


Denis'in cevabını da kabul edebilseydim, yapardım, ama (biraz daha öğrendikten ve tam olarak anlayabildikten sonra) beni bu "quine birleştiricisinin" bir normal formda lambda ifadesi.
Nathaniel

9

Bir yandan bu imkansızdır, çünkü bir kinin kendi kodunu çıkarması beklenir ve saf lambda hesabı çıktı vermek için hiçbir araca sahip değildir.

Öte yandan, sonuçta ortaya çıkan terimin çıktı olduğunu varsayarsanız, her normal form bir kınadır.

Örneğin, lambda terimi zaten normal bir formdur, daha sonra çıktısının ortaya çıkan normal form olduğunu varsayarsak, çıktı . Bu nedenle bir kuindir.(λx.x)(λx.x)(λx.x)


2
Bu ilginç bir nokta. Soruda lambda hesabında önemsiz olmayan bir kın olarak neyin sayılabileceğinin bir tanımını vermeye çalıştım: herhangi bir girdiye uygulandığında beta azaltan bir işlev (değişken ad ikamelerine kadar). Bu imkansız olabilir, ama en azından benim için açık değil.
Nathaniel

8

İşte bir öneri:

Bu seçim fonksiyonunun bir fixpoint olmak .Af=λt.(λz.t)

Bu, düzeltme noktası birleştiricisi ve .Y=λg.((λx.g (x x)) (λx.g (x x)))A=Yf=(λx.λz.(x x)) (λx.λz.(x x))

Şimdi bir kın olduğunu gösteriyoruz . Gerçekten de azaltır bunun anlamı, bu yüzden herhangi bir için , .AAλz.Ay(λz.A)yβAβ(λz.A)


Bu oldukça düzgün ve soruyu sorduğum gibi cevaplıyor, bu yüzden kabul etmemekten dolayı kendimi kötü hissediyorum --- ama ne yazık ki istediğimi belirlerken küçük bir hata yaptım. Aslında isteyen olmak için sadece bir beta indirgeme adımından sonra, normal bir biçimde düşük olduğunda. (Neden için güncellenmiş soruya bakın.) Bu, herhangi bir redeks içeremeyeceği anlamına gelir , çünkü eğer varsa, azalma sona ermeyecektir. (λz.A)y(λz.A)A
Nathaniel

1
İstediğiniz: Bu durumda Ah ben oldukça emin bunun nedeni aşağıdakilerden sezgi (bir kanıtı ama neredeyse) arasında, imkansız olduğum o işe sahip olduğu için her hiçbir rol oynamaya böylece, serbest olmamalı . Sonra sadece düşer . Şimdi indirilmesini istiyorsunuz . Bu son ifade normal bir form olamaz, çünkü içerideki tekrar azaltılabilir ...yyyA(λz.A)yAAλz.AA
Denis

1
Bu davranış çok şaşırtıcı değildir, çünkü "baskısı" yine talimatlar olduğu için, kendi kodunu basan bir quine her zaman yürütülebilir. Sorduğunuz şey, çıktıyı yürütürseniz hiçbir şey (tanım gereği imkansız) yazdırmayacak şekilde bir quine istemeye benzer. λcalculus
Denis

Ahh, elbette haklısın. Bunu görmeliydim. Daha iyi bir tanım istemek için cevabınızı kabul edip etmeyeceğinizden veya soruyu düzenleyip düzenlemediğinizden emin değilim. Biraz düşüneceğim. (Bana hala, sona erecek bir şey istediğin önemsiz olmayan bir tanım vermenin mümkün olması gerektiği gibi görünüyor, ama nasıl emin değilim.)
Nathaniel

Bunu söylemiş olsa da, ( demek istediğini sanıyorum ) özgür olmamalı gerçekten doğru mu? Örneğin , çizgileri boyunca bir şey olabilir . (Sözde kod çünkü lambda hesabında rasgele ifadeler için eşitlik operatörünü tanımlamanın mümkün olup olmadığından emin değilim, ama ne demek istediğimi anladığınızı düşünüyorum.)zzAAif z==p then return q, otherwise return q
Nathaniel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.