Richiesta di riferimento: teoria delle categorie in quanto si applica ai sistemi di tipi


13

Continuo a sentire come si deve imparare la teoria delle categorie per comprendere veramente la teoria del linguaggio di programmazione. Finora ho appreso molti PL senza mai entrare nel regno delle categorie. Tuttavia, ho pensato che fosse tempo di fare il salto per vedere cosa mi mancava.

Sfortunatamente, nessuna delle fonti che riesco a trovare sembra connettere sistemi di tipo o programmazione. Loro dicono che è un'introduzione alla teoria delle categorie per gli informatici, ma poi virare via in generale senza senso astratto (lo dico con amore) senza dare esempi pratici o applicazioni.

Immagino che la mia domanda sia in realtà duplice:

  1. La teoria delle categorie è essenziale per comprendere i "concetti profondi" in PL?
  2. Qual è una fonte che spiega la teoria delle categorie dal punto di vista delle applicazioni pratiche per digitare sistemi e programmazione?

Finora, il più lontano che ho ottenuto è una vaga concezione di funzioni (che non sembrano essere correlate a funzioni in ML, per quanto ne so). Temo l'astrazione che dovrò tenere nella mia testa per capire le monadi da un punto di vista teorico di categoria.


2
@Raphael È una cattiva idea porre una domanda che consta di due diverse domande vagamente correlate tra loro. Ma la domanda 1. non è soggettiva. È piuttosto una richiesta di chiarimenti e spiegazioni. Immagino che la domanda 2. fosse intesa nel senso che è felice con un riferimento a un luogo in cui viene spiegato invece che anche con una spiegazione effettiva.
Thomas Klimpel,

2
In futuro, è meglio porre una sola domanda per post. Puoi porre la domanda 1, quindi, in base alle risposte che ottieni, decidi se porre la domanda 2 separatamente. Ciò spesso rende le cose più semplici.
DW

1
@Raphael In che modo la domanda è soggettiva? Potrebbe essere difficile giudicare - è questo che intendi? E potrebbe avere come risposta "Dipende dal tipo di persona che sei". - È questo che vuoi dire? Si potrebbe ancora scoprire che è assolutamente essenziale o sicuramente non essenziale, giusto? (E la gente sembra concordare sul fatto che non è essenziale.)
k.stm,

1
@ k.stm La forma generale della domanda mi preoccupa. Se qualcuno dovesse chiedere: "L'algebra è essenziale per comprendere i concetti profondi dei linguaggi formali?", So per certo che persone diverse daranno risposte diverse in base alle loro preferenze e ai loro gusti. Non mi aspetto che qui sia diverso.
Raffaello

1
@Raphael Va bene, ho capito. Ma penso che siano le persone a dare risposte soggettive a una domanda obiettiva. (Sembra che le persone dicano "Oh, sto bevendo cinque tazze al giorno e mi sento benissimo!" Quando viene chiesto se il caffè è salutare o no.)
k.stm

Risposte:


15

La teoria delle categorie non è necessaria per comprendere i linguaggi di programmazione, non è nemmeno necessaria una ricerca avanzata sui linguaggi di programmazione. La maggior parte delle persone del linguaggio di programmazione non conosce (molto) la teoria delle categorie.

I metodi teorici di categoria sono stati utili principalmente in una piccola parte della ricerca del linguaggio di programmazione, in particolare nell'analisi della programmazione funzionale, in particolare, dalla grande scoperta di Moggi che alcuni effetti computazionali hanno una struttura monadica. Negli anni '90, in seguito alla svolta di Moggi, sono state fatte molte ricerche per estendere i metodi categorici ad altre forme di linguaggi di programmazione. Tuttavia, per quanto ne so, i metodi categorici non sono stati trovati così utili per OO, calcolo simultaneo, parallelo e distribuito, calcolo a tempo o compilatori. Per questo motivo, le persone hanno per lo più abbandonato l'estensione dei metodi categorici.

Gli approcci categorici alla programmazione tipizzata funzionano bene con funzioni pure. In effetti alcuni semplici sistemi di battitura sono categorie. Questo è descritto in es

Ora c'è molto lavoro sui tipi per processi simultanei (ad esempio tipi di sessione) e nessuno di questi è di natura categorica a partire da settembre 2016.

