Raw

Лекція 3. Основи булевої алгебри. Алгебра Жегалкіна

Огляд

Ця лекція будує алгебраїчний фундамент для всієї «логічної» частини курсу. Ми починаємо з побутового поняття висловлення, яке буває істинним або хибним, кодуємо ці два значення символами 11 та 00 — і вивчаємо, як висловлення поєднуються невеликим набором булевих операцій. Центральний об’єкт — булева алгебра: двоелементна множина {0,1}\{0,1\} з операціями заперечення (¬\neg), кон’юнкції (\wedge) та диз’юнкції (\vee), а також похідними операціями — виключним «або» (\oplus), стрілкою Пірса (\downarrow), штрихом Шефера (\mid) та еквівалентністю (\leftrightarrow).

Три ідеї пронизують увесь розділ. Перша: кожна операція повністю задається таблицею істинності, а булева функція nn змінних — це не що інше, як таблиця істинності; звідси ми точно порахуємо, скільки таких функцій існує. Друга: операції підпорядковані компактному списку аксіом і законів (комутативність, асоціативність, дистрибутивність, поглинання, доповнення, де Моргана, …), і кожен закон ми доводимо таблицею істинності, а не просто проголошуємо. Третя: цей самий список законів — той самий, що керує алгеброю множин із Лекції 1; булева алгебра, алгебра множин та алгебра бітів — це три обличчя однієї структури, і саме тому діаграми Венна, які ви малювали для множин, не суперечать таблицям істинності, які ми будуватимемо тут.

Насамкінець ми розглянемо два питання, суттєві для інженерної практики. Функціональна повнота — які набори операцій достатні, щоб виразити будь-яку булеву функцію (базис ТА-АБО-НІ, а також те, що однієї операції NOR або однієї NAND уже вистачає). І алгебра Жегалкіна — погляд на булеві функції як на многочлени над полем із двох елементів, де замість диз’юнкції працює додавання за модулем 22 (виключне «або» \oplus). Ця точка зору дає єдиний канонічний многочлен Жегалкіна для кожної функції і лежить в основі контрольних сум, кодів парності та алгоритмів виявлення помилок.

Про строгість. Кілька результатів нижче оформлені як теореми та твердження з доведеннями, обмеженими позначками Доведення.\blacksquare. Головний метод доведення тут — таблицею істинності: щоб довести рівність двох булевих виразів, будують обидві таблиці й порівнюють останні стовпці рядок за рядком. Читайте доведення активно; ці самі прийоми знадобляться в Лекції 4, де ми мінімізуємо функції та переходимо до логічних схем.


3.1 Висловлення та алфавіт булевої алгебри

Висловлення й істиннісні значення

Висловлення (або твердження) — це розповідне речення, яке є або істинним, або хибним, але не тим і тим водночас. Бути висловленням не залежить від того, чи знаємо ми, котре з двох значень воно має; важливо лише, що речення однозначно є одним із двох.

Приклади і не-приклади.

  • «Сьогодні неділя.» — висловлення (істинне або хибне залежно від дня).
  • «2+2=42 + 2 = 4.» — висловлення (істинне).
  • «Існує нескінченно багато простих чисел-близнюків.» — висловлення: воно безумовно або істинне, або хибне, хоча (станом на сьогодні) ніхто не знає, котре саме. Мати істиннісне значення не означає знати його.
  • «x<0x < 0.» — це предикат (відкрите речення): воно стає висловленням лише після того, як xx зафіксовано. Предикати з квантифікаторами — предмет наступних лекцій, а не цієї.
  • «Як справи?» — не висловлення; питання не має істиннісного значення.
  • «Зачини двері.» — не висловлення; наказ не має істиннісного значення.
  • «Це речення хибне.» — не висловлення: якщо припустити його істинним, воно стає хибним, і навпаки (парадокс брехуна).

Кожному висловленню зіставляємо символьне істиннісне значення. Алфавіт булевої алгебри складається рівно з двох символів:

істина=1=T=І,хиба=0=F=Х.\text{істина} = 1 = T = \text{І}, \qquad \text{хиба} = 0 = F = \text{Х}.

Робота з цифрами 00 та 11 (а не зі словами) — це саме те, що перетворює логіку на алгебру: істиннісні значення стають величинами, з якими можна обчислювати, а логічні сполучники — операціями, схожими на ++ та ×\times.

Зауваження (позначення). Одні автори пишуть T/FT/F, інші /\top/\bot, ще інші 1/01/0 або українські І/Х\text{І}/\text{Х}. Цей курс майже скрізь використовує 11 і 00, бо це робить наочним місток до арифметики та апаратури: кон’юнкція поводитиметься точно як множення бітів, а диз’юнкція — майже як додавання.

Складені висловлення

Прості висловлення зазвичай позначають літерами p,q,r,p, q, r, \dots (або A,B,CA, B, C) і поєднують у складені висловлення за допомогою сполучників. Нехай

  • pp = «Сьогодні п’ятниця»,
  • qq = «Погода гарна».

Тоді:

Складене висловлення Читається як
pqp \wedge q «Сьогодні п’ятниця і погода гарна»
pqp \vee q «Сьогодні п’ятниця або погода гарна»
¬p\neg p «Сьогодні не п’ятниця»
¬pq\neg p \wedge q «Сьогодні не п’ятниця і погода гарна»

Істиннісне значення складеного висловлення залежить лише від істиннісних значень його частин та від використаних сполучників — і ніколи від змісту слів. Цю властивість називають істиннісною функціональністю, і в ній — весь сенс переходу до булевої алгебри: щойно значення частин зафіксовано, значення цілого визначається чистим обчисленням.


3.2 Булеві змінні та булеві функції

Булева змінна — це змінна, що набуває значень із {0,1}\{0, 1\}. Булева функція nn змінних — це будь-яке правило

f:{0,1}n{0,1},f : \{0,1\}^n \longrightarrow \{0,1\},

що кожному з 2n2^n можливих наборів входів зіставляє значення 00 або 11. Тут {0,1}n\{0,1\}^n — множина всіх nn-ок (вхідних векторів) (x1,,xn)(x_1, \dots, x_n) з бітів.

Таблиця істинності є функцією. Оскільки область визначення {0,1}n\{0,1\}^n скінченна, булева функція повністю задається переліком її значення на кожному вхідному рядку. Два булеві вирази задають ту саму функцію саме тоді, коли їхні таблиці істинності збігаються в кожному рядку. Це — найважливіший інструмент розділу:

Щоб довести рівність двох булевих виразів, будують обидві таблиці істинності й перевіряють, що останні стовпці збігаються рядок за рядком. Щоб спростувати рівність, достатньо вказати один рядок, у якому вони різняться (контрприклад).

