Systemy funkcjonalnie pełne

Systemy funkcjonalnie pełne


Każda formuła odpowiada pewnej funkcji przekształcającej wartościowania zmiennych w niej występujących w element zbioru \( \mathbb{B} \). Na przykład formuła \( p \Rightarrow (q\Rightarrow r) \) wyznacza funkcję \( f_{p \Rightarrow (q\Rightarrow r)} \) opisaną poniższą tabelą

\( \mathrm {p} \) \( \mathrm {q} \) \( \mathrm {r} \) \( f_{p arrow _(q arrow r)} \)
 0   0   0  1
0 0 1 1
0 1 0 1
0 1 1 1
1 0 0 1
1 0 1 1
1 1 0 0
1 1 1 1

Mówimy, wtedy że formuła \( {\phi} \) definuje funkcję \( f_{\phi} \).

Definicja 5.1

Skończony zbiór funkcji boolowskich \( {\Gamma} \) nazywamy funkcjonalnie pełnym, jeśli każdą funkcję boolowską da się zdefiniować przy pomocy formuły zbudowanej wyłącznie ze spójników odpowiadających funkcjom ze zbioru \( {\Gamma} \).

Twierdzenie 5.2

Zbiór \( \{\wedge, \vee, \neg\} \) jest funkcjonalnie pełny.

Dowód

Dla dowolnej funkcji boolowskiej skonstruujemy formułę która ją definiuje. Niech \( \displaystyle k\in \) oraz \( \displaystyle f:\mathbb{B}^k arrow \; \mathbb{B} \). W definiowanej formule będziemy używać zmiennych \( \displaystyle p_1, \dots,p_k \), a każdy element \( \displaystyle (w_1,\ldots,w_k) \in \mathbb{B}^k \) będzie odpowiadał wartościowaniu \( \displaystyle v_w \) takiemu, że \( \displaystyle v(p_i)=w_i \).

Niech \( \displaystyle F \) będzie zbiorem tych argumentów, dla których funkcja \( \displaystyle f \) przyjmuje wartość 1. Dla dowolnego elementu \( \displaystyle x_i \in F \) skonstruujemy formułę \( \displaystyle \phi_i \) w taki sposób, aby była spełniona tylko dla wartościowania odpowiadającego elementowi \( \displaystyle x_i \). Niech \( \displaystyle x_i= (w_1,\dots,w_k) \), wtedy formułę \( \displaystyle \phi_i \) definiujemy jako \( \displaystyle l^i_1 \wedge l^i_2 \wedge \dots \wedge l^i_k \) gdzie

\( \displaystyle l^i_j \begin{cases} p_j, & \mbox{gdy } w_j = 1 \displaystyle ; \\ \neg p_j, & \mbox{gdy } w_j = 0 \displaystyle .\end{cases} \)

Łatwo sprawdzić, że formuła \( \displaystyle \phi_i \) jest spełniona tylko dla wartościowania odpowiadającego elementowi \( \displaystyle x_i \).

Postępując w ten sposób dla każdego elementu zbioru \( \displaystyle F \) otrzymamy formuły \( \displaystyle \phi_1, \dots \phi_m \). Biorąc
\( \displaystyle \phi_1 \vee \dots \vee \phi_m \)

otrzymamy formułę która definiuje funkcję \( \displaystyle f \), oznaczmy ją przez \( \displaystyle \Phi \). Jeśli dla wartościowania \( \displaystyle v \) formuła \( \displaystyle \Phi \) jest spełniona to znaczy, że któraś z formuł \( \displaystyle \phi_i \) jest spełniona. Oznacza to że wartościowanie \( \displaystyle v \) odpowiada pewnemu elementowi \( \displaystyle x_i \) zbioru \( \displaystyle F \), wobec tego funkcja \( \displaystyle f(x_i)=1 \) co jest zgodne z tym, że spełniona jest \( \displaystyle \Phi \). W drugą stronę załóżmy że dla pewnego elementu \( \displaystyle a\in \mathbb{B}^k \) mamy \( \displaystyle f(a)=1 \). Wobec tego \( \displaystyle a\in F \). Wtedy \( \displaystyle a \) odpowiada pewnej formule \( \displaystyle \phi_i \), która jest spełniona dla wartościowania odpowiadającego \( \displaystyle a \). Wobec tego również cała formuła \( \displaystyle \Phi \) jest spełniona dla tego wartościowania (bo jeden z elementów alternatywy jest spełniony). Wynika stąd, że formuła \( \displaystyle \Phi \) definiuje funkcję \( \displaystyle f \). Na koniec zauważmy jeszcze że jedynymi spójnikami występującymi w formule \( \displaystyle \Phi \) są \( \displaystyle \neg, \vee, \wedge \).

