関数型言語の基礎 型なしl計算 型理論 構成的プログラミング GUIにあらわれる関数概念 PBD VL

Slides:



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

プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
(Rubyistのための) 超音速:ML入門
プログラミング言語論 関数型プログラミング言語 水野嘉明
プログラミング言語論プログラミング言語論 命令型プログラミング言語 水野嘉明
プログラミング言語としてのR 情報知能学科 白井 英俊.
ソフトウェア基礎科学 授業資料: 論理関係(logical relations)のお話
技術者/プログラマのための ラムダ計算、論理、圏 第2回
プログラム理論特論 第2回 亀山幸義
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
演習3 最終発表 情報科学科4年 山崎孝裕.
2009/10/9 良いアルゴリズムとは 第2講: 平成21年10月9日 (金) 4限 E252教室 コンピュータアルゴリズム.
プログラミング言語論 第4回 式の構文、式の評価
論理式の表現を数学的に取り扱いやすくするために代数学の助けを借りる.
プログラミング言語論 第4回 手続きの引数機構 変数の有効範囲
条件式 (Conditional Expressions)
Tokuda Lab. NISHIMURA Taichi
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
プログラミング言語論 第12回 関数型プログラミング 情報工学科 篠埜 功.
数理論理学 第11回 茨城大学工学部情報工学科 佐々木 稔.
プログラミング言語入門 手続き型言語としてのJava
国立情報学研究所 ソフトウェア研究系 助教授/
PROGRAMMING IN HASKELL
プログラミング言語論プログラミング言語論 プログラムの意味論 水野嘉明
プログラミング言語論 第3回 BNF記法について(演習付き)
PROGRAMMING IN HASKELL
プログラミング言語論 第9回 Hoare論理の練習問題 手続きの引数機構 変数の有効範囲
第10回関数 Ⅱ (ローカル変数とスコープ).
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
知能情報工学演習I 第12回(後半第6回) 課題の回答
第9回関数Ⅰ (簡単な関数の定義と利用) 戻り値.
お仕事にまったく役にたたない内容のコードレビューやりたいと思います。
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
高度プログラミング演習 (08).
データ構造とアルゴリズム論 第7章 再帰処理 平成17年12月6日 森田 彦.
国立情報学研究所 ソフトウェア研究系 助教授/
 型推論1(単相型) 2007.
9.通信路符号化手法1 (誤り検出と誤り訂正の原理)
プログラミング言語論 第5回 手続きの引数機構 変数の有効範囲
再帰的手続き.
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
プログラミング言語論 第9回 情報工学科 木村昌臣 篠埜 功.
 型推論3(MLの多相型).
2007/6/12(通信コース)2007/6/13(情報コース) 住井
Type Systems and Programming Languages
補講:アルゴリズムと漸近的評価.
基礎プログラミング演習 第6回.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
第14回 前半:ラムダ計算(演習付) 後半:小テスト
国立情報学研究所 ソフトウェア研究系 助教授/
データ構造とアルゴリズム論 第7章 再帰処理 平成16年11月30日 森田 彦.
プログラミング言語論 第10回 情報工学科 篠埜 功.
~sumii/class/proenb2010/ml2/
2006/6/27(通信コース)2006/7/5(情報コース) 住井
~sumii/class/proenb2009/ml6/
情報処理Ⅱ 2005年10月28日(金).
18. Case Study : Imperative Objects
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
PROGRAMMING IN HASKELL
型理論 ラッセルのパラドックス: 「集合の集合」は矛盾を引き起こす。 ラッセル、ホワイトヘッド 「プリンキピアマセマティカ」
関数と再帰 教科書13章 電子1(木曜クラス) 2005/06/22(Thu.).
Haskell Programming Language
第10回 関数と再帰.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
情報処理Ⅱ 小テスト 2005年2月1日(火).
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
プログラミング言語論 プログラミング言語論 演習7 解答と解説 演習7 解答と解説 1.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

関数型言語の基礎 型なしl計算 型理論 構成的プログラミング GUIにあらわれる関数概念 PBD VL VSL (Visual Scripting Language)

