Estoy en el siguiente ejercicio en Fundamentos de software :
(** **** 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 las respuestas que he visto en Internet dicen que la respuesta es 2 y que los elementos son x e y. Si ese es el caso, entonces no me queda claro qué se entiende por elementos . Ciertamente hay dos constructores, pero es imposible crear un valor de tipo baz .
Es imposible crear un valor de tipo baz
porque x
tiene tipo baz -> baz
. y
tiene tipo baz -> bool -> baz
. Para obtener un valor de tipo baz
, necesitamos pasar un valor de tipo baz
a cualquiera x
o y
. No podemos obtener un valor de tipo baz
sin tener ya un valor de tipo baz
.
Hasta ahora he estado interpretando elementos como valores medios . Por lo tanto (cons nat 1 nil)
, y (cons nat 1 (cons nat 2 nil))
ambos serían elementos de tipo list nat
y no habría un número infinito de elementos de tipo list nat
. Habría dos elementos de tipo bool
, que son true
y false
. Según esta interpretación, diría que hay cero elementos de tipo baz
.
¿Estoy en lo cierto, o alguien puede explicar lo que estoy entendiendo mal?
baz
.baz
.Respuestas:
Estoy de acuerdo contigo. Hay una biyección entre
baz
yFalse
.fuente