[英]Can XOR be expressed using SKI combinators?
我對SKI組合器有疑問。
只能使用S
和K
組合器來表示XOR(異或)嗎?
我有
True = Cancel
False = (Swap Cancel)
哪里
Cancel x y = K x y = x
Swap: ff x y = S ff x y = ff y x
布爾
您的問題在細節上還不清楚,但是您的意思似乎是您具有以下布爾值表示形式:
T := K
F := S K
之所以有效,是因為它意味着以下減少適用:
T t e => t
F t e => e
換句話說, bte
可以解釋為IF b THEN t ELSE e
。
根據IF _ THEN _ ELSE _
XOR
因此,有了這個框架,我們如何實現XOR? 我們可以將XOR表示為IF
表達式:
xor x y := IF x THEN (not y) ELSE y = (IF x THEN not ELSE id) y
可以減少到
XOR x := IF x THEN not ELSE id = x not id
一些功能組合器
我們將id = SKK
作為標准,而not
表示為flip
,因為flip bte = bet = IF b THEN e ELSE t = IF (not b) THEN t ELSE e
。 flip
它本身是相當參與但可行的
flip := S (S (K (S (KS) K)) S) (KK)
現在,我們只需要找出一種編寫函數的方法,該函數接受x
並將其應用於NOT
和ID
這兩個術語。 要到達那里,首先要注意的是
app := id
然后
app f x = (id f) x = f x
所以,
(flip app) x f = f x
我們快到了,因為到目前為止的所有事情都表明
((flip app) id) ((flip app) not x) = ((flip app) not x) id = (x not) id = x not id
最后一步是使最后一行在x
無點。 我們可以使用函數組合運算符來做到這一點:
((flip app) id) ((flip app) not x) = compose ((flip app) id) ((flip app) not) x
compose
的要求是
compose f g x = f (g x)
我們可以通過設置來獲得
compose f g := S (K f) g
放在一起
總而言之,我們得到了
xor := compose ((flip app) id) ((flip app) not)
或完全擴展:
xor = S (K ((flip app) id)) ((flip app) not)
= S (K ((flip app) (SKK))) ((flip app) flip)
= S (K ((flip SKK) (SKK))) ((flip SKK) flip)
= S (K (((S (S (K (S (KS) K)) S) (KK)) SKK) (SKK))) (((S (S (K (S (KS) K)) S) (KK)) SKK) (S (S (K (S (KS) K)) S) (KK)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.