“Bağımlı tiplere” sahip olarak ne kazanırız?


13

Bağımlı yazmayı (DT) düzgün bir şekilde anladığımı düşündüm, ancak bu sorunun cevabı: /cstheory/30651/why-was-there-a-need-for-martin-l%C3% B6f-to-create-sezgisel-tip-teori , başka türlü düşünmemi sağladı .

DT'yi okuduktan ve ne olduklarını anlamaya çalıştıktan sonra merak ediyorum, bu DT kavramı ile ne kazanıyoruz? Tam olarak nasıl "neden / neden" olduğunu anlayamasam da, basitçe yazılan lambda hesabı (STLC) 'den daha esnek ve güçlü görünüyorlar.

STLC ile yapılamayan DT'lerle ne yapabiliriz? DT'leri eklemek teoriyi daha karmaşık hale getiriyor gibi görünüyor, ama faydası ne?

Cevaptan yukarıdaki soruya:

Curry-Howard yazışmasını önermeden birinci dereceden mantığa genişletmek isteyen de Bruijn ve Howard tarafından bağımlı türler önerildi.

Bu bir düzeyde mantıklı görünüyor, ama hala "nasıl / neden" in büyük resmini kavrayamıyorum? Belki de CH mantığının FO mantığına olan bu genişlemesinin açıkça DT'lerle olan büyük anlaşmanın ne olduğunu anlamaya yardımcı olabileceğini gösterebilir. Bunu da anladığımdan emin değilim.


1
Onları aradın mı? Bağımlı türler üzerine kurulmuş bir teorem uzmanı olan Coq'u duydunuz mu? 4 renk teoreminin Coq kullanarak kanıtlandığını biliyor muydunuz?
Dave Clarke

2
Aslında yaptım. Google için zor olan, DT'lerin sezgisel olarak yazarak teoriye verdiği ekstra "güç" (daha iyi bir kelime eksikliği için) nedir?
Doktora

1
Neden? Bağımlı türler, yine de tür güvenliğinde daha fazla program yazmanıza olanak tanır. Nasıl? Türleri programlarla parametrelendirerek.
Martin Berger

@MartinBerger - Lütfen "daha fazla program" hakkında ayrıntılı bilgi verebilir misiniz? Teorik bir bakış açısıyla ne yapabilirim ya da daha fazlasına ihtiyacım olabilir?
Doktora

2
@DaveClarke Fantezi türleriyle Coq, süslü şeyler yapmak için kullanıldı, bu süslü şeylerin bu süslü türleri gerektirdiği anlamına gelmez. Örneğin Twelf'in büyük başarıları vardı ( SML'nin doğruluğunun kanıtı gibi) ve bu sadece ikinci dereceden, yüksek dereceden değil. Sadece birinci dereceden mantıkla kanıtlanmış bazı oldukça büyük sistemler gördüm.
Gilles 'SO- şeytan olmayı bırak'

Yanıtlar:


22

Yorumumu genişletiyorum: Bağımlı türler daha fazla program yazabilir. "Daha fazla", basitçe bağımlı türlerle yazılabilen program grubunun , basitçe yazılan - hesabında (STLC) yazılabilen programların uygun bir üst kümesi olduğu anlamına gelir . Bir örnek olacaktır L i'nin s t 2 * 3 + 4 ( α ) , uzunluğunun listeleri 10 tipi elemanlarını taşıyan, a . Sentezleme 2 * 3 + 4 , aynı zamanda, bir program ve bir tür parçası yer almaktadır. Bunu STLC'de yapamazsınız.λList23+4(α)10α23+4

Bağımlı olmayan tiplerden bağımlıyı ayırt eden anahtar kural uygulamadır:

ΓM:ABΓN:AΓMN:BΓM:ΠxA.BΓN:AΓMN:B{N/x}

Solda, tesislerdeki programların sadece sonuç programına 'aktığı' STLC var. Aksine, sağdaki bağımlı uygulama kuralında , sağ öncülden programı , sonuç türe 'akar' .1N1

Türleri programlara göre parametreleştirmek için, bağımlı türlerin sözdizimi daha zengin olmalı ve türlerin iyi biçimlendirilmiş olmasını sağlamak için, türleri sınırlayan tür adı verilen ikinci bir 'yazım sistemi' kullanıyoruz. Bu ayıklama sistemi aslında STLC'dir, ancak "bir seviye yukarı" dır.

Bağımlı türlerin birçok açıklaması vardır. Bazı örnekler.


1 Renkler açısından: bağımlı olmayan türlerde, sonuçtaki siyah ifadeler tesislerdeki siyah ifadelerden, sonuçtaki kırmızı ifadeler ise tesislerdeki kırmızı ifadelerden yapılmıştır. Bağımlı tiplerle renkler, sonucun siyah kısımlarının, tesisin kırmızı ve siyah kısımlarından yapılmasıyla karıştırılabilir.


Şimdi, bu çok mantıklı. Belli olabilirdi ama nedense üzerine parmak koyamadım. Yorumdan cevaba geçişi takdir edin. Ne yazık ki, soru kapanış için seçildi, ancak cevap için sevindim :)
Doktora

1
Liste uzunluğu sadece türlerde silebileceğiniz ve sıradan (dizine alınmamış) listeler hakkında konuşan programlara sahip olabileceğiniz bir örnek olduğundan çılgın değilim. Bu do türleri vardır o notta yararlı olabilir değil silinmeye bu tür sonra iyi daktilo kalır Çeşidi örneğin bir program , nerede ve . A r r 0 = n a t A r r ( n + 1 ) = n a tA r r nArr nArr 0=natArr (n+1)=natArr n
cody

@cody Ne demek istediğinden emin değilim. Bağımlı türleri aşağıdaki anlamda türü silinmesini (ya da kadar ayarlanabilir): tüm tipi belirsiz P: IFF , olan çalışma zamanı azaltma ilişkisi . (Bu, silme işlevinin tür ek açıklama içeren programları ek açıklama içermeyen 'aynı' programlarla eşleştirdiği basitleştirilmiş bir açıklamadır.) Belki farklı bir şey mi kastediyorsunuz? e r a s e ( P ) e r a s e ( V ) PVerase(P)erase(V)
Martin Berger

@MartinBerger: evet bu durumda basit türler elde etmek için bağımlı türlerdeki bağımlılıkları silmek hakkında konuşuyorum. Şu anda işaret edebileceğim tek örnek, iff normalleştirdiğinin kanıtıdır (örneğin Barendregt'in kitabında ). C o CFωCoC
cody

@cody Bence bu tip silme demek olağandışıdır. Daha iyi bir isim nedir? Belki tip sadeleştirme?
Martin Berger

2

Tür bildirimlerini iddialardan başka bir şey olarak düşünmeyin. Şu anda söyleyebileceğiniz tek şey isInt32 (), isCharPtr (), vb. Şeylerdir. Bu çeşitli iddialar derleme zamanında kontrol edilebilir olarak seçilir. Ancak bu kavram aşağıdaki gibi şeylere genişletilebilir: isCharPtr () && isNotNull (). Sıfırlanabilir işaretçiler büyük bir sorundur. İşaretçiler varsayılan duruş olarak sıfırlanmamalıdır; boş bırakılabilir işaretçiler boş olup olmadığını bilmeden silinemeyen bir türdür. Benzer sorunlar şudur: isPositiveInteger () veya isEvenNaturalNumber ().

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.