<   2014年 10月 ( 5 )   > この月の画像一覧

水素化ホウ素ナトリウム

一昨日の日曜朝のTV番組をみていたら、水素エネルギーを水素化ホウ素ナトリウムに蓄える方法の研究を紹介していた。水素化ホウ素ナトリウムは比較的安定な粉状の物質で常温で保存ができ、爆発もしない。ところがこれに水を掛けると何もしないでも盛んに水素を発生する。また、水素を発生したあとの化合物も水素化することで永久的に再利用できるらしい。

この性質は燃料電池の開発会社も注目していたようでいろいろやってみたが実用化しなかったそうだ。それは、この粉を溶液の形で液体燃料として使用しようとしたためだ。溶液にすることで重量あたりのエネルギー発生量が不足したそうだ。

ところが、TVの記事では水素化ホウ素ナトリウムを粉末のままリアクターで水と反応させて水素を取り出す方式を紹介していた。水素を放出した化合物は連続的に遠心分離して除去するらしい。すでに電気自動車に車載して動かせる状態にまでなっているところを写していた。この方法だと車載する燃料の重量あたりのエネルギー密度も化石燃料に匹敵するらしい。

興味が湧いてきたので調べてみたら次のような文書がひっかかってきた。

水素エネルギー創造型燃料電池システムおよびユビキタス水素エネルギー供給システムの開発

これを読むとかなり実用化に近い感じだ。太陽光発電の電力を送電線の容量の関係で電力会社が買い取らないという事態が起きているが、太陽光発電の発電所で水素化ホウ素ナトリウムを製造して給電施設に運びそこで燃料電池を使って発電するという方法もとれるのではないだろうか。また、自然エネルギーによる発電量のばらつきの問題も電力を水素化ホウ素ナトリウムに変えて貯蔵することで解決する。

ホウ素はホウ砂として大量に存在しているので資源的にも問題ないし再利用もできる。思いもよらないところからエネルギー問題の解決法が見つかったのではないだろうか。

追記

水素化ホウ素ナトリウムの安価な製造法の研究も始まっているようだ。

ボロハイドライドの新しい製造法

太陽光発電とカップリングするには、太陽光発電の電気で水を電気分解してH2を取り出し、それをホウ砂やNaBO2と混ぜて過熱することでNaBH4を製造するということになるのだろうか。
[PR]
by tnomura9 | 2014-10-28 08:21 | 話のネタ | Comments(0)

モノイド対象

Wikipedia によると
モノイドとはひとつの二項演算と単位元をもつ代数的構造
である。ざっくりと言うと、集合 M に二項演算と単位元が定義されている場合、集合 M はモノイドになる。たとえば、自然数の集合 {1, 2, 3, ... } には積という二項演算があり、(2 * 3) * 4 = 2 * (3 * 4) のように結合性がある。また 1 * n = n = n * 1 なので、1という単位元をもっている。したがって自然数の集合は積という二項演算についてモノイドになる。

少し正確にモノイドを定義すると次のようになる。
集合 S とその上の二項演算 • : S × S → S が与えられたとき、組 (S, • ) が以下の条件を満たすならば、これを モノイド という。

結合律
S の任意の元 a, b, c に対して、(a • b) • c = a • (b • c)

単位元の存在
S の元 e が存在して、S の任意の元 a に対して e • a = a • e = a
二項演算の結果 a • b を a と b の積[* 1]と呼ぶ。手短に述べれば、モノイドとは単位元を持つ半群のことである。モノイドに各元の可逆性を課せば、群が得られる。逆に任意の群はモノイドである。

二項演算の記号は省略されることが多く、たとえば先ほどの公理に現れる等式は (ab)c = a(bc), ea = ae = a と書かれる。本項でも明示する理由がない限り二項演算の記号を省略する。

上の定義は集合を使って定義したので定義に集合の要素が使われている。圏論の external の立場では集合の中の要素を意識的に言及せず、射の関係で対象の構造を表す。圏論で、モノイドを定義すると次のようになる(マックレーンの『圏論の基礎』の P. 3 を引用)。
モノイド (monoid) (恒等元を持つ半群) の概念は圏論において中心的な役割を果たす。モノイド M は、集合 M に二つの関数μ : M × M -> M, η : 1 -> M が付随していて μ と η を使って書かれた次の二つの図式

                   1 × μ
M × M × M ----------> M × M
  |                                |
  | μ × 1                       | μ
  |                                |
  v               μ               v
