Monad eller monoide?
Den tekniske definition er, at en monoide er en semigruppe med en identitet. Hvilket ikke er særlig ELI5.
Så: en monoide er “en masse ting, og en ting vi gør med disse ting, som opfører sig ret intuitivt.” Hvilket er meget vagt som helvede. Men det er meningen, at det skal være det. Meget ofte “føles” ting, der opfører sig sådan, som addition.
Som f.eks. at skubbe en masse bunker af pinde sammen.
-
Hvis jeg har nogle pinde, og jeg skubber dem sammen, hvad er der så i bunken? Pinde, ikke sandt? Jep.
-
Hvad hvis jeg først skubber dem i mindre bunker og derefter ligesom omgrupperer disse bunker omkring sig selv og derefter skubber dem sammen? Er det stadig en bunke af pinde? Hvad hvis jeg skubber pindene til venstre først, før jeg gør resten? Jep. Er det grundlæggende den samme bunke pinde? Jep.
-
Hvis jeg har en bunke pinde og skubber Ingen pinde på den… har det ændret noget? Niks.
De to første er det, der gør det til en halvgruppe.
#1 er lukning under en binær operation. Selvfølgelig er der mange pinde, men jeg kunne dele den op i to grupper, eller tilføje en pind ad gangen, eller hvad som helst. Når jeg opererer på pindene ved hjælp af Shove for at samle dem, har jeg stadig ting, der er pinde til sidst. De er ikke blevet til frøer, og jeg har ikke udskåret dem.
Fyr ville ikke kun være ikke-binær, men også ikke lukket – hvis jeg bruger ild på pindene, har jeg så pinde til sidst? Nå, men nej, ikke rigtig. Brændte pinde, helt sikkert — hvilket vel at mærke er pinde, der har fået ildoperation på sig.
#2 er associativitet. Det betyder, at den rækkefølge, vi evaluerer tingene i, er ligegyldig.
#3 er identitet. Det er det, der er analogt med nul – hvis du tager det og anvender din operation på det og noget, ændrer der sig intet. Så No Sticks ville være det her.
Fra et programmeringsperspektiv er strings concatenation et godt ikke-matematisk eksempel.
Hvad er den binære operation? Sammenkædning. At sætte ting sammen. (Husk, hvad jeg sagde om, at det føles som addition!) Du opererer kun med to stykker ad gangen. Hvis du havde en million ord, ville du stadig gøre det ved at addere et til et andet osv. a + b => ab
Er det lukket under denne operation? Lukning betyder “Jeg har ting af denne type, gør noget ved det, og har stadig denne type til sidst”. Så hvis vi tager strenge og klistrer dem sammen, har vi… en lang streng! Så, yup, det er en streng. Cool! Så den er lukket under vores operation.
Er den associativ? Ja, ja! Og husk, det betyder ikke, at rækkefølgen er ligegyldig – men at rækkefølgen af evalueringen er ligegyldig. he + llo
giver det samme resultat som h + ello
eller h + el + lo
eller h + (el + lo)
eller (h + el) + lo
eller (h + el) + lo
eller ((h + (e + l) + l) + o
er alle hello
til sidst. (Bemærk, at “rækkefølge betyder noget” her ville være — er he + llo
det samme som lh + elo
? Nope, hello
er ikke lhelo
.
Er der en identitet for denne operation? Jep — den tomme streng. apple + ""
er apple
. Stadig en streng. ""
er også en streng, bare en uden noget i den. Så vi kan bruge den til vores operation og stadig få en streng — faktisk den samme streng, som vi startede med!