平等我有一个数据类型证明流
data N a = N a [N a]
玫瑰树
和应用型实例
instance Applicative N where
pure a = N a (repeat (pure a))
(N f xs) <*> (N a ys) = N (f a) (zipWith (<*>) xs ys)
,并需要证明应用型法律吧。然而,纯创建无限深,无限分支树。所以,举例来说,在证明它的同态法
pure f <*> pure a = pure (f a)
我认为证明由近似相等
zipWith (<*>) (repeat (pure f)) (repeat (pure a)) = repeat (pure (f a))
(或服用)引理会工作。但是,我的尝试导致了归纳步骤中的“恶性循环”。特别地,减少
approx (n + 1) (zipWith (<*>) (repeat (pure f)) (repeat (pure a))
给出
(pure f <*> pure a) : approx n (repeat (pure (f a)))
其中约是近似函数。 如何证明没有明确的合谋证明的平等?
为什么你要证明这一点,而不使用coinduction?正如归纳法是有限列表/树的数据的自然证明方法一样,coinduction是codata的自然证明方法,如流或“无限深,无限分支的树”。 – 2011-03-03 11:56:16
特别是,因为证明在“程序语法”级别运行。双相似性的证明不是。 – danportin 2011-03-03 12:03:10
这看起来很适合cstheory stackexchange站点,尤其是如果你用稍微更一般/正式的术语来说明的话。 – sclv 2011-03-03 18:15:15