Teoria delle categorie (non) per la programmazione?


21

Dopo aver appreso Haskell e altri linguaggi FP non altrettanto puri, ho deciso di leggere la teoria delle categorie. Dopo aver acquisito una buona conoscenza della teoria delle categorie, ho iniziato a pensare a come i concetti della teoria delle categorie possano essere usati per pensare alla progettazione di programmi, ma non importa quanto ci abbia provato, sembra che questa non sia la strada da percorrere.

Dopo aver speso molti tentativi falliti di collegare la teoria delle categorie alla progettazione di programmi, sono giunto alla conclusione che:

  • La teoria delle categorie è utile quando si progetta un linguaggio di programmazione .
  • La teoria delle categorie non è qualcosa che usi durante la progettazione di programmi (anche quando usi un linguaggio progettato in base ai principi di categoria). Ad esempio: durante la programmazione in Haskell userete tipi, tipi costruttore, funzioni, funzioni di ordine superiore ecc. Per progettare il vostro programma, non concetti di teoria delle categorie.

In sintesi, abbiamo un sistema di livello inferiore (l'ordine va da basso ad alto):

Teoria delle categorie -> Linguaggio di programmazione -> Programma

In un particolare livello usi i concetti del livello sottostante immediato .

Questa comprensione è corretta? In caso contrario e ritieni che nella progettazione dei programmi possiamo utilizzare direttamente i concetti di teoria delle categorie, fai riferimento ad alcuni articoli o post di blog in cui viene dimostrato.

NOTA: Progettando programmi intendo progettare programmi basati su concetti diversi, come concorrenza, parallelismo, reattivo, passaggio di messaggi, ecc.


1
Consideri le monadi come parte del linguaggio o dei programmi di programmazione? Frecce?
Dave Clarke,

2
Questo mi sembra una domanda filosofica, almeno in parte. Non sono sicuro che esista un'unica risposta corretta. Un adepto della teoria delle categorie applicherà l'intuizione acquisita durante la programmazione, un altro favorirà diversi modi di pensare.
Raffaello

2
La maggior parte dei programmi scritti utilizza linguaggi di programmazione non ispirati alla teoria delle categorie. Per quanto ne so, il programmatore medio non è a conoscenza della teoria delle categorie, quindi la maggior parte dei programmi (compresi il sistema operativo e il browser) non sono ispirati da matematica superiore.
Yuval Filmus,

1
@YuvalFilmus: la mia domanda è rivolta ai linguaggi di programmazione funzionale
Ankur,

1
vedi anche questa domanda per alcune applicazioni CS di monoidi
vzn

Risposte:


13

Bene, questo ovviamente dipende dal tipo di programma che stai cercando di progettare.

Se stai progettando un programma di contabilità per la cioccolateria di tua zia, dubito molto che la teoria delle categorie sarà di grande utilità.

Ma ci sono naturalmente situazioni in cui la teoria delle categorie è enormemente utile nella progettazione di programmi (con questo intendo anche strutture di dati, librerie e così via). Tali situazioni si verificano principalmente quando i programmi coinvolti sono di natura matematica.

Se vuoi scrivere programmi che calcolano con numeri reali esatti e altre strutture che si verificano nell'analisi matematica, la prima domanda a cui devi rispondere è cosa significa implementare correttamente un oggetto matematico complicato (come una funzione differenziabile, una varietà, ecc. ). Qui aiuta molto a conoscere alcune teorie e logiche di categoria, perché ti danno un modo sistematico di tradurre definizioni di strutture matematiche in specifiche e implementazioni di corrispondenti strutture di dati. La parola d'ordine che dovresti cercare è la teoria della realizzabilità . Ma questo è solo un esempio.

Il modo migliore per vedere come la teoria delle categorie è utile è guardare i programmi scritti da persone che conoscono molta teoria delle categorie (e matematica in generale). Ne è un chiaro esempio Martín Escardó e i suoi impossibili funzionari, ad esempio:

M. Escardó e P. Oliva: quali giochi sequenziali, il teorema di Tychonoff e il turno di doppia negazione hanno in comune , programmazione funzionale strutturata matematicamente 2010, ACM Press. (con i file Haskell e Agda associati )

Potresti lamentarti che questa non è solo teoria delle categorie ma anche logica e topologia. Tali reclami sarebbero gravemente fuorviati. La migliore teoria delle categorie è sempre mescolata con altre cose.

Infine, vorrei sconsigliare di trarre grandi conclusioni sulla natura delle cose sulla base di un po 'di lettura auto-assegnata.


Questo è esattamente il mio punto. Se sto progettando software di contabilità, il sistema di tipi sarà la mia lingua per la progettazione. Se sto progettando un software matematico anche allora userò il sistema dei tipi per rappresentare concetti di teoria delle categorie. Il che indica sostanzialmente che la teoria dei tipi o i sistemi di tipi sono astrazioni più generali della teoria delle categorie.
Ankur,

1
Questa è un'affermazione ridicola. Penso che dovresti forse imparare un po 'di più prima di fare affermazioni simili. Forse puoi iniziare con existentialtype.wordpress.com/2011/03/27/the-holy-trinity
Andrej Bauer il

Non sono un ricercatore, un dottorando, uno scienziato, un matematico o un teorico di categoria, quindi non arrabbiarti per le mie affermazioni, non verranno pubblicate in alcune riviste scientifiche o articoli di ricerca. Sono solo un programmatore che sta cercando di capire l'altro lato della medaglia. A proposito, grazie per il link.
Ankur,

1
Me ne rendo conto, ed è proprio per questo che sto suggerendo che dovresti stare attento a trarre conclusioni come te: semplicemente non hai le informazioni necessarie per trarre tali conclusioni. Ed è anche per questo che ti sto riferendo a un post sul blog di Bob Harpher piuttosto che, per esempio, a un libro tecnico sulla relazione tra teoria dei tipi e teoria delle categorie. Sto cercando di aiutarti, ma mi aspetterei in cambio un po 'più di riserve da te quando si tratterà di trarre grandi conclusioni sulla natura di un intero ramo della matematica.
Andrej Bauer,

Ad esempio, hai affermato che "la teoria dei tipi è un'astrazione più generale della teoria delle categorie". Questo è un esempio di un'affermazione che dovresti sapere di non fare in base a poca conoscenza. Lavoro professionalmente in questo settore e anche io starei molto attento a trarre una conclusione del genere, o l'opposto.
Andrej Bauer,

6

Le persone usavano CT per descrivere i tipi di dati.

  1. Il tipo di dati è stato definito da una particolare categoria i cui oggetti sono sequenze finite di tipi (linguaggio di specifica) e le cui frecce erano proiezioni o altre composizioni delle operazioni del tipo di dati. Ad esempio, l'oggetto è il dominio ed è il codice principale dell'operazione push di stack. Questo ti dà la sintassi, ma non hai ancora una nozione di semantica.
  2. Un'algebra, vale a dire un'istanza del tipo, è una funzione della teoria di Ens, la categoria di (piccoli) insiemi. (Usiamo "piccolo" per evitare il paradosso di Russell, ma non ha importanza.)
  3. Si scopre che le proprietà di chiusura delle categorie corrispondono alle famiglie di teorie logiche. Ad esempio, se la categoria della teoria è chiusa sotto i prodotti, il tipo di dati può essere assiomatizzato da equazioni. Se la categoria della teoria viene chiusa eseguendo i pullback, il tipo di dati può essere assiomatizzato da frasi di Horn.

Non sono del tutto sicuro che qualcuno presti più attenzione a questo. Penserei che questo , e i collegamenti lì, lo spiegherebbero in modo più dettagliato.

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.