Рядки входів прийнято перелічувати в порядку зростання двійкового числа (00,01,10,11,00, 01, 10, 11, \dots), щоб нічого не пропустити. (На слайдах лекції окремі таблиці подано у спадному порядку — це та сама функція, лише інша послідовність рядків.)

Скільки є булевих функцій?

Скільки різних булевих функцій nn змінних існує? Відповідь напрочуд велика й зростає двічі експоненційно.

Теорема 3.1 (кількість булевих функцій). Кількість булевих функцій nn змінних дорівнює

N(n)=22n.N(n) = 2^{\,2^{\,n}}.

Доведення. Лічимо у два кроки.

Крок 1 — кількість вхідних рядків. Вхід — це nn-ка (x1,,xn)(x_1, \dots, x_n), де кожен xi{0,1}x_i \in \{0,1\}. За правилом добутку маємо 22 незалежні варіанти для кожної з nn координат, тому

{0,1}n=222n=2n|\{0,1\}^n| = \underbrace{2 \cdot 2 \cdots 2}_{n} = 2^{\,n}

різних вхідних рядків. Позначимо це число m=2nm = 2^n.

Крок 2 — кількість способів заповнити стовпець виходів. Функція ff однозначно визначається значеннями, які вона надає кожному з mm рядків, і ці значення обираються незалежно: будь-який зі стовпців довжини mm (кожен запис — 00 або 11) задає справжню функцію, а різні стовпці задають різні функції. Знову за правилом добутку таких стовпців

222m=2m.\underbrace{2 \cdot 2 \cdots 2}_{m} = 2^{\,m}.

Підставляючи m=2nm = 2^n, дістаємо N(n)=22nN(n) = 2^{\,2^{\,n}}. \blacksquare

Двокроковість — спершу порахувати рядки (2n2^n), потім заповнення (2(рядків)2^{(\text{рядків})}) — і є причиною того, що показник сам є експонентою.

nn рядків 2n2^n функцій 22n2^{2^n}
00 11 22
11 22 44
22 44 1616
33 88 256256
44 1616 6553665\,536
55 3232 42949672964\,294\,967\,296

Зростання нестримне: уже при n=6n = 6 маємо 2641,8×10192^{64} \approx 1{,}8 \times 10^{19} функцій. Саме цей вибух пояснює, чому потрібні систематичні методи спрощення (Лекція 4): перебрати всі функції вручну неможливо.

Усі шістнадцять функцій двох змінних

При n=2n = 2 маємо рівно 24=162^{4} = 16 функцій F0,,F15F_0, \dots, F_{15}. Читаючи кожен стовпець згори вниз над вхідними рядками (x,y)=00,01,10,11(x,y) = 00, 01, 10, 11, дістаємо таблицю істинності цієї функції; а нижній індекс kk — це двійкове число, «прочитане» тим стовпцем (старший біт угорі):

xx yy F0F_0 F1F_1 F2F_2 F3F_3 F4F_4 F5F_5 F6F_6 F7F_7 F8F_8 F9F_9 F10F_{10} F11F_{11} F12F_{12} F13F_{13} F14F_{14} F15F_{15}
00 00 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
00 11 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
11 00 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
11 11 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

Усі 16 булевих функцій двох змінних: чотири вхідні рядки (x,y) та стовпці F0…F15, кожен зі своєю таблицею істинності

Кілька з цих стовпців — операції, які ми невдовзі назвемо:

  • F0=0F_0 = 0 (тотожний нуль, суперечність), F15=1F_{15} = 1 (тотожна одиниця, тавтологія);
  • F1=xyF_1 = x \wedge y (AND), F7=xyF_7 = x \vee y (OR);
  • F3=xF_3 = x, F5=yF_5 = y, F12=¬xF_{12} = \neg x, F10=¬yF_{10} = \neg y (проєкції та їхні заперечення);
  • F6=xyF_6 = x \oplus y (XOR), F9=xyF_9 = x \leftrightarrow y (еквівалентність, XNOR);
  • F13=xyF_{13} = x \to y, F11=yxF_{11} = y \to x (імплікації);
  • F8=xyF_8 = x \downarrow y (NOR, стрілка Пірса), F14=xyF_{14} = x \mid y (NAND, штрих Шефера).

Найважливіше тут — не окремі назви, а кількість: кожна можлива таблиця істинності двох змінних трапляється рівно один раз, і їх рівно 1616 — не більше й не менше.


3.3 Елементарні булеві операції

Розглянемо операції по черзі. Кожну задаємо таблицею істинності. Заперечення — унарна операція (один вхід); решта — бінарні (два входи).

Заперечення (NOT, ¬\neg)

Заперечення перемикає істиннісне значення на протилежне: ¬A\neg A істинне саме тоді, коли AA хибне. Уживані позначення: ¬A\neg A, A\sim A, !A!A, A\overline{A}, AA'.

AA ¬A\neg A
0 1
1 0

Кон’юнкція (AND, \wedge)

Кон’юнкція ABA \wedge B істинна саме тоді, коли істинні обидва операнди. Позначення: ABA \wedge B, ABA \cdot B, ABAB. Порівняння таблиці нижче з таблицею множення для 0/10/1 показує їхню тотожність: AB=ABA \wedge B = A \cdot B. Тому кон’юнкцію часто пишуть як добуток.

AA BB ABA \wedge B
0 0 0
0 1 0
1 0 0
1 1 1

Диз’юнкція (OR, \vee)

Диз’юнкція ABA \vee B істинна, коли істинний принаймні один операнд (це включне «або»). Позначення: ABA \vee B, A+BA + B. Вона поводиться як додавання бітів, окрім того, що 11=11 \vee 1 = 1 (а не 22): диз’юнкція — це «насичене» додавання з верхньою межею 11.

AA BB ABA \vee B
0 0 0
0 1 1
1 0 1
1 1 1

Типова помилка (включне проти виключного «або»). Побутове «або» часто виключне («суп або салат» означає одне, не обидва), але логічне \veeвключне: 11=11 \vee 1 = 1. Виключне прочитання — це інша операція, XOR, яку означуємо далі.

Виключне «або» (XOR, \oplus)

Виключне «або» ABA \oplus B істинне, коли операнди різні — істинний рівно один із них. Це «або, але не обидва», а також «операнди нерівні»: AB=1A \oplus B = 1 тоді й лише тоді, коли ABA \ne B. Воно поводиться як додавання за модулем 22: AB=(A+B)mod2A \oplus B = (A + B) \bmod 2.

AA BB ABA \oplus B
0 0 0
0 1 1
1 0 1
1 1 0

Саме тому, що \oplus — це додавання за модулем 22, воно має чисту алгебру (§3.8), і на ній ґрунтується алгебра Жегалкіна.

Стрілка Пірса (NOR, \downarrow)

