どうも、佐野です。
昨日「第2回 プログラマのための数学勉強会」が開催されました。今回も多くの方にご参加頂き、数学愛ほとばしるセッションの数々をお送りできて嬉しく思っております。各セッションを動画・資料と共に、簡単に内容のご紹介をさせて頂きます。
1. 「プログラマのための線形代数再入門 2」 - 佐野岳人
[資料]
線形代数再入門の続編として行列式・逆行列について発表しました。高校や大学で行列式を習うときは低次の場合の計算法だけか、あるいは置換を使ったガチな定義を習うかのどちらかと思うのですが、「そもそもこれは何なのか」をプログラマが納得できるように、普段見慣れているであろう「要件・仕様・実装」のフォーマットでその意味と計算法について解説することを試みました。
数学科卒というと計算が得意とか暗算が速いとか思われがちですが、僕は自分でも悲しくなるほど計算が遅くよく間違います。掃き出し法による逆行列計算は跳び箱と同じぐらい苦手でした。幸い今はコンピュータがあるので、学習の重点は人間の計算の速度を上げることよりも原理を正しく理解することに置いた方がいいんじゃないか、という僕なりの提案も込めてあります。
次回は線形代数シリーズのラストとして「基底変換、固有値、そしてその先」を発表しようと思います。あまり楽しくない地道な基礎固めの先で「スカッ!」と応用範囲が広がるところに、この分野の一つの感動があると思います。
2. 「時計の世界の整数論」 - 辻順平
[資料]
日曜数学者 id:tsujimotter さんの発表です。「数」は 1, 2, 3, ... と真っ直ぐ無限に伸びていくものだけではありません。有限個の数だけからなる整数の剰余類環とその法則を「時計の世界の数」として分かりやすく親しみやすく解説してくれました。
参加者に時計の数の演算表を配り、みんなで法則を見つけてみようというスタイルも楽しかったです。例えばフェルマーの小定理 は公式だけ覚えようとすると「肩に乗ってるのが だっけ だっけ…」とあやふやになりますが、自分で表を眺めてみて「表の右側が全部 」と気づいた人はもう間違うこともないでしょう。
発表後の質疑応答で想定外の法則が見つけ出され、その場で証明されるという素敵なハプニングもあり、参加型ならではの面白さを体験することができました。
3. 「フーリエ変換と画像圧縮」 - 武田祐一
[資料]
iOS アプリ開発者であり講師もされている武田さんの発表です。今や誰もが当たり前のものとして使っている JPEG 画像ですが、これはどうしてファイルサイズが小さく納まるんでしょうか?もし画像の保存形式がピクセルごとの色情報を保持する BMP しかなかったら、僕たちがスマホやデジカメに収められる写真の数は 1/5 以下になってしまいます。
周期関数は正弦波の重ね合わせで書けるという「フーリエの定理」を数式とグラフで解説しながら、フーリエ変換・離散フーリエ変換・2次元フーリエ変換と話を進め、最後に画像を2次元の波の重ね合わせに分解して、圧縮のために情報を捨てる仕組みを解説してくれました。
波の重ね合わせで画像が復元されると自然に拍手が。理屈は分かってもやはり不思議ですよね…!
4. 「証明プログラミング入門2」 - 門脇香子
[資料, サンプルコード]
出ました、お茶の水大学修士1年、門脇さんのディープな発表です。門脇さんは「情報科学若手の会 冬の陣2015」で証明プログラミングの発表をしていて、発表時間が短かったからか僕は全く分からなかったので今回30分の発表をお願いしたのですが、やはり全くわかりませんでした(笑)
僕の理解では Agda では実装が証明に対応していて、コンパイルエラーが吐かれなければその証明な無謬である、ということなのかなと(間違っていたら殴ってください)。「依存型」を理解することが Agda の文法を読めるようになるキーなんだろうなと思います。
お茶の水女子大学の情報科では大学院で Agda を学ぶそうです。本人曰く「型の感覚はある日突然悟れるもの」だそうですが、逆に誰にでもアクセスできるものを通して悟りを経験できるのはありがたいとも言えます。分かりやすいというのは大事なことですが、全くわからない(けど何故か面白い)というのもまた崇高なものだと感じました。
5. 「エニグマ暗号とはなんだったのか」 - 堀川隆弘
[資料]
「いま日本で最もエニグマに詳しい人」InfoLens CTO の堀川さんによる発表です。現在上映中の映画「イミテーション・ゲーム」の主題でもあるエニグマ暗号機、それがどういう作りになっていて数学者たちはいかにそれを解読したかを解説する完全にガチな発表です。
堀川さんはご自身でもアラン・チューリングの論文を読んで研究をしたそうです。数学的に見れば暗号機はアルファベット26文字の置換の組み合わせで、シラミつぶしにやれば150兆ものパターンを試さなければいけないものを対称性や巡回性に注目することで人間に扱える個数に絞り込むことができる、というのがその主旨のようです。
僕はこの日に向けてちゃんと予習(別名、映画鑑賞)をしてきました。映画ではアラン・チューリングが独力でエニグマを解読したようなストーリーになっていましたが、実際にはその前にポーランド人数学者レイフェスキが実物の暗号機がない中で傍受した暗号からエニグマ機の仕組みをロジカルに解明していた、というのはとても興味深い話でした。これは3時間コースで聞きたかったですね。
「プログラマのための」…?
今回もだいぶガチな内容揃いとなり、後半頭がショートしてしまった人も多いのではないかと思います。終了後に知り合いから冗談半分に「プログラマのための、ではないですよね」と言われたのですが、皆さんはどのように感じられたでしょうか。
「プログラマのための」というと「プログラミングに使える」と捉えられるかとは思うのですが、僕は直接使えるものだけが役に立つという訳ではないと思います。
ある問題を別の角度から見てみる、今までこうだと思っていたものが丸ごと逆転してしまう、難しいことを集中して考える、全く分からないものに出くわして愕然とする、積年のモヤモヤが一瞬で晴れる、簡単な規則が重なり合って複雑な現象となって現れる、複雑さの中から美しい性質が引き出される…数学によって得られるこういった経験や知恵はプログラミングに限らず生きる上で役に立つものですし、特にプログラマは日々の鍛錬によってそれを受容するメソッドが備わっていることが多いんじゃないかと思います。
そういう訳で今後も役に立つ数学はもちろん、そうでない(ように感じられる)数学の話も聞いて楽しめるイベントにしたいなと思っています。
アンケートにご協力下さい!
ご参加された方、動画や資料を後からご覧になった方はご感想をお寄せ下さい。また、発表者あってのイベントなので良いネタをお持ちの方は是非登壇をご検討下さい!
それでは、また次回(5月末を予定)お会いしましょう!
ツイートまとめ:
Facebookページ: