comparison int.agda @ 8:e191792472f8

Try proof mult-sym. but not completed.
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Wed, 21 May 2014 21:11:34 +0900
parents f922e687f3a1
children 8ad92d830679
comparison
equal deleted inserted replaced
7:f922e687f3a1 8:e191792472f8
11 11
12 infixl 30 _+_ 12 infixl 30 _+_
13 _+_ : Int -> Int -> Int 13 _+_ : Int -> Int -> Int
14 n + O = n 14 n + O = n
15 n + (S m) = S (n + m) 15 n + (S m) = S (n + m)
16
17 left-add-zero : (n : Int) -> O + n ≡ n
18 left-add-zero O = refl
19 left-add-zero (S n) = cong S (left-add-zero n)
20
16 21
17 left-increment : (n m : Int) -> (S n) + m ≡ S (n + m) 22 left-increment : (n m : Int) -> (S n) + m ≡ S (n + m)
18 left-increment n O = refl 23 left-increment n O = refl
19 left-increment n (S m) = cong S (left-increment n m) 24 left-increment n (S m) = cong S (left-increment n m)
20 25
50 infixl 40 _*_ 55 infixl 40 _*_
51 _*_ : Int -> Int -> Int 56 _*_ : Int -> Int -> Int
52 n * O = O 57 n * O = O
53 n * (S O) = n 58 n * (S O) = n
54 n * (S m) = n + (n * m) 59 n * (S m) = n + (n * m)
60
61 right-mult-zero : (n : Int) -> n * O ≡ O
62 right-mult-zero n = refl
63
64 right-mult-one : (n : Int) -> n * (S O) ≡ n
65 right-mult-one n = refl
66
67 right-mult-distr-one : (n m : Int) -> n * (S m) ≡ n + (n * m)
68 right-mult-distr-one O O = refl
69 right-mult-distr-one O (S m) = refl
70 right-mult-distr-one (S n) O = refl
71 right-mult-distr-one (S n) (S m) = refl
72
73
74 left-mult-zero : (n : Int) -> O * n ≡ O
75 left-mult-zero O = refl
76 left-mult-zero (S n) = begin
77 O * (S n)
78 ≡⟨ right-mult-distr-one O n ⟩
79 O + (O * n)
80 ≡⟨ sum-sym O (O * n) ⟩
81 (O * n) + O
82 ≡⟨ refl ⟩
83 (O * n)
84 ≡⟨ left-mult-zero n ⟩
85 O
86
87
88 left-mult-one : (n : Int) -> (S O) * n ≡ n
89 left-mult-one O = refl
90 left-mult-one (S n) = begin
91 (S O) * S n
92 ≡⟨ right-mult-distr-one (S O) n ⟩
93 (S O) + ((S O) * n)
94 ≡⟨ cong (_+_ (S O)) (left-mult-one n) ⟩
95 (S O) + n
96 ≡⟨ sum-sym (S O) n ⟩
97 n + (S O)
98 ≡⟨ refl ⟩
99 S n
100
101
102
103 left-mult-distr-one : (n m : Int) -> (S n) * m ≡ m + (n * m)
104 left-mult-distr-one O O = refl
105 left-mult-distr-one O (S m) = begin
106 (S O) * S m
107 ≡⟨ left-mult-one (S m) ⟩
108 S m
109 ≡⟨ refl ⟩
110 S m + O
111 ≡⟨ cong (_+_ (S m)) (sym (left-mult-zero (S m))) ⟩
112 S m + (O * S m)
113
114 left-mult-distr-one (S n) O = refl
115 left-mult-distr-one (S n) (S m) = begin
116 S (S n) * S m
117 ≡⟨ right-mult-distr-one (S (S n)) m ⟩
118 (S (S n)) + ((S (S n)) * m)
119 ≡⟨ cong (\x -> (S (S n)) + x) (left-mult-distr-one (S n) m) ⟩
120 S (S n) + (m + S n * m)
121 ≡⟨ {!!} ⟩
122 S m + S n * S m
123
124
125
126
127 mult-sym : (n m : Int) -> n * m ≡ m * n
128 mult-sym n O = begin
129 n * O
130 ≡⟨ refl ⟩
131 O
132 ≡⟨ sym (left-mult-zero n) ⟩
133 O * n
134
135 mult-sym n (S m) = begin
136 n * (S m)
137 ≡⟨ right-mult-distr-one n m ⟩
138 n + (n * m)
139 ≡⟨ cong (\x -> n + x ) (mult-sym n m) ⟩
140 n + (m * n)
141 ≡⟨ sym (left-mult-distr-one m n) ⟩
142 (S m) * n
143