[Nota: questo paragrafo è ormai obsoleto.] Il titolo della tua domanda contiene un'ipotesi ingiustificata, vale a dire che i linguaggi di programmazione sono "basati su basi matematiche". Questo non è generalmente il caso, sebbene le due aree abbiano relazioni importanti. Un'affermazione più accurata sarebbe che (alcuni) linguaggi di programmazione sono stati progettati usando tecniche di base. Una domanda migliore da porsi sarebbe "come sono correlati i linguaggi di programmazione e le basi della matematica?"
La connessione più generale è racchiusa nello slogan prove-come-programmi , che può essere fatto funzionare in diversi modi. La corrispondenza Curry-Howard è la più ovvia. Con esso ci colleghiamo subito alla teoria dei tipi, alla logica e alla programmazione. Ma va sottolineato che la corrispondenza Curry-Howard non funziona molto bene in presenza di una ricorsione generale (perché ogni tipo viene abitato), che supporta ogni linguaggio di programmazione generico.
Un modo più sottile di far funzionare lo slogan prove-come-programmi consiste nell'utilizzare la realizzabilità . Anche in questo caso mettiamo in relazione prove e programmi, ma ora la direzione va dalle prove ai programmi: ogni prova fornisce un programma, ma non tutti i programmi sono necessariamente una prova.
L'esempio principale di un linguaggio di programmazione basato su una base è Agda , che è semplicemente un'implementazione della teoria dei tipi dipendenti. Tuttavia, Agda non è un linguaggio di programmazione generico perché non supporta la ricorsione generale. Ogni funzione in Agda è totale e ci sono funzioni calcolabili che non possono essere implementate in Agda. In pratica, i programmatori non lo noteranno, ma noteranno che Agda non consente valori indefiniti, ad esempio loop infiniti.
Coq non è un linguaggio di programmazione ma piuttosto un assistente di prova. Tuttavia, ha anche capacità di estrazione che forniscono programmi dalle prove. Assistenti di prova e linguaggi di programmazione non devono essere confusi tra loro.
Non dovremmo dimenticare che il prologo e altri linguaggi di programmazione logica si ispirano all'idea che il calcolo sia la ricerca di prove . Questo ovviamente li collega strettamente alla logica.
Haskell è un linguaggio di programmazione generico che si basa sulla teoria dei domini . Vale a dire, la sua semantica è di dominio teorico perché deve tenere conto delle funzioni parziali e della ricorsione. La comunità di Haskell ha sviluppato una serie di tecniche ispirate alla teoria delle categorie, di cui le monadi sono più conosciute ma non devono essere confuse con le monadi . Più in generale, le funzionalità di programmazione avanzata sono generalmente trattate con una combinazione di teoria dei domini e teoria delle categorie, ma questo non è qualcosa a cui il programmatore Haskell in strada è abile. La cosiddetta "categoria sintattica" dei tipi di Haskell è il punto di vista di un laico su come Haskell e teoria delle categorie corrispondano tra loro.
La teoria degli insiemi (classica o costruttiva) sembra ispirare le idee nel linguaggio di programmazione in misura minore. Naturalmente, la teoria degli insiemi costruttiva ha la sua connessione con la programmazione attraverso la logica costruttiva. Un'importante applicazione della teoria degli insiemi intuitivi ai linguaggi di programmazione è stata data da Alex Simpson che l'ha usato per far funzionare la teoria dei domini sintetici. Ma questa è roba abbastanza avanzata, forse vedi queste diapositive . Jean-Louis Krivine ha sviluppato un marchio molto interessante di realizzabilità per la teoria dell'insieme classico. Questo sembra un buon modo per mettere in relazione la teoria e la programmazione dell'insieme classico.
In sintesi, la teoria dei linguaggi di programmazione utilizza tecniche di base. Ciò non sorprende, poiché riteniamo che il calcolo sia un concetto fondamentale. Ma è troppo ingenuo dire che i linguaggi di programmazione sono "basati" su determinate basi. In effetti, la tricotomia delle fondazioni "teoria dell'insieme - teoria dei tipi - teoria delle categorie" è di nuovo solo un'utile osservazione di alto livello che può essere resa matematicamente precisa in vari modi, ma non c'è nulla di necessario al riguardo. È un incidente storico.