Liệu thứ tự khai báo trong một loại quy nạp có vấn đề?


9

Tôi đã tự hỏi nếu thứ tự khai báo của một loại quy nạp có thể quan trọng.

Ví dụ: trong Coq, bạn có thể xác định Natbằng cách:

Inductive Nat :=
  | O : Nat
  | S : Nat -> Nat.

hoặc là

Inductive Nat :=
  | S : Nat -> Nat
  | O : Nat.

Điều này có thể sẽ thay đổi thứ tự của các tham số trong trình loại bỏ được tạo tự động, nhưng đó không phải là vấn đề lớn.

Điều tôi băn khoăn là liệu có thể viết một tuyên bố như

Inductive typewhereordermatters :=
  | cons1 : type1
  | cons2 : type2.

nơi type2là một loại phụ thuộc, tùy thuộc vào cons1? (và trong trường hợp này, viết các khai báo theo thứ tự khác sẽ không có ý nghĩa gì, bởi vì type2sẽ đề cập đến cons1cái chưa tồn tại).

Câu trả lời:


10
  1. Thứ tự không quan trọng. Tôi không thể nghĩ về một trường hợp nó sẽ. Như Andrej Bauer đã chỉ ra trong một bình luận, nếu bạn thay đổi thứ tự thì kết quả là đẳng cấu với nguyên bản .

  2. Một trường hợp không thể phụ thuộc vào một trường hợp khác. Các yếu tố của tổng đại diện cho một lựa chọn, do đó, không có nghĩa là lựa chọn được thực hiện tùy thuộc vào lựa chọn không được thực hiện.


2
Bạn có thể được cụ thể hơn về điểm đầu tiên của bạn. Thứ tự không quan trọng. Nếu bạn thay đổi thứ tự, kết quả là đẳng cấu với nguyên bản.
Andrej Bauer

2
@Dave: Cảm ơn! Tôi đã hỏi câu hỏi này vì (lý thuyết thực nghiệm cao về) các loại quy nạp cao hơn, trong đó hiện tượng này dường như xảy ra , và tôi muốn biết liệu đây cũng có thể là trường hợp với các loại quy nạp thông thường.
Guillaume Brunerie

1
@Guillaume: Tôi không chắc bạn đang chỉ ra hiện tượng gì với liên kết. Các mệnh đề hàm tạo khác nhau của định nghĩa kiểu dữ liệu không thể phụ thuộc lẫn nhau, cho dù đó có phải là kiểu dữ liệu bậc cao hay không. Có lẽ bạn đang nghĩ về các bản ghi phụ thuộc (được sử dụng tại liên kết và có sẵn trong AgdaCoq )?
Noam Zeilberger

1
@Noam: Trong ví dụ về loại quy nạp cao hơn circle, loại của hàm looptạo phụ thuộc vào hàm basetạo.
Guillaume Brunerie

2
@Guillaume: Tôi thấy bây giờ (họ đang giới thiệu một cú pháp thử nghiệm), không biết làm thế nào tôi bỏ lỡ điều đó.
Noam Zeilberger

6

Có thứ tự quan trọng trong cách bạn yêu cầu? Không.

Nhưng liệu lệnh có hoàn toàn không liên quan đến chức năng của trợ lý chứng minh? Một lần nữa, không. Trong Matita, một trợ lý chứng minh rất giống với Coq, thứ tự các hàm tạo được viết theo định nghĩa quy nạp không quan trọng đối với việc kiểm tra kiểu, đặc biệt khi kiểm tra kiểu biểu thức khớp.

Trước tiên, Matita phải kiểm tra xem tất cả các nhà xây dựng đang được đối chiếu trong cơ thể của trận đấu. Nó thực hiện điều này bằng cách đạp xe qua các nhà xây dựng theo thứ tự mà chúng được khai báo. Sau đó, đến loại kiểm tra biểu thức khớp phù hợp, xảy ra theo thứ tự ngược lại, kiểm tra trường hợp cho hàm tạo được khai báo cuối cùng trước. Loại này sau đó được thực hiện và sử dụng để kiểm tra các trường hợp khác.

Điều này rất thường xuất hiện khi viết một biểu thức khớp lớn. Trước tiên, bạn muốn điền vào các trường hợp dễ dàng, để lại các trường hợp khó hơn dưới ký tự đại diện, định kỳ kiểm tra những gì bạn đã viết để đảm bảo nó có ý nghĩa. Đôi khi Matita không thể suy ra loại biểu thức khớp không hoàn chỉnh nhưng sẽ khá vui vẻ làm điều đó nếu bạn điền vào trường hợp cho hàm tạo cuối cùng được xác định trong loại quy nạp.

Tôi đoán, mặc dù tôi không chắc chắn, rằng Coq làm điều gì đó tương tự.

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.