Problem Instytut Informatyki jedzenie(x 1 ) lubi(adam, x 1 ) jedzenie(jabłko) jedzenie(kurczak) je(x 1, x 2 ) żyje(x 1 ) jedzenie(x 2 ) je(bogdan, orzeszki) żyje(bogdan) je(bogdan, x 2 ) je(zuzia, x 2 ) Podstawienie termu za zmienną Instancja wyrażenia Podstawieniem (termów za zmienne) nazywamy zbiór {x 1 t 1,..., x n t n } gdzie x i są różnymi zmiennymi, a t i są termami różnymi od odpowiadających im zmiennych x i. Podstawienie puste jest to podstawienie zdefiniowane przez zbiór pusty. Podstawienia oznaczamy małymi literami alfabetu greckiego: λ, µ, δ, θ. Term Stała, zmienna lub symbol funkcyjny z listą argumentów. Niech E będzie wyrażeniem, a θ = {x 1 t 1,..., x n t n } podstawieniem. Instancję E θ wyrażenia E otrzymujemy przez jednoczesne zastąpienie każdego wystąpienia zmiennej x i termem t i. Wyrażenie E p(x, y) q(y) r(z) Podstawienie θ {x a, y w, z f (w)} Instancja E θ p(a, w) q(w) r(f (w))
Kilka podstawień Kilka podstawień i kilka wyrażeń Eθ = p(u, v, f (v), f (a), u) (Eθ)δ = p(f (x), f (f (a)), f (f (f (a)), f (a), f (x))) E 1 E 2... E n θ 1 (E 1 )θ 1 (E 2 )θ 1... (E n)θ 1 θ 2 ((E 1 )θ 1 )θ 2 ((E 2 )θ 1 )θ 2... ((E n)θ 1 )θ 2............... θ m ((((E 1 )θ 1 )θ 2 )...)θ m ((((E 2 )θ 1 )θ 2 )...)θ m... ((((E n)θ 1 )θ 2 )...)θ m Czy można tę operację usprawnić? Znajdujemy złożenie podstawień θ = (θ 1... θ m) i podstawiamy we wszystkich wyrażeniach. Podstawienie należy wykonać równocześnie we wszystkich wystąpieniach zmiennej. E 1 E 2... E n θ (E 1 )θ (E 2 )θ... (E n)θ Definicja Eθ = p(u, v, f (v), f (a), u) (Eθ)δ = p(f (x), f (f (a)), f (f (f (a))), f (a), f (x)) Eδ = p(f (x), f (f (a)), x, g(a), z) (Eδ)θ = p(f (f (v)), f (f (a)), f (v), g(a), u) nie jest przemienne! Niech θ = {x 1 t 1,..., x n t n } i δ = {y 1 s 1,..., y n s n } będą podstawieniami. Niech X i Y będą zbiorami zmiennych zastępowanych odpowiednio w podstawieniach θ i δ. Złożenie podstawień Podstawienie θδ (złożenie podstawień θ i δ), definiujemy jako następujące podstawienie: θδ = {x i t i δ x i X, x i t i δ} {y j s i y i Y, y j / X } Podstawienie δ do termów t i z podstawienia θ. Ze zbioru δ dodajemy podstawienia dla tych zmiennych, którym θ nie nadaje wartości.
Łączność Przemienność jest łączne, tj. λ(θδ) = (λθ)δ. λ = {x g(z)}, θ = {y f (z)}, δ = {z b} θδ = {y f (b), z b} λ(θδ) = {x g(b), y f (b), z b} λθ = {x g(z), y f (z)} (λθ)δ = {x g(b), y f (b), z b} jest łączne! θδ = {x f (f (f (a))), y f (a), z f (x)} {u f (x), v f (f (a))} E(θδ) = p(f (x), f (f (a)), f (f (f (a))), f (a), f (x)) δθ = {y g(a), u f (f (v)), v f (f (a))} {x f (v), z u} E(δθ) = p(f (f (v)), f (f (a)), f (v), g(a), u) nie jest przemienne! Podstawienie uzgadniające Podstawienie uzgadniające - przykłady 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 danego zbioru atomów, jeśli każde podstawienie uzgadniające θ można uzyskać z µ przez zastosowanie dodatkowego podstawienia, czyli θ = µλ. Następujące pary formuł można uzgodnić: formuła 1 formuła 2 p(x, b, z) p(a, y, c) p(a, x, f (g(y))) Następującyh par formuł nie można uzgodnić: formuła 1 formuła 2 p(x) q(x) p(x, y) p(z) p(f (x)) p(g(x)) p(x) p(f (x)) podstawienie uzgadniające {x a, y b, z c} {x f (g(a)), y a, z g(a)} wynik p(a, b, c) p(a, f (g(a)), f (g(a)))
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 = t i, gdzie x i jest zmienną, i = 1,..., n,; jeżeli zmienna x i, wystepuje po lewej stronie równania, to nie występuje w żadnym innym miejscu. Zbiór równań w postaci rozwiązywalnej definiuje podstawienie {x 1 t 1,..., x n t n }. 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 takim, że t, t nie są zmiennymi. Jeśli glówne symbole funkcyjne termów t i t są różne, to zakończ algorytm i udziel odpowiedzi: zbiór termów nie jest uzgadnialny. W przeciwnym razie zastąp równanie f (t 1,..., t n) = f (t 1,..., t n), n równaniami postaci t 1 = t 1,..., t n = t n. p(a, x, f (g(y))) = a = y x = f (z) f (g(y)) = f (z) y = a g(y) = z z = g(y) - własności 4 Niech x = t będzie równaniem takim, że zmienna x występuje w zbiorze równań nie tylko po lewej stronie tego równania. 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. µ = {x f (g(a)), y a, z g(a)} p(a, x, f (g(y))) = x = f (z) y = a z = g(y) z = g(a) zawsze się zatrzymuje. Jeśli algorytm zakończy się udzieleniem odpowiedzi, że zbiór termów nie 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ń: µ = {x 1 t 1,..., x n t n }.
Sprawdzanie występowania zmiennej A = p(a, x, f (g(y))) A = Podstawienie uzgadniające θ = {x f (g(a)), y a, z g(a)} µ = {x f (z), y a, z g(a)} θ = µλ λ = {z g(a)} µλ = {x f (g(a)), y a, z g(a)} = θ 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 (ryzyko błędu!). Pytania 1 Uzgodnij (jeżeli to możliwe) następującą parę formuł rachunku predykatów. 2 Dane są dwa podstawienia λ i σ. Wykonaj podstawienie λσ do podanej formuły.