annotate agda/nat.agda @ 70:702ce92c45ab

add concat
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 06 Nov 2019 23:19:53 +0900
parents
children 92f396c3a1d7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
70
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 module nat where
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 open import Data.Nat renaming ( zero to Zero ; suc to Suc ; ℕ to Nat ; _⊔_ to _n⊔_ )
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 open import Data.Empty
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 open import Relation.Nullary
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 open import Relation.Binary.PropositionalEquality
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 open import logic
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 nat-<> : { x y : Nat } → x < y → y < x → ⊥
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 nat-<> (s≤s x<y) (s≤s y<x) = nat-<> x<y y<x
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 nat-<≡ : { x : Nat } → x < x → ⊥
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 nat-<≡ (s≤s lt) = nat-<≡ lt
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 nat-≡< : { x y : Nat } → x ≡ y → x < y → ⊥
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 nat-≡< refl lt = nat-<≡ lt
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 ¬a≤a : {la : Nat} → Suc la ≤ la → ⊥
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 ¬a≤a (s≤s lt) = ¬a≤a lt
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 a<sa : {la : Nat} → la < Suc la
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 a<sa {Zero} = s≤s z≤n
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 a<sa {Suc la} = s≤s a<sa
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 =→¬< : {x : Nat } → ¬ ( x < x )
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 =→¬< {Zero} ()
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 =→¬< {Suc x} (s≤s lt) = =→¬< lt
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 >→¬< : {x y : Nat } → (x < y ) → ¬ ( y < x )
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 >→¬< (s≤s x<y) (s≤s y<x) = >→¬< x<y y<x
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 <-∨ : { x y : Nat } → x < Suc y → ( (x ≡ y ) ∨ (x < y) )
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 <-∨ {Zero} {Zero} (s≤s z≤n) = case1 refl
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 <-∨ {Zero} {Suc y} (s≤s lt) = case2 (s≤s z≤n)
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 <-∨ {Suc x} {Zero} (s≤s ())
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 <-∨ {Suc x} {Suc y} (s≤s lt) with <-∨ {x} {y} lt
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 <-∨ {Suc x} {Suc y} (s≤s lt) | case1 eq = case1 (cong (λ k → Suc k ) eq)
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 <-∨ {Suc x} {Suc y} (s≤s lt) | case2 lt1 = case2 (s≤s lt1)
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 max : (x y : Nat) → Nat
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 max Zero Zero = Zero
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 max Zero (Suc x) = (Suc x)
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 max (Suc x) Zero = (Suc x)
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 max (Suc x) (Suc y) = Suc ( max x y )
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 -- _*_ : Nat → Nat → Nat
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 -- _*_ zero _ = zero
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 -- _*_ (suc n) m = m + ( n * m )
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 exp : Nat → Nat → Nat
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 exp _ Zero = 1
702ce92c45ab add concat
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 exp n (Suc m) = n * ( exp n m )