Perlu diingat bahwa tipe eksistensial dan universal agak berbeda. Ini adalah logika konstruktif, bukan logika klasik dan dalam logika konstruktif dan ∃ tidak berhubungan seperti mereka dalam logika klasik.∀∃
adalah jenis program yang menerima objek tipe A dan mengembalikan objek tipe B ( x ) . Yang penting di sini adalah bahwa tipe B ( x ) tergantungpada x dan tidak sama untuk semua x . Itu dapat bervariasi tergantung pada apa x . Untuk satu input x kita mungkin menghasilkan integer. Untuk yang lain kita bisa menampilkan bilangan real. Untuk yang lainnya kita mungkin menampilkan fungsi lebih dari bilangan real. Jika B ( x )∀ x : A . B ( x )SEBUAHB ( x )B ( x ) xxxxB ( x )tidak berbeda dengan maka Anda dapat menggunakan A → B di tempat yang merupakan jenis fungsi dari A ke B .xA → BSEBUAHB
adalahversidependendari disjungsi (konstruktif). Anda bisa memikirkan disjungsi konstruktif A ∨ B dari dua jenis A dan B sebagai serikat menguraikan dari A dan B .
∃ x : A . B ( x ) adalah gabungan menguraikan dari kumpulan jenis B ( x )
diindeks oleh x : A . Fakta bahwa tipe B (∃ x : A . B ( x )A ∨ BSEBUAHBSEBUAHB∃ x : A . B ( x )B ( x )x : A van bervariasi tergantung pada nilai x : A
membuatnya menjadi tipe dependen. Bandingkan dengan kasus di mana B tidak tergantung pada x : A : ∃ x : A . B . Kami mengambil satu salinan yang sama B untuk setiap x : A . Ini adalah isomorfik ke A × B .B ( x )x : ABx : A∃ x : A . BBx : AA × B
Sekarang Anda dapat bertanya mengapa kami membutuhkan jenis produk dan jumlah yang tergantung ? Karena mereka memberi kita kekuatan yang lebih ekspresif. Sekarang kita dapat mengabaikan tipe sepenuhnya dan memiliki teori tipe / pemrograman fungsional yang tidak diketik. Tapi itu menghilangkan manfaat memiliki jenis di tempat pertama, misalnya Anda tidak akan tahu apakah semua program akan selalu berakhir (normalisasi kuat). Lihat Lambda Cube dan
Jenis Ketergantungan . Saya pikir cara yang baik untuk memahami tipe dependen dengan baik adalah dengan melihat aturan untuk memperkenalkan dan menghilangkan tipe dependen dalam teori tipe Martin-Lof .
Poin utama dari tipe dependen adalah: kami ingin tetap berada di dalam teori yang diketik dengan baik karena berbagai alasan (mis. Menghindari bug, bukti terminasi otomatis, dll.) Kami tidak ingin melihat sesuatu seperti kalkulus lambda yang tidak diketik di mana kami dapat membuat ekspresi seperti yang Anda nyatakan dan cara yang lebih kuat. Kita dapat mengatakan bahwa tipe dependen diciptakan untuk memungkinkan mengekspresikan lebih banyak hal sambil tetap berada di dalam teori tipe yang bagus.