【问题标题】:Is there a theory that combines category theory/abstract algebra and computational complexity?有没有结合范畴论/抽象代数和计算复杂度的理论?
【发布时间】: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 风格的定理证明和/或子结构类型系统来证明资源使用限制的工作。不过,我不记得范畴论特别相关。
  • 实际上,mappendInteger 的加法并不使用恒定的时间或空间,对mconcat 的含义大致相同。恒定时间算术有点像牛顿物理学——如果你只使用小数字,这是一个令人愉快的虚构。 ;] 有限类型的mappend——比如说,Word8 的加法模 256——会更好地满足你的观点。

标签: haskell complexity-theory category-theory abstract-algebra


【解决方案1】:

我并不声称自己是这些主题的专家,但我或许能够对这个想法有所了解。

让我们首先考虑范畴论。范畴论是对数学结构的高水平研究。范畴的概念很笼统,许多数学对象构成范畴。范畴论最初被认为是非常纯粹和抽象的,但由于这些东西经常出现在数学中,结果证明它在应用学科中有很多用途,比如计算机科学和even quantum mechanics。 Monads 被证明在推理函数程序的语义方面非常有用,这些语义通常用指称表示(因此不强制任何类型的计算顺序,只是结果)。由此也意识到,monad 也是一个非常好的设计模式,用于编写函数式程序,它的实用性导致它在 Haskell 的设计中非常突出(即 do 表示法等) . Functors、Applicatives、Monoids,都在稍后作为对象出现,没有 monad 强大,但也更适用(不是双关语!)。

但是,范畴论以更一般的方式研究这类结构,事实证明这与数学(和物理等)的许多领域相关。作为非专家,目前尚不清楚其中有多少与复杂性理论有关,但让我们试一试。

复杂性理论关注计算的可行性。图灵和其他人已经表明,有些函数通常是不可计算的(例如停机问题、忙碌的海狸问题等),但原则上特定计算的容易问题是一般来说,一个更难的问题。您可能知道,算法(可以表示为图灵机)可以根据其渐近运行时间归类为复杂性类。已经确定了许多复杂性类(参见The Complexity Zoo),但对这些类的结构知之甚少。著名的P = NP 问题表明推理复杂性是多么困难。

根据对复杂性类的性质以及证明它们之间的关系的难度的直觉,我认为在复杂性类中建立类别会很棘手。显然图灵机的集合形成了一个范畴,但是 O(n) 中的机器集合呢?还是 P 中的机器集?对于复杂性专家来说,这可能是一个很好的研究方向,但也可能不是!就我个人而言,我不能说没有更多的工作。

现在让我们考虑一下您在 Monoid 中的复杂性示例和并行化策略。如果第二部分看起来与第一部分关系不大,那是因为我认为这些是非常不同的概念。首先是类别和复杂性的数学,其次是某些设计模式中并行化算法的细节。

如果我们知道某个类型是 Monoid,我们可以推断使用它的复杂性是什么?这是来自Data.Monoid的类定义

class Monoid a where
    mempty  :: a
    mappend :: a -> a -> a
    mconcat :: [a] -> a
    mconcat = foldr mappend mempty

当然,我们不能说复杂性,因为我们所知道的只是类型,正如您所猜测的那样。文档中有关于 Data.Monoid 中 mconcat 的默认实现的说明:

    -- ^ Fold a list using the monoid.
    -- For most types, the default definition for 'mconcat' will be
    -- used, but the function is included in the class definition so
    -- that an optimized version can be provided for specific types.

我想说的是,mconcat 不一定能从其他操作的复杂性中概括出来。在许多情况下,很难证明不存在某些更快的算法。 mconcat 在这种情况下可以手动实现。

您还提到了自动定义并行策略。 Haskell 当然允许定义各种不同的策略,其中许多有用的策略已经在Control.Parallel.Strategies 中。例如,parList 将策略并行应用于列表的每个元素:

parList :: Strategy a -> Strategy [a]
parList strat []     = ()
parList strat (x:xs) = strat x `par` (parList strat xs)

由此可以定义一个并行映射函数。

parMap :: Strategy b -> (a -> b) -> [a] -> [b]
parMap strat f xs = map f xs `using` parList strat

using :: a -> Strategy a -> a
using x s = s x `seq` x

请注意,这允许实现和并行化的分离。我不认为这种概念可以很容易地自动化,尤其是仅从描述单个算法复杂性的注释中。

总之,范畴论有可能成为未来复杂性研究的有用工具。但是我认为这不太可能导致并行化策略的自动生成。

【讨论】:

  • 感谢您的详尽回复。你给了我很多关于复杂性类别的思考。但是,我认为幺半群的情况比你看到的还要多。我想到了一个特定的机器学习应用程序,我认为可以证明在某些情况下更好的 mconcat 存在或不存在。 (我将把这个问题留一两天,如果没有其他人回应,我会接受你的。)
  • 感谢您的回复,很高兴我能帮上忙。与一般类别相反,更具体的案例很可能有可证明的解决方案/改进。如果您确实提出了一些建议,那么我将有兴趣了解它。如果有时间,我将在一周内继续考虑这些事情。
  • 这里谈到了将 CT、物理、逻辑和计算结合在一起:: math.ucr.edu/home/baez/rosetta.pdf
  • 虽然该论文乍一看并没有考虑复杂性理论或并行化,但它确实看起来非常有趣,我期待详细阅读它。
  • 是否图灵机形成一个类别?对我来说,不是。
【解决方案2】:

从表面上看,复杂性理论家已经做了范畴论式的事情,他们只是用自己的语言来表达。例如,复杂性类别 NP 是一个类别,其中对象是 NP 语言,态射是多项式时间约简。那么一个完全问题就是这个范畴的一个初始对象,所有的NP完全问题都是同构的。正如维克的回答那样,将图灵机视为对象并不是很合理。这主要是因为图灵机是多么的复杂(它们是许多不同模型的图灵机,对于相同的问题具有完全不同的时间和空间复杂性)。但是范畴论的论文思想,即范畴的主要兴趣在于态射,告诉我们态射应该是算法。

另一种观点是层次结构。复杂性类在包含下形成了一个poset类别,并且有一些很好的限制对象,如P、PSPACE、NC、AC等。

当然,目前尚不清楚范畴观点如何帮助我们证明复杂性理论中的定理,以及通过范畴理论解决问题是否比解决原始问题更容易。例如,我认为从复杂性类的复杂性类别到组类别的非平凡函子的存在是一个非常具有变革性的结果。它将有可能分离复杂性类别,这在该领域中当然是非常困难的。

【讨论】:

    【解决方案3】:

    快速谷歌搜索显示一篇论文:

    Safe Recursion Revisited: Categorical Semantics and Type Systems for Lower Complexity

    我还记得 Japaridze 关于多项式时间算术的作品,请参阅 http://arxiv.org/abs/0902.2969

    我认为您可以从那里开始,并参考参考资料。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-20
      • 2018-06-14
      • 1970-01-01
      • 2019-11-23
      相关资源
      最近更新 更多