Nền tảng toán học
Phạm trù và hàm tử
Một phạm trù gói gọn các đối tượng và các mũi tên giữa chúng, chỉ cần tuân theo tính kết hợp và phần tử đơn vị; một hàm tử là một phép dịch giữ cấu trúc giữa hai thế giới như vậy, và hoá ra khi đã cố định "các vật liên hệ với nhau ra sao", chính các đối tượng chỉ được xác định sai khác một đẳng cấu duy nhất.
Trực giácCùng một dáng hình, khác bộ áo
Một người phiên dịch, một đồ thị, một mạng lưới các ga tàu nối bằng các tuyến đường, một tập việc cần làm nối bằng quan hệ "phải xảy ra trước" — tất cả đều có chung một khung xương: một số vật (đối tượng) và một số mũi tên giữa chúng có thể nối tiếp nhau. Một phạm trù làm khung xương đó chính xác; một hàm tử là cách vẽ lại một mạng lưới như vậy bên trong một mạng khác mà vẫn giữ nguyên mọi chuỗi mũi tên.
Đại họcPhạm trù: đối tượng, cấu xạ, phép hợp
Định nghĩa: Phạm trù
Một phạm trù gồm một họ đối tượng và, với mỗi cặp, một tập cấu xạ , cùng một quy tắc hợp gửi và tới , và một cấu xạ đơn vị cho mỗi đối tượng.
Hai tiên đề biến dữ liệu này thành một phạm trù: phép hợp kết hợp (, nên một chuỗi mũi tên có đúng một hợp thức, bất kể đặt dấu ngoặc ở đâu) và các phần tử đơn vị trung hoà (, nên hợp với hay không bao giờ đổi một cấu xạ).
| Loại | Tác động trên cấu xạ | Ví dụ điển hình |
|---|---|---|
| Hiệp biến | Gửi tới , cùng hướng | Hàm tử danh sách, hàm tử quên |
| Phản biến | Gửi tới , hướng đảo | Hàm tử không gian đối ngẫu, tiền bó Hom(-,A) |
Nâng caoHàm tử và biến đổi tự nhiên
Một hàm tử gán cho mỗi đối tượng của một đối tượng của , và cho mỗi cấu xạ một cấu xạ , sao cho phép hợp và đơn vị được giữ nguyên: và . Một biến đổi tự nhiên giữa hai hàm tử gán cho mỗi đối tượng một cấu xạ trong , tuân theo hình vuông tự nhiên: với mọi , .
Nếu và đều là đối tượng cuối của (có đúng một cấu xạ từ mọi đối tượng vào mỗi đối tượng đó), thì : có một đẳng cấu giữa chúng, và đó là cấu xạ duy nhất . Phát biểu đối ngẫu đúng cho đối tượng đầu, và do đó cho tích, bằng cùng lập luận áp lên phạm trù các nón ứng viên.
Vì sao đúng?
Không có sự kiện này, "đối tượng cuối" hay "tích" sẽ không được xác định rõ — các cách xây tích khác nhau (chẳng hạn cặp có thứ tự so với mã hoá khác) cần thay thế được cho nhau, và tính duy nhất sai khác một đẳng cấu duy nhất chính là nghĩa chính xác để nói chúng "giống nhau".
Chứng minh
Vì là đối tượng cuối, mọi đối tượng — riêng — có đúng một cấu xạ vào nó; gọi là . Vì là đối tượng cuối, đối xứng, có đúng một .
Xét hợp . Vì là đối tượng cuối, có đúng một cấu xạ , và là một cấu xạ như vậy; vì cũng là một cấu xạ , tính duy nhất buộc .
Bằng lập luận đối xứng dùng tính đối tượng cuối của , hợp phải bằng : .
Một cấu xạ có nghịch đảo hai phía theo định nghĩa là một đẳng cấu, nên là một đẳng cấu với nghịch đảo . Nó là cấu xạ duy nhất vì tính đối tượng cuối của đã nói chỉ có đúng một cấu xạ như vậy — bị buộc phải như thế từ đầu, và nó chỉ đơn giản là hoá ra khả nghịch.
Nếu là một hàm tử và là một đẳng cấu trong với nghịch đảo , thì là một đẳng cấu trong , với nghịch đảo .
Vì sao đúng?
Đây là điều làm hàm tử trở thành phép dịch đáng tin: một hàm tử không bao giờ vô tình phá một đẳng cấu thành hai đối tượng thật sự khác nhau, nên việc phân loại đối tượng "sai khác một đẳng cấu" là câu hỏi hàm tử tôn trọng.
Chứng minh
Vì và nghịch đảo lẫn nhau, và .
Áp lên phương trình đầu. Hàm tử giữ phép hợp, nên ; hàm tử giữ đơn vị, nên . Kết hợp với cho .
Áp lên phương trình thứ hai tương tự: và , nên từ ta được .
Hai phương trình trên nói chính xác rằng là nghịch đảo hai phía của . Một cấu xạ có nghịch đảo hai phía là một đẳng cấu, nên là một đẳng cấu với nghịch đảo , như đã khẳng định.
Đại họcỨng dụng: lập trình hàm và di trú cơ sở dữ liệu
Mọi ngôn ngữ hàm chính thống đều có lớp kiểu `Functor` chính vì các container như danh sách, cây và `Maybe`/`Option` là hàm tử trên phạm trù các kiểu và hàm: `fmap` chính là trên cấu xạ, và các luật hàm tử , chính là các tiên đề trên. `Monad` tinh chỉnh thêm với hai biến đổi tự nhiên (`return` và `join`) thoả các luật chặt kiểu hình vuông tự nhiên. Ngoài lập trình, di trú dữ liệu theo hàm tử của David Spivak mô hình một lược đồ cơ sở dữ liệu là một phạm trù nhỏ (bảng là đối tượng, khoá ngoại là cấu xạ) và một cuộc di trú lược đồ là một hàm tử giữa hai phạm trù như vậy, nên "chuyển dữ liệu đúng" nghĩa đen là "là một hàm tử" — bảo toàn phép hợp đảm bảo di trú qua một lược đồ trung gian cho cùng kết quả với di trú trực tiếp.
Ví dụ: Kiểm luật hàm tử cho danh sách
Lấy cho danh sách, định nghĩa bằng áp hàm lên mọi phần tử: . Kiểm cả hai luật hàm tử trên danh sách cụ thể với và .
Lời giải
Luật một, : áp hàm đơn vị theo từng phần tử cho , đúng là . Điều này đúng cho mọi danh sách, không chỉ danh sách này, vì áp "không làm gì" lên mỗi phần tử thì không làm gì cho danh sách.
Luật hai, : tính vế trái trước. , nên .
Giờ vế phải: , rồi .
Cả hai vế đều bằng , xác nhận luật trên ví dụ này; chứng minh tổng quát là cùng tính toán với thay cho , vì không bao giờ đổi thứ tự hay bỏ phần tử.
Ví dụ: Di trú lược đồ như một hàm tử
Một lược đồ có bảng `Person` và `City`, với khoá ngoại `livesIn : Person -> City`. Lược đồ mới tách `Person` thành `Person` và `Contact`, với `hasContact : Person -> Contact` và `livesIn2 : Contact -> City`. Mô tả cuộc di trú như một hàm tử và giải thích bảo toàn phép hợp mang lại gì.
Lời giải
Mô hình mỗi lược đồ như một phạm trù: đối tượng là bảng, cấu xạ là khoá ngoại hợp tự do (nên có hợp như một phần sinh). Cuộc di trú gửi , , và cấu xạ tới cấu xạ hợp trong .
Để là hàm tử, nó phải gửi đơn vị tới đơn vị (tầm thường ở đây) và tôn trọng phép hợp: mọi chuỗi khoá ngoại xây trong từ phải ánh xạ tới cùng chuỗi xây từ , cùng thứ tự, không bỏ hay đổi bước.
Đây chính xác là điều định lý "hàm tử giữ phép hợp" mang lại cho kỹ sư: nếu một truy vấn ghép với qua ở lược đồ cũ, dịch mỗi bảng và ánh xạ tới đường hai bước rồi thực thi ghép cho ra cùng đáp án với dịch cả truy vấn như một khối — dữ liệu di trú theo từng bảng được đảm bảo nhất quán với dữ liệu di trú theo từng truy vấn, chính xác vì .
Cặp phương trình nào là hai tiên đề phạm trù?
Một hàm tử phản biến gửi tới một cấu xạ đi hướng nào?
Trong di trú dữ liệu theo hàm tử của Spivak, di trú lược đồ tương ứng với gì?
Nếu là cấu xạ duy nhất giữa hai đối tượng cuối, định lý nói gì về ?
Tài liệu tham khảo
- Saunders Mac Lane (1998). Categories for the Working Mathematician
- Emily Riehl (2016). Category Theory in Context
- David I. Spivak (2012). Functorial Data Migration · arXiv:1009.1166