Word problem
記号 0, x, y, z, ... から次のように作られたものを項とします。
(1) 項 X から ( - X ) を作る。
(2) 項 X, Y から ( X + Y ) を作る。
(かっこは省略することもあります。)
こうしてできた項の集合を T とします。
T の元に対して、次の関係をみたす同値関係 = が成り立っているとします。
0 + x = x
- x + x = 0
( x + y ) + z = x + ( y + z )
ここで、上の x, y, z に T のどんな元で置き換えても成り立っている
とします。
このとき、T の元 X, Y に対して X = Y が成り立っているかどうかを
判定する方法を考えます。
ある変形規則の集合によって X, Y を標準形 X', Y'
に変形したとき、X' と Y' が項として一致しているかどうかで
判定することができます。
変形規則の集合は、次のようになります。
0 + x → x
- x + x → 0
( x + y ) + z → x + ( y + z )
- x + ( x + y ) → y
x + 0 → x
- - x → x
x + - x → 0
- 0 → 0
x + ( - x + y ) → y
- ( x + y ) → - y + - x
変形規則を求める方法は、次のようになります。
(Knuth-Bendix完備化手続き, [1, p.180])
function KB( E: 等式の集合 ) return 書換え規則の集合
var R, Rnew: 書換え規則の集合
R := 空集合
while E != 空集合
E から等式 l=r を選択する
if l>>R = r>>R then
E := E - {l=r}
else
case l>>R > r>>R then Rnew := {l>>R->r>>R}
case l>>R < r>>R then Rnew := {r>>R->l>>R}
otherwise 「失敗」を表示して停止する
while Rの中にRnewでリダクション可能な規則s->tが存在
R := R - {s->t}
E := E + {s=t}
end
R := R + Rnew
E := E - {l=r} + {u=v: <u,v>はRnewとRの各規則間の危険対}
end
end
return R
end
l>>R, r>>R は、l,r をRの規則で変形して最終的にできる項を表す。
l>>R = r>>R は項が等しいことを表す。
l>>R > r>>R, l>>R < r>>R は項に入っている順序を表す。