Detto questo, non si può mai conoscere troppa matematica e conoscere la teoria delle categorie è utile. Quindi è una questione di costi / benefici. Se ti piacciono i calcoli, se forse hai un po 'di background in algebra (ad es. Qual è il gruppo libero su un set, anello libero ecc.) Allora apprendere la teoria delle categorie sarà facile e se hai intenzione di fare un lavoro che sia (ispirato a) programmazione funzionale, conoscere le categorie sarà utile.

Infine, la teoria delle categorie è bella matematica e vale la pena studiare semplicemente perché è così pulita.


Vedi il contributo di Uday Reddy in questa discussione per una visione diversa.


"Tuttavia, per quanto ne so, i metodi categorici non sono stati trovati così utili per ..." Questo è esattamente il mio problema. La semantica operativa può descrivere accuratamente tutti questi concetti, quindi non mi sentivo come se mi stessi perdendo. Adoro la matematica, ma purtroppo manca il mio background in algebra astratta. Comprendo solo le semplici basi delle strutture algebriche comuni. Ciò ha reso la comprensione della teoria delle categorie particolarmente ingombrante.
gardenhead,

2
@gardenhead Allora forse CT non è poi così utile per te. Se vuoi leggere molti articoli nello spazio "Programmazione funzionale", incluso il lavoro sui tipi, molti di loro useranno comunque il linguaggio di CT.
Martin Berger,

Questo è un duplicato?
Raffaello

2
Suggerirei inoltre il libro cs.unibo.it/~asperti/PAPERS/book.pdf "Categorie, tipi e strutture", che è apparentemente fuori catalogo, ma che è un collegamento a un pdf da uno dei home page degli autori, quindi credo sia legittimo.
John Forkosh,

6

La teoria delle categorie di apprendimento è un enorme investimento in termini di tempo e la domanda se ne valga la pena è molto valida. Faccio ancora fatica anche con questo e so già perché dovrei impararlo. Scrissi:

Mi è piaciuto il linguaggio assembly quando ho iniziato a programmare e la teoria degli insiemi è simile al linguaggio assembly. La teoria delle categorie è un'alternativa per aggirare tutti i pregiudizi radicati sulla logica e sulla teoria dei modelli incorporati nella teoria dell'insieme ZFC tradizionale.

L'idea qui è di utilizzare le categorie invece di insiemi o "bit non specificati" come possibile semantica per una data teoria dei tipi o linguaggio di programmazione. Perché uno dovrebbe voler fare questo? Considera la dualità tra un'azione e un'osservazione. Osservazioni diverse (o almeno il loro ordine nel tempo) non interferiscono l'una con l'altra (al di fuori della meccanica quantistica), ma ciò non è necessariamente vero per azioni diverse. I pregiudizi radicati sulla logica incorporata nella teoria degli insiemi rendono difficile modellare le azioni, rispetto alle osservazioni di modellazione.


Non sono convinto che ci sia davvero una perfetta corrispondenza tra teoria delle categorie e teoria dei tipi come affermato qui :

Con una dualità di sintassi-semantica si può vedere la teoria dei tipi come un linguaggio sintattico formale o un calcolo per la teoria delle categorie, e viceversa si può pensare alla teoria delle categorie come a fornire semantica per la teoria dei tipi.

È vero che la teoria delle categorie può fornire semantica per la teoria dei tipi (che può essere davvero utile), ma dubito che la teoria dei tipi fornisca davvero un linguaggio sintattico formale sufficientemente potente per esprimere tutti i calcoli fatti nella teoria delle categorie.


In pratica, l'utilità della teoria delle categorie può sorgere suggerendo utili domande e analogie. Ma la teoria delle categorie può anche suggerire attività e domande che alla fine si rivelano solo una distrazione (perdita di tempo) dalle questioni davvero importanti. E sicuramente puoi imparare la logica e la teoria dei tipi senza preoccuparti della teoria delle categorie.


Grazie per i tuoi pensieri Le tue ragioni per l'apprendimento della teoria delle categorie sembrano essere diverse dalle mie; i tuoi interessi derivano da una prospettiva puramente matematica, mentre vorrei ampliare la mia comprensione dei tipi. Tuttavia, è bello sapere che le altre persone che mi assediano trovano la categoria difficile da avvicinare e applicare
gardenhead,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.