-
Notifications
You must be signed in to change notification settings - Fork 4
/
4.html
795 lines (693 loc) · 34.3 KB
/
4.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>圏論勉強会 第4回 @ ワークスアプリケーションズ</title>
<meta name="description" content="Seminar of category theory">
<meta name="author" content="Koichi Nakamura">
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="css/reveal.css">
<link rel="stylesheet" href="css/theme/sky.css" id="theme">
<meta http-equiv="X-UA-Compatible" CONTENT="IE=EmulateIE7" />
<!-- For syntax highlighting -->
<link rel="stylesheet" href="plugin/highlight/styles/github.css">
<!-- If the query includes 'print-pdf', use the PDF print sheet -->
<script>
document.write( '<link rel="stylesheet" href="css/print/' + ( window.location.search.match( /print-pdf/gi ) ? 'pdf' : 'paper' ) + '.css" type="text/css" media="print">' );
</script>
<script type="text/javascript" async
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML">
</script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
displayMath: [ ['$$','$$'], ["\\[","\\]"] ]
}
});
</script>
<style type="text/css">
<!--
div.definition {
padding-top: 10px;
padding-bottom: 10px;
padding-left: 10px;
padding-right: 10px;
border: 4px solid #333333;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
}
div.theorem {
padding-top: 10px;
padding-bottom: 10px;
padding-left: 10px;
padding-right: 10px;
border: 4px solid #333333;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
}
div.equation {
margin: 10px;
padding-top: 10px;
padding-bottom: 10px;
padding-left: 10px;
padding-right: 10px;
border: 2px solid #C0C0C0;
}
-->
</style>
<!--[if lt IE 9]>
<script src="lib/js/html5shiv.js"></script>
<![endif]-->
</head>
<body>
<div class="reveal">
<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">
<section>
<h1>圏論勉強会<br>第4回</h1>
<h3>@ワークスアプリケーションズ</h3>
<small> 中村晃一 <br> 2013年6月6日</small>
</section>
<section>
<h3>謝辞</h3>
<p>
この勉強会の企画,会場設備の提供をして頂きました<br>
㈱ ワークスアプリケーションズ様<br>
にこの場をお借りして御礼申し上げます。
</p>
</section>
<section>
<h3> この会について </h3>
<ul>
<li> <span style="color:red">圏論(category theory)</span>を題材にいろんなことを学びます。</li>
<li> 分かり易さを重視して初歩的な例を多用します。</li>
<li> 関数型言語の経験がある方がより楽しめると思います。資料中では主にHaskellを使います。 </li>
<li> 中高生も数人見ているらしいのでプログラミングと関係が浅い内容も取り上げます。</li>
<li> この資料は<a href="http://nineties.github.com/category-seminar/">http://nineties.github.com/category-seminar</a>に置いてあります。</li>
</ul>
</section>
<section>
<h2> 第4回: 射で考える </h2>
</section>
<section>
<h3> 第4回の内容 </h3>
<p>
今回と次回は様々な概念を「圏論の言葉のみで述べる」方法について見ていきます。
</p>
</section>
<section>
<h3> 記法について </h3>
<ul>
<li> 第2回と同じく,2項演算子$\star$の第1引数,第2引数を定数に固定した関数を便宜的に以下の様に表す事にします。
$$ \color{red}{(a\ \star)} : x \mapsto a \star x $$
$$ \color{red}{(\star\ a)} : x \mapsto x \star a $$
例えば
$$ (2\ +)(3) = 2 + 3 \qquad (+\ 2)(3) = 3 + 2$$
という感じです。
</li>
</ul>
</section>
<section>
<h3> Hom集合 </h3>
</section>
<section>
<h3> クイズ </h3>
<p> 要素が1つの集合を<span style="color:red">単集合(singleton, unit set)</span>と呼び$1$と表す事にします。</p>
<div class="fragment">
<p>さて,$1$から他の集合$A$への関数はいくつあるでしょうか?</p>
<div align="center"> <img width="60%" src="fig/function_space1.png"> </div>
</div>
<p> <span style="color:transparent">答え: $A$の要素と同じ数だけ存在する。</span> </p>
</section>
<section>
<h3> クイズ </h3>
<p> 要素が1つの集合を<span style="color:red">単集合(singleton, unit set)</span>と呼び$1$と表す事にします。</p>
<p>さて,$1$から他の集合$A$への関数はいくつあるでしょうか?</p>
<div align="center"> <img width="60%" src="fig/function_space2.png"> </div>
<p> 答え: $A$の要素と同じ数だけ存在する。</p>
</section>
<section>
<h3> クイズ </h3>
<p> では集合$A$から$1$への関数はいくつあるでしょうか? </p>
<div align="center"> <img width="60%" src="fig/function_space3.png"> </div>
<p> <span style="color:transparent">答え: 全ての要素を一点に移す唯一つの関数しか存在しない。</span> </p>
</section>
<section>
<h3> クイズ </h3>
<p> では集合$A$から$1$への関数はいくつあるでしょうか? </p>
<div align="center"> <img width="60%" src="fig/function_space4.png"> </div>
<p> 答え: 全ての要素を一点に移す唯一つの関数しか存在しない。 </p>
</section>
<section>
<h3> クイズ </h3>
<p> 要素が2つの集合$2$から他の集合$A$への関数はいくつあるでしょうか? </p>
<div align="center"> <img width="60%" src="fig/function_space5.png"> </div>
<p> <span style="color:transparent">答え: $A$の要素の対(重複を許す)と同じ数だけ存在する。</span></p>
</section>
<section>
<h3> クイズ </h3>
<p> 要素が2つの集合$2$から他の集合$A$への関数はいくつあるでしょうか? </p>
<div align="center"> <img width="60%" src="fig/function_space6.png"> </div>
<p> 答え: $A$の要素の対(重複を許す)と同じ数だけ存在する。</p>
</section>
<section>
<h3> クイズ </h3>
<p> 最後に,集合$A$から$2$への関数はいくつあるでしょうか? </p>
<div align="center"> <img width="60%" src="fig/function_space7.png"> </div>
<p> <span style="color:transparent">答え: $A$の部分集合の数だけ存在する。</span></p>
</section>
<section>
<h3> クイズ </h3>
<p> 最後に,集合$A$から$2$への関数はいくつあるでしょうか? </p>
<div align="center"> <img width="60%" src="fig/function_space8.png"> </div>
<p> 答え: $A$の部分集合の数だけ存在する。</p>
</section>
<section>
<h3> 関数空間 </h3>
<p>
集合$A$から$B$への全ての関数の集合を<span style="color:red">関数空間(function space)</span>と呼ぶ事にします。
</p>
<p class="fragment">
今見た様に,<span style="color:red">関数空間の構造は$A$,$B$の構造により定まる</span>ということが言えます。今の場合の構造とは「要素の数」(正確には濃度)です。
</p>
<div align="center"> <img width="60%" src="fig/function_space9.png"> </div>
</section>
<section id="homset">
<h3> Hom集合 </h3>
<div class="definition">
<p>
圏$\mathbf{C}$において,対象$A$から対象$B$への射全てからなる集合を
$$ \mathrm{Hom}_{\mathbf{C}}(A,B) $$
と表し,<span style="color:red">Hom集合(hom-set)</span>と言う。
文脈から圏が明らかな場合には単に$\mathrm{Hom}(A,B)$と表す。
</p>
<div align="center"> <img width="40%" src="fig/hom_set.png"> </div>
</div>
<div align="left" style="font-size:50%">
注: $\mathrm{Hom}(A,B)$はただの集合であり、それ自体は構造を持っていません。第11回に扱いますが関数空間の概念は指数対象というものによってより正確に表現される事になります。
</div>
</section>
<section>
<h3> 何故Hom集合が重要か </h3>
<p>
先ほど見たように$A$の要素と$\mathrm{Hom}_{\mathbf{Sets}}(1, A)$の要素を同一視出来ます。つまり,同型対応
$$ A \cong \mathrm{Hom}_{\mathbf{Sets}}(1, A) \quad \text{in $\mathbf{Sets}$}$$
があります。
</p>
<div align="center"> <img width="60%" src="fig/function_space2.png"> </div>
</section>
<section>
<h3> 何故Hom集合が重要か </h3>
<p>
ところで,圏論の基本語彙である「対象・射・合成」によって「$A$の要素(対象$A$の内部)」について述べる事はできません。
</p>
<p class="fragment">
一方,<span style="color:red">$\mathrm{Hom}_{\mathbf{Sets}}(1, A)$の要素は射</span>ですので,その中身については圏論の言葉で説明できます。つまり,この仕組みによって「圏論の言葉」のみで「対象の内部」について述べる事が出来るようになるのです。
</p>
<div align="center"> <img width="60%" src="fig/hom_set2.png"> </div>
</section>
<section>
<p> 対象の内部構造が,それを取り囲む射の集合の構造として圏の中に見える形で顕れます。
</p>
<p>
逆に言うと,圏が定まるとその中で観察可能な事象が決まります。
</p>
<div align="center"> <img width="60%" src="fig/hom_set3.png"> </div>
</section>
<section>
<h3> 何故Hom集合が重要か </h3>
<p>
このように$\mathrm{Hom}(A,B)$は「射」によって「$A$や$B$の内部構造」について述べる為の道具となります。
</p>
<p class="fragment">
また一般に,$\mathrm{Hom}(A,B)$は$A$,$B$自体よりも豊かな構造を持ちますので,Hom集合自体が探求の対象となる事もあります。
</p>
<div class="fragment">
<p>
最後に,任意の圏$\mathbf{C}$の任意の対象$A$,$B$について<span style="color:red">$\mathrm{Hom}_{\mathbf{C}}(A,B)$は$\mathbf{Sets}$の対象</span>つまり集合である事に注意しましょう。$\mathbf{C}$に関する議論の舞台を$\mathbf{Sets}$に移すという役割にも使います。
</p>
<div align="left" style="font-size:50%">
注: 厳密には$\mathrm{Hom}_{\mathbf{C}}(A,B)$は前回説明した「小さい」集合とは限りませんので必ずしも$\mathbf{Sets}$の対象ではありません。主に使用する事になる圏では問題ありません。
</div>
</div>
</section>
<section>
<h3> Hom集合の例 </h3>
</section>
<section>
<h3> 例1 </h3>
<p>
$$ \mathrm{Hom}_{\mathbf{Sets}}(\mathbb{N},\mathbb{R}) $$
の要素は任意の無限長の実数列と一対一に対応(以後省略)します。
</p>
<div align="center"> <img src="fig/generalized_element3.png"> </div>
</section>
<section>
<h3> 例2 </h3>
<p>
半順序集合と単調関数からなる圏を$\mathbf{Pos}$(Category of partially ordered sets)と表す事にすると
$$ \mathrm{Hom}_{\mathbf{Pos}}(\mathbb{N},\mathbb{R}) $$
の要素は任意の単調増加実数列です。
</p>
<div align="center"> <img width="80%" src="fig/generalized_element9.png"> </div>
</section>
<section>
<h3> 例3 </h3>
<div style="font-size:90%">
<p>
<span style="font-size:80%">【線形代数既習者向けの例】</span><br>
ベクトル空間(とりあえず実数係数)と線形写像からなる圏を$\mathbf{Vct}$と表す事にします。
</p>
<p class="fragment">
すると任意のベクトル空間$V$について
$$ \mathrm{Hom}_{\mathbf{Vct}}(V, \mathbb{R})$$
は$V$の双対ベクトル空間$V^{*}$です。
</p>
</div>
<div align="center"> <img width="90%" src="fig/dual_vector_space.png"> </div>
</section>
<section>
<h3> 例4 </h3>
<p>
$\mathbb{N}_{+}$を自然数と加法からなるモノイド,
$\mathbb{Z}_{\times}$を整数と乗法からなるモノイドとして,
$$ \mathrm{Hom}_{\mathbf{Mon}}(\mathbb{N}_{+},\mathbb{Z}_{\times}) $$
つまり$\mathbb{N}_{+}$から$\mathbb{Z}_{\times}$への全ての準同型写像の集合を考えます。
</p>
<div class="fragment">
<p>
さて,$ \mathrm{Hom}_{\mathbf{Mon}}(\mathbb{N}_{+},\mathbb{Z}_{\times}) $は$\mathbb{N}_{+}$や$\mathbb{Z}_{\times}$の構造をどう反映しているでしょうか?
</p>
<div align="center"> <img width="80%" src="fig/hom_set_mon2.png"> </div>
</div>
</section>
<section>
<p>
例えばある準同型$f \in \mathrm{Hom}_{\mathbf{Mon}}(\mathbb{N}_{+},\mathbb{Z}_{\times})$が
$$ f(1) = 2 $$
を満たすとしましょう。
</p>
<p class="fragment">
このような準同型は
$$ f(n) = 2^n $$
しか有り得ません。(何故でしょうか?)
</p>
<div align="center"> <img width="80%" src="fig/hom_set_mon.png"> </div>
</section>
<section>
<p>
詳しい証明は省略しますが,任意の整数$a \in \mathbb{Z}$に対して
$$ f(1) = a $$
を満たす$f \in\mathrm{Hom}_{\mathbf{Mon}}(\mathbb{N}_{+},\mathbb{Z}_{\times})$が唯一つ存在します。
</p>
<p class="fragment">
つまり,
$$\mathrm{Hom}_{\mathbf{Mon}}(\mathbb{N}_{+},\mathbb{Z}_{\times}) \cong \mathbb{Z} \qquad\text{in $\mathbf{Sets}$}$$
という事です。
</p>
<p class="fragment">
$\mathbb{N}_{+}$と$\mathbb{Z}_{\times}$の構造がHom集合の構造を決めている事がよくわかります。
</p>
<div align="center"> <img width="60%" src="fig/hom_set_mon3.png"> </div>
</section>
<section>
<h3> 例5 </h3>
<p>
$\mathbf{Hask}$圏におけるHom集合
$$ \mathrm{Hom}_{\mathbf{Hask}}(A,B) $$
は$A\rightarrow B$型の関数の集合となります。
</p>
<p>
関数型言語のHom集合を観察すると面白い事が解ります。
同時にプログラミング言語特有の厄介さにも触れておきます。
</p>
<pre><code data-trim class="haskell" contenteditable>
-- 以下の説明では、有限時間で停止して値を返し副作用なども持たない関数のみを考えます。
-- まず Integer -> () という型の関数を考えます。
-- ()というのは同じ記号()で表される値を一つしか持たない型です。
-- f :: Integer -> ()
-- f x = ..... どんな実装が可能か? ...
-- 字面の違いはあれ、どのような実装も以下の実装と等価である事が判ると思います。
f :: Integer -> ()
f x = ()
-- 同様に () -> Integerという型の関数は
one :: () -> Integer
one () = 1
-- のように定数値を返す関数しか存在しません。
-- 「全ての関数が~の形である」と述べられる事になります。
-- これらの例から判る事は「型」が具体的な実装方法にまで、思いの外影響している
-- という事です。
-- 上手く型を設計する事によって実装の複雑性が増加するのを防ぐ事が出来ます。
-- また,関数の性質について調べる事が容易になります。
-- 有限時間で停止しない関数なども考えると
g :: Integer -> ()
g x = g x
-- のような新たな関数を考える事が出来てしまいます。
-- プログラミングにおける関数は「部分関数」といって,常に値を返すものばかりでは
-- 無いためこのような事が起きます。詳しくは後の回に改めて説明します。
</code></pre>
</section>
<section>
<h3> Hom集合に構造を入れる </h3>
</section>
<section>
<h3> Hom集合に構造を入れる </h3>
<p>
$\mathrm{Hom}_{\mathbf{C}}(X,A)$はただの集合です。
</p>
<p class="fragment">
しかし,$A$がモノイドや群や順序などの構造を持っている場合
$\mathrm{Hom}_{\mathbf{C}}(X,A)$にも同じ構造を入れる事が出来ます。
</p>
<div align="center"> <img width="40%" src="fig/hom_set4.png"> </div>
</section>
<section>
<h3> $M$がモノイド$\Rightarrow$$\mathrm{Hom}(X,M)$もモノイド </h3>
<p>
例えば集合$M$が演算$\cdot$によってモノイドになるとしましょう。また集合$X$を固定します。
</p>
<p>
この時,任意の$f, g \in \mathrm{Hom}_{\mathbf{Sets}}(X,M)$に対して
$$ (f \cdot g)(x) = f(x)\cdot g(x) $$
によって各点ごとに(pointwiseに)演算$f\cdot g$を定義します。
</p>
</section>
<section>
<h3> 例1 </h3>
<p>
例えば自然数の集合$\mathbb{N}$に加法によってモノイドの構造を入れると,$\mathrm{Hom}_{\mathbf{Sets}}(2,\mathbb{N})$の要素にも加法を定義出来ます。
</p>
<div align="center"> <img src="fig/pointwise_operation.png"> </div>
</section>
<section>
<h3> <span style="font-size:80%">$A$が半順序集合$\Rightarrow$$\mathrm{Hom}(X,A)$も半順序集合 </span></h3>
<p>
集合$A$が何らかの順序$\leqq$によって半順序集合になるとします。
</p>
<p>
この時,任意の$f, g \in \mathrm{Hom}_{\mathbf{Sets}}(X,A)$に対して
$$\text{任意の$x$について}f(x) \leqq g(x) \text{の時のみ} f\leqq g$$
と定義する事によって$\mathrm{Hom}_{\mathbf{Sets}}(X,A)$が半順序集合になります。
</p>
</section>
<section>
<h3> 例2 </h3>
<p>
例えば下図において$\mathbb{N}$に自然数の通常の順序を入れると,$f(*)\leqq g(*)$かつ$f(\star)\leqq g(\star)$なので$f \leqq g$となります。
</p>
<div align="center"> <img width="50%" src="fig/pointwise_comparison.png"> </div>
</section>
<section>
<img align="right" width="60%" src="fig/functor_category.png">
<p style="font-size:90%">
前回やった函手圏$\mathbf{D}^{\mathbf{C}}$の構成は,$\mathrm{Hom}(A,B)$に$B$の構造を入れるという事の圏論的な一般化になっています。
</p>
<p style="font-size:90%">
今の2例を函手圏として説明する事は良い練習になると思います。時間があれば,当日確認してみます。
</p>
</section>
<section>
<h3> generalized element </h3>
<p>
様々なセッティングによって$\mathrm{Hom}(X,A)$を「$A$そのもの」「$A$の対の集合」「モノイド」「半順序集合」などと見なせる事を見ました。
<span class="fragment">もはや$\mathrm{Hom}(X,A)$の要素を「射」のイメージでは考えていません。</span>
</p>
<p class="fragment">
特に任意の射$a: X\rightarrow A$を$A$の構成要素と思う視点は重要で,この意味で射$a$の事を$A$の<span style="color:red">generalized element</span>と呼ぶ事があります。
</p>
<div align="center"> <img src="fig/generalized_element8.png"> </div>
</section>
<section>
<h3> point-free style </h3>
<p>
ところで関数型言語ではpoint-free styleという<span style="color:red">関数と合成でプログラムを書く</span>スタイルがあります。言い方を変えればpoint-free styleとは型の圏の<span style="color:red">「射」のみでプログラムを表現する</span>という事に他なりません。
</p>
<p>
人間が読むのには適していない場合もありますが,プログラムを圏論の枠組みで扱う場合に必要となります。
</p>
<pre><code data-trim class="haskell" contenteditable>
h x = f (g x) -- not point-free
h = f . g -- point-free
</code></pre>
</section>
<section>
<h3> Hom函手 </h3>
</section>
<section>
<p>
対象$X$を固定して,<span style="color:red">$A$を$\mathrm{Hom}_{\mathbf{C}}(X, A)$に移して考える</span>ということの重要性は何となく解ってもらえたのではないかと思います。
この$\mathbf{C}$の対象と$\mathbf{Sets}$の対象の対応を
$$ \mathrm{Hom}_{\mathbf{C}}(X, -): \mathbf{C}\rightarrow \mathbf{Sets} $$
と表す事にします。
</p>
<div align="center"> <img width="80%" src="fig/hom_functor5.png"> </div>
</section>
<section>
<p>
次は$\mathbf{C}$の射と$\mathbf{Sets}$の射の上手い対応を考えましょう。
$\mathbf{C}$を$\mathbf{Sets}$に移す函手が得られるはずです。
</p>
<div align="center"> <img width="80%" src="fig/hom_functor4.png"> </div>
</section>
<section>
<p>
まず,$\mathbf{C} = \mathbf{Sets}$,$X = 1$のケースを考えてみます。
</p>
<p>
$\mathrm{Hom}_{\mathbf{Sets}}(1, A)$の射は$A$の要素と一対一に対応するのでした。
そこで下図の関数$a$がどのような関数に移るべきか?を考えます。
</p>
<div align="center"> <img width="50%" src="fig/hom1_4.png"> </div>
</section>
<section>
<div align="left" style="height:3em">
$a$と$f(a)$の関係を自然にHom集合の世界に移すならば,下図の様に関数$a$は$f\circ a$に移るべきです。
</div>
<div align="center"> <img src="fig/hom1_1.png"> </div>
</section>
<section>
<div align="left" style="height:3em">
同様に関数$b$は$f\circ b$に移るべきであり
</div>
<div align="center"> <img src="fig/hom1_2.png"> </div>
</section>
<section>
<div align="left" style="height:3em">
関数$c$は$f\circ c$に移るべきです。
</div>
<div align="center"> <img src="fig/hom1_3.png"> </div>
</section>
<section>
<p>
まとめると
$$ \begin {align}
& a \longmapsto f\circ a \\
& b \longmapsto f\circ b \\
& c \longmapsto f\circ c \\
\end{align} $$
などと移される事になります。
</p>
<p class="fragment">
つまり,射$f: A\rightarrow B$をHom集合の世界に自然に移すと<span style="color:red">左から$f$を合成する</span>という関数$(f\ \circ)$に移る事になります。
</p>
</section>
<section>
<p>
$1$の代わりに任意の集合$X$を取った場合の状況を絵にしてみると,下のようになります。
</p>
<div align="center"> <img src="fig/homx_sets1.png"> </div>
</section>
<section>
<p>
射$f$を「左から$f$を合成する関数」に移すという話は第2回にも登場しました。
</p>
<div class="fragment" align="center"> <img src="fig/monoid_cayley3.png"> </div>
</section>
<section>
<p>
$\mathbf{C}$として対象が一つ($\bullet$とします)の圏,つまりモノイドを取った場合を考えます。対象が一つしかないのでドメインには$\bullet$を固定し
$$ \mathrm{Hom}_{\mathbf{C}}(\bullet, -): \mathbf{C} \rightarrow \mathbf{Sets} $$
を考えます。$\mathbf{C}$における射の合成演算子を$\cdot$と表す事にします。
</p>
<div align="center"> <img src="fig/monoid2.png"> </div>
</section>
<section>
<p>
すると$\mathbf{C}$の対象$\bullet$は$\mathrm{Hom}_{\mathbf{C}}(\bullet, \bullet)$,つまり$\mathrm{End}_{\mathbf{C}}(\bullet)$に移り,$\mathbf{C}$の射$a$が関数$(a\ \ \cdot)$に移ることになります。
</p>
<div align="center"> <img src="fig/homfunctor_monoid.png"> </div>
</section>
<section>
<p>
具体例を2つ見ましたが,まとめると$\mathbf{C}$に対象$X$を固定し
</p>
<ul>
<li> $\mathbf{C}$の対象$A$を集合$\mathrm{Hom}_{\mathbf{C}}(X,A)$に移し,
<li> $\mathbf{C}$の射$f$を関数$(f\ \ \circ)$に移す
</ul>
<p>
という対応は函手になりそうです。
</p>
<p>
定義を確認し,証明をしてみましょう。
</p>
</section>
<section id="covariant_homfunctor">
<h3> <span style="font-size:80%">共変Hom函手</span> </h3>
<div class="definition" style="font-size:80%">
<p>
$\mathbf{C}$の対象$X$を固定して
</p>
<ul>
<li> $\mathbf{C}$の対象$A$に集合$\mathrm{Hom}(X, A)$を対応させ </li>
<li> $\mathbf{C}$の射$f: A\rightarrow B$に,「左から$f$を合成する」という関数
$$ \mathrm{Hom}(X, f) = (f\ \ \circ): \mathrm{Hom}(X,A) \rightarrow \mathrm{Hom}(X, B)$$
を対応させる
</li>
</ul>
<p>
事は函手である。これを<span style="color:red">共変Hom函手(covariant hom-functor)</span>と言い,$ \mathrm{Hom}(X, -): \mathbf{C} \rightarrow \mathbf{Sets} $と表す。
</p>
<div align="center"> <img width="60%" src="fig/covariant_homfunctor.png"> </div>
</div>
</section>
<section>
<h3> 函手である事の証明 </h3>
<div style="font-size:80%">
<p>
$\mathbf{C}$での射の合成を$\cdot$,$\mathbf{Sets}$での合成を$\circ$と表す事にする。
</p>
<p class="fragment">
【射の合成関係を保つ事】<br>
任意の$\mathbf{C}$の射$g:A\rightarrow B$,$f:B\rightarrow C$と任意の射$h: X\rightarrow A$について
$$\begin{aligned}
& \mathrm{Hom}_{\mathbf{C}}(X, f\cdot g)(h) = ((f\cdot g)\ \ \cdot)(h) = f\cdot g\cdot h \\
& \mathrm{Hom}_{\mathbf{C}}(X, f)\circ \mathrm{Hom}_{\mathbf{C}}(X, g)(h) = (f\ \ \cdot)\circ(g\ \ \cdot)(h) = (f\ \ \cdot)(g\cdot h) = f\cdot g\cdot h
\end{aligned} $$
すなわち$\mathrm{Hom}_{\mathbf{C}}(X,f\cdot g)=\mathrm{Hom}_{\mathbf{C}}(X,f)\circ\mathrm{Hom}_{\mathbf{C}}(X,g)$
</p>
<p class="fragment">
【恒等射を保つ事】<br>
任意の$\mathbf{C}$の恒等射$1_A:A\rightarrow A$と任意の射$h:X\rightarrow A$について
$$ \mathrm{Hom}_{\mathbf{C}}(X,1_A)(h) = 1_A\cdot h = h$$
すなわち$\mathrm{Hom}_{\mathbf{C}}(X,1_A) = 1_{\mathrm{Hom}_{\mathbf{C}}(X,A)}$
</p>
<p class="fragment">
以上より$\mathrm{Hom}_{\mathbf{C}}(X,-)$は函手である。<span style="float:right">□</span> </p>
</p>
</div>
</section>
<section>
<p>
アナロジー的に
</p>
<ul>
<li> 対象$A$を$\mathrm{Hom}_{\mathbf{C}}(A, X)$に移し </li>
<li> 射$f$を「右から$f$を合成する」という関数に移す </li>
</ul>
<p>
という対応$\mathrm{Hom}_{\mathbf{C}}(-, X)$を考えて見ましょう。
</p>
</section>
<section>
<p>
第2回にも似た事をしました。モノイドの要素を右からの作用に移した時は<span style="color:red">関数合成の順番を逆にする</span>事によって演算の順序を保ったのでした。
</p>
<div align="center"> <img src="fig/opposite_monoid_cayley.png"> </div>
</section>
<section>
<p>
射$f: A\rightarrow B$を右から合成するということは<span style="color:red">Bの側に繋げる</span>という事になります。
</p>
<div align="center"> <img src="fig/contravariant_homfunctor2.png"> </div>
</section>
<section>
<p>
すると$\mathrm{Hom}_{\mathbf{C}}(-,X)$による対応付けの様子は下図の様になり,
$A$から$B$への射が$\mathrm{Hom}_{\mathbf{C}}(B,X)$から$\mathrm{Hom}_{\mathbf{C}}(A,X)$への射に移ります。
</p>
<p class="fragment">
ドメインとコドメインの順序を保っていないので,これは(今までの意味での)函手になっていません。
</p>
<div align="center"> <img src="fig/contravariant_homfunctor.png"> </div>
</section>
<section>
<p>
ここで$\mathbf{C}$の射の向きを全て逆向きにした<span style="color:red">双対圏(opposite category)</span>$\mathbf{C}^{\mathrm{op}}$を考えると,ドメインとコドメインの順序が保たれた対応関係になります。
</p>
<div align="center"> <img src="fig/contravariant_homfunctor3.png"> </div>
</section>
<section>
<p>
このように一方を双対圏にすると函手$F:\mathbf{C}^{\mathrm{op}}\rightarrow \mathbf{D}$となる対応$F$を$\mathbf{C}\rightarrow\mathbf{D}$への<span style="color:red">反変函手(contravariant functor)</span>と言います。
</p>
<p>
今まで函手と呼んでいたものは正確には<span style="color:red">共変函手(covariant functor)</span>と呼ばれます。
</p>
</section>
<section id="contravariant_homfunctor">
<h3> <span style="font-size:80%">反変Hom函手</span> </h3>
<div class="definition" style="font-size:80%">
<p>
$\mathbf{C}$の対象$X$を固定して
</p>
<ul>
<li> $\mathbf{C}$の対象$A$に集合$\mathrm{Hom}(A, X)$を対応させ </li>
<li> $\mathbf{C}$の射$f: A\rightarrow B$に,「右から$f$を合成する」という関数
$$ \mathrm{Hom}(f, X) = (\circ\ \ f): \mathrm{Hom}(B,X) \rightarrow \mathrm{Hom}(A,X)$$
を対応させる
</li>
</ul>
<p>
事は反変函手である。これを<span style="color:red">反変Hom函手(contravariant hom-functor)</span>と言い,$ \mathrm{Hom}(-, X): \mathbf{C}^{\mathrm{op}} \rightarrow \mathbf{Sets} $と表す。
</p>
<div align="center"> <img width="60%" src="fig/contravariant_homfunctor4.png"> </div>
</div>
</section>
<section>
<p> 反変Hom函手が実際に$\mathbf{C}^{\mathrm{op}}$から$\mathbf{Sets}$への函手になっている事の証明は,共変Hom函手の場合と殆ど同じなので省略します。良い練習になりますのでやってみて下さい。
</section>
<section>
<h3> 第4回はここで終わります </h3>
<p>
お疲れ様でした。<br>
非常に難しい内容だったと思いますが,ここを乗り越えると今後の学習が大分楽になると思います。本資料では情報量が少ないですので、テキストを読み練習問題を解く事をお薦めします。
</p>
<p>
今回はHom集合という形で様々な射をひっくるめて考えましたが,射には同型射・モノ射・エピ射・(様々な)普遍射など特徴的なものが沢山あります。次回はそのような話をする予定です。
</p>
</section>
</div>
</div>
<script src="lib/js/head.min.js"></script>
<script src="js/reveal.min.js"></script>
<script>
// Full list of configuration options available here:
// https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: false,
progress: true,
history: true,
center: true,
rollingLinks: false,
theme: Reveal.getQueryHash().theme, // available themes are in /css/theme
transition: Reveal.getQueryHash().transition || 'none', // default/cube/page/concave/zoom/linear/fade/none
// Optional libraries used to extend on reveal.js
dependencies: [
{ src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: 'plugin/markdown/showdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: 'plugin/zoom-js/zoom.js', async: true, condition: function() { return !!document.body.classList; } },
{ src: 'plugin/notes/notes.js', async: true, condition: function() { return !!document.body.classList; } }
// { src: 'plugin/search/search.js', async: true, condition: function() { return !!document.body.classList; } }
// { src: 'plugin/remotes/remotes.js', async: true, condition: function() { return !!document.body.classList; } }
]
});
Reveal.addEventListener( 'slidechanged', function( event ) {
MathJax.Hub.Rerender(event.currentSlide);
});
</script>
</body>
</html>