技術者/プログラマのための ラムダ計算、論理、圏 第2回

Slides:



Advertisements
Similar presentations
第6回 JavaScript ゼミ セクション3-6 発表者 直江 宗紀. 組み込み関数  JavaScript に予め用意された関数  特定のオブジェクトに依存していない  単に関数名で呼び出すことが可能.
Advertisements

プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
アルゴリズムとデータ構造 第2回 線形リスト(復習).
人工知能特論2011 No.4 東京工科大学大学院 担当教員:亀田弘之.
第1回 確率変数、確率分布 確率・統計Ⅰ ここです! 確率変数と確率分布 確率変数の同時分布、独立性 確率変数の平均 確率変数の分散
プログラミング基礎I(再) 山元進.
コンパイラ 2011年10月17日
ソフトウェア基礎科学 授業資料: 論理関係(logical relations)のお話
プログラム理論特論 第2回 亀山幸義
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
データ構造と アルゴリズム 理工学部 情報システム工学科 新田直也.
5.チューリングマシンと計算.
5.チューリングマシンと計算.
プログラミング基礎I(再) 山元進.
プログラミング言語論 第6回 型 情報工学科 篠埜 功.
データ構造と アルゴリズム 第二回 知能情報学部 新田直也.
条件式 (Conditional Expressions)
情報教育論 第9回 仮定文の仕組み 政策・メディア研究科 岡田 健.
数理論理学 第1回 茨城大学工学部情報工学科 佐々木 稔.
データ構造と アルゴリズム 知能情報学部 新田直也.
第 七 回 双対問題とその解法 山梨大学.
プログラムはなぜ動くのか.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
コンパイラ 2012年10月15日
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
数理論理学 第11回 茨城大学工学部情報工学科 佐々木 稔.
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
プログラミング言語入門 手続き型言語としてのJava
第25章 単一始点最短路 3節 Bellman-Fordのアルゴリズム
プログラミング言語入門.
前回の練習問題.
第7回 条件による繰り返し.
オートマトンとチューリング機械.
 型推論1(単相型) 2007.
プログラミング言語論 第10回 練習問題解答例 情報工学科 篠埜 功.
Q q 情報セキュリティ 第8回:2005年6月3日(金) q q.
平成20年10月5日(月) 東京工科大学 コンピュータサイエンス学部 亀田弘之
計算の理論 II 前期の復習 -有限オートマトン-
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
 型推論3(MLの多相型).
生物情報ソフトウェア特論 (2)たたみ込みとハッシュに 基づくマッチング
「アルゴリズムとプログラム」 結果を統計的に正しく判断 三学期 第7回 袖高の生徒ってどうよ調査(3)
補講:アルゴリズムと漸近的評価.
データの表現 2進数 0と1を使う。 基数(基準になる数)が2. 101(2) かっこで2進数と示すことがある。
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
5.チューリングマシンと計算.
第14回 前半:ラムダ計算(演習付) 後半:小テスト
PROGRAMMING IN HASKELL
数理論理学 第9回 茨城大学工学部情報工学科 佐々木 稔.
プログラミング言語論 第10回 情報工学科 篠埜 功.
~sumii/class/proenb2010/ml2/
第5回 プログラミングⅡ 第5回
4.プッシュダウンオートマトンと 文脈自由文法の等価性
~sumii/class/proenb2009/ml6/
PROGRAMMING IN HASKELL
関数型言語の基礎 型なしl計算 型理論 構成的プログラミング GUIにあらわれる関数概念 PBD VL
コンパイラ 2012年10月11日
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
PROGRAMMING IN HASKELL
情報数理Ⅱ 第10章 オートマトン 平成28年12月21日.
情報処理Ⅱ 第2回 2004年10月12日(火).
第10回 関数と再帰.
1.2 言語処理の諸観点 (1)言語処理の利用分野
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
数理論理学 最終回 茨城大学工学部情報工学科 佐々木 稔.
第1章 文字の表示と計算 printfと演算子をやります.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング 3 ポインタ(1).
Presentation transcript:

技術者/プログラマのための ラムダ計算、論理、圏 第2回 18:00開始

今日の予定(おおよそ) 不可能性の証明 -- 40分 (170分) 状況により、この予定は(ときに大幅に)変更されるかも知れません

全体(3回)の目標 ラムダ計算、自然演繹による推論、デカルト閉圏の三位一体を知る。 計算の限界、ある主の判断・決定の不可能性を納得しましょう。

前回のテーマはこれだった スノーグローブ スノーグローブ現象と無縁ではいられない私達 認識と了解のタフネスが必要

これもテーマだった バエズの絵

これは重要と言った 基本等式。通常は、Eを固定して単に f^E と書く。

いよいよラムダだ、で前回終わったのだった < > -- 寝ころんだラムダ2つ=ラムダ括弧 以下、前回と少し変更された部分があるので注意。

大きなラムダ式とその計算 インフォーマルなラムダ計算 しばしば、大きなラムダ式と関数そのものが同一視される(区別しなくなる)

