node leaf 2 3 3 4 node leaf2leaf

  • Slides: 47
Download presentation

木構造処理 node leaf 2 3 3 4 ここを記述 メモリ 二次記憶, ネットワーク <node> <leaf>2</leaf> <leaf>3</leaf>

木構造処理 node leaf 2 3 3 4 ここを記述 メモリ 二次記憶, ネットワーク <node> <leaf>2</leaf> <leaf>3</leaf> </node> <leaf>3</leaf> <leaf>4</leaf> </node>

研究の目標 node leaf 2 3 ここを記述 メモリ 3 4 二次記憶, ネットワーク <node> <leaf>2</leaf> <leaf>3</leaf>

研究の目標 node leaf 2 3 ここを記述 メモリ 3 4 二次記憶, ネットワーク <node> <leaf>2</leaf> <leaf>3</leaf> </node> <leaf>3</leaf> <leaf>4</leaf> </node>

ソース言語の syntax M (項) : : = i (整数) | x | λx. M

ソース言語の syntax M (項) : : = i (整数) | x | λx. M | M 1 M 2 | M 1 + M 2 | fix f. M | leaf M | node M 1 M 2 | (case M of leaf x → M 1 | node x 1 x 2 → M 2)

プログラム例 (比較) • ソースプログラム – fix f. λt. (case t of leaf x →

プログラム例 (比較) • ソースプログラム – fix f. λt. (case t of leaf x → leaf (x + 1) | node x 1 x 2 → node (f x 1) (f x 2)) • ターゲットプログラム – fix f. λt. (case read() of leaf → write(leaf); write(read()+1) | node → write(node); f ())

型判定の例 Γ = f : Tree- → Tree+ のとき Γ | x 1 :

型判定の例 Γ = f : Tree- → Tree+ のとき Γ | x 1 : Tree-, x 2 : Tree- ├ node (f x 1) (f x 2) : Tree+ Γ | x 1 : Tree-, x 2 : Tree- ├ node (f x 2) (f x 1) : Tree+

型判定規則 (3/3) + Γ|Δ 1├M 1 : Tree Γ|Δ 2├M 2 : Tree Γ|Δ

型判定規則 (3/3) + Γ|Δ 1├M 1 : Tree Γ|Δ 2├M 2 : Tree Γ|Δ 1, Δ 2├ node M 1 M 2 : Tree + (T-NODE) + - Γ|Δ 1├M : Tree Γ, x: Int|Δ 2├M 1 : τ Γ|x 1: Tree -, x 2: Tree -, Δ 2├M 2 : τ (T-CASE) Γ|Δ 1, Δ 2├ case M of leaf x → M 1 |node x 1 x 2 → M 2 : τ

型付け例 Γ|Ø├ f : Tree- →Tree+ Γ|x 1: Tree-├ x 1 : Tree+ Γ|x

型付け例 Γ|Ø├ f : Tree- →Tree+ Γ|x 1: Tree-├ x 1 : Tree+ Γ|x 1: Tree-├ f x 1 : Tree+ Γ|x 2: Tree-├ f x 2 : Tree+ Γ|t: Tree-├ t : TreeΓx: Int|Ø├ leaf (x+1) : Tree+ Γ|x 1: Tree-, x 2: Tree-├ node (f x 1) (f x 2) : Tree+ Γ|t: Tree-├case t of leaf x => leaf (x + 1) | node x 1 x 2 => node (f x 1) (f x 2) : Tree+ Γ|Ø├λt. (case t of leaf x => leaf (x + 1) | node x 1 x 2 => node (f x 1) (f x 2)) : Tree- → Tree+ Ø|Ø├ fix f. λt. (case t of leaf x => leaf (x + 1) | node x 1 x 2 => node (f x 1) (f x 2)) : Tree- → Tree+ (ただしΓ= f: Tree- → Tree+とする)

変換アルゴリズム • • • A(x) = x A(i) = i A(λx. M) = λx.

変換アルゴリズム • • • A(x) = x A(i) = i A(λx. M) = λx. A(M) A(M 1 M 2) = A(M 1)A(M 2) A(M 1 + M 2) = A(M 1) + A(M 2) A(fix f. M) = fix f. A(M) A(leaf M) = write(leaf); write(A(M)) A(node M 1 M 2) -> write(node); A(M 1); A(M 2) A(case M of leaf x => M 1| node x 1 x 2 => M 2) = (case A(M); read() of leaf => let x=read() in A(M 1) | node => [()/x 1, ()/x 2]A(M 2))

変換例 A(fix f. λt. (case t of leaf x → leaf (x + 1)

変換例 A(fix f. λt. (case t of leaf x → leaf (x + 1) | node x 1 x 2 → node (f x 1) (f x 2))) = fix f. λt. (case t; read() of leaf => let x = read() in (write(leaf); write(x + 1)) | node => write(node); f ())

ターゲット言語への変更 e (項) : : = i | x | λx. e | ()

ターゲット言語への変更 e (項) : : = i | x | λx. e | () | e 1 e 2 | e 1 + e 2 | fix f. e | leaf | node | read e | write e | skip e | memtree e | (case e of leaf → e 1 | node → e 2) | (mcase e of leaf x → e 1 | node x 1 x 2 → e 2)

関連研究 • Ordered Linear Logic and applications. (Polakow ’ 01) • A type theory

関連研究 • Ordered Linear Logic and applications. (Polakow ’ 01) • A type theory for memory allocation and data layout. (Petersen et al. ’ 03) – メモリ上のデータ配置の正しさを保証

Fin

Fin

例) 要素全てに 1を足した木を作る 関数 • 木構造処理 – let rec f t = match t

例) 要素全てに 1を足した木を作る 関数 • 木構造処理 – let rec f t = match t with Leaf x → Leaf (x + 1) | Node x 1 x 2 → Node (f x 1) (f x 2) • ストリーム処理 – let rec f () = match read () of Leaf → write Leaf; write (read() + 1) | Node → write Node; f ()

型判定規則への変更 (一部のみ) Γ, x: MTree | Δ ├ M : τ e (T-MEMTREE) Γ

型判定規則への変更 (一部のみ) Γ, x: MTree | Δ ├ M : τ e (T-MEMTREE) Γ | x: Tree-, Δ ├ M : τ let x = memtree () in e Γ | Δ 1├ M : MTree e Γ, x: Int | Δ 2├ M 1: τ e 1 Γ, x 1: MTree, x 2: MTree | Δ 2 ├ M 2 : τ e 2 Γ | Δ 1, Δ 2├ case M of leaf x → M 1 | node x 1 x 2 → M 2 : τ mcase e of leaf x → e 1 | node x 1 x 2 → e 2 (T-MCASE)