M × M -----------------> M 

          η × 1                1 × η
1 × M ------> M × M <------ M × 1
  | λ                 | μ               | ρ
  |                   |                  |
  v                   v                  v 
  M ========= M ========= M

を可換にするようなものとして記述することができる。ここで 1 × μ の 1 は恒等関数 M -> M であり、1 × M の 1 は一点集合 1 = {0} である。一方 λ と ρは λ<0, x> = x, ρ = x で与えられる全単射 λ : 1 × X -> X, ρ: X × 1 -> X である。これらの図式が可換であるということは、次の合成が等しいということを意味する。

μ◦ (1 × μ) = μ ◦ (μ × 1), μ ◦ (η × 1) = λ, μ ◦ (1 × η) = ρ
集合 M の要素には言及せず、射の関係のみでモノイドを定義するとこのような図式 (diagram) になる。

上の図式で M × M は集合 M と M の直積集合である。つまり、集合 M の要素 x と y の対 の集合である。従って 1 × M は集合 {0} と M の直積集合つまり 0 と M の要素 x の対 <0,x> の集合だ。このようなものも圏論では集合 M の要素に言及する事なく射と射の関係で定義できる事は、このブログの過去記事「対象の積」でも紹介した。

また、1 × μ は射の積だ。1は M の恒等写像で 1 : M -> M だ。また、μ は M と M の直積集合 M × M から M への写像だから、μ : M × M -> M である。射 1 と 射 μの積は 1 と μ のペア <1, μ> で M と (M × M) の直積 M × (M × M) から M × M への射になる。すなわち 1 × μ : M × (M × M) -> M × M である。射の積の作り方の詳細はこの記事では述べないが、参考書やこのブログの過去記事を参照してほしい。

要するに圏論のモナドは集合の圏 Set の対象である集合で、Set の中で上の射の図式を満たすものであるということだ。したがって、M は Set の「モノイド対象」である。

M の要素で定義すれば簡単に定義できるものを、射のみで定義する圏論によるモノイドの定義はこのように非常に複雑になる。しかし、モノイドの定義を射のみで定義する利点は、上の図式を満たせば、対象 M が集合ではなくて、M の要素のようなものが考えられない場合でも圏論的なモノイドとして扱う事ができるという事だ。

たとえば圏 C の自己関手を対象とし、自己関手と自己関手の自然変換を射とする圏を考える。この圏の自己関手のひとつ T をとり、T の合成 T2 を T の直積に置き換え、 次の二つの自然変換 η: Ix ----> T, μ : T2 ----> Tを考えると図式は省略するが上で述べたモノイドと同じ図式を作る事ができる。したがって、自己関手 T は自己関手の圏における「モノイド対象」である。対象である自己関手 T には集合 M にみられるような集合の要素はないが、external の立場からは図式を満たしているのでこれもまたモノイド対象である。

Haskeller を悩ます IO モナドのモナドの正体は、Haskell のプログラムという圏の自己関手の圏の対象の一つである自己関手 IO というモノイド対象だったのだ。これが分かったと言っても IO モナドの使い方には直接には結びつかないが、「モナドとは一体何なのだ?」という疑問には答えることができる。

これが Haskell で有名な「モナドとは単なる自己関手の圏のモノイド対象だけど、何か問題でも?」というフィリップ・ワドラーの謎の言葉の意味だ。

追記

圏のモノイド対象については、このブログの過去記事「圏のモノイド対象」があるが、理解が足りないところがあったので書き直した。参照していただければ幸いだ。

追記2

「モノイドは対象が一つだけの圏である」という文章を見ることがあるが、これはモノイドを集合の圏の対象としてみるのではなく、モノイドを対象を一つだけしか含まない圏として考えて定義をする場合のことだ。この場合 M × M は対象の積ではなく圏 M と 圏 M の積として考え、μ や η は関手と考える。しかし、モナドを理解するためにはこの観点は必要ないようなので深入りはしないことにする。
[PR]
by tnomura9 | 2014-10-13 11:40 | 圏論 | Comments(0)

圏の作り方

圏を作るにはまず対象と射を決める。集合の圏 Set の場合対象は集合で射は集合 A から集合 B への写像 f だ。これを f : A -> B で表記する。A と B は集合で f は写像だが、これらを対象と射として扱うときには、その内部構造は隠蔽されてしまう。つまり、A や B の個々の要素を見ることはできないし、f はAのどの要素がBのどの要素に対応させるのかなどの、AやBや f の内部構造は見えなくなる。

