Đ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 ListF
và Nu ListF
trù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à: