Pengantar teori tipe Martin-Lof


36

Apa yang akan menjadi pengantar terbaik untuk ide-ide Per Martin-Löfs tentang teori tipe? Saya telah melihat beberapa ceramah dari sekolah musim panas Oregon PL, tetapi saya masih agak bingung dengan pertanyaan berikut:

Apa itu tipe?

Saya tahu apa itu himpunan, karena Anda dapat mendefinisikannya dengan aksioma ZF biasa dan mereka memiliki model konkret yang sangat intuitif; pikirkan saja keranjang berisi barang-barang. Namun, saya belum melihat definisi yang masuk akal dari suatu jenis dan saya bertanya-tanya apakah ada beberapa sumber yang akan menyaring ide ini untuk boneka.


4
Buku HoTT memiliki pengantar yang membandingkan jenis dan set, mungkin itu akan membantu, lihat Bagian 1.1 dari homotopytypetheory.org/book . Tetapi yang lebih penting, Anda ingin kami menanamkan langsung di kepala Anda ide jenis yang tepat, sedangkan untuk set Anda senang memilikinya dijelaskan dengan aksioma, tanpa bersikeras untuk mengetahui "apa itu sebenarnya". Nah, tipe dijelaskan oleh aturan inferensi untuk tipe. Dan mereka memiliki model beton yang sangat intuitif, Anda tahu, berjemur penuh dengan balok-balok Lego. Apa pun yang Anda dapat membangun dari mereka ada dalam jenis.
Andrej Bauer

Saya pikir melepaskan otak saya dari teori himpunan adalah masalah terbesar. Namun, saya tidak yakin seberapa bagus analogi Lego itu. Apa saja bloknya? Jika x: A dan y: A biasanya saya tidak bisa membuat apa pun dari mereka kecuali A adalah tipe panah rekursif. Tentu saja saya sering dapat mencampur barang-barang dari jenis yang berbeda untuk membangun sesuatu dari jenis ketiga ...
dst

4
Blok Lego adalah konstruktor tipe. Jadi misalnya dari dan Anda dapat membangun dan dan , dan dan . Anda juga dapat membangun tipe baru, misalnya dan , dan sebagainya. Orang-orang memiliki intuisi berbeda tentang tipe. Set adalah salah satunya, tapi kasar. Jenis juga seperti ruang topologis. Mereka juga seperti data terstruktur dalam pemrograman. Mereka juga seperti -groupoids. Itulah keindahannya, kekayaan berbagai kemungkinan. Pilih satu kemungkinan dan jalankan dengan itu.y : A ( x , y ) ( x , x ) i n l ( x ) z : A I d ( x , z ) ωx:Ay:A(x,y)(x,x)inl(x) λz:A. x I d (x,y)relfxλz:A.xsayad(x,y)z:SEBUAHsayad(x,z)ω
Andrej Bauer

Jawaban:


