構造化プログラミングと データ抽象

Similar documents
構造化プログラミングと データ抽象

Microsoft PowerPoint - ProD0107.ppt

Functional Programming

PowerPoint Presentation

オートマトン 形式言語及び演習 1. 有限オートマトンとは 酒井正彦 形式言語 言語とは : 文字列の集合例 : 偶数個の 1 の後に 0 を持つ列からなる集合 {0, 110, 11110,

koba/class/soft-kiso/ 1 λ if λx.λy.y false 0 λ typed λ-calculus λ λ 1.1 λ λ, syntax τ (types) ::= b τ 1 τ 2 τ 1

2-1 / 語問題 項書換え系 4.0. 準備 (3.1. 項 代入 等価性 ) 定義 3.1.1: - シグネチャ (signature): 関数記号の集合 (Σ と書く ) - それぞれの関数記号は アリティ (arity) と呼ばれる自然数が定められている - Σ (n) : アリ

離散数学

Programming D 1/15

Functional Programming

Functional Programming

Microsoft PowerPoint - 3.ppt [互換モード]

プログラミングD - Java

プログラミングD - Java

オートマトンと言語

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

Microsoft PowerPoint - 13approx.pptx

コンパイラ演習第 11 回 2006/1/19 大山恵弘 佐藤秀明 今回の内容 バリアント / レコード 表現方法 型付け パターンマッチ 型付け switch 文への変換 簡単な最適化 マッチング漏れ 以降のフェーズでの処理 発展 exhaustivenessinformation の利用 パター

論理と計算(2)

PowerPoint Presentation

lambda

様々なミクロ計量モデル†

PowerPoint Presentation

PowerPoint Presentation

ML λ λ 1 λ 1.1 λ λ λ e (λ ) ::= x ( ) λx.e (λ ) e 1 e 2 ( ) ML λx.e Objective Caml fun x -> e x e let 1

Microsoft PowerPoint - prog08.ppt

融合規則 ( もっとも簡単な形, 選言的三段論法 ) ll mm ll mm これについては (ll mm) mmが推論の前提部になり mmであるから mmは常に偽となることがわかり ll mmはllと等しくなることがわかる 機械的には 分配則より (ll mm) mm (ll mm) 0 ll m


オートマトン 形式言語及び演習 3. 正規表現 酒井正彦 正規表現とは 正規表現 ( 正則表現, Regular Expression) オートマトン : 言語を定義する機械正規表現 : 言語

Microsoft PowerPoint - ca ppt [互換モード]

Microsoft PowerPoint - 5.ppt [互換モード]

Microsoft Word - 補論3.2

日本内科学会雑誌第98巻第4号

日本内科学会雑誌第97巻第7号

Microsoft PowerPoint - 9.pptx

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

2019 年 6 月 4 日演習問題 I α, β > 0, A > 0 を定数として Cobb-Douglas 型関数 Y = F (K, L) = AK α L β (5) と定義します. (1) F KK, F KL, F LK, F LL を求めましょう. (2) 第 1 象限のすべての点

Microsoft PowerPoint - qcomp.ppt [互換モード]

アルゴリズムとデータ構造

プログラミング実習I

スライド 1

Microsoft PowerPoint - 9.pptx

ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : K 氏名 : 當銘孔太

< 中 3 分野例題付き公式集 > (1)2 の倍数の判定法は 1 の位が 0 又は偶数 ( 例題 )1~5 までの 5 つの数字を使って 3 ケタの数をつくるとき 2 の倍数は何通りできるか (2)5 の倍数の判定法は 1 の位が 0 又は 5 ( 例題 )1~9 までの 9 個の数字を使って 3

4 ソフトウェア工学 Software Engineering 抽象データ型 ABSTRACT DATA TYPE データ抽象 (data abstraction) 目的 : データ構造を ( 実装に依存せずに ) 抽象的に定義 方法 : データにアクセス (read, write) する関数の仕様

kiso2-09.key

Microsoft Word - 3new.doc

演習1

Jacques Garrigue

program7app.ppt

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

2011年度 東京大・文系数学

Copyright c 2006 Zhenjiang Hu, All Right Reserved.

ii 3.,. 4. F. (), ,,. 8.,. 1. (75%) (25%) =7 20, =7 21 (. ). 1.,, (). 3.,. 1. ().,.,.,.,.,. () (12 )., (), 0. 2., 1., 0,.

論理と計算(2)

Microsoft PowerPoint - 10.pptx

不偏推定量

PowerPoint プレゼンテーション

gengo1-11

Int Int 29 print Int fmt tostring 2 2 [19] ML ML [19] ML Emacs Standard ML M M ::= x c λx.m M M let x = M in M end (M) x c λx.

Microsoft PowerPoint - fol.ppt

スライド 1

Microsoft PowerPoint - 第3回2.ppt

データ解析

…J…−†[†E…n…‘†[…hfi¯„^‚ΛžfiüŒå

Microsoft PowerPoint - mp11-02.pptx

Microsoft Word - no11.docx

経済数学演習問題 2018 年 5 月 29 日 I a, b, c R n に対して a + b + c 2 = a 2 + b 2 + c 2 + 2( a, b) + 2( b, c) + 2( a, c) が成立することを示しましょう.( 線型代数学 教科書 13 ページ 演習 1.17)

高ゼミサポSelectⅢ数学Ⅰ_解答.indd

関数 C 言語は関数の言語 関数とは 関数の定義 : f(x) = x * x ; 使うときは : y = f(x) 戻り値 引数

An Automated Proof of Equivalence on Quantum Cryptographic Protocols

オートマトン 形式言語及び演習 4. 正規言語の性質 酒井正彦 正規言語の性質 反復補題正規言語が満たす性質 ある与えられた言語が正規言語でないことを証明するために その言語が正規言語であると

PowerPoint プレゼンテーション

Information Theory

<4D F736F F D2091E63589F182628CBE8CEA8D758DC08E9197BF2E646F6378>

微分方程式による現象記述と解きかた

Microsoft PowerPoint - prog07.ppt

kiso2-03.key

Microsoft PowerPoint ppt

Ł\”ƒ-2005

Microsoft PowerPoint - 06.pptx

<4D F736F F F696E74202D208AF489BD8A7782C CF97CA82A882DC82AF2E B8CDD8AB B83685D>

微分方程式 モデリングとシミュレーション

パソコンシミュレータの現状

PowerPoint プレゼンテーション

第90回日本感染症学会学術講演会抄録(I)

PowerPoint Presentation

Microsoft PowerPoint - 10.ppt [互換モード]

情報数理学

Microsoft PowerPoint - ip02_01.ppt [互換モード]

Microsoft PowerPoint - H21生物計算化学2.ppt

自己紹介 情報科学の研究をしています 専門はプログラミング言語とか型理論とか 研究のひとつは Java の改良ですが Java でプログラムは書きません ( けません ) ML 歴 16 年 OCaml 歴は 11 年くらい の著者です

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

日本内科学会雑誌第102巻第4号

NLMIXED プロシジャを用いた生存時間解析 伊藤要二アストラゼネカ株式会社臨床統計 プログラミング グループグルプ Survival analysis using PROC NLMIXED Yohji Itoh Clinical Statistics & Programming Group, A

第9回 型とクラス

メソッドのまとめ

ii 3.,. 4. F. ( ), ,,. 8.,. 1. (75% ) (25% ) =7 24, =7 25, =7 26 (. ). 1.,, ( ). 3.,...,.,.,.,.,. ( ) (1 2 )., ( ), 0., 1., 0,.

PowerPoint プレゼンテーション

Microsoft PowerPoint - prog11.ppt

Transcription:

計算の理論 後半第 3 回 λ 計算と型システム

本日の内容 λ 計算の表現力 ( 前回のつづき ) 前回の復習 不動点演算子と再帰 λ 計算の重要な性質 チャーチ ロッサー性 簡約戦略 型付き λ 計算

ブール値 組 ブール値と組の表現 ( 復習 ) true, false を受け取り 対応する要素を返す関数 として表現 T = λt.λf.t F = λt.λf.f if e 1 then e 2 else e 3 = e 1 e 2 e 3 とすると... if T then e 2 else e 3 * e 2 makepair = λx.λy.λf.f x y fst = λp.p(λx.λy.x) : 組の 1 番目の要素の取り出し snd = λp.p(λx.λy.y) : 組の 2 番目の要素の取り出し とすると... fst(makepair M N) * M

自然数の表現 ( 復習 ) 基本構成子 (zero と successor) を受け取り 対応する値を返す関数 として表現 n = λs.λz. s (s... (s z)...) n Plus = λm. λn. λs.λz. m s (n s z) Mult= λm. λn. n (Plus m) 0 Exp = λm. λn. n (Mult m) 1 eqzero? = λn. n (λb.f) T Pred = λn. snd(n (λ(x,y).(x+1,x)) (0,0)) Minus = λm. λn. n Pred m

本日の内容 λ 計算の表現力 ( 前回のつづき ) 前回の復習 不動点演算子と再帰 λ 計算の重要な性質 チャーチ ロッサー性 簡約戦略 型付き λ 計算

無限簡約列を持つ項 (λx. x x) (λx. x x) [(λx. x x) / x] (x x) = (λx. x x) (λx. x x) (λx. x x) (λx. x x) (λx. x x) (λx. x x)...

(λx. x x) (λx. x x) の変種 (λx. F (x x)) (λx. F(x x)) [(λx. F (x x)) / x] F(x x) = F((λx. F(x x)) (λx. F(x x))) M F = (λx. F (x x)) (λx. F(x x)) とおくと... M F F (M F ) = β をβ 簡約を含む最小の同値関係とすると M F = β F (M F ) すなわち M F は関数 Fの不動点

不動点演算子 Y = λf. M f = λf. (λx. f (x x)) (λx. f(x x)) とおくと Y F = β M F なので 前のページの議論から Y F = β F (Y F) つまり Y F は F の不動点! Y は任意の関数 F を引数にとり その F の不動点を与える関数なので と呼ぶ 不動点演算子 これを使うと再帰が表現可能

再帰関数と不動点 再帰関数の例 : fact(n) = if n=0 then 1 else n * fact(n-1) fact は等式 f = λn. if n=0 then 1 else n * f(n-1) を満たす関数 f factgen = λf. λn. if n=0 then 1 else n * f(n-1) とおけば factは f = factgen f を満たすf つまりfactgen の不動点! よって不動点演算子 Y を用いれば fact = Y factgen と書ける

黒板で fact 3 を計算してみよう

再帰関数の表現 ( 一般の場合 ) 再帰関数定義 f x = e によって定義される関数 f は Y (λf.λx.e) と ( 再帰を使わないで ) 表現可能

本日の内容 λ 計算の表現力 ( 前回のつづき ) 前回の復習 不動点演算子と再帰 λ 計算の重要な性質 チャーチ ロッサー性 簡約戦略 型付き λ 計算

チャーチ ロッサーの定理 If M then N 1 N 2 0 ステップ以上の簡約

チャーチ ロッサーの定理 If M then N 1 N 2 L 0 ステップ以上の簡約

例 (λf.λx.f(f x)) ((λx.x)(λx.x)) λx.(λx.x)(λx.x)((λx.x)(λx.x)x) (λf.λx.f(f x))(λx.x) λx.(λx.x)((λx.x)(λx.x)x) M λx.(λx.x)((λx.x)x) N 1 N 2 L

注意 M M N 1 N 2 や N 1 N 2 は成り立つが L L M N 1 N 2 は成り立たない ( 前ページの例参照 ) L 1 ステップの簡約 0 ステップ以上の簡約

系 : 正規系の一意性 定義 :M * N のとき N を M の (β) 正規形と呼ぶ 定理 ( チャーチ ロッサー性の系 ): N 1, N 2 が M の β 正規形なら ( 束縛変数の付け替えを除いて )N 1 =N 2 証明 : M * N 1 かつ M * N 2 と仮定する チャーチ ロッサーの定理より ある L が存在して N 1 * L かつ N 2 * L ところが N 1, N 2 ともに簡約できないので N 1 =L= N 2

系 : 正規系の一意性 定義 :M * N のとき N を M の (β) 正規形と呼ぶ 定理 ( チャーチ ロッサー性の系 ): N 1, N 2 が M の β 正規形なら ( 束縛変数の付け替えを除いて )N 1 =N 2 注意 : 上の定理は 簡約が停止するならば 得られる正規形は一意である ことを述べているだけであり どのような簡約列を選んでも正規形が得られることは保証しない 例 :(λx.y) ((λx.xx)(λx.xx))

本日の内容 λ 計算の表現力 ( 前回のつづき ) 前回の復習 不動点演算子と再帰 λ 計算の重要な性質 チャーチ ロッサー性 簡約戦略 型付き λ 計算

簡約戦略 簡約の各ステップで どの β 簡約基 ((λx.m)n の形をした部分項 ) について簡約を行うかを決める戦略 最左簡約 :β 簡約基のうち 最も左から始まるものを簡約 e.g. (λx.y) ((λx.xx)(λx.xx)) (λf.λx.f(f x)) ((λx.x)(λx.x)) 定理 : M が β 正規形を持つなら 最左簡約によって得られる

本日の内容 λ 計算の表現力 ( 前回のつづき ) 前回の復習 不動点演算子と再帰 λ 計算の重要な性質 チャーチ ロッサー性 簡約戦略 型付き λ 計算

型付き λ 計算 値の種類を表す 型 を各項に割り当てて 無意味な項を排除 λx:int.x+1 : int int (λx:int.x)+1 :?? 型付きプログラミング言語の基礎 論理学との密接な対応 (Curry-Howard 同型対応 ) ( 再帰を加えないかぎり ) チューリングマシンと同等の表現力は必ずしも持たない

プログラミング言語における 型システム 各式 変数に 型 を割り当て 一部のエラー (e.g. abc +1) をコンパイル時に発見 型情報を用いたプログラムの最適化 データの型タグの除去 および実行時型検査の除去 e.g. 型情報がない場合の x+1 のコンパイル結果 if x.type=int then x.val + int 1 else if x.type=float then x.val + float 1.0 else error

単純型付き λ 計算 構文 簡約 τ ( 型 ) ::= b τ 1 τ 2 b ( 基本型 ) ::= int bool... M ( 項 ) ::= c b1... bk b ( 定数 ) x λx:τ.m M 1 M 2 β 簡約 + 定数の簡約 : c b1... bk b c 1 b1... c k bk [c](c 1,...,c k ) ( ただし [c] は c が表す数学的な関数 例えば [+] 1 2 = 3)

型判断 (type judgment) x 1 :τ 1,..., x n :τ n M: τ 型環境 ( 変数の有限集合から型集合への写像 ) 型環境 x 1 :τ 1,..., x n :τ n のもとで項 Mは型 τを持つ 各変数 x i が型 τ i の値に束縛されている下でMを評価すると 評価結果はτ 型の値になる e.g. f:int int, x:int f x : int y:int + int int int y 1 int : int 次のスライドの 型付け規則 により定義

型付け規則 Γ c τ :τ Γ(x)=τ Γ x:τ Γ, x:τ 1 M:τ 2 Γ λx:τ 1.M: τ 1 τ 2 Γ M: τ 1 τ 2 Γ N: τ 1 Γ M N: τ 2

型の導出例 黒板で - (λf:int int.λy:int.f(f(y))) (λz:int. + int int int z 1 int ) : int int

単純型付き λ 計算の性質 型の一意性 Γ - M:τ かつ Γ -M:τ ならば τ=τ 強正規化定理 Γ - M:τ ならば無限簡約列 M M 1 M 2 M 3... は存在しない => 型なしλ 計算やチューリングマシンに比べて表現力が劣る 型保存 (subject reduction) Γ - M:τ かつM N ならば Γ - N:τ 系 : Γ - M:τ かつ M * C[(λx:σ.L)N] ならば Nの型はσ ( すなわち 関数が要求する引数の型と実際の引数の型は一致する )

単純型付き λ 計算の性質 型の一意性 Γ - M:τ かつ Γ -M:τ ならば τ=τ 強正規化定理 Γ - M:τ ならば無限簡約列 M M 1 M 2 M 3... は存在しない => 型なしλ 計算やチューリングマシンに比べて表現力が劣る 型保存 (subject reduction) Γ - M:τ かつM N ならば Γ - N:τ 系 : Γ - M:τ かつ M * C[(λx:σ.L)N] ならば Nの型はσ ( すなわち 関数が要求する引数の型と実際の引数の型は一致する ) ほとんどの型付き計算モデル 言語で成り立つ性質

型の一意性 単純型付き λ 計算の性質 Γ - M:τ かつ Γ -M:τ ならば τ=τ 強正規化定理 Γ - M:τ ならば無限簡約列 M M 1 M 2 M 3... は存在しない => 型なしλ 計算やチューリングマシンに比べて表現力が劣る 型保存 (subject reduction) 一部の型付き計算モデルのみで成り立つ性質 Γ - M:τ かつM N ならば Γ - N:τ 系 : Γ - M:τ かつ M * C[(λx:σ.L)N] ならば Nの型はσ ( すなわち 関数が要求する引数の型と実際の引数の型は一致する )

以下のアウトライン 型検査アルゴリズム 型推論

型検査アルゴリズム TC TC: Γ, M を入力として Γ - M:τ を満たす τ を ( あれば ) 出力 TC(Γ, c τ ) = τ TC(Γ, x) = if x in dom(γ) then Γ(x) else fail TC(Γ, λx:τ 1.M) = τ 1 TC(Γ{x:τ 1 }, M) TC(Γ, MN) = let τ 0 = TC(Γ, M) in let τ 1 = TC(Γ, N) in if τ 0 is of the form τ 1 τ 2 then τ 2 else fail Γ c τ :τ Γ(x)=τ Γ x:τ Γ, x:τ 1 M:τ 2 Γ λx:τ 1.M: τ 1 τ 2 Γ M: τ 1 τ 2 Γ N: τ 1 Γ M N: τ 2

以下のアウトライン 型検査アルゴリズム 型推論

型推論 (1) 各変数や式に型を表す変数を割り当てる (2) 型付け規則に従って 型に関する 方程式 をたてる (3) 型の方程式を解く

型推論の例 let twice f x = f (f x) α f = α x α f x α M : 部分式 M の型

型推論の例 let twice f x = f (f x) α f = α x α f x α f = α f x α f(f x) α M : 部分式 M の型

型推論の例 let twice f x = f (f x) α f = α x α f x α f = α f x α f(f x) α twice = α f α x α f(f x) α M : 部分式 M の型

型推論の例 let twice f x = f (f x) α f = α x α f x α f = α f x α f(f x) α twice = α f α x α f(f x) 型方程式を解く α f = α x α x α f x = α f(f x) = α x α twice = (α x α x ) α x α x α M : 部分式 M の型

単純型つき λ 計算の様々な拡張 Sysytem F ( 型つき λ 計算の一種 ) 型も関数の引数に τ ( 型 ) ::= b α τ 1 τ 2 α.τ M ::= x λx:τ.m MN Λ α.m M[τ] - 型推論は決定不能 再帰型 τ ( 型 ) ::= b α τ 1 τ 2 µα.τ 不動点演算子が表現可能 (=> 再帰を表現できる ) 部分型 (Subyping) σ < τ: σ 型の値は τ 型の値として使える e.g. int < real, 依存型 型が値に依存できる real int < int real e.g. int array[n] : サイズ n の配列の型 n:int -> int array[n]: 整数 n をうけとり サイズ n の配列を返す関数の型