f には domain (始域) と codomain (終域) がある。f : A -> B の場合 domain は対象 A で codomain は対象 B だ。domain A の全ての要素には f の値であるBの要素が対応している必要がある。これは f : A -> B, g : B -> C のとき、どんな f と g に対しても f と g の合成 g . f が存在しなければならないからだ。codomain の対象 B については f は全射でも単射でもある必要はない。つまり、対象 B の要素のなかに射 f の像でないものがあってもいいし、対象 B の同じ要素に対象 A の異なる要素が f によって対応していてもいい。f : A -> B のとき A = dom f, B = cod f と表記する。

射には合成を定義する。射 f と射 g について cod f = dom g のとき、すなわち f: A -> B, g: B -> C のときf と g の合成を定義する。集合の圏 Set の場合、射 f と 射 g の合成写像 f . g を射 f と射 g の合成射と考える。このとき写像の性質から、f : A -> B, g : B -> C, k : C -> D について、

k . (g . f) = (k . g) . f

という結合法則が成りたつ。

圏の場合全ての対象には恒等射という特別な射が定義される。集合の圏 Set の場合対象 A の恒等射は対象 A の各要素にその要素自身を対応させる恒等写像である。このとき、恒等射 1A : A -> A について、つぎのような単位元律が成立する。つまり f : E -> A, g : A -> B について、

f = 1A . f かつ g = g . 1A

である。1A が A の恒等写像として定義されている時上の等式が成り立つのは容易に分かる。

このように、集合を対象とし、集合から集合への写像を射とし、合成写像と恒等射をもち、射の合成について結合法則と単位元律を持つ圏 Set を作ることができた。圏を作るためのこれらの条件が揃えば、どのような数学的対象からも圏創りだして圏というものとしてひとくくりに論じることができるようになる。

たとえば、1個の集合 A も離散圏というタイプの圏である。このとき離散圏の対象は集合 A の要素であり、射は各要素への恒等写像 1a : a |-> a である。したがって、dom f = cod g となるような一組の射 f と g は対象自身への射以外は存在しないので異なる対象にわたる合成射は存在しない、しかし、各対象 a について合成射 1a . 1a は存在し、合成射の結合法則と単位元律をみたしているので、この離散圏もまた圏の条件を満たしている。

こうして、圏をつくることで、様々な数学的対象を圏というコンテナにパッケージして、それらの構造の共通点を調べることができるようになる。
[PR]
by tnomura9 | 2014-10-09 08:09 | 圏論 | Comments(0)

圏論とは何か

圏論について少し分かり始めてきたら、自分の過去記事の内容が気に入らなくなってきた。そこで、手を入れていたら操作ミスでひとつは記事が消失し、ひとつは記事の日付が変わってしまった。ブログの性質上過去記事に手をいれるのはやめた方がいいかもしれない。

圏とは何か

そこで、何となく分かり始めてきた圏論の意味をまとめてみる事にする。まず、圏論とは何かと一言で言うと、それは演算を持った有向グラフの性質を調べる学問という事だ。有向グラフというのは、対象とその対象の間の関係性を示す射という2つの要素から構成されるネットワークの固まりのことだ。そういうと、画面の上に丸が散らばっていてそれらがたくさんの一方向の矢印でつなげられている所を想像するかもしれないが、まさに、その通りのものだ。

対象と対象の間に張られる矢印は、ひとつだけでなくても良い。集合と集合の間の写像が幾とおりも考えられるように、同じ対象の対の間の射は複数存在する事ができるし、逆方向の射も考える事ができる。また、対象と対象の間には射が張られている場合もあるし、何の射も張られていないものがあるという状態が混在してもいい。

圏論で扱う有向グラフの便利なところは、この対象と射のネットワークの中に様々な数学的構造物を入れ込むことができるということだ。例えば、集合を対象とし集合と集合の間の写像を射とする集合の対象と写像の射のネットワークからなる有向グラフを考える事ができる。また、データタイプを対象とし関数を射とする、Haskell のプログラムも有向グラフになる。

圏とは、このような有向グラフに恒等射と射の合成という射の演算が定義されているものをいう。有向グラフだけでは自由すぎて数学的構造の記述をするには力不足だが、有向グラフに恒等射と射の合成が導入される事によって、いままで、集合などを使って記述されていた数学的構造の細部の性質について、かなり細かい所まで圏論の言葉で記述する事ができるようになる。また、圏論が語っているのはこのような演算のある有向グラフ(圏)の性質なので、圏の中に閉じ込められたどのような数学的構造の性質も共通に圏論の言葉で論じる事ができる。

