項書き換え系への変換に基づくメタ項書き換え計算の停止性

項書き換え系への変換に基づく
メタ項書き換え計算の停止性
情報システム学専攻
坂部研究室
蛸島 洋明
1
項書き換え系(TRS)
関数型プログラミング言語の計算モデル
左辺項と右辺項からなる書き換え規則の有限集合
(例)自然数の加算を定義するTRS
add(0, x)  x
add(s(x),y)  s(add(x,y))
s(x): x  1
入力項
出力項
add(s(0),s(0))  s(add(0,s(0)))  s(s(0))
2
メタ項書き換え計算(MRC)
TRSの記述・実行・検証を目的として提案された
計算モデル
等式定理の帰納法による証明の自動化などに
応用可能
(例)
•TRSの等価性証明
•オブジェクト指向言語の抽象機械の実行系の実現
[山本’98]
•Knuth-Bendix完備化アルゴリズムの実現[亀井’98]
3
メタ項とその書き換え
x.f(x)  a  bxb  a f(c)
規則中に規則を含規則
項
x.f(x)
 a  bxb  aa  bc
むことが可能
x.f(x)  a  bxb  aa  ac
メタ項の書き換えの特徴
•規則によって有効な範囲の相違
•規則を別の規則で書き換え可能
4
目的
メタ項の停止性を示すことができると
・自動証明の結果が取得可能
・他の性質の調査が容易
一般にメタ項の停止性は決定不能
メタ項の停止性証明法の提案
5
研究成果
単純メタ項:規則中に規則を含まないメタ項
動的左辺正規なメタ項の停止性証明法の提案
a  bc  dd
左辺正規性:
動的左辺正規なメタ項の任意の部分項の停止性
左単純メタ項:規則の左辺に規則を含まないメタ項
規則の左辺が書き換えられない性質
証明法の提案[夏のLA’04]
動的左辺正規性:
a  b  cf(b)b  dg(a)
書き換えても左辺正規性を保ち続ける性質
非左辺正規な単純メタ項の停止性証明法の提案
f(a)  cg(b)  f(a)b
[冬のLA’05]
f(a)  cg(b)  cb
非左辺正規な左単純メタ項への拡張[冬のLA’05]
6
動的左辺正規なメタ項の停止性証明法
φ(M)が停止性を持つ
Mが停止性を持つ
TRS φ(M)の停止性:TRSの停止性証明法を利用
a  b
a  b
M  a  b
c  b
c  b
c  a
d  cb
d  bb
d  cb
変換
φ(M)  {a  b,
c  a,
d  c}
変換
{a  b,
c  b,
d  c}
変換
{a  b,
c  b,
d  b}
7
動的左辺正規なメタ項の停止性証明定理
定理
Mを動的左辺正規なメタ項とする。
TRS φ(M)が停止性を持つならば
Mは停止性を持つ。
8
動的左辺正規なメタ項の手法の問題点
問題点:メタ項の左辺の書き換えに未対応
非左辺正規なメタ項
M  a  ba  bb
変換
φ(M)  a  b
a  bb  bb
変換
a  b,b  b
φM は停止性を持つがMは停止性を持たない。
b  b という規則を追加させる変換法が必要
9
非左辺正規な単純メタ項の停止性証明法
単純メタ項 M
変換、部分評価
TRS (M)
(M) が停止性を持つ
Mが停止性を持つ
10
単純メタ項に対するTRSへの変換と部分
評価
変換:TRSに変換して規則を階層化
部分評価:上の階層の規則で下の規則の左辺を書き換える
a  b
a  b
M  a  b
b  c
b  c
a  c
b  d
c  d (M)
b  d
d
d
d
{a  b,
a  c,
b  d}
{a  b,
a  c,b  c,
b  d}
{a  b,
a  c,b  c,
b  d, c  d}
メタ項の左辺の書き換えに対応
11
非左辺正規な単純メタ項の停止性証明
定理
定理
Mを単純メタ項とする。

(M)
TRS
が有限で停止性を持つ
ならばMは停止性を持つ。
左辺正規な単純メタ項の手法の一般化
無限集合の場合TRSは停止性を持たない。
12
左単純メタ項への拡張
対象となる左単純メタ項
•規則中の規則の左辺の保護
a  bf(b)  a/a  caa  da
左単純メタ項 M
aは書き換え不可
変換、部分評価
問題点:規則中の規則の扱い
ˆ )
TRS (M
ˆ ) が停止性を持つ
(M
Mが停止性を持つ
13
左単純メタ項に対するTRSへの変換
変換:TRSに変換して規則を階層化
規則中の規則の
階層の位置は?
M  a  bx.f(x)  a/a  cxf(a  da)
a  bx.f(x)  a/a  cxa/a  ca  da
{a  b,
f(x)  a/a  cx, a  c,
a  d}
f(x)  a/a  cx の後
a  d の前に出現
f(x)  a/a  cx
と同じ階層
14
左単純メタ項に対するTRSの部分評価
部分評価:上の階層の規則で下の規則の
左辺(規則中の規則以外)を書き換える
{a  b,
f(x)  a/a  cx, a/a  c,
a  d,b  d, c  d }
保護演算により
書き換え不可
ˆ ) 停止性を持つ
(M
M  a  bx.f(x)  a/a  cxf(a  da) 停止性を持つ
15
非左辺正規な左単純メタ項の停止性証明
定理
定理
Mを左単純メタ項とする。
TRS (Mˆ )が有限で停止性を持つ
ならばMは停止性を持つ。
左辺正規な左単純メタ項、非左辺正規な単
純メタ項に対する手法の一般化
16
まとめ
動的左辺正規なメタ項の停止性証明法の提案
動的左辺正規なメタ項の任意の部分項の
停止性証明法の提案
非左辺正規な単純メタ項の停止性証明法の
提案
非左辺正規な左単純メタ項への拡張
17
今後の課題
停止性証明が可能なメタ項のクラスの拡張
・規則中の規則の左辺を保護していないメタ項
停止性証明法の改善
・変換したTRSが停止性を持たず、メタ項が停止性
を持つ場合を減らす。
18
応用例
[u.ENV(u) [EQ(TRS1(0), TRS2(0))  TRUE]
[x.y.EQ(TRS1(s(x)), TRS2(s(y)))  EQ(TRS1(x), TRS2(y))]
[x.y.AND(TRUE,[x  y]TRUE)  TRUE]u]
[u.TRS1(u) [d(0)  0]
TRSの等価
[x.d(s(x))  s(s(d(x)))]u]
性を自動証明
[u.TRS2(u) [x.d(x)  if(x,0, s(s(d(x  s(0)))))]
するメタ項
[y.z.if(0, y, z)  y]
[x.y.z.if(s(x),y, z)  z]
[x.x  0  x]
[x.y.s(x)  s(y)  x  y]u]
ENV(AND(EQ(TRS1(d(0)), TRS2(d(0))),
[EQ(TRS1(d(p)), TRS2(d(p)))  TRUE]
EQ(TRS1(d(s(p))),TRS2(d(s(p))))
TRUEになれば
証明成功
19