annotate a02/agda/practice-nat.agda @ 141:b3f05cd08d24

clean up
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 27 Dec 2020 13:26:44 +0900
parents 25977ccee101
children a60132983557
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
52
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 module practice-nat where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 open import Data.Nat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 open import Data.Empty
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 open import Relation.Nullary
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
6 open import Relation.Binary.PropositionalEquality hiding (_⇔_)
59
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
7 open import logic
52
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
59
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
9 -- hint : it has two inputs, use recursion
52
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 nat-<> : { x y : ℕ } → x < y → y < x → ⊥
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
11 nat-<> = {!!}
52
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
59
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
13 -- hint : use recursion
52
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 nat-<≡ : { x : ℕ } → x < x → ⊥
59
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
15 nat-<≡ = {!!}
52
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
59
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
17 -- hint : use refl and recursion
52
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 nat-≡< : { x y : ℕ } → x ≡ y → x < y → ⊥
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 nat-≡< = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 ¬a≤a : {la : ℕ} → suc la ≤ la → ⊥
59
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
22 ¬a≤a = {!!}
52
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
59
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
24 -- hint : make case with la first
52
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 a<sa : {la : ℕ} → la < suc la
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 a<sa = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
59
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
28 -- hint : ¬ has an input, use recursion
52
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 =→¬< : {x : ℕ } → ¬ ( x < x )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 =→¬< = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
59
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
32 -- hint : two inputs, try nat-<>
52
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 >→¬< : {x y : ℕ } → (x < y ) → ¬ ( y < x )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 >→¬< = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
59
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
36 -- hint : make cases on all arguments. return case1 or case2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
37 -- hint : use with on suc case
52
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 <-∨ : { x y : ℕ } → x < suc y → ( (x ≡ y ) ∨ (x < y) )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 <-∨ = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 max : (x y : ℕ) → ℕ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 max = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 sum : (x y : ℕ) → ℕ
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
45 sum zero y = y
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
46 sum (suc x) y = suc ( sum x y )
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
47
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
48 sum' : (x y : ℕ) → ℕ
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
49 sum' x zero = x
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
50 sum' x (suc y) = suc (sum' x y)
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
51
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
52 sum-sym0 : {x y : ℕ} → sum x y ≡ sum' y x
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
53 sum-sym0 {zero} {zero} = refl
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
54 sum-sym0 {suc x} {y} = cong (λ k → suc k ) (sum-sym0 {x} {y})
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
55 sum-sym0 {zero} {y} = refl
52
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 sum-6 : sum 3 4 ≡ 7
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
58 sum-6 = refl
52
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 sum1 : (x y : ℕ) → sum x (suc y) ≡ suc (sum x y )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 sum1 x y = let open ≡-Reasoning in
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 begin
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 sum x (suc y)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 ≡⟨ {!!} ⟩
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 suc (sum x y )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
68 sum0 : (x : ℕ) → sum 0 x ≡ x
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
69 sum0 zero = refl
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
70 sum0 (suc x) = refl
52
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 sum-sym : (x y : ℕ) → sum x y ≡ sum y x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 sum-sym = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 sum-assoc : (x y z : ℕ) → sum x (sum y z ) ≡ sum (sum x y) z
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 sum-assoc = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 mul : (x y : ℕ) → ℕ
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
79 mul x zero = zero
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
80 mul x (suc y) = sum x ( mul x y )
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
81
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
82 mulr : (x y : ℕ) → ℕ
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
83 mulr zero y = zero
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
84 mulr (suc x) y = sum y ( mulr x y )
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
85
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
86 mul-sym1 : {x y : ℕ } → mul x y ≡ mulr y x
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
87 mul-sym1 {zero} {zero} = refl
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
88 mul-sym1 {zero} {suc y} = begin
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
89 mul zero (suc y)
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
90 ≡⟨⟩
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
91 sum 0 (mul 0 y)
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
92 ≡⟨ cong (λ k → sum 0 k ) {!!} ⟩
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
93 sum 0 (mulr y 0)
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
94 ≡⟨⟩
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
95 mulr (suc y) zero
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
96 ∎ where open ≡-Reasoning
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
97 mul-sym1 {suc x} {y} = {!!}
52
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 mul-9 : mul 3 4 ≡ 12
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 mul-9 = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 mul-distr1 : (x y : ℕ) → mul x (suc y) ≡ sum x ( mul x y )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 mul-distr1 = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 mul-sym0 : (x : ℕ) → mul zero x ≡ mul x zero
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 mul-sym0 = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 mul-sym : (x y : ℕ) → mul x y ≡ mul y x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 mul-sym = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 mul-distr : (y z w : ℕ) → sum (mul y z) ( mul w z ) ≡ mul (sum y w) z
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 mul-distr = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 mul-assoc : (x y z : ℕ) → mul x (mul y z ) ≡ mul (mul x y) z
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 mul-assoc = {!!}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116
141
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
117 evenp : (x : ℕ) → Bool
b3f05cd08d24 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
118 evenp = {!!}