Karena Anda menyebutkan Python, pertanyaannya bukan murni tipe-teoretik. Jadi saya mencoba memberikan perspektif yang lebih luas tentang jenis. Jenis adalah hal yang berbeda untuk orang yang berbeda. Saya telah mengumpulkan setidaknya 5 gagasan berbeda (tapi terkait) tentang jenis:
Jenis sistem adalah sistem logis dan teori set.
Sistem tipe mengaitkan suatu tipe dengan setiap nilai yang dihitung. Dengan memeriksa aliran nilai-nilai ini, sistem tipe mencoba untuk membuktikan atau memastikan bahwa tidak ada kesalahan tipe dapat terjadi.
Tipe adalah klasifikasi yang mengidentifikasi salah satu dari berbagai tipe data, seperti nilai sebenarnya, integer atau Boolean, yang menentukan nilai yang mungkin untuk tipe itu; operasi yang dapat dilakukan pada nilai-nilai jenis itu; arti data; dan nilai-nilai cara tipe itu dapat disimpan
Tipe data abstrak memungkinkan abstraksi data dalam bahasa tingkat tinggi. ADT sering diimplementasikan sebagai modul: antarmuka modul menyatakan prosedur yang sesuai dengan operasi ADT. Strategi penyembunyian informasi ini memungkinkan implementasi modul diubah tanpa mengganggu program klien.
Pemrograman implementasi bahasa menggunakan tipe nilai untuk memilih penyimpanan yang dibutuhkan nilai dan algoritma untuk operasi pada nilai.
Kutipan berasal dari Wikipedia, tetapi saya dapat memberikan referensi yang lebih baik jika diperlukan.
Tipe-1 muncul dari karya Russel, tetapi hari ini mereka tidak semata-mata melindungi dari paradoks: bahasa yang diketik dari teori tipe homotopy adalah cara baru untuk menyandikan matematika dalam bahasa formal, bahasa yang dapat dimengerti mesin, dan cara baru bagi manusia untuk memahami fondasi matematika. (Cara "lama" adalah pengkodean menggunakan teori himpunan aksiomatik).
Tipe 2-5 muncul dalam pemrograman dari beberapa kebutuhan yang berbeda: untuk menghindari bug, untuk mengklasifikasikan perancang perangkat lunak data dan programmer bekerja dengan, untuk merancang sistem besar dan menerapkan bahasa pemrograman masing-masing secara efisien.
Ketik sistem dalam C / C ++, Ada, Java, Python tidak muncul dari pekerjaan Russel atau keinginan untuk menghindari bug. Mereka muncul dari kebutuhan untuk menggambarkan berbagai jenis data di luar sana (misalnya "nama belakang adalah string karakter dan bukan angka"), memodulasi desain perangkat lunak dan memilih representasi tingkat rendah untuk data secara optimal. Bahasa-bahasa ini tidak memiliki tipe-1 atau tipe-2. Java memastikan keamanan relatif dari bug bukan dengan membuktikan kebenaran program menggunakan sistem tipe, tetapi dengan desain bahasa yang cermat (tanpa aritmatika pointer) dan sistem runtime (mesin virtual, verifikasi bytecode). Tipe sistem di Jawa bukanlah sistem logis atau teori himpunan.
Namun, sistem tipe dalam bahasa pemrograman Agda adalah varian modern dari sistem tipe Russel (berdasarkan pada pekerjaan selanjutnya atau Per Martin-Lof dan matematikawan lainnya). Tipe sistem di Agda dirancang untuk mengekspresikan properti matematika dari program dan bukti dari properti itu, itu adalah sistem logis dan teori himpunan.
Tidak ada perbedaan hitam-putih di sini: banyak bahasa yang cocok di antaranya. Misalnya, jenis sistem bahasa Haskell berakar pada karya Russel, dapat dilihat sebagai sistem Agda yang disederhanakan, tetapi dari sudut pandang matematika, itu tidak konsisten (kontradiksi sendiri) jika dilihat sebagai sistem logis atau teori himpunan.
Namun, sebagai kendaraan teoretis untuk melindungi program Haskell dari bug, ia bekerja dengan cukup baik. Anda bahkan dapat menggunakan tipe untuk menyandikan properti tertentu dan buktinya, tetapi tidak semua properti dapat disandikan, dan pemrogram tetap dapat melanggar properti yang terbukti jika ia menggunakan peretasan kotor yang tidak disarankan.
Tipe sistem Scala bahkan lebih jauh dari karya Russel dan bahasa pembuktian Agda yang sempurna, tetapi masih berakar pada karya Russel.
Adapun untuk membuktikan sifat-sifat bahasa industri yang sistem tipenya tidak dirancang untuk itu, ada banyak pendekatan dan sistem.
Untuk pendekatan yang menarik tetapi berbeda, lihat Coq dan proyek penelitian Microsoft Boogie. Coq bergantung pada teori tipe untuk menghasilkan program imperatif dari program Coq. Boogie bergantung pada anotasi program penting dengan properti dan membuktikan properti itu dengan teorema Z3 menggunakan pendekatan yang sama sekali berbeda dari Coq.