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
これまでのあらすじ λ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)
今日の内容 λS
typedef を表現できる別のシステム let 式やモジュールインターフェイスではな
く“ Singleton kind” を用いる
導入 λ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]
なぜ?
← 型エラー
導入 なぜ型エラー?
X の kind が正確でない 実際は X には Nat しか入らないにもかかわらず X::* となっている
let X = Nat in (λx:X. x+1)(4)
(λX::*. (λx:X. x+1)(4)) [Nat] ← 型エラー
導入 そこで、新しい kind を導入
S(Nat) Nat と等価な型のみを含む kind
let X = Nat in (λx:X. x+1)(4)
(λX::S(Nat). (λx:X. x+1)(4)) [Nat] ← OK
Agenda
λs の定義Kind, kinding rulesType equivalence
Higher order singleton kinds Algorithmic type equivalence Phase-splitting
λ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 は表現力に影響しないので )
λS の kind : kind 付け規則
Γ├ T :: K pp.369 – 370 参照
だいたい普通Subkinding があるのが特徴
例 S(Nat) <: * * S(Nat) <: S(Nat) *⇒ ⇒
λ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)
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]
λ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
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)
equivalence は kind 依存 ├ (λX::*.X) ≡ (λX::*.Nat) :: * *⇒ ├ (λX::*.X) ≡ (λX::*.Nat) :: S(Nat) *⇒
以下の導出可能性に帰着 X::* ├ Nat ≡ X :: * X::S(Nat) ├ Nat ≡ X :: *
このあとの話題 Singleton at Higher Kinds Algorithmic Type Equivalence Phase-Splitting
λ(||) から λs への変換
Singleton at Higher Kinds
S( (λX::*. X→X) :: * *)⇒λX::*. X→X と * *⇒ で等価な型のみを含む kin
d
ΠX::*. S(X→X)一般的な定義はp.373
こう表現できる
Aspinall(1994)
Higher kind singleton をプリミティブにする
Γ├ S≡T :: K def= Γ├ S :: S(T::K)
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 を調べる
Natural Kind
Kind はいつ型定義をもつことができるかSingleton kind を持っているとき
K-SINTRO は実際に情報をふやすわけではない
⇒ Natural Kind K-SINTRO 規則を用いずに導ける、もっとも詳細
な kind のこと
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 :: *
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 :: *
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 での表現 )
λ(| |) の λ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
おしまい