470 likes | 604 Views
Complexity and Expressiveness of Models of XML Translations. 東京大学大学院 情報理工学系研究科 コンピュータ科学専攻 細谷研究室 稲葉 一浩. 背景. XML 処理プログラムの さまざまな性質を 静的に検証 したい 例: 「想定される全ての入力に対し、エラー状態に陥らず処理を完了する」 例: 「問題のある出力(型エラー、スクリプトインジェクション等)を決して出さない」 どうやって? 諸性質を決定可能な 抽象化されたモデル によって プログラムを表現 / 近似し、そのモデルで性質を検証. 「モデル」.
E N D
Complexity and Expressiveness of Models of XML Translations 東京大学大学院 情報理工学系研究科 コンピュータ科学専攻 細谷研究室 稲葉 一浩
背景 • XML処理プログラムのさまざまな性質を静的に検証したい • 例: 「想定される全ての入力に対し、エラー状態に陥らず処理を完了する」 • 例: 「問題のある出力(型エラー、スクリプトインジェクション等)を決して出さない」 • どうやって? 諸性質を決定可能な抽象化されたモデルによって プログラムを表現/近似し、そのモデルで性質を検証 「モデル」 XSLT, XQuery, XDuce, E4X 等のプログラム 検証
木構造変換のモデル • 検証のためのモデルに望まれる性質 • 高い表現力 より多くのプログラムを、より高精度に近似可能 • 種々の検証問題の決定可能性 • プログラムからのモデル構築の容易さ • 歴史 • Syntax-Directed Translation [Irons 1960] • Attribute Grammar [Knuth 1968](Attributed Tree Transducer) [Fülöp 1981] • Top-down/Bottom-up Tree Transducer [Thatcher&Wright 1970] • Tree-Walking Transducer [Aho&Ullman 1980] • Macro Tree Transducer [Engelfriet 1980, CourFrZ 1982] • MSO-Definable Tree Translation [Courcelle 1994] • Pebble Tree Transducer [Milo&Suciu&Vianu 2003]
Macro Tree Transducer (MTT) の長所 • 高い表現力 • 前ページのモデルは全てMTT、もしくはその合成でシミュレート可能 • 現実のXML処理言語のよいモデル化として使われている • XML-QL, (“expressive fragment of”) XSLT [MSV00], DTL [MBPS05], ... • 多くの性質が決定可能 • 全域性 • Emptiness • Domain/Range のメンバシップ • Range の有限性 • “Exact” な型検査 • …
MTT の短所 • 多くの性質が決定可能 → しかし、具体的な計算量が未知の問題が多い • 変換メンバシップ • 出力言語のメンバシップ • 出力言語の有限性 • … • 合成に関する閉包性が非常に弱い • MTTと他の変換の合成は、一般にはMTTで表現できない
モデルMk モデルM2 モデルM1 なぜ「合成」が重要か? • 木構造処理プログラムは複数の処理の組み合わせで記述されることが多い • XMLDBへのクエリ 出力用に整形 • Syntax Sugar の展開 最適化 別形式で出力, etc • 合成が可能であれば、「処理それぞれに対応するモデルを個別に計算したのち、合成」で全体のモデルが構築可能 モデルM = M1 ; M2 ; … ; Mk 処理1 処理2 処理k ・・・・ 入力 出力
なぜ「合成」が重要か? • なぜ全体を「ひとつの」モデルで表現したいか?(「MTT k 個の合成」という表現に対して 静的検証を行えばよいのでは??) • “k個の合成” に対する静的検証アルゴリズムは、“MTT1個” に対する静的検証と比較して、一般に • 複雑である • 効率的な実装がMTT1個の場合のみ。k個への拡張は困難な例など (e.g. Exact Type Checking [Maneth&Perst&Seidl 2007, Frisch&Hosoya 2007], Specialization [Matsuda&Fu&Takeichi 2009], etc) • 計算量が大きい (P vs NP, EXPTIME, …)
本研究の貢献 • MTTの拡張 ‘Multi-Return MTT’ を提案 • MTTにはない、合成に関する良い閉包性 • DT ;mrMTT ;DtT ⊆ mrMTT • MTT同様の決定可能性と、より高い表現力を持つ • MTTとその合成に関する計算量の研究 • 結果 • 出力言語のメンバシップ判定: DSPACE(n) かつ NP完全 • 変換メンバシップ判定: PTIME (1個), DSPACE(n) かつ NP完全 (合成) • キーアイデア • MTTの合成に伴う計算量の指数爆発を押さえるための汎用性のある技法“Garbage-Free Form”を証明
発表の流れ • MTTの概要 • Contribution 1合成可能性に優れたモデル “Multi-Return MTT” • Contribution 2MTT1つの “変換メンバシップ問題” の計算量 • Contribution 3 MTT合成列の計算量: “Garbage-Free Form”
MTT とは RHS ::= F( RHS, … , RHS ) | q(xi, RHS, …, RHS) | yi • Tree(Σ) から Tree(Δ) への変換を表すMTT =型 Tree(Σ)×Tree(Δ)k Tree(Δ) の関数の集まり • 第一引数(=入力木)に関して帰納的に定義される • 第一引数のラベルによって分岐 • 関数適用は、現在のノードの直接の子ノードに対してのみ可能 • 第2、第3、…引数(Accumulation Parameters)に対しては、ラベルを見たり子ノードを得たりできない • 各関数は、出力木1つを返す start( A(x1) ) → double( x1, double(x1, E) ) double( A(x1), y1) → double( x1, double(x1, y1) ) double( B, y1 ) → F( y1, y1) double( B, y1 ) → G( y1, y1)
非決定性MTT • 非決定性の使われかた • 「条件を満たす任意のノード1つ」のような非決定的なクエリの表現 • MTTの表現力を超える制御フローの近似 double( B,y1) = if complicated_condition then F( y1, y1 ) else G( y1, y1 ) double( B, y1 ) → F( y1, y1) double( B, y1 ) → G( y1, y1)
2つの評価戦略: IO と OI double( A(x1), y1) → double( x1, double(x2, y1) ) double( B, y1 ) → F( y1, y1) double( B, y1 ) → G( y1, y1) start(A(B)) double( B, double(B, E) ) double( B, F(E, E) ) F( F(E,E), F(E,E) ) or G( F(E,E), F(E,E) ) or double( B, G(E, E) ) F( G(E, E), G(E, E) ) or G( G(E, E), G(E, E) ) IO (inside-out / call-by-value):引数を評価してから関数呼び出し
2つの評価戦略: IO と OI double( A(x1), y1) → double( x1, double(x2, y1) ) double( B, y1 ) → F( y1, y1) double( B, y1 ) → G( y1, y1) start(A(B)) double( B, double(B, E) ) F( double(B, E), double(B, E) ) F( F(E,E), double(B, E) ) F( F(E,E), F(E,E) ) F( F(E,E), G(E,E) ) !! F( G(E,E), double(B, E) ) F( G(E,E), F(E,E) ) !! F( G(E,E), G(E,E) ) G( double(B, E), double(B, E) ) G( F(E,E), double(B, E) ) G( F(E,E), F(E,E) ) G( F(E,E), G(E,E) ) !! G( G(E,E), double(B, E) ) G( G(E,E), F(E,E) ) !! G( G(E,E), G(E,E) ) OI (outside-in / call-by-name):引数を評価せずに先に関数呼び出し
IO or OI? // f(A(x)) if ≪complex_choice≫ then e1 else e2 nondet_f( A(x) ) e1 nondet_f( A(x) ) e2 start( A(x) ) dup(x, nondet_f(x)) dup( A(x), y ) B(y, y) IO でのみ左右の木が常に等しい • なぜ二つの評価戦略を考えるのか? • IO は一般に、OIより良い近似となる • OI MTTの合成はIO MTTの合成より良い性質を持つ • (後述) “Garbage-Free Form” は、OIでのみ構成法が得られている • MTTIO⊆ MTTOI;MTTOI && MTTOI⊆MTTIO;MTTIO
Contribution 1 [Published at PLAN-X08 and CIAA08]合成可能性に優れたモデル“Multi-Return MTT”
木構造変換モデルの階層 [EV85] DT ; MTTOI⊆ MTTOI [OurWork] MTTOI ; LT ⊆ MTTOI mrMTTIO [EV85] LHOM ; MTTIO⊈MTTIO [OurWork] MTTIO ; LDtT ⊈ MTTIO [OurWork] MTTOI ; DtT ⊈ MTTOI [Our Work] DT ; mrMTTIO⊆ mrMTTIO mrMTTIO ; DtT ⊆ mrMTTIO MTTOI MTTIO [Fül81] DtT ; ATTR⊈ATTR [Fül81] DtT ; DATTR⊈DATTR ATTR [Fül81] DATTR ; DtT ⊆ DATTR [Eng77] TR ; TR⊈TR [Bak79] B ; B ⊈B DATTR [Cou94] MSOTT ; MSOTT ⊆ MSOTT [Eng77] TR ; DTR⊆ TR DTR ; TR⊆ TR [Bak79] B ; LB ⊆ B DB ; B ⊆ B MSOTT TR B [Eng77] DTR ; DTR⊆ DTR [Eng77] LTR ; LTR⊆ LTR DTR LTR = LB [Rou70] DtT ; DtT ⊆ DtT [Bak79] DB ; DB ⊆ DB DtT DB
Multi-Return MTT • 特徴 • 各関数は、複数の出力木からなる組を返す • “let” 構文により、返値の組を分解して使う f( ROOT(x) ) → let (z1, z2) = g( x, NIL ) in QUERY( z1, z2) g( A(x), y1, y2 ) → let (z1, z2) = g( x, y1, y2 ) in (CONS(copy(x), z1), z2) g( B(x), y1, y2 ) → let (z1, z2) = g( x, y1, y2 ) in (z1, CONS(copy(x), z2)) g( L, y1, y2 ) → (y1, y2) LET ::= let (z1,…,zn) = q(xi, TR, …, TR) in RHS ::= LET* (TR, …, TR) TR ::= δ(TR, …, TR) | yi | zi
右からの合成 • MTTIO ; DtT ⊈ MTTIO [Our Work] 合成をMTTで表現できなくなる後処理の例 (以下の規則を再帰的に適用): • mrMTTIO ; DtT ⊆ mrMTTIO [Our Work] • DtT = “deterministic, total, and top-down” • 累積引数を使わずtop-downの再帰で書ける全域関数 L R
右からの合成(証明の概要) • mrMTTIO ; DtT ⊆ mrMTTIO • 基本アイディア:mrMTT の関数 fと DtT の関数 g各々について、合成関数 <f;g>を作る • 非決定性の処理に Multi-Return が必要。例: • mrMTT の関数 f( A(x) ) A( nondet(x) ) • DtT の関数 g( A(x) ) B( g1(x), g2(x) ) • × 間違い • ○ 正解 <f;g>( A(x) ) = g(f(A(x)) = g(A(nondet(x)) = B( g1(nondet(x)), g2(nondet(x)) ) =B( <nondet;g1>(x), <nondet;g2>(x) ) <nondet;g1/g2>(…) (nondet(x)にg1とg2を適用した結果のペア) <f;g>( A(x) ) let (z1,z2) = <nondet;g1/g2>(x) inB( z1, z2)
左からの合成 • DtT ; MTTIO ⊈ MTTIO [Engelfriet&Vogler 1985] 合成をMTTで表現できなくなる前処理の例 (ルートに1つノードを追加): • DT ; mrMTTIO⊆ mrMTTIO [Our Work] • DT = “deterministic and top-down” • 累積引数を使わずtop-downの再帰で書ける関数 X
左からの合成(証明の概要) • DT ; mrMTTIO⊆ mrMTTIO • 基本アイディア: 同様に合成関数 <f;g>を作る • 非決定性ルールのインライン展開にletが必要 • DTの関数 f(L) A(L) • mrMTTの関数 g(A(x)) h(x, nondet) h(L, y) B(y, y) • × 間違い • ○ 正解 <f;g>(L) = g(f(L)) = g(A(L)) = h(L, nondet) = B( nondet, nondet ) <f;g>(L) let z = nondet in B(z, z)
関連研究 (左合成可能な MTTIOの拡張) • T ; YIELD [Engelfriet&Vogler 1985] • MTTIOを簡単な変換モデルの合成で特徴付けようとする際にベースとなったクラス (MTTIO = res-T ; YIELD) • HMTT [Maneth&Nakano 2008] • Macro Tree Transducer with Holes : “穴”の空いた木と、穴への木の挿入操作を持つMTT • MTTIO ; YIELD ⊆ HMTTIO 【本研究の特徴】 右からの合成にも対応している ⊊ HMTT MTTIO⊊ T;YIELD=HTT=1-mrMTT ⊊ mrMTT
関連研究 (Multi-Return) • Multi Bottom-up Tree Transducer[Fülöp&Kühnemann&Vogler 2004] • Top-down 変換のBottom-up 変換での特徴付け mrMTTIO MTTOI MTTIO ATTR DATTR MSOTT TR B 【本研究の特徴】 “Multi-Return” の 合成可能性への応用 DTR = mrDB LTR = LB DtT DB
Contribution 2 [Published at PLAN-X09]MTT1つ の“変換メンバシップ問題” の計算量
変換メンバシップ問題とは • 入力: 二つのツリーsとt • 出力: (s , t ) ∈ τ ? ? s t τ 変換 τ の “変換メンバシップ問題” とは:
変換メンバシップ問題とは assert( run_my_xslt( load_xml(“test-in.xml”) ) == load_xml(“test-out.xml”) ); • Assertion のチェック • 「左辺を計算して右辺と比較」より高速に判定可能か? • MTTの計算は指数ステップ(以上)かかることがあるが、それよりも効率的に変換メンバシップを解けるか? • 非決定性MTTの場合は? • 外部からの副作用(ランダムな選択、グローバルオプション等)を非決定性でモデル化した場合、「指定の出力を出すConfigurationはあるか?」を問う • より複雑な判定問題の部分問題 • (後述)出力言語メンバシップ判定問題
本研究で得られた結果 • MTTOI NP完全, DSPACE(n) • 系: MTTIO;MTTIO NP-hard • MTTIOとその拡張 多項式時間 • Multi-Return • 系: DT* ; mrMTT ; DtT* 多項式時間 • Regular+(Dis)equality look-ahead f( A(x1,x2) ) s.t. x1≡x2 → C( f(x1) ) f( A(x1,x2) ) s.t. x1 has even number of nodes → D( f(x1), f(x2) ) f( A(x1,x2) ) otherwise → E( f(x1), f(x2) )
変換メンバシップの計算量: MTTOI ∧ e.g., A 2 clauses ∨ ∨ A τ x1 x2 x3 x1 x2 x3 B ∧ or 3 variables B ∨ ∨ B x1 x2 ¬ ¬ x2 x3 • MTTOIの変換メンバシップは NP-hard [Our Work] • 3-SAT からの還元で証明 • 2つの自然数(n,m)をエンコードした入力木から、節数n、変数m種のSATisfiable論理式を全て生成するMTTが存在 Z x3 x1
∈ ? 変換メンバシップの計算量: MTTOI • MTTOIの変換メンバシップは NP, DSPACE(n)[OurWork] • 文脈自由文法による圧縮 • 出力集合 τ(s) は、|s| に比例するサイズの文脈自由木文法で表現可能 [Maneth&Busatto 2004] • 圧縮表現上での木のなぞり (up, 1stchild, nextSibling) を効率的に実行可能なクラス path-linear MTTOIの発見 [OurWork] S t τ(s)
∈ ? 変換メンバシップの計算量: MTTIO • MTTIOの変換メンバシップは PTIME [OurWork](最大でk引数のMTTの場合, O(n2k+2)) • Inverse Type Inference [EV85, MSV03] の応用 • 逆像 τ-1(t) は指数サイズ 2|t|のオートマトンで受理できる正規言語である • オートマトンの構築を、sに対するrunに必要になった部分のみlazyに行うことで、多項式時間での実行が可能 S t τ-1(t)
変換メンバシップの計算量: mrMTTIO 【mrMTTの有効性の一例】 Inverse Type Inference×3 の遅延実行でPTIMEアルゴリズムを得るのは困難 (Inv. Type Inf. の実行にはオートマトン全体の情報が必要なため) mrMTTIOで表現すれば、Inverse Type Inference ×1 の適用となりTrivial!! • mrMTTIOの変換メンバシップは PTIME[OurWork](最大でk引数d返値のMTTの場合, O(n2k+2d)) • MTTIOに対するアルゴリズム(Inverse Type Inference)の straightforward な拡張 • 系: DT ; MTTIO ; DtT の変換メンバシップも PTIME
関連研究 (変換メンバシップ問題の計算量) • Top-down Tree Transducer [Baker 1978] • 非決定性あり、Accumulation Parameter なし • DSPACE(n) ( O(n4) [Our Work]) • Total Deterministic MTT [Maneth 2002] • 非決定性なし、 Accumulation Parameter あり • DTIME(n) 【本研究の特徴】 より表現力の高いクラスを対象としている(非決定性と Acc. Param. を合わせて初めて発生する組み合わせ爆発の解決)
Contribution 3 [Published at FSTTCS08]“Garbage-Free Form” による MTT合成列の計算量の研究
変換メンバシップの計算量: MTT* • τ = τ1 ; τ2 ; τ3 ; … ; τk where τi∈ MTTIO∪ MTTOIの変換メンバシップ問題の計算量は? • 既にわかっていること • 少なくとも、NP-hard • MTTIO* = MTTOI* = mrMTTIO* [EV85, Our Work]
? ? ? ∈ ∈ ∈ 基本アプローチ: Generate & Test • 変換の中間木構造 s1, …, sk-1 を推測 • MTT1つ1つの変換メンバシップを判定 (s,s1)∈τ1, (s1,s2)∈τ2, …, (sk-1, t) ∈τk • 全て成り立てば、 (s,t) ∈ τ1 ; … ; τk • 成り立たなければ別の s1, …, sk-1 を試す τ1 τ2 τk s s1 s2 Sk-1 t
? ? ? ∈ ∈ ∈ 基本アプローチ: Generate & Test • Good News • τ(s) は有限なので、s1,…,sk-1の候補は有限 • 停止性の保証 • Bad News • |sn|=O(2^2^..2^2^|s|) • Good News • もし∀n.|sn| < O(|s|+|t|)なら、このアルゴリズムは NP/DSPACE(n) • 変換の中間木構造 s1, …, sk-1 を推測 • MTT1つ1つの変換メンバシップを判定 (s,s1)∈τ1, (s1,s2)∈τ2, …, (sk-1, t) ∈τk • 全て成り立てば、 (s,t) ∈ τ1 ; … ; τk • 成り立たなければ別の s1, …, sk-1 を試す 2n τ1 τ2 τk s s1 s2 Sk-1 t
[Our Work]“Garbage-Free Form” of MTTOI* • 任意のMTTIO/OI合成列τ = τ1 ;τ2 ;τ3 ; … ; τkに対して、等価な MTTOIの合成列τ = μ1 ; μ2 ; μ3 ; … ; μ2k+1で、μ2~ μ2k+1は nondeleting, (i.e., |in|/2≦|out|) なものを構成可能 (※ μ1 ; μ2 ; μ3 ; … ; μ2k+1 は最終出力と比べて無駄に巨大な中間構造を作らない(Garbage-Free)計算が可能)
Nondeleting と Garbage-Free の関係 • 「|s|+|t| より大きい中間木構造がある いずれかの変換 τnがdeleting」 • よって、「すべての変換がnondeleting 中間構造のサイズ < O(|s|+|t|)」 τ1 τ2 τk s s1 s2 t Sk-1
Garbage Free Form (証明概略) τ2 を、不要な入力を削除する変換 D2と、nondeleting な μ2 へ分解 • “Deletion” のくくり出し • τ1 ; τ2= τ1 ; (D2 ; μ2)= (τ1 ; D2) ; μ2= ρ1 ; μ2= D1 ; μ1 ; μ2 結合則 τ1と D2 の合成(MTTOIでのみ可能) 同様に
Garbage-Free Form の応用 [Our Work] • 変換メンバシップ • NP完全、DSPACE(n) • 出力言語のメンバシップ判定(変換τ、入力型 Sで決まる出力集合τ(S) に対し、木 t が含まれるか t∈τ(S) ?) • NP完全、DSPACE(n) • 非決定性計算(変換τ、入力木sに対し、τ(s)に属す木 t を1つ計算) • |s|+|t| に関して NP、DSPACE(n) • [Future Work] PTIME?
関連研究(Garbage-Free Form) • Top-down Tree Transducers [Baker 1978] • 非決定性あり、Accumulation Parameter なし • Total Deterministic MTT [Maneth 2002] • 非決定性なし、 Accumulation Parameter あり 【本研究の特徴】 - より表現力の高いクラスを対象としている。- 非決定性と Acc. Param. の組み合わせで生じる 新種のdeletion を分離する手法の提案。 (MTT のSyntax的な拡張 MTTCFを導入することで、inline展開等のプログラム変換を可能とし、分離を実現) f( A(x) ) dup( x, mayDelete(x) ) dup( A(x), y ) B( y, y )
[Our Work] DSPACE(n), NP完全 関連研究(Level-n文法 [Damm82] のメンバシップ) [Kuroda64] = NSPACE(n) 文脈依存文法 MTTOI* の出力言語 [Maneth02] DSPACE(n) DtMTT* の出力言語 ? Level-n IO文法 Level-n OI文法 ? Level-2 IO文法 Level-2 OI文法 [Asveld81] PTIME IO マクロ文法 = L1-IO文法 OIマクロ文法 = L1-OI文法 [Aho68] NSPACE(n)[Rounds73] NP完全 (CYK) PTIME 文脈自由文法 = Level 0文法
まとめ(本研究の貢献) • “Multi-Return MTT” の提案 • DtT (Accumulation Parameterを使わずにtop-downの再帰で記述できる全域関数) との合成に関して閉じたクラス • MTTおよびその合成に関する計算量の研究 • “変換メンバシップ” • IO MTT (およびその幾つかの拡張) 1つの場合多項式時間 • OI MTT (またはMTTの合成列) の場合NP完全 / DSPACE(n) • “Garbage-Free Form” • 任意のMTT合成列を無駄な中間構造を作らないよう変形 • “変換メンバシップ”、”出力言語のメンバシップ” の計算量 NP完全/DSPACE(n) を証明
将来の研究課題 (1) • Garbage-Free Form のさらなる応用・拡張 • 非決定性計算:入力木 s 、変換 τ から t ∈ τ(s) を「どれか一つ」取り出すのに必要は計算量は? • 予想: PTIME • 現在のGFFは、中間木構造である「τi(si) の要素」のサイズを押さえている。これを拡張し、|τi(si)| の無駄を消す必要がある。 range(τi) ⊆ dom(τi+1) という条件を加えたGFF
将来の研究課題 (2) • 変換メンバシップ等の実用的な実装 • NPやDSPACE(n)の全探索でs1, …, sk-1を探す 非現実的 • 現実のプログラムでは s1, …, sk-1 のかなりの部分が決定的に定まる 実用的な実装の可能性 • 変換の中間木構造 s1, …, sk-1 を推測 • MTT1つ1つの変換メンバシップを判定 (s,s1)∈τ1, (s1,s2)∈τ2, …, (sk-1, t) ∈τk • 全て成り立てば、 (s,t) ∈ τ1 ; … ; τk • 成り立たなければ別の s1, …, sk-1 を試す
発表論文 • 博士論文に含まれている研究 • Kazuhiro Inaba and Haruo Hosoya,“Mulit-Return Macro Tree Transducers”,Workshop on Programming Language Techniques for XML (PLAN-X 2008) • Kazuhiro Inaba, Haruo Hosoya, and Sebastian Maneth, “Multi-Return Macro Tree Transducers”,International Conference on Implementation and Application of Automata (CIAA 2008) • Kazuhiro Inaba and Sebastian Maneth, “The Complexity of Tree Transducer Output Languages”,Foundation of Software Technologies and Theoretical Computer Science (FSTTCS 2008) • Kazuhiro Inaba and Sebastian Maneth, “The Complexity of Translation Membership for Macro Tree Transducers”, Workshop on Programming Language Techniques for XML (PLAN-X 2009) • その他 • Kazuhiro Inaba and Haruo Hosoya,“XML Transformation Language Based on Monadic Second-Order Logic”, Workshop on Programming Language Techniques for XML (PLAN-X 2007)