Leser, Schreiber Monaden

17

Sei ein CCC . Lassen ein Produkt bifunctor auf sein . Da Cat CCC ist, können wir curry :C(×)C(×)

curry(×):C(CC)

curry(×)A=λB.A×B

Die Funktorkategorie hat die übliche monoidale Struktur. CC A monoid in ist ein monadisch in . CCC Wir betrachten endliche Produkte als monoidal Struktur auf .C

curry(×)1id

A B.curry(×)(A×B)(curry(×)A)(curry(×)B)

Daher behält die monoidale Struktur bei und transportiert ein Monoid zu einer Monade und ein Comonoid zu einer Comonade. Es transportiert nämlich ein beliebiges Monoid zu ( W r i t e r w ) Monade (siehe Definition - w muss ein Monoid sein). Ebenso transportiert es den diagonalen Comonoid zur Coreader- Comonade.(curry(×))w(Writer w)w

Der Vollständigkeit halber entfalte ich jetzt die Konstruktion von Writer.

Start. Eigentlich Writer=Coreader=curry(×) , sie haben nur unterschiedliche Namen in Haskell. Wir haben eine Haskell monoid w,mappend,mempty :

mappend:w×ww

mempty:1w

Writer ist ein Funktors, so ist es auch morphisms abbilden muss, wie beispielsweise mappend und mempty . Ich schreibe dies wie folgt, obwohl es in Haskell ungültig ist:

Writer mappend:Writer(w×w)Writer w

Writer mappend ist eine natürliche Transformation, eine morphism inCC . Durch die Eigenschaften voncurry(×) es eine Funktion, die annimmtaOb(C)und einen Morphismus in ergibtC:

Writer mappend a=mappend×(id(a)):Writer(w×w)aWriter w a

Formlos, Summen - Komponenten vom Typ W und die Pumpen eines intakt. Dies ist genau die Definition von Writer in Haskell. Ein Hindernis ist , dass für die Monade W r i t e r w , μ , & eegr; wir brauchenWriter mappend awaWriter w,μ,η

μ:Writer wWriter wWriter w

dh Inkompatibilität von Typen. Diese Funktoren sind jedoch isomorph: durch den üblichen Assoziator für endliche Produkte, der ein natürlicher Isomorphismus λ a ist . w × ( w × a ) = W r i t e r w W r i t e r wWriter(w×w)=λa.(w×w)×aλa.w×(w×a)=Writer wWriter w. Anschließend definieren wir über W r i t e r m a p p e n d . Ich lasse eine Konstruktion von η über m e m p t y aus .μWriter mappendηmempty

Writer, wobei ein Funktors bewahrt kommutative Diagramme, dh Konserven monoid Gleichheiten, so haben wir selbstverständlich bewiesen Gleichheiten für = a monoid in ( C C ) = a monadisch in C . Ende.Writer w,μ,η(CC)C

Was ist mit Reader und Cowriter? Der Leser ist an Coreader gebunden, wie in der Definition von Coreader erläutert, siehe Link oben. Ebenso wird Cowriter zum Writer ernannt. Ich habe keine Definition von Cowriter gefunden, also habe ich sie mir analog aus der Tabelle ausgedacht:

Alt-Text

{- base, Hackage.category-extras -}
import Control.Comonad
import Data.Monoid
data Cowriter w a = Cowriter (w -> a)
instance Functor (Cowriter w) where
    fmap f (Cowriter g) = Cowriter (f . g)
instance Monoid w => Copointed (Cowriter w) where
    extract (Cowriter g) = g mempty
instance Monoid w => Comonad (Cowriter w) where
    duplicate (Cowriter g) = Cowriter
        (\w' -> Cowriter (\w -> g (w `mappend` w')))

Nachfolgend finden Sie die vereinfachten Definitionen dieser (Co-) Monaden. fr_ob F bezeichnet eine Abbildung eines Funktors F auf Objekte, fr_mor F bezeichnet eine Abbildung eines Funktors F auf Morphismen. Es ist ein Objekt monoid in C .w,+^,0^C

  • Schriftsteller
    • fr_ob(Writer w)a=a×w
    • fr_mor(Writer w)f=λa0,w2.a0,f w2
    • ηa=λa0.a0,0^
    • μa=λa0,w1,w0.a0,w0+^w1
  • Leser
    • fr_ob(Reader r)a=ra
    • fr_mor(Reader r)f=λg r0.f(g r0)
    • ηa=λa0 r0.a0
    • μa=λf r0.f r0 r0
  • Coreader
    • fr_ob(Coreader r)a=r×a
    • fr_mor(Coreader r)f=λr0,a0.f r0,a0
    • ηa=λr0,a0.a0
    • μa=λr0,a0.r0,r0,a0
  • Cowriter
    • fr_ob(Cowriter w)a=wa
    • fr_mor(Cowriter w)f=λg r0.f(g r0)
    • ηa=λf.f 0^
    • μa=λf w1w0.f(w0+^w1)

Die Frage ist, dass sich die Adjunktion in auf Funktoren bezieht, nicht auf Monaden. Ich verstehe nicht, wie die Adjunktion impliziert "Coreader ist eine Komonade" "Reader ist eine Monade" und "Writer ist eine Monade" "Cowriter ist eine Komonade".C

Anmerkung. Ich habe Mühe, mehr Kontext bereitzustellen. Es erfordert etwas Arbeit. Insbesondere, wenn Sie kategorische Reinheit benötigen und diese (Co) Monaden für Programmierer eingeführt wurden. Nörgeln Sie weiter! ;)

