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라고 말합니다. 이 경우 elements의 의미가 명확하지 않습니다 . 확실히 두 개의 생성자가 있지만 실제로 baz 유형의 값을 작성하는 것은 불가능합니다 .

이 유형의 가치를 창출하는 것은 불가능 baz하기 때문에 x유형이 있습니다 baz -> baz. y유형이 baz -> bool -> baz있습니다. 유형의 값을 얻기 위해 baz우리는 유형의 값을 전달해야 baz하나에 x또는 y. type 값이 baz없으면 type 값을 얻을 수 없습니다 baz.

지금까지 을 의미하는 요소 를 해석했습니다 . 그래서 와 두 유형의 요소가 될 것입니다 및 유형의 요소의 무한한 수는있을 것입니다 . 유형의 두 가지 요소가 있으며 , 및 . 이 해석에 따르면 유형이 0 인 요소가 있다고 주장합니다 .(cons nat 1 nil)(cons nat 1 (cons nat 2 nil))list natlist natbooltruefalsebaz

내가 맞습니까, 아니면 누군가 내가 오해 한 것을 설명 할 수 있습니까?


1
확실한. type의 값을 만드는 것이 불가능하다고 생각하는 이유를 설명하는 단락을 추가했습니다 baz.
Twernmilt

좋은. 그게 네가 생각하는 것 같아 고마워요, 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.