【问题标题】:Proving if one conditional expression is equal to another conditional expression证明一个条件表达式是否等于另一个条件表达式
【发布时间】:2019-01-18 21:05:05
【问题描述】:

你如何证明以下两个表达式是相同的?

(A && C) || (B && C)
(A || B) && C

【问题讨论】:

  • 循环遍历ABC的所有值组合,并测试它们是否得到不同的结果。
  • 听起来像是功课。对于n 变量,蛮力方法将采用2^n 迭代。一个聪明的方法是对待 && 像 * 和 ||像 +,然后简化。如果通过交换、结合或分配属性可以使它们相等,则它们相等
  • @JamesMcDowell 我问的(不重要的)原因是因为我想让我的 if 条件更短且更易于阅读。 A、B 和 C 中的每一个都是非常非常长的变量的简化版本
  • @JamesMcDowell 是的,我假设 &&|| 的工作方式类似于 *+ 的分配属性。我只是想确认这确实是它的工作原理。我想这更像是一个数学问题,真的

标签: javascript logic conditional


【解决方案1】:

证明(A && C) || (B && C) ≡ (A || B) && C 是一个简单的证明。

让我们从等式的右边开始,然后到左边。

通过逻辑分配律,可以证明对于所有命题 P、Q 和 R,P && (Q || R) ≡ (P && Q) || (P && R)
通过逻辑交换律可以证明,对于所有命题 P 和 Q,P && Q ≡ Q && P

利用这个,我们可以证明上面的语句是等价的。
(A || B) && C ≡ C && (A || B)(通过交换律)
C && (A || B) ≡ (C && A) || (C && B)(通过分配律)
(C && A) || (C && B) ≡ (A && C) || (B && C)(通过交换律法律)
因此,我们有(A && C) || (B && C) ≡ (A || B) && C

【讨论】:

    【解决方案2】:

    (A && C) || (B && C) ≡ (A || B) && C 的证据很简单。

    让我们从所有可能排列的列表开始,然后测试它们。

    const permutations = [
      [false, false, false],
      [false, false, true],
      [false, true, false],
      [false, true, true],
      [true, false, false],
      [true, false, true],
      [true, true, false],
      [true, true, true],
    ];
    
    permutations.forEach(permutation => {
      const [A, B, C] = permutation;
      console.log(((A && C) || (B && C)) === ((A || B) && C));
    });

    【讨论】:

    • 这种情况下的编程方法很好,但是您的 permutations 数组中有很多重复项!我们有 3 个变量,所以排列的数量应该是 2^3 = 8 个排列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    相关资源
    最近更新 更多