Sự khác biệt giữa và hậu quả của việc sử dụng tham số loại và chỉ mục loại là gì?


7

Trong các lý thuyết loại, như Coq's, chúng ta có thể định nghĩa một loại có tham số, như sau:

Inductive ListP (Element : Type) : Type
  := NilP  : ListP Element
   | ConsP : Element -> ListP Element -> ListP Element.

Ngoài ra, chúng ta có thể định nghĩa một loại với một chỉ mục, như thế này:

Inductive ListI : Type -> Type
  := NilI  : forall t, ListI t
   | ConsI : forall t, t -> ListI t -> ListI t.

Câu hỏi của tôi là:

  • Những điều này về cơ bản là khác nhau hay về cơ bản là giống nhau?
  • Hậu quả của việc sử dụng cái này hơn cái kia là gì?
  • Khi nào thì nên sử dụng cái này hơn cái kia?

Câu trả lời:


6

ListP tListI tđẳng cấu: chúng có cùng các hàm tạo.

<prompt>Coq < 12 || 0 < </prompt>Check (NilP, NilI). 
(NilP, NilI)
     : (forall t : Type, ListP t) *
       (forall t : Type, ListI t)

<prompt>Coq < 13 || 0 < </prompt>Check (ConsP, ConsI). 
(ConsP, ConsI)
     : (forall t : Type, t -> ListP t -> ListP t) *
       (forall t : Type, t -> ListI t -> ListI t)

Tuy nhiên Coq tạo ra các nguyên tắc cảm ứng khác nhau.

<prompt>Coq < 14 || 0 < </prompt>Check (ListP_ind, ListI_ind). 
(ListP_ind, ListI_ind)
     : (forall (t : Type) (P : ListP t -> Prop),
        P (NilP t) ->
        (forall (t0 : t) (l : ListP t), P l -> P (ConsP t t0 l)) ->
        forall l : ListP t, P l) *
       (forall P : forall T : Type, ListI T -> Prop,
        (forall t : Type, P t (NilI t)) ->
        (forall (t : Type) (t0 : t) (l : ListI t),
         P t l -> P t (ConsI t t0 l)) ->
        forall (T : Type) (l : ListI T), P T l)

Nguyên tắc cảm ứng ListIđòi hỏi thuộc tính phải là tham số trong loại phần tử ( P : forall T, ListI T -> Prop) trong khi nguyên tắc cảm ứng ListPcó thể được khởi tạo ở bất kỳ loại nào t( P : ListP t -> Prop). Đây là một điểm yếu của front-end của Coq, ở chỗ nó không thông minh về các loại đệ quy không đồng nhất; bạn có thể định nghĩa thủ công cùng một nguyên tắc cảm ứng (máy đánh chữ chấp nhận nó, điều này không có gì đáng ngạc nhiên khi nó được ListP_indbiến đổi bởi sự đẳng cấu rõ ràng giữa ListPListI).

Các hình thức tham số ListPlà đơn giản và dễ dàng hơn để sử dụng ra khỏi hộp. Biểu ListImẫu có thể khái quát thành đệ quy không đồng nhất, trong đó các tham số trong các cuộc gọi đệ quy không phải là bản gốc. Xem ví dụ về đa hình và kiểu dữ liệu quy nạp .


3
Điều đó có ý nghĩa. Vì vậy, nguyên tắc chung là các chỉ số có thể được sử dụng cho mọi thứ, các tham số chỉ có thể được sử dụng khi sử dụng cùng một giá trị trong kết luận của tất cả các hàm tạo, nhưng các tham số được ưa thích hơn vì chúng làm cho cảm ứng đơn giản hơn.
Warbo

4

Tôi cũng thấy những điều sau đây khá hữu ích, đặc biệt là các ý kiến:

http://homotopytypetheory.org/2011/04/10/just-kidding-under Hiểu -identity-Friination-in-homotopy-type-theory /

Lý do là vì loại nhận dạng Id AMN là Thông số được xác định bởi A và M, nhưng chỉ số này được chỉ định bởi N. Thuật ngữ này thể hiện sự khác biệt giữa một họ các loại được xác định theo cảm tính (trong đó các đối số của họ được gọi là tham số) và một nhóm gia đình được định nghĩa theo kiểu cảm ứng (trong đó các đối số được gọi là chỉ số). Các tham số xuất hiện trước 'mu' (đối với mỗi lựa chọn tham số, có một loại quy nạp). Các chỉ số là các nhóm trong vòng lặp Các mối quan hệ cùng lúc xác định toàn bộ họ các loại, vì vậy các trường hợp khác nhau của gia đình có thể tham chiếu lẫn nhau. Kết quả là, các chỉ mục có thể xảy ra không đồng nhất (ví dụ trong loại kết quả của các hàm tạo), trong khi các tham số được cố định một lần và mãi mãi.

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.