43
Survey: A Type System for Certified Binaries 米米米 M2 米米 米米 < [email protected] p >

Survey: A Type System for Certified Binaries

  • Upload
    norris

  • View
    41

  • Download
    0

Embed Size (px)

DESCRIPTION

Survey: A Type System for Certified Binaries. 米澤研 M2  吉野 寿宏 < [email protected] >. 論文ソース. Z. Shao, V. Trifonov, B. Saha and N. Papaspyrou. A Type System for Certified Binaries. ACM Transactions on Programming Languages and Systems (TOPLAS) , 27(1), pp.1-45, 2005. この論文の目的. - PowerPoint PPT Presentation

Citation preview

Page 1: Survey: A Type System for Certified Binaries

Survey:

A Type System for Certified Binaries

米澤研 M2  吉野 寿宏<[email protected]>

Page 2: Survey: A Type System for Certified Binaries

論文ソース Z. Shao, V. Trifonov, B. Saha and N. Papaspyrou.

A Type System for Certified Binaries.ACM Transactions on Programming Languages and Systems (TOPLAS), 27(1), pp.1-45, 2005.

Page 3: Survey: A Type System for Certified Binaries

この論文の目的 Certified Binary に関する型理論フレームワ

ークの構築 高階述語論理と同等な記述力での定理記述を可能

にする Foundational Proof-Carrying Code

検証が決定可能になるように設計する 依存型を応用し、型検査の問題に帰着 型「推論」ではありません

Page 4: Survey: A Type System for Certified Binaries

Proof-Carrying Code (PCC)

コードと一緒に安全性に関する数学的証明を添付して配布 コード送信者が証明を作成する

手による、または自動で コード受信者はその証明を検証する

耐タンパ性がある コードだけ変えれば、コードが証明と矛盾を起こす 証明も変えれば、セキュリティポリシーと矛盾を起こ

す どちらにも当てはまらないならば、セキュリティポリ

シーに合致しているので安全なまま

Page 5: Survey: A Type System for Certified Binaries

Proof-Carrying Code (PCC)

関連 型付きアセンブリ言語 [Morrisett ら , 1998]

アセンブリ言語 ( ≒ 機械語 ) に対して型を導入 メモリアクセスの安全性などを型によって保証すると

いうアプローチ

Foundational PCC [Appel, 2001] Trusted Computing Base を小さくする研究 検証器 (VCgen: Verification Condition Generator) を

実装しなくても、定理証明系を使えばいい 高階述語論理による PCC の構成

定理証明系はいろいろある

Page 6: Survey: A Type System for Certified Binaries

Certified Binaries とは何か コードの挙動 ( 性質 ) に関する数学的証明を添

付されたコード 要するに PCC と同じです 性質の例 :

関数 f は素数を受け取ると必ず終了し、返り値も

また素数である

高階述語論理による記述 型付きアセンブリ言語 (Morrisett ら , 1998) など

よりも記述力が高い

Page 7: Survey: A Type System for Certified Binaries

方針 定理と証明を取り扱える型付き言語を設計

論理を記述する型言語 TL の設計 それを用いた計算言語 λH の設計

証明を保存するプログラム変換の定義 CPS 変換、 Closure 変換

λK 、 λC などの言語を定義し、変換 記述された性質が保存されることを証明

Page 8: Survey: A Type System for Certified Binaries

言語の設計 (sketch)

型付き λ 計算を基にする Fω [Girard ら , 1972] に類似

4 つの階層 ( 大きくは 2 つ ) に分けて設計

プログラムを表現

