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
m
的操作n
是设置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
Takem
和n
to be Sum 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
导致两个不相容的结果。
另一方面,whenm
是一个幺半群,其中没有(非平凡的)元素有逆,例如[a]
,那么你act
看起来像一个正确的动作。
推荐阅读
- node.js - 在托管程序中将我的域重定向到我的 vps 服务器不起作用
- rust - 在 Rust 的 Cursive 库中更新 TextView 的正确方法
- android - Android/Kotlin 中的操作顺序
- javascript - javascript按目录读取多个文件
- c# - Unity 3d 碰撞检测
- android - 使用 Mapbox Android 中的循环从 geojson 添加许多符号图标?
- sockets - 游戏客户端如何从服务器接收 UDP 数据?
- ios - 如何从 Gmail 应用程序嵌入式 Safari 浏览器在 iOS 上调试“400 错误请求”
- python - 在 Python 中使用范围函数
- python - 为接受两个参数的 C 模板类创建 Python 绑定