平等我有一個數據類型證明流
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