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, і що елементи - це х і у Якщо це так, то мені незрозуміло, що розуміють під елементами . Звичайно є два конструктори, але фактично неможливо створити значення типу baz .

Неможливо створити значення типу, bazтому що xмає тип baz -> baz. yмає тип baz -> bool -> baz. Для того , щоб отримати значення типу bazми повинні передати значення типу bazабо xабо y. Ми не можемо отримати значення типу, bazне маючи вже значення типу baz.

До сих пір я інтерпретував елементи як середні значення . Отже, (cons nat 1 nil)і (cons nat 1 (cons nat 2 nil))обидва будуть елементами типу, list natі було б нескінченна кількість елементів типу list nat. Були б два елементи типу bool, які є trueі false. Під цим тлумаченням я б стверджував, що є нульові елементи типу baz.

Я прав, чи хтось може пояснити, що я нерозумію?


1
Звичайно. Я додав абзац, що пояснює, чому я думаю, що неможливо створити значення типу 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.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.