Dalam prakteknya, mengklaim bahwa menjadi tipe biasanya digunakan untuk menggambarkan sintaks , sementara mengklaim bahwa adalah di set yang biasanya digunakan untuk menunjukkan semantik properti. Saya akan memberikan beberapa contoh untuk menjelaskan perbedaan dalam penggunaan tipe dan set ini. Untuk perbedaan dalam apa jenis dan set sebenarnya adalah , saya lihat jawaban Andrej Bauer .T x SxT xS
Sebuah contoh
Untuk memperjelas perbedaan ini, saya akan menggunakan contoh yang diberikan dalam catatan kuliah Herman Geuvers . Pertama, kita melihat contoh menghuni suatu tipe:
3+(7∗8)5:Nat,
dan contoh menjadi anggota dari set:
3∈{n∈N∣∀x,y,z∈N+(xn+yn≠zn)}
Perbedaan utama di sini adalah untuk menguji apakah ekspresi pertama adalah bilangan alami, kita tidak harus menghitung makna semantik, kita hanya harus 'membaca' fakta bahwa semua literal bertipe Nat dan semua operator ditutup pada tipe Nat.
Namun, untuk contoh kedua dari himpunan, kita harus menentukan makna semantik dari dalam konteks himpunan. Untuk set khusus ini, ini cukup sulit: keanggotaan untuk set ini setara dengan membuktikan teorema terakhir Fermat! Perhatikan bahwa, seperti yang dinyatakan dalam catatan, perbedaan antara sintaksis dan semantik tidak selalu dapat digambarkan dengan jelas. (dan Anda bahkan mungkin berpendapat bahwa bahkan contoh ini tidak jelas, seperti yang disebutkan Programmer2134 dalam komentar)33
Algoritma vs Bukti
Untuk meringkas, tipe sering digunakan untuk klaim 'sederhana' pada sintaksis beberapa ekspresi, sehingga keanggotaan tipe dapat diperiksa oleh suatu algoritma , sementara untuk menguji keanggotaan set, kita biasanya membutuhkan bukti .
Untuk melihat mengapa perbedaan ini bermanfaat, pertimbangkan kompiler dari bahasa pemrograman yang diketik. Jika kompiler ini harus membuat bukti formal untuk 'memeriksa jenis', kompiler diminta untuk melakukan tugas yang hampir mustahil (pembuktian teorema otomatis, secara umum, sulit). Jika di sisi lain kompiler hanya dapat menjalankan algoritma (efisien) untuk memeriksa jenis, maka secara realistis dapat melakukan tugas.
Motivasi untuk interpretasi yang ketat
Ada beberapa interpretasi makna semantik set dan tipe. Sementara di bawah perbedaan yang dibuat di sini tipe dan tipe ekstensional dengan pemeriksaan tipe yang tidak dapat dipastikan (seperti yang digunakan dalam NuPRL, seperti yang disebutkan dalam komentar) tidak akan menjadi 'tipe', yang lain tentu saja bebas untuk memanggilnya seperti itu (sama seperti gratis karena mereka akan memanggil mereka sesuatu yang lain, asalkan definisi mereka sesuai).
Namun, kami (Herman Geuvers dan saya), lebih suka untuk tidak membuang penafsiran ini dari jendela, yang saya (bukan Herman, meskipun dia mungkin setuju) memiliki motivasi berikut:
Pertama-tama, maksud interpretasi ini tidak jauh dari Andrej Bauer. Maksud dari sintaks biasanya untuk menggambarkan bagaimana membangun sesuatu dan memiliki algoritma untuk benar-benar membangunnya umumnya bermanfaat. Selain itu, fitur dari set biasanya hanya diperlukan ketika kita menginginkan deskripsi semantik, yang memungkinkan ketidakpastian.
Jadi, keuntungan dari deskripsi kami yang lebih ketat adalah untuk menjaga pemisahan tetap sederhana , untuk mendapatkan perbedaan yang lebih langsung terkait dengan penggunaan praktis umum. Ini berfungsi dengan baik, selama Anda tidak perlu atau ingin melonggarkan penggunaan Anda, seperti yang Anda lakukan, misalnya NuPRL.