来自软件基金会的baz_num_elts练习


9

我正在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 *)
[] *)

我在互联网上看到的所有答案都说答案是2,元素是x和y。如果是这种情况,那么对我来说,不清楚element是什么意思。当然有两个构造函数,但是实际上无法创建类型baz的值。

baz由于x具有type,因此无法创建type的值baz -> bazy具有类型baz -> bool -> baz。为了获得type的值,baz我们需要将type的值传递bazxy。在没有type值的baz情况下,我们无法获得type 的值baz

到目前为止,我已经解释元素,以平均数值。因此(cons nat 1 nil)(cons nat 1 (cons nat 2 nil))并且都将是type的元素,list nat并且将有无限多个type的元素list nat。将有两个type元素bool,分别是truefalse。根据这种解释,我认为type的元素为零baz

我是正确的,还是有人可以解释我的误解?


1
当然。我添加了一个段落,解释了为什么我认为无法创建type值baz
Twernmilt

真好 那就是我以为你在想的。谢谢,Twernmilt。对于它的价值,我的反应与您相同:我也希望答案是type的元素为零baz
DW

Answers:


8

我同意你的看法。baz和之间有一个双射False

Definition injective : forall {t1 t2}, (t1 -> t2) -> Prop := fun t1 t2 f1 => forall x1 x2, f1 x1 = f1 x2 -> x1 = x2.

Definition surjective : forall {t1 t2}, (t1 -> t2) -> Prop := fun t1 t2 f1 => forall x1, exists x2, f1 x2 = x1.

Definition bijective : forall {t1 t2}, (t1 -> t2) -> Prop := fun t1 t2 f1 => injective f1 /\ surjective f1.

Inductive baz : Type :=
   | x : baz -> baz
   | y : baz -> bool -> baz.

Theorem baz_False : baz -> False. Proof. induction 1; firstorder. Qed.

Goal exists f1 : baz -> False, bijective f1.
Proof.
exists baz_False. unfold bijective, injective, surjective. firstorder.
assert (H2 := baz_False x1). firstorder.
assert (H2 := x1). firstorder.
Qed.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.