1. Основы аналитического представления: понятия минтерма и макстерма
Основы аналитического представления: понятия минтерма и макстерма
Добро пожаловать в курс «Аналитическое представление булевых функций и нормальные формы». Это первая статья нашего цикла, и мы начнем с фундамента, на котором строится вся цифровая логика и схемотехника.
Мы привыкли видеть булевы функции в виде таблиц истинности. Это наглядно, когда переменных мало (две или три). Но представьте, что переменных десять. Таблица истинности для такой функции будет содержать строки. Работать с такими громоздкими таблицами неудобно.
Здесь на помощь приходит аналитическое представление — запись функции в виде формулы. Сегодня мы разберем, как любую, даже самую сложную таблицу истинности, превратить в строгую математическую формулу, используя понятия минтермов и макстермов.
Базовые определения
Прежде чем переходить к сложным конструкциям, вспомним основные операции и введем понятие литерала.
В булевой алгебре мы оперируем тремя основными действиями:
> Литерал — это булева переменная или её отрицание. Например, для переменной литералами являются и .
Минтермы: Конституенты единицы
Начнем с первого «кирпичика» для построения функций.
Минтерм (от англ. minimum term) от переменных — это конъюнкция (произведение) всех переменных, где каждая переменная входит в произведение ровно один раз: либо сама по себе, либо с отрицанием.
Минтерм обладает уникальным свойством: он принимает значение истина (1) только на одном единственном наборе значений переменных.
Рассмотрим пример для двух переменных и . Всего существует возможных комбинации их значений. Для каждой комбинации можно составить свой минтерм:
| | | Минтерм | Описание | |---|---|---|---| | 0 | 0 | | Истинно только если и | | 0 | 1 | | Истинно только если и | | 1 | 0 | | Истинно только если и | | 1 | 1 | | Истинно только если и |
Обратите внимание на закономерность: если переменная равна 0, мы берем её с отрицанием (), чтобы превратить 0 в 1. Если переменная равна 1, мы берем её без изменений. В результате произведение всех единиц дает 1.
Минтермы часто обозначают буквой с индексом, соответствующим двоичному номеру строки:
Где — минтерм для нулевой строки (000), — отрицания переменных, — операция конъюнкции.
Именно поэтому минтермы называют конституентами единицы — каждый из них «отвечает» за одну единицу в таблице истинности.
!Визуализация минтерма как детектора конкретной комбинации входных сигналов
Макстермы: Конституенты нуля
Второе важное понятие — это макстерм. Это понятие, двойственное минтерму.
Макстерм (от англ. maximum term) от переменных — это дизъюнкция (сумма) всех переменных, где каждая переменная входит ровно один раз: либо сама по себе, либо с отрицанием.
Свойство макстерма противоположно: он принимает значение ложь (0) только на одном единственном наборе значений переменных. Во всех остальных случаях он равен 1.
Рассмотрим пример для тех же переменных и :
| | | Макстерм | Описание | |---|---|---|---| | 0 | 0 | | Ложно только если и | | 0 | 1 | | Ложно только если и | | 1 | 0 | | Ложно только если и | | 1 | 1 | | Ложно только если и |
Здесь правило построения обратное: если переменная в наборе равна 0, мы берем её без отрицания. Если переменная равна 1, мы берем её с отрицанием. Это нужно для того, чтобы в сумме получились все нули (так как ).
Макстермы обозначают заглавной буквой :
Где — макстерм для строки с индексом 3 (011), — переменная (так как в наборе 0), — отрицания переменных (так как в наборе 1), — операция дизъюнкции.
Макстермы называют конституентами нуля.
Совершенная дизъюнктивная нормальная форма (СДНФ)
Теперь, зная, что такое минтермы, мы можем представить любую булеву функцию в виде формулы. Эта форма называется Совершенная дизъюнктивная нормальная форма (СДНФ).
Идея проста: функция истинна тогда, когда истинен хотя бы один из наборов переменных, на которых она равна 1. Значит, мы можем просто сложить (дизъюнкция) все минтермы, соответствующие единицам функции.
Алгоритм построения СДНФ:
Пример: Дана функция , которая равна 1 на наборах (0,0,1) и (1,1,0). На остальных наборах она равна 0.
Итоговая формула СДНФ:
Где — функция в совершенной дизъюнктивной нормальной форме, — отрицания переменных, — конъюнкция, — дизъюнкция.
Совершенная конъюнктивная нормальная форма (СКНФ)
Аналогично можно построить функцию, опираясь на нули. Эта форма называется Совершенная конъюнктивная нормальная форма (СКНФ).
Идея: функция должна быть ложной только на тех наборах, где она равна 0. Мы берем макстермы (которые равны 0 на этих наборах) и перемножаем их. Если хотя бы один макстерм станет 0, вся формула станет 0.
Алгоритм построения СКНФ:
Пример: Возьмем простую функцию , которая равна 0 только на наборе (0,1). На остальных она равна 1.
Итоговая формула СКНФ:
Где — функция в совершенной конъюнктивной нормальной форме, — переменная, — отрицание переменной, — дизъюнкция.
Если бы нулей было несколько, мы бы взяли их произведение. Например, если функция равна 0 на (0,0) и (1,1):
Где — искомая функция, — макстерм для набора 00, — макстерм для набора 11, — конъюнкция.
Понятие функциональной полноты
Изучив СДНФ и СКНФ, мы приходим к важнейшему выводу теоретической информатики.
Поскольку любую таблицу истинности можно превратить в СДНФ или СКНФ, это означает, что любую булеву функцию можно выразить, используя только три операции: И, ИЛИ, НЕ.
> Система булевых функций называется функционально полной, если любую булеву функцию можно представить в виде суперпозиции (комбинации) функций этой системы.
Набор является классическим примером функционально полной системы. Именно поэтому процессоры и микросхемы строятся на базовых логических вентилях AND, OR, NOT (и их производных), ведь с их помощью можно реализовать любую логику работы устройства.
В следующих статьях курса мы узнаем, что существуют и более компактные полные системы (например, только штрих Шеффера), и научимся упрощать полученные сегодня громоздкие формулы.