Download as pdf or txt
Download as pdf or txt
You are on page 1of 13

Logika dla inżynierów

(informatyków)
Kierunek Infromatyka, studia
niestacjonarne I stopnia
Wykład nr 3
dr Adam Marszałek
Katedra Informatyki

Politechnika Krakowska
Formuła zamknięta A jest spełniona w interpretacji I , czyli interpretacja I jest modelem A, jeśli v I (A) = 1 , co
oznaczamy I ⊨ A .

Przykłady: Formuła: ∀x p(a, x) oraz interpretacji:

I1 = {N, {≤}, {}, {0}}, I2 = {N, {≤}, {}, {1}}, I3 = {Z, {≤}, {}, {0}}

zachodzą następujące zależności:

I1 ⊨ A , ponieważ 0 ≤ n dla wszystkich n ∈ N .


I2 ⊭ A , ponieważ nie jest prawdą, że 1 ≤ n dla wszystkich n ∈ N . Dla n = 0 , mamy 1 ≰ 0 .
I3 ⊭ A , ponieważ nie istnieje najmniejsza liczba całkowita.

Formuła zamknięta A jest spełnialna, jeśli dla pewnej interpretacji I mamy I ⊨ A .

Formuła zamknięta A jest prawdziwa, jeśli dla wszystkich interpretacji I mamy I ⊨ A , co będziemy oznaczać
⊨ A .

Formuła A jest niespełnialna, jeśli nie jest spełnialna, a jest nieprawdziwa, gdy nie jest prawdziwa.

Uw: W dalszej części wykładu rozważając spełnialność lub prawdziwość formuły, będziemy zakładać, że jest to
formuła zamknięta.

Niech A oraz A będą formułami zamkniętymi. Jeśli v


1 2 I (A1 ) = vI (A2 ) dla wszystkich interpretacji I , to A jest 1

logicznie równoważna A , co oznaczamy A


2 1 ≡ A2 .
Niech A będzie formułą zamkniętą, a U zbiorem formuł zamkniętych. Formułę A nazywamy konsekwencją
logiczną U , jeśli dla wszystkich interpretacji I , dla których v I (Ai ) = 1 dla wszystkich formuł A i ∈ U , zachodzi
vI (A) = 1 . Piszemy wtedy U ⊨ A .

Tw:

A ≡ B wtw, gdy ⊨ A ⇔ B .

U ⊨ A wtw, gdy ⊨ (A1 ∧ … ∧ An ) ⇒ A .

Przykłady formuł prawdziwych (tautologi) rachunku predykatów:

Dualność:

∀xA(x) ⇔ ¬∃x¬A(x) ∃xA(x) ⇔ ¬∀x¬A(x)

Łączność:

∀x∀yA(x, y) ⇔ ∀y∀xA(x, y) ∃x∃yA(x, y) ⇔ ∃y∃xA(x, y)

∃x∀yA(x, y) ⇒ ∀y∃xA(x, y)

Przenoszenie kwantyfikatorów dla formuł bez zmiennych wolnych:

(∃xA(x) ∨ B) ⇔ ∃x(A(x) ∨ B) (∀xA(x) ∨ B) ⇔ ∀x(A(x) ∨ B)

(B ∨ ∃xA(x)) ⇔ ∃x(B ∨ A(x)) (B ∨ ∀xA(x)) ⇔ ∀x(B ∨ A(x))

(∃xA(x) ∧ B) ⇔ ∃x(A(x) ∧ B) (∀xA(x) ∧ B) ⇔ ∀x(A(x) ∧ B)

(B ∧ ∃xA(x)) ⇔ ∃x(B ∧ A(x)) (B ∧ ∀xA(x)) ⇔ ∀x(B ∧ A(x))

∀x(A ⇒ B(x)) ⇔ (A ⇒ ∀xB(x)) ∀x(A(x) ⇒ B) ⇔ (∃xA(x) ⇒ B)

Rozdzielność:

