Я проводжу наступні вправи з програмного забезпечення :
(** **** 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 *)
[] *)
Усі відповіді, які я бачив в Інтернеті, говорять про те, що відповідь 2, і що елементи - це х і у Якщо це так, то мені незрозуміло, що розуміють під елементами . Звичайно є два конструктори, але фактично неможливо створити значення типу baz .
Неможливо створити значення типу, baz
тому що x
має тип baz -> baz
. y
має тип baz -> bool -> baz
. Для того , щоб отримати значення типу baz
ми повинні передати значення типу baz
або x
або y
. Ми не можемо отримати значення типу, baz
не маючи вже значення типу baz
.
До сих пір я інтерпретував елементи як середні значення . Отже, (cons nat 1 nil)
і (cons nat 1 (cons nat 2 nil))
обидва будуть елементами типу, list nat
і було б нескінченна кількість елементів типу list nat
. Були б два елементи типу bool
, які є true
і false
. Під цим тлумаченням я б стверджував, що є нульові елементи типу baz
.
Я прав, чи хтось може пояснити, що я нерозумію?
baz
.
baz
.