Pierce (2002) memperkenalkan relasi pengetikan di halaman 92 dengan menulis:
Relasi pengetikan untuk ekspresi aritmatika, yang dituliskan "t: T", didefinisikan oleh seperangkat aturan inferensi yang menetapkan jenis ke istilah
dan catatan kaki mengatakan Simbol sering digunakan sebagai ganti:. Pertanyaan saya adalah mengapa tipe teori lebih suka menggunakan: over ? Jika tipe adalah himpunan nilai maka masuk akal untuk menulis , tidak ada notasi baru yang diperlukan.
Apakah ini mirip dengan bagaimana beberapa penulis cs lebih suka bahkan berpikir itu penyalahgunaan notasi dan harus ditulis ?
type-theory
notation
Björn Lindqvist
sumber
sumber
false
:int
", misalnya. Demikian pula halnya bahwa penghakiman harus diperoleh dengan "cara sintaksis murni", misalnya dalam kasus teori tipe internal kategori dengan keluarga.Jawaban:
Karena apa yang ada di sebelah kanan titik dua belum tentu satu set dan apa yang di sebelah kiri titik dua belum tentu anggota set itu.
Teori tipe dimulai pada awal abad ke-20 sebagai pendekatan terhadap dasar matematika. Bertrand Russel menemukan sebuah paradoks dalam teori himpunan naif, dan ia bekerja pada teori tipe sebagai cara untuk membatasi kekuatan ekspresif teori himpunan untuk menghindari paradoks ini (dan lainnya). Selama bertahun-tahun, Russel dan yang lainnya telah mendefinisikan banyak teori tipe. Dalam beberapa teori tipe, tipe ditetapkan dengan sifat-sifat tertentu, tetapi pada yang lain, mereka adalah jenis binatang yang berbeda.
Secara khusus, banyak teori tipe memiliki formulasi sintaksis . Ada aturan yang menyebabkan sesuatu memiliki tipe. Saat aturan pengetikan digunakan sebagai landasan teori, penting untuk membedakan apa yang dikatakan aturan pengetikan dari apa yang bisa disimpulkan dengan menerapkan pengetahuan eksternal tambahan. Ini terutama penting jika aturan pengetikan adalah dasar untuk teori pembuktian: teorema yang berpegang pada teori himpunan dengan logika klasik dan aksioma pilihan mungkin atau tidak mungkin berlaku dalam logika konstruktif, misalnya. Salah satu makalah mani dalam domain ini adalah Church 's A Formulation of the Simple Type of Theory of Types (1940)
Mungkin cara perbedaan antara tipe dan set adalah yang paling jelas adalah bahwa aturan paling dasar untuk set, yaitu bahwa dua set adalah sama jika mereka memiliki elemen yang sama, biasanya tidak berlaku untuk tipe. Lihat jawaban Andrej Bauer di sini dan jawabannya pada pertanyaan terkait untuk beberapa contoh. Utas kedua itu memiliki jawaban lain yang layak dibaca.
Dalam kalkulus yang diketik, untuk mengatakan bahwa tipe adalah set sebenarnya untuk memberikan semantik untuk tipe. Memberi kalkulus sebuah semantik-teoretik tipe bukanlah hal yang sepele. Misalnya, Anda mendefinisikan bahasa dengan fungsi. Apa set adalah jenis fungsi? Fungsi total ditentukan oleh grafiknya, seperti yang kita diajarkan dalam teori himpunan 101. Tetapi bagaimana dengan fungsi parsial? Apakah Anda ingin memberikan semua fungsi non-terminating semantik yang sama? Anda tidak bisa menafsirkan tipe sebagai set untuk kalkulus yang memungkinkan fungsi rekursif sampai Anda menjawab pertanyaan itu. Memberikan bahasa pemrograman atau semantik denotasional adalah masalah yang sulit di awal tahun 1970-an. Makalah mani di sini adalah Menuju semantik matematika untuk bahasa komputer (1971) olehDana Scott dan Christopher Strachey . The Haskell wikibook memiliki presentasi yang baik tentang topik tersebut.
Seperti yang saya tulis di atas, bagian kedua dari jawabannya adalah bahwa bahkan jika Anda telah berhasil memberikan tipe semantik teoritis-set, hal di sebelah kiri titik dua tidak selalu menjadi elemen set. Nilai memiliki tipe, tetapi begitu juga hal-hal lain, seperti ekspresi dan variabel . Misalnya, ekspresi dalam bahasa pemrograman yang diketik memiliki tipe bahkan jika itu tidak berakhir. Anda mungkin bersedia untuk conflateZ , tapi Z .
integer
dan(x := 0; while true; do x := x + 1; x)
bukan merupakan unsurSaya tidak tahu kapan notasi usus besar muncul untuk jenis. Sekarang standar dalam semantik, dan umum dalam bahasa pemrograman, tetapi baik Russel maupun Gereja tidak menggunakannya. Algol tidak menggunakannya, tetapi bahasa Pascal yang sangat diilhami Algol melakukannya pada tahun 1971. Saya menduga itu bukan yang pertama, karena, banyak makalah teori dari awal tahun 1970 menggunakan notasi, tetapi saya tidak tahu tentang penggunaan sebelumnya. Menariknya, ini terjadi segera setelah konsep tipe dari pemrograman dan dari logika telah disatukan - seperti yang ditunjukkan Simon Martini dalam Beberapa Tipe Tipe dalam Bahasa Pemrograman , yang disebut "tipe" dalam bahasa pemrograman hingga 1960-an berasal dari bahasa sehari-hari. penggunaan kata dan bukan dari teori tipe.
sumber
Alasan utama untuk memilih notasi titik duat:T ke hubungan keanggotaan t∈T adalah bahwa hubungan keanggotaan dapat menyesatkan karena jenisnya bukan koleksi (hanya) .
[ Tambahan: Saya harus mencatat bahwa secara historis ketik teori itu ditulis menggunakan∈ . Konsepsi Martin-LOF jenis dimaksudkan untuk menangkap set konstruktif, dan sudah Russell dan Whitehead digunakan ϵ untuk memebrship kelas. Akan menarik untuk melacak saat ketika : menjadi lebih umum daripada ∈ .]
Suatu tipe menggambarkan suatu jenis konstruksi tertentu, yaitu, bagaimana membuat objek dengan struktur tertentu, bagaimana menggunakannya, dan persamaan apa yang berlaku tentang mereka.
Misalnya produk tipeA×B memiliki aturan pengenalan yang menjelaskan cara membuat pasangan yang dipesan, dan aturan eliminasi menjelaskan bahwa kita dapat memproyeksikan komponen pertama dan kedua dari elemen A×B . Definisi A×B tidak tidak mulai dengan kata-kata "koleksi semua ..." dan juga tidak mengatakan apa-apa di mana saja seperti "semua elemen dari A×B adalah pasangan" (tetapi mengikuti dari definisi bahwa setiap unsur A×B bersifat proposisionalsama dengan sepasang). Dalam constrast, definisi set-teori dari X×Y adalah dinyatakan sebagai "himpunan semua pasangan memerintahkan ...".
Notasit:T menandakan fakta bahwa t memiliki struktur yang dijelaskan oleh T .
Sebuah jenisT tidak menjadi bingung dengan yang ekstensi , yang merupakan koleksi dari semua objek tipe T . Suatu tipe tidak ditentukan oleh ekstensi, sama seperti grup yang tidak ditentukan oleh set carrier-nya. Lebih lanjut, dapat terjadi bahwa dua jenis memiliki ekstensi yang sama, tetapi berbeda, misalnya:
Perpanjangan keduanya kosong, tetapi mereka bukan tipe yang sama.
Ada perbedaan lebih lanjut antara tipe-teoretik: dan set-teoritik ∈ . Objek a dalam himpunan teori ada secara independen dari set apa yang menjadi miliknya, dan itu mungkin milik beberapa set. Sebaliknya, sebagian besar jenis teori memuaskan keunikan mengetik: jika t:T dan t:U kemudian T≡U . Atau dengan kata lain, konstruksi tipe-teoritik t memiliki tepat satu tipe T , dan pada kenyataannya tidak ada cara untuk hanya memiliki objek t tanpa jenisnya (ditentukan secara unik).
Perbedaan lain adalah bahwa dalam menetapkan teori kita dapat menyangkal fakta bahwaa∈A dengan menulis ¬(a∈A) atau a∉A . Ini tidak mungkin dalam teori tipe, karena t:T adalah penilaian yang dapat diturunkan menggunakan aturan teori tipe, tetapi tidak ada dalam teori tipe yang akan memungkinkan kita untuk menyatakan bahwa sesuatu belum diturunkan. Ketika seorang anak membuat sesuatu dari balok LEGO mereka dengan bangga berlari ke orang tua mereka untuk menunjukkan kepada mereka konstruksi, tetapi mereka tidak pernah lari ke orang tua mereka untuk menunjukkan kepada mereka apa yang tidak mereka buat.
sumber
Björn,
Mungkin ada referensi sebelumnya tetapi untuk satu hal, titik dua digunakan dalam bahasa pemrograman Pascal:
sumber
:
?:
digunakan dalam makalah teori sebelum tahun 1970-an?REAL :: x
tetapi saya tidak tahu apakah ini terjadi sebelum Pascal.