はじめての圏論 - しりとりの圏

お久しぶりデス。

わかりやすかったので、自分なりにまとめてみる。

はじめての圏論 その第1歩:しりとりの圏 - 檜山正幸のキマイラ飼育記

チュートリアルに従い、しりとりの圏について考える事にする。

とりあえずしりとりの圏の定義

集合関係

対象

ひらがな文字一文字「あ」を対象とする。

対象の集合

ひらがな文字全体の集合をH={あ,ぁ,い,ぃ,う,ぅ...ん,ー}とする。
要するにHは型?

ひらがな文字列"りんご"を射とする。(ダブルクオートで囲んだものを文字列とし、空文字列""は含まない)

射の集合

ひらがな文字列全体の集合をHStr={"あ","あいうえお","りんご","ばなな","みかん"...}とする。
いっぱいある。

演算子

演算に使うものの定義

域(dom)

文字列sの最初の文字を取り出す first(s) = x : HStr -> H

例 : first("りんご") = り (文字列 -> ひらがな文字)

余域(cod)

文字列の最後の文字を取り出す last(s) = x : HStr -> H

例 : last("りんご") = ご

恒等射(id)

1文字なら、文字列に変換できる。unit_x = "x" (H -> HStr)

例 : unit_あ = "あ"

逆もあるのかな。

結合(合成,comp)

;でしりとり結合する。s;t = u (HStr, HStr -> HStr)

例 : "ぶた" ; "たぬき" = "ぶたぬき"

しりとりの結合なので結合出来ないものもあるっぽいが気にしないでおこう。

結合演算

色々計算してみよう。

first,last

first(unit_x) = last(unit_x) = x
例 : first(unit_あ) = last(unit_あ) = あ


first(s;t) = first(s), last(s;t) = last(t)
例1 : first("りんご";"ごりら") = first("りんご")
例2 : last("りんご";"ごりら") = first("ごりら")

結合法則

(s;t);u = s;(t;u)
例 : ("りんご";"ごりら");"らっぱ" = "りんご";("ごりら";"らっぱ")


x = first(s), y = last(s)ならば、unit_x;s = s, s;unit_y = s
例 : unit_り;"りんご" = "りんご"

対象の集合,射の集合,dom,cod,id,compからなる系を圏という。らしい。

まとめ

難しい言葉が色々並んでるけど、具体例で説明されるとなんとなくわかった気分になれる。
色々よくわかんないけど、圏論の最初の一歩は踏み出すことができた。

マインドマップを書き出してみた

Web上でマインドマップが書けるツール思考マップ作成 Web アプリケーション - MindMeister使ってみた。

僕の頭の中ってこんなにフクザツだったんだと実感した。

使い方はチュートリアルの動画見ればわかると思う。

しかし・・・

無料版では3つまでしかマインドマップが使えない為、1つに全てを集約したい。


問題はどのようにルートノードを選択すれば良いのか。

なぜ生きているのか。なぜ仕事をするのか。なぜ・・・

いきなり重いテーマっぽいんだけど、あっさり答えが出る。

仕事ができる社員は知っている! 「誉められる喜び」と「小さな努力の積み重ね」の相乗効果より。

「なぜ仕事をするのか?」

「なぜ仕事をするの?」→「仕事をがんばらないと、給料が上がらないから」で終わるのではなく、「なぜ給料が上がらないといけないの?」→「給料が上がらないと、子どもの教育費も出せないから」→「なぜ子どもの教育費が出せないといけないの?」……といったように、「なぜ?」を繰り返してください。

「なぜ?」を突き詰めていきながら、最後にもしも「だって、幸せになりたいから」という答えが出たら、もはやそれ以上の「なぜ」は不可能になる

他にも答えはあるんだろうけど、「自分の幸せの為に生きてんだ」ということにしておく。

ということで、「幸せな人生」をルートノードにする。

幸せな人生を分類する

これも良い答えがある。

ハピラボ - 幸せ人生研究所

ハピラボでは、幸せな人生を送るための要素が、「お金」、「仕事」、「勉強」、「プライベート」、「健康」、「心」、の6つの柱から構成されていると考えています。

結構いい感じで分類できる。


今日読んだ本さえもマインドマップに付け足す事が可能となった。

またまた細かく分類していく

ハピラボベースで使いやすいように改良してけばいいと思う。

更に細かく

ここからオリジナル。

完成?

もうちょっと頑張って書き出してみます。

まとめ

  • マインドマイスターは使いやすい。
  • 僕の頭の中では勉強が肥大化している。
  • バランスの良い人生を!
  • 何処まで細かく出来るのかは知らないw

あ、

テンプレート作っておきました。
幸せな人生のためのテンプレート - MindMeister 思考マップ

追記

肥大化してきたので、PersonalBrainに移行した。

サマーウォーズ

突然2時間くらい暇になったので、映画見てきた。


最近の映画の事がよくわからないので、適当に「時をかける少女」の細田監督作品と書いてあった「サマーウォーズ」を選んでみたのだが、10回くらい泣いてしまった。こんなに泣いた映画は久しぶりかもしれない。


正確には覚えて無いけど、電車の中での夏樹先輩とのやり取りでやられました。