Стрілка Пірса ABA \downarrow B — це заперечення диз’юнкції: AB=¬(AB)A \downarrow B = \neg(A \vee B). Вона істинна саме тоді, коли обидва операнди хибні («ні AA, ні BB»).

AA BB ABA \downarrow B
0 0 1
0 1 0
1 0 0
1 1 0

Штрих Шефера (NAND, \mid)

Штрих Шефера ABA \mid B (також ABA \uparrow B) — це заперечення кон’юнкції: AB=¬(AB)A \mid B = \neg(A \wedge B). Він хибний лише тоді, коли обидва операнди істинні, і істинний в усіх інших випадках.

AA BB ABA \mid B
0 0 1
0 1 1
1 0 1
1 1 0

Еквівалентність (XNOR, \leftrightarrow)

Еквівалентність ABA \leftrightarrow B (також ABA \equiv B, ABA \sim B) істинна, коли операнди мають однакове значення. Це точно заперечення XOR: AB=¬(AB)A \leftrightarrow B = \neg(A \oplus B), тобто AB=1A \leftrightarrow B = 1 тоді й лише тоді, коли A=BA = B.

AA BB ABA \leftrightarrow B
0 0 1
0 1 0
1 0 0
1 1 1

Усі операції поряд

Поставивши операції двох змінних поруч, легко порівняти їхні візерунки:

AA BB ABA \wedge B ABA \vee B ABA \oplus B ABA \downarrow B ABA \mid B ABA \leftrightarrow B
0 0 0 0 0 1 1 1
0 1 0 1 1 0 1 0
1 0 0 1 1 0 1 0
1 1 1 1 0 0 0 1

Таблиці істинності основних операцій поряд: заперечення, кон'юнкція, диз'юнкція, виключне «або», стрілка Пірса, штрих Шефера, еквівалентність

Зверніть увагу на пари-заперечення: стовпець ABA \downarrow B — це заперечення ABA \vee B; стовпець ABA \mid B — заперечення ABA \wedge B; стовпець ABA \leftrightarrow B — заперечення ABA \oplus B. Три «нижні» операції (,,\downarrow, \mid, \leftrightarrow) — це просто заперечені три «верхні» (,,\vee, \wedge, \oplus).

Пріоритет операцій

Щоб не громадити дужки, домовляються про пріоритет (силу зв’язування), від найвищого до найнижчого:

¬        ,     , .\neg \;\succ\; \wedge \;\succ\; \vee,\ \oplus \;\succ\; \to,\ \leftrightarrow.

Отже, ¬AB\neg A \wedge B означає (¬A)B(\neg A) \wedge B, а ABCA \wedge B \vee C означає (AB)C(A \wedge B) \vee C. Заперечення діє на найменший вираз праворуч від себе; \wedge зв’язує як множення, а \vee — як додавання. Оскільки \oplus і \vee стоять на одному рівні, вирази з обома краще дужкувати. Коли є сумнів — ставте дужки: ясність важливіша за стислість.

Типова помилка. ¬AB\neg A \wedge B — це (¬A)B(\neg A) \wedge B, а не ¬(AB)\neg(A \wedge B): риска заперечення не «розтягується» на \wedge, доки ви не напишете її так явно. У записі AB\overline{A}\,B проти AB\overline{AB} різниця видима; у лінійному тексті це часте джерело помилок.

Приклад 3.2 (обчислення таблиці складеного виразу). Побудуймо таблицю (AB)¬C(A \wedge B) \vee \neg C. Три змінні дають 23=82^3 = 8 рядків; уводимо допоміжні стовпці ABA \wedge B і ¬C\neg C, а тоді їхню диз’юнкцію:

AA BB CC ABA \wedge B ¬C\neg C (AB)¬C(A \wedge B) \vee \neg C
0 0 0 0 1 1
0 0 1 0 0 0
0 1 0 0 1 1
0 1 1 0 0 0
1 0 0 0 1 1
1 0 1 0 0 0
1 1 0 1 1 1
1 1 1 1 0 1

Останній стовпець — це функція, яку обчислює вираз; вона дорівнює 11 у п’яти рядках із восьми.


3.4 Аксіоми булевої алгебри

Булеву алгебру можна будувати аксіоматично: приймають кілька тотожностей за аксіоми, а решту законів виводять із них. Наведемо систему аксіом зі слайдів лекції; вона записана дуальними парами — форма з \wedge та форма з \vee.

Аксіома Форма з \wedge Форма з \vee
Комутативність AB=BAA B = B A AB=BAA \vee B = B \vee A
Асоціативність A(BC)=(AB)CA(BC) = (AB)C A(BC)=(AB)CA \vee (B \vee C) = (A \vee B) \vee C
Дистрибутивність A(BC)=ABACA(B \vee C) = AB \vee AC ABC=(AB)(AC)A \vee BC = (A \vee B)(A \vee C)
Поглинання (AB)B=B(A \vee B)\,B = B ABB=BAB \vee B = B
Доповнення (A¬A)B=B(A \wedge \neg A) \vee B = B (A¬A)B=B(A \vee \neg A)\,B = B

Пояснимо два останні рядки, бо їхня форма незвична.

  • Поглинання. ABB=BAB \vee B = B каже, що доданок ABAB «поглинається» доданком BB: хоч би яким було AA, результат дорівнює BB. Дуально (AB)B=B(A \vee B)B = B.
  • Доповнення. Аксіома фіксує поведінку заперечення через сталі: оскільки A¬A=0A \wedge \neg A = 0 і A¬A=1A \vee \neg A = 1, маємо (A¬A)B=0B=B(A \wedge \neg A) \vee B = 0 \vee B = B і (A¬A)B=1B=B(A \vee \neg A)B = 1 \cdot B = B. Тобто 00 — нейтральний елемент для \vee, а 11 — нейтральний для \wedge, а заперечення дає «протилежний» елемент, який у парі з вихідним породжує сталі 00 та 11.

Зауваження (дуальність). Помітьте: у таблиці аксіом ліва й права колонки — дзеркальні. Якщо у будь-якій істинній тотожності одночасно поміняти місцями \wedge \leftrightarrow \vee та 010 \leftrightarrow 1, знову дістанемо істинну тотожність. Це принцип дуальності; завдяки йому закони йдуть парами, і, довівши один, ми задарма маємо його двоїстий.


3.5 Закони (тотожності) булевої алгебри

Із аксіом випливають робочі закони, якими щодня користуються для спрощення виразів. Наведемо їх (зі слайдів лекції), а найважливіші доведемо таблицею істинності.