(∃x(A(x) ∨ B(x)) ⇔ (∃xA(x) ∨ ∃xB(x)) (∀x(A(x) ∧ B(x)) ⇔ (∀xA(x) ∧ ∀xB(x))

(∀xA(x) ∨ ∀xB(x)) ⇒ ∀x(A(x) ∨ B(x)) (∃x(A(x) ∧ B(x)) ⇒ (∃xA(x) ∧ ∃xB(x))

(∀x(A(x) ⇔ B(x))) ⇒ (∀xA(x) ⇔ ∀xB(x)) (∀x(A(x) ⇔ B(x))) ⇒ (∃xA(x) ⇔ ∃xB(x))

(∃x(A(x) ⇒ B(x)) ⇔ (∀xA(x) ⇒ ∃xB(x)) (∃xA(x) ⇒ ∀xB(x)) ⇒ (∀x(A(x) ⇒ B(x))

(∀x(A(x) ∨ B(x))) ⇒ (∀xA(x) ∨ ∃xB(x))) (∀x(A(x) ⇒ B(x))) ⇒ (∀xA(x) ⇒ ∀xB(x))

(∀x(A(x) ⇒ B(x))) ⇒ (∃xA(x) ⇒ ∃xB(x))) (∀xA(x) ⇒ B(x)) ⇒ (∀xA(x) ⇒ ∃xB(x))

Systemy dowodzenia w rachunku predykatów

System gentzenowski G jest sytsemem dowodzenia, którego aksjomatami są dowolne zbiory formuł
zawierające pary literałów komplementarnych, regułami dowodzenia są zaś reguły typu α i β (z rachunku zdań)
oraz nastepujące reguły typu δ oraz γ:

⊢ U ∪ {γ, γ(a)} ⊢ U ∪ {δ(a)}

⊢ U ∪ {γ} ⊢ U ∪ {δ}

przy założeniu, dotyczącym reguły δ, że stała a nie występuje w żadnej formule należącej do zbioru U .
Reguły typu γ odczytujemy w następujący sposób: Jeśli formuła kwantyfikowana egzystencjonalnie oraz pewna
jej instancja są spełnione, to instancja jest zbędna.

Reguła typu δ wyraża w sposób formalny następującą, często stosowaną, metodę wnioskowania logicznego:

Nich a będzie dowolną stałą. Udownodnijmy, że zachodzi A(a). Skoro a było dowolne, to udowodniliśmy
∀xA(x) .

Uw: Warunek niewystępowania stałej a w formułach należących do badanego zbioru jest warunkiem
koniecznym, jego brak mógłby bowiem spowodować nałożenie pewnych ograniczeń na dopuszczalne
interpretacje tej stałej.

Przykład:

System hilbertowski H

Rozszerzenie hilbertowskiego systemu dowodzenia H dla rachunku zdań do systemu dowodzenia dla rachunku
predykatów polega na dodaniu dwóch aksjomatów oraz jednej reguły dowodzenia. System dowodzenia jest
zdefiniowany tylko dla formuł kwantyfikowanych uniwersalnie, kwantyfikator egzystencjalny jest wyprowadzany
przez zdefioniowanie ∃xA(x) jako ¬∀x¬A(x).

Aksjomaty:

Aksjomaty A1, A2, A3 z rachunku zdań (obejmują również instancje będące formułami rachunku
predykatów).
(A4) ⊢ ∀xA(x) ⇒ A(a)

(A5) ⊢ ∀x(A ⇒ B(x)) ⇒ (A ⇒ ∀xB(x)) , pod warunkiem, żę zmienna x nie jest zmienną wolną w A.

Reguły:

Redyła odrywania (modus ponens) z rachunku zdań,


Reguła generalizacji:

⊢ A(a)

⊢ ∀xA(x)

Reguła generalizacji w przypadku używania zbioru założeń

U ⊢ A(a)

U ⊢ ∀xA(x)

pod warunkiem, że a nie występuje w formułach w U .

Reguła dedukcji:

U ∪ {A} ⊢ B

U ⊢ A ⇒ B

Twierdzenie o poprawności i pełności w systemie H

⊨ A wtedy i tylko wtedy, gdy ⊢ A w systemie H

Tw: Systemy dowodzenia H oraz G są równoważne.

Twierdzenia i reguły pochodne w systemie H

Reguła wynikająca z aksjomaty (A4) i reguły odrywania:

U ⊢ ∀xA(x)

U ⊢ A(a)

Tw: ⊢ A(a) ⇒ ∃xA(x)

1. ⊢ ∀x¬A(x) ⇒ ¬A(a) (Aksjomat 4)

1. ⊢ A(a) ⇒ ¬∀x¬A(x) (Kontrapozycja)

1. ⊢ A(a) ⇒ ∃xA(x) (definicja ∃)

Tw: ⊢ ∀xA(x) ⇒ ∃xA(x) .

Tw: ⊢ ∀x(A(x) ⇒ B(x)) ⇒ (∀xA(x) ⇒ ∀xB(x)) .

Reguła generalizacji (ogólniejsza)


⊢ A(x) ⇒ B(x)

⊢ ∀xA(x) ⇒ ∀xB(x)

Tw: ⊢ ∃x∀yA(x, y) ⇒ ∀y∃xA(x, y) .

Tw: ⊢ ∀x(A ⇒ B(x)) ⇔ (A ⇒ ∀xB(x)) .

Wn: ⊢ ∃x(A ⇒ B(x)) ⇔ (A ⇒ ∃xB(x)) .

Tw: ⊢ ∀x(A(x) ⇒ B) ⇔ (∃xA(x) ⇒ B) .

Reguła C: Niech U będzie zbiorem formuł, a zaś stałą niewystępującą w żądnej formule z formuł należących do
U ani w formule ∃xA(x)

U ⊢ ∃xA(x)

U ⊢ A(a)

Tw: Jeśli istnieje dowód U ⊢ A , w którym korzysta się z reguły C, to istnieje dowód U ⊢ A , w którym nie
korzysta się z reduły C, pod warunkiem, że reguła generalizacji nie została użyta do formuły zawierającej stałą
wyprowadzaną przez C.

Postać klauzulowa formuł

Term oraz atom nazywamy ustalonym wtw, gdy nie zwiera zmiennych. Formuła jest ustalona wtw, gdy nie
zawiera ani kwantyfikatorów ani zmiennych. Formułę A nazywamy ustaloną instancją formuły A, która nie

zawiera kwantyfikatorów, jeśli A można otrzymać z formuły A przez podstawienie za zmienne (wolne) formuły

A termów ustalonych.

Formuła jest w przedrostkowej koniunkcyjnej postaci normalnej wtw, gdy jest postaci:

Q1 x 1 … Qn x n M

gdzie Q są kwantyfikatorami, a M jest formułą w koninkcyjnej postaci normalnej, niezawierającej


i

kwantyfikatorów. Ciąg Q 1 x1 … Qn x n nazywany jest przedrostkiem, a M matrycą formuły.

Formuła zamknięta jest w postaci klauzulowej wtw, gdy jest w przedrostkowej koniunkcyjnej postaci normalnej i
jej przedrostek zawiera wyłącznie kwantyfikatory uniwersalne.

∀x1 ∀x2 … ∀xn M

Literał jest to formuła atomowa lub negacja formuły atomowej.

Klauzula jest to alternatywa literałów.

Klauzula C jest klauzulą ustaloną wtw, gdy jest ustalnoną istancją klauzuli C , czyli można ją otrzymać z C

przez zastąpienie wszystkich zmiennych C termami ustalonymi.

Literał ustalony jest ustaloną instancją literału.

Notacja:

Nie ma potrzeby jawnie podawania kwantyfikatorów, (fromuła zamknięta, wszystkie zmienne są


kwantyfikowane uniwersalnie).
Matrycę przedstwiamy jako zbiór klauzul, z których każda może być również przedstawiona jako zbiór.
Używamy zbiorów, więc usunięcie elementów powtarzających się nie zmienia znaczenia.
Można pominąć też nawiasy i przecinki w listach argumentów predykatów, przy założeniu, że znamy ich
arność.
Zamiast notacji dla zbiorów każdą klauzulę będziemy zapisywać jako konkatenację literałów.
Przykład:

∀y∀z([p(f (y)) ∨ ¬p(g(z)) ∨ q(z)] ∧ [¬q(z) ∨ ¬p(g(z)) ∨ q(y)])

{{p(f (y)), ¬p(g(z)), q(z)}, {¬q(z), ¬p(g(z)), q(y)}}

{pf (y)¬pg(z)qz, ¬qz¬pg(z)qy}

Tw (Skolem): Niech A będzie formułą zamkniętą. Wówczas istnieje formuła A w postaci klauzulowej taka, że

A ≈ A

.

Komentarz:

Nie jest prawdą, że A ≡ A



(A logicznie równoważne A ). Jedynie A

≈ A

, czyli formuła A jest spełnialna
wtw, gdy A jest spełnialna.

Usunięcie kwantyfikatorów egzystencjalnych powoduje, że nowa formuła przestaje być równoważna


(logicznie) pierwotnej formule.
Usuwanie kwantyfikatorów ezgystencjalnych jest wykonywane przez wprowadzenie nowych symboli
funkcyjnych.

Przekształcanie zamkniętej formuły do postaci klauzulowej - Skolemizacja

Przykładowa formuła: ∀x(p(x) ⇒ q(x)) ⇒ (∀xp(x) ⇒ ∀xq(x))

Krok 1: Przemianuj zmienne kwantyfikowane w taki sposób, aby żadna zmienna nie występowała w dwóch
kwantyfikatorach.

∀x(p(x) ⇒ q(x)) ⇒ (∀yp(y) ⇒ ∀zq(z))

Krok 2: Usuń wszystkie binarne operatory logiczne oprócz ∨ oraz ∧.

¬∀x(¬p(x) ∨ q(x)) ∨ ¬∀yp(y) ∨ ∀zq(z))

Krok 3: przesuń operatory negacji do środka, usuwając podwójną negację, tak, aby negacja występowała tylko
przy formułach atomowych. Skorzystaj z równoważności:

¬∀xA(x) ≡ ∃x¬A(x) ¬∃xA(x) ≡ ∀x¬A(x)

Dla rozważanej formuły otrzymamy:

∃x(p(x) ∧ ¬q(x)) ∨ ∃y¬p(y) ∨ ∀zq(z))

Krok 4: Wydobądź kwantyfikatory z matrycy formuły. Powtarzaj następującą operację: wybierz kwantyfikator
niebędący w zakresie innego kwantyfikatora i przenieś go na zewnątrz, korzystając z następujących
równoważnośći (możliwych do zastosowania gdyż żadna zmienna nie występuje w dwóch kwantyfikatorach):

A op QxB(x) ≡ Qx(A op B(x)) oraz QxA(x) op B ≡ Qx(A(x) op B)

gdzie Q jest kwantyfikatorem, a op operatorem ∨ lub ∧.

Dla rozważanej formuły otrzymamy:

∃x∃y∀z((p(x) ∧ ¬q(x)) ∨ ¬p(y) ∨ q(z))

Krok 5: Korzystając z praw rozdzielności przekształć matrycę formuły do koniunkcyjnej postaci normalnej.

∃x∃y∀z((p(x) ∨ ¬p(y) ∨ q(z)) ∧ (¬q(x) ∨ ¬p(y) ∨ q(z)))

Krok 6: Wprowadzanie funkcji Skolema. Niech ∃x będzie kwatyfikatorem egzystencjalnym występującym w


formule A, niech y 1, … , yn będą zmiennymi kwantyfikowanymi uniwersalnie przed ∃x. Niech f będzie nowym
symbolem funkcyjnym o liczbie zmiennych n. Usuń ∃x i zastąp każde wysąpienie zmiennej x termem
f (y1 , … , yn ) . Jeśli żaden kwantyfikator uniwersalny nie poprzeda ∃x, to zastąp x nową stałą a (funkcja 0-
argumentowa).

Przykładowa formuła zostanie przekształcona do postaci:

∀z((p(a) ∨ ¬p(b) ∨ q(z)) ∧ (¬q(a) ∨ ¬p(b) ∨ q(z)))

gdzie a i b są funkcjami Skolema (stałymi) odpowiadającymi, odpowiednio kwantyfikowanym egzystencjalnie


zmiennym x i y.

Kolejność wyciągania kwantyfikatorów na zewnątrz (krok 4) może być dowolna, dlatego możemy otrzymać inną
postać klauzulową z innymi funkcjami Skolema.

Rezolucja dla klauzul ustalonych

Niech C 1, C2 będą klauzulami ustalonymi takimi, że l ∈ C1 , l



∈ C2 . Klauzule C 1, C2 nazywamy klauzulami
kolidującymi i mówimy, że kolidują względem komplememntarnych literałów l, l . −

Rezolwentą klauzul C i C nazywamy klauzulę C postaci:


1 2


C = Rez(C1 , C2 ) = (C1 − {l}) ∪ (C2 − {l })

Klauzule C i C nazywamy klauzulami macierzystymi dla C .


1 2

Tw: Rezolwenta klauzul C i C jest spełnialna wtedy i tylko wtedy, gdy klauzule C i C są (wzajemnie)
1 2 1 2

spełnialne.

Metoda rezolucji dla klauzul ustalonych jest zdefiniowana podobnie jak dla rachunku zdań.
Dla danego zbioru klauzu ustalonych stosujemy wielokrotnie regułę rezolucji.
Zbiór klauzul ustalonych jest niespełnialny wtw, gdy pewna sekwencja zastosowań reguły rezolucji prowadzi
do uzyskania klauzuli pustej.

Metodę rezolucji dla klauzul ustalonych trudno uznać za użyteczną metodę dowodzenia w rachunku
predykatów, gdyż zbiór termów ustalonych jest nieograniczony jak i nie uporządkowany. Czyli nie ma
gwarancji, że po określonej liczbie kroków znajdziemy wyprowadzenie, nie ma też wskazówek dotyczących
sposobu wybierania klauzul.
Jednak w roku 1965 Robinson wykazał, że metoda rezolucji może być też często stosowana w praktyce w
przypadku klauzul nieustalonych.

Podstawienia

Podstawieniem (termów za zmienne) nazywamy zbiór

{x1 ← t1 , … , xn ← tn }

gdzie x są różnymi zmiennymi, a t są termami, różnymi od odpowiadających im zmiennych x .


i i i

Podstawienie puste jest to podstawienie zdefiniowane przez zbiór pusty.

Podstawienia oznaczamy małymi literami alfabetu greckiego: λ, μ, δ, θ. Podstawienie puste oznaczamy prze ϵ.

Wyrażeniem nazywamy term, literał, klauzulę lub zbiór klauzul.

Niech E będzie wyrażeniem, a θ = {x1 ← t1 , … , xn ← tn } podstawieniem.


Instancją Eθ wyrażenia E otrzymujemy przez jednoczesne zastąpienie każdego wystąpienia zmiennej x i

termem t . i

Przykład:

E = p(x) ∨ q(f (y)) θ = {x ← y, y ← f (a)}

Eθ = p(y) ∨ q(f (f (a)))

(podstawiemy jednocześnie)

Niech θ = {x1 ← t1 , … , xn ← tn } iδ = {y1 ← s1 , … , yk ← sk } będą podstawieniami.

Niech X i Y będą zbiorami zmiennych zastępowanych odpowiednio w podstawieniach θ i δ.

Podstawienie θδ (złożenie podstawień θ i δ), definiujemy jako następujące podstawienie:

θδ = {xi ← ti δ|xi ∈ X, xi ≠ ti δ} ∪ {yj ← sj |yj ∈ Y , yj ∉ X}

Podstawienie δ do termów t z podstawienia θ (jeśli otrzymane podstawienie nie redukuje się do x


i i
← xi .
Ze zbioru δ dodajemy podstawienia dla tych zmiennych, którym θ nie nadaje wartości.

Przykład:

θ = {x ← f (y), y ← f (a), z ← u} iδ = {y ← g(a), u ← z, v ← f (f (a))}

E = p(u, v, x, y, z)

θδ = {x ← f (g(a)), y ← f (a), u ← z, v ← f (f (a))}

E(θδ) = p(z, f (f (a)), f (f (a)), f (a), z)

Tw: Niech E będzie wyrażeniem, a θ, δ podstawieniami. Wówczas E(θδ) = (Eθ)δ .

Składanie podsawień jest łączne: θ(δγ) = (θδ)γ .

Składanie podstwień nie jest przemienne.

Podstawienie uzgadniające

Dla dowolnego zbioru atomów podstawieniem uzgadniającym tego zbioru nazywamy podstawienie
spełniajace warunek: instancją wszystkich elementów tego zbioru uzyskaną przez zastosowanie tego
podstawienia jest ten sam atom.

Podstawienie uzgadniajace μ nazywamy najbardziej ogólnym podstawieniem uzgadniającym (mgu) danego


zbioru atomów, jeśli każde podstawienie uzgadniające θ można uzyskać z μ przez zastosowanie dodatkowego
podstawienia, czyli θ = μλ .

Uw: Nie wszystkie atomy da się uzgodnić (nie istnieją podstawienia uzgadniające).

Algorytm uzgadniania

Aby można było uzgodnić atomy, muszą one być utworzone z symboli predykatów o tej samiej nazwie i
liczbie argumentów.
Zbiór termów do uzgodnienia będziemy zapisywać w postaci zbioru równań na termach.
Zbiór równań na termach jest w postaci rozwiązywalnej, jeśli spełnione są następujące warunki:
wszystkie równania są postaci x i
= ti , gdzie x jest zmienną, i
i
= 1, 2, … , n

jeżeli zmienna x , wystepuje po lewej stronie równania, to nie występuje w żadnym innym miejscu.
i

Zbiór równań w postaci rozwiązywalnej definiuje podstawienie {x 1


← t1 , … , x n ← tn }
1. Przekształć równanie t = x , gdzie t nie jest zmienną, do x = t .
2. Usuń równanie postaci x = x .
3. Niech t ′
= t
′′
będzie równaniem takiem, że t , t nie są zmiennymi.
′ ′′

Jeśli główne symbole funkcyjne termów t oraz t są różne, to zakończ algorytm i udziel odpowiedzi:
′ ′′

zbiór termów nie jest uzgadnialny.


W przeciwnym razie zastąp f (t ′
1
′ ′′
, … , t ) = f (t , … , t ) k
k i
′′
k
równaniami postaci t ′
1
′′
= t ,…,t
1

k
= t
′′
k
.
4. Niech x = t będzie równaniem takiem, że zmienna x występuje w zbiorze równań nie tylko po lewej stronie
stronie tego rówania.
Jeśli zmienna x występuje w t, to zakończ algorytm i udziel odpowiedzi: zbiór termów nie jest
uzgadnialny.
W przeciwnym razie zastąp wszystkie wystąpienia zmiennej x w innych równaniach termem t.

Przykład:

Atomy: p(g(y), f (x, h(x), y)), p(x, f (g(z), w, z))

Zbiór dwóch równań: g(y) = x, f (x, h(x), y) = f (g(z), w, z)

Stosujemy regułę 1 do pierwszego równania i regułę 3 do drugiego:

x = g(y) x = g(z) h(x) = w y = z

Stosujemy regułę 4 do drugiego równania, czyli zastępujemy x termem g(z):

g(z) = g(y) x = g(z) h(g(z)) = w y = z

Stosujemy regułe 3 do pierwszego równania:

z = y x = g(z) h(g(z)) = w y = z

Stosując regułę 4 do ostatniego równania, w pierwszym otrzymujemy z = z a wieć możemy to równanie usunąć
zgodnie z regułą 2:

x = g(z) h(g(z)) = w y = z

Przekształcamy drugie równanie za pomocą reduły 1:

x = g(z) w = h(g(z)) y = z

Co daje nam podstawienie:

{x ← g(z), w ← h(g(z)), y ← z}

które jest najbardziej ogólnym postawieniem uzgadniającym.

Tw: Algorytm uzgadniania zawsze się zatrzymuje.

Jeśli algorytm zakończy się udzieleniem odpowiedzi, że zbiór termów niej jest uzgadnialny, to dla danego zbioru
równań nie istnieje podstawienie uzgadniające.

Jeśli algorytm zakończy się sukcesem, to otrzymany zbiór równań jest w postaci rozwiązywalnej i definiuje
najbardziej ogólne podstawienie uzgadniające podany zbiór równań: μ = {x1 ← t1 , … , xn ← tn }

Algorytm Robinsona

Niech A i A będą atomami utworzonymi z tego samego symbolu predykatywnego.


Traktujemy te atomy jako ciągi symboli (listy).


Niech k będzie indeksem pierwszej pozycji od lewej strony, na której w tych ciągach występują różne
symbole.
Parę termów t, t rozpoczynających się od pozycji k w atomie A oraz A nazywamy zbiorem niezgodności
′ ′

atomów A i A . ′

Przykład:


A = p(a, x, f (g(y)) A = p(y, f (z), f (z))


k = 2, t = a, t = y

Inicjujemy algorytm, przyjmując A 0 = A oraz A ′


0
= A

.

Załóżmy, że utworzyliśmy atomy A oraz A . i



i

Wykonujemy następujący krok algorytmu:

Niech {t, t } będzie zbiorem niezgodności atomów A i A . Jeśli jednym z termów należących do tego
′ ′

zbioru jest zmienna x i+1 , a drugim term t i+1 , w którym zmienna x i+1 nie występuje, to niech
σi+1 = {xi+1 ← ti+1 } oraz A i+1 = Ai σi+1 , A

i+1
= A σi+1

i
.

Jeśli nie można wykonać kolejnego kroku algorytmu, to atomów nie można uzgodnić.
Jeśli po wykonaniu kolejnego kroku algorytmu otrzymamy A n = An

to atomy A i A są uzgadnialne i

najbardziej ogólnym podstawieniem uzgadniającym jest podstawienie μ = σ1 … σn .

Przykład:

Atomy: p(g(y), f (x, h(x), y)), p(x, f (g(z), w, z))

Początkowy zbiór niezgodności to {x, g(y)}. Jeden z termów jest zmienną, która nie występuje w drugim termie,
zatem mamy: σ 1 = {x ← g(y)} oraz:


Aσ1 = p(g(y), f (g(y), h(g(y)), y)) A σ1 = p(g(y), f (g(z), w, z))

Następnym zbiorem niezgodności jest {y, z}, przyjmujemy zatem σ 2 = {y ← z} i otrzymujemy:


Aσ1 σ2 = p(g(z), f (g(z), h(g(z)), z)) A σ1 σ2 = p(g(z), f (g(z), w, z))

Trzecim zbiorem niezgodności jest {w, h(g(z))}, czyli σ 3 = {w ← h(g(z))} :


Aσ1 σ2 σ3 = p(g(z), f (g(z), h(g(z)), z)) A σ1 σ2 σ3 = p(g(z), f (g(z), h(g(z)), z))

Koniec. Najbardziej ogólnym podstawieniem jest μ = σ1 σ2 σ3 = {x ← g(z), y ← z, w ← h(g(z))}

Konieczność sprawdzania, czy term podstawiany za zmienną nie zawiera tej zmiennej, powoduje, że
algorytm uzgadniania ma wykładniczą złożoność obliczeniową (względem wielkości uzgadnianych termów).
Algorytmy stosowane w praktyce zwykle nie stosują tego sprawdzenia. Istnieje zatem ryzyko
niepoprawnego uzgodnienia.

Ogólna reguła rezolucji

Niech L będzie zbiorem literałów. Wówczas L .


− − −
= {l1 , … , ln } = {l , … , ln }
1

Niech C i C będą klauzulami niemającymi wspólnych zmiennych. Niech L


1 2 1
= {l11 , … , l1n } ⊆ C1
1
,
będą podzbiorami literałów takimi, że L i L można uzgodnić, a σ będzie ich

L2 = {l21 , … , l2n } ⊆ C2 1
2 2

podstawieniem uzgadniającym (mgu). Klauzule C i C nazywamy klauzulami kolidującymi i mówimy, że kolidują


1 2

względem zbiorów literałów L i L . Rezolwentą klauzul C i C nazywamy klauzulę C postaci:


1 2 1 2
Rez(C1 , C2 ) = (C1 σ − L1 σ) ∪ (C2 σ − L2 σ)

Ogólna metoda rezolucji

Niech S 0 = S .
Załóżmy, że utworzyliśmy zbiór S . i

Wybierz klauzule kolidujące C 1 , C2 ∈ S i i niech C = Rez(C1 , C2 ) .


Jeśli C jest klauzulą pustą, to zakończ: zbiór S jest niespełnialny.
W przeciwnym razie utwórz S i+1 = Si ∪ {C} .
Jeśli S i+1 = Si dla wszystkich par literałów kolidujących, to zakończ wykonywanie: zbiór S jest spełnialny.

Uw: Algorytm nie musi się zakończyć (w przypadku zbioru klauzul spełnialnych).

Przykład:

Przykład:
Lemat o podnoszeniu

Niech C i C będą instancjami ustalonymi klauzul C oraz C .



1

2 1 2

Niech C będzie rezolwentą ustaloną klauzul C i C .


′ ′
1

2

Wówczas istnieje rezolwenta C klauzul C oraz C taka, że C jest instancją ustaloną C .


1 2

Poprawność

Jeżeli na podstawie ogólnej metody rezolucji można wyprowadzić klauzulę pustą, to zbiór klauzul jest
niespełnialny.

Pełność
Jeśli zbiór klauzul jest niespełnialny, to stosując ogólną metodę rezolucji można wyprowadzić klauzulę pustą.

You might also like