2. Algebra Boole’a i przekształcenia boolowskie

2.2. Przekształcenia boolowskie

Innym typowym zastosowaniem algebry Boole’a jest przekształcanie wyrażeń boolowskich z postaci typu „iloczyn sum” (CNF Conjunctive Normal Form) na postać typu „suma iloczynów” (DNF – Disjunctive Normal Form).

Korzysta się przy tym z zasad uproszczonego mnożenia, z których pierwsza jest omawianą już zasadą rozdzielności dodawania względem mnożenia, a drugą wykazujemy poniżej.

 

            Wykazać, że:  \left(x+y\right)\left(\bar{x}+z\right)=\ xz+\bar{x}y

\begin{array}{{>{\displaystyle}l}} ( x+y)\left(\overline{x} +z\right) =x\overline{x} +xz+\overline{x} y+yz=xz+\overline{x} y+yz=\\ =xz+\overline{x} y+1yz=xz+\overline{x} y+\left( x+\overline{x}\right) yz=xz+\overline{x} y+xyz+\overline{x} yz=\\ =xz+xyz+\overline{x} y+\overline{x} yz=xz( 1+y) +\overline{x} yy( 1+1) =\ xz+\overline{x} y \end{array}

 

Podane wyrażenie typu „iloczyn sum”:

 

(A+B+\bar{C})\left(A+B+D\right)\left(A+B+E\right)(A+\bar{D}+E)\left(\bar{A}+C\right)

 

przedstawić w postaci sumy iloczynów.

 

Rozwiązanie

(A+B+\bar{C})\left(A+B+D\right)\left(A+B+E\right)(A+\bar{D}+E)\left(\bar{A}+C\right)=

\begin{array}{{>{\displaystyle}l}} =\left( A+B+\overline{C} DE\right)\left( AC+\overline{A}\left(\overline{D} +E\right)\right) =\left( A+B+\overline{C} DE\right)\left( AC+\overline{A}\overline{D} +\overline{A} E\right) =\\ =AC+ABC+\overline{A} B\overline{D} +\overline{A} BE+\overline{A}\overline{C} DE=AC+\overline{A} B\overline{D} +\overline{A} BE+\overline{A}\overline{C} DE \end{array}

 

 

Ogromne znaczenie w syntezie logicznej mają przekształcenia wyrażeń boolowskich jednorodnych, tzn. takich w których zmienne występują wyłącznie w postaci prostej albo zanegowanej.

Wyrażenie typu CNF:  

(x2+x4)(x3+x4)(x3+x5)(x1+x2+x3) można przekształcić do postaci DNF w sposób następujący:

(x4+x2)(x4+x3)(x3+x5)(x3+x1+x2) = (x4+x2x3)(x3+x1x5+x2x5) = x3x4+x1x4x5+x2x4x5+x2x3

 

Nietrudno przypuszczać, że w praktycznych zastosowaniach będziemy mieli do czynienia z bardziej rozbudowanymi przekształceniami CNF na DNF. W celu ułatwienia skomplikowanych obliczeń i zapisów zmienne boolowskie xi, xj, xk będziemy reprezentowali ich indeksami i, j, k.

(3 + 7)(2 + 5 + 8)(3 + 6 + 8)(6 + 7 + 8)(3 + 5 + 6) = (3 + 7) (3 + 6 + 58)(8 + (2 + 5)
(6 + 7)) = (3 + 36 + 358 + 37 + 67 + 578)(8 + 26 + 27 + 56 + 57) = 38 + 236 + 237 +

+ 356 + 357 + 678 + 267 + 267 + 567 + 567 + 578 + 25678 + 2578 + 5678 + 578

= 38 + 236 + 237 + 356 + 357 + 678 + 267 + 567 + 578

 

Transformacja CNF na DNF jest również wygodnym i często stosowanym narzędziem przy obliczaniu pokrycia kolumnowego binarnej macierzy M.

Pokryciem kolumnowym binarnej macierzy reprezentowanej tablicą M

 

M=\left[m_{ij}\right],\ i\in\left\{1,\ldots,w\right\},\ j\in\left\{1,\ldots,n\right\}

 

jest zbiór   L\ \in\left\{1,\ldots,n\right\}  taki, że dla każdego i\in{1,\ldots,w}  istnieje \ j\in\ L,  dla którego m_{ij}=1 . Jeżeli usunięcie którejkolwiek z kolumn skutkuje brakiem pokrycia, jest to minimalne pokrycie kolumnowe. Inaczej mówiąc elementami pokrywanymi są wiersze M, a pokrywającymi – kolumny tej macierzy. Jednak brak formalnych elementów pokrywanych i pokrywających skłania do wprowadzenia nazwy „pokrycie kolumnowe”.    

W wyrażeniu CNF czynniki koniunkcji są dysjunkcjami zmiennych boolowskich etykietujących te kolumny M dla których w danym wierszu m_{ij}=1 . Liczba czynników jest równa liczbie wierszy macierzy M. Istotnym problemem jest transformacja CNF na DNF, gdyż składniki wyrażenia DNF są koniunkcjami zmiennych reprezentujących kolumny macierzy M.

 

Tabl. 1.1

L1

L2

L3

L4

L5

L6

L7

0

0

0

0

0

1

1

0

0

1

1

0

0

0

0

1

0

1

0

0

0

0

1

1

0

0

0

1

 

Dla macierzy M (Tabl. 1.1) stosowne obliczenia są następujące:

 

(L6 + L7) (L3 + L4) (L2 + L4) (L2 + L3 + L7) = (L4 + L2)(L4 + L3)( L7 + L6)(L7 + L2 + L3) =

=(L4 + L2 L3)(L7 + L6(L2 + L3)) = (L4 + L2 L3)(L7 + L2L6+ L3L6) = L4 L7 + L2 L4L6 + L3L4L6 + + L2 L3L7 + L2 L3L6  

Na tej podstawie stwierdzamy, że wszystkie minimalne pokrycia kolumnowe macierzy z Tabl. 1.1 są reprezentowane zbiorami: {<i>L</i><sub>4</sub>, <i>L</i><sub>7</sub>}, {<i>L</i><sub>2</sub>, <i>L</i><sub>4</sub>, <i>L</i><sub>6</sub>}, {<i>L</i><sub>3</sub>, <i>L</i><sub>4</sub>, <i>L</i><sub>6</sub>}, {<i>L</i><sub>2</sub>, <i>L</i><sub>3</sub>, <i>L</i><sub>7</sub>}, {<i>L</i><sub>2</sub>, <i>L</i><sub>3</sub>, <i>L</i><sub>6</sub>}. Zauważmy, że dla każdego wiersza tej tablicy elementy wskazywane przez kolumny Li należące do obliczonych podzbiorów zawierają zawsze co najmniej