Domanda

Probabilmente non sto fraserando questa domanda bene, quindi per favore porta con me mentre cerco di spiegare cosa intendo.

Sto lavorando alla teoria della categoria di apprendimento, come applicato alla programmazione. Finora, capisco che:

    .
  • oggetti in una categoria sono "ininterrotti"; Non dovresti peering dentro di loro per vedere la loro struttura interna.
  • Qualsiasi set è una categoria
  • I tipi di linguaggio di programmazione possono essere pensati come set. (BOOL è il set vero, falso; int è il set di tutti i numeri interi; ecc.)
  • Pertanto, tutti i tipi in una lingua formano una categoria di set.
  • i morfismi sono frecce tra oggetti.
  • Se quegli oggetti sono stessi categorie, i morfismi vengono chiamati commissari.

Preso insieme, che implicherebbe che una funzione da INT a BOOL sia un funzionista, perché è una mappa dalla categoria Set int per la categoria Set BOOL.

Tuttavia, ho anche letto altrove (in particolare https://www.johndcook.com/blog/2014/05/10/Haskell-Category-theory/ ), che pensava che questo è sbagliato e non dovremmo davvero parlare di tipi di lingua Una categoria di base con i morfismi "Just". Ma non vedo come si adatta alla mia precedente logica.

I Devo pertanto concludere che la mia precedente logica è difettosa, ma non sono chiara come o perché. Qual è il modo giusto per concettualizzarlo? I set sono solo eccezioni speciali extra? O è davvero solo una questione arbitraria di preferenze per come visualizzare lo spazio problematico? O sono appena uscito male da qualche parte?

È stato utile?

Soluzione

Ci sono diverse idee che fluttuano qui intorno. Puoi guardare un linguaggio di programmazione attraverso una lente categorica e quindi i tipi sono oggetti, e sono davvero opachi. Quindi BOOL non è un set di vero e falso in questa immagine. È un oggetto che ha due morfismi (iniezioni) che entreranno dentro, uno corrispondente a true e uno a false. A Haskell questi sono i due costruttori di BOOL. Non prendono argomenti, ma questo è interpretato come morfismi dall'oggetto terminale (il tipo di unità). Tutto funziona bene.

Poi c'è l'immagine più tradizionale in cui i tipi sono solo set di valori e morfismi sono le funzioni tra set. Set e funzioni formano un set di categoria. Quella immagine funziona bene finché non parli di funzione parziale (quella che loop per sempre).

Poi c'è la terza idea che ogni singolo set è una categoria in sé. È una categoria discreta, il che significa che non ci sono morfismi (diversi dall'identità) tra elementi. In tal caso, le funzioni tra i set corrispondono davvero ai funttori tra categorie discrete. Ma un funttrista tra categorie discrete non è altro che una funzione su oggetti (elementi) che è banale sui morfismi, quindi non è un punto di vista molto interessante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top