Я все еще не понимаю, что означает сортировка Set в COQ. Когда использовать Установить, а когда - Тип?
В Hott Набор определяется как тип, удостоверения личности которого уникальны. Но я думаю, что в Coq это имеет другое толкование.
Я все еще не понимаю, что означает сортировка Set в COQ. Когда использовать Установить, а когда - Тип?
В Hott Набор определяется как тип, удостоверения личности которого уникальны. Но я думаю, что в Coq это имеет другое толкование.
Set
означает совершенно разные вещи в Coq и HoTT.
В Coq каждый объект имеет тип, включая сами типы. Типы типов обычно называются сортировками, видами или юниверсами. В Coq (вычислительно релевантные) юниверсы - это Set
и Type_i
, где i
находится в диапазоне натуральных чисел (0, 1, 2, 3, ...). У нас есть следующие включения:
Set <= Type_0 <= Type_1 <= Type_2 <= ...
Эти вселенные имеют следующие типы:
Set : Type_i for any i
Type_i : Type_j for any i < j
Как и в случае с Хоттом, это расслоение необходимо для обеспечения логической последовательности. Как указал Антал, Set
ведет себя в основном как наименьший Type
, за одним исключением: его можно сделать непредсказуемым, когда вы вызываете coqtop
с параметром -impredicative-set
. Конкретно это означает, что forall X : Set, A
имеет тип Set
всякий раз, когда A
. Напротив, forall X : Type_i, A
относится к типу Type_(i + 1)
, даже если A
имеет тип Type_i
.
Причина этого различия в том, что из-за логических парадоксов только самый нижний уровень такой иерархии может быть сделан непредикативным. Тогда вы можете задаться вопросом, почему Set
по умолчанию не делается непредсказуемым. Это потому, что импредикативный Set
несовместим с сильной формой аксиомы исключенного третьего:
forall P : Prop, {P} + {~ P}.
Эта аксиома позволяет вам писать функции, которые могут принимать решения по произвольным предложениям. Обратите внимание, что тип {P} + {~ P}
находится в Set
, а не в Prop
. Обычная форма исключенного среднего, forall P : Prop, P \/ ~ P
, не может использоваться таким же образом, потому что вещи, которые живут в Prop
, не могут быть использованы вычислительно значимым образом.
forall T : Set, S T
имеет тип Set
(вместо Type
) всякий раз, когда S T : Set
.
- person Arthur Azevedo De Amorim; 15.12.2018
(forall P : Prop, {P} + {~ P}) -> False
, верно? Как это работает?
- person Bob; 27.09.2020
Set
, а не Type
?
- person Charlie Parker; 20.06.2021
Second, there is the : Set fragment, which declares that we are defining a datatype that should be thought of as a constituent of programs. Later,
, что я не понимаю, что это значит. Почему он просто не использовал Type
?
- person Charlie Parker; 20.06.2021
В дополнение к ответу Артура:
Поскольку Set
находится внизу иерархии,
из этого следует, что
Set
- это тип «малых» типов данных и типов функций, то есть тех, значения которых прямо или косвенно не связаны с типами.
Это означает, что следующее не удастся:
Fail Inductive Ts : Set :=
| constrS : Set -> Ts.
с этим сообщением об ошибке:
Большие непропозициональные индуктивные типы должны быть в
Type
.
Как следует из сообщения, мы можем исправить это, используя Type
:
Inductive Tt : Type :=
| constrT : Set -> Tt.
Ссылка:
Second, there is the : Set fragment, which declares that we are defining a datatype that should be thought of as a constituent of programs
. Позже, я не понимаю, что это значит. Почему он просто не использовал Type
? (Кстати, действительно хорошая ссылка, которую вы отправили!)
- person Charlie Parker; 20.06.2021
Type
тоже сработало бы. Но нужно иметь в виду, что Type
на самом деле означает Type@{level}
, и проверка типов должна определить уровень вселенной. но в этом случае можно было бы делегировать это решение проверке типов. Вместо этого вы можете исправить это априори. FWIW, Конор МакБрайд формулирует это так: Coq разделяет типы по «размеру» на наборы значений, наборы наборов значений и так далее.
- person Anton Trunov; 20.06.2021
Type 0
, гдеType 0 : Type 1 : Type 2 : …
. - person Antal Spector-Zabusky   schedule 20.09.2016Second, there is the : Set fragment, which declares that we are defining a datatype that should be thought of as a constituent of programs. Later,
, но я не понимаю, что это значит. Почему он просто не использовалType
? - person Charlie Parker   schedule 20.06.2021