unify(x, y, μ, θ) |
⇔ | (subterm(xμ, yμ, s, t) ⇒ s_equal(s, t)) ∧ θ=μ |
| ∨ | xμ=s ∧ yμ=t ∧ ¬s_equal(s, t) ∧
s_unify(s, t, λ) ∧ unify(x, y, μλ, θ) |
| ∨ | xμ∈I(f) ∧ yμ∈I(f) ∧ n=a(f) ∧ xμ≡f(x1, …, xn) ∧ yμ≡f(y1, …, yn)
∧ ∃i∈Nnsubterm(xi, yi, s, t) ∧ ¬s_equal(s, t) ∧
s_unify(s, t, λ) ∧ unify(x, y, μλ, θ) |
| ⇔ | (subterm(xμ, yμ, s, t) ⇒ s_equal(s, t)) ∧ θ=μ |
| ∨ | xμ=s ∧ yμ=t ∧ ¬s_equal(s, t) ∧
s_unify(s, t, λ) ∧ unify(x, y, μλ, θ) |
| ∨ | xμ∈I(f) ∧ yμ∈I(f) ∧ n=a(f) ∧ xμ≡f(x1, …, xn) ∧ yμ≡f(y1, …, yn)
∧ subterm(x1, y1, s, t) ∧ ¬s_equal(s, t) ∧
s_unify(s, t, λ) ∧ unify(x, y, μλ, θ) |
| … | |
| ∨ | xμ∈I(f) ∧ yμ∈I(f) ∧ n=a(f) ∧ xμ≡f(x1, …, xn) ∧ yμ≡f(y1, …, yn)
∧ subterm(xn, yn, s, t) ∧ ¬s_equal(s, t) ∧
s_unify(s, t, λ) ∧ unify(x, y, μλ, θ) |
| |
一度実行した条件は、次の呼び出しでは s_equal(s, t) が成立します。
unify(xi, yi, …) を実行した後の unify(x, y, …) は、
unify(xj, yj, …) (j > i) だけを実行したものと同じになります。
|
| ⇔ | (subterm(xμ, yμ, s, t) ⇒ s_equal(s, t)) ∧ θ=μ |
| ∨ | xμ=s ∧ yμ=t ∧ ¬s_equal(s, t) ∧
s_unify(s, t, λ) ∧ unify(x, y, μλ, θ) |
| ∨ | xμ∈I(f) ∧ yμ∈I(f) ∧ n=a(f) ∧ xμ≡f(x1, …, xn) ∧ yμ≡f(y1, …, yn)
∧ unify(x1, y1, μ, λ) ∧ unify(x, y, μλ, θ) |
| … | |
| ∨ | xμ∈I(f) ∧ yμ∈I(f) ∧ n=a(f) ∧ xμ≡f(x1, …, xn) ∧ yμ≡f(y1, …, yn)
∧ unify(xn, yn, μ, λ) ∧ unify(x, y, μλ, θ) |
| ⇔ | xμ∈V ∧ yμ∈V ∧ xμ=yμ ∧ θ=μ |
| ∨ | xμ∈I ∧ yμ∈I ∧ (subterm(xμ, yμ, s, t) ⇒ s_equal(s, t)) ∧ θ=μ |
| ∨ | xμ=s ∧ yμ=t ∧ ¬s_equal(s, t) ∧
s_unify(s, t, λ) ∧ unify(x, y, μλ, θ) |
| ∨ | xμ∈I(f) ∧ yμ∈I(f) ∧ n=a(f) ∧ xμ≡f(x1, …, xn) ∧ yμ≡f(y1, …, yn)
∧ unify(x1, y1, μ, σ2) ∧ … ∧
unify(xn, yn, σn, σn+1) ∧ unify(x, y, σn+1, θ) |
| … | |
| ∨ | xμ∈I(f) ∧ yμ∈I(f) ∧ n=a(f) ∧ xμ≡f(x1, …, xn) ∧ yμ≡f(y1, …, yn)
∧ unify(xn, yn, μ, σ2) ∧ … ∧
unify(xn, yn, σn, σn+1) ∧ unify(x, y, σn+1, θ) |
| |
最後の unify(x, y, σn+1, θ) は2番めの条件から θ=σn+1 となります。
|
| ⇔ | xμ∈V ∧ yμ∈V ∧ xμ=yμ ∧ θ=μ |
| ∨ | xμ=s ∧ yμ=t ∧ ¬s_equal(s, t) ∧
s_unify(s, t, λ) ∧ unify(x, y, μλ, θ) |
| ∨ | xμ∈I(f) ∧ yμ∈I(f) ∧ n=a(f) ∧
xμ≡f(x1, …, xn) ∧ yμ≡f(y1, …, yn)
∧ ∀i∈Nn∃σi ∧ σ1=1
∀i∈Nnunify(xi, yi, σi, σi+1) ∧
θ=σn+1 |
| |
2番めの条件は、3番めの条件から呼び出されたもの以外は3番めの条件に含まれるので、
最後の unify(x, y, μλ, θ) は1番めの条件だけでよいので θ=μλ となります。
|
| ⇔ | xμ∈V ∧ yμ∈V ∧ xμ=yμ ∧ θ=μ |
| ∨ | s_unify(xμ, yμ, λ) ∧ θ=μλ |
| ∨ | xμ∈I(f) ∧ yμ∈I(f) ∧ n=a(f) ∧
xμ≡f(x1, …, xn) ∧ yμ≡f(y1, …, yn)
∧ ∀i∈Nn∃σi ∧ σ1=1
∀i∈Nnunify(xi, yi, σi, σi+1) ∧
θ=σn+1 |
これと同じように、単一化アルゴリズムを記述してみます。
S は記号の集合、
T は項の集合、
L は項のリストの集合、
Σ は代入の集合という意味です。
各集合を構成する写像と、集合 S の中の関係 = を以下のように定義します。