大きなラムダ式 (1) 5. <| 5> Roland Backhouse(http://www.cs.nott.ac.uk/~rcb/)さんあたりが使ってます 質問: <| 5> は 5 と同じか?

大きなラムダ式 (2) f = <x, y| x×x + y×y> のようにして、式で定義される関数に名前を与えてもよい

等号の意味 fとgが等しければ、fのグラフとgのグラフは等しいし、逆も真

式は関数か、関数は式か 式を見て関数の同一性(等しさ)を判断できるか?(後で問題にする)

大きなラムダ式の計算規則 イータ規則 <x| f(x)> = f いずれもインフォーマルラムダ計算の規則。 経験と直感で納得。自明と言える。

小さなラムダ式とその計算 フォーマルなラムダ計算 人間が計算するときもあるが、それは感情移入

小さなラムダ式の構文 ピリオド、カンマ、括弧 どのくらいアトムを使うかは目的によりけり。

半分フォーマルな小さなラムダ式 λx.λy.(2×x + y + 3) 半分フォーマルな小さいラムダ式  4. 常に1引数。

3種のラムダ式 種類 誰のため 目的 インフォーマルなラムダ式 人間 世界を記述 セミフォーマルなラムダ式 箱に入った人間や妖精 箱のなかで計算 フォーマルな ラムダ式 記号計算をするマシン マシンによる計算

ラムダ抽象=ラムダオペレータ 伝統的数学の立場では、関数から、関数ジェネレータ=高階関数 <x| <y| 2×x + y>> を生み出す

ラムダ抽象の絵 描こう。

練習とか 適当にアドリブで

基本等式 Exec(f^ (a), b) = f(a, b) いろいろなバリエーションがある

ラムダ抽象の絵もっと こりゃ向きが違うが、

スノーグローブとベータ変換 エンジンの変種、Exec, Apply, Evalでもベータ変換が微妙に違う

絵の描き方 口頭とホワイトボードで。

関数と計算機 関数だけで計算機の動作を記述・説明できるの? はい、できますよ。

メモリー状態は1つの整数 どんな巨大なメモリーだって、その状態はビット列 2進数 整数(10進) '' 1 '0' 10 2 '1' 11 3 '00' 100 4 '01' 101 5 '10' 110 6 '11' 111 7 N = {0, 1, 2, 3, ...} プログラムは、走る前の状態から走り終わった後の状態への遷移を引き起こす。だから …

関数と部分関数 計算で値を求める関数は部分関数

コードとデータ Eが計算機だとすると: もっと正確に言うと …

奇妙な不等式 N×N ⊆ N

もう一度記号の確認 f:X⊃→Y ⇔ f∈<X⊃→Y>

計算の世界を記述しよう 計算の世界を記述しよう。

計算の世界 その他、計算行為や計算現象は何でも関数

もっと広く考えよう 型は運用上の約束事であり、「みなし方」のヒントまたは強制である(圏論では常に強制と考える)

計算の世界の前提あるいは仮説 万能なエンジンに対して、エンジン自身を含めてすべての関数をコンパイルできる 最後の仮説は、スノーグローブ現象が起きていることを認めること。

人間による計算 H^Mは人間可読な表現(H-関数コード)を、機械語コードH^M(s)に直す

その他いろんな例 高級言語のネイティブコード化

不可能性の証明 できるわけない!!

なにが不可能なのか 人間や計算機が実行できるアルゴリズムにより、 2つのプログラムが外延的に同値かどうかを確実に判断すること 外延的に同値とは「部分関数として等しい」こと。

このプログラム(関数)は、 この引数で停止する 神様(超越者)の関数 GOOD(f, a) は、 関数fに引数aを渡すと例外となるか無限走行して戻り値を出力しないなら false を返す。 GOOD: <N⊃→N>, N → B GOODが人間により記述され、コンパイルされ、ライブラリとして使えるようになったと仮定する。その“この世の関数”を good とする。 good: N, N ⊃→ B

関数sと値s(σ) sの関数コード(コンパイル済みイメージ)をビット列または整数とみなしたものをσとすると、値 s(σ) がどうなるか? } } sの関数コード(コンパイル済みイメージ)をビット列または整数とみなしたものをσとすると、値 s(σ) がどうなるか?

値s(σ)を考える 確認: good(σ, σ) = GOOD(s, σ) は定義される。 値は、trueかfalseのどちらか。 4. 無限走行する 4. 値は0

んっ? これはどういうこと? おてんと様が西から昇るよ。 ありえない事が起きる。 よって、おまえの言うこと/その仮定は正しくない。

もし全域性が判断できたら gは計算可能な全域関数である よって、おまえの言うこと/その仮定は正しくない。

もし関数の等しさが判断できたら 確認: 部分関数fとgが等しいなら、その有効定義域も等しい。 2. f(x)が定義されていないなら、g(x)も定義されない。 2. g = one でないならば gは全域でない あれ?

我々は知りえない 与えられた関数(計算可能な部分関数)に具体的な値を渡して停止するか(戻り値が返るか)どうかを確実に知る実行可能な方法はない。 我々は超越的な関数の存在を夢想することも確信することもできる(?)が、超越的な関数を計算する方法を持たず、今後なにがあってもどうあがいても計算できない。

我々は何を知りえないかを知りうる 不思議だ