微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

这是一个好的幺半群行动吗?

如何解决这是一个好的幺半群行动吗?

我想我可能偶然发现了一位将军,虽然有点堕落,monoid action。伪 Haskell:

instance (Monoid m,Monoid n) => Act m n where
    act mempty x = x  -- let's pretend that we can use `mempty` as a pattern
    act _ _ = mempty

mn 的操作是将 n 设置为 mempty,除非 m 本身为空。

这是遵纪守法的幺半群行动吗?它是不是由我以外的人发明的?如果有,它的名字是什么?

解决方法

它看起来不像幺半群动作,至少在一般情况下是这样。如果是这样,我们应该具有以下属性:

-- law 1
act mempty            x = x
-- law 2
act (m1 <> m2) x = act m1 (act m2 x)

而且,由于 act 在伪实例中的定义方式:

-- property 1
act x y = mempty
   when x /= mempty

mnSum Int,这是一个幺半群。

我们有

act (Sum 0) (Sum 1)
= { definition of mempty }
act mempty (Sum 1)
= { law 1 }
Sum 1

我们也有

act (Sum 0) (Sum 1)
= { definition of <> on Sum }
act (Sum (-2) <> Sum 2) (Sum 1)
= { law 2 }
act (Sum (-2)) (act (Sum 2) (Sum 1))
= { property 1,given Sum (-2) /= mempty }
mempty
= { definition of mempty }
Sum 0

导致两个不相容的结果。

另一方面,当 m 是一个幺半群,其中没有(非平凡的)元素具有逆元素,例如[a],那么您的 act 看起来是正确的操作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。