Sono al seguente esercizio in 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 *)
[] *)
Tutte le risposte che ho visto su Internet dicono che la risposta è 2 e che gli elementi sono xey. In tal caso, non mi è chiaro cosa si intende per elementi . Esistono certamente due costruttori, ma è impossibile creare effettivamente un valore di tipo baz .
È impossibile creare un valore di tipo baz
perché x
ha tipo baz -> baz
. y
ha tipo baz -> bool -> baz
. Per ottenere un valore di tipo baz
è necessario passare un valore di tipo baz
a x
o y
. Non possiamo ottenere un valore di tipo baz
senza avere già un valore di tipo baz
.
Finora ho interpretato elementi per significare valori . Quindi (cons nat 1 nil)
e (cons nat 1 (cons nat 2 nil))
sarebbero entrambi elementi di tipo list nat
e ci sarebbe un numero infinito di elementi di tipo list nat
. Ci sarebbero due elementi di tipo bool
, che sono true
e false
. Sotto questa interpretazione, direi che ci sono zero elementi di tipo baz
.
Ho ragione o qualcuno può spiegare cosa sto fraintendendo?
baz
.
baz
.