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 baz
porque x
tem o tipo baz -> baz
.y
tem o tipo baz -> bool -> baz
. Para obter um valor do tipo baz
, precisamos passar um valor do tipo baz
para x
ou y
. Não podemos obter um valor do tipo baz
sem 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 nat
e haveria um número infinito de elementos do tipo list nat
. Haveria dois elementos do tipo bool
, que são true
e 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
.Respostas:
Eu concordo com você. Há uma bijeção entre
baz
eFalse
.fonte