圏論復習その2
前回圏の定義を与えました。圏論のモチベーションには圏の比較があったので、今日は圏の間の射である関手を定義します。
1.2 関手
関手の定義は非常に簡潔です:
定義:圏の間の関手(functor)とは
- 対象を対象に移し、
- の射をの射に移す
もので、次の関手性(functoriality)を満たすものを言う:
- 恒等射は恒等射に移す()
- の合成可能な射の組に対して
圏とは乱暴に言えば対象と射の集まりなので、要は関手とは圏のデータを圏のデータに移すものです。(ただし関手の像だけ見ても一般には圏になりません。簡単な反例が存在します。)
例1:簡単な例に忘却関手(forgetful functor)と言うのがあります。これはのような集合の上の構造を忘れる関手のことで、関手性を満たすことは明らかです。
例2:上の例は当たり前すぎて何かの役に立つようには一見見えません。もう少し面白い例は基本群(fundamental group)です。位相幾何の話になるので厳密な定義はここでは避けますが、位相空間(topological space)の基本群とはの一点を取ったときにを起点とするループのうち連続変形させても一致することがないようなものがいくつあるかを表します。
例えば
- 中身の詰まった円板の基本群はです(どんなループも縮めれば1点にできる)。
- 円周の基本群は整数環です(円周に紐を何回巻きつけたかは連続変形で保たれる)。
基本群の像は群構造を持っていて尚且つ関手的なことが厳密に証明出来るのですが、この例の面白いところはたったこれだけの事実からかなり非自明な定理が導き出せる点にあります:
定理(ブラウアーの不動点定理):円板を再び円板に移すような任意の連続関数は必ず不動点を持つ。すなわちあるが存在して.
証明:不動点を持たない連続関数が存在したと仮定する。すると円板上の任意の点に対してなので、始点でを通る半直線が常に定義できる。この半直線と円周との交点をとしよう。が円周上の点であればなので、次の合成射は恒等射になる:
ここにの関手性を用いると、以下の合成射も恒等射である:
しかし、なので、そんな合成射が存在するはずない。(証明終)
位相幾何学や代数幾何学ではこの手の関手性を用いた議論は頻繁にする印象です。関手性は定義自体非常にシンプルなのに一気に数学的議論を飛躍させてくれる点が面白いですね。
次回は関手の射である自然変換を定義します。これで圏論の最主要人物たちは全て出揃います。
圏論復習その1
圏論まとめ作ると宣言してから1週間経ってしまった。。LaTeX記法をどうやってはてなブログで使えるか調べてたら億劫になって放置状態になってました。今日こそ書きますが、初めての数式込みの投稿なので内容は薄めです。(あとついでにマークダウン記法にも挑戦)
1.1 圏の定義、反圏
まずそもそもの圏論の意義ですが、思いつくのは以下の2つです:
1. 異なる数学的対象の同一視を厳密に行う
1つ目は本にもある内容ですが、数学では異なる2つの対象が似た挙動を示すことが多くあります。例えばベクトル空間の同型を例にとると、とはの軸と軸で別物ですが1次元のベクトル空間としては全く同じ挙動を示します。
上の例は「ベクトル空間内での」同一視ですが、圏論は「数学的対象としての」同一視を行います。ベクトル空間という数学的対象が集合という数学的対象と同じものかどうか、という具合で同一視するレベルが一段上がっている訳です。
特に未知の数学的対象のなす圏が実はベクトル空間の圏と同型でした、とわかったりすると基底の存在やジョルダン標準形の存在など一気にわかることが増えて嬉しい訳ですね。
2. 脳筋で数学的操作ができる
2つ目は、上述のことから圏論は個別の数学的実態には依存しないので一般論で結構な程度数学的操作ができてしまいます。いちいち具体的に集合の元を取ったりしなくて良いので複雑な議論を一気に吹っ飛ばせるメリットがあります。
以上のお気持ちを述べた上で圏の定義が以下になります:
定義:圏(category)とは
- 対象(object)および
- 射(morphism)
の集まりであって次を満たすものをいう:
- 各射はdomainおよびcodomainという対象をもち、のように表される
- 各対象は恒等射(identity)を持つ
- 射に対して
- fのcodomainとgのdomainが一致している今のような状況では合成射が存在する
- 恒等射との合成は何も変化しない:
- 射の合成は推移的:
例として集合の圏やベクトル空間の圏がありますが、他にも自身を次のようにして順序集合の圏と見ることができます:
- 対象は実数
- 射は実数に対してならの射が存在する
また、圏に対して射の向きを全て反対にした反圏(opposite category)も定義できます。つまり圏の射に対して反圏の射はと定めます。 なんでこんな概念をわざわざ導入するかは後々わかってきます。端的には圏論の命題を1つ証明するとその双対的な命題も同時に証明できてしまうのが嬉しいのですが、具体例を見ないと理解できないでしょう。(自分も最初理解に困った)
次回は圏の間の射である関手や、関手の間の射である自然変換を定義します。おしまい!
Category theory in context 完読!!
コロコロナで世間は未だ外出自粛令が出ております。
今日は特に雨なのでお家でタスクを粛々とこなすのであります。。。
そして!とうとう!
読み終わりましたーーー!!!
実は2月に修論出してから、ずっと積ん読状態だった圏論本を読んでたんです。
(数学科出てるのに圏論ちゃんと勉強したことないのパチモン感ある気がしたので。。。)
就職までの2、3月中に読み切る予定でしたが後半の章で(案の定)スピードが落ちてしまい半月オーバーでのゴールとなります。
読んでた本はこちら:
Category Theory in Context (Aurora: Dover Modern Math Originals)
- 作者:Riehl, Emily
- 発売日: 2016/11/16
- メディア: ペーパーバック
Twitterで京大数理の博士(ポスドク?)の方が大絶賛していたので買っちゃいました。著者は新進気鋭の若手女性研究者ですね、homotopy categoryの分野でバンバン結果出してる俗に言う「強い人」です。
確かに割とするする頭に内容が入ってきたので、MacLaneの「圏論の基礎」より確実に読みやすいのは明らか(この本ですね):
(原著の題名が「Category theory for the working mathematician」なので全く基礎レベルではない点に注意)
折角ブログを始めたので、明日から各章ごとにざっと内容のおさらいを書き出すことにしてみます。自分のアウトプットが主目的ですが、なるべく他の人にも概略が伝わるよう読める説明を書いてみます。なんだかいい練習になりそうだ。
Typical DP Contest H.ナップサック
昨日ABC161がありましたが、まあ酷くやらかしました笑
最近Typical DP Contest(以下TDC)を解き続けているせいで、D問題を桁DP&決め打ち二分探索の問題と思い込んでズブズブと沼にはまっていきました。。。
こういう時に引き返すのが苦手なの、どうにかしたいです。
表題の通りTDCのH問題を解きましたが、だいぶ変なところで引っかかったのでその備忘録です。なのでH問題自体の解説はしません。
1. 多重for文の順序
H問題において、物の色は単調に出現するようソートしたとしてdpのキーは
dp[i][b][c][w] = (0からi番目の物の中からc色以下、重さw以下になるよう選んだ時の価値の最大値、ただしb=0→i番目と同じ色を詰めない、b=1→i番目と同じ色を詰めた)
と定めますが、このときdpを回すための多重forの順序の組み方で速度に2倍ほど差が出ます。
- for c → for w → for b の場合、2117ms
- for b → for c → for w の場合、1107ms
別に共通の処理をfor文の外に出したわけでもないのに、単純にfor文の順番を変えるだけで速度が変わるのは不思議です。
予想としては、前者はb=0, 1のみなので頻繁にbについてのfor文の内外の行き来が起こる一方、後者はfor w in range(W)が大体W=10^4なのでwについてのfor文の内外の行き来はそんなに起こらないから、なのですが、識者がいらっしゃればぜひ教えてください。。。
とりあえず「多重for文は回数が多いものほど内側にネストするのが良い」として覚えておきます。
2. numpyでのmaxの取り方
何を血迷ったか、H問題をnumpyで書き直しました。その時dpの遷移でmax評価を何度も取る必要があるのですが、
- np.max(-) → 1つの行列内での要素の最大を返す
- np.maximum(-, -) → 2つの行列の各要素のうち大きい方を取って作った行列を返す
なことに注意です。さらに後者は引数が2つじゃないと正しい行列を返さない事を忘れないようにしましょう(エラーも返さないのでここで相当詰まった)。
引数3つ取った時帰ってくる行列が何なのかはちゃんと調べてないです、これも誰か知ってる人教えてください。。。
初出社ですよ!
いよいよ今日から社会人スタートですよ!
初日のみ入社式のため出社で、次の日(今日ですね)から早速在宅勤務になります。
今の一番の心配はちゃんと会社のサーバーにVPN接続できるかです汗
今朝起きたら大学の指導教員から最後のメールが届いてました。
修論書くまで相当お世話になったけど、いい先生ですねえ。。。
本当にこの先生が指導教員でよかったです。じゃないとほんとに修士で鬱になってた可能性ある笑。
ちゃんとお礼のメール出しときました。うむ。
あと現在読んでいる本が
「Category theory in context」
「独習C++」
の2冊なんですが、入社前に読み切るつもりがどちらも微妙に残っちゃってるので読み終えたらレビュー記事(という名の備忘録)を書くことにします。
前方宣言で後に引けなくするスタイル。頑張ります。。。
(こういうのって多分章ごとにすぐレビュー書いてアウトプットした方がいい気がする。しないと段々まとめる気力がなくなるんだもん。。。今回の反省点です。)