健二「先輩の誕生日っていつですか?」
夏樹「7月19日。平成四年の・・・」
健二「日曜日ですね。」
夏樹「すごーい。曜日を全部暗記してるの?」
健二「いえ・・・暗記はしてませんが、Zellerの公式で解けます。mod使って・・・するんです。合ってますか?」
夏樹「私の誕生日が日曜かどうかは覚えてないけど、なんだか凄いね・・・」

いやぁ、このやり取りはたまんないっす。


そして、見事な世界設定が物語を引き立てる。ネット上の仮想世界OZ。クラウド電子政府、同時翻訳SNS、3Dアバター人工無能、ネットゲーム、PvP・・・現在の技術でもちょっと頑張っちゃえば実装出来ちゃうよねって位リアルに練りこまれてる。


ストーリーは王道中の王道をただひたすら追い続けてるだけなのに、見事な王道の組合せで感動の渦に巻き込まれる。「何度涙させれば気が済むんだ!!」ってくらい泣かせて頂きました。


仮想世界でしか出来ない事もあり、現実世界でしか出来ない事もある。人と人との繋がり、家族との繋がり、仮想世界と現実世界の人との繋がり。セキュリティ。いろんな意味で考えさせられる良い作品に仕上がってます。



映画の予告。

公式。

映画「サマーウォーズ」公式サイト

ちとネタバレ。

サマーウォーズ:曜日の求め方とか2056桁の暗号とかの解説 - A Successful Failure

公開は随分前だったのね・・・ロングランしてて良かったぁ〜


暇な2時間が、素晴らしい2時間となった。仮想世界OZはもうすぐそこなのかも知れない。

松下幸之助

ふらっと本屋に寄って数ページ読んで、そのままレジに直行してしまった。

道をひらく

道をひらく

一代で世界に登りつめる人の考え方ってのはやっぱり凄い。「経営の神」と呼ばれる松下幸之助だけあって本書は正に神レベル。人生のバイブルと呼べる名著と出逢った。


何と言っても一言一言が非常に美しいのだ。


自分には自分に与えられた道がある。天与の尊い道がある。どんな道かは知らないが、ほかの人には歩めない。自分だけしか歩めない、二度と歩めぬかけがえのないこの道。広い時もある。せまい時もある。のぼりもあればくだりもある。坦々とした時もあれば、かきわけかきわけ汗することもある。

・・・

ちょっと宗教じみた所もあり、言い古されたような事ばかりなのだが、シンプルで分かりやすい。そしてなにより美しい。何年か経ったら読み返してみようと思う。


名著との出会いに感謝したい。

イントロソート

ちとメモ

イントロソート - Wikipedia

イントロソート(英: introsort)は、David Musser が1997年に設計したソートアルゴリズムである。最初はクイックソートを行い、再帰のレベルがソートされた要素数(の対数)を超えるとヒープソートに切り替える。最悪でも O(n log n) であり、同時に典型的なデータに対するソートではクイックソートに匹敵する性能を示す。

Shiro:log:2008前半の2008/06/06らへんより。

Gaucheの組み込みの(Cで実装された)ソートはデフォルトではQuick Sortで始めて、再帰の深さが ceiling(2*log(N)) を越えた時にHeap Sortにスイッチするようにしてる。この技は(もう覚えてないけど、コメントによれば)TAOCPに出ていたようだ。 Quick SortもHeap Sortもin-placeでできるので、既にQuick Sortでソート済みの連続領域がいくつかある状態でそれぞれの領域にそのままHeap Sortを適用できるのは便利。

レダ

SICPを読む(110) 3.3.5 制約の拡散

熱い。熱すぎる。もっと頭を熱くするにはSICPがいいよね。


今回は制約システム(プログラミング)を利用して方程式を解けるようにするらしい。

ところで制約システム(プログラミング)ってなんぞ?

ルールを記述して、解くのはコンピュータに任せよう。

うは。スゲー。


用語のまとめ

  • 一方向計算
    • 前もって引数に演算を実行し望みの出力を生じる
  • 方程式
    • 速さ = 距離 / 時間 、2つの値が決まればもう一方も決まる。
  • 基本制約
    • (adder a b c)でa + b = cという制約を表す。
    • (constant 3.14 x)で、xの値は3.14という制約を表す。
  • コネクタ
    • 一つか複数の基本制約を保持するオブジェクト。
    • これらを組み合わせて制約ネットワークを構成する。

そうだJavaScriptで書こう

SchemeOOPライクに書くのは面倒杉なので、JavaScriptで書こうと思う。

が・・・JavaScriptの継承がわからないので、JavaScriptの継承をお勉強しながら進める事にする。


続く・・・が・・・ちと忙しいっす。

JavaScriptで多値

JavaScriptを使って継続渡し形式と多値の復習。


1と2を返して、後で足し算する。

alert(function (cont) { return cont(1, 2); }(function(a, b) { return a + b; })); // 3

実際には、足し算をするという継続を渡して、ほにゃららして、最後に継続を実行する。

つまり、後でやって欲しい事を関数で投げればいい!!


alertも継続渡し形式で。

(function (cont_outer){
    cont_outer(function (cont) { return cont(1, 2); }(function(a, b) { return a + b; }));
 }(function(x) { alert(x); }));
// 3 

復習完了。