Estou no seguinte exercício no Software Foundations :
(** **** 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 *)
[] *)
Todas as respostas que eu vi na Internet dizem que a resposta é 2 e que os elementos são x e y. Se for esse o caso, não está claro para mim o que se entende por elementos . Certamente existem dois construtores, mas é impossível criar um valor do tipo baz .
É impossível criar um valor do tipo bazporque xtem o tipo baz -> baz.ytem o tipo baz -> bool -> baz. Para obter um valor do tipo baz, precisamos passar um valor do tipo bazpara xou y. Não podemos obter um valor do tipo bazsem já ter um valor do tipo baz.
Até agora, tenho interpretado elementos para significar valores . Então (cons nat 1 nil)e(cons nat 1 (cons nat 2 nil)) ambos seriam elementos do tipo list nate haveria um número infinito de elementos do tipo list nat. Haveria dois elementos do tipo bool, que são truee false. Sob essa interpretação, eu argumentaria que existem zero elementos do tipo baz.
Estou correto ou alguém pode explicar o que estou entendendo mal?
baz.
baz.