我想知道一个普遍-量化类型是否:Ť 一个 = ∀ X :{ 一个∈ X ,˚F :X → { Ť ,˚F } }是一个存在限定的一个子类型,或特殊情况下,键入Ť Ë具有相同签名:Ť è = ∃ X :{ 一个∈ X ,˚F :X → { Ť ,˚F } }
我会说“是”:如果事情是真实的“对所有X”()的话,那也必须是真实的“对一些X”(∃ X)。也就是说,“声明∀ ”仅仅是与“相同的说法更受限制的版本∃ ”:∀ X ,P (X )?
我在某个地方错了吗?
背景:为什么我要问这个?
我正在研究存在类型,以了解“抽象[数据]类型具有存在类型”的原因和方式。单凭理论我无法很好地理解这个概念。我也需要具体的例子。
不幸的是,很难找到好的代码示例,因为大多数编程语言仅对存在类型提供有限的支持。(例如,Haskell
forall
或Java的?
通配符。)另一方面,许多最近的语言通过“泛型”支持通用量化的类型。更糟糕的是,泛型似乎也很容易与存在类型混为一谈,这使得区分存在类型与通用类型变得更加困难。我很好奇为什么这种混淆如此容易发生。这个问题的答案可能可以解释这一点:如果通用类型确实只是存在类型的特殊情况,那么也就不足为奇了,通用类型(例如Java)
List<T>
可以用任何一种方式进行解释。