単一化アルゴリズム(自由モノイド版)
単一化アルゴリズムをモノイドで表すことを考えます。
自由モノイド
集合 に対して
を
個の
の直積、
を集合の直和とすると
は
で自由生成された(「文字列の連結」を演算とする)モノイドとなります(
は「空文字列」)。
は簡約可能、すなわち(演算子を省略して書くと)
が成り立ちます。
生成要素の文字列
有限個の変数を表す文字の集合 と 有限個の定数・関数を表す文字の集合
の集合の直和
で自由生成されたモノイドを
とおきます(
)。演算子を
と書きます(または省略します)。単位元を
と書きます。すなわち
()と定義します。
の元にある(
以上の)自然数(項数)が対応しているとします。項数
の
の元全体を
とおきます。
となります。
とおきます。
生成要素の文字列の長さ
(
)に対して
を
を
を
を
を
と書くことにします。
項
の部分集合(または
の元。この場合はその一つの元からなる集合を表すとします)
に対して
を
(または
)と書くことにします(
の元の場合はその一つの元からなる集合を表すとします)。
の部分集合(または
の元。この場合はその一つの元からなる集合を表すとします)
に対して
を
と書くことにします。
の部分集合
に対して
を
と書くことにします。
を
- 任意の
に対して
を満たす最小の集合とします。 は
と帰納的に定義することができます。 の元を項と呼びます。
に対して最初の項を求める「形式的写像」
を
- (1)
のとき
- (2)
のとき
- (3)
のとき
- ここで
は
のとき
と帰納的に定義します。ある
が
となったときは、
とします(この後の
は無視します)。
- ここで
- (4)
のとき
と定義します。これは を
- (k1)
のとき
- (k2)
のとき
- (k3)
のとき
は
のとき
と帰納的に定義します。ある
が
となったときは、
とします(この後の
は無視します)。
- (k4)
のとき
と定義し、 を合成したものを表すとします。
に対して
が(k3)にならない
が存在すれば
を(k3)で
を呼び出さない
で置き換えて
を合成した「部分写像」を
としたとき
であるとします。
は以下のように定義します。
- (k1')
のとき
- (k2')
のとき
- (k3')
のとき
- (k4')
のとき
(T1)
は
から
への写像
[証明] (k3)のとき となります。
は有限なので(k3)が無限に繰り返されることはありません。よってある
で(k3)にはなりません。よって
を決めると
が決まり、
が決まります。よって
は
から
への写像となります。[証明終わり]
(T2)
ならば
または 
[証明] の定義より
(1)のとき となります。
(2)のとき となります。
(3)のとき がどれも
でなければ
となります。
(4)のとき となります。
よって または
となります。[証明終わり]
(T3)
ならば
または 
[証明] の定義より
(1)のとき を満たす
が存在します。
が成り立ちます。
(2)のとき を満たす
が存在します。
が成り立ちます。
(3)のとき がどれも
でなければ
となります。
が成り立ちます。
(4)のとき となります。
よって または
となります。[証明終わり]
(T4)
ならば
または 
[証明] で、
のとき
が
でなければ
と仮定します。
(1)のとき となります。
(2)のとき となります。
(3)のとき がどれも
でなければ
となります。
(4)のとき となります。
よって または
となります。[証明終わり]
代入
に対して
を
とおきます。 を
(
)
と定義します。
このような写像の有限個の合成(恒等写像を含む)を代入と呼びます。代入の全体を とおきます。
変数 に
を含まない項
を対応させる写像を、
から
への写像に拡張したものを
と書くことにします。
項 を写像
で写した像を
と書きます(
)。項の集合
の各元を写像
で写した像全体を
と書きます(
)。
を
、
を
と書きます(
は写像)。
「で写したもの」を
で写す写像を
と書くことにします。
(S1)
のとき 
[証明]
のときは
なので代入の定義から
となります。
のとき
と仮定します。
をとります。ある
に対して
となります。
(
)とおきます。帰納法の仮定から
(
)が成り立ちます。
となります。[証明終わり]
(S2)
のとき
または 
[証明] の定義より
(1)のとき を満たす
と
が存在し
となります。
よって なので(T3)より
が成り立ちます。
(2)のとき を満たす
と
が存在し
となります。
よって なので(T3)より
が成り立ちます。
(3)のとき がどれも
でなければ
を満たす
と
と
が存在し
となります。
よって なので(S1)より
となり、(T3)より
が成り立ちます。
(4)のとき となります。
よって となります。[証明終わり]
(S3)
のとき
、
、
ならば 
[証明] (S2) より となります。[証明終わり]
不一致集合
を
の空ではない有限部分集合とします。
に対して
任意の
に対して
(
)
かつすべての
の
が一致しない(
)
とおきます。最初の一致しない位置 を
が成り立つ
が存在する(
)とき
が成り立つような
の最小値(
)
が成り立つ
が存在しない(
)とき
とおきます。
単一化アルゴリズム
単一化アルゴリズム(自由モノイド版) UAG
を
の有限部分集合とします。まず
が空集合ではないとき以下の「形式的写像」
を定義します。
- (1)
が一つの項からなるとき
- そうではないとき
- (2)
が
と
を含むとき
(以下を満たす任意のもの)
は変数
は
が出現しない項
- (3) そうではないとき
- (2)
最初の項を求める「部分写像」 の場合と同様に、「形式的写像」
を「部分写像」に変換します。この「部分写像」をここではアルゴリズムと呼びます。
の場合と同様に、無限個の写像の合成のような形に書き換えます。
も
で置き換えて
とします。
- (k1)
が一つの項からなるとき
- そうではないとき
- (k2)
が
と
を含むとき
(以下を満たす任意のもの)
は変数
は
が出現しない項
- (k3) そうではないとき
- (k2)
(k2)を置き換えた も以下のように定義します。
- (k1')
が一つの項からなるとき
- (k2') そうではないとき
の有限部分集合
に対して
が(k3)にならない
が存在すれば
を
で置き換えて
を合成した「部分写像」
として
を定義することができます。
定義 (単一化代入)
項の集合 に対して
の元の個数が
となるような代入
を
の単一化代入と呼びます。
を
の有限部分集合全体とします。
(UAGの停止性)
は
から
への写像
[証明] (k2)のとき に現れる変数の個数は
に現れる変数の個数より少なくなります。
に現れる変数の個数は有限なので(k2)が無限に繰り返されることはありません。よって
の有限部分集合
を 決めると
が決まり、
が決まります。よって
は
から
への写像となります。[証明終わり]
(UAG1)
ならば
は
の単一化代入
[証明] (UAGの停止性)よりある が存在して(k1)で
となるか、または
となります。
から
にはならないので
は
の単一化代入となります。[証明終わり]
に対して
となる代入
が存在するとき
と書くことにします。
は前順序となります。
(UAG2)
が
の単一化代入ならば
は
の単一化代入
[証明] が空集合ではないとします。
を満たす
をとります。
とおくと 、
となります。
、
より
となり、(S3)より
が成り立ちます。[証明終わり]
(UAG3)
が
の単一化代入ならば
かつ 
[証明] (UAGの停止性)より は
から
への写像となります。よって
または
となります。
アルゴリズム UAG の について、
かつ
であることを帰納的に示します。
かつ
は成り立っています。
かつ
であると仮定します。
(k1)ではないとき より
を満たす
が存在します。
は
の単一化代入となります。(UAG2)より
は
の単一化代入となります。
、
をとることができ、
となるので
のどちらかは変数となります。
を変数とすると、
は
を含まない項となります。よって(k2)が成り立ちます。
をこのような任意のものとし、
、
とおくと、
、
が
ではない変数のとき
が成り立つので
となり、
となります。よって
が成り立ちます。
よって(k2)が続いている間 かつ
であることが帰納的に示されました。
(k3)は成り立たないので、ある に対して(k1)が成り立ちます。よって
かつ
が成り立ちます。[証明終わり]
定義 (最汎単一化代入)
項の集合 に対して
- (MGU1)
が
の単一化代入で、
- (MGU2)
が
の単一化代入ならば
となるとき を
の最汎単一化代入と呼びます。
(UAG4)
ならば
は
の最汎単一化代入
[証明] (MGU1): (UAG1)より は
の単一化代入となります。
(MGU2): (UAG3)より が
の単一化代入ならば
となります。[証明終わり]
(UAG5)
が単一化可能ならば 
[証明] が単一化可能ならば、
の単一化代入
が存在します。(UAG3)より
となります。[証明終わり]