Закон Форма з \wedge Форма з \vee
Ідемпотентність AA=AA \wedge A = A AA=AA \vee A = A
Дії з 00 та 11 A0=0,A1=AA \wedge 0 = 0,\quad A \wedge 1 = A A0=A,A1=1A \vee 0 = A,\quad A \vee 1 = 1
Доповнення A¬A=0A \wedge \neg A = 0 A¬A=1A \vee \neg A = 1
Закони де Моргана ¬(AB)=¬A¬B\neg(A \wedge B) = \neg A \vee \neg B ¬(AB)=¬A¬B\neg(A \vee B) = \neg A \wedge \neg B
Подвійне заперечення ¬¬A=A\neg\neg A = A (самодвоїстий)

У законі «дії з 00 та 11» варто розрізняти дві ролі сталих: 11 — нейтральний елемент для \wedge (A1=AA \wedge 1 = A), а 00 — нейтральний для \vee (A0=AA \vee 0 = A); натомість 00 поглинає під \wedge (A0=0A \wedge 0 = 0, як a0=0a \cdot 0 = 0), а 11 поглинає під \vee (A1=1A \vee 1 = 1).

Ідемпотентність

Теорема 3.3 (ідемпотентність). AA=AA \wedge A = A і AA=AA \vee A = A.

Доведення. Оскільки бере участь лише одна змінна, таблиця має два рядки:

AA AAA \wedge A AAA \vee A
0 0 0
1 1 1

Обидва стовпці збігаються зі стовпцем AA. \blacksquare

Зауваження. Саме тут булева алгебра різко розходиться з арифметикою: A+A=AA + A = A та AA=AA \cdot A = A для всіх булевих значень, тоді як a+a=2aa + a = 2a і a2a^2 зазвичай відмінні від aa. Через це повторювані доданки згортаються (AAA=AA \vee A \vee A = A) — це перший інструмент спрощення. (Запам’ятайте цей контраст: в алгебрі Жегалкіна §3.8 для \oplus буде натомість xx=0x \oplus x = 0.)

Закони де Моргана

Теорема 3.4 (де Морган). ¬(AB)=¬A¬B\neg(A \wedge B) = \neg A \vee \neg B і ¬(AB)=¬A¬B\neg(A \vee B) = \neg A \wedge \neg B.

Доведення. Перший закон:

AA BB ABA \wedge B ¬(AB)\neg(A \wedge B) ¬A\neg A ¬B\neg B ¬A¬B\neg A \vee \neg B
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

Стовпці ¬(AB)\neg(A \wedge B) та ¬A¬B\neg A \vee \neg B рівні в кожному рядку. Другий закон:

AA BB ABA \vee B ¬(AB)\neg(A \vee B) ¬A\neg A ¬B\neg B ¬A¬B\neg A \wedge \neg B
0 0 0 1 1 1 1
0 1 1 0 1 0 0
1 0 1 0 0 1 0
1 1 1 0 0 0 0

Стовпці ¬(AB)\neg(A \vee B) та ¬A¬B\neg A \wedge \neg B рівні в кожному рядку. \blacksquare

Типова помилка. Закони де Моргана кажуть, що заперечення змінює сполучник: ¬(AB)\neg(A \wedge B) — це ¬A¬B\neg A \vee \neg B, а не ¬A¬B\neg A \wedge \neg B. «Не (багатий і відомий)» означає «бідний або невідомий», а не «бідний і невідомий». Перенесення заперечення через /\wedge/\vee без зміни сполучника — найпоширеніша помилка в цьому предметі.

Закони де Моргана показують ще й те, що набори {,¬}\{\wedge, \neg\} та {,¬}\{\vee, \neg\} кожен окремо достатні, щоб виразити відсутній сполучник: AB=¬(¬A¬B)A \vee B = \neg(\neg A \wedge \neg B) і AB=¬(¬A¬B)A \wedge B = \neg(\neg A \vee \neg B). Цю ідею функціональної повноти розвинемо в §3.7.

Подвійне заперечення (інволюція)

Теорема 3.5 (подвійне заперечення). ¬¬A=A\neg\neg A = A.

Доведення.

AA ¬A\neg A ¬¬A\neg\neg A
0 1 0
1 0 1

Стовпець ¬¬A\neg\neg A збігається зі стовпцем AA. \blacksquare

Спрощення виразів

Щойно закони встановлено, нові тотожності можна доводити алгебраїчно — переписуючи одну частину в іншу за законами як за правилами перетворення. Саме так спрощують логічні схеми (Лекція 4).

Приклад 3.6 (спрощення). Спростимо ¬(¬AB)(AB)\neg(\neg A \wedge B) \wedge (A \vee B):

¬(¬AB)(AB)=(¬¬A¬B)(AB)(де Морган)=(A¬B)(AB)(подвійне заперечення)=A(¬BB)(дистрибутивність)=A0(доповнення)=A.(дії з 0)\begin{aligned} \neg(\neg A \wedge B) \wedge (A \vee B) &= (\neg\neg A \vee \neg B) \wedge (A \vee B) && \text{(де Морган)}\\ &= (A \vee \neg B) \wedge (A \vee B) && \text{(подвійне заперечення)}\\ &= A \vee (\neg B \wedge B) && \text{(дистрибутивність)}\\ &= A \vee 0 && \text{(доповнення)}\\ &= A. && \text{(дії з } 0) \end{aligned}

Вираз із чотирьох операцій згортається до однієї змінної AA. Перевірка таблицею зайняла б чотири рядки; алгебра ж пояснює, чому так.


3.6 Зв’язок булевої алгебри з алгеброю множин

Закони, які ми довели, не є чимось особливим саме для істиннісних значень. Той самий список законів керує алгеброю множин із Лекції 1. Причина в тому, що обидві структури — окремі випадки однієї абстрактної структури, булевої алгебри, і їх можна вишикувати операція проти операції.

Поняття Логіка (біти) Множини
«і» ABA \wedge B ABA \cap B
«або» ABA \vee B ABA \cup B
«не» ¬A\neg A A\overline{A}
низ / порожнеча 00 (хиба) \varnothing
верх / універсум 11 (істина) UU
«те саме» ABA \leftrightarrow B A=BA = B
«не більше ніж» ABA \to B ABA \subseteq B

Кожен закон читається однаково вниз по будь-якому стовпцю. Наприклад, де Морган:

¬(AB)=¬A¬B,AB=AB;\neg(A \wedge B) = \neg A \vee \neg B, \qquad \overline{A \cap B} = \overline{A} \cup \overline{B};

а дистрибутивність, поглинання, доповнення й решта збігаються рядок за рядком. Саме тому інтуїція діаграм Венна з Лекції 1 ніколи не суперечить таблицям істинності цієї лекції: членська таблиця для множин — це те саме обчислення, що й таблиця істинності для логіки.

Круги Ейлера/діаграми Венна: кон'юнкція відповідає перетину, диз'юнкція — об'єднанню, заперечення — доповненню

