Birincisi, cody'nin noktalarından birini yinelemek için, Endüktif Yapılar Hesabı (Coq'un çekirdeğinin dayandığı), Yapılar Hesabı'ndan çok farklıdır. Martin-Löf tipi teorilerde evrenlerle başlayan ve ardından tip hiyerarşisinin dibine bir sıralama Prop eklenmesi en iyisidir. Bu, F-omega'nın bağımlı bir sürümü olarak en iyi düşünilen orijinal CoC'den çok farklı bir canavar. (Örneğin, CiC'nin set-teorik modelleri vardır ve CoC yoktur.)
Bununla birlikte, (CoC'nin bir üyesi olduğu) lambda küpü, tipik olarak yazım kurallarının sayısında ekonomik nedenlerden dolayı saf tip bir sistem olarak sunulur. Türleri, türleri ve terimleri aynı sözdizimsel kategorideki öğeler olarak ele alarak, daha az sayıda kural yazabilir ve kanıtlarınız da biraz daha fazla gereksiz olur.
Ancak, anlamak için, farklı kategorileri açıkça ayırmak faydalı olabilir. Üç sözdizimsel kategori, türler (meta değişkenler arasında değişmektedir k
), türler (meta değişkenler arasında değişiyordu A
) ve terimler (meta değişkenler arasında değişiyordu e
) tanımlayabiliriz . Daha sonra, sekiz sistemin tümü, üç seviyenin her birinde izin verilen şeylerin varyasyonu olarak anlaşılabilir.
λ → (Basitçe yazılı lambda matematiği)
k ::= ∗
A ::= p | A → B
e ::= x | λx:A.e | e e
Bu temel tipte lambda matematiğidir. Tek bir tür ∗
vardır, bu bir türdür. Tiplerin kendileri atomik tipler p
ve fonksiyon tipleridir A → B
. Terimler değişkenler, soyutlamalar veya uygulamalardır.
λω_ (STLC + daha iyi türdeki operatörler)
k ::= ∗ | k → k
A ::= a | p | A → B | λa:k.A | A B
e ::= x | λx:A.e | e e
STLC sadece terim düzeyinde soyutlamaya izin verir. Onu, tür düzeyinde eklersek, o zaman tür k → k
düzeyinde işlevlerin türünü ve soyutlama λa:k.A
ve uygulama türünü de içeren yeni bir tür ekleriz A B
. Yani şimdi polimorfizmimiz yok, fakat tip operatörlerimiz var.
Hafıza hizmet ederse, bu sistem STLC'den daha fazla hesaplama gücüne sahip değildir; sadece size türleri kısaltmak için yeteneği verir.
λ2 (F Sistemi)
k ::= ∗
A ::= a | p | A → B | ∀a:k. A
e ::= x | λx:A.e | e e | Λa:k. e | e [A]
Tip operatörleri eklemek yerine, polimorfizm ekleyebilirdik. Tip düzeyinde, ∀a:k. A
eski olan bir polimorfik tip olanı ekleriz ve terim düzeyinde, tipler Λa:k. e
ve tip uygulaması üzerine soyutlama ekleriz e [A]
.
Bu sistem STLC'den çok daha güçlü - ikinci dereceden aritmetik kadar güçlü.
λω (Sistem F-omega)
k ::= ∗ | k → k
A ::= a | p | A → B | ∀a:k. A | λa:k.A | A B
e ::= x | λx:A.e | e e | Λa:k. e | e [A]
Hem tip operatörleri hem de polimorfizmimiz varsa, F-omega alırız. Bu sistem, en modern işlevsel dillerin (ML ve Haskell gibi) çekirdek türü teorisidir. Aynı zamanda Sistem F'den çok daha güçlüdür - daha yüksek dereceli aritmetik ile mukavemet bakımından eşdeğerdir.
λP (LF)
k ::= ∗ | Πx:A. k
A ::= a | p | Πx:A. B | Λx:A.B | A [e]
e ::= x | λx:A.e | e e
Polimorfizm yerine basitçe yazılmış lambda hesabından bağımlılık yönünde gidebilirdik. İşlev türünün argümanının dönüş türünde kullanılmasına izin vermesine izin verdiyseniz (yani, Πx:A. B(x)
yerine yazın A → B
), o zaman λP olur. Bunu gerçekten yararlı hale getirmek için, tür kümesini argüman olarak alan bir tür tür işleçleri ile genişletmek zorundayız Πx:A. k
ve bu nedenle tür düzeyinde de buna uygun bir soyutlama Λx:A.B
ve uygulama eklemeliyiz A [e]
.
Bu sisteme bazen LF veya Edinburgh Mantıksal Çerçevesi denir.
Basit yazılı lambda matematiği ile aynı hesaplama gücüne sahiptir.
λP2 (özel ad yok)
k ::= ∗ | Πx:A. k
A ::= a | p | Πx:A. B | ∀a:k.A | Λx:A.B | A [e]
e ::= x | λx:A.e | e e | Λa:k. e | e [A]
Ayrıca λP2 elde etmek için λP'ye polimorfizm de ekleyebiliriz. Bu sistem sık kullanılmaz, bu yüzden belirli bir isme sahip değildir. (Kullanılmış olan Herman Geuvers'ın İndüksiyonu olduğunu okuduğum bir makale , İkinci Dereceye Bağlı Tip Teorisinde Türetilmez )
Bu sistem Sistem F ile aynı güce sahiptir.
λPω_ (özel ad yok)
k ::= ∗ | Πx:A. k | Πa:k. k'
A ::= a | p | Πx:A. B | Λx:A.B | A [e] | λa:k.A | A B
e ::= x | λx:A.e | e e
ΛPω_ almak için λP'ye tip operatörleri de ekleyebiliriz. Bu, Πa:k. k'
tip operatörleri için bir tür eklemeyi ve karşılık gelen tip düzeyinde soyutlamayı Λx:A.B
ve uygulamayı içerir A [e]
.
Yine STLC üzerinde hesaplama gücünde bir sıçrama olmadığından, bu sistem aynı zamanda mantıklı bir çerçeve için iyi bir temel sağlamalıdır, ancak kimse yapmadı.
λPω (Yapıların Hesabı)
k ::= ∗ | Πx:A. k | Πa:k. k'
A ::= a | p | Πx:A. B | ∀a:k.A | Λx:A.B | A [e] | λa:k.A | A B
e ::= x | λx:A.e | e e | Λa:k. e | e [A]
Son olarak, λPω_ alarak ve eski ∀a:k.A
ve terim düzeyinde soyutlama Λa:k. e
ve e [A]
bunun için bir polimorfik tip ekleyerek, Yapıların Hesabı olan λPω'ya ulaşıyoruz .
Bu sistemin tipleri F-omega'dan çok daha anlamlı, ancak aynı hesaplama gücüne sahip.
soft-question
. Burada asıl teknik bir soru görmüyorum. Belki de ne sorduğunuzu biraz daha spesifik olabilir?