Я занимаюсь следующими упражнениями в Фонде программного обеспечения :
(** **** Exercise: 2 stars (baz_num_elts) *)
(** Consider the following inductive definition: *)
Inductive baz : Type :=
| x : baz -> baz
| y : baz -> bool -> baz.
(** How _many_ elements does the type [baz] have?
(* FILL IN HERE *)
[] *)
Все ответы, которые я видел в Интернете, говорят, что ответ - 2, а элементы - x и y. Если это так, то мне не ясно, что подразумевается под элементами . Конечно, есть два конструктора, но на самом деле невозможно создать значение типа baz .
Невозможно создать значение типа, baz
потому что x
имеет тип baz -> baz
. y
имеет тип baz -> bool -> baz
. Чтобы получить значение типа, baz
нам нужно передать значение типа baz
либо в, x
либо y
. Мы не можем получить значение типа, baz
не имея значения типа baz
.
До сих пор я интерпретировал элементы как средние значения . Таким образом, (cons nat 1 nil)
и (cons nat 1 (cons nat 2 nil))
оба будут элементами типа, list nat
и будет бесконечное число элементов типа list nat
. Там будет два элемента типа bool
, которые true
и false
. При таком толковании я бы сказал, что элементов типа ноль baz
.
Я прав, или кто-то может объяснить, что я неправильно понимаю?
baz
.baz
.Ответы:
Я с тобой согласен. Есть биекция между
baz
иFalse
.источник