証明の記述を行う {

Page 9: Survey: A Type System for Certified Binaries

証明の記述 (sketch)

論理式を型によって表現 高階述語論理 ⇔ 依存型

Formulae-as-Types, Curry-Howard 対応とも呼ばれる 定理証明 ⇔ 型検査

Dependent product type ( 全称量化子 ∀ に対応 )

Page 10: Survey: A Type System for Certified Binaries

依存型 (Dependent Type)

値に依存する型を取り扱うための理論 Dependent product, Dependent sum

このあと出てくるのは dependent product だけなので、こちらのみ解説する

高階述語論理と同等の記述力を持つ Curry-Howard 対応

Page 11: Survey: A Type System for Certified Binaries

依存型 (Dependent Type)

Dependent Product (Π)

Dependent function とも呼ばれる

Vec(n) : n 要素のベクトル という型は n という値に依存 「自然数 (Nat 型 ) n をとり Vec(n) を返す関数」

の型→ Πn:Nat. Vec(n)

たとえばベクトルの作成などはこのような型 Πx:τ. τ’ において τ’ が x に依存しない場合は、

関数 τ→τ’ と同じ したがって、一般の関数は Π を用いて記述できる

Page 12: Survey: A Type System for Certified Binaries

Curry-Howard 対応 [Howard, 1980]

Formulae-as-types correspondence とも呼ばれる

命題をそれぞれ型と対応させる Logical connective ⇔ Functor

P Q⇒ ⇔ P → Q 型P Q∧ ⇔ P×Q 型

値はそれぞれの命題の証明を表すと考える命題 P の証明 ⇔ P 型の項P Q ⇒ の証明 ⇔ P → Q 型の関数項

量化子は dependent product, dependent sum に対応∀x S. P(x)∈ ⇔ Πx:S. P(x)

Dom( この関数 ) = S

Page 13: Survey: A Type System for Certified Binaries

依存型における問題 プログラムの型付けが非決定的になる可能性

実際のプログラムでは、副作用や無限ループが存在しうる

型を求めるためには値を計算する必要

型を保存したコンパイルが難しい CPS 変換において継続の型は? [Barthe ら , 19

99]

など

Page 14: Survey: A Type System for Certified Binaries

これらの問題を解決するために… 型が値に依存していることが原因

値 ( 計算言語 ) と型 ( 論理記述 ) を切り離せばよい

⇒ 依存する部分を「上に持ち上げる」 依存「型」ではなく、依存「類」などにする 値と、型以上の部分を分離することができる

類は型に依存してもよい

Page 15: Survey: A Type System for Certified Binaries

Type Language TL

3 つの階層 Type 計算を抽象化したモデルを記述 Kind モデルに関する性質を記述 Kscm 性質に関する性質を記述

Π はそれぞれ下のレベルでの λ- 抽象と適用に対応 たとえば、 λt:κ.τ は Πt:κ.κ’ と型付けされる Type のレベルに Π は含まれていない

Page 16: Survey: A Type System for Certified Binaries

Type Language TL

Ω (= 計算式 ) の定義は帰納的であると仮定 生成 : Ctor, 破壊 : Elim 一般的な枠組み : Ind (at kind level) プログラム変換が証明を保存することが議論可能に

プログラム変換とは、 Ω → Ω’ の変換であるが、このようにすることで帰納的な Ω は統一的に扱える

Page 17: Survey: A Type System for Certified Binaries

TL による記述の例Inductive Nat: Kind := zero: Nat

| succ: Nat → Nat

plus: Nat → Nat → Nat

plus(zero)= λt:Nat. t

plus(succ t) = λt’:Nat. succ ((plus t) t’)

ifez: Nat → (Πk:Kind. k → (Nat → k) → k)

ifez(zero) = λk:Kind. λt1:k. λt2:Nat → k. t1

ifez(succ t) = λk:Kind. λt1:k. λt2:Nat → k. t2 t

Type

Kind

Kscm

Ctor

Elim

Page 18: Survey: A Type System for Certified Binaries

TL による記述の例Nat : Kind = Ind(X: Kind) { X; X→X }

plus : Nat→Nat→Nat =λt:Nat. Elim[Nat, Nat→Nat→Nat] (t) {

λt’:Nat. t’ ;λt’:Nat. succ (plus t t’)

}

zero = Ctor(1, Nat), succ = Ctor(2, Nat) の省略と考える Nat に関する ι 簡約

Elim[Nat. A”] (zero) {B0; Bs} →ι B0

Elim[Nat, A”] (succ N) {B0; Bs} →ι Bs N A” は証明に用いられる

Inductive Nat: Kind :=zero: Nat

      | succ: Nat → Nat

plus: Nat → Nat → Natplus(zero)   = …plus(succ t) = …

Page 19: Survey: A Type System for Certified Binaries

類似研究 Pure Type Systems, λU [Barendregt, 1991] [Werner, 1994] Coq/CIC [Huet ら , 2000]

System Notation

TL Kind Kscm Ext

Werner Set Type Ext

Coq/CICSet,Prop

Type(0) Type(1)

Barendregt * □ △

Page 20: Survey: A Type System for Certified Binaries

TL の性質型付け規則 λ 抽象と適用

Π に関して

ただし R = Ext は Kscm のもう一つ上のレベル

Page 21: Survey: A Type System for Certified Binaries

TL の性質型付け規則 帰納的類に関して

類定義

コンストラクタ

デストラクタ

Ci が類 X のwell-formed constructor

であるとりあえず細かいので省略

Page 22: Survey: A Type System for Certified Binaries

TL の性質簡約関係 β 簡約、 η 簡約 : 通常の λ 計算と同様

帰納的な型に関する ι 簡約

なお、上において Φ は次のように定義される

コンストラクタ引数を本体に適用

するメタ関数

Page 23: Survey: A Type System for Certified Binaries

TL の性質ι 簡約の例

plus (succ zero) zero   ⇒ succ zero になればよい

Page 24: Survey: A Type System for Certified Binaries

TL の性質ι 簡約の例

plus (succ zero) zero→ (λt:Nat. Elim[Nat, A”] (t) {…}) (succ zero) zero

Page 25: Survey: A Type System for Certified Binaries

TL の性質ι 簡約の例

plus (succ zero) zero→ (λt:Nat. Elim[Nat, A”] (t) {…}) (succ zero) zero→β Elim[Nat, A”] (succ zero) {…} zero

Page 26: Survey: A Type System for Certified Binaries

TL の性質ι 簡約の例

plus (succ zero) zero→ (λt:Nat. Elim[Nat, A”] (t) {…}) (succ zero) zero→β Elim[Nat, A”] (succ zero) {…} zero→ι (λt:Nat. λt’:Nat. succ (plus t t’)) zero zero

Elim[Nat, A”] (succ t) {BElim[Nat, A”] (succ t) {B00; B; Bss}}

→→ιι B Bss t t

Page 27: Survey: A Type System for Certified Binaries

TL の性質ι 簡約の例

plus (succ zero) zero→ (λt:Nat. Elim[Nat, A”] (t) {…}) (succ zero) zero→β Elim[Nat, A”] (succ zero) {…} zero→ι (λt:Nat. λt’:Nat. succ (plus t t’)) zero zero→β (λt’:Nat. succ (plus zero t’)) zero→β succ (plus zero zero)→ succ ((λt:Nat. Elim[Nat, A”] (t) {…}) zero zero)→β succ (Elim[Nat, A”] (zero) {…} zero)

Page 28: Survey: A Type System for Certified Binaries

TL の性質ι 簡約の例

plus (succ zero) zero→ (λt:Nat. Elim[Nat, A”] (t) {…}) (succ zero) zero→β Elim[Nat, A”] (succ zero) {…} zero→ι (λt:Nat. λt’:Nat. succ (plus t t’)) zero zero→β (λt’:Nat. succ (plus zero t’)) zero→β succ (plus zero zero)→ succ ((λt:Nat. Elim[Nat, A”] (t) {…}) zero zero)→β succ (Elim[Nat, A”] (zero) {…} zero)→ι succ ((λt’:Nat. t’) zero)

Elim[Nat, A”] (zero) {BElim[Nat, A”] (zero) {B00; B; Bss}}

→→ιι B B00

Page 29: Survey: A Type System for Certified Binaries

TL の性質ι 簡約の例

plus (succ zero) zero→ (λt:Nat. Elim[Nat, A”] (t) {…}) (succ zero) zero→β Elim[Nat, A”] (succ zero) {…} zero→ι (λt:Nat. λt’:Nat. succ (plus t t’)) zero zero→β (λt’:Nat. succ (plus zero t’)) zero→β succ (plus zero zero)→ succ ((λt:Nat. Elim[Nat, A”] (t) {…}) zero zero)→β succ (Elim[Nat, A”] (zero) {…} zero)→ι succ ((λt’:Nat. t’) zero)→β succ zero

Page 30: Survey: A Type System for Certified Binaries

TL の性質証明されている定理 β, η, ι の簡約について、以下を満たす

Preservation 簡約が judgement を保存する

全ての型付けされた項は強正規性を持つ すなわち、簡約が必ず停止する

Church-Rosser 性 ( 合流性 ) βηι 同値な項を簡約すると、同一の正規形に簡約される

また、論理の無矛盾性も証明可能 ├ A: False となる項 A は存在しない

ただし、 False: Kind = Πk:Kind. k である 健全性を保証

Page 31: Survey: A Type System for Certified Binaries

Computation Language λH

λ 計算ベース 整数 (n) と bool 値 (tt, ff) パッケージ (<X=A, e:A’>, open…) タプル (<e0,…,en-1>, sel) If-then-else

Page 32: Survey: A Type System for Certified Binaries

Computation Language λH

意味論はほぼ自明なので省略 証明のために一部 [A] などが加えられている Λ( 大文字に注意 !) は型多相を表す

式の型定義 Ω 明らかに帰納的

Page 33: Survey: A Type System for Certified Binaries

Computation Language λH

If [B, A](e, X1.e1, X2.e2) の意味は? 意味論より

e は分岐条件 (bool 値に評価される式 ) A は B に関する証明を与える

つまり B true または B false の証明 A : Bool→Kind

X1, X2 は証明を格納される型変数 これにより、分岐においてどういう性質が用いられたかを

下のレベルに伝播させる sel などのプリミティブが内部で活用

Page 34: Survey: A Type System for Certified Binaries

Computation Language λH

式と型の間の対応をとるために Singleton Type を使用する 一つの自然数 A に対して一つの型 snat A が対応 snat A に対しパッケージ <t=A, e: snat t> が nat

型を持つnat : Ω = t:Nat. snat t∃

演算の表現  add = λx1:nat. λx2.nat.

open x1 as <t1, x1’> in open x2 as <t2, x2’> in   <t = plus t1 t2, x1’+x2’ : snat t>

型と値の一対一対応

Page 35: Survey: A Type System for Certified Binaries

Example:

Bound Check Elimination

まず n 個の要素から為る型 A のタプルを定義

vec : Nat→Ω→Ωvec = λt:Nat. λt’:Ω. tup t (nth (repeat t t’))

nth, repeat はリスト上の操作Inductive List : Kind := nil : List | cons : Ω→List→Listrepeat : Nat→Ω→Listrepeat zero = λt’:Ω. nilrepeat (succ t) = λt’:Ω. T’::(repeat t) t’nth : List→Nat→Ωnth nil = λt:Nat. voidnth (cons t1 t2) = λt:Nat. ifez t Ω t1 (nth t2)

tup : Nat→(Nat→Ω)→Ω

Page 36: Survey: A Type System for Certified Binaries

Example:

Bound Check Elimination

自然数のタプルをとり要素の和を返す関数 sumVec

sumVec : t:Nat. snat t→vec t nat→nat∀= Λt:Nat. λn:snat t. λv:vec t nat.   (fix loop: nat→nat→nat.

λi:nat. λsum:nat. open i as <t’, i’> in  if [LTOrTrue t’ t, ltPrf t’ t] ( i’ < n,    t1. loop (add i 1 ) (add sum (sel[t1]

(v, i’))),    t2. sum)) 0 0

タプルの範囲外をアクセスしないことを保証したい LTOrTrue, ltPrf を与えることによる

Page 37: Survey: A Type System for Certified Binaries

Example:

Bound Check Elimination

LTO r TrueLTOrTrue : Nat→Nat→Bool→KindLTOrTrue = λt1:Nat.λt2:Nat.λt:Bool.

Cond t (LT t1 t2) TrueCond : Bool→Kind→Kind→KindCond(true) = λk1:Kind.λk2:Kind. k1

Cond(false) = λk1:Kind.λk2:Kind. k2

True : Kind = Πk:Kind. k→k ↑ True の証明としては恒等関数が与えられる

ltPrf A A’ A < A’ ならば LT A A’ の証明 (= 型 ) を返す A A’ ≧ の場合は特に何も返す必要はない

そのために True を用いる

Page 38: Survey: A Type System for Certified Binaries

Example:

Bound Check Elimination

LT : Nat→Nat→Kind LT zero (succ t) LT t t’ LT (succ t) (succ t’)⇒

証明スケッチ if が true に分岐した場合について

LT t’ t が成立していることが内部の式に伝播 sel においてその証明を用いられ、タプルの長さを

超えたアクセスをしないことを証明する If が false に分岐した場合

True が渡されるが、これは情報を持たない

Page 39: Survey: A Type System for Certified Binaries

Proof-Preserving Compilation

CPS Conversion

λH を、下記の定義で表される λK に変換

Let-binding と conditional branch の sequence で構成されるプログラム

λH, λK いずれも計算言語は帰納的に定義 証明を記述する型言語 TL は共通 式の型 (: Ω) が変化するが、簡単に変換可能

Page 40: Survey: A Type System for Certified Binaries

Proof-Preserving Compilation

CPS Conversion

λK の型 ΩK λH に対する Ω とほぼ同じだが、 CPS 変換後

のコードは戻り値を持たないので、→ の定義が変化 Ω では → : Ω→Ω→Ω ΩK では → : ΩK→ΩK

Ω と ΩK の対応

Page 41: Survey: A Type System for Certified Binaries

Proof-Preserving Compilation

要するに

λH λK

Ω ΩKいろいろな型

Kind, Kscm (Kind, Kscm ( 定理の記述定理の記述 ))

変換!

Page 42: Survey: A Type System for Certified Binaries

まとめ Certified Binary のための型付き言語を設計

Dependent Type の理論を応用し、高階述語論理と同等の記述性を持つ

型の簡約について強正規性が成り立ち、したがって検証は決定可能である

計算言語には自由度があり、 Ω を設計すれば容易に組み込むことができる

この定義のもと、記述された性質を保存するプログラム変換を定義した CPS 変換 , Closure 変換

Page 43: Survey: A Type System for Certified Binaries

参考文献 G. Necula. Proof-Carrying Code. In Proceedings of the 24th

ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL), pp. 106-119, 1997.

A. W. Appel. Foundational Proof-Carrying Code. In Proceedings of the 16th IEEE Symposium on Logic in Computer Science (LICS), p. 247, 2001.

Wikipedia. Intuitionistic Type Theory.http://en.wikipedia.org/wiki/Intuitionistic_Type_Theory