LOGIKA ALGORYTMICZNA 4. Unifikacja.
Podstawieniem nazywamy zbi´or sko´nczony postaci {t1/v1, ..., tn/vn}, gdzie vi s¸a parami r´o˙znymi zmiennymi, a ti s¸a termami z ti 6= vi, 1 ≤ i ≤ n. Je´sli wszystkie ti s¸a termami podstawowymi, to podstawienie nazywa si¸e podstawowym. Przez ε oznaczamy puste podstawienie.
Je´sli E jest pewnym wyra˙zeniem (np. termem lub formu l¸a), a θ = {t1/v1, ..., tn/vn} jest podstawieniem, to przez Eθ oznaczamy wyra˙zenie otrzymane z E przez zamian¸e ka˙zdego wyst¸epowania vi na ti. Wtedy Eθ nazywa si¸e przyk ladem wyra˙zenia E.
Z lo˙zeniem podstawie´n θ = {t1/x1, ..., tn/xn} i λ = {u1/y1, ..., um/ym} nazywa si¸e
podstawienie (oznaczane przez θ◦λ) otrzymane ze zbioru {t1λ/x1, ..., tnλ/xn, u1/y1, ..., um/ym} przez wykre´slanie wszystkich sk ladnik´ow tiλ/xi, gdzie tiλ = xi, i wszystkich sk ladnik´ow
ui/yi, gdzie yi ∈ {x1, ..., xn}.
4.1. Uwagi. (a) θ ◦ ε = ε ◦ θ = θ;
(b) (θ ◦ λ) ◦ µ = θ ◦ (λ ◦ µ);
(c) Dla ka˙zdego wyra˙zenia E zachodzi E(θ ◦ λ) = (Eθ)λ.
4.2. Zadania. Znale´z´c θ ◦ λ dla
(a) θ = {f (y)/x, z/y} i λ = {a/x, b/y, y/z};
(b) θ = {g(z)/x, f (x)/y} i λ = {g(y)/x, r(a, z)/y, b/z}.
Podstawienie θ nazywa si¸e unifikatorem zbioru wyra˙ze´n {E1, ..., Ek} je´sli E1θ = E2θ = ... = Ekθ. Unifikator θ nazywa si¸e najog´olniejszym, je´sli dla ka˙zdego unifikatora λ zbioru {E1, ..., Ek} istnieje podstawienie µ takie, ˙ze λ = θ ◦ µ.
Rozpatrzmy zbi´or litera l´ow {L1, L2, ..., Ln} taki, ˙ze dla pewnego symbolu rela- cyjnego P wszystkie Limaj¸a posta´c P (t1, ..., tl) lub wszystkie Limaj¸a posta´c ¬P (t1, ..., tl).
Znajd´zmy pierwsz¸a z lewej pozycj¸e, na kt´orej pewne Li i Lj maj¸a r´o˙zne symbole. W ka˙zdym Li pozycja ta okre´sla pocz¸atek pewnego termu t0i (wyst¸epuj¸acego w Li jako podterm). Zbi´or {t01, ..., t0n} nazywa si¸e zbiorem niezgodno´sci wyra˙ze´n L1, L2, ..., Ln.
4.3. Zadania. Znale´z´c zbi´or niezgodno´sci w W :
(a) W = {¬R(f (x), a), ¬R(f (x), f (x)), ¬R(f (x), g(b))}, (b) W = {Q(x, r(a, f (x, y))), Q(x, r(a, g(x))), Q(x, r(a, a))}.
(c) W = {P (x, f (z)), P (x, a), P (x, g(h(x)))},
Algorytm unifikacji. Niech W b¸edzie pewnym zbiorem litera l´ow.
Krok 0. Niech W0 := W , ε0 := ε.
Krok k + 1. Niech σk b¸edzie podstawieniem zbudowanym na kroku k i niech Wk := W σk.
Ruch 1. Je´sli wszystkie litera ly zbioru Wk s¸a r´owne, to nast¸epuje zako´nczenie (STOP); σk jest najog´olniejszym unifikatorem zbioru W . Je´sli zbi´or Wk zawiera r´o˙zne litera ly, to niech Dk b¸edzie zbiorem niezgodno´sci w Wk.
Ruch 2. Je´sli Dk zawiera zmienn¸a vk i term tk, nie zawieraj¸acy vk, to wykonujemy Ruch 3. W przypadku, gdy takiej pary nie ma, nast¸epuje zatrzymanie algorytmu:
zbi´or Wk nie jest unifikowalny.
Ruch 3. Niech σk+1 := σk◦ {tk/vk} i Wk+1 := Wk{tk/vk}. Przej´scie do Kroku
1
k + 2.
4.4. Twierdzenie unifikacji. Je´sli zbi´or litera l´ow W jest unifikowalny, to algo- rytm unifikacji ko´nczy prac¸e w trakcie wykonywania Ruchu 1 pewnego kroku k + 1.
Wtedy σk jest najog´olniejszym unifikatorem. Je´sli Wk nie jest unifikowalny, to algo- rytm unifikacji ko´nczy prac¸e w trakcie wykonywania Ruchu 2 pewnego kroku k + 1.
4.5. Zadanie. Znale´z´c najog´olniejszy unifikator zbioru W (w przypadku, gdy zbi´or jest unifikowalny):
(a) W = {P (a, x, f (g(y))), P (z, f (z), f (u))}, (b) W = {P (f (a), x, z), P (y, y, g(x))}, (c) W = {P (f (a), g(x)), P (y, y)}.
2