beroal
quelle
Angebot: Sie können einen Screenshot der Tabelle machen und das Bild hier einfügen.
MS Dousti
Sie sollten die Frage hier kopieren.
Dave Clarke
2
Downvoting-Nutzer sollten einen Kommentar hinterlassen, in dem erläutert wird, warum.
Suresh Venkat
1
@Ohad. Ich gebe zu, dass ich diese Änderung eingeführt habe, um zu versuchen, der Frage mehr Kontext zu geben (wie ursprünglich in dem Blog-Beitrag, auf den ursprünglich verwiesen wurde, gefunden). Ich denke, Beroal sollte sich mehr Mühe geben, seine Frage in sich geschlossen zu halten, indem er beispielsweise definiert, was Reader und Writer und Coreader und Cowriter in kategorischen Begriffen oder in Haskell oder in beiden Begriffen sind, anstatt davon auszugehen, dass wir alle wissen, worauf Bezug genommen wird.
Dave Clarke
2
@beroal: Was ich damit meinte, war, dass das Parsen des Haskell-Codes und der Übergang zu CT für mich und vielleicht auch für andere nicht trivial ist, da ich Haskell nicht täglich verwende. Wenn Sie die Frage rein kategorisch umformulieren, erhalten Sie mit größerer Wahrscheinlichkeit eine schnellere Antwort ...
Ohad Kammar

Antworten:

13

Ja, wenn eine Monade ein Recht adjoint hat N , dann N erbt automatisch eine comonad Struktur.M:CCNN

Die allgemeine kategorietheoretische Einstellung, um dies zu verstehen, lautet wie folgt. Sei und D zwei Kategorien. Schreiben Sie F u n ( C , D ) für die Kategorie der Funktoren von C bis D ; Seine Objekte sind Funktoren und seine Morphismen natürliche Transformationen. Schreiben Sie F u n L ( C , D ) für die vollständige Unterkategorie von F u n ( C , D ).CDFun(C,D)CDFunL(C,D)Fun(C,D)auf den Funktoren, die richtige Adjunkte haben (mit anderen Worten, wir betrachten die Funktoren mit richtigen Adjunkten und willkürlichen natürlichen Transformationen zwischen ihnen). Schreiben F R : D C für das Recht adjoint einen Funktor F : C D . Dann ist - R : F u n L ( C , D ) F u n ( D , C ) ein kontravarianter Funktor: wenn α : F CDFR:DCF:CDR:FunL(C,D)Fun(D,C) ist eine natürliche Transformationdann gibt es eine induzierte natürliche Transformation α R : G RF R .α:FGαR:GRFR

C=DFun(C,C)FunL(C,D)(FG)R=GRFRRRM Mit der Struktur einer Monade erhält man eine Komonade.

Reid Barton
quelle
1
R
7

Übrigens:

(×)CC(×)

×C

CCat

HomCat(C×D,E)HomCat(C,ED)

C×DEDF:DECDEC=D=E

×:C×CC
curry×:CCC

Dies ist jedoch nur ein Sonderfall von:

F:C×DE
curryF:CED
Dan Doel
quelle
2 Dan Doel: Ja, ja, ja, danke. Ich habe den Fehler gemacht, als ich aus dem Originalbeitrag beroal.livejournal.com/23223.html übersetzt habe .
Beroal
4

F,G,ϵ,ηGF,η,GϵFFG,ϵ,FηGFGSetMon).

Was Sie also tun möchten, ist, Reader (oder Writer) zu nehmen und in die zugehörigen Funktoren zu zerlegen, aus denen die Monade und die entsprechende Comonade hervorgehen. Das heißt, die Verbindung zwischen Reader und Coreader (oder Writer und Cowriter) ist nicht die, die Sie suchen.

:hom(×A,=)hom(,=A)X,Y. {f:X×AY}{f:XYA}:hom(×A,=×1)hom(1,=A)

Zaunkönig
quelle
2 wren ng thornton: Mir ist keine definierende Adjunktion für Reader und Writer bekannt, die den Adjunktionen zwischen Set und einer Kategorie algebraischer Strukturen ähnelt. Oder meinst du, dass jede Monade durch einen Zusatz wie in "MacLane. Kategorien für den Arbeitsmathematiker. VI. Monaden und Algebren. 2. Algebren für eine Monade. Satz 1 (Jede Monade wird durch ihre T-Algebren definiert). "? Kannst du genauer sein? Eigentlich ist meine Frage der Abschluss eines Versuchs, diese (Co-) Monaden in eleganten Worten als die Listenmonade zu definieren.
beroal
T
F:SetMonU:MonSetη:idSetUFϵ:FUidMonF,U,η,ϵUF,η,UϵFSetMonFU,ϵ,FηU
Functors (Reader a) und (Writer a) sind nebeneinander angeordnet, und diese Nebeneinanderanordnung führt zur Monade (State a).
beroal
"Nein, mein Punkt war, dass Monaden und Comonaden auf" die gleiche Weise "entstehen, nämlich über eine Adjunktion, wie oben beschrieben." Wenn Sie die Monade und die Comonade aus der Verknüpfung zwischen den Kategorien Set und Mon erhalten, erhalten Sie die Monade auf Set und die Comonade auf Mon - verschiedene Kategorien. Reader und Writer gehören jedoch zur selben CCC-Kategorie.
beroal