Nur durch category theory book lesen, und beschlossen, es auf Haskell anzuwenden.Wenn "Liste" ein Monoid ist, was ist sein "Set"?
Der Autor definiert Monoid als:
Monoid ist eine Gruppe L mit einer binären Operation ausgestattet *: LxL-> L und einem aufstrebenden Einheitselement U in L, so daß etc ...
Bei einer "List" -Struktur als Monoid ist klar, dass die binäre Operation concat
und die Einheit []
ist.
Aber was ist das Set M hier? Ich versuchte L = {set of all lists}
, aber ich denke, dass führt mich in Schwierigkeiten mit "ist L in L?" Frage, die scheint das gleiche Problem wie Sets haben.
Oder denke ich an etwas falsch?
BEARBEITEN: Wie von @ applicative angegeben, sind Haskells Listen Monoids genannt Free monoids!
In der Mathematik der Trick zu vermeiden" L in L "Probleme wechseln Sie von der normalen Mengenlehre (zermelo-fraenkel) zu einer Unterscheidung zwischen Mengen und Klassen und dann können Sie von der Klasse aller Sätze sprechen, oder die Klasse aller Listen. Außerdem denke ich, dass Sie sich auf das Russel-Paradox beziehen, das sich auf die {Menge aller Mengen bezieht, die * sich nicht selbst enthalten}. – epsilonhalbe
Beachten Sie, dass "die Menge aller Listen" selbst keine Liste ist, so dass es nicht sofort zu Widersprüchen kommt, die denen der naiven Mengenlehre analog sind. – Ben
Meinst du 'concat :: [[a]] -> [a]' für deine binäre Operation, oder '(++) :: [a] -> [a] -> [a]'? Es ist tatsächlich * eine Art, in der die erstere eine monoidale Operation ist, aber es ist eine ziemlich obskure ... –