a( q(x)() ) - Kmonos.net

Download Report

Transcript a( q(x)() ) - Kmonos.net

Macro Tree Transducer
の
型検査アルゴリズム
POPLミーティング 2006/05/31
稲葉 一浩
Introduction

XML変換言語


型チェック


XMLからXML(木構造から木構造)への
変換に特化した専用言語
専用言語の特徴を使って、λ計算やMLな
どの一般的な型検査よりも詳細な検査が
できる(可能性がある)。
Macro Tree Transducer

木構造変換の形式化のひとつ
発表のながれ

いろいろと定義




型チェック




Tree
Tree Automaton
Macro Tree Transducer
Forward type inference
Inverse type inference
MTTの型検査アルゴリズム
参考資料
定義 : Tree

ランクつきアルファベット
Σ = {σ1, σ2, ..., σn }
 rank : Σ → Nat


Σ上のTreeを以下で帰納的に定義

t ::= σ1 ( t1, ..., trank(σ1) )
| σ2 ( t1, ..., trank(σ2) )
...
| σn ( t1, ..., trank(σn) )
例 : Tree
Σ = { a, b, c }
 rank(a)=0, rank(b)=1, rank(c)=2


c(c(a,a), b(a))
c
c
a
b
a
a
定義 : 決定性Tree Automaton

トップダウン
{Q, q0, F, δ, Σ}
 δσ : Q → Qrank(σ)


q2 ∈F?
A
ボトムアップ
{Q, F, δ, Σ}
 δσ : Qrank(σ) → Q
q3
q1
B

C
q1
q2
D
E
Tree Automaton と Regularity

「決定性ボトムアップツリーオートマトン
の受理する木の集合」というのは、非常
によい性質を持っている

Regular (正規)
• 等価なさまざまな定式化
• Regular Tree Grammar, MSO, ...
• 木構造に対する「型」として一般的によく使わ
れている
• → 本発表では、木の「型」はツリーオートマトンで
与えることにする。
Macro Tree Transducer
(MTT)

Treeを入力としてTreeを出力するもの
トップダウンツリーオートマトン
 + 出力付き
 + アキュムレータ付き

定義 : MTT

{Q, q0, Σ, Δ, ξ}
Q : 状態集合
 q0 : 始状態 ∈ Q
 Σ : 入力木のアルファベット
 Δ : 出力木のアルファベット
 ξ : 変換規則

定義 : MTT : 変換規則

ξ : 以下の形の「変換規則」の集合
q∈Q
 σ ∈ Σ, n=rank(σ)

関数名
引数(Σ上の木)
引数(Δ上の木) mはq毎に固定
q(σ(x1,...,xn) )( y1, ..., ym )
⇒ (Δ ∪ q(xi) ∪ yj) 上のTree
関数の値
例1 : MTT
入力 Σ= {a, c} rank(a)=2, rank(c)=0
 出力 Δ= {a, b, c} rank(b)=2


ルートから数えて偶数番目の高さの
“a” ノードを “b” に書き換える変換
q0( a(x,y) )()
q0( c()
)()
q1( a(x,y) )()
q1( c()
)()
⇒
⇒
⇒
⇒
a( q1(x)(), q1(y)() )
c()
b( q0(x)(), q0(y)() )
c()
例2 : MTT
入力 Σ = {a,b,c} rank(a)=(b)=1, (c)=0
 出力 Δ = {a,c}


“b”ノードを削除する変換
q0( a(x) )() ⇒ a( q0(x)() )
q0( b(x) )() ⇒ q0(x)()
q0( c() )() ⇒ c()
例3 : MTT
入力 Σ = {a,b,c} rank(a)=(b)=1, (c)=0
q0(
q1(x)( a(q2(x)()) )
 a(x)
出力)()
Δ =⇒{a,b,c}

q0( b(x) )() ⇒ q1(x)( b(q2(x)()) )
q0( c() )() ⇒ c()
 ”a” “b”の並びを逆転させる変換
