Правильно ли это логическое отношение? - PullRequest
0 голосов
/ 08 апреля 2020

Это логическое отношение допустимо?

(X or Y) and (XX and YY) = (X and XX and YY) or (Y and XX and YY)

Интуитивно понятно, что эквивалентность кажется правильной, но она не работает в моем коде. Я не знаю, является ли уравнение неверным или мой код содержит ошибки.

1 Ответ

2 голосов
/ 08 апреля 2020

Да, два уравнения эквивалентны. При распаковке скобок с ИЛИ вам действительно нужно И X с (XX and YY), а также Y с (XX and YY) и ИЛИ два. Таким образом, результат будет (X and XX and YY) or (Y and XX and YY)

Если этого недостаточно, то мы можем сгенерировать таблицу истинности для каждого. Интерактив с использованием функциональности сниппета:

const table = document.querySelector("table");

function one(X, Y, XX, YY) {
  return (X || Y) && (XX && YY);
}

function two(X, Y, XX, YY) {
  return (X && XX && YY) || (Y && XX && YY);
}

function test(X, Y, XX, YY) {
  const addContent = addTo(table);
  addContent(X);
  addContent(Y);
  addContent(XX);
  addContent(YY);
  
  addContent(one(X, Y, XX, YY));
  addContent(two(X, Y, XX, YY));
}

const addTo = table => {
  const row = table.insertRow();
  return content =>  row.insertCell().textContent = content;
}

//generate all permutations of 4 booleans and test them with each boolean equation 
for(let i = 0; i <= 15; i++) {
  const X = Boolean(i & 8);
  const Y = Boolean(i & 4);
  const XX = Boolean(i & 2);
  const YY = Boolean(i & 1);

  test(X, Y, XX, YY);
}
body {
  background-color: white;
}

table {
  border-collapse: collapse;
}

table, th, td {
  border: 1px solid black;
}

tr > td:nth-child(5) {
  text-align: right;
}

td {
  padding: 0 5px;
}
<table>
    <tr>
      <th>X</th>
      <th>Y</th>
      <th>XX</th>
      <th>YY</th>
      <th>(X or Y) <br/>and <br/>(XX and YY)</th>
      <th>(X and XX and YY) <br/>or <br/>(Y and XX and YY)</th>
    </tr>
</table>

Итак, результаты одинаковы для каждого.

...