Наочно: на діаграмі Венна кожній точці універсуму відповідає рядок таблиці істинності (за тим, у яких колах вона лежить), а заштрихована область — це саме ті рядки, де складений вираз дорівнює 11. Тому ABA \wedge B «висвічує» перетин, ABA \vee B — об’єднання, а ¬A\neg A — усе поза колом AA.

Приклад 3.7 (характеристичний вектор — точний місток). Зафіксуймо універсум U={1,2,3}U = \{1,2,3\} і підмножини A={1,2}A = \{1,2\}, B={2,3}B = \{2,3\}. Кожній підмножині зіставмо її характеристичний вектор із бітів (одиниця на позиції елемента, що належить множині):

χA=(1,1,0),χB=(0,1,1).\chi_A = (1,1,0), \qquad \chi_B = (0,1,1).

Тоді покоординатно χAχB=(0,1,0)=χAB\chi_A \wedge \chi_B = (0,1,0) = \chi_{A \cap B} (бо AB={2}A \cap B = \{2\}); χAχB=(1,1,1)=χAB\chi_A \vee \chi_B = (1,1,1) = \chi_{A \cup B} (бо AB=UA \cup B = U); ¬χA=(0,0,1)=χA\neg\chi_A = (0,0,1) = \chi_{\overline{A}} (бо A={3}\overline{A} = \{3\}). Відповідність AχAA \mapsto \chi_A — бієкція між множиною-ступенем P(U)\mathcal{P}(U) та множиною бітових векторів {0,1}U\{0,1\}^{|U|}, яка зберігає всі операції. Ось чому підмножину nn-елементного універсуму зберігають у комп’ютері як одне nn-бітове слово, а операції над множинами виконують побітовими командами процесора.

Демонструє один із законів де Моргана вже суто «множинно» і наступний рисунок.

Закон де Моргана на діаграмах Венна: доповнення об'єднання збігається з перетином доповнень


3.7 Функціональна повнота та базиси

Ми бачили 1616 функцій двох змінних і навіть 22n2^{2^n} функцій узагалі. Виникає природне питання: чи достатньо кількох операцій, щоб виразити всі решту?

Означення (функціональна повнота). Набір булевих операцій називають функціонально повним (базисом), якщо будь-яку булеву функцію будь-якого числа змінних можна записати формулою, що використовує лише операції цього набору (та змінні й, за потреби, сталі).

Базис ТА-АБО-НІ ({¬,,}\{\neg, \wedge, \vee\})

Теорема 3.8 (повнота базису ТА-АБО-НІ). Набір {¬,,}\{\neg, \wedge, \vee\} функціонально повний.

Доведення (через досконалу диз’юнктивну нормальну форму). Нехай f(x1,,xn)f(x_1, \dots, x_n) — довільна булева функція. Якщо f0f \equiv 0, то f=x1¬x1f = x_1 \wedge \neg x_1 (сталий нуль виражається). Інакше розгляньмо всі вхідні набори α=(a1,,an)\alpha = (a_1, \dots, a_n), на яких f(α)=1f(\alpha) = 1. Кожному такому набору зіставмо конституенту одиниці (мінтерм)

