Domanda

Normalmente ho messo la domanda prima del contesto, ma in questo caso voglio ammettere La possibilità che il contesto e la mia comprensione annullano la domanda. Inoltre mi aiuta a pensare attraverso la mia domanda.

I Recentemente ho iniziato a leggere Teoria della categoria per i programmatori (Bartosz Milewski) , e questo è il mio Comprensione delle categorie: sono "strutture algebriche" che consistono oggetti e frecce / morfismi tra quegli oggetti. I morfismi devono obbedire Le leggi dell'Associatività, SO

$$ A \ Randeraw (B \ RightArrow c)= (A \ RightArrow B) \ RightArrow c $$

E ci deve essere un morfismo di identità per ogni oggetto.

Ora, Milewski continua a spiegare che Monoidi (che sono abbastanza a mio agio con Nel senso del set-teorico) sono anche visibili come categorie. Questa è la parte I sto avendo problemi con. Uno degli esercizi nel libro è considerare il Boolean-e monoid (booleani con l'operatore e operatore) come categoria:

.

Rappresenta il BOOL Monoid con l'operatore e l'operatore come categoria: Elenca il morfismi e loro regole di composizione.

Voglio dare alcuni esempi, che farò in un SML (anche se prenderò in prestito i nomi di Haskell).

Il monoid potrebbe essere descritto set-teoricamente con la seguente firma:

signature MONOID = sig
  type m
  val mempty : m
  val mappend : m -> m -> m
end
.

Inoltre, il monoide per booleani con l'operatore e l'operatore sarebbe stato dato come

structure BoolAnd : MONOID = struct
  type m = bool
  val mempty = true
  fun mappend x y = x andalso y
end
.

Quindi, ecco la mia comprensione di questo monoide come categoria e dei suoi morfismi: è è corretto?

    .
  • Gli oggetti nella categoria sono booleani (vero e falso) e funziona da booleani ai booleani
  • BoolAnd.mappend è un morfismo dal primo a quest'ultimo
  • mappend true è un morfismo di identità per gli oggetti funzione nel Categoria (dico "un" perché non è la funzione di identità effettiva fun id x = x Anche un morfismo di identità per le funzioni, grazie a tipi polimorfici? O Non conta nella categoria Terra? So che mappend true è equivalente alla funzione di identità in composizione delle funzioni con tipo bool -> bool.)
  • Il morfismo dell'identità per gli oggetti booleani sembra essere solo fun id (b:bool) = b
  • I morfismi di identità dati dovrebbero essere associativi:
(* example, not proof *)
- open BoolAnd;
- (id o (mappend true)) o not;
val it = fn : bool -> bool
- it false;
val it = true
- id o ((mappend true) o not);
val it = fn : bool -> bool
- it false;
val it = true
.

Le regole della composizione sembrano essere che mappend true è l'identità, mentre mappend false è un "lavandino" di sorta, causando sempre la funzione risultante restituire false. Ma id e mappend non comporre direttamente, perché i tipi Non allineare (quando id è specializzato per booleans, come nei proiettili sopra).

Sono percorsi qualcosa? Qualcosa non va? Ho dato troppi dettagli (lì sembra essere un'enfasi sull'evitare di scavare troppo gli oggetti)?

Chiedo questo entrambi per confermare la mia comprensione in modo da avere una buona base per il resto del libro e anche perché mi ci è voluto molto tempo per identificare gli oggetti e i morfismi al lavoro; Alcuni di loro sono ancora scambiato.

È stato utile?

Soluzione

Monoidi sono un oggetto categorie.Gli elementi sono morfismi, la moltiplicazione monoide è composizione e l'identità monoide è il morfismo identità.

Nel caso di booleani-con-e il monoid è $ m= (\ {\ top, \ bot \}, \ atter, \ top) $ .La categoria ha quindi un singolo oggetto (potremmo chiamarlo $ m $ ) con due morfismi $ \ Top: m \ toM $ e $ \ bot: m \ to m $ .La composizione è data da $ \ Land $ e il morfismo dell'identità è $ \ top $ .


.

Per dare un po 'più di contesto, c'è un modo per visualizzare un monoide in modo tale che gli oggetti siano gli elementi del monoide: come una categoria monoidale discreta (senza identità). Teoria della categoria per i programmatori copre l'argomento delle categorie monoidali nel Capitolo 22, "Monadi categoricamente".

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