Sztuczna inteligencja/SI Moduł 2/Postaci normalne formuł: Różnice pomiędzy wersjami
m Zastępowanie tekstu – „,</math>” na „</math>,” |
m Zastępowanie tekstu – „ \</math>” na „</math>” |
||
Linia 20: | Linia 20: | ||
jeden literał pozytywny. Nazywane są one klauzulami Horna (albo | jeden literał pozytywny. Nazywane są one klauzulami Horna (albo | ||
hornowskimi). Nietrudno zauważyć, że klauzula Horna postaci | hornowskimi). Nietrudno zauważyć, że klauzula Horna postaci | ||
<math>L_0\lor \neg L_1\lor\dots\lor \neg L_n | <math>L_0\lor \neg L_1\lor\dots\lor \neg L_n</math>,, gdzie <math>L_0</math>, jest literałem | ||
pozytywnym, a literały <math>\neg L_1,\dots,\neg L_n | pozytywnym, a literały <math>\neg L_1,\dots,\neg L_n</math>, są literałami | ||
negatywnymi, może być także zapisana w postaci implikacji | negatywnymi, może być także zapisana w postaci implikacji | ||
<math>L_1\land L_2\land\dots\land L_n\rightarrow L_0 | <math>L_1\land L_2\land\dots\land L_n\rightarrow L_0</math>,. | ||
Klauzule Horna, zapisane w postaci implikacji, to oczywiście dogodna | Klauzule Horna, zapisane w postaci implikacji, to oczywiście dogodna | ||
Linia 50: | Linia 50: | ||
<!-- begin{align} TODO: kolumny--> | <!-- begin{align} TODO: kolumny--> | ||
:{| width="400" | :{| width="400" | ||
|<!-- equation 81 --><math>\alpha\leftrightarrow\beta \;\;\; \equiv\;\;\; (\alpha\rightarrow\beta)\land(\beta\rightarrow\alpha) | |<!-- equation 81 --><math>\alpha\leftrightarrow\beta \;\;\; \equiv\;\;\; (\alpha\rightarrow\beta)\land(\beta\rightarrow\alpha)</math>, || ''(81)'' | ||
|- | |- | ||
|<!-- equation 82 --><math>\alpha\rightarrow\beta \;\;\; \equiv\;\;\; \neg\alpha\lor\beta | |<!-- equation 82 --><math>\alpha\rightarrow\beta \;\;\; \equiv\;\;\; \neg\alpha\lor\beta</math>, || ''(82)'' | ||
|- | |- | ||
|<!-- equation 83 --><math>\neg(\neg\alpha) \;\;\; \equiv\;\;\; \alpha | |<!-- equation 83 --><math>\neg(\neg\alpha) \;\;\; \equiv\;\;\; \alpha</math>, || ''(83)'' | ||
|- | |- | ||
|<!-- equation 84 --><math>\neg(\alpha\lor\beta) \;\;\; \equiv\;\;\; \neg\alpha\land\neg\beta | |<!-- equation 84 --><math>\neg(\alpha\lor\beta) \;\;\; \equiv\;\;\; \neg\alpha\land\neg\beta</math>, || ''(84)'' | ||
|- | |- | ||
|<!-- equation 85 --><math>\neg(\alpha\land\beta) \;\;\; \equiv\;\;\; \neg\alpha\lor\neg\beta | |<!-- equation 85 --><math>\neg(\alpha\land\beta) \;\;\; \equiv\;\;\; \neg\alpha\lor\neg\beta</math>, || ''(85)'' | ||
|- | |- | ||
|<!-- equation 86 --><math>\alpha\lor(\beta\land\gamma) \;\;\; \equiv\;\;\; (\alpha\lor\beta)\land(\alpha\lor\gamma) | |<!-- equation 86 --><math>\alpha\lor(\beta\land\gamma) \;\;\; \equiv\;\;\; (\alpha\lor\beta)\land(\alpha\lor\gamma)</math>, || ''(86)'' | ||
|- | |- | ||
|<!-- equation 87 --><math>\alpha\land(\beta\lor\gamma) \;\;\; \equiv\;\;\; (\alpha\land\beta)\lor(\alpha\land\gamma) | |<!-- equation 87 --><math>\alpha\land(\beta\lor\gamma) \;\;\; \equiv\;\;\; (\alpha\land\beta)\lor(\alpha\land\gamma)</math>, || ''(87)'' | ||
|- | |- | ||
Linia 81: | Linia 81: | ||
<!-- begin{align} TODO: kolumny--> | <!-- begin{align} TODO: kolumny--> | ||
:{| width="400" | :{| width="400" | ||
|<!-- equation 88 --><math> P(x,y)\lor Q(y,a)\rightarrow P(z,b)\land \neg R(v,b) | |<!-- equation 88 --><math> P(x,y)\lor Q(y,a)\rightarrow P(z,b)\land \neg R(v,b)</math>, || ''(88)'' | ||
|- | |- | ||
|<!-- equation 89 --><math> \neg(P(x,y)\lor Q(y,a)) \lor (P(z,b)\land \neg R(v,b)) | |<!-- equation 89 --><math> \neg(P(x,y)\lor Q(y,a)) \lor (P(z,b)\land \neg R(v,b))</math>, || ''(89)'' | ||
|- | |- | ||
|<!-- equation 90 --><math> \neg(P(x,y)\land\neg Q(y,a)) \lor (P(z,b)\land \neg R(v,b)) | |<!-- equation 90 --><math> \neg(P(x,y)\land\neg Q(y,a)) \lor (P(z,b)\land \neg R(v,b))</math>, || ''(90)'' | ||
|- | |- | ||
|<!-- equation 90 --><math> (\neg P(x,y)\lor P(z,b))\land(\neg P(x,y)\lor R(v,b))\land | |<!-- equation 90 --><math> (\neg P(x,y)\lor P(z,b))\land(\neg P(x,y)\lor R(v,b))\land</math>, || ''(90)'' | ||
|- | |- | ||
|<!-- equation 91 --><math> \;\;\;\;\;\land (\neg Q(y,a)\lor P(z,b))\land(\neg Q(y,a)\lor R(v,b)) | |<!-- equation 91 --><math> \;\;\;\;\;\land (\neg Q(y,a)\lor P(z,b))\land(\neg Q(y,a)\lor R(v,b))</math>, || ''(91)'' | ||
|- | |- | ||
Linia 107: | Linia 107: | ||
:<math> | :<math> | ||
(\forall\dots)(\forall\dots)\dots(\forall\dots)\alpha. | (\forall\dots)(\forall\dots)\dots(\forall\dots)\alpha. | ||
</math>, ''(92)'' | |||
Linia 120: | Linia 120: | ||
<!-- begin{align} TODO: kolumny--> | <!-- begin{align} TODO: kolumny--> | ||
:{| width="400" | :{| width="400" | ||
|<!-- equation 93 --><math>\neg (\forall x)\alpha \;\;\; \equiv\;\;\; (\exists x)\alpha | |<!-- equation 93 --><math>\neg (\forall x)\alpha \;\;\; \equiv\;\;\; (\exists x)\alpha</math>, || ''(93)'' | ||
|- | |- | ||
|<!-- equation 94 --><math>\neg (\exists x)\alpha \;\;\; \equiv\;\;\; (\forall x)\alpha | |<!-- equation 94 --><math>\neg (\exists x)\alpha \;\;\; \equiv\;\;\; (\forall x)\alpha</math>, || ''(94)'' | ||
|- | |- | ||
|<!-- equation 95 --><math>(\forall x)\alpha\diamondsuit\beta \;\;\; \equiv\;\;\; (\forall x)(\alpha\diamondsuit\beta) | |<!-- equation 95 --><math>(\forall x)\alpha\diamondsuit\beta \;\;\; \equiv\;\;\; (\forall x)(\alpha\diamondsuit\beta)</math>, || ''(95)'' | ||
|- | |- | ||
|<!-- equation 96 --><math>(\exists x)\alpha\diamondsuit\beta \;\;\; \equiv\;\;\; (\exists x)(\alpha\diamondsuit\beta) | |<!-- equation 96 --><math>(\exists x)\alpha\diamondsuit\beta \;\;\; \equiv\;\;\; (\exists x)(\alpha\diamondsuit\beta)</math>, || ''(96)'' | ||
|- | |- | ||
Linia 132: | Linia 132: | ||
<!-- end{align} --> | <!-- end{align} --> | ||
gdzie <math>\diamondsuit | gdzie <math>\diamondsuit</math>, moze byc operatorem <math>\lor</math>,, <math>\land</math>,, <math>\rightarrow</math>,, | ||
<math>\leftrightarrow | <math>\leftrightarrow</math>,, przy zalożeniu, ze zmienna <math>x</math>, nie występuje w | ||
formule <math>\beta | formule <math>\beta</math>,. Do spełnienia tego założenia można bez trudu zawsze | ||
doprowadzić przemianowując w razie potrzeby zmienne. (Niektóre | doprowadzić przemianowując w razie potrzeby zmienne. (Niektóre | ||
przekształcenia mogą być wykonane także wtedy, gdy <math>\beta | przekształcenia mogą być wykonane także wtedy, gdy <math>\beta</math>, zawiera | ||
<math>x | <math>x</math>,, lecz nie ma potrzeby rozważania ich tutaj.) | ||
Aby następnie wyeliminować kwantyfikatory szczegółowe, należy | Aby następnie wyeliminować kwantyfikatory szczegółowe, należy | ||
Linia 144: | Linia 144: | ||
# Bierzemy pod uwagę kolejne kwantyfikatory szczegółowe od lewej do prawej. | # Bierzemy pod uwagę kolejne kwantyfikatory szczegółowe od lewej do prawej. | ||
# Kwantyfikator szczegółowy, który nie jest poprzedzony żadnym kwantyfikatorem ogólnym, usywamy, zastępując jednocześnie w formule wszystkie wystąpienia zmiennej związanej z tym kwantyfikatorem nowym unikalnym symbolem stałej (tzw. stała Skolema). | # Kwantyfikator szczegółowy, który nie jest poprzedzony żadnym kwantyfikatorem ogólnym, usywamy, zastępując jednocześnie w formule wszystkie wystąpienia zmiennej związanej z tym kwantyfikatorem nowym unikalnym symbolem stałej (tzw. stała Skolema). | ||
# Kwantyfikator szczegółowy, który jest poprzedzony kwantyfikatorami ogólnymi, z którymi związane są zmienne <math>x_1,x_2,\dots,x_m | # Kwantyfikator szczegółowy, który jest poprzedzony kwantyfikatorami ogólnymi, z którymi związane są zmienne <math>x_1,x_2,\dots,x_m</math>,, usuwamy, zastępując jednocześnie w formule wszystkie wystąpienia zmiennej związanej z tym kwantyfikatorem nowym unikalnym symbolem funkcyjnym (tzw. funkcja Skolema) zastosowanym do argumentów <math>x_1,x_2,\dots,x_m</math>,. | ||
'''Przykład skolemizacji.''' | '''Przykład skolemizacji.''' | ||
Linia 153: | Linia 153: | ||
(\forall x)(\exists y)(P(x,y)\lor Q(y,a))\rightarrow | (\forall x)(\exists y)(P(x,y)\lor Q(y,a))\rightarrow | ||
(\exists x)(\forall y)(P(x,b)\land\neg R(y,b)) | (\exists x)(\forall y)(P(x,b)\land\neg R(y,b)) | ||
</math>, ''(97)'' | |||
Rozpoczynamy od przemianowania zmiennych tak, aby z każdym | Rozpoczynamy od przemianowania zmiennych tak, aby z każdym | ||
Linia 162: | Linia 162: | ||
(\forall x)(\exists y)(P(x,y)\lor Q(y,a))\rightarrow | (\forall x)(\exists y)(P(x,y)\lor Q(y,a))\rightarrow | ||
(\exists z)(\forall v)(P(z,b)\land\neg R(v,b)) | (\exists z)(\forall v)(P(z,b)\land\neg R(v,b)) | ||
</math>, ''(98)'' | |||
Obecnie wszystkie kwantyfikatory możemy przenieść na początek formuły: | Obecnie wszystkie kwantyfikatory możemy przenieść na początek formuły: | ||
Linia 170: | Linia 170: | ||
(\forall x)(\exists y)(\exists z)(\forall v) | (\forall x)(\exists y)(\exists z)(\forall v) | ||
(P(x,y)\lor Q(y,a)\rightarrow P(z,b)\land\neg R(v,b)) | (P(x,y)\lor Q(y,a)\rightarrow P(z,b)\land\neg R(v,b)) | ||
</math>, ''(99)'' | |||
Kwantyfikator szczegółowy dotyczący zmiennej <math>y | Kwantyfikator szczegółowy dotyczący zmiennej <math>y</math>, występuje po | ||
kwantyfikatorze ogólnym dla zmiennej <math>x | kwantyfikatorze ogólnym dla zmiennej <math>x</math>,. Aby pominąć ten | ||
kwantyfikator szczegółowy, wprowadzamy nowy symbol funkcyjny <math>h_1 | kwantyfikator szczegółowy, wprowadzamy nowy symbol funkcyjny <math>h_1</math>, i | ||
zastępujemy wszystkie wystąpienia zmiennej <math>y | zastępujemy wszystkie wystąpienia zmiennej <math>y</math>, przez <math>h_1(x)</math>,. | ||
Podobnie postępując z kolejnym kwantyfikatorem szczegółowym, | Podobnie postępując z kolejnym kwantyfikatorem szczegółowym, | ||
zastępujemy wszystkie wystąpienia zmiennej <math>z | zastępujemy wszystkie wystąpienia zmiennej <math>z</math>, przez <math>h_2(x)</math>,, gdzie | ||
<math>h_2 | <math>h_2</math>, jest kolejnym nowym symbolem funkcyjnym. Formułę, która | ||
pozostaje po pominięciu kwantyfikatorów, sprowadzaliśmy do postaci CNF | pozostaje po pominięciu kwantyfikatorów, sprowadzaliśmy do postaci CNF | ||
w poprzednim przykładzie. Zatem ostatecznie poszukiwana postać | w poprzednim przykładzie. Zatem ostatecznie poszukiwana postać | ||
Linia 191: | Linia 191: | ||
\land (\neg Q(h_1(x),a)\lor P(h_2(x),b))\land(\neg Q(h_1(x),a)\lor R(v,b)) | \land (\neg Q(h_1(x),a)\lor P(h_2(x),b))\land(\neg Q(h_1(x),a)\lor R(v,b)) | ||
\end{split} | \end{split} | ||
</math>, ''(100)'' | |||
Linia 216: | Linia 216: | ||
postaci CNF do postaci zbioru klauzul tracimy informację, z której | postaci CNF do postaci zbioru klauzul tracimy informację, z której | ||
pierwotnej formuły pochodzą poszczególne klauzule. Jeśli pewna | pierwotnej formuły pochodzą poszczególne klauzule. Jeśli pewna | ||
zmienna <math>x | zmienna <math>x</math>, występuje w różnych klauzulach w obrębie tej samej formuły | ||
w postaci standardowej Skolema, to po przejściu do reprezentacji w | w postaci standardowej Skolema, to po przejściu do reprezentacji w | ||
postaci zbioru klauzul powinna ona pozostać tą samą zmienną w obu | postaci zbioru klauzul powinna ona pozostać tą samą zmienną w obu |
Wersja z 09:56, 5 wrz 2023
Postaci normalne formuł
Aby uzyskać pełny system wnioskowania z niewielką liczbą aksjomatów i reguł, można ograniczyć się do wykorzystywania wyłącznie formuł w pewnych określonych postaciach, nazywanych postaciami normalnymi. Jeśli każda z formuł należących do bazy wiedzy zostanie wstępnie sprowadzona do odpowiedniej postaci normalnej, to wystarczy wówczas wykorzystywać w systemie reguły wnioskowania pasujące do formuł w takiej postaci i generujące formuły w takiej postaci.
Klauzule
Ustalmy, że dowolną formułę atomową będziemy nazywać literałem pozytywny, a dowolną formułę atomową poprzedzoną operatorem negacji - literałem negatywnym. Formułę, która ma postać alternatywy dowolnej liczby literałów (pozytywnych lub negatywnych), nazwiemy klauzulą. W szczególności, pojedynczy literał także jest klauzulą.
Na szczególną uwagę zasługują klauzule, które zawierają nie więcej niż jeden literał pozytywny. Nazywane są one klauzulami Horna (albo hornowskimi). Nietrudno zauważyć, że klauzula Horna postaci ,, gdzie , jest literałem pozytywnym, a literały , są literałami negatywnymi, może być także zapisana w postaci implikacji ,.
Klauzule Horna, zapisane w postaci implikacji, to oczywiście dogodna forma zapisu formuł do stosowania podanej wyżej reguły wnioskowania modus ponens. Do klauzul dowolnej postaci może być stosowana zasada rezolucji. Niestety, nie każdą formułę można przedstawić w postaci klauzuli - najprostszym przykładem formuły, dla której nie jest to możliwe, jest koniunkcja dwóch literałów.
Koniunkcyjna postać normalna
Formułą w koniunkcyjnej postaci normalnej (CNF) nazwiemy koniunkcję dowolnej liczby dowolnych klauzul. W szczególności także pojedyncza klauzula (a więc i pojedynczy literał) jest w koniunkcyjnej postaci normalnej. Użyteczność koniunkcyjnej postaci normalnej polega na tym, że pozwala ona reprezentować formułę jako zbiór klauzul - mając koniunkcję klauzul możemy stosując regułę (48) wyprowadzić każdą wchodzącą w jej skład klauzulę, i do dalszych kroków wnioskowania używać już tylko pojedynczych klauzul.
Każdą formułę nie zawierającą kwantyfikatorów można przedstawić w koniunkcyjnej postaci normalnej. Należy się w tym celu posłużyć odpowiednimi przekształceniami:
, (81) , (82) , (83) , (84) , (85) , (86) , (87)
Formalnie rzecz biorąc, takie przekształcenia można traktować jako
szczególne reguły wnioskowania, które z jednej formuły generują jedną
inną, i które stosowane byłyby w pierwszej kolejności do sprowadzenia
wszystkich formuł z bazy wiedzy do koniunkcyjnej postaci
normalnej. Można łatwo sprawdzić, że reguły te, a także reguły do nich
odwrotne, są poprawne.
Przykład normalizacji. Prześledzimy kolejne kroki sprowadzania formuły do postaci CNF:
, (88) , (89) , (90) , (90) , (91)
Postać standardowa Skolema
Postać standardowa Skolema jest rozszerzeniem koniunkcyjnej postaci normalnej na formuły z kwantyfikatorami. Formuła w tej postaci jest złożeniem dwóch części: przedrostka (być może pustego) zawierającego dowolną liczbę kwantyfikatorów ogólnych oraz matrycy, która jest formułą w postaci CNF
- , (92)
Przekształcenie formuły do postaci standardowej Skolema, czyli tzw.
skolemizacja, wymaga więc najpierw wyprowadzenia "przed nawias"
wszystkich kwantyfikatorów, a następnie eliminacji kwantyfikatorów
ogólnych. Następnie pozostaje sprowadzenie formuły bez kwantyfikatorów
do postaci CNF. Wyprowadzenie kwantyfikatorów "przed nawias" jest
możliwe na podstawie następujących przekształceń:
, (93) , (94) , (95) , (96)
gdzie , moze byc operatorem ,, ,, ,, ,, przy zalożeniu, ze zmienna , nie występuje w formule ,. Do spełnienia tego założenia można bez trudu zawsze doprowadzić przemianowując w razie potrzeby zmienne. (Niektóre przekształcenia mogą być wykonane także wtedy, gdy , zawiera ,, lecz nie ma potrzeby rozważania ich tutaj.)
Aby następnie wyeliminować kwantyfikatory szczegółowe, należy postępować zgodnie z następującym schematem.
- Bierzemy pod uwagę kolejne kwantyfikatory szczegółowe od lewej do prawej.
- Kwantyfikator szczegółowy, który nie jest poprzedzony żadnym kwantyfikatorem ogólnym, usywamy, zastępując jednocześnie w formule wszystkie wystąpienia zmiennej związanej z tym kwantyfikatorem nowym unikalnym symbolem stałej (tzw. stała Skolema).
- Kwantyfikator szczegółowy, który jest poprzedzony kwantyfikatorami ogólnymi, z którymi związane są zmienne ,, usuwamy, zastępując jednocześnie w formule wszystkie wystąpienia zmiennej związanej z tym kwantyfikatorem nowym unikalnym symbolem funkcyjnym (tzw. funkcja Skolema) zastosowanym do argumentów ,.
Przykład skolemizacji. Weźmy pod uwagę formułę:
- , (97)
Rozpoczynamy od przemianowania zmiennych tak, aby z każdym kwantyfikatorem związany był inny symbol zmiennej:
- , (98)
Obecnie wszystkie kwantyfikatory możemy przenieść na początek formuły:
- , (99)
Kwantyfikator szczegółowy dotyczący zmiennej , występuje po kwantyfikatorze ogólnym dla zmiennej ,. Aby pominąć ten kwantyfikator szczegółowy, wprowadzamy nowy symbol funkcyjny , i zastępujemy wszystkie wystąpienia zmiennej , przez ,. Podobnie postępując z kolejnym kwantyfikatorem szczegółowym, zastępujemy wszystkie wystąpienia zmiennej , przez ,, gdzie , jest kolejnym nowym symbolem funkcyjnym. Formułę, która pozostaje po pominięciu kwantyfikatorów, sprowadzaliśmy do postaci CNF w poprzednim przykładzie. Zatem ostatecznie poszukiwana postać normalna Skolema formuły jest następująca:
- Parser nie mógł rozpoznać (nieznana funkcja „\begin{split}”): {\displaystyle \begin{split} & (\forall x)(\forall v) (\neg P(x,h_1(x))\lor P(h_2(x),b)) \land(\neg P(x,h_1(x))\lor R(v,b))\land & \phantom{(\forall x)(\forall y)} \land (\neg Q(h_1(x),a)\lor P(h_2(x),b))\land(\neg Q(h_1(x),a)\lor R(v,b)) \end{split} } , (100)
Baza wiedzy jako zbiór klauzul
W praktycznych zagadnieniach wnioskowania można bezpiecznie założyć, że w zbiorze formuł, który ma stanowić początkową zawartość bazy wiedzy, nie występują zmienne wolne - wszystkie wystąpienia zmiennych są związane z pewnym kwantyfikatorem. Przy tym założeniu, po sprowadzeniu każdej formuły do postaci Skolema, możemy pominąć przedrostki - traktując wszystkie wystąpienia zmiennych jako związane z kwantyfikatorami ogólnymi przez domniemanie. Wówczas każda formuła w postaci CNF może zostać zastąpiona zbiorem wchodzących w jej skład klauzul, a tym samym cała baza wiedzy może być reprezentowana w postaci zbioru klauzul. Jest to reprezentacja bardzo dogodna do powszechnie stosowanych algorytmów wnioskowania w logice predykatów, opartych na zasadzie rezolucji.
Przekształcając zbiór formuł rachunku predykatów do postaci zbioru klauzul, z domniemanymi ogólnymi kwantyfikatorami dla wszystkich zmiennych, może wymagać przemianowania zmiennych w celu zachowania ich rozróżnialności. Konieczność ta wynika z faktu, że przechodząc z postaci CNF do postaci zbioru klauzul tracimy informację, z której pierwotnej formuły pochodzą poszczególne klauzule. Jeśli pewna zmienna , występuje w różnych klauzulach w obrębie tej samej formuły w postaci standardowej Skolema, to po przejściu do reprezentacji w postaci zbioru klauzul powinna ona pozostać tą samą zmienną w obu klaulach. Jeśli jednak ten sam symbol zmiennej występuje w klauzulach należących do dwóch różnych formuł, to przechodząc na reprezentację w postaci zbioru klauzul musimy zmienić jeden z nich. Praktycznie wygodnym rozwiązaniem jest wstępne przemianowanie zmiennych w ten sposób, aby żaden symbol zmiennej nie występował w więcej niż jednej formule, a dokładniej - aby każdy symbol zmiennej związany był jednoznacznie z jednym wystąpieniem kwantyfikatora.