『技術者/プログラマのためのラムダ計算、論理、圏』セミナー#1

告知:「技術者/プログラマのためのラムダ計算、論理、圏」セミナー - 檜山正幸のキマイラ飼育記
セミナー補足:報告記事とか後悔とか独り言とか - 檜山正幸のキマイラ飼育記
Diary?::2009-01-24
「ラムダ計算、論理、圏」セミナー(第1回)の報告+次回の告知 - 檜山正幸のキマイラ飼育記
ラムダ計算とスノーグローブ現象:oto-oto-otoさんの疑問に答える - 檜山正幸のキマイラ飼育記
まだスノーグローブ:superstring04さんへのフォロー - 檜山正幸のキマイラ飼育記

スノーグローブ

  • 箱庭みたいなの
  • モデル化
モデル化
  • ホワイトボードに棒人間書いて「これは私です」という←モデル化
  • プログラミング…コンピュータの中に現実世界をモデル化

記号の解釈と使用法の多様性

同じ記号でもコンテクストによって意味合いが違う

+記号
  • 宿題の中の「2+3」→子供に「2と3を足し算しろ」と指示する
  • 電卓を叩く「2+3」→電卓に「2と3を足し算しろ」と指示する
=記号
  • 子供にとっての「2+3=」→(子供に)2と3を足し算しろと指示する
  • 2+3=5→2と3を足し算した結果と5は等しい
  • x=x+1→変数xの値に1を加算した結果を変数xに代入する

これらは全然違う

ラムダ計算

関数
(+ 2 3)

↑のコードを人間が実行するというのと、
↓のコードでevalがやる事は等価

(eval '(+ 2 3) )
3種類の箱

関数に対する立場の違い
b…数学の立場:本物の高階関数
c,d…計算科学/後学の立場:ノイマンゲーデルのコード化
e…論理(記号計算)の立場:人間が操作可能な記号的言語(だが、人間が操作しない事が多い)

数学の立場は模倣出来る

(c2(x))(y)=c'(c(x),y)

  • 関数は入力を捨てる
    • 入力を受ける→結果を返す→入力されたものは捨ててしまう
    • 状態を持たない(状態を持つのは状態マシン)

2番目の箱に

関数コードの実行エンジン
  • 関数コード(紙カード)≠関数(箱)
    • 関数コード:計算手順を記述したデータ。それ自身は計算を行わない。
    • cが返すのが関数コード、c'は関数

ラムダ

  • 大きなラムダ式は「関数を直接表現する、関数そのものの代理」
  • 大きなラムダ式と関数そのものが同一視される