所以我正在做一个如下的问题
使用Prop的抽象语法构建电路,以测试两个输入是否相等。证明你的电路是正确的。
这是有问题的Prop
。
data Prop = FALSE | TRUE | IN String | NOT Prop | OR Prop Prop | AND Prop Prop
本能地我很想写AND(IN "A")(IN "B")
并给出一个真值表来证明它,但这似乎很简单。我错过了什么吗?
答案 0 :(得分:3)
两种情况下两个输入相等:两者都是真或两者都是假的。似乎给定的语言允许对其进行编码:您可以通过引用它来检查输入是否为真,即IN "A"
,并且您可以通过否定输入来检查输入是否为假,即NOT (IN "A")
。然后将这些检查与AND
和OR
结合使用,您就完成了:
OR
(AND -- Both "A" and "B" are true
(IN "A") -- "A" is true
(IN "B") -- "B" is true
)
(AND -- Both "A" and "B" are false
(NOT (IN "A")) -- "A" is false
(NOT (IN "B")) -- "B" is false
)
--------------------------------------------------------------------------
| A | B | NOT A | NOT B | AND A B | AND (NOT A) (NOT B) | Result |
--------------------------------------------------------------------------
| false | false | true | true | false | true | true |
| false | true | true | false | false | false | false |
| true | false | false | true | false | false | false |
| true | true | false | false | true | false | true |
--------------------------------------------------------------------------