annotate day.agda @ 1:fa30a385957d default tip

...
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Thu, 27 Feb 2020 19:23:07 +0900
parents 99728ee0d697
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 module day where
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
1
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
3 open import Relation.Binary.PropositionalEquality
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
4
0
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 data day : Set where
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 monday : day
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 tuesday : day
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 wednesday : day
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 thursday : day
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 friday : day
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 saturday : day
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 sunday : day
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 -- ↑はただのデータ
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 nextWeekday : day → day
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 nextWeekday monday = tuesday
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 nextWeekday tuesday = wednesday
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 nextWeekday wednesday = thursday
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 nextWeekday thursday = friday
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 nextWeekday friday = monday
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 nextWeekday saturday = monday
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 nextWeekday sunday = monday
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 hoge : day → day
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 hoge x = nextWeekday x
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 data bool : Set where
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 true : bool
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 false : bool
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 negb : bool → bool
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 negb true = false
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 negb false = true
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 andb : bool → bool → bool
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 -- andb true true = true
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 -- andb true false = false
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 -- andb false true = false
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 -- andb false false = false
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 andb true b = b
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 andb false _ = false
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 orb : (x y : bool) → bool
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 orb true _ = true
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 orb false y = y
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47
1
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
48 -- data _≡_ {a} { A : Set a} ( x : A ) : A → Set a where
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
49 -- refl : x ≡ x
0
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 testOrb1 : (orb true false) ≡ true
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 testOrb1 = refl
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 data nat : Set where
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 O : nat
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 Succ : nat → nat
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 pred : nat → nat
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 pred O = O
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 pred (Succ x) = x
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 minustwo : nat → nat
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 minustwo x = pred (pred x)
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 evenb : nat → bool
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 evenb O = true
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 evenb (Succ O) = false
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 evenb (Succ (Succ x)) = evenb x
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 open import Data.Nat.Base
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 factorial : ℕ → ℕ
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 factorial zero = 1
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 factorial (suc x) = x * (factorial (x))
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 beqNat : ℕ → ℕ → bool
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 beqNat zero zero = true
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 beqNat zero (suc y) = false
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 beqNat (suc x) zero = false
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 beqNat (suc x) (suc y) = beqNat x y
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 -- beqNat x y with x | y
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 -- beqNat x y | zero | zero = true
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 -- beqNat x y | zero | suc a = false
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 -- beqNat x y | suc z | zero = false
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 -- beqNat x y | suc z | suc a = beqNat z a
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 open import Data.Nat.Properties
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 open import Data.Empty
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 n+0 : ( n : ℕ ) → ( n + 0 ) ≡ n
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 n+0 zero = refl
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 n+0 (suc x) rewrite ( +-comm (suc x) 0 ) = refl
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
94
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 andbTrueElim2 : ( b c : bool ) → (andb b c ) ≡ true → c ≡ true
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 -- andbTrueElim2 true c d with d
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 -- andbTrueElim2 true .true d | refl = refl
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 andbTrueElim2 _ true d = refl
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 andbTrueElim2 false false ()
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 andbTrueElim2 true false ()
99728ee0d697 day 1...
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
101
1
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
102 mult0r : ( n : ℕ ) → ( n * zero) ≡ zero
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
103 mult0r zero = refl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
104 -- mult0r (suc n) = mult0r n
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
105 mult0r (suc n) rewrite ( *-comm (suc n) 0 ) = refl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
106
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
107 double : (n : ℕ ) → ℕ
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
108 double zero = zero
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
109 double (suc x) = suc ( suc ( double x))
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
110
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
111 sucEqPlus1 : ( n : ℕ ) → (n + 1) ≡(suc n)
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
112 sucEqPlus1 x rewrite (+-comm x 1 ) = refl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
113
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
114
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
115 plusNSm : (n m : ℕ ) → (suc ( n + m)) ≡ (n + suc (m))
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
116 plusNSm zero zero = refl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
117 plusNSm zero (suc y) = refl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
118 plusNSm (suc x) zero rewrite sucEqPlus1 x | n+0 x = refl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
119 plusNSm (suc x) (suc y) = cong (suc) (plusNSm x (suc y))
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
120
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
121 doublePlus : (n : ℕ ) → (double n) ≡ (n + n)
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
122 doublePlus zero = refl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
123 doublePlus (suc n) rewrite (doublePlus n) | plusNSm n n = refl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
124
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
125 plusSwap : ( n m p : ℕ ) → ( n + (m + p)) ≡ ( m + (n + p))
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
126 plusSwap zero y z = refl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
127 plusSwap (suc x) y z rewrite sym (plusNSm (y) (x + z)) | plusSwap x y z = refl