[Catatan: paragraf ini sudah usang.] Judul pertanyaan Anda berisi asumsi yang tidak beralasan, yaitu bahwa bahasa pemrograman "berdasarkan pada dasar matematika". Ini umumnya tidak terjadi, meskipun kedua bidang memiliki hubungan yang penting. Pernyataan yang lebih akurat adalah bahwa (beberapa) bahasa pemrograman dirancang menggunakan teknik-teknik dasar. Pertanyaan yang lebih baik untuk ditanyakan adalah "bagaimana bahasa pemrograman dan dasar-dasar matematika terkait?"
Koneksi yang paling umum diwujudkan dalam slogan proof-as-programs , yang dapat dibuat bekerja dengan beberapa cara. The Curry-Howard korespondensi adalah yang paling jelas satu. Dengan itu kita berhubungan sekaligus mengetik teori, logika, dan pemrograman. Tetapi harus ditekankan bahwa korespondensi Curry-Howard tidak bekerja dengan baik di hadapan rekursi umum (karena setiap jenis menjadi dihuni), yang didukung oleh setiap bahasa pemrograman tujuan umum.
Cara yang lebih halus untuk membuat slogan proof-as-programs berfungsi adalah dengan menggunakan realizability . Di sini kita juga menghubungkan bukti dan program, tetapi sekarang arahnya beralih dari bukti ke program: setiap bukti memberikan program, tetapi tidak setiap program selalu merupakan bukti.
Contoh utama bahasa pemrograman berdasarkan pada yayasan adalah Agda , yang hanya merupakan implementasi dari teori tipe dependen. Namun, Agda bukan bahasa pemrograman untuk tujuan umum karena tidak mendukung rekursi umum. Setiap fungsi di Agda adalah total, dan ada fungsi yang dapat dihitung yang tidak dapat diimplementasikan di Agda. Dalam praktiknya programmer tidak akan memperhatikan ini, tetapi mereka akan melihat bahwa Agda tidak mengizinkan nilai yang tidak ditentukan, misalnya loop tak terbatas
Coq adalah tidak bahasa pemrograman melainkan seorang asisten bukti. Namun, ia juga memiliki kemampuan ekstraksi yang memberikan program dari bukti. Asisten pembuktian dan bahasa pemrograman tidak boleh bingung satu sama lain.
Kita tidak boleh lupa bahwa prolog dan bahasa pemrograman logika lainnya mengambil inspirasi mereka dari gagasan bahwa perhitungan adalah pencarian bukti . Ini tentu saja berkaitan erat dengan logika.
Haskell adalah bahasa pemrograman untuk tujuan umum yang didasarkan pada teori domain . Dengan kata lain, semantiknya adalah teori-domain karena harus memperhitungkan fungsi dan rekursi parsial. Komunitas Haskell telah mengembangkan sejumlah teknik yang diilhami oleh teori kategori, yang mana monad paling terkenal tetapi tidak boleh dikacaukan dengan monad . Secara lebih umum, fitur pemrograman tingkat lanjut biasanya diperlakukan dengan kombinasi teori domain dan teori kategori, tetapi ini bukan sesuatu yang mahir oleh programmer Haskell. Apa yang disebut "kategori sintaksis" dari tipe-tipe Haskell adalah pandangan orang awam tentang bagaimana Haskell dan teori kategori berhubungan satu sama lain.
Teori himpunan (klasik atau konstruktif) tampaknya menginspirasi ide-ide dalam bahasa pemrograman ke tingkat yang lebih rendah. Tentu saja, teori himpunan konstruktif memiliki koneksi ke pemrograman melalui logika konstruktif. Satu aplikasi penting dari teori himpunan intuitionistic untuk bahasa pemrograman diberikan oleh Alex Simpson yang menggunakannya untuk membuat teori domain sintetik bekerja. Tapi ini hal yang cukup maju, mungkin lihat slide ini . Jean-Louis Krivine telah mengembangkan merek realisasi yang sangat menarik untuk teori himpunan klasik. Ini tampaknya cara yang baik untuk menghubungkan teori himpunan klasik dan pemrograman.
Singkatnya, teori bahasa pemrograman menggunakan teknik dasar. Ini tidak mengherankan, karena kami menganggap komputasi sebagai konsep mendasar. Tetapi terlalu naif untuk mengatakan bahwa bahasa pemrograman "berdasarkan" pada fondasi tertentu. Sebenarnya, trikotomi yayasan "teori himpunan - teori tipe - teori kategori" sekali lagi hanyalah pengamatan tingkat tinggi yang berguna yang dapat dibuat akurat secara matematis dalam berbagai cara, tetapi tidak ada yang perlu tentang hal itu. Itu adalah kecelakaan bersejarah.