Алгебра логики
Мы выяснили, как информация представляется в памяти вычислительных устройств и установили алгоритмы проведения операций над этими представлениями.
Теперь, давайте попробуем разобраться, как именно реализуются операции над двоичными представлениями. Для этого, для начала, нам придется разобраться с алгеброй логики.
Алгебра логики является частью дискретной математики – раздела математики, изучающего свойства структур конечного характера.
Сама алгебра логики изучает свойства функций, у которых значения как аргументов, так и самих функций ограничены двумя значениями, например, \(\{0,1\}\).
Отцом алгебры логики считается английский математик Джордж Буль (1815-1864), поэтому алгебру логики иногда называют булевой алгеброй.
Долгое время алгебра логики была известна лишь узкому кругу специалистов, и только в 1938 году американский математик Клод Шеннон (1916-2001), стоявший у истоков современной информатики, показал, что алгебра логики применима для описания самых разных процессов, в том числе релейных и транзисторных схем.
Исследования в области алгебры логики связаны с формальной логикой, а точнее, с понятием высказывания. Высказывание – это некое лексическое образование, которое устанавливает свойства и взаимосвязи между объектами. Высказывания могут быть истинными, если они адекватно описывают объекты, или ложными в противном случае.
Так, примерами высказываний могут служить такие фразы, как “сегодня идет дождь”, или “завтра я не пойду в институт”.
Определение истинности высказывания не всегда тривиально. Так, например:
Великая теорема Ферма
Для любого натурального числа \(n>2\) уравнение \[ a^n + b^n = c^n\] Не имеет решений в целых ненулевых числах \(a,\,b,\,c\)
Как известно, сформулированная Пьером Ферма в 1637 году, была окончательно доказана только в 1994.
Введем не совсем формальное, но достаточное для наших целей определение
- Высказывание
- это языковое образование, в отношении которого имеет смысл говорить о его истинности или ложности.
Это определение было предложено Аристотелем.
Проблема языковых образований в рамках алгебры логики в том, что они могут иметь весьма своеобразную структуру. Например, фраза “это высказывание является ложным” не может считаться высказыванием, поскольку бессмысленно говорить о его истинности или ложности. Причиной парадокса является структура фразы: она ссылается сама на себя. Подобные парадоксы могут быть устранены введением следующего определения:
- Элементарное высказывание
- это такое высказывание, никакая часть которого не является высказыванием.
Следует заметить, что высказыванием в строгом смысле является только утверждение о конкретных объектах. Если речь идет о неких переменных, например, “x – рациональное число”, то мы говорим о неких функциях, имеющих значение “истина” или “ложь”. Такие функции называются предикатами.
Так же следует заметить, что алгебра логики отвлекается от смыслового содержания высказываний, и занимается скорее связями между высказываниями. Если мы договоримся считать за аксиому, что “солнце светит ночью”, то есть, договоримся что это высказывание истинно, то в рамках нашей аксиоматики сможем делать какие-то обоснованные выводы. Эти выводы, конечно, не будут иметь много общего с действительностью.
Примерами таких отвлеченных, на первый взгляд, систем, может служить, например, геометрия Лобачевского, которая имеет не слишком много общего с нашим псевдоевклидовым пространством. 1
Логические операции
Различные языковые связки, такие, как “не”, “если …, то …”, “или”, “и”, и т.п. позволяют строить из элементарных высказываний более сложные.
В алгебре логики существуют соответствующие подобным связкам операции.
Введем некоторые из них.
- Конъюнкция, или логическое умножение
- логическая операция, ставящая в соответствие двум элементарным высказываниям новое высказывание, являющееся истинным тогда и только тогда, когда оба исходных высказывания истинны.
Конъюнкция обозначается различными способами, в частности, амперсандом \(a \,\&\,b\), точкой \(a \cdot b\), или “крышкой” \(a \wedge b\), и соответствует языковой связке “и”. Мы будем в основном использовать амперсанд.
Поскольку оба исходных высказывания имеют по два возможных значения, и конъюнкция имеет два возможных значения, мы можем записать это определение в виде таблицы истинности:
\(p\) | \(q\) | \(p\,\&\,q\) |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
- Дизъюнкция, или логическое сложение
- логическая операция, ставящая в соответствие двум элементарным высказываниям новое высказывание, являющееся истинным тогда и только тогда, когда хотя бы одно из исходных высказываний истинно.
Дизъюнкция соответствует союзу “или”, и обозначается плюсом \(a+b\), или “галочкой” \(a\vee b\). Мы будем использовать в основном второй вариант.
Таблица истинности дизъюнкции, по определению:
\(p\) | \(q\) | \(p\vee q\) |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
- Строгая дизъюнкция, или сложение по модулю 2
- логическая операция, ставящая в соответствие двум элементарным высказываниям новое высказывание, являющееся истинным тогда и только тогда, когда только одно из исходных высказываний истинно.
Строгая дизъюнкция соответствует связке “либо …, либо …”, и обозначается плюсом в кружочке \(a\oplus b\), или треугольником \(a\vartriangle b\). Будем в основном пользоваться первым обозначением.
Таблица истинности, по определению:
\(p\) | \(q\) | \(p\oplus q\) |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
- Импликация
- логическая операция, ставящая в соответствие двум элементарным высказываниям новое высказывание, являющееся ложным тогда и только тогда, когда первое из исходных высказываний (условие) истинно, а второе (следствие) – ложно.
Импликация соответствует связке “если …, то …”, и обозначается стрелкой \(a \rightarrow b\), или \(a \Rightarrow b\)
Таблица истинности, по определению:
\(p\) | \(q\) | \(p\rightarrow q\) |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 0 |
1 | 1 | 1 |
Импликация, на первый взгляд, имеет не очевидное определение: как вдруг из ложных условий получается истинное следствие. Однако, в математике это никакая не новость. Например, возьмем очевидно ложное утверждение “один равен двум”:
\[1 = 2\] \[2 = 1\]
Складывая эти равенства, получим очевидно истинный результат:
\[3=3.\]
С другой стороны, из заведомо истинных посылок формально нельзя вывести ложный результат (конечно, человеческий фактор никто не отменял, но человеческий фактор выходит за пределы рассмотрения формальной логики).
- Эквивалентность
- логическая операция, ставящая в соответствие двум элементарным высказываниям новое высказывание, являющееся истинным тогда и только тогда, когда оба исходных высказывания одновременно истинны или одновременно ложны.
Эквивалентность соответствует связке “тогда и только тогда, когда”, и обозначается \(a \Leftrightarrow b\), или \(a \equiv b\), или \(a \sim b\), или \(a \leftrightarrow b\). Будем в основном пользоваться первыми двумя обозначениями.
Таблица истинности, по определению:
\(p\) | \(q\) | \(p\equiv q\) |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
- Инверсия, или отрицание
- логическая операция, ставящая в соответствие элементарному высказыванию новое высказывание, являющееся истинным тогда и только тогда, исходное ложно.
Инверсия соответствует связке “не”, и обозначается \(\neg a\), или \(\;\overline{a}\;\), или \(!a\). Будем в основном пользоваться первыми двумя обозначениями.
Таблица истинности, по определению:
\(p\) | \(\;\overline{p}\;\) |
---|---|
0 | 1 |
1 | 0 |
В заключение, таблица истинности основных логических операций:
\(p\) | \(q\) | \(\;\overline{p}\;\) | \(p\,\&\,q\) | \(p\vee q\) | \(p\oplus q\) | \(p\rightarrow q\) | \(p\equiv q\) |
---|---|---|---|---|---|---|---|
0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 |
0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 |
Законы алгебры логики
Введем некоторые определения, аналогичные алгебре действительных чисел, для алгебры логики.
- Логическая переменная
- Переменная, значением которой может быть любое высказывание. Обозначать будем маленькими латинскими буквами.
- Логическая формула
- любая переменная, а так же любая из констант “0” (“ложь”) и “1” (“истина”)
- Любая комбинация логических формул, составленная с помощью логических операций.
- Эквивалентные формулы
- такие формулы, которые зависят от одного и того же набора переменных, и при одинаковых значениях этих переменных, формулы так же имеют одинаковые значения. Обозначать будем знаком равенства.
Существуют следующие “законы” алгебры логики, определяющие некий набор эквивалентных формул:
- Законы коммутативности
- \[x \,\&\,y = y \,\&\,x\] \[x \vee y = y\vee x\]
- Законы ассоциативности
- \[ (x \,\&\,y) \,\&\,z = x \,\&\,(y \,\&\,z)\] \[ (x \vee y) \vee z = x \vee(y \vee z)\]
- Законы поглощения
- \[x\vee 0 = x\] \[x\,\&\,1 = x\]
- Законы дистрибутивности
- \[ x\,\&\,(y\vee z) = (x\,\&\,y) \vee(x\,\&\,z)\] \[ x\vee(y\,\&\,z) = (x \vee y) \,\&\,(x\vee z)\]
- Закон противоречия
- \[ x \,\&\,\;\overline{x}\; = 0\]
- Закон исключения третьего
- \[ x \vee\;\overline{x}\; = 1\]
- Закон равносильности
- \[ x \,\&\,x = x\] \[ x \vee x = x \]
- Закон двойного отрицания
- \[\;\overline{\;\overline{x}\;}\; = x \]
- Законы де Моргана
- \[ \;\overline{x\,\&\,y}\; = \;\overline{x}\; \vee\;\overline{y}\; \] \[ \;\overline{x\vee y}\; = \;\overline{x}\; \,\&\,\;\overline{y}\; \]
- Законы поглощения
- \[ x\vee(x\,\&\,y) = x\] \[ x\,\&\,(x\vee y) = x\]
Все перечисленные законы элементарно доказываются составлением таблиц истинности.
Например, первый закон де Моргана:
\(x\) | \(y\) | \(x\,\&\,y\) | \(\;\overline{x\,\&\,y}\;\) | \(\;\overline{x}\;\) | \(\;\overline{y}\;\) | \(\;\overline{x}\; \vee\;\overline{y}\;\) |
---|---|---|---|---|---|---|
0 | 0 | 0 | 1 | 1 | 1 | 1 |
0 | 1 | 0 | 1 | 1 | 0 | 1 |
1 | 0 | 0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 0 | 0 | 0 | 0 |
3 и 6 столбец одинаковы, следовательно, соответствующие формулы эквивалентны.
Введем еще одно определение
- Тавтология
- логическая формула, которая всегда истинна.
Например, тавтологией является формула, выражающая закон исключения третьего.
Формальное решение логических задач
Оказывается, алгебра логики хорошо подходит для решения логических задач. Решение логических задач, конечно, умеренно бессмысленное времяпрепровождение (исключая случаи, когда на их примере рассматриваются более сложные вопросы), однако это хороший способ поработать с алгеброй логики и осмыслить основные концепции.
Итак, формальный способ решения логических задач:
- Из условий задачи выделяются простые высказывания и обозначаются как логические переменные.
- Условия задачи записываются в виде логических формул
- Составляется единое логическое выражение, соответствующее условию задачи. По условию задачи оно является истинным.
- Полученное выражение упрощается, либо составляется таблица истинности для него (либо и то, и другое)
- Выбирается решение задачи (случаи, когда условие истинно)
- Решение формулируется в исходных терминах задачи.
Пример: (источник)
На весеннем фестивале, четыре садовника показывали выращенные ими розы.
Всего розы были четырех цветов и у каждого садовника было по две розы.
Известно, что
- У первого была желтая роза
- У второго не было красной розы
- У третьего была синяя роза, но не было зеленой
- У одного из садовников с зеленой розой не было красной
- Ни у одного из садовников с желтой розой не было зеленой
- Ни у кого нет роз двух одинаковых цветов
Введем переменные, в которых название переменной соответствует цвету, а индекс – садовнику (номеру). Это автоматически учитывает условие “Ни у кого нет роз двух одинаковых цветов”. Тогда условия задачи запишутся в виде:
- \(y_1\)
- \(\;\overline{r_2}\;\)
- \(b_3 \,\&\,\;\overline{g_3}\;\)
- \((g_1\rightarrow\;\overline{r_1}\;) \oplus(g_2\rightarrow\;\overline{r_2}\;)\oplus(g_3\rightarrow\;\overline{r_3}\;)\oplus(g_4\rightarrow\;\overline{r_4}\;)\)
- \((y_1\rightarrow\;\overline{g_1}\;) \,\&\,(y_2\rightarrow\;\overline{g_2}\;)\,\&\,(y_3\rightarrow\;\overline{g_3}\;)\,\&\,(y_4\rightarrow\;\overline{g_4}\;)\)
Дополнительно, у каждого садовника по условиям задачи по две розы: Поэтому, если у садовника есть розы двух цветов, то роз двух других цветов у него нет. Учтем подразумеваемые импликации постфактум.
Далее для простоты записи, амперсанды опускаются (если между переменными нет ничего – значит там амперсанд). В случае отсутствия скобок, сначала применяется конъюнкция, потом все остальное.
Рассматривая последнее условие:
\((y_1\rightarrow\;\overline{g_1}\;) (y_2\rightarrow\;\overline{g_2}\;)(y_3\rightarrow\;\overline{g_3}\;)(y_4\rightarrow\;\overline{g_4}\;)\)
Первая импликация истинна, только если \(\;\overline{g_1}\;\) истинно. Предпоследняя импликация истинна всегда, \(\;\overline{g_3}\;\). Можем переписать в виде:
\(y_1 \;\overline{g_1}\; (y_2\rightarrow\;\overline{g_2}\;) (y_4\rightarrow\;\overline{g_4}\;)\)
Рассмотрим предпоследнее условие
\[ (g_1 \rightarrow\;\overline{r_1}\;) \oplus(g_2 \rightarrow\;\overline{r_2}\;) \oplus(g_3 \rightarrow\;\overline{r_3}\;) \oplus(g_4 \rightarrow\;\overline{r_4}\;) \]
Первая импликация всегда истинна, поскольку \(\;\overline{g_1}\;\), вторая всегда истинна, поскольку \(\;\overline{r_2}\;\), третья всегда истинна, поскольку \(\;\overline{g_3}\;\). Получаем:
\[ 1 \oplus 1 \oplus 1 \oplus(g_4 \rightarrow\;\overline{r_4}\;) \]
\[ 1 \oplus(g_4 \rightarrow\;\overline{r_4}\;) \]
Легко показать, что \(1 \oplus x = \;\overline{x}\;\). Тогда условие принимает вид
\[ \;\overline{g_4 \rightarrow\;\overline{r_4}\;}\; \]
Импликацию можно представить в виде \(x \rightarrow y = \;\overline{x}\; \vee y\)
Применяя закон де Моргана,
\[ r_4 g_4 \]
Записывая все условия вместе:
\[ y_1 \;\overline{g_1}\; \;\overline{r_2}\; (\;\overline{y_2}\; \vee\;\overline{g_2}\;) (\;\overline{y_4}\; \vee\;\overline{g_4}\;) b_3 \;\overline{g_3}\; g_4 r_4 \]
Учитывая \(g_4 (\;\overline{y_4}\; \vee\;\overline{g_4}\;) = g_4 \;\overline{y_4}\;\),
\[ y_1 \;\overline{g_1}\; \;\overline{r_2}\; (\;\overline{y_2}\; \vee\;\overline{g_2}\;) b_3 \;\overline{g_3}\; \;\overline{y_4}\; g_4 r_4 \]
Известно, что зеленые розы должны быть у двух садовников:
\[ \;\overline{g_1}\; \;\overline{g_2}\; g_3 g_4 \vee\;\overline{g_1}\; g_2 \;\overline{g_3}\; g_4 \vee\;\overline{g_1}\; g_2 g_3 \;\overline{g_4}\; \vee g_1 \;\overline{g_2}\; \;\overline{g_3}\; g_4 \vee g_1 \;\overline{g_2}\; g_3 \;\overline{g_4}\; \vee g_1 g_2 \;\overline{g_3}\; \;\overline{g_4}\; \]
А так как \(\;\overline{g_3}\;\) и \(\;\overline{g_1}\;\)
\[ \;\overline{g_1}\; g_2 \;\overline{g_3}\; g_4 \]
Получаем \(g_2\), тогда \(g_2 (\;\overline{y_2}\; \vee\;\overline{g_2}\;) = g_2 \;\overline{y_2}\;\)
Аналогично для желтых:
\[ y_1 \;\overline{y_2}\; y_3 \;\overline{y_4}\; \]
Получаем \(y_3\). Поскольку \(y_3 b_3\), можно утверждать \(\;\overline{r_3}\; \;\overline{g_3}\;\)
Для красных тогда:
\[ r_1 \;\overline{r_2}\; \;\overline{r_3}\; r_4 \]
Получаем \(r_1\). Поскольку \(r_1 y_1\), можем утверждать \(\;\overline{b_1}\; \;\overline{g_1}\;\)
Для синих:
\[ \;\overline{b_1}\; b_2 b_3 \;\overline{b_4}\; \]
Получаем \(b_2\).
Итого
\[ y_1 r_1 g_2 b_2 b_3 y_3 g_4 r_4 \]
Вообще сейчас считается, что у пространства, в котором мы находимся, времеподобная метрика Миньковского.↩︎