Đặt vấn đề
Không có vật gì đứng một mình.
Một cái cốc chỉ trở thành “cốc uống nước” khi có nước đi vào nó, bàn tay cầm nó, cái bàn đỡ nó và một con người đang khát.
Một chiếc chìa khóa nằm riêng trên bàn chỉ là một miếng kim loại có hình thù hơi kỳ cục.
Nhưng đặt nó cạnh một ổ khóa phù hợp, đột nhiên giữa hai vật xuất hiện một thứ vô hình:
mối quan hệ mở được.
Và đôi khi, chính cái thứ vô hình đó mới là phần quan trọng.
Toán học trong một thời gian rất dài cũng thích nhìn vào đồ vật.
Số.
Tập hợp.
Vector.
Ma trận.
Không gian.
Nhóm.
Vành.
Trường.
Mỗi ngành dựng lên một sở thú riêng, nhốt những sinh vật toán học của mình vào từng cái chuồng, đặt tên rất đẹp rồi nghiên cứu chúng.
Rồi đến một lúc, vài nhà toán học bắt đầu hỏi một câu hơi ngáo:
Nếu thứ quan trọng không phải là bản thân các con vật trong sở thú thì sao?
Nếu thứ quan trọng là chúng có thể biến thành nhau bằng cách nào?
Đấy là lúc lý thuyết phạm trù (Category Theory) bước vào.
Nó không hỏi quá kỹ:
“Anh là cái gì?”
Nó hỏi:
“Anh đi được tới đâu?”
“Ai đi được tới anh?”
“Nếu tôi đi từ A sang B rồi từ B sang C thì chuyện gì xảy ra?”
Nghe giống Google Maps hơn là toán học.
Nhưng từ một ý tưởng đơn giản như vậy, người ta xây được một thứ ngôn ngữ cực kỳ tổng quát để nói về đại số, topology, logic, hình học, lập trình và nhiều cấu trúc toán học khác.
Category Theory xuất hiện trong công trình năm 1945 của Samuel Eilenberg và Saunders Mac Lane, ban đầu nhằm hình thức hóa những phép biến đổi giữa các cấu trúc toán học; về sau nó phát triển thành một ngành độc lập và trở thành một ngôn ngữ chung cho rất nhiều lĩnh vực. (Stanford Encyclopedia of Philosophy)
Một thành phố toàn mũi tên
Giả sử có ba nơi:
1Nhà ───────► Trường ───────► Thư viện
Ta gọi:
- Nhà là $A$
- Trường là $B$
- Thư viện là $C$
Có một con đường:
$$ f: A \rightarrow B $$
và một con đường:
$$ g: B \rightarrow C $$
Nếu ta có thể đi:
1A → B → C
thì tự nhiên ta cũng có một hành trình từ $A$ tới $C$.
Viết bằng toán học:
$$ g \circ f: A \rightarrow C $$
Đây chính là một trong những ý tưởng trung tâm của Category Theory:
Các mối quan hệ có thể ghép lại với nhau.
Một phạm trù (category), ở phiên bản đơn giản nhất, gồm:
- các đối tượng (objects);
- các mũi tên / morphism nối các đối tượng;
- một quy tắc để ghép các morphism;
- một morphism đồng nhất cho mỗi đối tượng.
Ngoài ra phép ghép phải có tính kết hợp (associativity). (NCAT Lab)
Nghe hơi khô.
Ta thử biến nó thành một vũ trụ trẻ con hơn.
Một phạm trù là gì?
Hãy tưởng tượng có một hộp LEGO khổng lồ.
Trong đó có:
1[Xe] [Nhà] [Robot] [Tàu]
Đấy là các object.
Nhưng Category Theory không quá tò mò bên trong con robot có mấy cái bánh răng.
Nó quan tâm đến các phép biến đổi.
Ví dụ:
1Robot ──tháo bánh xe──► Robot không bánh
hay:
1Nhà nhỏ ──ghép thêm tầng──► Nhà lớn
Các phép biến đổi ấy chính là morphism.
Ta có thể vẽ:
1 f g
2A ───────► B ───────────► C
3 \ ▲
4 \_____________________/
5 g ∘ f
Nếu $f$ đưa $A$ thành $B$, và $g$ đưa $B$ thành $C$, ta có thể ghép chúng thành:
$$ g \circ f $$
đưa thẳng $A$ tới $C$.
Đó gần như toàn bộ linh hồn ban đầu của Category Theory.
Nhưng để cái vũ trụ này không phát nổ, ta cần thêm hai luật.
Luật thứ nhất: luôn có một mũi tên “đứng yên”
Mỗi object $A$ đều có một morphism:
$$ id_A: A \rightarrow A $$
Nó chẳng làm gì cả.
Đúng.
Một ngành toán học cao siêu vừa nghiêm túc định nghĩa một phép biến đổi có nhiệm vụ không biến đổi gì hết.
Nhưng cái “không làm gì” này cực kỳ quan trọng.
Giả sử:
$$ f: A \rightarrow B $$
thì:
$$ f \circ id_A = f $$
và:
$$ id_B \circ f = f $$
Giống như bạn đang đi từ nhà đến trường.
Nếu trước khi đi, bạn đứng yên trước cửa nhà ba giây, con đường từ nhà tới trường vẫn là con đường ấy.
Morphism này gọi là identity morphism. (NCAT Lab)
Luật thứ hai: ghép kiểu nào cũng phải ra cùng kết quả
Giả sử:
$$ A \xrightarrow{f} B \xrightarrow{g} C \xrightarrow{h} D $$
Ta có thể ghép $f$ với $g$ trước:
$$ h \circ (g \circ f) $$
hoặc ghép $g$ với $h$ trước:
$$ (h \circ g) \circ f $$
Category Theory yêu cầu:
$$ h \circ (g \circ f)
(h \circ g) \circ f $$
Đây là tính kết hợp (associativity).
Tưởng tượng một dây chuyền:
1gạo
2 ↓ nấu
3cơm
4 ↓ vo viên
5cơm nắm
6 ↓ bỏ hộp
7hộp cơm
Ta có thể nghĩ:
1(nấu rồi vo viên) rồi bỏ hộp
hoặc:
1nấu rồi (vo viên rồi bỏ hộp)
Chuỗi biến đổi cuối cùng vẫn như nhau.
Không có luật này, mỗi lần đặt dấu ngoặc khác chỗ, vũ trụ lại cho ra một đáp án khác.
Toán học lúc ấy sẽ giống một quán cơm mà gọi:
“cơm + gà + trứng”
nhưng thứ tự nhân viên nghĩ trong đầu quyết định bạn nhận được cơm gà hay một con gà đang đội quả trứng.
Không ổn lắm.
Ví dụ quen thuộc nhất: phạm trù của các tập hợp
Ta có thể tạo một category rất nổi tiếng gọi là Set.
Trong đó:
- object là các tập hợp;
- morphism là các hàm giữa các tập hợp.
Ví dụ:
$$ A = {1,2,3} $$
$$ B = {2,4,6} $$
Ta định nghĩa:
$$ f(x)=2x $$
thì:
$$ f:A\rightarrow B $$
là một morphism.
Tiếp tục có:
$$ C={3,5,7} $$
và:
$$ g(x)=x+1 $$
thì:
$$ g:B\rightarrow C $$
không đúng với toàn bộ $B$ như ta vừa định nghĩa, vì $6+1=7$ thì được nhưng $4+1=5$, $2+1=3$ — trường hợp này tình cờ lại đúng.
Ta có:
$$ g(f(x)) = 2x+1 $$
hay:
$$ g\circ f:A\rightarrow C $$
Vậy một phép tính mà học sinh đã gặp từ rất sớm:
1x → f(x) → g(f(x))
thực ra đã mang hình bóng của Category Theory.
Chúng ta chỉ chưa gọi nó bằng cái tên nghe như một môn phép thuật cấp 8.
Điểm kỳ lạ: Category Theory không quá quan tâm object bên trong là gì
Đây là chỗ Category Theory bắt đầu trở nên thú vị.
Giả sử có hai chiếc máy.
Máy thứ nhất:
1[ A ] ──f──► [ B ]
Máy thứ hai:
1[ X ] ──p──► [ Y ]
Nếu cách các mối quan hệ vận hành giống nhau, Category Theory có thể xem hai hệ thống ấy có chung một hình dạng cấu trúc.
Nó giống chuyện ta nhìn:
1Hà Nội → Đà Nẵng → TP.HCM
và:
1Lớp 1 → Lớp 2 → Lớp 3
Hai câu chuyện hoàn toàn khác nhau.
Một bên là thành phố.
Một bên là lớp học.
Nhưng nếu bỏ tên của các object đi:
1● → ● → ●
ta nhận thấy cùng một pattern.
Category Theory rất mê những pattern kiểu này.
Nó muốn tìm thứ còn lại sau khi ta bóc hết lớp sơn bên ngoài.
Một con số có thể biến mất.
Một hình tam giác có thể biến mất.
Một vector space có thể biến mất.
Nhưng hình dạng của các quan hệ vẫn còn.
Đây cũng là lý do Category Theory thường được liên hệ với quan điểm cấu trúc luận trong toán học: thay vì chỉ nghiên cứu bản chất nội tại của từng object, ta có thể nghiên cứu object thông qua mạng lưới morphism liên hệ nó với các object khác. (Stanford Encyclopedia of Philosophy)
Rồi Category Theory lại chơi trò “phạm trù của các phạm trù”
Đến đây mọi thứ bắt đầu hơi ngáo.
Ta vừa có một category.
Bây giờ Category Theory hỏi:
Nếu hai category cũng có thể biến đổi qua lại thì sao?
Ví dụ ta có:
1Category C
và:
1Category D
Ta muốn một thứ chuyển toàn bộ cấu trúc từ $C$ sang $D$:
1C ─────────► D
Thứ đó gọi là một functor.
Functor – chiếc máy phiên dịch giữa hai vũ trụ
Giả sử Category $C$ có:
1A ──f──► B
Functor $F$ đưa chúng sang Category $D$:
1F(A) ──F(f)──► F(B)
Ta có:
$$ F:C\rightarrow D $$
Functor phải làm hai việc.
Thứ nhất, nó biến object thành object:
$$ A\mapsto F(A) $$
Thứ hai, nó biến morphism thành morphism:
$$ f\mapsto F(f) $$
Nhưng nó không được dịch bừa.
Nếu trong thế giới cũ:
$$ A\xrightarrow{f}B\xrightarrow{g}C $$
thì functor phải giữ nguyên cách ghép:
$$ F(g\circ f)
F(g)\circ F(f) $$
và nó cũng phải giữ identity:
$$ F(id_A)=id_{F(A)} $$
Đó chính là định nghĩa cơ bản của functor. (NCAT Lab)
Hãy tưởng tượng functor như Google Translate cho cấu trúc
Có một câu tiếng Việt:
1Tùng ăn bánh.
Dịch sang tiếng Anh:
1Tung eats cake.
Từ ngữ thay đổi.
Nhưng cấu trúc:
1người ──ăn──► đồ ăn
vẫn được bảo tồn.
Một functor cũng gần giống vậy.
Nó có thể chuyển một thế giới toán học sang thế giới khác, nhưng phải giữ lại cách các mối quan hệ kết nối với nhau.
Đấy là điểm rất mạnh.
Ta không còn chỉ hỏi:
Hai object có giống nhau không?
Ta bắt đầu hỏi:
Hai cả-vũ-trụ-cấu-trúc có thể dịch sang nhau không?
Natural Transformation – biến cả một cách dịch thành cách dịch khác
Nhưng các nhà toán học vẫn chưa chịu dừng.
Giả sử có hai functor:
$$ F:C\rightarrow D $$
và:
$$ G:C\rightarrow D $$
Tức là có hai cách khác nhau để dịch thế giới $C$ sang thế giới $D$.
Ta lại hỏi:
Có thể biến cách dịch $F$ thành cách dịch $G$ một cách nhất quán không?
Thứ làm việc đó gọi là natural transformation.
Bức tranh đại khái:
1 F
2 C ───────► D
3 │ │
4 │ │
5 │ │
6 └─────────►
7 G
Nhưng natural transformation không chỉ là một mũi tên đơn giản giữa hai chữ $F$ và $G$.
Với mỗi object $X$ trong $C$, ta có một morphism:
$$ \eta_X:F(X)\rightarrow G(X) $$
và tất cả các morphism này phải phối hợp với nhau một cách nhất quán.
Nếu có:
$$ f:X\rightarrow Y $$
ta muốn sơ đồ sau “đi đường nào cũng tới cùng chỗ”:
1F(X) ──F(f)──► F(Y)
2 │ │
3ηX ηY
4 │ │
5 ▼ ▼
6G(X) ──G(f)──► G(Y)
Tức là:
$$ G(f)\circ\eta_X
\eta_Y\circ F(f) $$
Sơ đồ này gọi là một commutative diagram.
Đây là lúc Category Theory bắt đầu có một mùi rất đặc trưng.
Thay vì viết một đống phương trình dài ngoằng, người ta vẽ một đống chấm và mũi tên rồi nói:
“Sơ đồ này commute.”
Người mới nhìn vào tưởng bản đồ tuyến metro.
Người học Category Theory nhìn vào và gật gù:
“À, tất nhiên.”
Tại sao phải làm mọi thứ trừu tượng đến vậy?
Đây là câu hỏi hoàn toàn hợp lý.
Ta đang có số thì tính số.
Có ma trận thì nhân ma trận.
Có vector thì tính vector.
Tại sao phải trèo lên một tầng mây rồi biến mọi thứ thành:
1● → ● → ●
?
Vấn đề nằm ở một hiện tượng rất thú vị.
Trong toán học, cùng một pattern thường xuất hiện ở rất nhiều nơi khác nhau.
Một định lý trong:
- đại số;
- topology;
- logic;
- lý thuyết kiểu (type theory);
- khoa học máy tính;
có thể nhìn hoàn toàn khác nhau ở bề mặt.
Nhưng khi bóc lớp vỏ đi, cấu trúc bên dưới lại giống nhau.
Giống như:
1USB-C → HDMI
và:
1Tiếng Việt → tiếng Anh
và:
1JSON → object Python
về nội dung thì chẳng liên quan gì nhau.
Nhưng cả ba đều mang pattern:
1một biểu diễn
2 │
3 ▼
4một phép chuyển đổi
5 │
6 ▼
7biểu diễn khác
Category Theory cố gắng nghiên cứu pattern của những pattern như vậy.
Saunders Mac Lane mô tả các category, functor, natural transformation, duality và adjunction như một bộ ngôn ngữ khái niệm có thể áp dụng rộng rãi trong nhiều ngành toán học. (Springer)
Ví dụ gần với dân lập trình
Category Theory nổi tiếng vì có vẻ như cứ nhắc tới nó là kiểu gì cũng có một lập trình viên Haskell xuất hiện từ bụi cây.
Nhưng bỏ Haskell sang một bên, nhiều ý tưởng của Category Theory khá tự nhiên với lập trình.
Giả sử ta có các function:
1def parse_int(x: str) -> int:
2 return int(x)
3
4def double(x: int) -> int:
5 return x * 2
Ta có:
1str ──parse_int──► int ──double──► int
Hai function có thể compose:
1def parse_and_double(x: str) -> int:
2 return double(parse_int(x))
Ta vừa tạo:
1str ──parse_and_double──► int
Đấy chính là tinh thần:
$$ g\circ f $$
Identity function
Ta cũng có:
1def identity(x):
2 return x
Nó không làm gì cả.
Nhưng:
1double(identity(5))
vẫn bằng:
1double(5)
và:
1identity(double(5))
cũng bằng:
1double(5)
Rất giống identity morphism.
Tất nhiên, nói rằng “mọi chương trình Python tạo thành một category đơn giản” sẽ cần nhiều điều kiện và định nghĩa chính xác hơn.
Ở đây mình chỉ muốn chỉ ra rằng composition và identity không phải những ý tưởng xa lạ.
Ta dùng chúng hàng ngày.
Category Theory chỉ lôi chúng ra ánh sáng, đặt tên cho chúng rồi hỏi:
Nếu lấy hai thứ này làm nền móng, ta xây được xa đến đâu?
Câu trả lời là:
khá xa.
Universal Property – định nghĩa một vật bằng các mối quan hệ của nó
Đây có lẽ là một trong những ý tưởng đẹp nhất của Category Theory.
Trong toán học thông thường, ta thường mô tả một vật bằng cách nói:
Nó được làm từ cái gì?
Category Theory thường thích hỏi:
Nó liên hệ với mọi thứ khác như thế nào?
Giả sử hai tập hợp:
$$ A $$
và:
$$ B $$
Ta có tích Descartes:
$$ A\times B $$
Thông thường ta nói:
$A\times B$ gồm các cặp $(a,b)$.
Category Theory có một cách nhìn khác.
Ta có hai projection:
$$ \pi_A:A\times B\rightarrow A $$
và:
$$ \pi_B:A\times B\rightarrow B $$
Bây giờ giả sử một object $X$ có:
$$ f:X\rightarrow A $$
và:
$$ g:X\rightarrow B $$
thì tồn tại duy nhất một morphism:
$$ \langle f,g\rangle:X\rightarrow A\times B $$
sao cho:
$$ \pi_A\circ\langle f,g\rangle=f $$
và:
$$ \pi_B\circ\langle f,g\rangle=g $$
Vẽ ra:
1 X
2 / \
3 f g
4 / \
5 ▼ ▼
6 A B
7 ▲ ▲
8 │ │
9 └─ A×B ─┘
Ý tưởng quan trọng ở đây là:
Ta có thể đặc trưng $A\times B$ không phải bằng thứ nằm bên trong nó, mà bằng cách mọi object khác đi tới nó.
Đây là một cú đổi góc nhìn rất mạnh.
Một cái ghế là gì?
Thử chơi triết học một chút.
Ta có thể định nghĩa cái ghế bằng vật chất:
14 chân
21 mặt ngồi
31 lưng tựa
Nhưng rồi xuất hiện ghế ba chân.
Ghế beanbag không chân.
Ghế treo.
Ghế đá.
Ghế gaming nhìn như ghế phi công chuẩn bị bắn tên lửa.
Định nghĩa theo vật chất bắt đầu đau đầu.
Ta thử định nghĩa bằng quan hệ:
Ghế là thứ mà con người có thể ngồi lên theo một cách nhất định.
Tất nhiên đây không phải một định nghĩa toán học hoàn chỉnh về ghế.
Nhưng nó cho ta cảm giác của cách suy nghĩ categorical:
Có khi một vật được hiểu tốt hơn bằng những quan hệ mà nó tham gia, thay vì mổ bụng nó ra xem bên trong chứa gì.
Đây là một thay đổi triết học khá sâu.
Từ object tới morphism, rồi functor, rồi natural transformation
Ta có thể tưởng tượng Category Theory như một camera liên tục zoom ra.
Ban đầu:
1A
Ta hỏi:
$A$ là gì?
Zoom ra:
1A ──f──► B
Ta hỏi:
$A$ liên hệ với $B$ thế nào?
Zoom tiếp:
1Category C ──F──► Category D
Ta hỏi:
Cả một hệ thống quan hệ có thể chuyển thành hệ thống khác thế nào?
Zoom tiếp nữa:
1F ──η──► G
Ta hỏi:
Hai cách chuyển đổi hệ thống liên hệ với nhau thế nào?
Rồi toán học lại có thể tiếp tục zoom.
Và lúc này ta nhận ra một chuyện hơi đáng sợ.
Có thể vũ trụ toán học không phải là một căn phòng chứa vô số đồ vật.
Có thể nó giống một mạng lưới khổng lồ:
1●────►●
2│ ╱│
3│ ╱ │
4▼ ╱ ▼
5●────►●────►●
Trong đó ý nghĩa của một điểm phần lớn đến từ những mũi tên nối nó với phần còn lại.
Một object đứng một mình gần như chẳng nói được gì
Giả sử mình đưa cho bạn ký hiệu:
$$ X $$
X là gì?
Không biết.
Một số?
Một tập hợp?
Một vector space?
Một nhóm?
Một database schema?
Một kiểu dữ liệu?
Không có thông tin.
Nhưng nếu mình cho:
$$ A\rightarrow X $$
$$ X\rightarrow B $$
$$ X\rightarrow C $$
$$ D\rightarrow X $$
thì từ mạng lưới ấy, hình dạng của $X$ bắt đầu xuất hiện.
Giống như ta không biết một người là ai.
Nhưng biết:
1người này là con của A
2người này làm cùng B
3người này dạy C
4người này học từ D
thì một chân dung dần hình thành.
Không phải từ những nguyên tử bên trong cơ thể họ.
Mà từ mạng lưới quan hệ.
Đó là trực giác rất gần với tinh thần Category Theory.
Category Theory có phải “lý thuyết của mọi thứ” không?
Không.
Nói vậy hơi quá tay.
Category Theory không thay thế mọi ngành toán học.
Nếu muốn tính nghiệm:
$$ x^2-5x+6=0 $$
thì lấy công thức hoặc phân tích nhân tử sẽ nhanh hơn nhiều so với việc gọi một hội nghị category theorist.
Category Theory đặc biệt hữu ích khi ta muốn:
- nhìn thấy cấu trúc chung giữa nhiều lĩnh vực;
- mô tả các phép biến đổi một cách tổng quát;
- nghiên cứu những construction có tính phổ quát;
- chuyển kết quả từ bối cảnh này sang bối cảnh khác;
- tổ chức những hệ thống toán học lớn;
- xây một ngôn ngữ trừu tượng cho logic và computer science.
Cái giá phải trả là độ trừu tượng.
Bạn có thể hiểu một function khá nhanh.
Bạn có thể hiểu một tập hợp khá nhanh.
Nhưng khi bắt đầu gặp:
1functor category
rồi:
1adjunction
rồi:
1Yoneda lemma
rồi:
1monad
thì não đôi khi phát ra tiếng quạt giống laptop build Docker image.
Điều này hoàn toàn bình thường.
Yoneda – một ý tưởng còn kỳ quặc hơn nữa
Nếu tiếp tục học Category Theory, sớm muộn bạn sẽ gặp Yoneda Lemma.
Không đi sâu chứng minh ở bài viết này, nhưng trực giác của nó rất hợp với câu chuyện đang nói.
Một cách rất thô để hình dung:
Muốn biết một object là gì, hãy xem toàn bộ cách những object khác ánh xạ vào hoặc ra khỏi nó.
Nghe khá triết học.
Một người không chỉ được mô tả bằng chiều cao, cân nặng, số căn cước.
Người ấy còn được nhìn qua:
- quan hệ với gia đình;
- quan hệ với bạn bè;
- quan hệ với công việc;
- quan hệ với xã hội.
Tương tự, trong Category Theory, mạng lưới morphism quanh một object có thể mang lượng thông tin kinh khủng về object đó.
Đây là một trong những khoảnh khắc mà toán học bắt đầu nghe giống triết học.
Nhưng nó không phải triết học mơ hồ.
Bên dưới vẫn là những phương trình chính xác đến lạnh người.
Vì sao Category Theory xuất hiện khắp nơi?
Bởi vì rất nhiều lĩnh vực đều có ba thứ:
1đối tượng
2+
3phép biến đổi
4+
5phép ghép các biến đổi
Trong Set:
1object = tập hợp
2morphism = hàm
Trong một category của vector space:
1object = vector space
2morphism = linear map
Trong category của group:
1object = group
2morphism = group homomorphism
Trong topology:
1object = topological space
2morphism = continuous map
Trong một số mô hình liên quan đến lập trình:
1object ≈ type
2morphism ≈ function
Điều quan trọng là morphism phải được chọn sao cho chúng bảo tồn loại cấu trúc ta đang quan tâm.
Một group homomorphism không phải bất kỳ function nào.
Một linear map không phải bất kỳ function nào.
Một continuous map cũng không phải bất kỳ function nào.
Morphism chính là lời tuyên bố:
“Trong vũ trụ này, đây là loại biến đổi mà chúng ta cho rằng có ý nghĩa.”
Và Category Theory nghiên cứu vũ trụ đó.
Một phép ẩn dụ cuối cùng: bản đồ metro của toán học
Hãy tưởng tượng toàn bộ toán học là một thành phố khổng lồ.
Có khu:
1Đại số
bên kia là:
1Hình học
xa hơn nữa:
1Topology
rồi:
1Logic
và khu công nghệ khá ồn ào:
1Computer Science
Nếu học từng ngành riêng, ta giống người đứng dưới mặt đất.
Ta thấy:
1một ngôi nhà
2một cửa hàng
3một con phố
Category Theory giống như bước xuống ga metro.
Dưới lòng đất, ta phát hiện những nơi tưởng cách xa nhau lại được nối bằng những tuyến chung.
1Đại số ───────┐
2 │
3Topology ─────┼──► cùng một pattern
4 │
5Logic ────────┤
6 │
7Programming ──┘
Category Theory không nhất thiết xây thêm một tòa nhà mới.
Nó vẽ bản đồ các đường nối giữa những tòa nhà đã tồn tại.
Và đôi khi, khi bản đồ đủ tốt, ta nhận ra hai khu phố tưởng hoàn toàn khác nhau thực ra đang dùng cùng một hệ thống đường ngầm.
Ưu điểm và hạn chế
Ưu điểm
- Cho một ngôn ngữ chung để mô tả nhiều cấu trúc toán học khác nhau.
- Giúp nhận ra pattern giống nhau giữa các lĩnh vực tưởng như không liên quan.
- Nhấn mạnh morphism và tính bảo toàn cấu trúc thay vì chỉ nhìn object riêng lẻ.
- Functor cho phép nghiên cứu quan hệ giữa các category.
- Natural transformation cho phép nghiên cứu quan hệ giữa các functor.
- Universal property giúp định nghĩa nhiều object bằng hành vi quan hệ thay vì cấu tạo nội tại.
- Có ứng dụng rộng trong đại số, topology, logic và computer science. (Stanford Encyclopedia of Philosophy)
Hạn chế
- Mức độ trừu tượng cao.
- Người mới dễ học thuộc ký hiệu nhưng không hiểu trực giác.
- Không phải bài toán nào cũng nên giải bằng Category Theory.
- Nhiều ví dụ thực sự thú vị đòi hỏi kiến thức đại số hoặc topology trước đó.
- Nếu chỉ học định nghĩa mà không có ví dụ, Category Theory rất dễ biến thành một đám mũi tên đang tổ chức họp kín.
Tổng kết
Category Theory bắt đầu bằng một ý tưởng tưởng như khá vô hại:
1A ──f──► B
Ta có object.
Ta có morphism.
Ta ghép morphism.
Ta có identity.
Xong.
Nghe như chẳng có gì ghê gớm.
Nhưng từ bốn viên gạch nhỏ đó, một cách nhìn toán học mới xuất hiện.
Thay vì liên tục hỏi:
“Vật này được làm từ cái gì?”
ta có thể hỏi:
“Vật này liên hệ với mọi thứ khác như thế nào?”
Rồi object trở thành category.
Morphism trở thành functor.
Functor lại có morphism của riêng nó là natural transformation.
Camera cứ zoom ra.
Những cấu trúc tưởng như xa lạ bắt đầu hiện ra với cùng một bộ xương.
Và có lẽ đó là điều đẹp nhất của Category Theory.
Nó nhắc rằng trong toán học, cũng như rất nhiều thứ ngoài đời, đôi khi ý nghĩa không nằm hoàn toàn bên trong một vật.
Nó nằm trong những con đường nối vật đó với thế giới.
Một chấm đứng một mình chỉ là một chấm.
Nhưng thêm vài mũi tên:
1 ●
2 ↗ ↓
3● ──► ● ──► ●
4 ↘
5 ●
đột nhiên ta có một cấu trúc.
Thêm quy tắc cho những mũi tên ấy, ta có một phạm trù.
Thêm những ánh xạ giữa các phạm trù, ta có functor.
Thêm những ánh xạ giữa các functor, ta lại có một tầng cấu trúc mới.
Và nếu cứ tiếp tục như vậy đủ lâu, có khả năng bạn sẽ nhìn cái ổ cắm điện trong nhà rồi tự hỏi:
“Không biết category của mấy cái adapter này có adjunction không nhỉ?”
Lúc đó thì xin chúc mừng.
Category Theory đã đi vào đầu bạn.
Cảm ơn các bạn đã quan tâm và theo dõi bài viết, hẹn gặp lại ở các bài viết tiếp theo.
Tham khảo
- Samuel Eilenberg & Saunders Mac Lane, General Theory of Natural Equivalences (1945).
- Saunders Mac Lane, Categories for the Working Mathematician. Springer – Categories for the Working Mathematician
- nLab, Category. nLab – Category
- nLab, Functor. nLab – Functor
- Stanford Encyclopedia of Philosophy, Structuralism in the Philosophy of Mathematics. Stanford Encyclopedia of Philosophy
Bình luận