Мені хотілося б знати, чи універсально кількісний тип : є підтипом, або окремий випадок екзистенційно кількісно визначеного типу з однаковим підписом:
Я б сказав "так": Якщо щось відповідає дійсності "для всіх X" ( ), то воно також повинно бути правдою "для деякого X" ( \ існує X ). Тобто, оператор з " \ forall " є просто більш обмеженою версією того самого виразу з " \ існує ": ∀X, P (X) \ overset? \ Означає ∃X, P (X).
Я десь помиляюся?
Передумови: Чому я це запитую?
Я вивчаю екзистенційні типи, щоб зрозуміти, чому і як "Анотаційні [дані] типи мають екзистенціальний тип" . Я не можу зрозуміти це поняття лише з теорії; Мені потрібні і конкретні приклади.
На жаль, хороших прикладів коду важко знайти, оскільки більшість мов програмування мають лише обмежену підтримку екзистенційних типів. (Наприклад, підстановочні символи Haskell
forall
або Java?
.) З іншого боку, універсально кількісні типи підтримуються багатьма останніми мовами через "generics".Що ще гірше, схоже , що дженерики легко легко змішуються з екзистенціальними типами , що ще важче розмежовує екзистенціальність від універсальних типів. Мені цікаво, чому таке змішування відбувається так легко. Відповідь на це питання може пояснити це: Якщо універсальні типи справді є лише окремим випадком екзистенціальних типів, то не дивно, що загальні типи, наприклад, Java
List<T>
, можна трактувати будь-яким способом.
forall x. P(x)
тоді exists x. P(x)
. Чи враховують системи типів це під час перевірки типів ... Я поняття не маю. +1 для цікавого питання.