Příklad A: 1 bod
Definition nandb (b1:bool) (b2:bool) : bool
. Admitted.
Example test_nandb1: (nandb true true) = false.
Admitted.
Example test_nandb2: (nandb true false) = true.
Admitted.
Example test_nandb3: (nandb false true) = true.
Admitted.
Example test_nandb4: (nandb false false) = true.
Admitted.
Udělejte totéž pro následující funkci norb.
(Funkce norb by měla vracet true právě tehdy, jestliže oba
argumenty mají hodnotu false.)
Definition norb (b1:bool) (b2:bool) : bool
. Admitted.
Example test_norb1: (norb true true) = false.
Admitted.
Example test_norb2: (norb true false) = false.
Admitted.
Example test_norb3: (norb false true) = false.
Admitted.
Example test_norb4: (norb false false) = true.
Admitted.
Udělejte totéž pro následující funkci andb3.
Tato funkce by měla vracet true právě tehdy, když všechny
tři argumenty mají hodnotu true.)
Definition andb3 (b1:bool) (b2:bool) (b3:bool) : bool
. Admitted.
Example test_andb31: (andb3 true true true) = true.
Admitted.
Example test_andb32: (andb3 false true true) = false.
Admitted.
Example test_andb33: (andb3 true false true) = false.
Admitted.
Example test_andb34: (andb3 true true false) = false.
Admitted.
☐
Příklad B: 2 body
desítkově binárně unárně 0 Z O 1 B1 Z S O 2 B0 (B1 Z) S (S O) 3 B1 (B1 Z) S (S (S O)) 4 B0 (B0 (B1 Z)) S (S (S (S O))) 5 B1 (B0 (B1 Z)) S (S (S (S (S O)))) 6 B0 (B1 (B1 Z)) S (S (S (S (S (S O))))) 7 B1 (B1 (B1 Z)) S (S (S (S (S (S (S O)))))) 8 B0 (B0 (B0 (B1 Z))) S (S (S (S (S (S (S (S O)))))))
Inductive bin : Type :=
| Z
| B0 (n : bin)
| B1 (n : bin).
Doplňte definice níže uvedené funkce incr, která zvetší hodnotu čísla
o jedna, a funkce bin_to_nat, která provede konverzi binárního čísla
na unární.
Fixpoint incr (m:bin) : bin
. Admitted.
Fixpoint bin_to_nat (m:bin) : nat
. Admitted.
Pokud jste tyto funkce pro zvetšení binárního čísla o jedna a
převod binárního čísla na unární definovali správně, následující
"unit testy" by měly projít.
Tyto unit testy samozřejmě plně neprokazují korektnost vaší implementace!
Example test_bin_incr1 : (incr (B1 Z)) = B0 (B1 Z).
Admitted.
Example test_bin_incr2 : (incr (B0 (B1 Z))) = B1 (B1 Z).
Admitted.
Example test_bin_incr3 : (incr (B1 (B1 Z))) = B0 (B0 (B1 Z)).
Admitted.
Example test_bin_incr4 : bin_to_nat (B0 (B1 Z)) = 2.
Admitted.
Example test_bin_incr5 :
bin_to_nat (incr (B1 Z)) = 1 + bin_to_nat (B1 Z).
Admitted.
Example test_bin_incr6 :
bin_to_nat (incr (incr (B1 Z))) = 2 + bin_to_nat (B1 Z).
Admitted.
Další bonusový bod (k výše uvedeným dvěma bodům) dostanete, pokud
se vám podaří dokázat následující tvrzení:
Theorem bin_to_nat_pres_incr : ∀ b : bin,
bin_to_nat (incr b) = 1 + bin_to_nat b.
Proof.
Admitted.
☐
Příklad C: 2 body
Theorem mul_0_r : ∀ n:nat,
n × 0 = 0.
Proof.
Admitted.
Theorem plus_n_Sm : ∀ n m : nat,
S (n + m) = n + (S m).
Proof.
Admitted.
Theorem add_comm : ∀ n m : nat,
n + m = m + n.
Proof.
Admitted.
Theorem add_assoc : ∀ n m p : nat,
n + (m + p) = (n + m) + p.
Proof.
Admitted.
☐
This page has been generated by coqdoc