Tôi có thể có một loại sao chép phụ thuộc vào loại khác không?


14

Tôi đang đọc qua cuốn sách HoTT và tôi có một câu hỏi (có lẽ rất ngây thơ) về những thứ trong chương một.

Chương giới thiệu loại hàm và sau đó khái quát hóa nó bằng cách làm cho phụ thuộc vào và đó được gọi là loại hàm phụ thuộc .B x : A B : A U ,

f:AB
Bx:A
B:AU,g:x:AB(x)

Tiếp tục, chương sau đó giới thiệu loại sản phẩm và sau đó khái quát hóa nó bằng cách làm cho phụ thuộc vào và đó được gọi là loại cặp phụ thuộc .B x : A B : A U ,

f:A×B
Bx:A
B:AU,g:x:AB(x)

Tôi chắc chắn có thể nhìn thấy một mô hình ở đây.

Tiếp tục, chương sau đó giới thiệu loại sao chép và ... bộ ngắt kết hợp ... không có thảo luận về phiên bản phụ thuộc của loại này.

f:A+B

Có một số hạn chế cơ bản về điều đó hoặc nó chỉ không liên quan đến chủ đề của cuốn sách? Trong mọi trường hợp ai đó có thể giúp tôi với trực giác về lý do tại sao chức năng và loại sản phẩm? Điều gì làm cho hai thứ đó trở nên đặc biệt đến mức chúng được khái quát hóa thành các loại phụ thuộc và sau đó được sử dụng để xây dựng mọi thứ khác?

Câu trả lời:


18

Tổng phụ thuộc là một sự tổng quát chung của cả Descartes sản phẩm các coproduct . Thực tế là cuốn sách HoTT giới thiệu tổng phụ thuộc bằng cách khái quát hóa , bởi vì điều đó không yêu cầu loại boolean được xác định trước.A×B A × BA+BA×B

Các bản sao là một trường hợp đặc biệt của tổng phụ thuộc. Loại cho và , xem xét các loại gia đình xác định bởi và . Tổng phụ thuộc tương đương với . Nhân tiện, bạn cũng có thể lấy làm sản phẩm phụ thuộc .B P : b o o lU P ( f một l s e ) = Một P ( t r u e ) = B Σ b : b o o l P ( b ) Một + B Một × B Π b : b o o l P ( b )ABP:boolUP(false)=AP(true)=Bb:boolP(b)A+BA×Bb:boolP(b)

Bạn hỏi có gì đặc biệt về các sản phẩm và loại chức năng. Có rất nhiều, rất nhiều lý do tại sao và là "cần thiết". Về mặt logic, chúng là cần thiết bởi vì chúng tương ứng với và bởi sự tương ứng giữa các loại mệnh đề (nhưng điều đó chỉ chuyển câu hỏi thành "tại sao và không cần thiết?"). Về mặt lý thuyết danh mục, và là cần thiết bởi vì chúng là sự điều chỉnh trái và phải để thay thế. Đặt một câu hỏi bí mật hơn nếu bạn muốn biết thêm.pi Σ pi


Xin chào. Tôi có thể hỏi làm thế nào bạn có thể hiển thị " và được điều chỉnh bên trái và bên phải để thay thế."? Những loại nào sẽ được sử dụng?
ChoMedit

Tôi đoán rằng sự thay thế là một cái gì đó giống như một functor chéo và hoạt động như là thể loại chỉ mục của nó. Sau đó, có thể danh mục được coi là thể loại. A
ChoMedit

1

Tôi sẽ nói về điều này nhiều kỹ thuật phần mềm-ly.

Bạn đang nói về một loại sản phẩm sao chép mà các nhà xây dựng sau có thể tham chiếu đến các loại trước (trông giống như một sản phẩm mà các trường sau có thể tham chiếu đến các sản phẩm trước)? Điều này có thể có trong Agda sau khi HIT được giới thiệu (trong phiên bản 2.6.0):

-- Auxiliary definition: Nat
data Nat : Set where
  zero : Nat
  succ : Nat -> Nat

-- The HIT I was talking about
data Int : Set where
  positive : Nat -> Int
  negative : Nat -> Int
  -- Note this constructor uses `positive` and `negative`.
  zeroPath : positive zero ≡ negative zero

Bằng cách làm theo bài viết này , nếu trình kiểm tra loại của bạn kiểm tra các định nghĩa được xác định bằng cách sử dụng cú pháp được trình bày trong hình "(26)", tôi tin rằng việc hỗ trợ "các bản sao phụ thuộc" khá đơn giản.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.