Saya pikir saya mengerti ketergantungan mengetik (DT) dengan benar, tetapi jawaban untuk pertanyaan ini: /cstheory/30651/why-was-there-a-need-for-martin-l%C3% Teori B6f-to-create-intuitionistic-type membuat saya berpikir sebaliknya.
Setelah membaca tentang DT dan mencoba untuk memahami apa itu DT, saya mencoba untuk bertanya-tanya, apa yang kita dapat dari gagasan DT ini? Mereka tampaknya lebih fleksibel dan kuat daripada sekadar mengetik lambda calculus (STLC), meskipun saya tidak bisa mengerti persis "bagaimana / mengapa".
Apa yang bisa kita lakukan dengan DT yang tidak dapat dilakukan dengan STLC? Sepertinya menambahkan DT membuat teorinya lebih rumit, tetapi apa untungnya?
Dari jawaban pertanyaan di atas:
Tipe dependen diusulkan oleh de Bruijn dan Howard yang ingin memperluas korespondensi Curry-Howard dari proposisional ke logika orde pertama.
Ini tampaknya masuk akal pada tingkat tertentu, tetapi saya masih tidak dapat memahami gambaran besar "bagaimana / mengapa"? Mungkin contoh secara eksplisit menunjukkan ekstensi korespondensi CH ini dengan logika FO dapat membantu mencapai titik awal dalam memahami apa masalah besar dengan DT? Saya tidak yakin saya memahami ini juga saya harus.
Jawaban:
Aturan utama yang membedakan dependen dari tipe non-dependen adalah aplikasi:
Di sebelah kiri Anda memiliki STLC, di mana program di tempat 'mengalir' hanya ke dalam program kesimpulan. Sebaliknya, dalam aturan aplikasi dependen di sebelah kanan, program dari premis kanan 'mengalir' ke tipe dalam kesimpulan .N 1
Agar dapat membuat parameter tipe oleh program, sintaksis tipe dependen harus lebih kaya, dan untuk memastikan bahwa tipe terbentuk dengan baik, kami menggunakan 'sistem pengetikan' kedua yang disebut jenis yang membatasi tipe. Sistem kinding ini pada dasarnya adalah STLC, tetapi "naik satu tingkat".
Ada banyak penjelasan tentang tipe dependen. Beberapa contoh.
sumber
Pikirkan jenis deklarasi sebagai tidak lebih dari pernyataan. Saat ini, yang dapat Anda katakan adalah hal-hal seperti isInt32 (), isCharPtr (), dll. Berbagai pernyataan ini dipilih untuk dapat diperiksa pada waktu kompilasi. Tetapi konsep ini dapat diperluas ke hal-hal seperti: isCharPtr () && isNotNull (). Pointer nullable adalah masalah besar. Pointer tidak boleh nullable sebagai posisi default, dengan pointer nullable adalah tipe yang tidak dereferenceable tanpa mengetahui apakah itu null atau tidak. Masalah serupa adalah hal-hal seperti: isPositiveInteger (), atau isEvenNaturalNumber ().
sumber