2. Методичні вказівки
Цей розділ самодостатній: він містить усю теорію теми роботи — від логічних елементів до алгебри Жегалкіна — та опис середовища logic.ly, у якому виконують завдання 4task.md. Наприкінці наведено наскрізний демонстраційний приклад, що проходить увесь шлях умова → таблиця → форма → мінімізація → схема на даних, які не збігаються з жодним варіантом. Зовнішні джерела не потрібні; ширше поняття подано в Лекції 3 та Лекції 4.
2.1 Логічні змінні, функції та таблиця істинності
Логічна (булева) змінна набуває одного з двох значень: 1 (істина, True, T,
або І) чи 0 (хиба, False, F, або Х). У цій роботі кожен перемикач —
це логічна змінна: увімкнено , вимкнено .
Означення (булева функція). Булева функція від змінних — це відображення , яке кожному наборові значень входів зіставляє один вихід або .
Оскільки кожна з змінних незалежно набуває значень, різних вхідних наборів рівно . Функцію повністю задає таблиця істинності — перелік усіх наборів разом зі значенням на кожному. Для чотирьох перемикачів таких рядків .
Зауваження (порядок рядків). Рядки прийнято впорядковувати за зростанням двійкового числа : від до . Сталий порядок робить побудову форм і карт Карно механічною й убезпечує від пропусків.
Комбінаційна схема, яку ви будуватимете, — це апаратне втілення такої функції: стан входів однозначно визначає вихід, без пам’яті про попередні стани.
2.2 Логічні елементи (вентилі) та їх позначення
Логічний елемент (вентиль, англ. gate) — це пристрій, що обчислює одну булеву операцію над своїми входами. Нижче — операції, потрібні в роботі, їхні позначення й таблиці істинності (за Лекцією 3).
| Елемент | UA / англ. | Позначення | Значення |
|---|---|---|---|
| Заперечення | НІ (NOT) | , | |
| Кон’юнкція | ТА (AND) | , | лише коли |
| Диз’юнкція | АБО (OR) | , | лише коли |
| Виключне «або» | Викл. АБО (XOR) | коли входи різні | |
| Штрих Шефера | ТА-НІ (NAND) | ||
| Стрілка Пірса | АБО-НІ (NOR) | ||
| Рівнозначність | Викл. АБО-НІ (NXOR) | коли входи однакові | |
| Повторювач | Буфер (Buffer) | передає сигнал без змін |
Зведена таблиця істинності двомісних операцій:
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
| 0 | 1 | 0 | 1 | 1 | 1 | 0 | 0 |
| 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
| 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 |
Умовні графічні позначення цих елементів (стандарт ANSI/IEEE, які використовує й logic.ly) наведено на рисунку. Маленьке кружальце на виході означає інверсію: воно перетворює ТА на ТА-НІ, АБО на АБО-НІ, а буфер на елемент НІ.

