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

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

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

Microsoft PowerPoint - ProD0107.ppt

Functional Programming

PowerPoint Presentation

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

Programming D 1/15

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

Functional Programming

オートマトンと言語

離散数学

Functional Programming

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

Microsoft PowerPoint - 13approx.pptx

プログラミングD - Java

プログラミングD - Java

PowerPoint Presentation

PowerPoint Presentation

論理と計算(2)

PowerPoint Presentation

lambda

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

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

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


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

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

Microsoft PowerPoint - prog08.ppt

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

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

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

Microsoft PowerPoint - 9.pptx

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 象限のすべての点

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

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

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

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

Microsoft PowerPoint - 9.pptx

Microsoft Word - 補論3.2

スライド 1

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

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

2011年度 東京大・文系数学

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 プレゼンテーション

Microsoft PowerPoint - fol.ppt

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

演習1

経済数学演習問題 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)

プログラミング実習I

An Automated Proof of Equivalence on Quantum Cryptographic Protocols

Microsoft Word - 3new.doc

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

1. A0 A B A0 A : A1,...,A5 B : B1,...,B

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

Information Theory

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

gengo1-11

Microsoft PowerPoint - prog07.ppt

Ł\”ƒ-2005

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.

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

Copyright c 2006 Zhenjiang Hu, All Right Reserved.

Microsoft PowerPoint ppt

Microsoft PowerPoint - mp11-02.pptx

Microsoft PowerPoint - 第3回2.ppt

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

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

情報数理学

program7app.ppt

Jacques Garrigue

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

不偏推定量

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

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

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

kiso2-09.key

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

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

微分方程式補足.moc

2011年度 大阪大・理系数学

Microsoft Word ã‡»ã…«ã‡ªã…¼ã…‹ã…žã…‹ã…³ã†¨åłºæœ›å•¤(佒芤喋çfl�)

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

スライド 1

データ解析

Microsoft PowerPoint - 資料04 重回帰分析.ppt

Microsoft PowerPoint - prog11.ppt

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

Microsoft PowerPoint - 06.pptx

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

<4D F736F F D208C51985F82CD82B682DF82CC88EA95E A>

PowerPoint Presentation

知識工学 II ( 第 2 回 ) 二宮崇 ( ) 論理的エージェント (7 章 ) 論理による推論 命題論理 述語論理 ブール関数 ( 論理回路 )+ 推論 ブール関数 +( 述語 限量子 ( ) 変数 関数 定数 等号 )+ 推論 7.1 知識

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

Probit , Mixed logit

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

2015-2018年度 2次数学セレクション(整数と数列)解答解説

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

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 と書ける

再帰関数の表現 ( 一般の場合 ) 再帰関数定義 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 同型対応 ) ( 再帰を加えないかぎり ) チューリングマシンと同等の表現力は必ずしも持たない

単純型付き λ 計算 構文 簡約 τ ( 型 ) ::= 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 の型

以下のアウトライン 型検査アルゴリズム 型推論 単純型つき λ 計算の拡張

構文 組型を加えた拡張 簡約 τ ( 型 ) ::= b τ 1 τ 2 τ 1 τ 2 b ( 基本型 ) ::= int bool... M ( 項 ) 型付け... fst(m 1, M 2 ) M 1 snd(m 1, M 2 ) M 2 ::=... (M 1, M 2 ) fst(m) snd(m) Γ M: τ 1 Γ N: τ 2 Γ (M, N): τ 1 τ 2 Γ M: τ 1 τ 2 Γ fst(m): τ 1 Γ M: τ 1 τ 2 Γ snd(m): τ 2

構文 直和型を加えた拡張 τ ( 型 ) ::=... τ 1 +τ 2 M ( 項 ) ::=... inl(m) inr(m) case M 0 of inl(x)=>m 1 inr(y)=>m 2 簡約 case inl(m) of inl(x)=>m 1 inr(y)=>m 2 [M/x]M 1 型付け case inr(m) of inl(x)=>m 1 inr(y)=>m 2 [M/x]M 2 Γ M: τ 1 Γ inl(m): τ 1 +τ 2 Γ M: τ 2 Γ inr(m): τ 1 +τ 2 Γ L: τ 1 +τ 2 Γ,x: τ 1 M: τ Γ,y: τ 2 N: τ Γ case L of inl(x)=>m inr(y)=>n: τ

単純型つき λ 計算の様々な拡張 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 の配列を返す関数の型