Tôi hoàn toàn là người mới bắt đầu ở Coq và tôi đang cố gắng thực hiện một số công cụ lý thuyết thể loại như một bài tập.
Tôi lướt một chút trong số các git repos của nhiều triển khai như vậy (HoTT, đồng hành Coq của Awode, v.v.) dường như mỗi dự án đều thực hiện một cái gì đó giống như vậy
Record Category : Type :=
mkCategory{
ob : Type ;
mor : ob -> ob -> Type ;
compose : forall x y z : ob,
mor x y -> mor y z -> mor x z ;
identity : forall x, mor x x ;
(* ... axioms ... *)
}.
Đó là loại tự nhiên, xem xét hầu hết định nghĩa của các thể loại trong cuốn sách hiện đại. Tuy nhiên, tôi cảm thấy rằng việc triển khai nội bộ sẽ dễ dàng hơn (nếu không nhầm, đó là định nghĩa phổ biến vào thời của Grothendieck):
Định nghĩa. Một danh mục là dữ liệu của
- một bộ / lớp của các đối tượng,
- một bộ / lớp của hình thái,
- chức năng và (là viết tắt của nguồn ,cho mục tiêu vàcho danh tính )
- một chức năng tên miền là sản phẩm sợi của
đáp ứng một số tiên đề ...
Ưu điểm của định nghĩa như vậy là nó khái quát trực tiếp bằng cách thay thế "tập hợp / lớp" bằng "đối tượng của một số loại" và "hàm" bằng "hình thái của thể loại này", dẫn đến khái niệm phạm trù nội bộ . (Sau đó, bạn có thể nói về các loại cấu trúc liên kết / khác biệt hoặc các loại trong một topos, v.v.)
Vấn đề của tôi là chính thức hóa sản phẩm sợi trong Coq. Attemp đầu tiên của tôi sẽ là làm một cái gì đó như
Record Category : Type :=
mkCategory{
ob : Type ;
mor : Type ;
s : mor -> ob ;
t : mor -> ob ;
compose : mor -> mor -> option mor ;
i : ob -> mor ;
adequacy : forall f g : mor,
(exists h, (compose f g) = (some h)) -> (t f = s g) ;
(* ... axioms ... *)
}.
Nhưng tôi cảm thấy điều đó có thể dẫn đến một số mã khó hiểu sau này. Ví dụ, các tác phẩm xích sẽ khó đọc.
Có một dự án với việc thực hiện dựa trên định nghĩa nội bộ? Có cách nào nhanh chóng để xác định sản phẩm sợi tôi cần trong Coq không?
Biên tập. Nhân tiện, tôi thấy rất nhiều
Ob :> Type
thay vì
Ob : Type
Ý nghĩa của phần phụ ">" là gì? Từ tài liệu, có vẻ như đó là một kiểu ép buộc . Chính xác điều này có nghĩa là gì?
mor
phụ thuộc vào s
, và t
, ví dụ mor: forall s t : ob, Type
.
Ob
)?