Saya baru-baru ini datang untuk menyadari bahwa suatu jumlah dari masalah aku punya beberapa tahun yang lalu mencoba untuk menerapkan berbagai teori matematika di Jawa datang ke fakta bahwa sistem mengetik di Jawa tidak cukup kuat untuk model semua Martin-Lof teori jenis tergantung .
Sebelum Java 5 dan generik, satu-satunya jenis teori yang dapat Anda lakukan adalah melalui kelas dan interface, yang memberikan jenis sewenang-wenang dibangun dari jenis tanah int
, double
, char
dan sebagainya menggunakan produk dan fungsi jenis. Anda juga dapat membangun tipe rekursif seperti List
s, meskipun tidak dengan cara yang seragam.
Menggunakan obat generik, Anda dapat melakukan sedikit lebih banyak. Anda sekarang dapat mendefinisikan List<T>
sebagai fungsi
dan jadi kami mendapatkan jenis pesanan yang lebih tinggi.
Ini bukan akhir dari cerita. Menggunakan trik generik, kita dapat memodelkan beberapa jenis produk dependen. Sebagai contoh, kita dapat mendefinisikan tipe formulir menggunakan sintaksis
public interface f<T extends f<T>>
{
// We can now refer to T as much as we like
// inside the class. T has type f<T>.
}
Sebagai contoh, kita dapat memodelkan struktur dasar yang mendasari monoid (tetapi bukan kondisi asosiatif dan unitality) menggunakan istilah tipe ( yaitu, himpunan dengan elemen unit yang ditunjuk dan operasi biner pada ). Menggunakan Java generics, kita dapat memodelkan tipe ini:
public interface MonoidElement<T extends MonoidElement<T>>
{
public T unit();
public T mul(T op1, T op2);
}
Namun, ketika kami mencoba untuk memodelkan konsep yang lebih rumit, teori tipe itu rusak.
Apakah ada deskripsi sederhana tentang fragmen MLTT yang sesuai dengan tipe yang dapat dibangun di sistem pengetikan Java?