あおむけマカロニ
えらく時間がたってしまったが、1月24日、「技術者/プログラマのためのラムダ計算、論理、圏」セミナーに行ってきた。
で、自分なりにわかったこと、わからなかったことをメモしてみる。
ウソ、間違いがあるはずなので、ご指摘いただけると大変ありがたいです。
関数
- 関数
- ブラックボックス、抽象的な「存在」
- ラムダ式
- 関数の実装(の詳細)=ソースコード、具体的な「存在」
- E
- ラムダ式のコンパイラ? インタプリタ? ラムダ式(と実引数)を放り込んだら、抽象的な存在であるところの関数と同じように働きだすもの。
というイメージを持った。
f^という書きかた
f(x, y) <-> E(f^(x), y)
という対応で、f^の定義とする。実にいい加減な理解だ。<->は上に書いた「同じように働きだす」の意味で。やかましく言わないならイコールと思っていいのかもしれない。
これを見ると、f^はfと第一引数をまとめてコンパイルしたようなものに見える。f^をfのコード化という。
第一引数だけじゃなくて、2個まとめてとか、1つも取らずにとかでコード化するといったことも考えられて、その場合は当然、Eが違ったものになる。
Eが1種類のみなら、f^がデータとしての関数として一意になりそう。ちょっと気持ちいい。
大きなラムダ式
インフォーマルなラムダ。
自由変数なし、入れ子原則禁止。
<x, y|x + y>
こんな感じに書く。
アルファ規則 <x|f(x)> = <y|f(y)> ベータ規則 <x|f(x)>a = f(a) イータ規則 <x|f(x)> = f
ベータ規則って、計算の定義だよなぁ。この日のセミナーでは、関数はやるけど計算はやらないという話だったけどちょっと逸脱。
で、イータ規則。意味的には「引数xを取ってf(x)を返す関数はf」で、あたりまえのことを言っている。
スノーグローブ
恥ずかしながら、あまりわからなかったです。
小さいラムダは機械への命令で、大きいラムダは人間への命令であるといった、誰(何)が実行するのかという点を今まであまり意識したことがなかったあたりが分からない原因かな?
以下、思ったけどまとまらないのを適当に。
- スノーグローブ現象は計算機をからめて語られていたけど、純粋数学的にもでも起こるようなことなのか。
- 型
- ラムダ計算というものを考える動機。数学でも必要になってくるものなのか。
- 関数の存在。f(x): xが有理数なら1、無理数なら0。といったものはラムダであらわせなさそう。そういうものは関数として存在してるといっていいか。直感主義?
ラムダが関数のデータ化という見方や、データとしての関数と実行エンジンの対で考えるというのは新鮮だった。参加してよかった。
とっ散らかったメモだけど、参加した証拠として書いてみた。
今回はあまり絵も書けなかったし、自然演繹とデカルト閉圏の話も興味あるので次があればまた行きたいです。
id:m-hiyamaさん、ありがとうございました。