gpt4 book ai didi

haskell - fromInteger 应该是环同态吗?

转载 作者:行者123 更新时间:2023-12-03 09:30:24 25 4
gpt4 key购买 nike

直到今天我还假设 fromIntegerNum类是环同态。我假设这是因为整数是共终结的,所以每个环都必须具有来自整数的唯一同态,所以 Num 是有道理的。 ,它基本上是标准库的环类,将包括同态。
然而今天我正在阅读 Num 的法律。看到了fromInteger不需要是同态,而只需要保持恒等式。例如,我们可以实现 Klein 4 组,并有 fromInteger map 1乘法身份和加法身份的所有其他内容,结果是合法的Num实例但不是同态。

type Klein4
= ( Bool
, Bool
)

instance
(
)
=> Num Klein4
where
( a, b ) + ( c, d )
= ( a /= c
, b /= d
)
( a, b ) * ( c, d )
= ( a && b
, b && d
)
negate
= id
fromInteger x
= ( x == 1
, x == 1
)
这对我来说有点令人惊讶。所以我的问题是为什么会这样?是打算 fromInteger是一个环同态,我只是在迂腐,或者有一个很好的用例,你可能想定义 fromInteger在某种程度上它不是同态(并且仍然遵循 Num 定律)?

最佳答案

就个人而言,我希望 fromInteger是一个环同态,并且会非常惊讶和恼火地找到一个不具有该属性的实例。
当然,FloatDouble必须是异常(exception),对于每一个好的属性(property)。可以说我对此感到非常惊讶和恼火:

> fromInteger (2^64) + fromInteger (-1) == (fromInteger (2^64-1) :: Double)
False
其他大多数建议 Num属性被 Float 破坏和 Double , 也。
我不知道有什么实用类型可以满足所有当前的 Num法律但不是 fromInteger x + fromInteger y == fromInteger (x+y) .

关于haskell - fromInteger 应该是环同态吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65901824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com