Kα=12n,i={xi,ai=1,¬xi,ai=0, K_\alpha = \ell_1 \wedge \ell_2 \wedge \dots \wedge \ell_n, \qquad \ell_i = \begin{cases} x_i, & a_i = 1,\\ \neg x_i, & a_i = 0, \end{cases}

яка дорівнює 11 рівно на наборі α\alpha і 00 на всіх інших. Тоді

f=α:f(α)=1Kαf = \bigvee_{\alpha:\, f(\alpha)=1} K_\alpha

— диз’юнкція всіх таких мінтермів приймає значення 11 саме на тих наборах, де f=1f = 1. Ця формула використовує лише ¬,,\neg, \wedge, \vee, тож набір повний. \blacksquare

Побудований у доведенні вираз — це досконала диз’юнктивна нормальна форма (ДДНФ) функції; докладно нормальні форми ДНФ/КНФ вивчатимемо в Лекції 4. Уже зараз важливий висновок: кожну з 1616 функцій двох змінних можна записати через ТА-АБО-НІ, і ось цей повний перелік (зі слайдів лекції):

Усі 16 функцій двох змінних, виражені в базисі ТА-АБО-НІ: для кожної наведено її вихідний вектор і формулу через заперечення, кон'юнкцію та диз'юнкцію

FkF_k вихід CC на (A,B)=00,01,10,11(A,B){=}00,01,10,11 вираз у базисі {¬,,}\{\neg,\wedge,\vee\}
F0F_0 00000000 00
F1F_1 00010001 ABA \wedge B
F2F_2 00100010 A¬BA \wedge \neg B
F3F_3 00110011 AA
F4F_4 01000100 ¬AB\neg A \wedge B
F5F_5 01010101 BB
F6F_6 01100110 A¬B  ¬ABA \wedge \neg B \ \vee\ \neg A \wedge B
F7F_7 01110111 ABA \vee B
F8F_8 10001000 ¬A¬B\neg A \wedge \neg B
F9F_9 10011001 AB  ¬A¬BA \wedge B \ \vee\ \neg A \wedge \neg B
F10F_{10} 10101010 ¬B\neg B
F11F_{11} 10111011 A¬BA \vee \neg B
F12F_{12} 11001100 ¬A\neg A
F13F_{13} 11011101 ¬AB\neg A \vee B
F14F_{14} 11101110 ¬A¬B\neg A \vee \neg B
F15F_{15} 11111111 11

Зверніть увагу, як звичні операції лягли в перелік: F6F_6 — це XOR, записаний через базис; F9F_9 — еквівалентність; F8F_8 — NOR; F14F_{14} — NAND; F13F_{13} та F11F_{11} — дві імплікації. Це конкретне підтвердження теореми: усі 1616 функцій справді виражаються через ТА-АБО-НІ.

Понад те, за законами де Моргана навіть {,¬}\{\wedge, \neg\} і {,¬}\{\vee, \neg\} — повні базиси: одне з двох (\wedge або \vee) зайве. А чи можна обійтися однією операцією? Так — і аж двома способами.

Базис NOR ({}\{\downarrow\})

Твердження 3.9 (повнота стрілки Пірса). Сама лише операція \downarrow функціонально повна. Зокрема:

¬A=AA,AB=(AB)(AB),AB=(AA)(BB). \neg A = A \downarrow A, \qquad A \vee B = (A \downarrow B) \downarrow (A \downarrow B), \qquad A \wedge B = (A \downarrow A) \downarrow (B \downarrow B).

Доведення. Достатньо виразити повний базис {¬,,}\{\neg, \vee, \wedge\} через \downarrow; тоді за Теоремою 3.8 виражається все.

  • AA=¬(AA)=¬AA \downarrow A = \neg(A \vee A) = \neg A (ідемпотентність \vee).
  • AB=¬¬(AB)=¬(AB)=(AB)(AB)A \vee B = \neg\neg(A \vee B) = \neg(A \downarrow B) = (A \downarrow B) \downarrow (A \downarrow B) (за попереднім рядком, застосованим до X=ABX = A \downarrow B).
  • AB=¬(¬A¬B)=¬A¬B=(AA)(BB)A \wedge B = \neg(\neg A \vee \neg B) = \neg A \downarrow \neg B = (A \downarrow A) \downarrow (B \downarrow B) (де Морган, тоді заперечення аргументів через \downarrow). \blacksquare

Перевірка базису NOR таблицею істинності: A↓A відтворює заперечення, а комбінації стрілки Пірса дають кон'юнкцію та диз'юнкцію

Базис NAND ({}\{\mid\})

Твердження 3.10 (повнота штриха Шефера). Сама лише операція \mid функціонально повна. Зокрема:

¬A=AA,AB=(AB)(AB),AB=(AA)(BB). \neg A = A \mid A, \qquad A \wedge B = (A \mid B) \mid (A \mid B), \qquad A \vee B = (A \mid A) \mid (B \mid B).

Доведення. Двоїсто до NOR.

  • AA=¬(AA)=¬AA \mid A = \neg(A \wedge A) = \neg A.
  • AB=¬¬(AB)=¬(AB)=(AB)(AB)A \wedge B = \neg\neg(A \wedge B) = \neg(A \mid B) = (A \mid B) \mid (A \mid B).
  • AB=¬(¬A¬B)=¬A¬B=(AA)(BB)A \vee B = \neg(\neg A \wedge \neg B) = \neg A \mid \neg B = (A \mid A) \mid (B \mid B) (де Морган). \blacksquare

Перевірка базису NAND таблицею істинності: A|A відтворює заперечення, а комбінації штриха Шефера дають кон'юнкцію та диз'юнкцію

Зауваження (чому це важливо для апаратури). Те, що NAND (або NOR) сам по собі повний, має практичне значення: цілу цифрову схему можна побудувати з елементів одного типу. Це спрощує виробництво й уніфікує технологію; історично цілі сімейства мікросхем виготовляли на самих лише вентилях NAND. До фізичних логічних елементів і схем повернемося в Лекції 4.


3.8 Алгебра Жегалкіна

Досі диз’юнкція \vee була нашим «додаванням». Але вона незручна для алгебри: у неї немає оберненого (AX=0A \vee X = 0 не завжди розв’язне). Ідея алгебри Жегалкіна — узяти за додавання виключне «або» \oplus (додавання за модулем 22), лишивши множенням кон’юнкцію \wedge. Тоді {0,1}\{0,1\} стає повноцінним полем із двох елементів, а булеві функції — многочленами над ним.

Отже, дві операції алгебри Жегалкіна:

 (множення, xy)та (додавання за модулем 2).\wedge \ (\text{множення, }xy) \qquad\text{та}\qquad \oplus \ (\text{додавання за модулем } 2).

Тотожності

Для кон’юнкції зберігаються звичні властивості (як у булевій алгебрі):

x(yz)=(xy)z,xy=yx,xx=x,x0=0,x1=x.x(yz) = (xy)z, \qquad xy = yx, \qquad x \wedge x = x, \qquad x \wedge 0 = 0, \qquad x \wedge 1 = x.

Виключне «або» поводиться як додавання за модулем 22:

x(yz)=(xy)z,xy=yx,x \oplus (y \oplus z) = (x \oplus y) \oplus z, \qquad x \oplus y = y \oplus x,

xx=0 (зведення подібних доданків),x0=x,x \oplus x = 0 \ \text{(зведення подібних доданків)}, \qquad x \oplus 0 = x,

а кон’юнкція дистрибутивна відносно \oplus:

x(yz)=xyxz.x(y \oplus z) = xy \oplus xz.

Зауваження (контраст із булевою алгеброю). Порівняйте xx=xx \wedge x = x (ідемпотентність, лишається) з xx=0x \oplus x = 0 (замість «ідемпотентності» додавання маємо самознищення). Це і є ключова відмінність: \oplus — не насичене «або», а справжнє додавання з оберненим, і оберненим до xx є сам xx.

Самооберненість XOR

Найкорисніша властивість \oplus — те, що кожен елемент є оберненим сам до себе.

Твердження 3.11 (самооберненість XOR). Для всіх булевих a,ba, b:

aa=0,aba=b,bab=a.a \oplus a = 0, \qquad a \oplus b \oplus a = b, \qquad b \oplus a \oplus b = a.

Доведення. Рівність aa=0a \oplus a = 0 читається з таблиці XOR (рядки 0000 і 1111 дають 00) або з a+a=2a0(mod2)a + a = 2a \equiv 0 \pmod 2. Далі, користуючись комутативністю й асоціативністю:

aba=(aa)b=0b=b.a \oplus b \oplus a = (a \oplus a) \oplus b = 0 \oplus b = b.

Симетрично bab=(bb)a=0a=ab \oplus a \oplus b = (b \oplus b) \oplus a = 0 \oplus a = a. \blacksquare

Застосування (XOR-шифр і обмін значень). Із aba=ba \oplus b \oplus a = b негайно випливає, що застосувати XOR із ключем aa двічі — означає повернути початкове значення: (ba)a=b(b \oplus a) \oplus a = b. На цьому стоять найпростіший потоковий шифр (гамування) та відомий трюк обміну двох змінних без третьої: x=y; y=x; x=yx \mathrel{\oplus}= y;\ y \mathrel{\oplus}= x;\ x \mathrel{\oplus}= y.

Зображення основних операцій через {,,1}\{\wedge, \oplus, 1\}

Набір {,,1}\{\wedge, \oplus, 1\} (кон’юнкція, XOR та стала 11) також є повним базисом. Ось ключові переклади зі звичних операцій:

¬x=x1,xy=xyxy.\neg x = x \oplus 1, \qquad x \vee y = x \oplus y \oplus xy.

Твердження 3.12. ¬x=x1\neg x = x \oplus 1 і xy=xyxyx \vee y = x \oplus y \oplus xy.

Доведення (таблицею істинності).

xx yy x1x \oplus 1 ¬x\neg x xyxy xyx \oplus y xyxyx \oplus y \oplus xy xyx \vee y
0 0 1 1 0 0 0 0
0 1 1 1 0 1 1 1
1 0 0 0 0 1 1 1
1 1 0 0 1 0 0 1

Стовпець x1x \oplus 1 збігається з ¬x\neg x, а стовпець xyxyx \oplus y \oplus xy — з xyx \vee y. \blacksquare

Перевірка зображень у базисі Жегалкіна: заперечення дорівнює x⊕1, а диз'юнкція — x⊕y⊕xy

Маючи ¬x=x1\neg x = x \oplus 1, легко перекласти й решту операцій:

xy=¬(xy)=1xy,xy=¬(xy)=1xyxy,x \mid y = \neg(xy) = 1 \oplus xy, \qquad x \downarrow y = \neg(x \vee y) = 1 \oplus x \oplus y \oplus xy,

xy=¬xy=1xxy,xy=1xy.x \to y = \neg x \vee y = 1 \oplus x \oplus xy, \qquad x \leftrightarrow y = 1 \oplus x \oplus y.

(Останню варто запам’ятати: еквівалентність — це заперечення XOR, а отже просто 1xy1 \oplus x \oplus y.)

Многочлен Жегалкіна

Розкриваючи всі дужки за наведеними тотожностями й зводячи подібні доданки (xx=0x \oplus x = 0, xx=xx \wedge x = x), будь-який булев вираз можна звести до канонічного вигляду — суми (за модулем 22) різних кон’юнкцій змінних без заперечень.

Означення (многочлен Жегалкіна). Многочленом Жегалкіна функції f(x1,,xn)f(x_1, \dots, x_n) називають її запис у вигляді

f=c0  icixi  i<jcijxixj    c12nx1x2xn, f = c_0 \ \oplus\ \bigoplus_{i} c_i\, x_i \ \oplus\ \bigoplus_{i<j} c_{ij}\, x_i x_j \ \oplus\ \dots\ \oplus\ c_{12\dots n}\, x_1 x_2 \cdots x_n,

де кожен коефіцієнт c{0,1}c \in \{0,1\}, а всі кон’юнкції різні й без повторів змінних (многочлен лінійний за кожною змінною, бо xixi=xix_i \wedge x_i = x_i).

Теорема 3.13 (існування та єдиність). Кожна булева функція nn змінних має многочлен Жегалкіна, і притому єдиний.

Доведення (ескіз). Існування: візьмемо ДДНФ функції (Теорема 3.8); мінтерми попарно не перетинаються (жоден набір не задовольняє двох одразу), тому диз’юнкцію мінтермів можна замінити на \oplus без зміни значення; далі кожне ¬xi\neg x_i замінюємо на xi1x_i \oplus 1 і розкриваємо дужки за дистрибутивністю x(yz)=xyxzx(y \oplus z) = xy \oplus xz, зводячи подібні. Дістаємо многочлен потрібного вигляду. Єдиність: різних одночленів (кон’юнкцій підмножин змінних) рівно 2n2^n, тож різних многочленів рівно 22n2^{2^n} — стільки ж, скільки булевих функцій (Теорема 3.1). Оскільки кожна функція має принаймні один многочлен, а кількості збігаються, відповідність «функція \leftrightarrow многочлен» бієктивна, тобто многочлен єдиний. \blacksquare

Приклад 3.14 (многочлен для диз’юнкції). Виведемо xyx \vee y алгебраїчно, без таблиці. ДДНФ диз’юнкції — це мінтерми на трьох одиничних наборах: xy=¬xy  x¬y  xyx \vee y = \neg x\, y \ \vee\ x\, \neg y \ \vee\ x y. Мінтерми диз’юнктні, тому замінюємо \vee на \oplus, а ¬\neg — на  1\ \cdot \oplus 1:

xy=(x1)y  x(y1)  xy(ДДНФ; , ¬t=t1)=(xyy)  (xyx)  xy(дистрибутивність)=xy(xyxyxy)(комутативність, групування)=xyxy.(xyxy=0)\begin{aligned} x \vee y &= (x \oplus 1)y \ \oplus\ x(y \oplus 1) \ \oplus\ xy && \text{(ДДНФ; } \vee\to\oplus,\ \neg t = t\oplus 1)\\ &= (xy \oplus y) \ \oplus\ (xy \oplus x) \ \oplus\ xy && \text{(дистрибутивність)}\\ &= x \oplus y \oplus (xy \oplus xy \oplus xy) && \text{(комутативність, групування)}\\ &= x \oplus y \oplus xy. && (xy \oplus xy = 0) \end{aligned}

Це збігається з формулою Твердження 3.12.

Приклад 3.15 (многочлен для імплікації). Аналогічно xy=¬xyx \to y = \neg x \vee y. Скориставшись ab=ababa \vee b = a \oplus b \oplus ab з a=¬x=x1a = \neg x = x \oplus 1, b=yb = y:

xy=(x1)y(x1)y=x1y(xyy)=1xxy.(yy=0)\begin{aligned} x \to y &= (x \oplus 1) \oplus y \oplus (x \oplus 1)y\\ &= x \oplus 1 \oplus y \oplus (xy \oplus y)\\ &= 1 \oplus x \oplus xy. && (y \oplus y = 0) \end{aligned}

Отже, xy=1xxyx \to y = 1 \oplus x \oplus xy — вільний член дорівнює 11, тому функція приймає значення 11 на «майже всіх» наборах, окрім тих, де xxy=1x \oplus xy = 1, тобто x=1,y=0x = 1, y = 0 — саме той єдиний рядок, де імплікація хибна.

Зауваження (лінійні функції та застосування). Функції, у многочлені яких немає жодного добутку змінних (лише \oplus і, можливо, 11), називають лінійними: це 0,1,xi,xixj,0, 1, x_i, x_i \oplus x_j, \dots та функція парності x1xnx_1 \oplus \dots \oplus x_n. Парність — основа контрольних сум і кодів виявлення помилок: один додатковий біт парності виявляє будь-яку одиничну помилку в переданому чи записаному блоці даних.


3.9 Застосування у видавництві та поліграфії

Булева алгебра — робоча математика машинного рівня, і фах видавця та поліграфіста стикається з нею повсюдно:

  • Растрові маски й побітові операції. Однобітове зображення (чорне/біле) — це бітова карта; накладання, вирізання та інверсія масок — це покоординатні ,,¬\wedge, \vee, \neg (той самий ізоморфізм множин і бітів із §3.6). Виключне «або» двох версій растру старанова\text{стара} \oplus \text{нова} висвічує рівно ті пікселі, що змінилися, — зручний спосіб порівняти дві коректури.
  • Умови в препресі та автоматизації. Правила складання завдань на друк — булеві вирази: «друкувати, якщо (кольорове  ¬\wedge\ \negчернетка) \vee ручне перевизначення». Спрощення таких умов за законами §3.5 усуває зайві перевірки й «мертві» гілки.
  • Порогові рішення півтонування. Перетворення напівтонового зображення на растрову (бінарну) точку — це булева функція «яскравість вища за поріг?»; матриці дизерингу задають цілі таблиці таких рішень.
  • Один тип вентиля в контролерах. Схеми керування друкарським та фінішним обладнанням реалізують на стандартних логічних елементах; повнота NAND і NOR (§3.7) означає, що будь-яку логіку керування можна зібрати з елементів одного типу.
  • Контроль цілісності файлів. Біти парності та контрольні суми на основі XOR (лінійні функції Жегалкіна, §3.8) виявляють спотворення файлів під час передавання на RIP чи запису — одиничний збій змінює парність і одразу помітний.

Підсумок

  • Висловлення — розповідне речення, яке однозначно істинне або хибне; значення кодуємо як 11 (істина, TT, І) та 00 (хиба, FF, Х). Складені висловлення істиннісно-функціональні: їхнє значення залежить лише від значень частин і сполучників.
  • Булева функція nn змінних — це таблиця істинності з 2n2^n рядків; таких функцій рівно 22n2^{2^n} (доведено підрахунком рядків, а тоді заповнень). Для n=2n=2 маємо 1616 функцій F0,,F15F_0, \dots, F_{15}.
  • Основні операції та їхні таблиці: заперечення ¬\neg, кон’юнкція \wedge (AND), диз’юнкція \vee (OR, включне), виключне «або» \oplus (XOR), стрілка Пірса \downarrow (NOR), штрих Шефера \mid (NAND), еквівалентність \leftrightarrow (XNOR). Пріоритет: ¬,,\neg \succ \wedge \succ \vee, \oplus \succ \to, \leftrightarrow.
  • Аксіоми (комутативність, асоціативність, дистрибутивність, поглинання, доповнення) та закони (ідемпотентність, дії з 00 та 11, доповнення, де Моргана, подвійне заперечення) йдуть дуальними парами; ключові доведено таблицею істинності. Тотожності можна виводити й алгебраїчно.
  • Логіка, множини й біти — одна структура: \wedge\leftrightarrow\cap, \vee\leftrightarrow\cup, ¬\neg\leftrightarrow доповнення, 00\leftrightarrow\varnothing, 1U1\leftrightarrow U; відповідність AχAA\mapsto\chi_A зберігає всі операції, тож кожен закон переноситься між трьома «обличчями».
  • Функціональна повнота: базис {¬,,}\{\neg,\wedge,\vee\} (ТА-АБО-НІ) виражає будь-яку функцію (через ДДНФ); понад те, повні навіть окремо взяті \downarrow (NOR) та \mid (NAND) — з формулами ¬A=AA=AA\neg A = A\downarrow A = A\mid A і т. д.
  • Алгебра Жегалкіна: операції \wedge (множення) та \oplus (додавання за модулем 22); XOR самооборотне (aa=0a\oplus a=0, aba=ba\oplus b\oplus a=b); кожна функція має єдиний многочлен Жегалкіна; переклади ¬x=x1\neg x=x\oplus1, xy=xyxyx\vee y=x\oplus y\oplus xy, xy=1xyx\leftrightarrow y=1\oplus x\oplus y.
  • Далі: у Лекції 4 — логічні елементи та схеми, нормальні форми ДНФ/КНФ (ДДНФ/ДКНФ) та систематична мінімізація булевих функцій (зокрема карти Карно).

Вправи

Для розігріву

  1. Класифікуйте кожне речення як висловлення чи ні; для висловлення вкажіть значення, якщо його можна визначити: (а) «1717 — просте число»; (б) «Прочитайте Лекцію 3»; (в) «x2=4x^2 = 4»; (г) «Кожне парне число, більше за 22, є сумою двох простих»; (ґ) «Ой!».
  2. З пам’яті випишіть таблиці істинності операцій ¬A\neg A, ABA \wedge B, ABA \vee B, ABA \oplus B, ABA \downarrow B, ABA \mid B, ABA \leftrightarrow B. Для кожної однією фразою скажіть, коли вона дорівнює 11.
  3. Обчисліть значення (AB)¬C(A \vee B) \wedge \neg C та A(B¬C)A \to (B \vee \neg C) при A=1A = 1, B=0B = 0, C=1C = 1.
  4. Розставте всі дужки згідно з пріоритетом: (а) ¬ABC\neg A \wedge B \vee C; (б) AB¬CA \vee B \to \neg C; (в) ¬¬AB\neg\neg A \wedge B.
  5. Дайте для кожної з операцій \wedge, \vee, ¬\neg, 00, 11 її відповідник в алгебрі множин.

Стандартні

  1. Побудуйте повну таблицю істинності виразу (A¬B)C(A \vee \neg B) \wedge C і вкажіть, на скількох із 88 рядків він дорівнює 11.
  2. Доведіть таблицею істинності другий закон де Моргана ¬(AB)=¬A¬B\neg(A \vee B) = \neg A \wedge \neg B (порівняйте з доведенням у тексті).
  3. Спростіть алгебраїчно, називаючи кожен закон: (а) (AB)(A¬B)(A \wedge B) \vee (A \wedge \neg B); (б) (AB)(¬AB)(A \vee B) \wedge (\neg A \vee B). Кожен вираз має звестися до однієї змінної.
  4. Користуючись лише формулами базису NAND (¬A=AA\neg A = A \mid A, …), запишіть ABA \vee B через штрих Шефера й перевірте результат таблицею істинності.
  5. Доведіть тотожність aba=ba \oplus b \oplus a = b спершу алгебраїчно (як у Твердженні 3.11), а тоді таблицею істинності для всіх чотирьох наборів (a,b)(a,b).
  6. Побудуйте многочлен Жегалкіна функції ABA \leftrightarrow B (еквівалентність) і переконайтеся, що він дорівнює 1AB1 \oplus A \oplus B.

Підвищеної складності

  1. Скільки є булевих функцій 33 змінних? 55 змінних? Зі 1616 функцій двох змінних скільки комутативних (тобто f(A,B)=f(B,A)f(A,B) = f(B,A))? Обґрунтуйте останнє число.
  2. Виразіть кон’юнкцію ABA \wedge B лише через стрілку Пірса \downarrow, використавши якнайменше входжень операції, і доведіть коректність.
  3. Побудуйте многочлен Жегалкіна для «мажоритарної» функції трьох змінних maj(x,y,z)\mathrm{maj}(x,y,z), що дорівнює 11, коли принаймні дві змінні дорівнюють 11. (Підказка: почніть з ДДНФ або скористайтеся тим, що maj=xyyzxz\mathrm{maj} = xy \vee yz \vee xz, і перекладіть у \oplus.)
  4. Функцію називають лінійною, якщо її многочлен Жегалкіна не містить добутків змінних. Скільки є лінійних функцій nn змінних? Скільки з них істотно залежать від усіх nn змінних?

Lectures/ODM-L03.md · 62.4 KB · updated 2026-08-04 14:29