annotate int.agda @ 7:f922e687f3a1

Define multiply
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Wed, 21 May 2014 16:05:50 +0900
parents db4c6d435f23
children e191792472f8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 open import systemT
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 open import Relation.Binary.PropositionalEquality
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 open ≡-Reasoning
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 module int where
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
7
f922e687f3a1 Define multiply
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
7 double : Int -> Int
f922e687f3a1 Define multiply
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
8 double O = O
f922e687f3a1 Define multiply
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
9 double (S n) = S (S (double n))
f922e687f3a1 Define multiply
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
10
f922e687f3a1 Define multiply
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
11
f922e687f3a1 Define multiply
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
12 infixl 30 _+_
3
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 _+_ : Int -> Int -> Int
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 n + O = n
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 n + (S m) = S (n + m)
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
4
6b1230883bfa mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
17 left-increment : (n m : Int) -> (S n) + m ≡ S (n + m)
6b1230883bfa mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
18 left-increment n O = refl
6b1230883bfa mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
19 left-increment n (S m) = cong S (left-increment n m)
3
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 sum-sym : (n : Int) (m : Int) -> n + m ≡ m + n
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 sum-sym O O = refl
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 sum-sym O (S m) = cong S (sum-sym O m)
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 sum-sym (S n) O = cong S (sum-sym n O)
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 sum-sym (S n) (S m) = begin
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 (S n) + (S m)
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 ≡⟨ refl ⟩
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 S ((S n) + m)
4
6b1230883bfa mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
29 ≡⟨ cong S (left-increment n m)⟩
3
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 S (S (n + m))
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 ≡⟨ cong (\x -> S (S x)) (sum-sym n m) ⟩
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 S (S (m + n))
4
6b1230883bfa mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
33 ≡⟨ sym (cong S (left-increment m n)) ⟩
3
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 S ((S m) + n)
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 ≡⟨ refl ⟩
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 (S m) + (S n)
7138e79615b3 Proof add-sym
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
5
a3cf5cb2b7d3 Auto proof sum-assoc
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
38
a3cf5cb2b7d3 Auto proof sum-assoc
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
39 sum-assoc : (x y z : Int) -> x + (y + z) ≡ (x + y) + z
6
db4c6d435f23 Fix indent
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
40 sum-assoc O O O = refl
db4c6d435f23 Fix indent
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
41 sum-assoc O O (S z) = cong S (sum-assoc O O z)
db4c6d435f23 Fix indent
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
42 sum-assoc O (S y) O = refl
db4c6d435f23 Fix indent
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
43 sum-assoc O (S y) (S z) = cong S (sum-assoc O (S y) z)
db4c6d435f23 Fix indent
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
44 sum-assoc (S x) O O = refl
db4c6d435f23 Fix indent
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
45 sum-assoc (S x) O (S z) = cong S (sum-assoc (S x) O z)
db4c6d435f23 Fix indent
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
46 sum-assoc (S x) (S y) O = refl
db4c6d435f23 Fix indent
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
47 sum-assoc (S x) (S y) (S z) = cong S (sum-assoc (S x) (S y) z)
7
f922e687f3a1 Define multiply
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
48
f922e687f3a1 Define multiply
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
49
f922e687f3a1 Define multiply
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
50 infixl 40 _*_
f922e687f3a1 Define multiply
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
51 _*_ : Int -> Int -> Int
f922e687f3a1 Define multiply
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
52 n * O = O
f922e687f3a1 Define multiply
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
53 n * (S O) = n
f922e687f3a1 Define multiply
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
54 n * (S m) = n + (n * m)