Ich bin bei der folgenden Übung 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 *)
[] *)
Alle Antworten, die ich im Internet gesehen habe, besagen, dass die Antwort 2 ist und dass die Elemente x und y sind. Wenn das der Fall ist, ist mir nicht klar, was unter Elementen zu verstehen ist . Es gibt sicherlich zwei Konstruktoren, aber es ist unmöglich, tatsächlich einen Wert vom Typ baz zu erstellen .
Es ist unmöglich, einen Wert vom Typ Typ zu erstellen, baz
da x
dieser Typ hat baz -> baz
. y
hat Typ baz -> bool -> baz
. Um einen Wert vom Typ zu erhalten baz
, müssen wir einen Wert vom Typ baz
entweder an x
oder übergeben y
. Wir können keinen Wert vom Typ erhalten, baz
ohne bereits einen Wert vom Typ zu haben baz
.
Bisher habe ich bisher Interpretation Elemente , um Mittelwerte . Also (cons nat 1 nil)
und (cons nat 1 (cons nat 2 nil))
wären beide Elemente vom Typ list nat
und es würde unendlich viele Elemente vom Typ geben list nat
. Es würde zwei Elemente des Typs geben bool
, nämlich true
und false
. Unter dieser Interpretation würde ich argumentieren, dass es keine Elemente des Typs gibt baz
.
Bin ich richtig oder kann jemand erklären, was ich falsch verstehe?
baz
.baz
.Antworten:
Ich stimme mit Ihnen ein. Es gibt eine Bijektion zwischen
baz
undFalse
.quelle