Evrensel / varoluşsal niceleme?


11

Tiplerin evrensel ve varoluşsal nicemlemesinin amacını anlamak için uğraşıyorum. Yapılar hesabına dayalı bir oyuncak dili yazarak oynuyorum . Daha iyi bir anlayış edinmeme yardımcı olmak için Morte ve Henk hakkında okuyorum .

CoC'nun neden hem lambda hem de forall soyutlaması olduğunu anlamıyorum.

( X : bir . B )

(λx:bir.B)
(x:bir.B)

Bana öyle geliyor ki lambda, tiplerin manuel olarak geçirildiği bir sistemde altını çiziyor. Başka bir deyişle, aşağıdaki

(x:*.λbir:x.bir)

İle değiştirilebilir

(λx:*.λbir:x.bir)

Kullanılan tipe ilk uygulanmışsa.

Neyi kaçırıyorum? Okumak için bana yardımcı olabilecek hangi makaleler, bloglar veya makaleler var?

Teşekkürler.

Yanıtlar:


12

(veya bazen gördüğünüz gibi ) bir tür olduğunu hatırlamanıza yardımcı olur . İçin genelleme . Bu yüzden demek mükemmel bir mantıklı olsa da , demek mantıklı değil çünkü sadece bir türdür. Bu demek değildir etmiyor ki başına değil se hesaplanması için, bu ne var ki olan bu gibi uygulanabilir sınıflandırmak lambda açısından .tt ( λ x : bir . E ) N- ( X : bir . M ) , N . . . ( A B ) N Π(λx:A.M) N-(x:A.M) N-...(birB) N-

Bu da beni harekete geçiren bir şeydi, ancak yapıların hesabı (ve aynı zamanda diğer tiplendirilmiş herhangi bir sistem) bu şekilde tanımlanır.

Yazdığınız iki programın çok farklı niyetleri var ve birincisi kötü yazılmış. demek mantıklı değil çünkü her iki argümanı da türlerine göre gerektirir, yani iyi yazılmışsa, sahip . Ancak, bir tür değildir, sadece bir tür tür atanabilir , asla . Öte yandan ikincisi neredeyse (ben İade etmek anlamına düşünüyorum değil ) bir fonksiyondur ve iki kullanan bir türü verilirse s.X : bir . B B : λ x . X X : bir . B a x x:bir. λx. xx:bir.BB:*λx.xx:bir.B*birx


Evet, dönmek anlamına . bir
oconnor0

@ oconnor0 Bu biraz mantıklı mı :)
Daniel Gratzer

Tam olarak değil. Hala biraz kafam karıştı. Bunun hakkında daha fazla düşünmek zorunda kalabilirim. Ben uygulamak çalışıyordu beri her iki örnek programları yerine dönmek değiştirdim . :)x i dbirxbend
oconnor0

Sanırım bir düzeyde terim ve türleri aynı şeyi yapmak istiyordum. Cevabınız ve cs.stackexchange.com/questions/49531/… arasında Nerede ters gittiğimi anlıyorum. Bunu oldukça normalleştirici bir sistemde yapmak istiyorum.
oconnor0

5

Varoluşsal ve evrensel türlerin oldukça farklı olduğunu unutmayın. Yapıcı mantıktır, klasik mantık değildir ve yapıcı mantıkta ve olmak klasik mantıktaki gibi değildir.

A B ( x ) B ( x ) x x x x B ( x ) x A B A Bx:bir.B(x) , tipi bir nesne alan ve tipi bir nesne döndüren program türüdür . Burada önemli olan tipin olmaz bağlıdır üzerindeki ve herkes için aynı değildir . ne olduğuna bağlı olarak değişebilir . Bir girişi için bir tamsayı çıkarabiliriz. Bir diğeri için gerçek bir sayı verebiliriz. Bir diğeri için gerçek sayılar üzerinden bir fonksiyon çıktısı verebiliriz. Eğer ile değişmez o zaman kullanabilirsiniz den fonksiyonların türünü olduğu yerde karşı .birB(x)B(x) xxxxB(x)xABAB

x:A.B(x) , (yapıcı) ayrımın bağımlı versiyonudur. Sen yapıcı ayrılma aklınıza gelebilecek iki tip ve ayrık birleşimine olarak ve . , dizinlenmiş tipindeki bir koleksiyonun ayrık birleşimidir . Tip minibüsünün değerine bağlı olarak değişmesi , onu bağımlı bir tip yapar. : 'nin bağlı olmadığı durumla karşılaştırın . Aynı kopyayı alıyoruzABABABx:A.B(x)B(x)x:AB(x)x:ABx:Ax:A.BB her biri için . Bu, ile izomorfiktir .x:AA×B

Şimdi neden bağımlı ürün ve toplam türlerine ihtiyacımız olduğunu sorabilirsiniz ? Çünkü bize daha etkileyici bir güç veriyorlar. Şimdi türleri tamamen görmezden gelebiliriz ve türsüz teori / fonksiyonel programlamaya sahip olabiliriz. Ancak bu, ilk etapta türlere sahip olmanın faydalarını ortadan kaldırır, örneğin, tüm programların her zaman sonlanıp sonlanmayacağını bilmeyeceksiniz (güçlü normalleştirme). Bkz. Lambda Küpü ve Bağımlı Tip . Bağımlı türleri iyi anlamanın iyi bir yolunun, Martin-Lof'un tür teorisinde bağımlı türleri tanıtmak ve ortadan kaldırmak için kurallara bakmak olduğunu düşünüyorum .

Bağımlı türlerin ana noktası şudur: çeşitli nedenlerden ötürü güzel bir tür teori içinde kalmak istiyoruz (örneğin hatalardan kaçınma, otomatik sonlandırma kanıtı vb.). Belirttiğinizler gibi ifade edebileceğimiz ve daha güçlü şeyler yapabileceğimiz türsüz lambda hesabı gibi bir şeye gitmek istemiyoruz. Bağımlı türlerin, güzel bir tür teorisinin içinde kalırken daha fazla şeyin ifade edilmesine izin vermek için icat edildiğini söyleyebiliriz.


1
"∃x: AB (x) ∃x: AB (x), (yapıcı) kopukluğun bağımlı sürümüdür." anlamına gelmek?
oconnor0
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.