24
ATTAPL 輪輪 2007/06/06 9.3 Singleton Kinds 輪輪 [email protected]

ATTAPL 輪講 2007/06/06 9.3 Singleton Kinds

  • Upload
    johnna

  • View
    33

  • Download
    2

Embed Size (px)

DESCRIPTION

ATTAPL 輪講 2007/06/06 9.3 Singleton Kinds. 稲葉 一浩 [email protected]. これまでのあらすじ. λ let typedef 的なものがある型システム t ::= … | let X = T in t (term) Γ::= (x:T | X::K | X::K=T )* (context) λ (| |) モジュールにおける typedef を扱うシステム - PowerPoint PPT Presentation

Citation preview

Page 1: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

ATTAPL 輪講 2007/06/06

9.3 Singleton Kinds

稲葉 一浩[email protected]

Page 2: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

これまでのあらすじ λlet

typedef 的なものがある型システム t ::= … | let X = T in t (term) Γ::= (x:T | X::K | X::K=T)* (context)

λ(| |)

モジュールにおける typedef を扱うシステム I ::= … | (|T|) | (|K|) | (|K=T|) (module interface)

Page 3: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

今日の内容 λS

typedef を表現できる別のシステム let 式やモジュールインターフェイスではな

く“ Singleton kind” を用いる

Page 4: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

導入 λlet は

型に関する λ 抽象 (λX::K. t )型に関する let 式 ( let X=T in t )

の両方をプリミティブに持っていた

let X = Nat in (λx:X. x+1)(4)

(λX::*. (λx:X. x+1)(4)) [Nat]

なぜ?

← 型エラー

Page 5: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

導入 なぜ型エラー?

X の kind が正確でない 実際は X には Nat しか入らないにもかかわらず X::* となっている

let X = Nat in (λx:X. x+1)(4)

(λX::*. (λx:X. x+1)(4)) [Nat] ← 型エラー

Page 6: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

導入 そこで、新しい kind を導入

S(Nat) Nat と等価な型のみを含む kind

let X = Nat in (λx:X. x+1)(4)

(λX::S(Nat). (λx:X. x+1)(4)) [Nat] ← OK

Page 7: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

Agenda

λs の定義Kind, kinding rulesType equivalence

Higher order singleton kinds Algorithmic type equivalence Phase-splitting

Page 8: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

λS の kind : 定義

K ::= * (kind of proper types) S(T) (singleton kind) ΠX::K. K (dependent product, K K)⇒ ΣX::K. K (dependent sum, K×K)

Γ::= (x:T | X::K)* (context)

※ ただし、 S(T) の T は T::* に限定 (Higher order singleton kind は表現力に影響しないので )

Page 9: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

λS の kind : kind 付け規則

Γ├ T :: K pp.369 – 370 参照

だいたい普通Subkinding があるのが特徴

例 S(Nat) <: * * S(Nat) <: S(Nat) *⇒ ⇒

Page 10: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

λS の kind : 例

Nat :: * Nat :: S(Nat) λX::*.X :: * *⇒ λX::*.X :: ΠX::*.* λX::*.X :: ΠX::*.S(X) λX::*.X :: S(Nat) S(Nat)⇒

(↓の略記)

( dependency を使った より正確な kind )

( subkinding)

Page 11: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

Exercise 9.3.1

「もし型に subtype 関係があったとしたら、 subkinding の規則はどうなるべきだろうか? Nat<:Top の時 S(Nat) と S(Top) の関係は?」

S(Top) <: S(Nat) ではない(λX::S(Nat). (λx:X. x+1)) [Top]

S(Nat) <: S(Top) でもない(λX::S(Top). (λf:X→(). f ┬)) [Nat]

Page 12: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

λS の type equivalence

Γ├ S ≡ T :: K p.370 参照

基本的には Fω×μ と同じ

特徴 Q-SELIM 則がある Q-BETA 則などがない! equivalence は kind に依存

Γ├ S :: S(T)─ ─ ─ ─ ─ ─ ─ ─

Γ├ S≡T :: S(S)

…Γ├ (λX::K.T)S ≡ [X→T]S :: K

Page 13: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

Q-BETA 則がない

Γ├T :: *

Γ├T :: S(T) Γ├ S :: *

Γ├ {T,S} :: S(T)×*

Γ├π1{T,S} :: S(T)

Γ├π1{T,S}≡T :: S(π1{T,S})

Γ├π1{T,S}≡T :: *

