16
16
local attribute [reducible] bit0 bit1 add1
17
17
local attribute [simp] right_distrib left_distrib
18
18
19
+ private meta def u : tactic unit :=
20
+ `[unfold bit0 bit1 add1]
21
+
22
+ private meta def usimp : tactic unit :=
23
+ u >> `[simp]
24
+
19
25
lemma mul_zero [mul_zero_class α] (a : α) : a * 0 = 0 :=
20
26
by simp
21
27
@@ -107,26 +113,26 @@ lemma div_mul_helper [field α] (n d c v : α) (hd : d ≠ 0) (h : (n * c) / d =
107
113
(n / d) * c = v :=
108
114
by rw [-h, field.div_mul_eq_mul_div_comm _ _ hd, mul_div_assoc]
109
115
110
- lemma mul_div_helper [s : field α] (a n d v : α) (hd : d ≠ 0 ) (h : (a * n) / d = v) :
116
+ lemma mul_div_helper [field α] (a n d v : α) (hd : d ≠ 0 ) (h : (a * n) / d = v) :
111
117
a * (n / d) = v :=
112
118
by rw [-h, mul_div_assoc]
113
119
114
- lemma nonzero_of_div_helper [s : field α] (a b : α) (ha : a ≠ 0 ) (hb : b ≠ 0 ) : a / b ≠ 0 :=
120
+ lemma nonzero_of_div_helper [field α] (a b : α) (ha : a ≠ 0 ) (hb : b ≠ 0 ) : a / b ≠ 0 :=
115
121
begin
116
122
intro hab,
117
123
assert habb : (a / b) * b = 0 , rw [hab, zero_mul],
118
124
rw [div_mul_cancel _ hb] at habb,
119
125
exact ha habb
120
126
end
121
127
122
- lemma div_helper [s : field α] (n d v : α) (hd : d ≠ 0 ) (h : v * d = n) : n / d = v :=
128
+ lemma div_helper [field α] (n d v : α) (hd : d ≠ 0 ) (h : v * d = n) : n / d = v :=
123
129
begin
124
130
apply eq_of_mul_eq_mul_of_nonzero_right hd,
125
131
rw (div_mul_cancel _ hd),
126
132
exact eq.symm h
127
133
end
128
134
129
- lemma div_eq_div_helper [s : field α] (a b c d v : α) (h1 : a * d = v) (h2 : c * b = v)
135
+ lemma div_eq_div_helper [field α] (a b c d v : α) (h1 : a * d = v) (h2 : c * b = v)
130
136
(hb : b ≠ 0 ) (hd : d ≠ 0 ) : a / b = c / d :=
131
137
begin
132
138
apply eq_div_of_mul_eq,
@@ -138,8 +144,98 @@ begin
138
144
rw [h1, h2]
139
145
end
140
146
141
- lemma subst_into_div [s : has_div α] (a₁ b₁ a₂ b₂ v : α) (h : a₁ / b₁ = v) (h1 : a₂ = a₁)
147
+ lemma subst_into_div [has_div α] (a₁ b₁ a₂ b₂ v : α) (h : a₁ / b₁ = v) (h1 : a₂ = a₁)
142
148
(h2 : b₂ = b₁) : a₂ / b₂ = v :=
143
149
by rw [h1, h2, h]
144
150
151
+
152
+ lemma add_comm_four [add_comm_semigroup α] (a b : α) : a + a + (b + b) = (a + b) + (a + b) :=
153
+ by simp
154
+
155
+ lemma add_comm_middle [add_comm_semigroup α] (a b c : α) : a + b + c = a + c + b :=
156
+ by simp
157
+
158
+ lemma bit0_add_bit0 [add_comm_semigroup α] (a b : α) : bit0 a + bit0 b = bit0 (a + b) :=
159
+ by usimp
160
+
161
+ lemma bit0_add_bit0_helper [add_comm_semigroup α] (a b t : α) (h : a + b = t) :
162
+ bit0 a + bit0 b = bit0 t :=
163
+ begin rw -h, usimp end
164
+
165
+ lemma bit1_add_bit0 [add_comm_semigroup α] [has_one α] (a b : α) : bit1 a + bit0 b = bit1 (a + b) :=
166
+ by usimp
167
+
168
+ lemma bit1_add_bit0_helper [add_comm_semigroup α] [has_one α] (a b t : α)
169
+ (h : a + b = t) : bit1 a + bit0 b = bit1 t :=
170
+ begin rw -h, usimp end
171
+
172
+ lemma bit0_add_bit1 [add_comm_semigroup α] [has_one α] (a b : α) :
173
+ bit0 a + bit1 b = bit1 (a + b) :=
174
+ by usimp
175
+
176
+ lemma bit0_add_bit1_helper [add_comm_semigroup α] [has_one α] (a b t : α)
177
+ (h : a + b = t) : bit0 a + bit1 b = bit1 t :=
178
+ begin rw -h, usimp end
179
+
180
+ lemma bit1_add_bit1 [add_comm_semigroup α] [has_one α] (a b : α) :
181
+ bit1 a + bit1 b = bit0 (add1 (a + b)) :=
182
+ by usimp
183
+
184
+ lemma bit1_add_bit1_helper [add_comm_semigroup α] [has_one α] (a b t s : α)
185
+ (h : (a + b) = t) (h2 : add1 t = s) : bit1 a + bit1 b = bit0 s :=
186
+ begin rw -h at h2, rw -h2, usimp end
187
+
188
+ lemma bin_add_zero [add_monoid α] (a : α) : a + zero = a :=
189
+ by simp
190
+
191
+ lemma bin_zero_add [add_monoid α] (a : α) : zero + a = a :=
192
+ by simp
193
+
194
+ lemma one_add_bit0 [add_comm_semigroup α] [has_one α] (a : α) : one + bit0 a = bit1 a :=
195
+ begin unfold bit0 bit1, simp end
196
+
197
+ lemma bit0_add_one [has_add α] [has_one α] (a : α) : bit0 a + one = bit1 a :=
198
+ rfl
199
+
200
+ lemma bit1_add_one [has_add α] [has_one α] (a : α) : bit1 a + one = add1 (bit1 a) :=
201
+ rfl
202
+
203
+ lemma bit1_add_one_helper [has_add α] [has_one α] (a t : α) (h : add1 (bit1 a) = t) :
204
+ bit1 a + one = t :=
205
+ by rw -h
206
+
207
+ lemma one_add_bit1 [add_comm_semigroup α] [has_one α] (a : α) : one + bit1 a = add1 (bit1 a) :=
208
+ begin unfold bit0 bit1 add1, simp end
209
+
210
+ lemma one_add_bit1_helper [add_comm_semigroup α] [has_one α] (a t : α)
211
+ (h : add1 (bit1 a) = t) : one + bit1 a = t :=
212
+ begin rw -h, usimp end
213
+
214
+ lemma add1_bit0 [has_add α] [has_one α] (a : α) : add1 (bit0 a) = bit1 a :=
215
+ rfl
216
+
217
+ lemma add1_bit1 [add_comm_semigroup α] [has_one α] (a : α) :
218
+ add1 (bit1 a) = bit0 (add1 a) :=
219
+ by usimp
220
+
221
+ lemma add1_bit1_helper [add_comm_semigroup α] [has_one α] (a t : α) (h : add1 a = t) :
222
+ add1 (bit1 a) = bit0 t :=
223
+ begin rw -h, usimp end
224
+
225
+ lemma add1_one [has_add α] [has_one α] : add1 (one : α) = bit0 one :=
226
+ rfl
227
+
228
+ lemma add1_zero [add_monoid α] [has_one α] : add1 (zero : α) = one :=
229
+ by usimp
230
+
231
+ lemma one_add_one [has_add α] [has_one α] : (one : α) + one = bit0 one :=
232
+ rfl
233
+
234
+ lemma subst_into_sum [has_add α] (l r tl tr t : α) (prl : l = tl) (prr : r = tr)
235
+ (prt : tl + tr = t) : l + r = t :=
236
+ by rw [-prt, prr, prl]
237
+
238
+ lemma neg_zero_helper [add_group α] (a : α) (h : a = 0 ) : - a = 0 :=
239
+ begin rw h, simp end
240
+
145
241
end norm_num
0 commit comments