Je suis à l'exercice suivant dans 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 *)
[] *)
Toutes les réponses que j'ai vues sur Internet disent que la réponse est 2 et que les éléments sont x et y. Si tel est le cas, il n'est pas clair pour moi ce que l'on entend par éléments . Il y a certainement deux constructeurs, mais il est impossible de créer réellement une valeur de type baz .
Il est impossible de créer une valeur de type baz
car x
has type baz -> baz
. y
a un type baz -> bool -> baz
. Afin d'obtenir une valeur de type, baz
nous devons transmettre une valeur de type baz
à x
ou y
. Nous ne pouvons pas obtenir une valeur de type baz
sans avoir déjà une valeur de type baz
.
Jusqu'à présent, j'ai interprété les éléments comme des valeurs moyennes . Ainsi (cons nat 1 nil)
et (cons nat 1 (cons nat 2 nil))
seraient tous les deux des éléments de type list nat
et il y aurait un nombre infini d'éléments de type list nat
. Il y aurait deux éléments de type bool
, qui sont true
et false
. Selon cette interprétation, je dirais qu'il n'y a aucun élément de type baz
.
Ai-je raison, ou quelqu'un peut-il expliquer ce que je comprends mal?
baz
.baz
.Réponses:
Je suis d'accord avec toi. Il y a une bijection entre
baz
etFalse
.la source