构建一个电路来测试两个输入是否相等

Build a circuit to test if two inputs are equal

所以我在做一道题,内容如下

Build a circuit using the abstract syntax for Prop to test if two inputs are equal. Justify that your circuit is correct.

这是有问题的Prop

 data Prop = FALSE | TRUE | IN String | NOT Prop | OR Prop Prop | AND Prop Prop

本能地,我很想写 AND(IN "A")(IN "B") 并给出一个真理 table 来证明它,但这似乎很简单。我错过了什么吗?

编辑:糟糕,我最终制作了一个解决问题的异或门。我把 AND 误认为是 XNOR,这是造成混乱的根本原因。答案区的解决方案比我的更优雅,请参考。

两个输入在两种情况下相等:要么都为真,要么都为假。似乎给定的语言允许对其进行编码:您可以通过引用它来检查输入是否为真,即 IN "A",并且您可以通过取反来检查输入是否为假,即 NOT (IN "A") .然后将这些检查与 ANDs 和 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   |
--------------------------------------------------------------------------