はてなキーワード: λ計算とは
デカルト閉圏というものがある。これは型付きλ計算や直観主義論理のモデルとなる圏だけども、その特徴は
である。これらをプログラムに対応させると次のようになるだろう。
終対象 | unit |
直積 | 直積型 |
冪 | 関数の型 |
- | 双対概念 | プログラムへの対応 |
終対象 | 始対象 | 終了しない計算(例外) |
直積 | 直和 | 判別共用体 |
冪 | 余冪 | ??? |
余冪に対応するものがよく分からん。余冪の定義からいうと余冪を X**Y と表現することにすれば
Hom(X**Y, Z)≅Hom(X, Y⊕Z)
が成立すればよい。だから、
IntOrString = IntValue of int | StringValue of string let f(x:int) : IntOrString = if x >= 2 then IntValue(1) else StringValue("1")
let f'(xy:X**Y) : string = "1"
のように書き換えることができればそれは余冪と言えると思えるのだが、そのような書き換えは可能なのか?
とりあえずこの場合に限れば、
exception Y of int type XToYCopower(x:int) = let x' = if x >= 2 then raise(Y(1)) else x let f'(xy:XToYCopower) = "1"
みたいにして、呼び出すときは、
let mutable z: IntOrString = IntValue(0) try z <- StringValue(f'(XToYCopower(0))) with | Y(y) -> z <- IntValue(y)
とすると、書き換えができているような気もするし、やはり何か違う気もする。
よく分からんなぁ…。
すまん、たぶん誤爆した。俺がもの申したかったのは
プラスで物理や生物や化学やなどが必要になってくるけど,基本的に数学科並みに数学が必要。情報科学って一応応用数学だからね。
を書いた人であって、君じゃないんだ。確かに別人であるという区別はできてなかったんだけど。申し訳ない。
でもまあ、ついでだからお節介を言っておこうか。
学部のうちは、「この知識は、本当に将来使うのか?」ということに拘って知識を取捨選別してしまいました。
授業もそうやって選んでいたわけですし。当時は、なんとなく、「将来、時間があって必要なときに覚えればいい」みたいに思っていたのです。
実際に修士になってみて、激しく後悔しました。本当に専門以外のことを勉強する余裕がない。数学は、演習問題ぐらい解けるようにならないと、理解したことにはならないし、自分の専門にも応用できなくて勉強した甲斐がなくなってしまうのに、演習問題を解く時間がない。
学部のうちは、専門以外の勉強をちゃんとやっておくべきだったのだなぁ、と思っています。
いや、それはそんなもんだと思う。たいていの人は。何でもかんでもきちんと理解している人なんていないし、学部時代に詰め込み勉強していても結局本当に大事なところは見えていなくて、後からもう一度復習するハメになったりするもの。やっぱり、本当に自分が切実な必要性を感じて勉強したことしか身に付かない。
大事なことは、それを取り戻していこうという努力を少しずつ積み重ねることだと思う。このあと博士にいくのか就職するのか知らないけど、研究者なり技術者なりとしてやっていくなら、才能なんかよりも地道な努力を少しずつでも続けていくことが結局は一番大事なんだと思うよ。
あともう一つ横から。
そうですよね・・・職人芸ですよね。それは分かっています。ですから、数値計算のプログラムを自分で書く気はしません。
linpackなどで既存のルーチン探して、コピペするだけです。そっちの方が早いし確実ですし、バグがない。
だから、全然数学をやった気にならないのです。
実際、LINPACKだのLAPACKだのに不必要に喧嘩を売ることはお勧めできない。あの辺は専門家の知識の集積だと思うので、素人が戦いを挑むのは無謀だと思う。
重要なのは、自分が計算量を節約するためのアルゴリズムを設計する必要が出てきたときのために、数値解析屋さんの「感覚」を学んでおくことじゃないだろうか。
だから、こういう勉強は必ずしも同時並行じゃなくていいと思うんだ。「理解していないものは使ってはいけない」とか言い出すと、電子回路とλ計算がわかってない奴はコンピュータ使うなってことになりかねないし。知識の裾野を拡げつつ、専門性は専門性で深めていくということじゃないかな。