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 bazperché xha tipo baz -> baz. yha tipo baz -> bool -> baz. Per ottenere un valore di tipo bazè necessario passare un valore di tipo baza xo y. Non possiamo ottenere un valore di tipo bazsenza 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 nate ci sarebbe un numero infinito di elementi di tipo list nat. Ci sarebbero due elementi di tipo bool, che sono truee false. Sotto questa interpretazione, direi che ci sono zero elementi di tipo baz.
Ho ragione o qualcuno può spiegare cosa sto fraintendendo?
baz.
baz.