ソフトウェア基礎科学 授業資料 : 論理関係 (logical relations) のお話
DESCRIPTION
ソフトウェア基礎科学 授業資料 : 論理関係 (logical relations) のお話. 2006/1/13 住井 英二郎. 復習 : ML の多相関数. # let id x = x ;; val id : 'a -> 'a = # let first x y = x ;; val first : 'a -> 'b -> 'a = # let second x y = y ;; val second : 'a -> 'b -> 'b = . ML の多相関数 : その 2. - PowerPoint PPT PresentationTRANSCRIPT
ソフトウェア基礎科学 授業資料 :論理関係 (logical relations) のお話
2006/1/13住井 英二郎
復習 : ML の多相関数
# let id x = x ;;val id : 'a -> 'a = <fun># let first x y = x ;;val first : 'a -> 'b -> 'a = <fun># let second x y = y ;;val second : 'a -> 'b -> 'b = <fun>
ML の多相関数 : その 2
# let rec f x = f x ;;val f : 'a -> 'b = <fun># let rec g x = g (x + 1) ;;val g : int -> 'a = <fun># let rec h x = assert false ;;val h : 'a -> 'b = <fun># h 123 ;;Exception: Assert_failure ("", 2, -7).
多相関数のパラメタ性 (Parametricity)
無限ループや副作用等がなければ、. 型の関数はすべて id と等価.. 型の関数はすべて first と等価.. 型の関数はすべて second と等価.. 型の関数は存在しない.int 型の関数は存在しない
etc.
どうやって証明するのか?
「型に関する帰納法」の一種を利用
論理関係 (logical relations):型を受け取って、型の式の組(e1, ..., en) の集合を返す写像で、「型に従って」定義されたもの– n = 1 でもよい
⇒ 関係 (relation) というより述語 (predicate)
パラメタ性を証明するための論理関係 (1/2)
型を受け取って、型の値の集合を返す写像 Pを、以下のように定義– ただしは型変数から値の集合への写像(後述)
P(bool) = { true, false }
P(int) = すべての整数の集合– 一般に任意の基本型 b について、
P(b) = 型 b を持つすべての値の集合
P(12) = { v |├ v : 1 2 かか任意の v1P(1) について、v v1 * v2 ならば v2P(2) }
パラメタ性を証明するための論理関係 (2/2)
P(12) ={ (v1, v2) | v1P(1) かつ v2P(2) }
P(12) ={ InL(v1) | v1P(1) } ∪{ InR(v2 ) | v2P(2) }
P() = ()
P(. ) = { v |├ v : . かつ任意の閉じた型 ' と ' 型の値の任意の集合 r について、vP,r() }
基本定理(Fundamental Theorem )
├ v : ならば vP()
証明の方針:├ e : の場合に一般化して、├ e : の導出に関する帰納法を用いる
使い方の例 1
型 . の値はすべて恒等関数(無限ループや副作用等がなければ)
├ v : . ならば、基本定理より vP(.)
よって任意の├ v1 : ' について、r = {v1} とおくと vPr()
よって v v1 * v2 ならば v2rすなわち v2 = v1
使い方の例 2
型 .int の関数は存在しない(無限ループや副作用等がなければ)
├ v : .int ならば、基本定理より vP(.int)
よって r = とおくと vPr(int)
よって適当な整数を v1 とするとv v1 * v2 ならば v2r となるがそれはありえない
パラメタ性以外への論理関係の応用
停止性の証明
等価性の証明
– 秘密性の証明 :f(x) が x を完全に秘密にする 任意の v, v' について f(v) と f(v') が等価
抽象型 , 暗号化 , 情報流解析 , etc.
停止性
主張:
再帰関数や再帰型等がプリミティブとして導入されていない型付き計算では、
├ e : ならば e * v なる v が存在
停止性を証明するための論理関係簡単のために単純型についてのみ説明
::= b | 1 2
T(b) = { e |├ e : b かつe * v なる v が存在 }
T(1 2) = { e |├ e : 1 2 かつe * v なる v が存在、かつ任意の e1T(1) について e e1T(2) }
基本定理
├ e : ならば eT()
証明の方針:下のように一般化し、型導出についての帰納法で示す
x1 : 1, ..., xn : n├ e : ならば任意の e1T(1), ..., enT(n) について[e1,...,en/x1,...,xn]eT()
等価性を証明するための論理関係(単純型の場合)
R(b) = { (e, e') |├ e : b かつ├ e' : b かつ任意の v について e * v e' * v }
R(1 2) = { (e, e') |├ e : 1 2 かつ├ e' : 1 2 かつ任意の (e1, e1')R(1) について(e e1, e' e1')R(2) }
基本定理
├ e : ならば (e, e)R()
証明の方針:一般化して型導出について帰納法x1 : 1, ..., xn : n├ e : ならば任意の (e1,e1')T(1),...,(en,en')T(n) について([e1,...,en/x1,...,xn]e,([e1',...,en'/x1,...,xn]e)T()
系
(e1, e2)R() ならば、任意の├ e : bool についてe e1 * true e e2 * true
理由:基本定理より (e, e)R( bool) だから。
つまり、e1と e2はどんな関数 e についても同値