首页 文章

是||而且!运营商是否有足够的逻辑表达式?

提问于
浏览
292

例如,逻辑表达式 ( a && b )ab 都具有布尔值)可以写成 !(!a || !b) . 这不意味着 && 是"unneccesary"吗?这是否意味着只能使用 ||! 来创建所有逻辑表达式?

6 回答

  • 125

    是 .

    All logic gates can be made from NOR gates.

    由于NOR门可以由NOT和OR构成,因此结果如下 .

  • 10

    NANDNOR是通用的,它们可用于在任何地方构建您想要的任何逻辑操作;其他运算符以编程语言提供,以便于编写和生成可读代码 .

    此外,所有需要在电路中硬连线的逻辑操作也是使用NAND或NOR专用IC开发的 .

  • 80

    是的,正如其他答案所指出的那样,包含 ||! 的运算符集是functionally complete . 这是一个建设性的证明,展示如何使用它们来表达布尔变量 AB 之间的所有16个可能的逻辑连接词:

    请注意,NAND和NOR本身在功能上都是完整的(可以使用上面相同的方法证明),因此如果您想验证一组运算符是否功能完备,那么足以表明您可以表达NAND或NOR用它 .

    这是显示上面列出的每个连接词的Venn diagrams的图表:

    [source]

  • 64

    你所描述的是functional completeness .

    这描述了一组足以满足"express all possible truth tables"的逻辑运算符 . 您的Java运算符集{ ||! }就足够了;它对应于集合{∨,¬},它列在"Minimal functionally complete operator sets"部分下 .

    所有真值表的集合表示所有可能的4个布尔值集合,这些值可以是2个布尔值之间的操作的结果 . 因为布尔值有2个可能的值,所以有24或16个可能的真值表 .

    A B | 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
    ----+------------------------------------------------
    T T | T  T  T  T  T  T  T  T  F  F  F  F  F  F  F  F
    T F | T  T  T  T  F  F  F  F  T  T  T  T  F  F  F  F
    F T | T  T  F  F  T  T  F  F  T  T  F  F  T  T  F  F 
    F F | T  F  T  F  T  F  T  F  T  F  T  F  T  F  T  F
    

    这是一个真值表数字表(0-15),产生它的 ||! 组合以及描述 .

    Table  |  Operation(s)                    | Description
    -------+----------------------------------+-------------
      0    | A || !A                          | TRUE
      1    | A || B                           | OR
      2    | A || !B                          | B IMPLIES A
      3    | A                                | A
      4    | !A || B                          | A IMPLIES B
      5    | B                                | B
      6    | !(!A || !B) || !(A || B)         | XNOR (equals)
      7    | !(!A || !B)                      | AND
      8    | !A || !B                         | NAND
      9    | !(A || !B) || !(!A || B)         | XOR
     10    | !B                               | NOT B
     11    | !(!A || B)                       | NOT A IMPLIES B
     12    | !A                               | NOT A
     13    | !(A || !B)                       | NOT B IMPLIES A
     14    | !(A || B)                        | NOR
     15    | !(A || !A)                       | FALSE
    

    还有很多其他功能完备的集合,包括一个元素集,它们在Java中没有相应的单个运算符 .

  • 11

    如果可以,请花点时间阅读DeMorgan's Laws .

    您将在阅读中找到答案,并参考逻辑证明 .

    但基本上,答案是肯定的 .

    EDIT :为了明确,我的观点是,可以从AND表达式逻辑推断OR表达式,反之亦然 . 对于逻辑等价和推理,还有更多的定律,但我认为这是最合适的 .


    EDIT 2 :这是一个通过真值表的证明,显示了下面表达式的逻辑等价 .

    德摩根定律: !(!A || !B) -> A && B

    _____________________________________________________
    | A | B | !A  | !B  | !A || !B | !(!A || !B) | A && B | 
    -------------------------------------------------------
    | 0 | 0 |  1  |  1  |    1     |      0      |   0    | 
    -------------------------------------------------------
    | 0 | 1 |  1  |  0  |    1     |      0      |   0    |
    -------------------------------------------------------
    | 1 | 0 |  0  |  1  |    1     |      0      |   0    |
    -------------------------------------------------------
    | 1 | 1 |  0  |  0  |    0     |      1      |   1    |
    _______________________________________________________
    
  • 422

    是的,根据布尔代数,任何布尔函数都可以表示为minterms的总和或maxterms的乘积,称为规范的正规形式 . 没有理由将这种逻辑应用于计算机科学中使用的相同运算符 .

    https://en.wikipedia.org/wiki/Canonical_normal_form

相关问题