ИнтВиз

Дискретная математика · модуль 8 из 14

Булева алгебра: от условия в коде к логической схеме

Выражение превращается в схему из элементов И, ИЛИ, НЕ. Переключайте входы A, B, C: провода со значением 1 подсвечиваются.

  • сигнал 1
  • сигнал 0

& — И, 1 — ИЛИ, =1 — исключающее ИЛИ, кружок на выходе — НЕ (ГОСТ 2.743).

Таблица истинности: щёлкните строку, чтобы подать её значения на входы
ABCF

Теория

Булева функция $F(A, B, C)$ принимает значения 0 и 1 и строится из операций конъюнкции ($\land$, И), дизъюнкции ($\lor$, ИЛИ), отрицания ($\lnot$, НЕ) и исключающего ИЛИ ($\oplus$). Функция трёх переменных полностью задаётся таблицей истинности из $2^3 = 8$ строк.

СДНФ. Совершенная дизъюнктивная нормальная форма составляется по строкам таблицы, где $F = 1$: для каждой такой строки записывается конъюнкция всех переменных (с отрицанием, если переменная равна 0), а конъюнкции объединяются дизъюнкцией. Например, для $F = A \oplus B$:

$$ F = (\lnot A \land B) \lor (A \land \lnot B). $$

Любая булева функция представима в виде СДНФ, поэтому набор $\{\land, \lor, \lnot\}$ функционально полон.

Законы де Моргана позволяют переносить отрицание через скобки:

$$ \lnot (A \land B) = \lnot A \lor \lnot B, \qquad \lnot (A \lor B) = \lnot A \land \lnot B . $$

Полусумматор складывает два бита: сумма $S = A \oplus B$, перенос $P = A \land B$. Полный сумматор добавляет перенос из младшего разряда, и цепочка из 64 сумматоров складывает 64-битные числа.

На схемах по ГОСТ 2.743 элемент И обозначается символом «&», ИЛИ — «1», исключающее ИЛИ — «=1», отрицание — кружком на выходе.

Где это применяется в IT

Логические выражения — это условия if, фильтры WHERE в SQL, правила доступа и feature-флаги. В железе те же функции собраны из транзисторов: процессор складывает числа сумматорами из элементов XOR и AND.

  • СДНФ. По таблице истинности строится схема: так проектируют комбинационные устройства.
  • Упрощение условий. Законы де Моргана упрощают код: not (a and b) == (not a) or (not b).
  • Арифметика процессора. Полусумматор — первый шаг к арифметико-логическому устройству (АЛУ).

Код на Python

Загружаю пример…