Những điểm sửa chữa là loại danh sách Haskell?


9

Hãy nói rằng danh sách được định nghĩa là

List a = Nil | Cons a (List a)

Vậy thì, trong Haskell là List xđiểm cố định lớn nhất hay ít nhất? Tôi yêu cầu bởi vì lfp nên loại trừ các danh sách vô hạn (nhưng bạn có thể xây dựng chúng trong Haskell), trong khi gfp nên loại trừ các danh sách hữu hạn.

Câu trả lời:


4

Điều thích hợp là thiết lập

data ListF a x = Nil | Cons a x

Bây giờ bạn có thể viết

newtype Mu f= Mu (forall a.(f a->a)->a)
data Nu f   = forall a. Nu a (a->f a)

Trong Haskell chúng ta có thể quan sát điều đó Mu ListFNu ListFtrùng khớp. Vì vậy, nó có thể là một trong hai (!). (một nguồn trên khiếu nại này: http://www.cs.ox.ac.uk/jeremy.g Ribbon / publications / adt.pdf )

Ngoài ra, chúng tôi có thể chứng minh mọi thứ bằng cách cảm ứng trên tất cả các danh sách và nhận bằng chứng hoạt động miễn là chúng tôi giới hạn việc quan tâm đến những người hữu hạn, như được mô tả ở đây: http://www.cs.ox.ac.uk/jeremy.g Ribbon / ấn phẩm / nhanh + lỏng.pdf

Hai tài liệu tham khảo khác về điều này là:


Tôi nghĩ rằng bạn đang thiếu một x trong khai báo kiểu dữ liệu đó ...
miniBill

2
Có một lý do Jeremy gọi tờ giấy đó là "nhanh & lỏng". Câu trả lời này chính xác là loại từ chối mà tôi đang nói đến. Đó là điểm cố định lớn nhất, kết thúc của câu chuyện. Ví dụ, bài báo được liên kết đầu tiên của Jeremy là về điều đó.
Andrej Bauer

10

Đó là điểm cố định lớn nhất, hoặc đại số cuối cùng, tùy thuộc vào cách bạn thiết lập mọi thứ. Trong Haskell không thể xác định kiểu dữ liệu của danh sách hữu hạn vì Haskell không có kiểu quy nạp, chỉ có kiểu quy nạp. Nhiều người đang phủ nhận về vấn đề đặc biệt này.


Nhiều người đang từ chối?
miniBill

2
Chắc chắn, tôi gặp những người cố gắng chứng minh mọi thứ bằng cách cảm ứng trên danh sách, cây cối, v.v. trong Haskell. Họ giả vờ tất cả các kiểu dữ liệu này là quy nạp.
Andrej Bauer

Và bạn không thể chứng minh mọi thứ bằng cách cảm ứng trong danh sách?
miniBill

2
Bạn không thể chứng minh các thuộc tính của loại [a]trong Haskell bằng cảm ứng. Bạn có thể làm điều đó cho một tập hợp con của các giá trị, cụ thể là danh sách hữu hạn. Nhưng đây không phải[a] là những gì .
Andrej Bauer
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.