补充其他的答案,让我尝试证明,只有一个(总)函数
foo :: (b -> c) -> (a -> b) -> (a -> c)
或者,换句话说,即foo = (.)
。通过外延性,我们要证明
foo f g n = f (g n)
其中f,g,n
是由foo
签名授权的类型abritrary值。
f :: b -> c
g :: a -> b
n :: a
我们从相关的自由定理,它可以是automatically generated on the web开始:
forall t1,t2 in TYPES, R in REL(t1,t2).
forall t3,t4 in TYPES, S in REL(t3,t4).
forall t5,t6 in TYPES, R1 in REL(t5,t6).
forall p :: t3 -> t5.
forall q :: t4 -> t6.
(forall (x, y) in S. (p x, q y) in R1)
==> (forall r :: t1 -> t3.
forall s :: t2 -> t4.
(forall (z, v) in R. (r z, s v) in S)
==> (forall (w, u) in R.
(foo p r w, foo q s u) in R1))
让我们通过专门它简化了这个巨大的公式。我们挑选:
t1 = a t2 =()
t3 = b t4 =()
t5 = c t6 =()
,我们选择关系如下:
R = { (n ,()) } which is indeed in REL(t1,t2) = REL(a,())
S = { (g n ,()) } which is indeed in REL(t3,t4) = REL(b,())
R1= { (f (g n) ,()) } which is indeed in REL(t5,t6) = REL(c,())
自由定理变成:
forall p :: b -> c.
forall q ::() ->().
(forall (x, y) in S. (p x, q y) in R1)
==> (forall r :: a -> b.
forall s ::() ->().
(forall (z, v) in R. (r z, s v) in S)
==> (forall (w, u) in R.
(foo p r w, foo q s u) in R1))
采摘p = f
和q = id
我们得到,由S
和R1
定义:
(forall x = g n, y =() . f x = f (g n) /\ y = id y)
==> (forall r :: a -> b.
forall s ::() ->().
(forall (z, v) in R. (r z, s v) in S)
==> (forall (w, u) in R.
(foo f r w, foo id s u) in R1))
顶层含义的前提是真实的,所以我们解决它。 我们现在选择r = g
和s = id
。我们得到的,由r1
和R
定义:
(forall z = n, v =() . g z = g n , id v =())
==> (forall (w, u) in R.
(foo f g w, foo id id u) in R1)
我们能排出的真正前提。此外,我们可以选择w = n
和u =()
。我们最终获得:
foo f g n = f (g n) /\ foo id id u =()
Q.E.D.
什么意思是无意义的?它是两个功能的组合。顺便说一句,链接文章明确指出。 – kraskevich
@kraskevich ive更新了问题。 –