Tipe adalah properti perhitungan. Itu yang Anda tulis di sisi kanan titik dua.
Biarkan saya menguraikan itu. Perhatikan bahwa istilah ini tidak sepenuhnya standar: beberapa artikel atau buku mungkin menggunakan kata-kata yang berbeda untuk konsep tertentu.
Suatu istilah adalah elemen sintaksis abstrak yang dimaksudkan untuk mewakili komputasi. Secara intuitif, ini adalah pohon parse. Secara formal, ini adalah pohon yang terbatas di mana simpul-simpul itu milik alfabet. Kalkulus yang tidak diketik mendefinisikan sintaks untuk istilah. Misalnya, kalkulus lambda (tidak diketik) berisi istilah (ditulis , , dll.) Yang dibangun dari tiga jenis node:NM.N
- variabel, dari arity 0 (koleksi yang dapat didenumerasi darinya), ditulis , , dll.;yxy
- penerapan suatu variabel, dari arity 1 (koleksi yang dapat didenumerasi daripadanya, dengan suatu penambahan variabel), ditulis , dll.;λ x . M.
- aplikasi, dari arity 2, ditulis .M.N
Istilah adalah konstruksi sintaksis. Sebuah semantik berkaitan istilah untuk perhitungan. Ada banyak jenis semantik, yang paling umum adalah operasional (menggambarkan bagaimana istilah dapat ditransformasikan menjadi istilah lain) atau denotasional (menggambarkan istilah dengan transformasi ke ruang lain, biasanya dibangun dari teori himpunan).
Sebuah jenis adalah properti istilah. Suatu sistem tipe untuk kalkulus yang tidak diketik menggambarkan istilah mana yang memiliki tipe yang mana. Secara matematis, pada intinya, sistem tipe adalah hubungan antara istilah dan tipe. Lebih tepatnya, sistem tipe adalah kumpulan dari hubungan seperti itu, diindeks oleh konteks - biasanya, konteks menyediakan setidaknya jenis untuk variabel (yaitu konteks adalah fungsi parsial dari variabel ke jenis), sehingga suatu istilah mungkin hanya memiliki jenis dalam konteks yang menyediakan tipe untuk semua variabel gratisnya. Jenis objek matematika apa jenis tergantung pada sistem jenis.
Beberapa tipe sistem dideskripsikan dengan tipe sebagai himpunan, menggunakan pengertian teori himpunan seperti persimpangan, penyatuan dan pemahaman. Ini memiliki keuntungan bersandar pada dasar matematika yang sudah dikenal. Keterbatasan dari pendekatan ini adalah bahwa hal itu tidak memungkinkan alasan tentang jenis yang setara.
Banyak tipe sistem menggambarkan tipe itu sendiri sebagai istilah dalam kalkulus tipe. Tergantung pada sistem jenisnya, ini mungkin istilah yang sama atau istilah yang berbeda. Saya akan menggunakan istilah dasar frasa untuk merujuk ke istilah kalkulus yang menjelaskan perhitungan. Misalnya, kalkulus lambda yang diketik secara sederhana menggunakan kalkulus tipe berikut (ditulis , dll.):τ
- tipe dasar, dari arity 0 (koleksi terbatas atau denumerable daripadanya), ditulis , , dll.;BSEBUAHB
- fungsi, dari arity 2, ditulis .τ0→ τ1
Hubungan antara istilah dan tipe yang mendefinisikan kalkulus lambda yang diketik secara sederhana biasanya ditentukan oleh aturan pengetikan . Aturan mengetik bukan satu-satunya cara untuk mendefinisikan sistem tipe, tetapi mereka umum. Mereka bekerja dengan baik untuk sistem tipe komposisional, yaitu sistem tipe di mana jenis (-satu) dari suatu istilah dibangun dari jenis subterms. Aturan pengetikan mendefinisikan sistem tipe secara induktif: setiap aturan pengetikan adalah aksioma yang menyatakan bahwa untuk setiap instantiasi dari rumus di atas aturan horizontal, rumus di bawah aturan juga benar. Lihat Bagaimana membaca aturan mengetik? untuk lebih jelasnya. Apakah ada kalkulus lambda yang diketik lengkap dari Turing? mungkin juga menarik.
Untuk kalkulus lambda yang diketik secara sederhana, penilaian pengetikan berarti memiliki tipe dalam konteks . Saya telah menghilangkan definisi formal dari konteks.
M τ Γ x : τ ∈ ΓΓ ⊢ M: τM.τΓ
x : τ∈ ΓΓ ⊢ x : τ( Γ )Γ , x : τ0⊢ M.: τ1Γ ⊢ λ x . M.: τ0→τ1( → saya)Γ⊢ M: τ0→τ1Γ ⊢ N: τ0Γ⊢ MN: τ1( → E)
Misalnya, jika dan adalah tipe berbasis, maka memiliki tipe dalam konteks apa pun (dari bawah ke atas, terapkan dua kali, kemudian , dan akhirnya di setiap cabang).B λ x . λ y . xSEBUAHBλ x . λ y. xy( A → B ) → A → B( → saya)( → E)( Γ )
Dimungkinkan untuk menafsirkan jenis kalkulus lambda yang diketik secara sederhana sebagai perangkat. Ini sama dengan memberikan semantik denotasi untuk tipenya. Semantik denotasi yang baik untuk istilah dasar akan menetapkan untuk setiap istilah dasar anggota denotasi dari semua jenisnya.
Teori tipe intuitionistic (juga dikenal sebagai teori tipe Martin-Löf) lebih kompleks yang hanya mengetik kalkulus lambda, karena memiliki lebih banyak elemen dalam kalkulus tipe (dan juga menambahkan beberapa konstanta pada istilah dasar). Tetapi prinsip-prinsip intinya sama. Fitur penting dari teori tipe Martin-Löf adalah bahwa tipe dapat mengandung istilah-istilah dasar (mereka adalah tipe-tipe dependen ): alam semesta dari istilah-istilah dasar dan alam semesta dari tipe-tipe adalah sama, walaupun mereka dapat dibedakan oleh aturan sintaksis sederhana (biasanya dikenal sebagai sorting, yaitu menetapkan sort to terms, dalam teori penulisan ulang).
Ada tipe sistem yang melangkah lebih jauh dan sepenuhnya mencampur jenis dan istilah dasar, sehingga tidak ada perbedaan antara keduanya. Sistem tipe seperti itu dikatakan tingkat tinggi . Dalam bate seperti, jenis memiliki jenis - jenis dapat muncul di sisi kiri dari . The kalkulus konstruksi adalah paradigma yang lebih tinggi-order jenis tergantung. The lambda kubus (juga dikenal sebagai Barendregt cube) mengklasifikasikan jenis sistem dalam hal apakah mereka memungkinkan hal bergantung pada jenis ( polimorfisme - beberapa istilah dasar mengandung jenis sebagai sub istilah), jenis tergantung pada istilah (tergantung jenis), atau jenis bergantung pada tipe ( tipe operator - kalkulus tipe memiliki gagasan perhitungan).:
Sebagian besar sistem tipe telah diberi semantik teoritis set, untuk mengikat mereka dengan dasar matematika yang biasa.
Bagaimana bahasa pemrograman dan dasar matematika terkait? dan
Apa perbedaan antara pandangan semantik dan sintaksis dari tipe fungsi? mungkin menarik di sini. Ada juga telah bekerja menggunakan teori tipe sebagai dasar matematika - set teori adalah fondasi bersejarah, tetapi bukan satu - satunya pilihan yang mungkin. Teori tipe homotopy adalah tonggak penting dalam arah ini: ini menjelaskan semantik teori tipe intuitionistic yang disengaja dalam hal teori homotopy dan membangun teori himpunan dalam kerangka ini.
Saya merekomendasikan buku-buku Benjamin Pierce Jenis dan Bahasa Pemrograman dan Kemajuan Topik dalam Jenis dan Bahasa Pemrograman . Mereka dapat diakses oleh setiap sarjana tanpa prasyarat selain keakraban dasar dengan penalaran matematika formal. TAPL menjelaskan banyak jenis sistem; tipe dependen adalah subjek dari bab 2 ATTAPL.