baz_num_elts แบบฝึกหัดจากรากฐานซอฟต์แวร์


9

ฉันกำลังฝึกหัดต่อไปนี้ในมูลนิธิซอฟต์แวร์ :

(** **** 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 หากเป็นเช่นนั้นก็ไม่ชัดเจนสำหรับฉันความหมายขององค์ประกอบคืออะไร มีคอนสตรัคเตอร์สองตัว แต่เป็นไปไม่ได้ที่จะสร้างมูลค่าของประเภทบา

มันเป็นไปไม่ได้ที่จะสร้างค่าของชนิดbazเพราะมีประเภทx มีประเภท เพื่อที่จะได้รับค่าของชนิดที่เราต้องส่งค่าจากประเภทนี้อย่างใดอย่างหนึ่งหรือ เราไม่สามารถรับค่าประเภทโดยที่ไม่มีค่าประเภทแล้วbaz -> bazybaz -> bool -> bazbazbazxybazbaz

จนถึงขณะนี้ผมได้รับการแปลความหมายขององค์ประกอบที่จะเฉลี่ยค่า ดังนั้น(cons nat 1 nil)และ(cons nat 1 (cons nat 2 nil))ทั้งสองจะเป็นองค์ประกอบของประเภทและจะมีจำนวนอนันต์ขององค์ประกอบของประเภทlist nat list natจะมีสององค์ประกอบของประเภทboolซึ่งเป็นและtrue ภายใต้การตีความนี้ผมจะเถียงว่ามีศูนย์องค์ประกอบของประเภทfalsebaz

ฉันถูกต้องหรือมีคนอธิบายสิ่งที่ฉันเข้าใจผิดได้ไหม?


1
แน่ใจ bazฉันได้เพิ่มวรรคอธิบายเหตุผลที่ผมคิดว่ามันเป็นไปไม่ได้ที่จะสร้างค่าของชนิด
Twernmilt

ดี นั่นคือสิ่งที่ฉันคิดว่าคุณกำลังคิด ขอบคุณ Twernmilt สำหรับสิ่งที่คุ้มค่าผมมีปฏิกิริยาเดียวกันที่คุณทำ: bazฉันก็คาดว่าจะมีคำตอบที่เป็นไปได้ว่ามีศูนย์องค์ประกอบของประเภท
DW

คำตอบ:


8

ฉันเห็นด้วยกับคุณ. มี bijection ระหว่างและbazFalse

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.