Зауваження (число входів). Кон’юнкцію та диз’юнкцію означують і для трьох, і для більшого числа входів: дорівнює лише коли всі входи , а дорівнює лише коли всі входи . У logic.ly кількість входів вентиля задають у його параметрах.
2.3 Канонічні форми: ДДНФ і ДКНФ
З таблиці істинності функцію завжди можна виписати формулою двома стандартними способами. Обидва спираються на елементарні «цеглинки».
Означення (мінтерм, макстерм). Мінтерм (конституента одиниці) — це кон’юнкція всіх змінних, у якій кожна змінна входить один раз: пряма, якщо в даному рядку вона дорівнює , та інвертована, якщо . Макстерм (конституента нуля) — це диз’юнкція всіх змінних: пряма, якщо змінна в рядку дорівнює , та інвертована, якщо .
Наприклад, для рядка мінтерм — це , а макстерм — . Мінтерм дорівнює рівно у своєму рядку; макстерм дорівнює рівно у своєму рядку.
Означення (ДДНФ). Досконала диз’юнктивна нормальна форма — це диз’юнкція мінтермів, узятих по всіх рядках, де . Вона істинна саме тоді, коли істинний хоча б один із цих мінтермів, тобто саме на одиничних наборах.
Означення (ДКНФ). Досконала кон’юнктивна нормальна форма — це кон’юнкція макстермів, узятих по всіх рядках, де . Вона хибна саме тоді, коли хибний хоча б один із цих макстермів, тобто саме на нульових наборах.
Ці дві форми канонічні: для заданої функції кожна визначена однозначно. Правило вибору: якщо одиниць у таблиці менше — коротшою буде ДДНФ; якщо менше нулів — ДКНФ. Обидві, як правило, ще піддаються мінімізації (§2.4).
Типова помилка (переплутати правила знаків). У ДДНФ (по одиницях) змінну беруть прямою при ; у ДКНФ (по нулях) — навпаки, прямою при . Проговорюйте подумки: «мінтерм має дорівнювати у своєму рядку, тож при змінну треба інвертувати».
2.4 Мінімізація картами Карно
Досконалі форми зазвичай надлишкові. Карта Карно — це таблиця істинності, перекладена у прямокутну сітку так, щоб сусідні клітинки відрізнялися рівно однією змінною. Це дає змогу «згорнути» сусідні мінтерми: якщо однакова у двох сусідів, змінна, що між ними змінюється, зайва.
Код Грея. Рядки й стовпці нумерують не звичайним двійковим кодом, а кодом Грея , у якому кожен наступний код відрізняється від попереднього одним бітом. Для чотирьох змінних карта має розмір : рядки позначають парою , стовпці — парою .
Сусідність із «обгортанням». Ліве й праве ребра карти вважають сусідніми, так само верхнє й нижнє: карта замкнена в тор. Тому чотири кутові клітинки — теж сусіди.
Правила групування.
- Об’єднують клітинки з однаковим значенням у прямокутники, кількість клітинок у яких є степенем двійки: .
- Групи роблять якомога більшими (більша група — коротший терм) і якомога меншим числом; групи можуть перекриватися та обгортати краї.
- Кожна одиниця (для МДНФ) або кожен нуль (для МКНФ) має потрапити хоча б в одну групу.
Від груп — до форми.
- МДНФ (мінімальна диз’юнктивна) — групують одиниці. Кожна група дає один кон’юнктивний терм: до нього входять лише ті змінні, що сталі в межах групи (пряма при , інвертована при ); змінні, що в групі змінюються, відкидають. МДНФ — диз’юнкція цих термів.
- МКНФ (мінімальна кон’юнктивна) — групують нулі. Кожна група дає один диз’юнктивний терм за дзеркальним правилом (пряма при , інвертована при ). МКНФ — кон’юнкція цих термів.
Зауваження (невизначені набори). Якщо для деяких наборів значення функції байдуже (позначають «» або ), їх дозволено долучати до груп так, як вигідно для збільшення групи. У задачах цієї роботи функція визначена на всіх наборах, тож невизначених клітинок не буде.
Наскрізний приклад мінімізації показано в §2.8 (рисунок карти з двома групами).
2.5 Базиси ТА-НІ та АБО-НІ
Набір операцій називають функціонально повним, якщо через нього можна виразити будь-яку булеву функцію. Класичний повний набір — . Виявляється, достатньо однієї операції: штриха Шефера або стрілки Пірса. Саме тому мікросхеми часто будують суцільно з елементів ТА-НІ чи АБО-НІ.
Базис ТА-НІ (штрих Шефера, ). Формули заміни (за Лекцією 3):
Базис АБО-НІ (стрілка Пірса, ).
На практиці зручні два дзеркальні факти:
- ДНФ (сума добутків) природно лягає у ТА-НІ. Двоярусна схема ТА→АБО перетворюється на двоярусну ТА-НІ→ТА-НІ: досить замінити всі елементи на ТА-НІ.
- КНФ (добуток сум) природно лягає в АБО-НІ. Двоярусна схема АБО→ТА перетворюється на АБО-НІ→АБО-НІ.
Тому для базису ТА-НІ зручно виходити з МДНФ, а для АБО-НІ — з МКНФ. Конкретні викладки — у §2.8.
2.6 Алгебра Жегалкіна
Алгебра Жегалкіна будується на двох операціях — додавання за модулем 2 (те саме, що XOR) і множення (кон’юнкція) — та константі . Ключові тотожності (за Лекцією 3):
Заперечення й диз’юнкцію виражають через і так:
Означення (поліном Жегалкіна). Поліномом Жегалкіна функції називають її запис у вигляді суми за модулем 2 різних кон’юнкцій змінних (і, можливо, вільного члена ), наприклад . Для кожної булевої функції такий запис єдиний.
Щоб отримати поліном, зазвичай беруть будь-яку формулу функції (найзручніше — ДДНФ або вже знайдену МДНФ), замінюють на та на , розкривають дужки за дистрибутивністю й скорочують однакові доданки парами (бо ). Приклад — у §2.8.
2.7 Середовище logic.ly
Роботу виконують в онлайн-редакторі логічних схем logic.ly (демо-версія: https://logic.ly/demo/); реєстрація не потрібна, усе працює у браузері. Ліва панель містить елементи, які перетягують на центральне поле. Потрібні в роботі:
Вхідні керуючі елементи (Input Controls).
- Перемикач (Toggle Switch) — залежно від положення подає логічну або ; саме ним задають входи .
- Генератор тактів (Clock) — по черзі подає і із заданою частотою.
- Логічна 1 (High Constant) — постійно подає ; Логічний 0 (Low Constant) — постійно подає .
Вихідні елементи (Output Controls).
- Лампочка (Light Bulb) — світиться, коли на вхід подано ; це вихід .
- Числова панель (4-Bit Digit) — показує шістнадцяткову цифру за поданими бітами.
Логічні елементи (Logic Gates). Буфер (Buffer), ТА (AND), АБО (OR), Викл. АБО (XOR), НІ (NOT), ТА-НІ (NAND), АБО-НІ (NOR), Викл. АБО-НІ (NXOR).
Інші (Other). Підпис (Label) — для позначення елементів.
Як будувати схему. Елементи перетягують на поле й з’єднують, ведучи лінію від виходу одного елемента до входу іншого. Виділивши елемент, у правому нижньому куті відкривають панель параметрів: для вхідних/вихідних елементів там задають змінну, за яку відповідає елемент (наприклад, підписати перемикачі ), а для вентилів — кількість вхідних конекторів. Зібравши схему, перемикають входи й перевіряють, що лампочка світиться саме на тих наборах, де у вашій таблиці.
Порада. Будуйте схему точно за формулою: спершу розставте перемикачі та потрібні елементи НІ (інвертори), потім елементи одного ярусу (усі ТА для ДДНФ або всі АБО для ДКНФ), нарешті — вихідний елемент, і лише тоді проводьте з’єднання. Кожну готову схему знімайте для звіту.
2.8 Наскрізний демонстраційний приклад
Пройдемо весь шлях на прикладі, умова якого не збігається з жодним варіантом 4task.md, тож він показує техніку, а не розв’язок завдання.
Умова (демонстраційна). Лампа світиться тоді й лише тоді, коли одночасно ввімкнено перемикачі і , або коли обидва перемикачі і вимкнено.
Крок 1. Формалізація. Словам відповідає функція
Крок 2. Таблиця істинності. Обчислюємо на всіх наборах (пряма перевірка за означеннями ):

Одиниці стоять у рядках (сім рядків), нулі — у решті дев’яти.
Крок 3. ДДНФ (по семи одиницях). Для кожного одиничного рядка беремо мінтерм:
Крок 4. ДКНФ (по дев’яти нулях). Для кожного нульового рядка беремо макстерм (пряма змінна при ):
Крок 5. Мінімізація картою Карно. Переносимо одиниці на карту (рядки , стовпці у коді Грея) і групуємо:

Дві максимальні групи по чотири клітинки:
- увесь рядок — стала лише пара , тож терм ;
- увесь стовпець — сталі , тож терм .
Групи покривають усі сім одиниць (вони перетинаються в клітинці ). Звідси
Для МКНФ групуємо нулі. Мінімальне покриття дають чотири групи по дві клітинки, що відповідають чотирьом простим імплікантам; кожна дає диз’юнктивний терм:
Перевірка розкриттям підтверджує рівність: , , а їхній добуток дорівнює — тій самій функції.
Крок 6. Схема МДНФ. Формулу збираємо з двох елементів ТА, двох інверторів (НІ) та одного АБО; входи — перемикачі, вихід — лампочка:

Крок 7. Базиси ТА-НІ та АБО-НІ (для рівня понад 75). Двоярусну суму добутків переписуємо в ТА-НІ, замінивши обидва яруси на елементи ТА-НІ (а інвертори , ):

Симетрично, виходячи з добутку сум (МКНФ), отримуємо реалізацію в АБО-НІ (тут , ):
Крок 8. Поліном Жегалкіна (для рівня понад 90). Замінюємо , і :
Розкривши дужки й скоротивши пару , дістаємо єдиний поліном:
Його легко перевірити на кількох рядках таблиці: наприклад, на наборі усі кон’юнкції нульові, лишається вільний член — і справді .
Підсумок прикладу. Одну функцію ми подали шістьма способами — ДДНФ, ДКНФ, МДНФ, МКНФ, у базисах ТА-НІ/АБО-НІ та поліномом Жегалкіна — і кожен спосіб дає свою схему. У 4task.md той самий шлях ви пройдете для власного варіанта.