Q-SELIM

(kinding)

Page 14: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

equivalence は kind 依存 ├ (λX::*.X) ≡ (λX::*.Nat) :: * *⇒ ├ (λX::*.X) ≡ (λX::*.Nat) :: S(Nat) *⇒

以下の導出可能性に帰着 X::* ├ Nat ≡ X :: * X::S(Nat) ├ Nat ≡ X :: *

Page 15: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

このあとの話題 Singleton at Higher Kinds Algorithmic Type Equivalence Phase-Splitting

λ(||) から λs への変換

Page 16: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

Singleton at Higher Kinds

S( (λX::*. X→X) :: * *)⇒λX::*. X→X と * *⇒ で等価な型のみを含む kin

d

ΠX::*. S(X→X)一般的な定義はp.373

こう表現できる

Page 17: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

Aspinall(1994)

Higher kind singleton をプリミティブにする

Γ├ S≡T :: K def= Γ├ S :: S(T::K)

Page 18: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

Algorithmic Type Equivalence

Γ |→ S⇔T :: K ほぼ λlet とおなじ

Γ|→S⇔T::* は、Weak Head Normalization 後に構造等価性を判定

λlet と違い、 kind が型情報を持つ X::S(Nat) |→ X⇔Nat :: * は成立してほしい !W が型定義をもつ λ(||) と事情は同じ→“ Natural Kind”

Γ|→S⇔T::S(T’) は常に成立 Γ|→S⇔T::ΠX::K1.K2 は SX⇔TX を調べる Γ|→S⇔T::ΣX::K1.K2 は π1/2S⇔π1/2T を調べる

Page 19: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

Natural Kind

Kind はいつ型定義をもつことができるかSingleton kind を持っているとき

K-SINTRO は実際に情報をふやすわけではない

⇒ Natural Kind K-SINTRO 規則を用いずに導ける、もっとも詳細

な kind のこと

Page 20: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

Exercise 9.3.9 (1) 証明せよ

Y::(S(Nat) *) * |→ Y(λX::*.X) ⇔ Y(λX::*.Nat) :: *⇒ ⇒

Y:: 略 |→ Y←→Y :: 略 |→ (λX::*.X)⇔(λX::*.Nat) :: (S(Nat) *)⇒

Y::(S(Nat) *) * |→ Y(λX::*.X)←→Y(λX::*.Nat) :: *⇒ ⇒

X::S(Nat) |→ (λX::*.X)X⇔(λX::*.Nat)X :: *

既にWHNF

構造等価性

X::S(Nat) |→ (λX::*.X)X ~ > X ~ > Nat

X::S(Nat) |→ (λX::*.Nat)X ~ > Nat

X::S(Nat) |→ Nat←→Nat :: *

Page 21: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

Exercise 9.3.9 (2) 証明できない

Y::(* *) * |→ Y(λX::*.X) ⇔ Y(λX::*.Nat) :: *⇒ ⇒

Y:: 略 |→ Y←→Y :: 略 |→ (λX::*.X)⇔(λX::*.Nat) :: (* *)⇒

Y::(* *) * |→ Y(λX::*.X)←→Y(λX::*.Nat) :: *⇒ ⇒

X::* |→ (λX::*.X)X⇔(λX::*.Nat)X :: *

X::* |→ (λX::*.X)X ~ > X ~ > Nat

X::* |→ (λX::*.Nat)X ~ > Nat

X::* |→ Nat←→Nat :: *

Page 22: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

Phase-Splitting

λ(| |) や ML のモジュールは、型定義と term が混ざっている

これは分離可能 (Phase-Splitting)module diag = λ(p: sig type t; val x:t end). mod type u = p.t×p.t; val y:u = {p.x, p.x} end

module diag_s = λ(p: sig type t end). mod type u = p.t×p.t end module diag_d = λ(p: sig type t end). λ(q: sig val x:p.t end). mod val y:p.t = {q.x,q.x} end

diags = ΠX::*. S(X×X)

diagd = X::*. X → diag∀ s(X)

(λS での表現 )

Page 23: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

λ(| |) の λs への埋め込み

Type part (Static part)Module → (Pair of) typesModule Interface → Kind

Type equation →   Singleton Kind

Value part (Dynamic part)Module → (Pair of) ValuesModule Interface → Type

完全な定義は p.380

Page 24: ATTAPL 輪講  2007/06/06   9.3 Singleton Kinds

おしまい