プログラミング言語論 第10回 情報工学科 篠埜 功.

Slides:



Advertisements
Similar presentations
プログラミング言語論 第3回 BNF 記法について(演習付き) 篠埜 功. 構文の記述 プログラミング言語の構文はどのように定式化できるか? 例1 : for ループの中に for ループが書ける。 for (i=0; i
Advertisements

0章 数学基礎.
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
人工知能特論2011 No.4 東京工科大学大学院 担当教員:亀田弘之.
第1回 確率変数、確率分布 確率・統計Ⅰ ここです! 確率変数と確率分布 確率変数の同時分布、独立性 確率変数の平均 確率変数の分散
人工知能特論2007 No.4 東京工科大学大学院 担当教員:亀田弘之.
プログラミング言語論 関数型プログラミング言語 水野嘉明
プログラミング入門2 第4回 配列 for文 変数宣言 初期化
ソフトウェア基礎科学 授業資料: 論理関係(logical relations)のお話
確率・統計Ⅰ 第11回 i.i.d.の和と大数の法則 ここです! 確率論とは 確率変数、確率分布 確率変数の独立性 / 確率変数の平均
計算の理論 II 帰納的関数(つづき) 月曜4校時 大月美佳.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
第四回 線形計画法(2) 混合最大値問題 山梨大学.
統計解析 第9回 第9章 正規分布、第11章 理論分布.
演習3 最終発表 情報科学科4年 山崎孝裕.
プログラミング言語論 第6回 型 情報工学科 篠埜 功.
プログラミング言語論 第4回 式の構文、式の評価
論理式の表現を数学的に取り扱いやすくするために代数学の助けを借りる.
プログラミング言語論 第1回 導入 情報工学科 篠埜 功.
人工知能特論2011 資料No.6 東京工科大学大学院 担当教員 亀田弘之.
香川大学工学部 富永浩之 情報数学1 第5-2章 命題論理式の 同値変形とカルノー表 香川大学工学部 富永浩之
データ構造と アルゴリズム 第二回 知能情報学部 新田直也.
条件式 (Conditional Expressions)
情報教育論 第9回 仮定文の仕組み 政策・メディア研究科 岡田 健.
言語処理系(5) 金子敬一.
10.通信路符号化手法2 (誤り検出と誤り訂正符号)
電気回路Ⅱ 演習 特別編(数学) 三角関数 オイラーの公式 微分積分 微分方程式 付録 三角関数関連の公式
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
数理論理学 第11回 茨城大学工学部情報工学科 佐々木 稔.
7.時間限定チューリングマシンと   クラスP.
国立情報学研究所 ソフトウェア研究系 助教授/
プログラミング言語論プログラミング言語論 プログラムの意味論 水野嘉明
プログラミング言語論 第3回 BNF記法について(演習付き)
形式言語の理論 5. 文脈依存言語.
プログラミング言語論 第9回 Hoare論理の練習問題 手続きの引数機構 変数の有効範囲
数理論理学 第3回 茨城大学工学部情報工学科 佐々木 稔.
国立情報学研究所 ソフトウェア研究系 助教授/
プログラミング言語論 第10回 練習問題解答例 情報工学科 篠埜 功.
変換されても変換されない頑固ベクトル どうしたら頑固になれるか 頑固なベクトルは何に使える?
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
9.通信路符号化手法1 (誤り検出と誤り訂正の原理)
情報処理Ⅱ 第2回:2003年10月14日(火).
プログラミング言語論 第5回 手続きの引数機構 変数の有効範囲
2007年度 情報数理学.
プログラミング言語論 第9回 情報工学科 木村昌臣 篠埜 功.
 型推論3(MLの多相型).
プログラミング入門2 第9回 ポインタ 情報工学科 篠埜 功.
論理回路 第4回
補講:アルゴリズムと漸近的評価.
5.チューリングマシンと計算.
第14回 前半:ラムダ計算(演習付) 後半:小テスト
解析学 ー第9〜10回ー 2019/5/12.
論理回路 第5回
7.8 Kim-Vu Polynomial Concentration
11.動的計画法と擬多項式時間アルゴリズム.
4.プッシュダウンオートマトンと 文脈自由文法の等価性
情報処理Ⅱ 第7回 2004年11月16日(火).
計算の理論 I NFAとDFAの等価性 火曜3校時 大月 美佳 平成16年5月18日 佐賀大学理工学部知能情報システム学科.
関数型言語の基礎 型なしl計算 型理論 構成的プログラミング GUIにあらわれる関数概念 PBD VL
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
香川大学工学部 富永浩之 情報数学1 第5-2章 命題論理式の 同値変形とカルノー表 香川大学工学部 富永浩之
コンパイラ 2012年10月11日
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
PROGRAMMING IN HASKELL
情報数理Ⅱ 第10章 オートマトン 平成28年12月21日.
プログラミング基礎a 第5回 C言語によるプログラミング入門 配列と文字列
プログラミング入門2 第5回 配列 変数宣言、初期化について
プログラミング基礎a 第3回 C言語によるプログラミング入門 データ入力
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
プログラミング言語論 プログラミング言語論 演習7 解答と解説 演習7 解答と解説 1.
Presentation transcript:

プログラミング言語論 第10回 情報工学科 篠埜 功

ラムダ計算 ラムダ計算は1930年代(計算機ができる前)に考え出された。現在では、関数型言語の核となっている。 計算可能な関数をすべて表現可能。 [ラムダ式の定義] <ラムダ式> ::= <定数> | <変数> | (<変数> . <ラムダ式>) | (<ラムダ式> <ラムダ式>) <定数> ::= 0 | 1 | 2 | 3 | … <変数> ::= x | y | z | w | … 2

ラムダ式 ラムダ式を表記する場合の約束事項 関数適用は左結合する。 ラムダ抽象x .MにおけるMはできるだけ大きくとる。 括弧を省略した場合、1, 2の約束に従う。 (例) x y z は、((x y) z)を表す。 (例) x. y. z. x y z は、 (x. (y. (z. ((x y) z)))) を表す。 3

ラムダ式 計算の本質を追究する過程で考えられた言語 ラムダ記法は直感的には関数の表記法。 g ( x ) = x + 1 のように書く。 4

ラムダ計算 ラムダ式に対し、形式的な式変形(β変換、次ページ以降で説明)を行うことが計算であるという考えに従った計算体系がラムダ計算。 5

変換の例 (例1) (x. x) z  z (例2) (y. y) z  z 直感的には、λx. xはxを受け取ってxを返す関数であり、このxをyに変えても意味は同じである。 g ( x ) = x と g ( y ) = yは同じ意味であるのと同じ。 6

変換の例(続き) (例3) (x. x y) (z. z)  (z. z) y (λx. x y)は、xを受け取って、それをyに適用する関数である。(λz. z)を受け取った場合は、それをyに適用する関数適用式になる。(これをさらにβ変換するとyになる) (例4) (λx. x) (λy. y)  (λy. y) (λx. x)はxを受け取ってxを返す関数であり、 (λy. y) を受けとった場合、 (λy. y)になる。 7

メタ変数 以下でラムダ式の変換を定義する。その際に、ラムダ式、定数、変数を表すための変数(メタ変数)として以下のものを用いる。 M, N, P, M1, M2 等: ラムダ式 c: 定数 x, y, z : 変数(x, y, z, w等。このスライドでは、立体か斜体かでメタ変数かどうかを区別している。) 8

変換 ラムダ式 M, N, P, 変数xについて、 変換を以下のように再帰的に定義する。 (x. M) N  M [N / x] (x. M)  (x. N) MP  NP PM  PN M [N / x]はラムダ式M中のxをNで置き換えたラムダ式を表す。ただし、束縛変数が自由変数とかぶらないように、束縛変数の名前の付け替えを行う。 9

置換の例 さきほどの例 (x. x) z は、定義に従ってβ変換すると、x [ z / x ] になる。x [ z / x ]は、式x中のxをzに置き換えた式、すなわちzを表す。 (x. x y) (z. z) の例では、β変換すると、 (x y) [ (z. z) / x ] になる。 (x y) [ (z. z) / x ]は、式(x y)中のxを(z. z)に置き換えた式、すなわち (z. z) yを表す。 10

置換で名前がかぶる例 例えば、(λx. y) [x / y]のような置換は、(λx . x)になるべきではない。 (λx. y) 中のxは仮の名前であり、 [x / y] のxと同じではない。 よって、 (λx. y)中の仮の名前xをまず何らかの未使用の名前に付け替える。例えば(λz . y)としてから、[ x / y ]の置き換えを行う。すると、(λz . x)となる。このようになるように置換を次ページで定義する。 11

置換M [ N / x ]の定義 Mが定数の場合 c [ N / x ] = c Mが変数の場合 x [ N / x ] = N y [ N / x ] = y ( x  y ) Mがラムダ抽象の場合 (y. M) [ N / x ] = y. M (x = y) y. (M [N / x]) (x  y, y  FV (N)) z. ((M [ z / y ]) [N / x] ) ( x  y, z  x, y  FV (N), z  FV (M), z FV(N) ) Mが関数適用の場合 (M1 M2) [N / x] = ( M1 [ N / x ] ) ( M2 [N / x] ) 12

自由変数 ラムダ式 Mの自由変数の集合FV(M)を以下のように定義する。 FV( c ) = { } FV ( x ) = { x } FV ( x. M ) = FV (M) \ { x } (\ は集合の差をとる演算を表すものとする。) FV (M1 M2) = FV (M1)  FV (M2) 13

例 (例1)ラムダ式 (λx . x)の自由変数を計算してみる。FVの定義により、 FV (λx. x) = FV (x) \ {x} = {x} \ {x} = { } である。( ラムダ式(λx . x)には自由変数はない。) (例2)ラムダ式 (λx. x y)の自由変数は、 FV (λx. x y) = FV (x y) \ {x} = (FV (x) U FV(y)) \ {x} = ({x} U {y}) \ {x} = {x, y} \ {x} = {y} となり、y1つである。 14

練習問題1 (問1) ラムダ式 (z. z) w 中の自由変数を求めよ。 (問2) ラムダ式 (λz. z y) ((λz. z) w) 中の自由変数を求めよ。

練習問題2 (問1) 置換 (x y) [z/x] を計算せよ。 (問2) 置換 (λy. x y) [z/x] を計算せよ。 (問3) 置換 (λy. x y) [y/x] を計算せよ。 (問4) 置換 (λy. x y) [λz. z y/x] を計算せよ。

練習問題3 (問1) ラムダ式 (λx. x y) (λz. z) にβ変換を適用せよ。 (問2) ラムダ式 (λx. (λy. x y)) (λz. y z) にβ変換を適用せよ。 (注意)この問題では、β変換を一度だけ適用するものとする。

変換列 ラムダ式M1にβ変換を有限回(0回以上)繰り返してラムダ式Mnが得られるとき、 M1  M2  …  Mn また、 M  N かつ N  M のとき、 M  N と書く。 18

例 ラムダ式 (λx. λy. x y) z w に対して、以下のβ変換列が存在する。 (x. y. x y) z w (y. z y) w z w 19

練習問題4 ラムダ式 (λx. λy. x y) (λz. z) w は、何度かβ変換を行うことによってwに変換できるが、その過程を示せ。 20

Church-Rosserの定理 M * M1 かつM * M2 ならばあるラムダ式Nが 存在して M1 * N かつM2 * N が成り立つ。 21

例 ラムダ式 (x. y. x y) (z. z) w は、 (x. y. x y) (z. z) w  (λy. (λz. z) y) w のようにまずβ変換される。このλ式に対し、2通りのβ変換の適用が可能である。 (λy. (λz. z) y) w  (λy. y) w (λy. (λz. z) y) w  (λz. z) w (1), (2)に対してβ変換を一度適用すると、どちらもwになる。 このように、β変換で一度枝分かれした後、必ず合流する経路があるというのがChurch-Rosser定理である。 22

練習問題5 ラムダ式 (λx. λy. x y) (λx. x y) wに対して、β変換を適用する箇所のないラムダ式になるまでβ変換を適用せよ。また、この例では途中で、2通りの適用可能性のあるラムダ式が出てくる。2通りのβ変換列を示せ。 23

参考文献 Alonzo Church, “An unsolvable problem of elementary number theory”, American Journal of Mathematics, vol. 58 , pp. 345-363, 1936.