Barendregt'in lambda küpündeki saf tip sistemleri, özellikle en güçlü olanı olan İnşaat Analizini deniyorum. Bu sistemin çeşitleri *ve BOX. Sadece kayıt için, aşağıda klasik lambda hesabına yakın olan https://github.com/Gabriel439/Haskell-Morte-LibraryMorte aracının somut sözdizimini kullanıyorum .
Endüktif türleri bir çeşit Kilise benzeri kodlamayla (cebirsel veri türleri için Boehm-Berarducci izomorfizmi olarak) taklit edebileceğimizi görüyorum. Basit bir örnek için tür Bool = ∀(t : *) -> t -> t -> tyapıcıları True = λ(t : *) -> λ(x : t) -> λ(y : t) -> xile yazın False = λ(t : *) -> λ(x : t) -> λ(y : t) -> y.
Terim düzeyindeki işlevlerin Bool -> Ttürünün , aslında özdeş olan işlev aracılığıyla Product T Tklasik Product = λ(A : *) -> λ(B : *) -> ∀(t : *) -> (A -> B -> t) -> tmodulo parametrikliği olan tip çiftlerine izomorfik olduğunu görüyorum if : Bool -> λ(t : *) -> t -> t -> t.
Aşağıdaki tüm sorular bağımlı türlerin temsili ile ilgili olacaktır Bool -> *.
Ben ayırabilir
D : Bool -> *çifti içineD TrueveD False.DTekrar yaratmanın kanonik yolu var mı? İzomosfizmi tür düzeyinde birBool -> T = Product T Tişlev analogu ile çoğaltmak istiyorumifancak bu işlevi orijinal kadar basit yazamıyorumifçünkü türler gibi argümanlarda tür iletemiyoruz .Soruyu çözmek için iki türden bir tür endüktif tip kullanıyorum (1). Üst düzey açıklama (Agda stili) aşağıdaki türdür (tür düzeyi yerine kullanılır
if)data BoolDep (T : *) (F : *) : Bool -> * where DepTrue : T -> BoolDep T F True DepFalse : F -> BoolDep T F FalsePTS / CoC'de aşağıdaki kodlamayla:
λ(T : *) -> λ(F : *) -> λ(bool : Bool ) -> ∀(P : Bool -> *) -> ∀(DepTrue : T -> P True ) -> ∀(DepFalse : F -> P False ) -> P boolYukarıdaki kodlamam doğru mu?
Ben
BoolDepbu kod gibi için yapıcılar yazabilirsinizDepTrue : ∀(T : *) -> ∀(F : *) -> T -> BoolDep T F True:λ(T : *) -> λ(F : *) -> λ(arg : T ) -> λ(P : Bool -> *) -> λ(DepTrue : T -> P True ) -> λ(DepFalse : F -> P False ) -> DepTrue arg
ancak ters fonksiyonu (veya ters yönde herhangi bir fonksiyonu) yazamıyorum. Mümkün mü? Yoksa BoolDepbir izomorfizm üretmek için başka bir gösterim BoolDep T F True = Tmi kullanmalıyım?