Я пытаюсь понять этот пост в блоге о расширении ConstraintKinds
.
В разделе комментариев был пост, который я совершенно не понял. Вот:
Адам М говорит: 14 сентября 2011 г., 19:53 UTC
Вау, это звучит здорово. Планируется ли он стать частью официального
GHC 7.4
? Кроме того, означает ли это, что вы ввели третью постановку в системную грамматику FC2 для видов? В настоящее время у него есть*
иk~>k
как единственные альтернативы, гдеk1~>k2
(в основном) разновидность(forall a::k1 . (t::k2))
. Похоже, это добавитk1==>k2
, что-то вроде(a::k1 => (t::k2))
. Или эти два вида на самом деле одинаковы?
Может кто-нибудь, пожалуйста, проанализируйте это шаг за шагом или, по крайней мере, предоставьте несколько ссылок, которые помогли бы мне самому обдумать это. Некоторые ключевые моменты, которые я должен выделить:
- Что такое грамматика System FC2 для видов? (Возможно, основной и самый общий, ответ которого включает два других.)
- Я пытался объяснить, почему
k1~>k2
(в основном) похоже на(forall a::k1 . (t::k2))
? Насколько я понимаю,~>
- это какое-то специальное обозначение для->
в видах, поскольку*
иk1 -> k2
единственные обитатели стандартной системы видов Haskell (соответствует их описанию: в настоящее время у него есть*
иk~>k
как единственные альтернативы). Таким образом, формула(forall a::k1 . (t::k2))
означает, что если мы возьмем обитаемый типk1
, он может быть отображен на другойk2
тогда и только тогда, когда он обитаемый (из-за Curry-Howard работает для типов так же, как и для типов). Это правильно? (P.S.: я вижу, как эта интуиция дает сбои, если я не понимаю понятия среды обитания для видов; соответствуют ли видыИстиннымдоказуемым формулам (см. комментарии), когда они имеют обитаемый тип как обитатель или произвольный тип? Во втором случае интуиция подводит.) - Что означает
=>
в формуле дляk1==>k2
, а именно(a::k1 => (t::k2))
?
Ответ, который получил этот комментарий:
Макс говорит: 14 сентября 2011 г., 21:11 UTC
Адам: это не так сложно! Он просто добавляет базовый вид
Constraint
к грамматике видов. Это своего рода типы, населенные значениями, как и существующие типы*
и#
.
Итак, автор утверждает, что Адам М слишком усложнил расширение. Их ответ довольно легко понять. В любом случае, даже если комментарий Адама М не соответствует действительности, я думаю, что он полностью заслуживает внимания, поскольку он познакомил меня с некоторыми незнакомыми понятиями.
S to *, #, Constraint, ... | S to (S -> S)
? Кстати, во втором вопросе я предложил собственное утверждение. Можете ли вы прокомментировать это, пожалуйста? Кроме того, не могли бы вы прокомментировать понятие среды обитания для видов (которое я также обсуждал во втором пункте). - person Zhiltsoff Igor   schedule 19.04.2021((P → Q) → P) → P
) ~в целом верен~ в классической логике, но недоказуем, поскольку является законом. Таким образом, нет ни функции типа∀ a b. ((a -> b) -> a) -> a
, ни оператора типа∀ p q. ((p -> q) -> p) -> q
, поскольку они соответствовали бы несуществующему доказательству закона Пирса. Я, наконец, понял это правильно? - person Zhiltsoff Igor   schedule 19.04.2021