2

Haskell で関連 xor チャートを作成しようとしていますが、これは私の理解では、すべてのインスタンスで実現するはずです。ただし、関数を呼び出すと、[True、True、True、False、True、False、True、True] が得られます。誰かが私が犯した間違いを見ることができますか?

bools = [True, False]

xor_assoc = [   ((r || (p || q)) && not (r || (p && q)))
             == ((p || (r || q)) && not (p || (r && q)))
            | r <- bools,
              p <- bools,
              q <- bools]
4

3 に答える 3

3

あなたの原則は間違っています: (r || (p && q)) /= (p || (r && q)). 反例は(p, q, r) = (T, F, F)私たちが持っているところです

(F || (T && F)) /= (T || (F && F))
(F || F       ) /= (T || F       )
F               /= T

特に、 と の両方(||)(&&)個別に関連付けられていますが、互いに関連付けられていません。

于 2013-09-14T06:19:29.937 に答える
0

あなたが何をしているのか正確にはわかりません。しかし、リスト内包表記を行う方法では、考えられるすべての2^3ケースが生成されます。そして、述語はFalse そのうちの 2 つで返されます。

(p,q,r) = (False,False,True)then に(r || (p && q))なるとTrue、したがって lhs はになりますがFalse(p || (r && q))isFalseになり、したがって rhs は になりTrueます。

(True,False,False)lhs がTrueで rhs がの場合も同様ですFalse

于 2013-09-14T06:17:19.570 に答える