幺半群同态和同构

ElB*_*ulP 5 functional-programming scala isomorphism monoids homomorphism

我正在阅读“Scala 编程”一书(红皮书)。

在关于 Monoids 的章节中,我理解了 Monoid 同态是什么,例如:M具有串联和length函数的 String Monoidf保留了Monoid结构,因此是同态的。

M.op(f(x), f(y)) == M.op(f(x) + f(y))
// "Lorem".length + "ipsum".length == ("Lorem" + "ipsum").length
Run Code Online (Sandbox Code Playgroud)

引用这本书(根据记忆,如果我错了,请纠正我:

当这在两个方向上发生时,它被命名为 Monoid isomorphisim,这意味着对于 monoidsM, N和函数f, gf andThen gg andThen fidentity函数。例如StringMonoid 和List[Char]Monoid with concatenation 是同构的。

但我不能看到看到这一个实际的例子,我只能想到flength功能,但会发生什么g

注意:我看过这个问题:What are isomorphism and homomorphisms

siy*_*pao 5

要查看 和 之间的同构StringList[Char]我们有toList: String -> List[Char]mkString: List[Char] -> String

length 是从字符串幺半群到带加法的自然数幺半群的同态。

字符串幺半群的内同态的几个例子是toUpperCasetoLowerCase

对于列表,我们有很多同态,其中许多只是fold.