Twierdzenie 5.3

Zbiory \( \{\wedge, \neg\} \), \( \{\vee, \neg\} \) są funkcjonalnie pełne.

Dowód

Aby pokazać, że \( \displaystyle \{\wedge, \neg\} \) jest funkcjonalnie pełny wystarczy pokazać, że przy pomocy spójników \( \displaystyle \{\wedge, \neg\} \) da się zdefiniować \( \displaystyle \vee \). Wtedy funkcjonalną pełność otrzymamy z twierdzenia 5.2. W ćwiczeniu 4.2 pokazaliśmy, że

\( \displaystyle \neg (x \vee y) = \neg x \wedge \neg y. \)
Wobec tego
\( \displaystyle x \vee y =\neg(\neg x \wedge \neg y) \)

a więc zdefiniowaliśmy \( \displaystyle \vee \) przy pomocy \( \displaystyle \neg, \wedge \).

Analogicznie aby pokazać funkcjonalną pełność zbioru \( \displaystyle \{\vee, \neg\} \) zdefiniujemy \( \displaystyle \wedge \) przy pomocy spójników \( \displaystyle \vee, \neg \). Z <ćwiczenia 4.2 mamy
\( \displaystyle \neg(x \wedge y)= \neg x \vee \neg y \)
a więc
\( \displaystyle x \wedge y=\neg( \neg x \vee \neg y). \)

Ćwiczenie 5.1

Udowodnij, że zbiór \( \displaystyle \{\Rightarrow, \neg\} \) jest funkcjonalnie pełny.

Twierdzenie 5.4

Zbiór \( \{NOR\} \) jest funkcjonalnie pełny.

Dowód
Pokażemy, że przy pomocy \( \displaystyle NOR \) można zdefiniować \( \displaystyle \neg \) oraz \( \displaystyle \vee \). Wtedy z twierdzenia twierdzenia 5.3 otrzymamy tezę twierdzenia.

Łatwo sprawdzić, że
\( \displaystyle p NOR p \equiv \neg. \)
Wiemy, że
\( \displaystyle p NOR q \equiv \neg (p\vee q). \)
Wobec tego mamy również
\( \displaystyle \neg(p NOR q) \equiv p\vee q. \)
Możemy teraz wyrazić negację za pomocą \( \displaystyle NOR \), otrzymamy wtedy
\( \displaystyle (p NOR q) NOR (p NOR q) \equiv p\vee q. \)

Ćwiczenie 5.2

Udowodnij, że zbiór \( \displaystyle \{NAND\} \) jest funkcjonalnie pełny.

Ćwiczenie 5.3

Zdefiniuj alternatywę przy pomocy samej implikacji.

Ćwiczenie 5.4

Jakie funkcje binarne da się zdefiniować przy pomocy samej implikacji?

Ćwiczenie 5.5

Udowodnij, że poniższe zbiory nie są funkcjonalnie pełne

  1. \( \{\wedge\} \)
  2. \( \{\vee\} \)
  3. \( \{\Leftrightarrow\} \)
  4. \( \{XOR\} \)

Ćwiczenie 5.6

Czy funkcje binarne, zdefiniowane za pomocą formuł zawierającyh jedynie przemienne spójniki, muszą być przemienne?


Ćwiczenie 5.7

(z wykładu prof. P.M.Idziaka) Niech \( F_n \) oznacza ilość boolowskich funkcji \( \mathrm {n} \) argumetnowych, a \( P_n \) ilość boolowskich funkcji \( \mathrm {n} \) argumentowych, takich że przy pomocy każdej z nich da się zdefiniować dowolną funkcję boolowską (czyli jeśli \( \circ \) jest takim spójnikiem to zbiór \( \{\circ\} \) jest funkcjonalnie pełny). Udowdnij istenienie poniższej granicy i wyznacz jej wartość
\( \lim_{n arrow \infty} \frac{P_n}{F_n} \)