Qual è la relazione tra i funzionali nella teoria SML e della categoria?


24

Lungo lo stesso pensiero di questa affermazione di Andrej Bauer in questa risposta

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 .

Qual è la relazione tra funtori in SML e funtori nella teoria Categoria?

Dal momento che non conosco i dettagli dei funzioni in altre lingue come Haskell o OCaml, se ci sono informazioni di valore, si prega di aggiungere anche sezioni per altre lingue.


1
Potresti provare a inviare un'e-mail a Dave McQueen per una risposta definitiva, suppongo.
Gilles 'SO- smetti di essere malvagio' il

Risposte:


14

Le categorie formano una (grande) categoria i cui oggetti sono le (piccole) categorie e i cui morfismi sono funzioni tra piccole categorie. In questo senso, i funzionari nella teoria delle categorie sono "morfismi di dimensioni maggiori".

I funzioni ML non sono funzioni nel senso categorico della parola. Ma sono "funzioni di dimensioni maggiori" in senso teorico.

Pensa a tipi di dati concreti in un tipico linguaggio di programmazione come "piccoli". Così int, bool, int -> int, ecc sono piccoli, le classi in Java sono piccole, ma anche le strutture in C. Si possono raccogliere tutti i tipi di dati in una grande collezione chiamata Type. Un costruttore di tipi, come listo arrayè una funzione da Typea Type. Quindi è una funzione "grande". Un funzione ML è solo una funzione leggermente più complicata: accetta come argomento molte piccole cose e restituisce molte piccole cose. "Diverse piccole cose messe insieme" è noto come struttura in ML. In termini di teoria dei tipi di Martin-Löf abbiamo un universo Type di piccoli tipi. I grandi tipi sono generalmente chiamati tipi . Quindi abbiamo:

  1. i valori sono elementi di tipi (esempio 42 : int:)
  2. i tipi sono elementi di Type(esempio int : Type:)
  3. Le firme ML sono di tipo (esempio OrderedType:)
  4. i costruttori di tipi sono elementi di tipi (esempio list : Type -> Type:)
  5. Costruzioni ML sono elementi di genere (ad esempio: String : OrderedType)
  6. Funtori ML sono funzioni tra i tipi (ad esempio: Map.Make : Map.OrderedType -> Make.S)

Ora possiamo tracciare un'analogia tra ML e categorie, in base alla quale i funzione corrispondono ai funzioni. Ma notiamo anche che i tipi di dati in ML sono come "piccole categorie senza morfismi", in altre parole sono come set più che come categorie. Quindi potremmo usare un'analogia tra ML e teoria degli insiemi:

  1. i tipi di dati sono come set
  2. i tipi sono come le classi teoriche impostate
  3. i funzioni sono come funzioni di dimensioni di classe

15

Una struttura ML standard è simile a un'algebra . La sua firma descrive un'intera classe di algebre di forma simile.

F:MonGrpF:AbRng

La maggior parte di queste idee sono state elaborate in serie di articoli da Burstall e Goguen nella progettazione di un linguaggio di specifiche chiamato CLEAR (Riferimenti c5 e c6 nella pagina DBLP .) David MacQueen stava lavorando insieme a Burstall e Sannella a quel tempo, ed era intimamente familiare con i problemi. Il sistema di moduli ML standard si basa su queste idee.

Ciò che la maggior parte delle persone si chiederebbe è, che dire dei morfismi? I teorici di categoria hanno una parte oggetto e una parte morfismo. I funzioni ML standard hanno lo stesso? La risposta è SÌ e NO.

  • La parte SÌ della risposta si applica se le strutture sono di primo ordine. Quindi, ci sono omomorfismi tra diverse strutture della stessa firma e i funzioni ML standard li mappano automaticamente sugli omomorfismi della firma del risultato.
  • La parte NO della risposta si applica quando le strutture hanno operazioni di ordine superiore.

Questo significa che la ML standard si discosta dalla teoria delle categorie? Io non la penso così. Penso piuttosto che Standard ML stia facendo la cosa giusta e che la teoria delle categorie debba ancora recuperare. La teoria delle categorie non sa ancora come gestire le funzioni di ordine superiore. Un giorno lo farà.


"La teoria delle categorie non sa ancora come gestire le funzioni di ordine superiore." Sembra un'altra domanda perché pensavo che la teoria delle categorie potesse fare tutto come base.
Guy Coder,

2
T(X)=[XX]twiceX=T(X)T(X)
Uday Reddy,

In realtà l'ho fatta una vera domanda .
Guy Coder,

"Una struttura ML standard è simile a un'algebra ". I funzioni non sono leggermente più generici di così? Nulla impedisce a una struttura di contenere oggetti non correlati (tipi, valori e funzioni), ad es. non formare un'algebra.
Didierc,

2
@didierc Una firma per le algebre è composta da uno o più tipi (come i nostri tipi), e una o più operazioni (come le nostre funzioni) e facoltativamente alcuni assiomi (come le nostre specifiche). Un algebra per la firma raccoglie insiemi particolari di questo genere, e funzioni particolari per quelle operazioni, in modo tale che gli assiomi sono soddisfatti. Le firme e le strutture SML sono proprio queste cose, tranne per il fatto che SML consente operazioni di ordine superiore mentre Algebra non lo fa.
Uday Reddy,

3

Per quanto ne so , non esiste alcuna relazione formale tra i funzionari della teoria delle categorie e i funzionari della ML (SML o OCaml, sono abbastanza vicini per il nostro scopo qui).

Nella teoria delle categorie, i funzione sono funzioni che operano sugli oggetti. Sono a un livello superiore ai morfismi, che sono spesso funzioni che operano su elementi (molte categorie hanno oggetti che sono impostati con una struttura algebrica e frecce che sono omomorfismi tra queste strutture). Un funzione ML è una funzione che opera su moduli, un livello sopra le funzioni che operano su valori di linguaggio di base. Penso che la somiglianza si fermi qui.

I funzionari ML furono battezzati da Dave McQueen nella sua revisione del 1985 dei Moduli per ML standard (citeseerx) che apparve nella Newsletter del polimorfismo (il documento originale usava l'espressione "modulo parametrico" - le pubblicazioni successive tendevano a usare l'aggettivo "parametrizzato"). Sfortunatamente, non riesco a trovare una copia di quel documento. Nel suo articolo del 1986 Uso dei tipi dipendenti per esprimere la struttura modulare (citeseerx) , dà il nome come stabilito.


2
I portatori non sono solo funzioni sugli oggetti, ma mappano anche i morfismi. I portatori sono "morfismi tra categorie".
Andrej Bauer,

@AndrejBauer Sì, i funzioni sono funzioni sugli oggetti. Non tutte le funzioni sugli oggetti sono funzioni, ma questa è una considerazione secondaria qui.
Gilles 'SO- smetti di essere malvagio' il
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.