bài tập baz_num_elts từ Tổ chức phần mềm


9

Tôi đang ở bài tập sau trong Cơ sở phần mềm :

(** **** 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 *)
[] *)

Tất cả các câu trả lời tôi đã thấy trên Internet đều nói rằng câu trả lời là 2 và các yếu tố là x và y. Nếu đó là trường hợp, thì nó không rõ ràng đối với tôi các yếu tố . Chắc chắn có hai hàm tạo, nhưng thực sự không thể tạo ra giá trị của kiểu baz .

Không thể tạo giá trị của loại bazxcó loại baz -> baz. ycó loại baz -> bool -> baz. Để có được giá trị của loại, bazchúng ta cần chuyển một giá trị của loại bazcho xhoặc y. Chúng ta không thể nhận được giá trị của loại bazmà không có giá trị của loại baz.

Cho đến nay tôi đã giải thích các yếu tố có nghĩa là các giá trị . Vì vậy, (cons nat 1 nil)(cons nat 1 (cons nat 2 nil))cả hai sẽ là các yếu tố của loại list natvà sẽ có vô số các yếu tố của loại list nat. Sẽ có hai yếu tố của loại bool, đó là truefalse. Theo cách giải thích này, tôi sẽ lập luận rằng không có yếu tố nào thuộc loại baz.

Tôi có đúng không, hoặc ai đó có thể giải thích những gì tôi hiểu lầm?


1
Chắc chắn rồi. Tôi đã thêm một đoạn giải thích lý do tại sao tôi nghĩ không thể tạo ra giá trị của loại baz.
Twernmilt

Đẹp. Đó là những gì tôi nghĩ bạn đang nghĩ. Cảm ơn bạn, Twernmilt. Đối với những gì nó có giá trị, tôi có phản ứng giống như bạn: Tôi cũng mong đợi câu trả lời là không có yếu tố nào baz.
DW

Câu trả lời:


8

Tôi đồng ý với bạn. Có một sự lựa chọn giữa 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.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.