Upgrade to Pro — share decks privately, control downloads, hide ads and more …

次元型に基づくループ不変条件自動生成(Synthesizing Loop Invariants via Dimension Types)

次元型に基づくループ不変条件自動生成(Synthesizing Loop Invariants via Dimension Types)

京都大学情報学研究科通信情報システム専攻平成27年度修士論文公聴会で発表

KINOSHITA Minoru

February 15, 2016
Tweet

More Decks by KINOSHITA Minoru

Other Decks in Research

Transcript

  1. ホーア論理での検証例 次のホーア三つ組を証明したい ループ不変条件が必要 {true} x := N; y := 0;

    {x = N ∧ y = 0} {x + y = N} while x = 0 do {x + y = N} // ループの本体で不変に成立 x := x − 1; y := y + 1 {x + y = N} end {x + y = N ∧ x = 0} {y = N} 4 / 29
  2. テンプレート法 [Colön ら 2003, Sankaranarayanan ら 2004, Müller-Olm ら 2003,

    Cachera ら 2014] ループ不変条件を生成するための手法 1. 多項式の次数を指定し,テンプレート p = 0 を生成 2. テンプレートがループ不変条件となるための制約を求める 3. 制約を解く 5 / 29
  3. テンプレート法の例 1 次のテンプレートとして px + qy + rN + s

    = 0 を 生成 不変条件となるためには以 下が必要 p = q r = −p s = 0 p(x + y − N) = 0 がループ 不変条件として得られる {true} x := N; y := 0; while x = 0 do x := x − 1; y := y + 1 end {y = N} 6 / 29
  4. テンプレート法の欠点 テンプレートの次数に対し てスケールしない 4 次のループ不変条件 を求めるためには 209 個の単項式をもつテン プレートが必要 有用なループ不変条件に適

    用できていない v − a は毎回 1 − ρ 倍される while ∗ do   x v t   :=   x + v v + a − ρv t +   end 空気抵抗のある等加速度運動を シミュレートするプログラム 7 / 29
  5. プログラム例 以下のプログラムを caccel とし,以降の説明で用いる x 質点の位置 v 質点の速度 t 時間

    a 質点の加速度 離散化の間隔 ρ 抵抗 while ∗ do   x v t   :=   x + v v + a − ρv t +   end 空気抵抗のある等加速度運動を シミュレートするプログラム 9 / 29
  6. アイデア 物理次元 を考慮に入れてテンプレートを作成する 次数 2 の T1 = p0 +

    p1 + p2 2 + p4a + p5a2 + p6t + p7 t + p8at + p9t2 + p10v + p11 v + p12av + p13tv + p14v2 + p15x + p16 x + p17ax + p18tx + p19vx + p20x2 + p21ρ + p22 ρ + p23aρ + p24tρ + p25vρ + p26xρ + p27ρ2 という一般的なテン プレートの代わりに T2 = p0v + p1a + p2at + p3xρ というテンプレートを生成 する 12 / 29
  7. アイデア 物理次元 を考慮に入れてテンプレートを作成する 次数 2 の T1 = p0 +

    p1 + p2 2 + p4a + p5a2 + p6t + p7 t + p8at + p9t2 + p10v + p11 v + p12av + p13tv + p14v2 + p15x + p16 x + p17ax + p18tx + p19vx + p20x2 + p21ρ + p22 ρ + p23aρ + p24tρ + p25vρ + p26xρ + p27ρ2 という一般的なテン プレートの代わりに T2 = p0v + p1a + p2at + p3xρ というテンプレートを生成 する 次数と「物理次元」を指定してテンプレートを生成する 12 / 29
  8. 次元型 [Kennedy 1994] 型として物理次元を与える型システム 型は自動で推論可能 caccel には以下の型が推論さ れる x :

    L v : LT−1 t : T a : LT−2 : T ρ : T−1 L は長さの物理次元,T は時間 の物理次元 while ∗ do   x v t   :=   x + v v + a − ρv t +   end 13 / 29
  9. テンプレート生成のアルゴリズム 入力 次数 n,次元型 τ 出力 型が τ で次数が n

    以下のテンプレート Example caccel の次数 2,次元型 LT−1 のテンプレートは p0v + p1a + p2at + p3xρ 14 / 29
  10. 同じ物理次元をもつ単項式の列挙 LT−1 と同じ物理次元をもつ単項式を列挙したい 任意の単項式は非負整数 c0, · · · , c5

    を用いて xc0 vc1 tc2 ac3 c4 ρc5 と表される xc0 vc1 tc2 ac3 c4 ρc5 の物理次元は Lc0+c1+c3 T−c1+c2−2c3+c4−c5 c0 + c1 + c3 = 1 かつ −c1 + c2 − 2c3 + c4 − c5 = −1 を解けば よい 次数の制約と合わせて v, at, a , xρ が得られる 15 / 29
  11. 固有値法のアルゴリズム (1/2) caccel の λ-不変多項式を求める 1. テンプレート T(x, v, t)

    を定める T(x, v, t) = p0v + p1a + p2at + p3xρ 2. λT(x, v, t) = T(x + v , v + a − ρv , t + ) であればよく, λT(x, v, t) = T(x + v , v + a − ρv , t + ) ⇐⇒ λ(p0v + p1a + p2at + p3xρ)− ((p0(1 − ρ ) + p3ρ )v + (p0 + p1 + p2)a + p2at + p3xρ) = 0 ⇐⇒ λ     p0 p1 p2 p3     =     1 − ρ 0 0 ρ 1 1 1 0 0 0 1 0 0 0 0 1         p0 p1 p2 p3     3. 下線部の行列の固有値問題を解くとパラメータの値が求まる 18 / 29
  12. 固有値法のアルゴリズム (2/2) 以下の λ-不変多項式が求まる 固有値 1,固有ベクトル (p0, p1, p2, p3)

    = (1, 0, −1, 1) 1-不変多項式 v − at + xρ に対応 固有値 1,固有ベクトル (p0, p1, p2, p3) = (0, 1, 0, 0) 1-不変多項式 a に対応 固有値 1 − ρ ,固有ベクトル (p0, p1, p2, p3) = (−ρ , 1, 0, 0) (1 − ρ )-不変多項式 −ρ v + a に対応 19 / 29
  13. 実験 (固有値法の有用性の確認) いくつかのプログラムに対して固有値法を適用し,有用性を確認 した (時間は秒) プログラム λ 多項式 |B|/|Bn| 時間

    (B) 時間 (Bn) Trig 1 + 2 c2 + s2 3/20 0.155 0.387 Harmonic 1 + 2k v2 + kx2 2/69 0.119 39.4 caccel 1 ρx + gt + v 8/83 0.351 8.58 1 − ρ g2t2+ 2gtv+ v2+ 2gtxρ+ 2vxρ+ x2ρ2 13/209 0.556 134 Trig (s, c) := (s + c , c − s ) Harmonic (x, v) := (x + v , v − kx ) 22 / 29
  14. 実験 (スケーラビリティ)(1/2) スケーラビリティの実証のため,以下のプログラムを用いて実験 した while ∗ do sum x :=

    sum + xn x + 1 end n + 1 次のテンプレートが必要になる n = 3 のとき,x4 − 2x3 + x2 − 4sum は不変 23 / 29
  15. 実験 (スケーラビリティ)(2/2) n 次元型を 次元型を 用いた場合 (秒) 用いない場合 (秒) 1

    2.05 × 10−2 1.38 × 10−2 2 2.02 × 10−2 4.42 × 10−2 4 2.41 × 10−2 2.40 × 10−1 8 3.80 × 10−2 2.55 16 9.00 × 10−2 8.40 × 10 32 3.39 × 10−1 ≥ 6.00 × 102 64 1.89 ≥ 6.00 × 102 128 8.70 ≥ 6.00 × 102 24 / 29
  16. 実験 (1/3) 速くなった プログラム Fastind 法 Fastind 法+次元型 tsol |B|

    tinf tsol tinf + tsol |B| dijkstra 9.29 21 0.456 8.83 9.29 21 divbin 0.674 21 0.388 0.362 0.750 8 freire1 0.267 10 0.252 0.258 0.510 10 freire2 2.51 35 0.463 2.60 3.06 35 cohencu 1.74 35 0.434 0.668 1.10 20 fermat 0.669 21 0.583 0.669 1.25 21 wensley 104 21 0.436 28.5 28.9 9 euclidex 1.85 45 1.55 1.39 2.94 36 lcm 0.811 28 0.513 0.538 1.05 21 prod4 31.6 84 0.149 2.78 2.93 35 knuth 137 220 4.59 136 141 220 mannadiv 0.749 21 0.515 0.700 1.22 18 26 / 29
  17. 実験 (2/3) 単項式の個数は削減できたが,実行時間は遅くなった プログラム Fastind 法 Fastind 法+次元型 tsol |B|

    tinf tsol tinf + tsol |B| dijkstra 9.29 21 0.456 8.83 9.29 21 divbin 0.674 21 0.388 0.362 0.750 8 freire1 0.267 10 0.252 0.258 0.510 10 freire2 2.51 35 0.463 2.60 3.06 35 cohencu 1.74 35 0.434 0.668 1.10 20 fermat 0.669 21 0.583 0.669 1.25 21 wensley 104 21 0.436 28.5 28.9 9 euclidex 1.85 45 1.55 1.39 2.94 36 lcm 0.811 28 0.513 0.538 1.05 21 prod4 31.6 84 0.149 2.78 2.93 35 knuth 137 220 4.59 136 141 220 mannadiv 0.749 21 0.515 0.700 1.22 18 27 / 29
  18. 実験 (3/3) 単項式の個数が変わらず,時間も遅くなったか変わらなかった プログラム Fastind 法 Fastind 法+次元型 tsol |B|

    tinf tsol tinf + tsol |B| dijkstra 9.29 21 0.456 8.83 9.29 21 divbin 0.674 21 0.388 0.362 0.750 8 freire1 0.267 10 0.252 0.258 0.510 10 freire2 2.51 35 0.463 2.60 3.06 35 cohencu 1.74 35 0.434 0.668 1.10 20 fermat 0.669 21 0.583 0.669 1.25 21 wensley 104 21 0.436 28.5 28.9 9 euclidex 1.85 45 1.55 1.39 2.94 36 lcm 0.811 28 0.513 0.538 1.05 21 prod4 31.6 84 0.149 2.78 2.93 35 knuth 137 220 4.59 136 141 220 mannadiv 0.749 21 0.515 0.700 1.22 18 時間はミリ秒 28 / 29