Я читаю учебник по Coq. Он создает тип bool
следующим образом:
Coq < Inductive bool : Set := true | false.
bool is defined
bool_rect is defined
bool_ind is defined
bool_rec is defined
Затем он показывает, что каждая из этих вещей использует "Проверить".
Coq < Check bool_ind.
bool_ind
: forall P : bool -> Prop, P true -> P false -> forall b : bool, P b
Coq < Check bool_rec.
bool_rec
: forall P : bool -> Set, P true -> P false -> forall b : bool, P b
Coq < Check bool_rect.
bool_rect
: forall P : bool -> Type, P true -> P false -> forall b : bool, P b
Я понимаю bool_ind
. В нем говорится, что если что-то выполняется для true
и оно выполняется для false
, то оно выполняется для всех b
в bool
(потому что это единственные два).
Но я не понимаю, что означают выражения для bool_rec
или bool_rect
. Кажется, что P true
(который является Set
для bool_rec
и a Type
для bool_rect
) рассматривается как пропозициональное значение. Что мне здесь не хватает?