【发布时间】:2012-07-28 09:08:13
【问题描述】:
范畴论和抽象代数处理函数与其他函数结合的方式。复杂性理论处理一个函数的计算难度。对我来说很奇怪,我还没有看到有人将这些研究领域结合起来,因为它们看起来很自然。以前有人做过吗?
作为一个激励性的例子,让我们看一下幺半群。众所周知,如果一个运算是一个幺半群,那么我们可以并行化这个运算。
例如在 Haskell 中,我们可以简单地将加法定义为整数上的幺半群,如下所示:
instance Monoid Int where
mempty = 0
mappend = (+)
现在,如果我们要计算 0 到 999 的总和,我们可以按如下顺序执行:
foldl1' (+) [0..999]
或者我们可以并行进行
mconcat [0..999] -- for simplicity of the code, I'm ignoring that this doesn't *actually* run in parallel
但是并行化这个幺半群才有意义,因为 mappend 在恒定时间内运行。如果不是这样呢?例如,列表是一个幺半群,其中 mappend 不会运行不固定的时间(或空间!)。我猜这就是为什么 Haskell 中没有默认的并行 mconcat 函数的原因。最佳实现取决于幺半群的复杂性。
似乎应该有一种方便的方式来描述这两个幺半群之间的差异。然后,我们应该能够用这些差异注释我们的代码,并让程序根据幺半群的复杂性自动选择要使用的最佳算法。
【问题讨论】:
-
这可能会在cs.stackexchange.com 上得到更好的答案。
-
看起来这是一个空白。那么为什么不尝试发明一些东西呢?如果幸运的话,20 年后人们会引用 Izbicki 定理。
-
@PaulJohnson 我希望它不会变成那样:)
-
IIRC,有一些关于使用 Hoare 风格的定理证明和/或子结构类型系统来证明资源使用限制的工作。不过,我不记得范畴论特别相关。
-
实际上,
mappend对Integer的加法并不使用恒定的时间或空间,对mconcat的含义大致相同。恒定时间算术有点像牛顿物理学——如果你只使用小数字,这是一个令人愉快的虚构。 ;] 有限类型的mappend——比如说,Word8的加法模 256——会更好地满足你的观点。
标签: haskell complexity-theory category-theory abstract-algebra