annotate a02/agda/practice-nat.agda @ 406:a60132983557

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