Tôi muốn biết liệu loại : T a = ∀ X : { a ∈ X , f : X → { T , F } } là loại phụ, hoặc trường hợp đặc biệt, được định lượng theo kiểu tồn tại loại T e có cùng chữ ký: T e = ∃ X : { a ∈ X , f : X → { T , F } }
Tôi muốn nói "yes": Nếu một cái gì đó là đúng "cho tất cả X" ( ), sau đó nó cũng phải là sự thật "đối với một số X" ( ∃ X ). Đó là, một tuyên bố với ' ∀ ' chỉ đơn giản là một phiên bản hạn chế hơn về báo cáo kết quả tương tự với ' ∃ ': ∀ X , P ( X ) ?
Tôi có sai ở đâu không?
Bối cảnh: Tại sao tôi hỏi điều này?
Tôi đang nghiên cứu các loại hiện sinh để tìm hiểu lý do và cách thức "Các loại [Dữ liệu] Trừu tượng có Loại Hiện sinh" . Tôi không thể nắm bắt tốt khái niệm này từ lý thuyết một mình; Tôi cũng cần những ví dụ cụ thể.
Thật không may, các ví dụ mã tốt rất khó tìm vì hầu hết các ngôn ngữ lập trình chỉ hỗ trợ hạn chế cho các kiểu tồn tại. (Ví dụ: các ký tự đại diện của Haskell
forall
hoặc Java?
.) Mặt khác, các loại được định lượng toàn cầu được hỗ trợ bởi nhiều ngôn ngữ gần đây thông qua "generic".Tệ hơn nữa, thuốc generic dường như cũng dễ dàng bị lẫn lộn với các loại tồn tại , khiến cho việc phân biệt tồn tại với các loại phổ quát càng khó hơn. Tôi tò mò tại sao sự pha trộn này xảy ra dễ dàng như vậy. Một câu trả lời cho câu hỏi này có thể giải thích cho nó: Nếu các loại phổ quát thực sự chỉ là một trường hợp đặc biệt của các loại tồn tại, thì không có gì lạ khi các loại chung, ví dụ như Java
List<T>
, có thể được hiểu theo một trong hai cách.
forall x. P(x)
sau đó exists x. P(x)
. Cho dù các hệ thống loại có tính đến điều này khi kiểm tra các loại ... Tôi không biết. +1 cho một câu hỏi thú vị.