Я хотел бы знать, является ли универсально-количественный тип : T a = ∀ X : { a ∈ X , f : X → { T , F } } подтипом или частным случаем экзистенциально-количественной оценки тип T e с той же сигнатурой: T e = ∃ X : { a ∈ X , f : X → { T , F } }
Я бы сказал «да»: если что-то верно «для всех X» ( ), то это также должно быть правдой «для некоторых X» ( ∃ X ). То есть утверждение с « ∀ » - это просто более ограниченная версия того же утверждения с « ∃ »: ∀ X , P ( X ) ?
Я где то не прав?
Фон: почему я спрашиваю это?
Я изучаю экзистенциальные типы, чтобы понять, почему и как «Абстрактные типы данных имеют экзистенциальный тип» . Я не могу получить хорошее представление об этой концепции только из теории; Мне тоже нужны конкретные примеры.
К сожалению, хорошие примеры кода трудно найти, потому что большинство языков программирования имеют ограниченную поддержку экзистенциальных типов. (Например, подстановочные знаки Хаскелла
forall
или Java?
.) С другой стороны, универсально количественно определенные типы поддерживаются многими современными языками посредством «обобщений».Что еще хуже, дженерики, кажется, также легко смешиваются с экзистенциальными типами , что еще труднее отличить экзистенциальные от универсальных типов. Мне любопытно, почему эта путаница происходит так легко. Ответ на этот вопрос может объяснить это: если универсальные типы действительно являются лишь частным случаем экзистенциальных типов, то неудивительно, что универсальные типы, например Java
List<T>
, могут интерпретироваться в любом случае.
forall x. P(x)
тогда exists x. P(x)
. Учитывают ли системы типов это при проверке типов ... Понятия не имею. +1 за интересный вопрос.