Yazılım Temelleri'nden baz_num_elts egzersizi


9

Yazılım Temelleri'nde şu alıştırma yapıyorum :

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

İnternette gördüğüm tüm cevaplar cevabın 2 olduğunu ve elementlerin x ve y olduğunu söylüyor. Eğer durum buysa, o zaman elementler ile ne kastedildiğini net değil . Kesinlikle iki kurucu vardır, ancak aslında baz türünde bir değer yaratmak imkansızdır .

Bir tür değeri oluşturmak imkansız bazçünkü xtür var baz -> baz. ytürü vardır baz -> bool -> baz. Türünde bir değer elde etmek için bazbiz türünde bir değere geçmesi gerekiyor bazbirine xveya y. bazZaten bir tür değerine sahip olmadan bir tür değeri alamıyoruz baz.

Şimdiye kadar yorumlama oldum unsurları ortalama için değerler . Yani (cons nat 1 nil)ve (cons nat 1 (cons nat 2 nil))her ikisi de tip unsurlar list natolacak ve sonsuz sayıda tip unsur olacaktı list nat. Türden iki element olacaktı boolvardır, trueve false. Bu yorum altında, sıfır tip elemanın olduğunu iddia ediyorum baz.

Doğru muyum, yoksa birisi yanlış anladığımı açıklayabilir mi?


1
Elbette. Neden bir tür değer yaratmanın imkansız olduğunu düşündüğümü açıklayan bir paragraf ekledim baz.
Twernmilt

Güzel. Düşündüğünü sanıyordum. Teşekkürler Twernmilt. Değeri için seninle aynı reaksiyona sahibim: Ben de cevabın sıfır tipte eleman olması beklenirdi baz.
DW

Yanıtlar:


8

Size katılıyorum. Arasında bir bijection var bazve 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.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.