我已经从Monoid Morphisms,Products和Coproducts中阅读了有关Monoid同态的知识,并且无法理解100%。
作者说(强调原文):
该
length函数从映射到String,Int同时保留类半体结构。这种以一种保存方式从一个单半体映射到另一个单半体的函数称为单半体同态。通常,对于monoidM和N,是同态f: M => N,以及所有值x:M,y:M以下等式成立:Run Code Online (Sandbox Code Playgroud)f(x |+| y) == (f(x) |+| f(y)) f(mzero[M]) == mzero[N]
他的意思是说,由于数据类型String和Int是monoid ,并且函数length映射String => Int保留了monoid结构(Int是monoid),所以称为monoid同态,对吗?
haskell functional-programming scala category-theory monoids
我试图在编程环境中理解同构和同态,需要一些帮助.
在FPiS一书中,它解释了:
让我们从同态开始:
"foo".length + "bar".length == ("foo" + "bar").length
Run Code Online (Sandbox Code Playgroud)
这里,长度是String to Int保留幺半群结构的函数.
为什么这是一个同态?
为什么它保留了幺半群结构?
例如map在list函数上是同态吗?
关于同构,我从一本书中得到了以下解释:
M和N之间的幺半群同构具有两个同态f和g,其中f和T g以及g和T f都是同一性函数.例如,串联的String和List [Char] monoid是同构的.两个布尔幺半群(假,||)和(真,&&)也是同构的,通过!(否定)功能.
为什么(false, ||), (true, &&)和String and List[Char] monoids with concatenation同构?