q1(
a(x) )(y) ⇒ q1(x)( a(y) )
q1( b(x) )(y) ⇒ q1(x)( b(y) )
q1( c() )(y) ⇒ y
q2( a(x) )() => q2(x)()
q2( b(x) )() => q2(x)()
q2( c() )() => c()
q2( d() )() => d()
MTTの表現力
1個だと「そこそこ」
 有限個のMTTを組み合わせることで、かな
り実用的な変換言語と同等の記述力

TL [Manethら, 2005] : 3個のMTT
 k-pebble tree transducer : k+1個のMTT
 higher order tree transducer : k個のMTT

問題:「型検査」
入力Treeの型 (RI) =ツリーオートマトン
 変換プログラム(τ)
=MTT
 出力Treeの型 (RO) =ツリーオートマトン


forall x. (x : RI ⇒ τ(x) : RO) ???
Forward Type Inference
入力の型 RI と変換MTT τ から、
実際に出力されうる木の型 RO’ を計算
 RO’ ⊆ RO ならOK


ダメ
MTTはRegularityを保存しない
 コピー q(a(x))() ⇒ b(q(x), q(x))

Inverse Type Inference
出力の型 RO と変換MTT τ から、
入力として受け取れる木の型 RI’ を計算
 RI ⊆ RI’ なら OK


大丈夫!

MTTの逆変換はRegularityを保存する!
アルゴリズム
出力型を表すオートマトン RO
 変換MTT τ

から、入力として取り得る木の型を表す
オートマトン RI’ を構築する
 RI ⊆ RI’ の判定アルゴリズムは既知な
のでOK

RI’の構築
RO = {P, Pf, Δ, β}
 τ = {Q, q0, Σ, Δ, ξ}


RI’ = {D, Df, Σ, α}
where D = { d | d : Q→(Pm→P) }
Df= { d | d(q0)(())∈Pf }
RI’の構築

RI’ = {D, Df, Σ, α}
where D = { d | d : Q→(Pm→P) }
Df= { d | d(q0)(())∈Pf }
ルートのノード x が状態 d∈Df になる
if and only if
その木を変換 q0(x) すると、
出力木の状態は Pf に入る
 が成立するように遷移関数を定める

RI’の構築

RI’ = {D, Df, Σ, α}
where D = { d | d : Q→(Pm→P) }
Df= { d | d(q0)(())∈Pf }
入力木のノード x が状態 d になる
if and only if
そのノード以下の部分木を変換 q(x,ys) す
ると、出力木の状態は d(q)(β(ys)) になる
 が常に成立するように遷移関数を定める

MTTの変換規則

関数名
RI’ = {D, Df, Σ, α}
where D = { d | d : Q→(Pm→P) }
Df= { d | d(q0)(())∈Pf }
引数(Σ上の木)
引数(Δ上の木) mはq毎に固定
q0(σ(x1,...,xn) )( y1, ..., ym )
⇒ a( q1(x2)(y1,y3), q2(x4)(), c )
関数の値
具体例 : “b”を削除するMTT



入力 Σ = {a,b,c} rank(a)=(b)=1, (c)=0
出力 Δ = {a,c}
Q = {q}
q( a(x) )() ⇒ a( q(x)() )
q( b(x) )() ⇒ q(x)()
q( c() )() ⇒ c()


入力型 b*c
出力型 c とすると型検査が通ることを確認
具体例 : “b”を削除

出力型 c のオートマトン {P,Pf,Δ,β}

変換を表すMTT {Q,q,Σ,Δ,ξ}
β(c)() = p0
β(a)(p) = p1
Pf = {p0}
P = {p0,p1}
q( a(x) )() ⇒ a( q(x)() )
q( b(x) )() ⇒ q(x)()
q( c() )() ⇒ c()
参考資料

“A Comparison of Pebble Tree
Transducers with Macro Tree
Transducers”, Joost Engelfriet and
Sebastian Maneth, 2003

“XML Type Checking Using HighLevel Tree Transducer”, Akihiko
Tozawa, 2006
おわり