上に述べた圏の演算は射の合成についての結合性と単位元律という2つの公理を満たす必要がある。結合性とは、f : a -> b, g : b -> c, h : c ->d という射があったとき次の射の合成に関する等式が常に成り立つ事である。

h ◦ (g ◦ f) = (h ◦ g) ◦ f

また、単位元律とは射 f : a -> b, g : b -> c があるとき、恒等射 1b との合成についてどんな f と g についても次の等式が成り立つことである。

1b ◦ f = f かつ g ◦ 1b = g

圏とはこのように、対象と射からなるネットワークで、恒等射と射の合成という演算を持ち、それらが結合性と単位元律という2つの公理を満たすものである。圏を定義する構造の制約が少ないので、様々な数学的構造物を圏という枠組みの中に納める事ができる。したがって、一見あまり関係のなさそうな数学的構造物どうしも圏論の中で統一的に論じる事ができる。

external の立場

このように圏論では数学的構造物を圏の対象と射の中に埋め込む事ができるが、さらに、埋め込まれた数学的対象の詳細は圏論の議論では完全に隠蔽されてしまう。例えば集合の圏では対象は集合で、射は写像だが、対象である集合の要素を取り出す方法は基本的にはない。例えば集合の恒等射像のように要素が特定できないと定義すらできないように見えるものも、任意の f : a -> b と g : b -> c について、

1b ◦ f = f かつ g ◦ 1b = g

となるような射 1b として定義される。ここには要素という概念は一切使われないが、それゆえに対象が集合でない場合でも恒等射を定義する事ができる。このように対象の内部構造に言及しない立場を external な立場であるという。

内部の詳細が見えないのは対象だけではない。射もその内部構造を窺うことができない。上の恒等射の定義を見れば分かるように、射の定義も他の射との関係性で定義されるので、その定義からは恒等射が集合の要素をそれ自身に対応させる写像だという見方をすることはできない。射の特性はその内部の計算ではなく、他の射との関係だけで定義されるからだ。対象だけでなく射もその内部構造が隠蔽されてしまうのだ。

このように数学的対象の詳細を圏の対象と射に隠蔽してしまう事によって、圏論ではその数学的対象の詳細に影響されずに圏となった数学的対象の構造に焦点を当てて論じる事ができるようになる。つまりその数学的構造の詳細は捨象され、その構造のみが圏というネットワークに抽象される。

可換

上に述べたように、数学的対象は圏として抽象化されることによって、その詳細は完全に隠蔽されるが、それだけでは単に詳細の隠蔽を行っただけだ。集合の写像の全射や単射のような写像の性質についての表現性がなければ単なる意味のない抽象化になってしまう。

そこで、集合に見られるような表現力を実現するために、圏論では可換 (commutative) という概念を用いる。

可換とは、出発点の対象 (domain) と終点の対象 (codomain) が同じで、経路の異なる2つの合成射が同じ射であるということだ。例えば f : a -> b, g : b -> c, k : a -> c という3つの射があるとき、a -> b -> c という経路の合成射 g ◦ f が a -> c の射 k と全く同じ振る舞いをするときにこの2つは「可換である」と言う事にする。つまり、

g ◦ f = k

だ。2つの射や合成射が可換であるということは、単に始点と終点の対象が同じという事だけでは不十分だ。その2つの射の振る舞いが全く一致しなくてはならない。つまり集合の圏を例にとると、2つの合成射について、始点である定義域が全く一致し、終点の集合への定義域の集合の要素の像が全く一致しなくてはならない。可換の条件はかなり厳しい。

この「可換」の概念が圏論にあることによって、圏は集合と同じような表現力を持つ事ができるようになる。たとえば集合の写像の単射に相当するエピ射はつぎのように定義される。
射 h : a -> b がエピ (epi) であるとは、任意の2つの射 g1, g2 : b -> c について等式 g1 ◦ h = g2 ◦ h から g1 = g2 が従うことである。
このように演算の定義された有向グラフである圏に「可換」の概念をとりいれることで、圏は集合と写像の場合と同じような豊かな表現力を獲得することになる。

圏論の目的は数学的対象の詳細を捨象して、圏として抽象化する事によって様々な数学的対象の構造の共通点に光をあてることである。このとき、圏の表現力は射の「可換」という概念によって集合と写像の場合に匹敵するものになる。

