证明构成(( - >)r)类型

时间:2015-12-30 23:18:29

标签: haskell

作文适用法律如下:

pure (.) <*> u <*> v <*> w = u <*> (v <*> w)

我试图证明((->) r)类型的成分法:

RHS:

u <*> (v <*> w)
u <*> ( \y -> v y (w y) )
\x -> u x ( (\y -> v y (w y)) x )
\x -> u x ( v x (w x)) -- (A)

LHS:

pure (.) <*> u <*> v <*> w
const (.) <*> u <*> v <*> w
(\f -> const (.) f (u f)) <*> v <*> w
(\f -> (.) (u f)) <*> v <*> w
(\g -> (\f -> (.) (u f)) g (v g)) <*> w
\x -> (\g -> (\f -> (.) (u f)) g (v g)) x (w x)
-- Expanding labmda by applying to x
\x -> ((\f -> (.) (u f)) x (v x)) (w x)
\x -> (( (.) (u x)) (v x)) (w x)

\x -> ((u x) . (v x)) (w x) -- (B)

我不认为(A)&amp; (B)是等价的,所以我在哪里弄错了?我将不胜感激任何帮助或建议。

1 个答案:

答案 0 :(得分:3)

你几乎就在那里。您只需要使用(.)的定义,即

(f . g) x = f (g x)

在你的LHS计算的最后一行取代那个定义之后,你应该有两个明显相等的lambda。