Saya ingin contoh quine dalam kalkulus lambda murni . Saya cukup terkejut bahwa saya tidak dapat menemukannya dengan googling. Halaman quine mencantumkan quine untuk banyak bahasa "nyata", tetapi tidak untuk kalkulus lambda.
Tentu saja, ini berarti mendefinisikan apa yang saya maksudkan dengan quine dalam kalkulus lambda, yang saya lakukan di bawah ini. (Saya meminta sesuatu yang sangat spesifik.)
Di beberapa tempat, misalnya Larkin dan Stocks (2004), saya melihat yang berikut ini dikutip sebagai ekspresi "replikasi diri": . Ini berkurang pada dirinya sendiri setelah satu langkah pengurangan beta, memberikannya perasaan seperti quine. Namun, ini tidak seperti quine karena tidak berhenti: pengurangan beta lebih lanjut akan terus menghasilkan ekspresi yang sama, sehingga tidak akan pernah berkurang ke bentuk normal. Bagi saya quine adalah program yang mengakhiri dan mengeluarkan sendiri, jadi saya ingin ekspresi lambda dengan properti itu.
Tentu saja, setiap ekspresi yang tidak mengandung redex sudah dalam bentuk normal, dan karena itu akan berakhir dan dihasilkan sendiri. Tapi itu terlalu sepele. Jadi saya mengusulkan definisi berikut dengan harapan akan menerima solusi yang tidak sepele:
Definisi (tentatif): Sebuah quine dalam kalkulus lambda adalah ekspresi dari bentuk
Mengingat bahwa kalkulus lambda adalah setara dengan Turing seperti bahasa lain, sepertinya ini mungkin, tetapi kalkulus lambda saya berkarat, jadi saya tidak bisa memikirkan contohnya.
Referensi
James Larkin dan Phil Stocks. (2004) "Ekspresi mereplikasi diri dalam Kalkulus Lambda" Konferensi dalam Penelitian dan Praktek dalam Teknologi Informasi, 26 (1), 167-173. http://epublications.bond.edu.au/infotech_pubs/158
sumber
Jawaban:
Anda ingin istilah sedemikian rupa sehingga ∀ M ∈ Λ :Q ∀M∈Λ
Saya tidak akan menentukan batasan lebih lanjut pada (misalnya mengenai bentuknya dan apakah itu normalisasi) dan saya akan menunjukkan kepada Anda bahwa itu pasti harus non-normalisasi.Q
Asumsikan adalah dalam bentuk normal. Pilih M ≡ x (kita dapat melakukannya karena teorema perlu dipegang untuk semua M ). Lalu ada tiga kasus.Q M≡x M
Jadi jika seperti itu ada, tidak mungkin dalam bentuk normal.Q
Untuk kelengkapan, misalkanQ memiliki bentuk normal, tetapi tidak dalam bentuk normal (mungkin itu adalah normalisasi lemah), yaitu dengan N ≢ Q sehingga ∀ M ∈ Λ :
Q M ⊳ ß Q ⊳ ß N∃N∈β-nf N≢Q ∀M∈Λ
Maka dengan juga harus ada urutan reduksi Q x ⊳ β N x ⊳ β N , karena:M≡x Qx⊳βNx⊳βN
Tetapi perhatikan bahwa tidak dimungkinkan oleh argumen (1) di atas, jadi asumsi kami bahwa Q memiliki bentuk normal tidak dapat dipertahankan.Nx⊳βN Q
Jika kita mengizinkan seperti itu , maka, kami yakin itu harus non-normalisasi. Dalam hal ini kita bisa menggunakan kombinator yang menghilangkan argumen apa pun yang diterimanya. Saran Denis bekerja dengan baik: Q ≡ ( λ z . ( Λ x . Λ zQ
Kemudian hanya dalam duapengurangan β :
Q M
Hasil ini tidak terlalu mengejutkan, karena Anda pada dasarnya meminta istilah yang menghilangkan argumen apa pun yang diterimanya, dan ini adalah sesuatu yang sering saya lihat disebutkan sebagai aplikasi langsung dari teorema titik tetap.
sumber
Di satu sisi ini tidak mungkin, karena quine seharusnya mengeluarkan kodenya sendiri, dan kalkulus lambda murni tidak memiliki sarana untuk melakukan keluaran.
Di sisi lain, jika Anda menganggap bahwa istilah yang dihasilkan adalah output, maka setiap bentuk normal adalah quine.
Misalnya, istilah lambda sudah merupakan bentuk normal, kemudian dengan asumsi bahwa outputnya adalah bentuk normal yang dihasilkan, outputnya adalah ( λ(λx.x) . Jadi ( λ x . X ) adalah quine.(λx.x) (λx.x)
sumber
Berikut ini proposisi:
Kami memilih untuk menjadi titik fokus fungsi f = λ t .A .f=λt.(λz.t)
Ini dapat dilakukan dengan menggunakan fixpoint combinator , dan pengaturan A = Y f = ( λ x . λ z . ( x x ) ) ( λ xY=λg.((λx.g (x x)) (λx.g (x x))) .A=Yf=(λx.λz.(x x)) (λx.λz.(x x))
Sekarang kami menunjukkan bahwa adalah quine. Memang A tereduksi menjadi λ z . A , jadi itu berarti bahwa untuk setiap y , ( λ z . A ) y → β A → β ( λ zA A λz.A y .(λz.A)y→βA→β(λz.A)
sumber
if z==p then return q, otherwise return q