独家 - 或者是Bools的幺半群吗?

时间:2017-07-06 09:34:19

标签: haskell xor monoids

我为xor函数创建了一个运算符,它看起来像:

op :: Integer -> Integer -> Maybe Integer
op x y
  | x == 0 && y == 0 = Just 0
  | x == 0 && y == 1 = Just 1
  | x == 1 && y == 0 = Just 1
  | x == 1 && y == 1 = Just 0
  | otherwise = Nothing

我使用0和1而不是True和False,但这不应该对结果产生影响。我读它形成一个幺半群,但我不明白为什么。相关性是显而易见的,并不需要证明(我已经自己做了证明),但身份因素是什么以及为什么?

编辑:这里没有数字:

xor :: Bool -> Bool -> Bool
xor x y | x == True && y == False = True
        | x == False && y == True = True
        | otherwise = False

1 个答案:

答案 0 :(得分:0)

我在证据中犯了一个愚蠢的错误,因为合金说这个身份是假的。这是完整的证明,我希望它现在正确。

mempty <> p = p
xor False p = p
-- For p = True:
xor False True = True
True = True
-- For p = False:
xor False False = False
False = False
-- Q.E.D