31

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:τ0M.:τ1Γλx.M.:τ0τ1(saya)ΓM.:τ0τ1ΓN:τ0ΓM.N:τ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(SEBUAHB)SEBUAHB(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.


+1 untuk TAPL. Saya bisa belajar sendiri sedikit tentang jenis-jenis dari membaca buku itu.
Guy Coder

Saya tidak yakin ATTAPL adalah titik awal yang baik untuk belajar tentang tipe dependen.
Martin Berger

15

Mungkin pertanyaan yang lebih baik untuk seseorang yang datang dari teori himpunan dan bergulat dengan bagaimana teori himpunan dan teori tipe Martin-Lof berbeda, adalah untuk merenungkan apa itu himpunan. Intuisi Anda tentang teori himpunan dan dasar-dasar matematika akan terinfeksi dengan asumsi-asumsi teoretis set yang tidak perlu Anda terima begitu saja. Teori tipe Alas Martin-Löf tidak memiliki asumsi yang sama.

Berlawanan dengan pemahaman konvensional, teori himpunan adalah teori dua hubungan: kesetaraan dan keanggotaan , bukan hanya keanggotaan. Dan kedua hubungan ini dibangun dalam fase yang sangat berbeda.

  1. Kami membangun logika tingkat pertama sebagai teori kesetaraan hal-hal yang sewenang-wenang (bukan hanya set). Logika tingkat pertama menggunakan gagasan informal tentang pembuktian. Bukti konsep itu sendiri tidak diungkapkan secara formal dalam logika tingkat pertama saja.

  2. Kemudian kita membangun teori-set di atas logika orde pertama sebagai teori set dan menetapkan keanggotaan.

  3. Set keanggotaan dan kesetaraan kemudian dihubungkan dengan aksioma ekstensionalitas yang mengatakan bahwa dua set sama persis ketika mereka memiliki anggota yang sama.

  4. Akhirnya, konsep informal pembuktian dari (1) mendapatkan rasionalisasi ex-post sebagai perangkat tertentu (pohon bukti).

Hal yang penting untuk disadari adalah bahwa gagasan pembuktian dengan demikian adalah warga negara kelas dua dalam teori himpunan.

Pengaturan ini berfungsi baik untuk matematika kecil / menengah konvensional, tetapi karena kami sekarang menangani bukti skala besar, seperti klasifikasi semua grup sederhana hingga, atau verifikasi program komputer non-sepele, itu berantakan, karena itu tidak mengarah pada mekanisasi yang mudah.

TT

λ


Ini sangat berguna. Saya pikir salah satu masalah utama siapa pun yang datang ke matematika konstruktif adalah untuk melepaskan banyak hal.
dst

Saya setuju. Butuh beberapa saat untuk melepaskan asumsi teori set-yang tidak diakui. Melakukan banyak pemrograman Agda membantu saya, dan mungkin juga bekerja untuk Anda jika Anda berasal dari latar belakang ilmu komputer.
Martin Berger

10

Saya tidak mengetahui jalur mudah ke teori tipe Martin-Löf. Saya kira yang berikut ini bisa berfungsi sebagai perkenalan.

Namun, jika Anda bingung dengan pertanyaan "apa itu tipe", saya sarankan untuk masuk ke teori tipe yang jauh lebih sederhana terlebih dahulu. Setiap bahasa pemrograman yang diketik akan dilakukan, tetapi misalnya Ocaml, F # dan Haskell akan sangat berguna. Sederhanakan sedikit, orang bisa mengatakan bahwa teori tipe Martin-Löf memperluas jenis di belakang bahasa yang disebutkan di atas dalam dua cara:

  1. Dengan tipe dependen . Anda menemukannya dalam bentuk penjinak dalam berbagai bahasa pemrograman.
  2. Dengan tipe identitas. Ini adalah inovasi utama dari Martin-Lof atas teori tipe dependen sebelumnya.

Gagasan kunci di balik tipe dependen adalah sederhana: tipe dapat diparameterisasi oleh program. Ini tidak mungkin (menyederhanakan sedikit) dalam sistem pengetikan yang lebih konvensional seperti yang disebutkan di atas. Meskipun sederhana, konsekuensinya sangat besar: tipe dependen mengangkat korespondensi Curry-Howard ke logika konstruktif tingkat pertama. Tipe identitas agak tidak biasa. Jika / ketika Anda merasa nyaman dengan bahasa seperti Haskell, Anda bisa belajar Agda , yang pada dasarnya adalah Haskell dengan teori tipe Martin-Löf. Saya merasa bahwa Agda lebih mudah dipelajari untuk seorang programmer daripada membaca buku-buku yang disebutkan di atas.


Saya sebenarnya tahu Haskell. Masalah saya adalah bahwa tutorial apa pun hanya akan memberi tahu Anda cara mendefinisikan tipe, tetapi tidak pernah seperti apa sebenarnya. Sepertinya ini adalah beberapa tag ajaib yang dilampirkan pada semua data Anda, sehingga pemeriksa tipe dapat memilih versi yang tepat dari fungsi polimorfik dan memeriksa bahwa segala sesuatu tidak tercampur dengan cara yang tidak masuk akal. Mereka masih membiarkan pertanyaan terbuka tentang apa jenisnya. Saya terutama bingung dengan ini, karena Voevodsky & co sedang mencoba mendasarkan semua matematika pada ini, namun, saya belum pernah melihat definisi yang tepat.
dst

2
ΓM.:αM.αM.M.Γ

Tipe-tipe sangat tepat didefinisikan dalam Haskell, dalam teori tipe Martin-Löf dan dalam teori tipe homotopy Voevodsky. Tidak ada ambiguitas sama sekali. Misalnya Lampiran A.2 memberikan sistem bukti untuk semua istilah dan jenis teori tipe homotopy. Jika Anda ingin lebih keras, Anda dapat melihat Coq atau Agda formalisasi.
Martin Berger

2
Mungkin Anda perlu menelan bahwa jenis tidak memiliki esensi selain bagaimana mereka didefinisikan. Ini tidak berbeda dengan eg Set, mereka diberikan oleh aksioma teori himpunan. (Ini tidak sepenuhnya benar, tetapi tetap penting untuk dipahami.)
Martin Berger
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.