Functor的copoints上的自然幺半群结构是否会诱导Comonad?

时间:2016-12-28 08:03:32

标签: haskell algebra category-theory comonad

情况如下(我改为更标准的Haskell表示法):

class Functor f => MonoidallyCopointed f where
    copointAppend ::  (∀r.f(r)->r) -> (∀r.f(r)->r) -> (∀r.f(r)->r)
    copointEmpty  ::  ∀r.f(r)->r

对于MonoidallyCopointed和所有

的所有实例F都是如此
x,y,z::∀r.F(r)->r

以下内容:

x `copointAppend` copointEmpty == copointEmpty `copointAppend` x == x
x `copointAppend` (y `copointAppend` z) == (x `copointAppend` y) `copointAppend` z

那么F是否具有从ComonadcopointAppend定义的自然copointEmpty实例?

N.B。反之亦然(copointEmpty = extractcopointAppend f g = f . g . duplicate。)

修改

正如Bartosz在评论中指出的那样,这主要是使用co-Kleisli附加的comonads的定义。所以问题实际上是关于这个概念的构造性。因此, 在实际应用方面,以下问题可能更有趣:

f的可能Comonad个实例集与f的可能MonoidallyCopointed个实例集之间是否存在建设性的同构?

这在实践中很有用,因为Comonad实例的直接定义可能涉及一些 技术上难以阅读的代码,无法通过类型检查器进行验证。例如,

data W a = W (Maybe a) (Int -> a) (Either (String -> a) (a,a,a,a))

有一个Comonad实例,但直接定义(证明它确实是Comonad!)可能不那么容易。 另一方面,提供MonoidallyCopointed实例可能会更容易一点(但我并不完美 确定这一点)。

0 个答案:

没有答案