Kanonik fonksiyonlarla programlama dilleri


29

Tüm fonksiyonların kanonik bir formda olduğu (fonksiyonel) programlama dilleri var mı? Yani, tüm girdiler için aynı değerleri döndüren herhangi iki işlev aynı şekilde temsil edilir, örneğin f (x) x + 1'i döndürür ve g (x) x + 2'yi döndürürse, sonra f (f (x) )) ve g (x), program derlenirken ayırt edilemez çalıştırılabilirler üretecektir.

Belki daha da önemlisi, programların kanonik temsili hakkında daha fazla bilgiyi nereden / nasıl bulabilirim (Googling "kanonik temsil programları" verimli olmamıştı)? Sormak doğal bir soru gibi gözüküyor ve korkarım aradığım şey için uygun terimi bilmiyorum. Böyle bir dilin Turing'in tamamlanmasının mümkün olup olmadığını ve olmasa da, böyle bir özelliği korurken bir programlama dilinin ne kadar etkileyici olabileceğini merak ediyorum.

Geçmişim oldukça sınırlı, bu yüzden daha az önkoşullu kaynakları tercih ederim, ancak daha gelişmiş kaynaklara yapılan referanslar da iyi olabilir, bu şekilde neye çalışmak istediğimi bileceğim.

Yanıtlar:


38

Bunun mümkün olduğu ölçüde lambda matematiği teorisinde aslında açık bir soru var. İşte bilinenlerin kısa bir özeti:

  • Birim, ürünler ve fonksiyon alanına sahip basitçe yazılmış lambda matematiği, kanonik basit bir form özelliğine sahiptir. İki terim, yalnızca aynı beta-normal, eta-uzun biçimine sahipse eşit olur. Bu normal formları hesaplamak da oldukça kolaydır.

  • Toplam türlerinin eklenmesi, sorunları büyük ölçüde karmaşıklaştırmaktadır. Eşitlik sorunu hala belirsizdir (aranacak anahtar kelime "kopya eşitliğidir"), ancak bilinen algoritmalar son derece zor nedenlerden dolayı çalışır ve bildiğim kadarıyla tamamen tatmin edici normal form teoremi yoktur. İşte bildiğim dört yaklaşım:

  • Doğal sayılar gibi sınırsız türlerin eklenmesi, sorunu çözülemez hale getirir. Temel olarak, şimdi Hilbert'in onuncu problemini kodlayabilirsiniz.

  • Özyinelemenin eklenmesi sorunu kararsız hale getirir, çünkü normal formlara sahip olmak eşitliği azaltabilir kılar ve durma problemini çözmenize izin verir.


Bu makale , kopyalarla eşdeğerliği toplamlarla eşdeğerliğe genişletmektedir ancak "tek" kanonik biçim sözdizimi yoktur, karşılaştırdığınız iki terimin yanlış olduğunu gösteren alt terimlerin ne zaman olduğunu tespit etmek için yeterince akıllı bir "doyma işlevi" seçersiniz. Her ikisi de odaklanmayı kullanmaları, Ahmed-Licata-Harper'a en çok benzeyen şey.
Max Yeni

Yalnızca birim, ürünler ve işlevlerle, yazabileceğiniz her şeyin önem derecesi 1'dir, oysa toplamlar eklerseniz, birden fazla önemli değer elde edersiniz (ve "yararlı hesaplama" yapabilirsiniz). Bu gerçekler birbiriyle ilişkili mi?
glaebhoerl

1
bλx:b.λy:b.xλx:b.λy:b.y
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.