Я читаю учебник по 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) рассматривается как пропозициональное значение. Что мне здесь не хватает?