SlideShare a Scribd company logo
1 of 42
Download to read offline
TaPL読書会 [#3]




               2012.08.29
§. 8
Typed Arithmetic Expressions
8章でやること
●   型付け規則の導入(Simple types)

●
    型付けの一意性の証明(Simple typesの場合)

●   型安全性の証明
    (* Safety = Progress + Preservation)
8章でやること
●   型付け規則の導入(Simple types)

●
    型付けの一意性の証明(Simple typesの場合)

●   型安全性の証明
    (* Safety = Progress + Preservation)
おさらい
●   Untyped booleans (3章)

●
    Untyped arithmetic expressions (3章)
●
    Untyped booleans

    Syntactic forms
    t ::=                    v ::=
        true                       true
        false                      false
        if t then t else t

    Evaluation rules
     if true then t2 else t3 → t2          (E-IfTrue)
     if false then t2 else t3 → t3         (E-IfFalse)
                        t1 → t1'
      if t1 then t2 else t3 → if t1' then t2 else t3
                          (E-If)
●
    Untyped arithmetic expressions
    (Extends untyped booleans)
    New Syntactic forms
    t ::= ...             v ::= ...
        0                          nv
        succ t
        pred t            nv ::=
        iszero t                   0
                                   succ nv
●
    Untyped arithmetic expressions (Extends booleans)

    Evaluation rules
           t1 → t1'
      succ t1 → succ t1'               (E-Succ)

      pred 0 → 0                       (E-PredZero)
      pred (succ nv1) → nv1            (E-PredSucc)
           t1 → t1'
      pred t1 → pred t1'               (E-Pred)

      iszero 0 → true                  (E-IszeroZero)
      iszero (succ nv1) → false        (E-IszeroSucc)
              t1 → t1'
      iszero t1 → iszero t1'           (E-Iszero)
おさらい
●   Untyped arithmetic expressionsには、stuck
    となる(valueでなく、評価規則も適用できな
    い)項が存在
    e.g.
     pred false → ?

●   Untyped arithmetic expressionsの世界では、
    実際に評価しなければstuckかどうか判別でき
    ない
    ⇒ある項がstuckとならないことを静的に知り
    たい
型付け規則の導入
●   Untyped arithmetic expressionsの各項に
    「型」を付ける

●   そのために、以下の型のsyntaxと型付け規則を
    導入する

●   Notation
    S, T, U, …   metavariables of types
    t : T        typing relation
                 “a term t has type T”
●
    Simply typed booleans

    New Syntactic forms
    T ::=                       types
        Bool                    type of booleans

    New typing rules
     true : Bool          (T-True)
     false : Bool         (T-False)
      t1 : Bool     t2 : T    t3 : T
        if t1 then t2 else t3 : T
                             (T-If)
●   Simply typed arithmetic expressions
    (Extends untyped A.E. and simply typed Bool.)
    New Syntactic forms
    T ::= ...                types
        Nat                  type of natural numbers

    New typing rules
     0 : Nat              (T-True)
        t1 : Nat
      succ t1 : Nat       (T-Succ)
        t1 : Nat
      pred t1 : Nat       (T-Pred)
         t1 : Nat
      iszero t1 : Bool    (T-Iszero)
型付け規則の導入
●   ある項 t について、ある型 T が存在し
    t : T なるとき、t はwell typed(型付けされ
    ている)という
8章でやること
●   型付け規則の導入(Simple types)

●
    型付けの一意性の証明(Simple typesの場合)

●   型安全性の証明
    (* Safety = Progress + Preservation)
型付けの一意性(Simple types)
●   Simply typed arithmetic expressionsでは、
    次の型付けの一意性定理が成り立つ:

    任意の項 t は、高々1つの型しかもたない。
    (つまり、t がwell typedならばその型は一意)

    さらに、t の型付けを導く(直前の)型付け規
    則は1つしかない。
型付けの一意性(具体例)




t = if iszero 0 then 0 else pred 0
型付けの一意性(具体例)



      iszero 0     0        pred 0
        ↑     ↑     ↑ subterms
      if iszero 0 then 0 else pred 0
型付けの一意性(具体例)

           0                  0
        ↑            ↑ subterms
        iszero 0     0       pred 0
        ↑     ↑     ↑ 
      if iszero 0 then 0 else pred 0
型付けの一意性(具体例)

         0 : Nat             0 :Nat
                       
      iszero 0  0     pred 0
                                
      if iszero 0 then 0 else pred 0
型付けの一意性(具体例)

         0 : Nat                 0 : Nat
                             
    iszero 0 : Bool 0 : Nat pred 0 : Nat
                                
      if iszero 0 then 0 else pred 0
型付けの一意性(具体例)

         0 : Nat                 0 : Nat
                             
    iszero 0 : Bool 0 : Nat pred 0 : Nat
                                
     if iszero 0 then 0 else pred 0 : Nat
型付けの一意性(証明)
●   方針:
    subterms に関する数学的帰納法で証明する。


    つまり、
    項 t に対し、すべての直下のsubtermに関して定理の
    主張(型付けの一意性)が成り立っていると仮定した
    とき、
    t の型が一意に定まることを示す。
型付けの一意性(証明)
●   方針:
    t の取りうるsyntax(項の形式)に応じて場合分けす
    る。

●   t = true                    (Case-True)
●   t = false                   (Case-False)
●
    t = if t1 then t2 else t3   (Case-If)
●
    t = 0                       (Case-Zero)
●   t = succ t1                 (Case-Succ)
●   t = pred t1                 (Case-Pred)
●   t = iszero t1               (Case-Iszero)
型付けの一意性(証明)
●   t = if t1 then t2 else t3   (Case-If)


    定理の仮定から、ある型 R が存在し
    t = if t1 then t2 else t3 : R
    このとき、Lemma 8.2.2 - 3 より
    t1 : Bool, t2 : R, t3 : R
    帰納法の仮定により、各 ti の型付けは一意。
    したがって、型付け規則 (T-If) により
    t はその型として R のみを持つ。
型付けの一意性(証明)
    残りのケース
●
    t = succ t1               (Case-Succ)
●
    t = pred t1               (Case-Pred)
●
    t = iszero t1             (Case-Iszero)
    → t = if t1 then t2 else t3   と同様

●
    t = true                  (Case-True)
●
    t = false                 (Case-False)
●   t = 0                     (Case-Zero)
    → Lemma 8.2.2 からダイレクトに従う
型付けの一意性(証明)
●   Lemma 8.2.2 の証明

    それぞれの項のsyntaxから、適用できる型付け規則が
    一意に定まる。
    e.g. t = true に適用できる規則は (T-True) のみ
    これにより、補題の主張が従う。
型付けの一意性定理から分かること
    Simply typed arithmetic expressionsにおいては
●   任意の項が唯一つの型を持つ
●
    任意の項について、型の導出木は唯一つである

    ※注意
    後の章で扱う、より複雑な型システムにおいて
    は、一般にこのような定理は成り立たない
    cf. subtyping
8章でやること
●   型付け規則の導入(Simple types)

●
    型付けの一意性の証明(Simple typesの場合)

●   型安全性の証明
    (* Safety = Progress + Preservation)
型安全性の証明
●   ここでは、Simply typed arithmetic
    expressionsにおいて下記2つの定理が成り立つ
    ことを示す:

    Theorem 8.3.2 (Thm. of Progress)
    Well typedな項は非stuck

    Theorem 8.3.3 (Thm. of Preservation)
    項の評価は型を保存する。
型安全性とは
●   TaPLにおける型安全性(Safety = Progress +
    Preservation)とは:

    型付けされた項は、途中でstuckになることは
    なくきちんと評価される
    ということ。

●   型安全性は、後の章で扱うより複雑な型システ
    ムにおいても成立する。
Progress(証明)
●   方針:
    導出に関する数学的帰納法で証明する。


    つまり、
    t : T に対し、そのすべてのsubtermに関して定理の
    主張(それらがvalueである、または前進評価が可能
    であること)を仮定したときに、
    t 自身も同様にvalueである、または前進評価が可能
    であることを示す。
Progress(証明)
●   方針:
    直前のtyping rule(導出規則)に応じて場合分け。

●
    t = true                    : T-True
●   t = false                   : T-False
●
    t = if t1 then t2 else t3   : T-If
●   t = 0                       : T-Zero
●   t = succ t1                 : T-Succ
●   t = pred t1                 : T-Pred
●   t = iszero t1               : T-Iszero
Progress(証明)
●   方針:
    直前のtyping rule(導出規則)に応じて場合分け。

●
    t = true                    : T-True
●   t = false                   : T-False
●
    t = if t1 then t2 else t3   : T-If
●   t = 0                       : T-Zero
●   t = succ t1                 : T-Succ
●   t = pred t1                 : T-Pred
●   t = iszero t1               : T-Iszero
Progress(証明)
●   Case-T-If


    このとき、
    t = if t1 then t2 else t3 (t : T)
    t1 : Bool, t2 : T, t3 : T
    帰納法の仮定より、subterm t1 について
    (i) t1 は value
    (ii) ある t1' が存在し、 t1 → t1'
Progress(証明)
●   Case-T-If
    (i) t1 は value のとき
    Lemma 8.3.1 より、t1 = true or t1 = false
    ⇒ t に評価規則 E-IfTrue または E-IfFalse を
     適用可能
    ⇒ t → t2 (E-IfTrue) または t → t3 (E-IfFalse)
    (ii) ある t1' が存在し、 t1 → t1' のとき
    t に評価規則 E-If を適用可能
    ⇒ t = if t1 then t2 else t3
           → if t1' then t2 else t3
Lemma8.3.1(Canonical Forms)
(i) v が Bool型のvalueのとき、
v = true or v = false
(ii) v が Nat型のvalueのとき、
v = nv


証明:
Simply typed A.E. において、valueの取りうる
syntactic form は true, false, 0, succ nv の4種
(i) v = 0 と仮定する。
補題の仮定より、0 : Bool
⇒ Lemma 8.2.2(inversion lemma)-4 に矛盾
Preservation(証明)
●   方針:
    導出に関する数学的帰納法で証明する。


    つまり、
    t : T に対し、そのすべてのsubtermに関して定理の
    主張(評価によって型が保存されること)を仮定した
    ときに、
    t 自身も同様に、評価によって型が保存されることを
    示す。
Preservation(証明)
●   方針:
    直前のtyping rule(導出規則)に応じて場合分け。

●
    t = true                    : T-True
●   t = false                   : T-False
●
    t = if t1 then t2 else t3   : T-If
●   t = 0                       : T-Zero
●   t = succ t1                 : T-Succ
●   t = pred t1                 : T-Pred
●   t = iszero t1               : T-Iszero
Preservation(証明)
●   最も非自明なCase-T-Ifを証明する。


    このとき、
    t = if t1 then t2 else t3 (t : T)
    t1 : Bool, t2 : T, t3 : T
    定理の仮定より、ある t' について
    t → t'
    このとき用いられる評価規則としては、 t のsyntax
    より
    E-IfTrue, E-IfFalse, E-If
    の3通りが考えられる。
Preservation(証明)
(i) E-IfTrue の場合
このとき、t1 = true, t' = t2
t2 : T であったので、t' : T
(ii) E-IfFalse の場合
このとき、t1 = false, t' = t3
t3 : T であったので、t' : T
(iii) E-If の場合
このとき、t1 → t1', t' = if t1' then t2 else t3
いま、t1 : Bool であるから、
帰納法の仮定により、t1': Bool
Preservation(証明)
    よって、
    t' = if t1' then t2 else t3
    t1' : Bool, t2 : T, t3 : T
    ⇒型付け規則 T-If により、
    t' = if t1' then t2 else t3 : T



●   その他のケースについても同様に示せる。
8章のまとめ
●   3章で扱った Arithmetic expression の体系
    に、Simpleな型付け規則を導入しました。

●   Simply typed A.E. において、型付けの一意性
    を証明しました。

●   Simply typed A.E. において、型安全性
    (Progress + Preservation) を証明しました。

More Related Content

What's hot

2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第7回 2階線形微分方程式(1) (2014. 11. 6)
2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第7回 2階線形微分方程式(1) (2014. 11. 6)2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第7回 2階線形微分方程式(1) (2014. 11. 6)
2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第7回 2階線形微分方程式(1) (2014. 11. 6)Akira Asano
 
フーリエ解析〜「フーリエ級数」から「高速フーリエ変換」まで〜
フーリエ解析〜「フーリエ級数」から「高速フーリエ変換」まで〜フーリエ解析〜「フーリエ級数」から「高速フーリエ変換」まで〜
フーリエ解析〜「フーリエ級数」から「高速フーリエ変換」まで〜Kenyu Uehara
 
論理と計算のしくみ 5.3 型付きλ計算 (前半)
論理と計算のしくみ 5.3 型付きλ計算 (前半)論理と計算のしくみ 5.3 型付きλ計算 (前半)
論理と計算のしくみ 5.3 型付きλ計算 (前半)Lintaro Ina
 
Ikeph 1-appendix2(pdf)
Ikeph 1-appendix2(pdf)Ikeph 1-appendix2(pdf)
Ikeph 1-appendix2(pdf)GM3D
 
GEE(一般化推定方程式)の理論
GEE(一般化推定方程式)の理論GEE(一般化推定方程式)の理論
GEE(一般化推定方程式)の理論Koichiro Gibo
 
Ikeph 1-appendix2
Ikeph 1-appendix2Ikeph 1-appendix2
Ikeph 1-appendix2GM3D
 
2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第8回 2階線形微分方程式(2) (2014. 11. 13)
2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第8回 2階線形微分方程式(2) (2014. 11. 13)2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第8回 2階線形微分方程式(2) (2014. 11. 13)
2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第8回 2階線形微分方程式(2) (2014. 11. 13)Akira Asano
 
LPマスターへの道
LPマスターへの道LPマスターへの道
LPマスターへの道KoseiTeramoto
 
2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第5回 微分方程式とは,変数分離形 (2014. 10. 23)
2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第5回 微分方程式とは,変数分離形 (2014. 10. 23)2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第5回 微分方程式とは,変数分離形 (2014. 10. 23)
2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第5回 微分方程式とは,変数分離形 (2014. 10. 23)Akira Asano
 
Python勉強会2-数値と文字列
Python勉強会2-数値と文字列Python勉強会2-数値と文字列
Python勉強会2-数値と文字列理 小林
 
Cat at Young Pioneer's Presentation 2014/7/26
Cat at Young Pioneer's Presentation 2014/7/26 Cat at Young Pioneer's Presentation 2014/7/26
Cat at Young Pioneer's Presentation 2014/7/26 Ray Sameshima
 

What's hot (15)

2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第7回 2階線形微分方程式(1) (2014. 11. 6)
2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第7回 2階線形微分方程式(1) (2014. 11. 6)2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第7回 2階線形微分方程式(1) (2014. 11. 6)
2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第7回 2階線形微分方程式(1) (2014. 11. 6)
 
Bitmap
BitmapBitmap
Bitmap
 
フーリエ解析〜「フーリエ級数」から「高速フーリエ変換」まで〜
フーリエ解析〜「フーリエ級数」から「高速フーリエ変換」まで〜フーリエ解析〜「フーリエ級数」から「高速フーリエ変換」まで〜
フーリエ解析〜「フーリエ級数」から「高速フーリエ変換」まで〜
 
論理と計算のしくみ 5.3 型付きλ計算 (前半)
論理と計算のしくみ 5.3 型付きλ計算 (前半)論理と計算のしくみ 5.3 型付きλ計算 (前半)
論理と計算のしくみ 5.3 型付きλ計算 (前半)
 
Ikeph 1-appendix2(pdf)
Ikeph 1-appendix2(pdf)Ikeph 1-appendix2(pdf)
Ikeph 1-appendix2(pdf)
 
GEE(一般化推定方程式)の理論
GEE(一般化推定方程式)の理論GEE(一般化推定方程式)の理論
GEE(一般化推定方程式)の理論
 
Ikeph 1-appendix2
Ikeph 1-appendix2Ikeph 1-appendix2
Ikeph 1-appendix2
 
2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第8回 2階線形微分方程式(2) (2014. 11. 13)
2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第8回 2階線形微分方程式(2) (2014. 11. 13)2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第8回 2階線形微分方程式(2) (2014. 11. 13)
2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第8回 2階線形微分方程式(2) (2014. 11. 13)
 
LPマスターへの道
LPマスターへの道LPマスターへの道
LPマスターへの道
 
2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第5回 微分方程式とは,変数分離形 (2014. 10. 23)
2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第5回 微分方程式とは,変数分離形 (2014. 10. 23)2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第5回 微分方程式とは,変数分離形 (2014. 10. 23)
2014年度秋学期 応用数学(解析) 第2部・基本的な微分方程式 / 第5回 微分方程式とは,変数分離形 (2014. 10. 23)
 
C言語講習会3
C言語講習会3C言語講習会3
C言語講習会3
 
Python勉強会2-数値と文字列
Python勉強会2-数値と文字列Python勉強会2-数値と文字列
Python勉強会2-数値と文字列
 
C言語講習会4
C言語講習会4C言語講習会4
C言語講習会4
 
Cat at Young Pioneer's Presentation 2014/7/26
Cat at Young Pioneer's Presentation 2014/7/26 Cat at Young Pioneer's Presentation 2014/7/26
Cat at Young Pioneer's Presentation 2014/7/26
 
Chap. 6(nakagawa)
Chap. 6(nakagawa)Chap. 6(nakagawa)
Chap. 6(nakagawa)
 

Viewers also liked

TAPL勉強会 第1章 (2012-07-17)
TAPL勉強会 第1章 (2012-07-17)TAPL勉強会 第1章 (2012-07-17)
TAPL勉強会 第1章 (2012-07-17)none_toka
 
Tapl 5
Tapl 5Tapl 5
Tapl 5rf0444
 
TaPL名古屋 Chap2
TaPL名古屋 Chap2TaPL名古屋 Chap2
TaPL名古屋 Chap2Keita Saitou
 
PFDS 11.2.2
PFDS 11.2.2PFDS 11.2.2
PFDS 11.2.2rf0444
 
TAPL 勉強会(紹介編)
TAPL 勉強会(紹介編)TAPL 勉強会(紹介編)
TAPL 勉強会(紹介編)none_toka
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとはTakuya Akiba
 

Viewers also liked (6)

TAPL勉強会 第1章 (2012-07-17)
TAPL勉強会 第1章 (2012-07-17)TAPL勉強会 第1章 (2012-07-17)
TAPL勉強会 第1章 (2012-07-17)
 
Tapl 5
Tapl 5Tapl 5
Tapl 5
 
TaPL名古屋 Chap2
TaPL名古屋 Chap2TaPL名古屋 Chap2
TaPL名古屋 Chap2
 
PFDS 11.2.2
PFDS 11.2.2PFDS 11.2.2
PFDS 11.2.2
 
TAPL 勉強会(紹介編)
TAPL 勉強会(紹介編)TAPL 勉強会(紹介編)
TAPL 勉強会(紹介編)
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
 

Similar to 20120829_TaPL8

公開鍵暗号2: NP困難性
公開鍵暗号2: NP困難性公開鍵暗号2: NP困難性
公開鍵暗号2: NP困難性Joe Suzuki
 
ディジタル信号処理の課題解説 その3
ディジタル信号処理の課題解説 その3ディジタル信号処理の課題解説 その3
ディジタル信号処理の課題解説 その3noname409
 
TaPL読書会 #9 ~ §14 Exception
TaPL読書会 #9 ~ §14 ExceptionTaPL読書会 #9 ~ §14 Exception
TaPL読書会 #9 ~ §14 ExceptionAkihiro Miyashita
 
カステラ本勉強会 第三回
カステラ本勉強会 第三回カステラ本勉強会 第三回
カステラ本勉強会 第三回ke beck
 

Similar to 20120829_TaPL8 (6)

wq-2. 待ち行列
wq-2. 待ち行列wq-2. 待ち行列
wq-2. 待ち行列
 
ndwave8.pdf
ndwave8.pdfndwave8.pdf
ndwave8.pdf
 
公開鍵暗号2: NP困難性
公開鍵暗号2: NP困難性公開鍵暗号2: NP困難性
公開鍵暗号2: NP困難性
 
ディジタル信号処理の課題解説 その3
ディジタル信号処理の課題解説 その3ディジタル信号処理の課題解説 その3
ディジタル信号処理の課題解説 その3
 
TaPL読書会 #9 ~ §14 Exception
TaPL読書会 #9 ~ §14 ExceptionTaPL読書会 #9 ~ §14 Exception
TaPL読書会 #9 ~ §14 Exception
 
カステラ本勉強会 第三回
カステラ本勉強会 第三回カステラ本勉強会 第三回
カステラ本勉強会 第三回
 

20120829_TaPL8

  • 1. TaPL読書会 [#3] 2012.08.29
  • 3. 8章でやること ● 型付け規則の導入(Simple types) ● 型付けの一意性の証明(Simple typesの場合) ● 型安全性の証明 (* Safety = Progress + Preservation)
  • 4. 8章でやること ● 型付け規則の導入(Simple types) ● 型付けの一意性の証明(Simple typesの場合) ● 型安全性の証明 (* Safety = Progress + Preservation)
  • 5. おさらい ● Untyped booleans (3章) ● Untyped arithmetic expressions (3章)
  • 6. Untyped booleans Syntactic forms t ::= v ::= true true false false if t then t else t Evaluation rules  if true then t2 else t3 → t2 (E-IfTrue)  if false then t2 else t3 → t3 (E-IfFalse) t1 → t1' if t1 then t2 else t3 → if t1' then t2 else t3 (E-If)
  • 7. Untyped arithmetic expressions (Extends untyped booleans) New Syntactic forms t ::= ... v ::= ... 0 nv succ t pred t nv ::= iszero t 0 succ nv
  • 8. Untyped arithmetic expressions (Extends booleans) Evaluation rules t1 → t1' succ t1 → succ t1' (E-Succ) pred 0 → 0 (E-PredZero) pred (succ nv1) → nv1 (E-PredSucc) t1 → t1' pred t1 → pred t1' (E-Pred) iszero 0 → true (E-IszeroZero) iszero (succ nv1) → false (E-IszeroSucc) t1 → t1' iszero t1 → iszero t1' (E-Iszero)
  • 9. おさらい ● Untyped arithmetic expressionsには、stuck となる(valueでなく、評価規則も適用できな い)項が存在 e.g. pred false → ? ● Untyped arithmetic expressionsの世界では、 実際に評価しなければstuckかどうか判別でき ない ⇒ある項がstuckとならないことを静的に知り たい
  • 10. 型付け規則の導入 ● Untyped arithmetic expressionsの各項に 「型」を付ける ● そのために、以下の型のsyntaxと型付け規則を 導入する ● Notation S, T, U, … metavariables of types t : T typing relation “a term t has type T”
  • 11. Simply typed booleans New Syntactic forms T ::= types Bool type of booleans New typing rules  true : Bool (T-True)  false : Bool (T-False) t1 : Bool t2 : T t3 : T if t1 then t2 else t3 : T (T-If)
  • 12. Simply typed arithmetic expressions (Extends untyped A.E. and simply typed Bool.) New Syntactic forms T ::= ... types Nat type of natural numbers New typing rules  0 : Nat (T-True) t1 : Nat succ t1 : Nat (T-Succ) t1 : Nat pred t1 : Nat (T-Pred) t1 : Nat iszero t1 : Bool (T-Iszero)
  • 13. 型付け規則の導入 ● ある項 t について、ある型 T が存在し t : T なるとき、t はwell typed(型付けされ ている)という
  • 14. 8章でやること ● 型付け規則の導入(Simple types) ● 型付けの一意性の証明(Simple typesの場合) ● 型安全性の証明 (* Safety = Progress + Preservation)
  • 15. 型付けの一意性(Simple types) ● Simply typed arithmetic expressionsでは、 次の型付けの一意性定理が成り立つ: 任意の項 t は、高々1つの型しかもたない。 (つまり、t がwell typedならばその型は一意) さらに、t の型付けを導く(直前の)型付け規 則は1つしかない。
  • 16. 型付けの一意性(具体例) t = if iszero 0 then 0 else pred 0
  • 17. 型付けの一意性(具体例) iszero 0 0 pred 0         ↑     ↑     ↑ subterms if iszero 0 then 0 else pred 0
  • 18. 型付けの一意性(具体例) 0 0         ↑            ↑ subterms iszero 0 0 pred 0         ↑     ↑     ↑  if iszero 0 then 0 else pred 0
  • 19. 型付けの一意性(具体例) 0 : Nat 0 :Nat                         iszero 0 0 pred 0                        if iszero 0 then 0 else pred 0
  • 20. 型付けの一意性(具体例) 0 : Nat 0 : Nat                  iszero 0 : Bool 0 : Nat pred 0 : Nat                        if iszero 0 then 0 else pred 0
  • 21. 型付けの一意性(具体例) 0 : Nat 0 : Nat                  iszero 0 : Bool 0 : Nat pred 0 : Nat                        if iszero 0 then 0 else pred 0 : Nat
  • 22. 型付けの一意性(証明) ● 方針: subterms に関する数学的帰納法で証明する。 つまり、 項 t に対し、すべての直下のsubtermに関して定理の 主張(型付けの一意性)が成り立っていると仮定した とき、 t の型が一意に定まることを示す。
  • 23. 型付けの一意性(証明) ● 方針: t の取りうるsyntax(項の形式)に応じて場合分けす る。 ● t = true (Case-True) ● t = false (Case-False) ● t = if t1 then t2 else t3 (Case-If) ● t = 0 (Case-Zero) ● t = succ t1 (Case-Succ) ● t = pred t1 (Case-Pred) ● t = iszero t1 (Case-Iszero)
  • 24. 型付けの一意性(証明) ● t = if t1 then t2 else t3 (Case-If) 定理の仮定から、ある型 R が存在し t = if t1 then t2 else t3 : R このとき、Lemma 8.2.2 - 3 より t1 : Bool, t2 : R, t3 : R 帰納法の仮定により、各 ti の型付けは一意。 したがって、型付け規則 (T-If) により t はその型として R のみを持つ。
  • 25. 型付けの一意性(証明) 残りのケース ● t = succ t1 (Case-Succ) ● t = pred t1 (Case-Pred) ● t = iszero t1 (Case-Iszero) → t = if t1 then t2 else t3 と同様 ● t = true (Case-True) ● t = false (Case-False) ● t = 0 (Case-Zero) → Lemma 8.2.2 からダイレクトに従う
  • 26. 型付けの一意性(証明) ● Lemma 8.2.2 の証明 それぞれの項のsyntaxから、適用できる型付け規則が 一意に定まる。 e.g. t = true に適用できる規則は (T-True) のみ これにより、補題の主張が従う。
  • 27. 型付けの一意性定理から分かること Simply typed arithmetic expressionsにおいては ● 任意の項が唯一つの型を持つ ● 任意の項について、型の導出木は唯一つである ※注意 後の章で扱う、より複雑な型システムにおいて は、一般にこのような定理は成り立たない cf. subtyping
  • 28. 8章でやること ● 型付け規則の導入(Simple types) ● 型付けの一意性の証明(Simple typesの場合) ● 型安全性の証明 (* Safety = Progress + Preservation)
  • 29. 型安全性の証明 ● ここでは、Simply typed arithmetic expressionsにおいて下記2つの定理が成り立つ ことを示す: Theorem 8.3.2 (Thm. of Progress) Well typedな項は非stuck Theorem 8.3.3 (Thm. of Preservation) 項の評価は型を保存する。
  • 30. 型安全性とは ● TaPLにおける型安全性(Safety = Progress + Preservation)とは: 型付けされた項は、途中でstuckになることは なくきちんと評価される ということ。 ● 型安全性は、後の章で扱うより複雑な型システ ムにおいても成立する。
  • 31. Progress(証明) ● 方針: 導出に関する数学的帰納法で証明する。 つまり、 t : T に対し、そのすべてのsubtermに関して定理の 主張(それらがvalueである、または前進評価が可能 であること)を仮定したときに、 t 自身も同様にvalueである、または前進評価が可能 であることを示す。
  • 32. Progress(証明) ● 方針: 直前のtyping rule(導出規則)に応じて場合分け。 ● t = true : T-True ● t = false : T-False ● t = if t1 then t2 else t3 : T-If ● t = 0 : T-Zero ● t = succ t1 : T-Succ ● t = pred t1 : T-Pred ● t = iszero t1 : T-Iszero
  • 33. Progress(証明) ● 方針: 直前のtyping rule(導出規則)に応じて場合分け。 ● t = true : T-True ● t = false : T-False ● t = if t1 then t2 else t3 : T-If ● t = 0 : T-Zero ● t = succ t1 : T-Succ ● t = pred t1 : T-Pred ● t = iszero t1 : T-Iszero
  • 34. Progress(証明) ● Case-T-If このとき、 t = if t1 then t2 else t3 (t : T) t1 : Bool, t2 : T, t3 : T 帰納法の仮定より、subterm t1 について (i) t1 は value (ii) ある t1' が存在し、 t1 → t1'
  • 35. Progress(証明) ● Case-T-If (i) t1 は value のとき Lemma 8.3.1 より、t1 = true or t1 = false ⇒ t に評価規則 E-IfTrue または E-IfFalse を  適用可能 ⇒ t → t2 (E-IfTrue) または t → t3 (E-IfFalse) (ii) ある t1' が存在し、 t1 → t1' のとき t に評価規則 E-If を適用可能 ⇒ t = if t1 then t2 else t3 → if t1' then t2 else t3
  • 36. Lemma8.3.1(Canonical Forms) (i) v が Bool型のvalueのとき、 v = true or v = false (ii) v が Nat型のvalueのとき、 v = nv 証明: Simply typed A.E. において、valueの取りうる syntactic form は true, false, 0, succ nv の4種 (i) v = 0 と仮定する。 補題の仮定より、0 : Bool ⇒ Lemma 8.2.2(inversion lemma)-4 に矛盾
  • 37. Preservation(証明) ● 方針: 導出に関する数学的帰納法で証明する。 つまり、 t : T に対し、そのすべてのsubtermに関して定理の 主張(評価によって型が保存されること)を仮定した ときに、 t 自身も同様に、評価によって型が保存されることを 示す。
  • 38. Preservation(証明) ● 方針: 直前のtyping rule(導出規則)に応じて場合分け。 ● t = true : T-True ● t = false : T-False ● t = if t1 then t2 else t3 : T-If ● t = 0 : T-Zero ● t = succ t1 : T-Succ ● t = pred t1 : T-Pred ● t = iszero t1 : T-Iszero
  • 39. Preservation(証明) ● 最も非自明なCase-T-Ifを証明する。 このとき、 t = if t1 then t2 else t3 (t : T) t1 : Bool, t2 : T, t3 : T 定理の仮定より、ある t' について t → t' このとき用いられる評価規則としては、 t のsyntax より E-IfTrue, E-IfFalse, E-If の3通りが考えられる。
  • 40. Preservation(証明) (i) E-IfTrue の場合 このとき、t1 = true, t' = t2 t2 : T であったので、t' : T (ii) E-IfFalse の場合 このとき、t1 = false, t' = t3 t3 : T であったので、t' : T (iii) E-If の場合 このとき、t1 → t1', t' = if t1' then t2 else t3 いま、t1 : Bool であるから、 帰納法の仮定により、t1': Bool
  • 41. Preservation(証明) よって、 t' = if t1' then t2 else t3 t1' : Bool, t2 : T, t3 : T ⇒型付け規則 T-If により、 t' = if t1' then t2 else t3 : T ● その他のケースについても同様に示せる。
  • 42. 8章のまとめ ● 3章で扱った Arithmetic expression の体系 に、Simpleな型付け規則を導入しました。 ● Simply typed A.E. において、型付けの一意性 を証明しました。 ● Simply typed A.E. において、型安全性 (Progress + Preservation) を証明しました。