[Not: bu paragraflar artık modası geçmiş.] Sorunuzun başlığı, programlama dillerinin "matematiğin temellerine dayandığı" anlamına gelen, garanti edilmeyen bir varsayım içeriyor. İki alanın önemli ilişkileri olmasına rağmen, genellikle durum böyle değildir. Daha kesin bir ifade, (bazı) programlama dillerinin temel teknikler kullanılarak tasarlandığıdır. Sorulması gereken daha iyi bir soru "programlama dilleri ve matematiğin temelleri arasında nasıl bir ilişki vardır?"
En genel bağlantı, birkaç şekilde çalışmak için yapılabilecek olan programlar olarak sloganlar şeklindedir. Curry-Howard yazışma en bariz biridir. Bununla bir kerede tip teori, mantık ve programlama ile ilgilidir. Ancak, Curry-Howard yazışmalarının, her genel amaçlı programlama dilinin desteklediği, genel özyinelemede (her türde yaşadığı için) varlığında çok iyi çalışmadığı vurgulanmalıdır.
Program olarak sloganı kanıt olarak çalışmanın daha ince bir yolu gerçekleştirilebilirliği kullanmaktır . Burada da provalar ve programlar arasında ilişki kuruyoruz, ancak şimdi yönlendirme provalardan programlara gidiyor: her prova bir program veriyor, ancak her program mutlaka bir prova değil.
Bir temele dayanan bir programlama dili ana örnektir Agda basitçe, bir bağımlı tip teorisinin bir uygulaması. Ancak, Agda genel amaçlı bir programlama dili değildir, çünkü genel özyinelemeyi desteklemez. Agda'daki her işlev toplamdır ve Agda'da uygulanamayan hesaplanabilir işlevler vardır. Uygulamada programcılar bunu farketmeyeceklerdir, ancak Agda'nın tanımsız değerlere, örneğin sonsuz döngülere izin vermediğini fark edeceklerdir.
Coq olduğu değil bir programlama dili değil, bir kanıt asistanı. Bununla birlikte, programların provalardan verebileceği çıkarma yeteneklerine de sahiptir. Prova asistanları ve programlama dilleri birbirleriyle karıştırılmamalıdır.
Prolog ve diğer mantık programlama dillerinin, hesaplamanın kanıt arama olduğu fikrinden ilham aldıklarını unutmamalıyız . Bu elbette onları mantıkla yakından ilgilidir.
Haskell, etki alanı teorisine dayanan genel amaçlı bir programlama dilidir . Bir başka deyişle, anlambilimi alan-teoriktir çünkü kısmi işlevleri ve özyinelemeyi hesaba katması gerekir. Haskell topluluğu, kategori teorisinden esinlenerek, monadlarının en iyi bilinen fakat monadlarla karıştırılmaması gereken birkaç teknik geliştirmiştir . Daha genel olarak, gelişmiş programlama özellikleri genellikle etki alanı teorisi ve kategori teorisinin bir kombinasyonu ile ele alınır, ancak bu, sokaktaki Haskell programlayıcısının usta olduğu bir şey değildir. Haskell tiplerinin "sözdizimsel kategori" olarak adlandırılan, Haskell ve kategori teorisinin birbiriyle nasıl birleştiğine dair sıradan bir insan görüşü.
Küme teorisi (klasik veya yapıcı) programlama dilinde fikirlere daha az ilham veriyor gibi görünmektedir. Elbette, yapıcı küme teorisi, yapıcı mantık ile programlama ile bağlantısına sahiptir. Sezgisel küme teorisinin programlama dillerine önemli bir uygulaması, onu yapay alan teorisi yapmak için kullanan Alex Simpson tarafından verildi. Ama bu oldukça gelişmiş şeyler, belki bu slaytları görüyoruz . Jean-Louis Krivine, klasik küme teorisi için çok ilginç bir gerçekleştirilebilirlik markası geliştirdi. Bu, klasik küme teorisi ve programlaması ile ilişki kurmanın iyi bir yoludur.
Özet olarak, programlama dilleri teorisi temel teknikleri kullanır. Hesaplamanın temel bir kavram olduğunu düşündüğümüz için bu şaşırtıcı değil. Ancak programlama dillerinin belirli bir temele "dayandığını" söylemek çok saf. Aslında, temellerin üçlemesi “küme teorisi - tip teorisi - kategori teorisi” yine sadece çeşitli şekillerde matematiksel olarak kesinleştirilebilecek kullanışlı bir üst düzey gözlemdir, ancak bunun için gerekli hiçbir şey yoktur. Bu tarihi bir kaza.