簡體   English   中英

可以使用SKI組合器表示XOR嗎?

[英]Can XOR be expressed using SKI combinators?

我對SKI組合器有疑問。

只能使用SK組合器來表示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並將其應用於NOTID這兩個術語。 要到達那里,首先要注意的是

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM