Software Foundationsによる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であると言っています。その場合、要素の意味がわかりません。確かに2つのコンストラクタがありますが、実際にタイプbazの値を作成することは不可能です。

これは、型の値を作成することは不可能ですbazので、x種類を持っていますbaz -> bazyタイプがありbaz -> bool -> bazます。型の値を取得するためにbaz、我々は、型の値を渡す必要があるbazのいずれかにxy。私たちは、型の値を取得することはできませんbazすでに型の値を持たずにbaz

これまで、要素を意味するものとして解釈してきました。したがって(cons nat 1 nil)(cons nat 1 (cons nat 2 nil))両方とも型list natの要素であり、型の要素は無限に存在しますlist nat。との2つのタイプの要素booltrueありfalseます。この解釈の下では、タイプの要素はゼロであると私は主張しbazます。

私は正しいですか、それとも誰かが私が誤解していることを説明できますか?


1
承知しました。typeの値を作成することが不可能だと思う理由を説明する段落を追加しましたbaz
Twernmilt 2014

いいね。それはあなたが考えていると私が思ったものです。ありがとう、Twernmilt。価値があることについては、私はあなたと同じ反応をします。私も、タイプの要素がゼロであるという答えを期待していたでしょうbaz
DW

回答:


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.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.