我有一个数据类型
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)))
其中approx是近似函数。如果没有明确的共归纳证明,我如何证明相等?