プログラマの立場からは数学的対象とはあまり縁がない。しかし、Haskell のプログラムが圏であること、圏がオプジェクと指向プログラムにも見られるプログラムの詳細の隠蔽であることを考えると、圏論の考え方がプログラミングにも導入できるのではないかと思える。実際 IO モナドなどは圏論のモナドの考え方を導入している。プログラミングをするのに圏論を知らないといけないと考えるとちょっと引いてしまうが、プログラマの立場から圏論を見ることができるようになれば、圏論という視点からプログラムを設計することができるようになるかもしれない。
[PR]
by tnomura9 | 2014-10-02 00:50 | 圏論 | Comments(0)

圏論は面白い(3) メタ圏

モナドへの近道・Haskell からの寄道』へ戻ろう。『基礎知識の準備』セクションの定義2はメタ圏の定義だ。メタ圏とは、
メタ圏 (metacategory) は演算が定義されたメタグラフである.
ということだ。前回の記事で述べたメタグラフに演算が持ち込まれたものだ。

したがって、メタ圏はメタグラフの性質を全部持ち、つまり、対象や射や dom や cod や ソースやターゲットなどの性質をすべて持ち、さらにそれに演算という新しい性質を持つことになる。

それでは、「演算」とは何だろうか。Wikipediaでは、
n 項算法(エヌこうさんぽう)とは、最も広義には、集合 A の直積集合 An の部分集合 D から A への写像 f のことをいい、D をこの算法の定義域という。
という定義になっている。

つまり、Aという集合の要素のタブル(a1, a2, ... , an) から同じ集合Aの要素 ah への写像を n 項演算という。ただし、後でみるように圏論では二項演算だけを考えるといいようだ。つまり、集合Aの要素のペア (a1, a2) から集合 A の要素 a3 への写像 (a1, a2) -> a3 を考えるといいということだ。集合Aの要素のペアから集合Aの要素への写像は (a1, a2) -> a3 だけではないから、演算 op はそれらが集まったものである。op の型を Haskell 風に記述すると、op :: A a => (a, a) -> a となる。

それではメタ圏の演算とはどんなものだろうか。上の定義を見るかぎりは、演算の引き数のタプルの要素と演算によって写像される像は同じ集合の要素だった。しかし、メタグラフは対象と射という性格の異なるものから構成されているので同じ集合の要素として扱うわけにはいかない。

実際、メタグラフにおける演算には次のように、対象に定義される恒等射と、射と射の合成という2種類の演算がある。
各対象には演算 id が定義されており,これは対象 a を受け取りその対象をソースとし,かつターゲットとするような恒等射 (identity arrow)ida = 1a を返す関数である.射と射の間には合成演算 ◦ が定義されており,射の対⟨f, g⟩ に対して合成 f ◦ g は dom(f ◦ g) = domf, cod(f ◦ g) = codg を満たす.

また、メタ圏の演算が満たすべき条件として次の2つが上げてある。
結合律 (associative low) 次のような任意の 3 つの射 a --(f)--> b --(g)--> c --(k)--> d が与えられたとき,次の等式が常に成り立つ
k ◦ (g ◦ f) = (k ◦ g) ◦ f.
単位元律 (unit low) 任意の射 a --(f)--> b と b --(g)--> c について恒等射 1b との合成は次を与える
1b ◦ f = f かつ, g ◦ 1b = g.

ここで、注意しておかなければいけないのは、射の演算のイメージだ。射というと集合の写像を思い浮かべるので射の合成を写像の合成として捉えがちだが、射の演算は必ずしも写像の合成である必要はない。たとえば f : a -> [a] という射と g: b -> [2b] という射の演算 op を op f g -> (c -> [f(c) + g(c)]) で定義しよう。この op は関数の合成を使って定義したものではないが、射の演算になっている。 射の合成がかならずしも写像の合成にならなくてもいいという発想はKleisli 圏を理解するのに重要になる。

ghci で関数の合成にならない射の演算を定義してみた。

Prelude> let f x = [x]
Prelude> let g x = [2 * x]
Prelude> let h x = [x^2]
Prelude> let op f g x = [head $ f x + head $ g x]
Prelude> (g `op` h) 3
[15]
Prelude> (f `op` g) 3
[9]
Prelude> (f `op` h) 3
[12]
[PR]
by tnomura9 | 2014-10-01 22:48 | 圏論 | Comments(0)