In una precedente risposta nel sito teorico dell'informatica , ho affermato che la teoria delle categorie è la "base" per la teoria dei tipi. Qui, vorrei dire qualcosa di più forte. La teoria delle categorie è la teoria dei tipi . Al contrario, la teoria dei tipi è la teoria delle categorie . Vorrei espandere questi punti.
La teoria delle categorie è la teoria dei tipi
f: A → BABf
ABf
La teoria dei tipi è teoria delle categorie
Per "teoria dei tipi" intendo qualsiasi tipo di linguaggio formale tipizzato, basato su rigide regole di formazione dei termini che assicurano che tutto il tipo controlli. Si scopre che, ogni volta che lavoriamo in un tale linguaggio, stiamo lavorando in una struttura teorica di categoria. Anche se usiamo le notazioni set-teoriche e pensiamo set-teoricamente, finiamo comunque per scrivere cose sensate dal punto di vista categorico. Questo è un fatto straordinario .
Storicamente, Dana Scott potrebbe essere stata la prima a rendersene conto. Ha lavorato alla produzione di modelli semantici di linguaggi di programmazione basati su calcoli lambda tipizzati (e non tipizzati). I modelli tradizionali di teoria degli insiemi erano inadeguati a questo scopo, poiché i linguaggi di programmazione implicano una ricorsione senza restrizioni, in cui la teoria manca. Scott ha inventato una serie di modelli semantici che hanno catturato i fenomeni di programmazione, e si è reso conto che il calcolo lambda tipizzato rappresentava esattamente una classe di categorie chiamate categorie chiuse cartesiane . Esistono molte categorie chiuse cartesiane che non sono "teoriche stabilite". Ma il calcolo lambda tipizzato si applica a tutti allo stesso modo. Scott ha scritto un bel saggio intitolato " Teorie correlate del calcolo lambda"Spiegare cosa sta succedendo, parti delle quali sembrano essere disponibili sul web. L'articolo originale è stato pubblicato in un volume intitolato" To HB Curry: Essays on Combinatory Logic, Lambda Calculus and Formalism ", Academic Press, 1980. Berry e Curien arrivò alla stessa realizzazione, probabilmente in modo indipendente: definirono una macchina astratta categorica (CAM) per usare queste idee nell'implementazione di linguaggi funzionali, e il linguaggio che implementarono fu chiamato "CAML" che è il quadro sottostante dell'F # di Microsoft .
×→List Eilenberg e MacLaneproprio per formalizzare il concetto di funzioni polimorfiche. Li hanno chiamati "trasformazioni naturali", "naturali" perché sono le uniche che è possibile scrivere in modo corretto utilizzando le variabili di tipo. Quindi, si potrebbe dire che la teoria delle categorie è stata inventata proprio per formalizzare i linguaggi di programmazione polimorfici, anche prima che i linguaggi di programmazione fossero nati!
Un tradizionalista della teoria degli insiemi non ha conoscenza dei funzionali e delle trasformazioni naturali che avvengono sotto la superficie quando usa le notazioni della teoria degli insiemi. Ma, purché usi fedelmente il sistema dei tipi, sta davvero realizzando costruzioni categoriche senza esserne consapevole.
Detto questo, la teoria delle categorie è la teoria matematica per antonomasia dei tipi e delle funzioni. Pertanto, tutti i programmatori possono trarre vantaggio dall'apprendimento di un po 'di teoria delle categorie, in particolare i programmatori funzionali. Sfortunatamente, non sembrano esserci libri di testo sulla teoria delle categorie rivolti specificamente ai programmatori. I libri di "teoria delle categorie per l'informatica" sono generalmente rivolti a studenti / ricercatori di informatica teorica. Il libro di Benjamin Pierce, Teoria della categoria di base per gli informatici è forse il più leggibile.
Tuttavia, ci sono molte risorse sul web, destinate ai programmatori. La pagina di Haskellwiki può essere un buon punto di partenza. Alla Midlands Graduate School , abbiamo lezioni sulla teoria delle categorie (tra le altre). Il corso di Graham Hutton è stato ancorato come corso "principiante" e il mio è stato ancorato come corso "avanzato". Ma entrambi coprono essenzialmente lo stesso contenuto, andando a profondità diverse. L'Università di Chalmers ha una bella pagina di risorse su libri e appunti di conferenze in tutto il mondo. Il sito blog entusiasta di "sigfpe" offre anche molte buone intuizioni dal punto di vista del programmatore.
Gli argomenti di base che vorresti imparare sono:
- definizione di categorie e alcuni esempi di categorie
- funzioni e loro esempi
- trasformazioni naturali e loro esempi
- definizioni di prodotti, coprodotti ed esponenti (spazi funzionali), oggetti iniziali e terminali.
- aggiunzioni
- monadi, algebre e categorie di Kleisli
I miei appunti di lezione nella Midlands Graduate School coprono tutti questi argomenti tranne l'ultimo (monadi). Oggigiorno ci sono molte altre risorse disponibili per le monadi. Quindi non è una grande perdita.
Più matematica conosci, più facile sarebbe imparare la teoria delle categorie. Poiché la teoria delle categorie è una teoria generale delle strutture matematiche, è utile conoscere alcuni esempi per apprezzare il significato delle definizioni. (Quando ho imparato la teoria delle categorie, ho dovuto inventare i miei esempi usando la mia conoscenza della semantica del linguaggio di programmazione, perché i libri di testo standard avevano solo esempi matematici, di cui non sapevo nulla.) Poi è arrivato il brillante libro di Lambek e Scott chiamò " Introduzione alla logica categorica" che collegava la teoria delle categorie ai sistemi di tipo (ciò che chiamano "logica"). È ora possibile comprendere la teoria delle categorie semplicemente collegandola ai sistemi di tipo anche senza conoscere molti esempi. Molte delle risorse che ho menzionato sopra usano questo approccio per spiegare la teoria delle categorie.