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

时间:2018-01-16 04:09:47

标签: haskell circuit

所以我正在做一个如下的问题

  

使用Prop的抽象语法构建电路,以测试两个输入是否相等。证明你的电路是正确的。

这是有问题的Prop

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

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

编辑:我的不好,我最终制作了一个解决问题的XNOR门。我误认为是XNOR,这是造成混乱的根本原因。答案领域的解决方案比我的更优雅所以请参考。

1 个答案:

答案 0 :(得分:3)

两种情况下两个输入相等:两者都是真或两者都是假的。似乎给定的语言允许对其进行编码:您可以通过引用它来检查输入是否为真,即IN "A",并且您可以通过否定输入来检查输入是否为假,即NOT (IN "A") 。然后将这些检查与ANDOR结合使用,您就完成了:

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   |
--------------------------------------------------------------------------