Ne yazık ki "polarite" tip teorisinde aşırı yüklenmiş bir kavramdır. "Pozitif konum" ve "negatif konum", Bob'un odaklama / polarizasyon ile bahsettiklerinden farklı bir kutupluluk kavramını ifade eder.
Senin anlamın
Tümevarım türünü tanımlarken, tanımladığınız tür için işlemlere karşılık gelen bir dizi kural verirsiniz. Örneğin Nat, a'nın
- bir değer
zero : Nat
- bir işlev
suc : Nat -> Nat
Ve sonra Nattekrar tekrar sucdiğer Nats ve içerir uygulamaktan oluşturulabilir tüm değerleri içeren bekliyoruz zero. Bu endüktif yapı doğrultusunda, bu inşaatçılar tarafından üretilen Natherhangi bir gerçeğe dayalı olarak çalışan bir özyineleme ilkesi elde ediyoruz Nat.
rec : A -> (A -> A) -> Nat -> A
Böylece
rec Z S zero = zero
rec Z S (suc n) = S (rec Z S n)
Ancak, kural olarak yazabileceğimiz bazı kısıtlamalar vardır. Aksi takdirde, özyineleme ilkesinin gerekçelendirilemeyeceği bir dizi kural yazabiliriz. DBir yapıcı ile "endüktif tip" düşünün
Burada aklı başında bir özyineleme ilkesi yok. ve iyi bir nedenle! Eğer bir özyineleme prensibimiz olsaydı, bunu kendi kendine uygulamanın bir versiyonunu ve bununla birlikte, sonlandırmayı kodlamak için kullanabilirdik. Bu, D"endüktif" olarak adlandırılamaz çünkü endüktif tipler, tekrar tekrar uygulanan kuruculardan üretilen sonlu yapılardır!
Bununla başa çıkmak için, tür teorisinde tümevarım türlerinin özyinelemeli olabileceğini kısıtlarız. Özellikle, "negatif yerlerde" görünmelerini engelliyoruz. Bahsettiğiniz kutupluluk kavramı budur. Bir pozisyonun polaritesi böylece belirlenir,
- Argüman olumlu bir pozisyonda başlar
- Her sola bir ok gittiğimizde, polarite değişiyor
Yani Xilk ikisinde pozitif, ikinci ikisinde negatif
X
Int -> X
X -> Int
(Unit -> X) -> Int
Bu fikir, tekrarı pozitif olan bir endüktif türün bir kovaryant fonksiyona yol açtığı bir kategori teorisine başvurmakla haklıdır. Bunun nasıl çalıştığının ve neden ilginç olduğunun detayları biraz uzun.
Bob Harper'ın Anlamı
Blog yazısında Harper farklı bir polarite anlamı hakkında konuşuyordu. Bu polarite, mantıktaki çeşitli bağlaçların nasıl anlamlandırıldığına referanstır. Özellikle, bağlaçları iki şekilde sınıflandırabiliriz
- Pozitif bağlaçlar, onları nasıl tanıtacaklarını tanımlayarak tanımlanabilir (giriş kuralları)
- Negatif bağlaçlar, bunların nasıl kullanılacağını tanımlayarak tanımlanabilir (eliminasyon kuralları)
Programlama dili terimlerinde, bu tembel ve katı türler arasındaki ayrımı güzel bir şekilde yakalar. Katı bir tür, değerleri ile tanımlanır. Tembel olan, desenin kendileriyle nasıl eşleşebileceği ile tanımlanır. Bunu doğru bir şekilde ele almak için, 2 ana yapı, pozitif tür oluşturmanın yolları ve negatif türleri ayrıştırmak için "dikenler" içeren bir dil tanımlarız. Bunu hem katı hem de tembel hesaplamayı tek bir dile dahil etmek için kullanabiliriz.
Bunu daha iyi anlamak için sizi Bob Harper'ın kitabının 38. bölümüne yönlendiriyorum .