補充其他的答案,讓我嘗試證明,只有一個(總)函數
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更新了問題。 –