l計算 手続き型言語では add1(x)=x+1 (1) によって関数add1を定義する。これはadd1の関数としての振る舞いは定義するが、関数そのもの表現を与えない。「xをもらってx+1を返す関数」そのものの表現として lx.x+1 をもちいる。関数を構成する操作をl抽象とよぶ。 これにより、(1)は add1= lx.x+1 と等価で、add1を単独でデータとして用いることができる。

関数適用 実引数3を渡して値を計算するのに add1(3) のよう表現するのと同様、 (lx.x+1)(3) のように表す。この(関数呼び出しの)操作を関数適用という。 実際に実引数を関数本体に代入する操作 (lx.x+1)(3) ⇒  3+1 をb簡約 (b-conversion あるいはb-reduction) という。

高階関数 n引数関数 f(x1,…,xn) は lx1.(lx2.(…(lxn. f(x1,…,xn))…)) とあらわせる。(カリー化 Currying) 問い  (2項演算の)足し算を高階関数で表せ。

l計算の構文 Var ::= v | Var ’ Term ::= Var | (Term Term) | (l Var. Term) Termはl項(lterm)という。 略記法 M1 M2 M3… Mn は ((…((M1 M2) M3 ) …) Mn) l x1 x2 … xn . Mは (l x1. (l x2 . ( …( xn . M )…))) の略記法 例:  l xyz . xz(yz)は ( l x . ( l y . ( l z . (( xz)(yz)))))

束縛変数と自由変数 lx . y(ly . xy) 1 23 1のyは自由変数 2,3のx,yは束縛変数

a同値と代入 束縛変数の名前だけが違うものは同一視する (a同値)。またa同値なものに置き換える操作を a変換(a-conversion)という。 l項Mの自由変数xをl 項 Nでおきかえる操作を代入という。結果をM[x:=N]と書く。 おきかえの際、 Nが自由変数yをもち、 Mの束縛変数yのl束縛のスコープに自由変数xがあれば、 あらかじめMの束縛変数yをべつの名前に換える。 問: l y.xy [x:=lx . xy]

b-簡約の定義 代入をつかってb-簡約の定義の定義を書くと (lx.M)N ⇒ M[x:=N] この両辺を等しいものと考え と書く。等号=の公理は他に

l計算による算術プログラミング

数の表現 cn≡lfx . fn(x) ここで、 Mn(N) ≡ M(M(…(M N) …)) n個 c0≡lfx . xとする チャーチ数 (Church numeral)

算術演算 A+ ≡ lxypq . xp(ypq) A* ≡ lxyz . x (yz) Aexp ≡ lxy . yx とすると、 A+ cm cn = cm+n A* cm cn = cm* n A^ cm cn= cm^ n

条件式 true ≡ lxy . x false≡ lxy . y if L then M else N ≡LMN とすると、 if true then M else N = M if false then M else N = N

組 [M, N] ≡ lz . zMN fst ≡ lx . x true snd ≡ lx . x false とすると fst [M, N]=M snd [M, N]=N

不動点演算子 階乗をもとめる関数factの再帰的定義: fact(n) = if n=0 then 1 else n*fact(n-1) F(f)(n) = if n=0 then 1 else n*f(n-1) とすると、 factは f に関する方程式 F(f) = f の解。このときf はFの不動点という。関数にたいしてその不動点を求める関数(不動点演算子)をFixと書くと、 Fix(F) = F(Fix(F))

Y ≡ lf.(lx . f(xx))(lx . f(xx)) 不動点コンビネータ Y ≡ lf.(lx . f(xx))(lx . f(xx)) とすると任意のl式Mについて M (Y M) = Y M このYを不動点コンビネータという。 不動点コンビネータはl式を関数とみたときの不動点演算子

帰納的定義 任意のl式Mにたいして、 H = lx1…xn.M[h:=H] を満たすl式Hが存在する。 証明: H ≡ Y (lhx1…xn.M)とせよ。

算術関数 「0」 ≡ lx.x 「n+1」 ≡ [false, 「n」] succ ≡ lx .[false, x] pred≡ lx.x false iszero ≡ lx.x ture

Church数に対する算術関数 succC ≡ lxyz.y(xyz) predC ≡ lxyz.x(lpq.q (py))(lv.z)(lv.v) iszeroC ≡lx.x succ 「0」 true

関数の表現 fact をl式で書け