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 81: | Linia 81: | ||
<!-- begin{align} TODO: kolumny--> | <!-- begin{align} TODO: kolumny--> | ||
:{| width="400" | :{| width="400" | ||
|<!-- equation 88 --><math> | |<!-- equation 88 --><math> P(x,y)\lor Q(y,a)\rightarrow P(z,b)\land \neg R(v,b)</math>, || ''(88)'' | ||
|- | |- | ||
|<!-- equation 89 --><math> | |<!-- 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> | |<!-- 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> | |<!-- 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> | |<!-- equation 91 --><math> \;\;\;\;\;\land (\neg Q(y,a)\lor P(z,b))\land(\neg Q(y,a)\lor R(v,b))</math>, || ''(91)'' | ||
|- | |- | ||
Aktualna wersja na dzień 22:13, 11 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.