ソフトウェア基礎科学 授業資料: 論理関係(logical relations)のお話

Slides:



Advertisements
Similar presentations
0章 数学基礎.
Advertisements

Probabilistic Method 7.7
人工知能特論2007 No.4 東京工科大学大学院 担当教員:亀田弘之.
(Rubyistのための) 超音速:ML入門
ML 演習 第 1 回 佐藤 春旗, 山下 諒蔵, 前田 俊行 May 30, 2006.
確率・統計Ⅰ 第11回 i.i.d.の和と大数の法則 ここです! 確率論とは 確率変数、確率分布 確率変数の独立性 / 確率変数の平均
技術者/プログラマのための ラムダ計算、論理、圏 第2回
    有限幾何学        第8回.
2006/11/30 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
Q q 情報セキュリティ 第6回:2005年5月20日(金) q q.
充足不能性と導出原理 充足不能性の証明 スコーレム標準形 エルブラン解釈 導出原理 基礎節に対する導出 導出原理の完全性と健全性.
2006/10/12 山下 諒蔵 佐藤 春旗 前田俊行 大山 恵弘 佐藤 秀明 住井 英二郎
型宣言 (Type Declarations)
型宣言(Type Declarations)
論理式の表現を数学的に取り扱いやすくするために代数学の助けを借りる.
Natural Semantics 実行過程の、最初と最後の状態(state)の関係を考える。
Semantics with Applications
2006/10/19 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井英二郎
香川大学工学部 富永浩之 情報数学1 第2-1章 合同式の性質と計算 香川大学工学部 富永浩之
2006/11/02 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
条件式 (Conditional Expressions)
数理論理学 第1回 茨城大学工学部情報工学科 佐々木 稔.
Probabilistic Method 6-3,4
~sumii/class/proenb2010/ml4/
2007/1/11 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
プログラミング言語論 第12回 関数型プログラミング 情報工学科 篠埜 功.
プログラミング 平成24年10月30日 森田 彦.
プログラミング 平成25年11月5日 森田 彦.
PROGRAMMING IN HASKELL
2. 論理ゲート と ブール代数 五島 正裕.
第25章 単一始点最短路 3節 Bellman-Fordのアルゴリズム
PROGRAMMING IN HASKELL
3. 束 五島 正裕.
ディジタル回路 2. ブール代数 と 論理ゲート 五島 正裕.
7.4 Two General Settings D3 杉原堅也.
 型推論1(単相型) 2007.
依存型で型付けされた 副作用のある関数のための 型保存コンパイラ
Selfish Routing and the Price of Anarchy 4.3
Structural operational semantics
ATTAPL輪講 (第4回) 続 Dependent Types
 型推論3(MLの多相型).
2007/6/12(通信コース)2007/6/13(情報コース) 住井
曲がった時空上の場の理論の熱的な性質と二次元CFT
ポインタとポインタを用いた関数定義.
第14回 前半:ラムダ計算(演習付) 後半:小テスト
国立情報学研究所 ソフトウェア研究系 助教授/
Type Systems and Programming Languages ; chapter 13 “Reference”
解析学 ー第9〜10回ー 2019/5/12.
第7回  命題論理.
PROGRAMMING IN HASKELL
プログラミング言語論 第10回 情報工学科 篠埜 功.
~sumii/class/proenb2010/ml2/
~sumii/class/proenb2009/ml4/
香川大学創造工学部 富永浩之 情報数学1 第2-1章 合同式の性質と計算 香川大学創造工学部 富永浩之
2006/7/18(通信コース)2006/7/26(情報コース) 住井
2006/6/27(通信コース)2006/7/5(情報コース) 住井
4.プッシュダウンオートマトンと 文脈自由文法の等価性
~sumii/class/proenb2009/ml6/
PROGRAMMING IN HASKELL
Eijiro Sumii and Naoki Kobayashi University of Tokyo
関数型言語の基礎 型なしl計算 型理論 構成的プログラミング GUIにあらわれる関数概念 PBD VL
~sumii/class/proenb2010/ml5/
PROGRAMMING IN HASKELL
Haskell Programming Language
数理論理学 最終回 茨城大学工学部情報工学科 佐々木 稔.
Static Enforcement of Security with Types
2007/6/26(通信コース)2007/6/27(情報コース) 住井
グラフの帯域幅連続多重彩色 を求めるアルゴリズム (Bandwidth Consective Multicolorings of Graphs) 西関研究室 西川和秀.
Presentation transcript:

ソフトウェア基礎科学 授業資料: 論理関係(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(1  2) = { v | ├ v : 1  2 かつ 任意の v1P(1) について、 v v1 * v2 ならば v2P(2) }

パラメタ性を証明するための 論理関係(2/2) P(1  2) = { (v1, v2) | v1P(1) かつ v2P(2) } P(1 + 2) = { InL(v1) | v1P(1) } ∪ { InR(v2 ) | v2P(2) } P() = () P(. ) = { v | ├ v : .  かつ 任意の閉じた型'と '型の値の任意の集合rについて、 vP,r() }

基本定理 (Fundamental Theorem) ├ v :  ならば vP() 証明の方針: ├ e :  の場合に一般化して、 ├ e :  の導出に関する帰納法を用いる

型.の値はすべて恒等関数 (無限ループや副作用等がなければ) 使い方の例1 型.の値はすべて恒等関数 (無限ループや副作用等がなければ) ├ v : . ならば、 基本定理より vP(.) よって任意の├ v1 : ' について、 r = {v1} とおくと vPr() よって v v1 * v2 ならば v2r すなわち v2 = v1

型.intの関数は存在しない (無限ループや副作用等がなければ) 使い方の例2 型.intの関数は存在しない (無限ループや副作用等がなければ) ├ v : .int ならば、 基本定理より vP(.int) よって r =  とおくと vPr(int) よって適当な整数を v1 とすると v v1 * v2 ならば v2r となるが それはありえない

パラメタ性以外への 論理関係の応用 停止性の証明 等価性の証明 秘密性の証明: 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 が存在、かつ 任意の e1T(1) について e e1T(2) }

基本定理 ├ e :  ならば eT() 証明の方針:下のように一般化し、 型導出についての帰納法で示す x1 : 1, ..., xn : n├ e :  ならば 任意の e1T(1), ..., enT(n) について [e1,...,en/x1,...,xn]eT()

等価性を証明するための論理関係 (単純型の場合) 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についても同値