@@ -9,7 +9,7 @@ import data.rat.meta_defs
9
9
/-!
10
10
# `norm_num`
11
11
12
- Evaluating arithmetic expressions including *, +, -, ^, ≤
12
+ Evaluating arithmetic expressions including `*`, `+`, `-`, `^`, `≤`.
13
13
-/
14
14
15
15
universes u v w
@@ -123,11 +123,14 @@ theorem adc_one_bit1 {α} [semiring α] (a b : α) (h : a + 1 = b) : 1 + bit1 a
123
123
h ▸ by simp [bit1, bit0, add_left_comm, add_assoc]
124
124
theorem adc_bit0_bit0 {α} [semiring α] (a b c : α) (h : a + b = c) : bit0 a + bit0 b + 1 = bit1 c :=
125
125
h ▸ by simp [bit1, bit0, add_left_comm, add_assoc]
126
- theorem adc_bit1_bit0 {α} [semiring α] (a b c : α) (h : a + b + 1 = c) : bit1 a + bit0 b + 1 = bit0 c :=
126
+ theorem adc_bit1_bit0 {α} [semiring α] (a b c : α) (h : a + b + 1 = c) :
127
+ bit1 a + bit0 b + 1 = bit0 c :=
127
128
h ▸ by simp [bit1, bit0, add_left_comm, add_assoc]
128
- theorem adc_bit0_bit1 {α} [semiring α] (a b c : α) (h : a + b + 1 = c) : bit0 a + bit1 b + 1 = bit0 c :=
129
+ theorem adc_bit0_bit1 {α} [semiring α] (a b c : α) (h : a + b + 1 = c) :
130
+ bit0 a + bit1 b + 1 = bit0 c :=
129
131
h ▸ by simp [bit1, bit0, add_left_comm, add_assoc]
130
- theorem adc_bit1_bit1 {α} [semiring α] (a b c : α) (h : a + b + 1 = c) : bit1 a + bit1 b + 1 = bit1 c :=
132
+ theorem adc_bit1_bit1 {α} [semiring α] (a b c : α) (h : a + b + 1 = c) :
133
+ bit1 a + bit1 b + 1 = bit1 c :=
131
134
h ▸ by simp [bit1, bit0, add_left_comm, add_assoc]
132
135
133
136
section
@@ -141,10 +144,14 @@ with prove_add_nat : instance_cache → expr → expr → expr → tactic (insta
141
144
| _, zero := c.mk_app ``add_zero [a]
142
145
| _, one := prove_succ c a r
143
146
| one, _ := do (c, p) ← prove_succ c b r, c.mk_app ``one_add [b, r, p]
144
- | bit0 a, bit0 b := do let r := r.app_arg, (c, p) ← prove_add_nat c a b r, c.mk_app ``add_bit0_bit0 [a, b, r, p]
145
- | bit0 a, bit1 b := do let r := r.app_arg, (c, p) ← prove_add_nat c a b r, c.mk_app ``add_bit0_bit1 [a, b, r, p]
146
- | bit1 a, bit0 b := do let r := r.app_arg, (c, p) ← prove_add_nat c a b r, c.mk_app ``add_bit1_bit0 [a, b, r, p]
147
- | bit1 a, bit1 b := do let r := r.app_arg, (c, p) ← prove_adc_nat c a b r, c.mk_app ``add_bit1_bit1 [a, b, r, p]
147
+ | bit0 a, bit0 b :=
148
+ do let r := r.app_arg, (c, p) ← prove_add_nat c a b r, c.mk_app ``add_bit0_bit0 [a, b, r, p]
149
+ | bit0 a, bit1 b :=
150
+ do let r := r.app_arg, (c, p) ← prove_add_nat c a b r, c.mk_app ``add_bit0_bit1 [a, b, r, p]
151
+ | bit1 a, bit0 b :=
152
+ do let r := r.app_arg, (c, p) ← prove_add_nat c a b r, c.mk_app ``add_bit1_bit0 [a, b, r, p]
153
+ | bit1 a, bit1 b :=
154
+ do let r := r.app_arg, (c, p) ← prove_adc_nat c a b r, c.mk_app ``add_bit1_bit1 [a, b, r, p]
148
155
| _, _ := failed
149
156
end
150
157
with prove_adc_nat : instance_cache → expr → expr → expr → tactic (instance_cache × expr)
@@ -153,14 +160,22 @@ with prove_adc_nat : instance_cache → expr → expr → expr → tactic (insta
153
160
| zero, _ := do (c, p) ← prove_succ c b r, c.mk_app ``zero_adc [b, r, p]
154
161
| _, zero := do (c, p) ← prove_succ c b r, c.mk_app ``adc_zero [b, r, p]
155
162
| one, one := c.mk_app ``adc_one_one []
156
- | bit0 a, one := do let r := r.app_arg, (c, p) ← prove_succ c a r, c.mk_app ``adc_bit0_one [a, r, p]
157
- | one, bit0 b := do let r := r.app_arg, (c, p) ← prove_succ c b r, c.mk_app ``adc_one_bit0 [b, r, p]
158
- | bit1 a, one := do let r := r.app_arg, (c, p) ← prove_succ c a r, c.mk_app ``adc_bit1_one [a, r, p]
159
- | one, bit1 b := do let r := r.app_arg, (c, p) ← prove_succ c b r, c.mk_app ``adc_one_bit1 [b, r, p]
160
- | bit0 a, bit0 b := do let r := r.app_arg, (c, p) ← prove_add_nat c a b r, c.mk_app ``adc_bit0_bit0 [a, b, r, p]
161
- | bit0 a, bit1 b := do let r := r.app_arg, (c, p) ← prove_adc_nat c a b r, c.mk_app ``adc_bit0_bit1 [a, b, r, p]
162
- | bit1 a, bit0 b := do let r := r.app_arg, (c, p) ← prove_adc_nat c a b r, c.mk_app ``adc_bit1_bit0 [a, b, r, p]
163
- | bit1 a, bit1 b := do let r := r.app_arg, (c, p) ← prove_adc_nat c a b r, c.mk_app ``adc_bit1_bit1 [a, b, r, p]
163
+ | bit0 a, one :=
164
+ do let r := r.app_arg, (c, p) ← prove_succ c a r, c.mk_app ``adc_bit0_one [a, r, p]
165
+ | one, bit0 b :=
166
+ do let r := r.app_arg, (c, p) ← prove_succ c b r, c.mk_app ``adc_one_bit0 [b, r, p]
167
+ | bit1 a, one :=
168
+ do let r := r.app_arg, (c, p) ← prove_succ c a r, c.mk_app ``adc_bit1_one [a, r, p]
169
+ | one, bit1 b :=
170
+ do let r := r.app_arg, (c, p) ← prove_succ c b r, c.mk_app ``adc_one_bit1 [b, r, p]
171
+ | bit0 a, bit0 b :=
172
+ do let r := r.app_arg, (c, p) ← prove_add_nat c a b r, c.mk_app ``adc_bit0_bit0 [a, b, r, p]
173
+ | bit0 a, bit1 b :=
174
+ do let r := r.app_arg, (c, p) ← prove_adc_nat c a b r, c.mk_app ``adc_bit0_bit1 [a, b, r, p]
175
+ | bit1 a, bit0 b :=
176
+ do let r := r.app_arg, (c, p) ← prove_adc_nat c a b r, c.mk_app ``adc_bit1_bit0 [a, b, r, p]
177
+ | bit1 a, bit1 b :=
178
+ do let r := r.app_arg, (c, p) ← prove_adc_nat c a b r, c.mk_app ``adc_bit1_bit1 [a, b, r, p]
164
179
| _, _ := failed
165
180
end
166
181
@@ -170,8 +185,8 @@ add_decl_doc prove_add_nat
170
185
add_decl_doc prove_adc_nat
171
186
172
187
/-- Given `a`,`b` natural numerals, returns `(r, ⊢ a + b = r)`. -/
173
- meta def prove_add_nat' (c : instance_cache) (a b : expr) : tactic (instance_cache × expr × expr) := do
174
- na ← a.to_nat,
188
+ meta def prove_add_nat' (c : instance_cache) (a b : expr) : tactic (instance_cache × expr × expr) :=
189
+ do na ← a.to_nat,
175
190
nb ← b.to_nat,
176
191
(c, r) ← c.of_nat (na + nb),
177
192
(c, p) ← prove_add_nat c a b r,
@@ -307,32 +322,42 @@ theorem lt_one_bit0 {α} [linear_ordered_semiring α] (a : α) (h : 1 ≤ a) : 1
307
322
lt_of_lt_of_le one_lt_two (bit0_le_bit0.2 h)
308
323
theorem lt_one_bit1 {α} [linear_ordered_semiring α] (a : α) (h : 0 < a) : 1 < bit1 a :=
309
324
one_lt_bit1.2 h
310
- theorem lt_bit0_bit0 {α} [linear_ordered_semiring α] (a b : α) : a < b → bit0 a < bit0 b := bit0_lt_bit0.2
325
+ theorem lt_bit0_bit0 {α} [linear_ordered_semiring α] (a b : α) : a < b → bit0 a < bit0 b :=
326
+ bit0_lt_bit0.2
311
327
theorem lt_bit0_bit1 {α} [linear_ordered_semiring α] (a b : α) (h : a ≤ b) : bit0 a < bit1 b :=
312
328
lt_of_le_of_lt (bit0_le_bit0.2 h) (lt_add_one _)
313
329
theorem lt_bit1_bit0 {α} [linear_ordered_semiring α] (a b : α) (h : a + 1 ≤ b) : bit1 a < bit0 b :=
314
330
lt_of_lt_of_le (by simp [bit0, bit1, zero_lt_one, add_assoc]) (bit0_le_bit0.2 h)
315
- theorem lt_bit1_bit1 {α} [linear_ordered_semiring α] (a b : α) : a < b → bit1 a < bit1 b := bit1_lt_bit1.2
331
+ theorem lt_bit1_bit1 {α} [linear_ordered_semiring α] (a b : α) : a < b → bit1 a < bit1 b :=
332
+ bit1_lt_bit1.2
316
333
317
334
theorem le_one_bit0 {α} [linear_ordered_semiring α] (a : α) (h : 1 ≤ a) : 1 ≤ bit0 a :=
318
335
le_of_lt (lt_one_bit0 _ h)
319
336
-- deliberately strong hypothesis because bit1 0 is not a numeral
320
337
theorem le_one_bit1 {α} [linear_ordered_semiring α] (a : α) (h : 0 < a) : 1 ≤ bit1 a :=
321
338
le_of_lt (lt_one_bit1 _ h)
322
- theorem le_bit0_bit0 {α} [linear_ordered_semiring α] (a b : α) : a ≤ b → bit0 a ≤ bit0 b := bit0_le_bit0.2
339
+ theorem le_bit0_bit0 {α} [linear_ordered_semiring α] (a b : α) : a ≤ b → bit0 a ≤ bit0 b :=
340
+ bit0_le_bit0.2
323
341
theorem le_bit0_bit1 {α} [linear_ordered_semiring α] (a b : α) (h : a ≤ b) : bit0 a ≤ bit1 b :=
324
342
le_of_lt (lt_bit0_bit1 _ _ h)
325
343
theorem le_bit1_bit0 {α} [linear_ordered_semiring α] (a b : α) (h : a + 1 ≤ b) : bit1 a ≤ bit0 b :=
326
344
le_of_lt (lt_bit1_bit0 _ _ h)
327
- theorem le_bit1_bit1 {α} [linear_ordered_semiring α] (a b : α) : a ≤ b → bit1 a ≤ bit1 b := bit1_le_bit1.2
328
-
329
- theorem sle_one_bit0 {α} [linear_ordered_semiring α] (a : α) : 1 ≤ a → 1 + 1 ≤ bit0 a := bit0_le_bit0.2
330
- theorem sle_one_bit1 {α} [linear_ordered_semiring α] (a : α) : 1 ≤ a → 1 + 1 ≤ bit1 a := le_bit0_bit1 _ _
331
- theorem sle_bit0_bit0 {α} [linear_ordered_semiring α] (a b : α) : a + 1 ≤ b → bit0 a + 1 ≤ bit0 b := le_bit1_bit0 _ _
332
- theorem sle_bit0_bit1 {α} [linear_ordered_semiring α] (a b : α) (h : a ≤ b) : bit0 a + 1 ≤ bit1 b := bit1_le_bit1.2 h
333
- theorem sle_bit1_bit0 {α} [linear_ordered_semiring α] (a b : α) (h : a + 1 ≤ b) : bit1 a + 1 ≤ bit0 b :=
345
+ theorem le_bit1_bit1 {α} [linear_ordered_semiring α] (a b : α) : a ≤ b → bit1 a ≤ bit1 b :=
346
+ bit1_le_bit1.2
347
+
348
+ theorem sle_one_bit0 {α} [linear_ordered_semiring α] (a : α) : 1 ≤ a → 1 + 1 ≤ bit0 a :=
349
+ bit0_le_bit0.2
350
+ theorem sle_one_bit1 {α} [linear_ordered_semiring α] (a : α) : 1 ≤ a → 1 + 1 ≤ bit1 a :=
351
+ le_bit0_bit1 _ _
352
+ theorem sle_bit0_bit0 {α} [linear_ordered_semiring α] (a b : α) : a + 1 ≤ b → bit0 a + 1 ≤ bit0 b :=
353
+ le_bit1_bit0 _ _
354
+ theorem sle_bit0_bit1 {α} [linear_ordered_semiring α] (a b : α) (h : a ≤ b) : bit0 a + 1 ≤ bit1 b :=
355
+ bit1_le_bit1.2 h
356
+ theorem sle_bit1_bit0 {α} [linear_ordered_semiring α] (a b : α) (h : a + 1 ≤ b) :
357
+ bit1 a + 1 ≤ bit0 b :=
334
358
(bit1_succ a _ rfl).symm ▸ bit0_le_bit0.2 h
335
- theorem sle_bit1_bit1 {α} [linear_ordered_semiring α] (a b : α) (h : a + 1 ≤ b) : bit1 a + 1 ≤ bit1 b :=
359
+ theorem sle_bit1_bit1 {α} [linear_ordered_semiring α] (a b : α) (h : a + 1 ≤ b) :
360
+ bit1 a + 1 ≤ bit1 b :=
336
361
(bit1_succ a _ rfl).symm ▸ le_bit0_bit1 _ _ h
337
362
338
363
/-- Given `a` a rational numeral, returns `⊢ 0 ≤ a`. -/
@@ -411,7 +436,8 @@ theorem clear_denom_lt {α} [linear_ordered_semiring α] (a a' b b' d : α)
411
436
lt_of_mul_lt_mul_right (by rwa [ha, hb]) (le_of_lt h₀)
412
437
413
438
/-- Given `a`,`b` nonnegative rational numerals, proves `⊢ a < b`. -/
414
- meta def prove_lt_nonneg_rat (ic : instance_cache) (a b : expr) (na nb : ℚ) : tactic (instance_cache × expr) :=
439
+ meta def prove_lt_nonneg_rat (ic : instance_cache) (a b : expr) (na nb : ℚ) :
440
+ tactic (instance_cache × expr) :=
415
441
if na.denom = 1 ∧ nb.denom = 1 then
416
442
prove_lt_nat ic a b
417
443
else do
@@ -427,7 +453,8 @@ lemma lt_neg_pos {α} [ordered_add_comm_group α] (a b : α) (ha : 0 < a) (hb :
427
453
lt_trans (neg_neg_of_pos ha) hb
428
454
429
455
/-- Given `a`,`b` rational numerals, proves `⊢ a < b`. -/
430
- meta def prove_lt_rat (ic : instance_cache) (a b : expr) (na nb : ℚ) : tactic (instance_cache × expr) :=
456
+ meta def prove_lt_rat (ic : instance_cache) (a b : expr) (na nb : ℚ) :
457
+ tactic (instance_cache × expr) :=
431
458
match match_sign a, match_sign b with
432
459
| sum.inl a, sum.inl b := do
433
460
(ic, p) ← prove_lt_nonneg_rat ic a b (-na) (-nb),
@@ -505,9 +532,11 @@ theorem int_cast_bit0 {α} [ring α] (a : ℤ) (a' : α) (h : ↑a = a') : ↑(b
505
532
h ▸ int.cast_bit0 _
506
533
theorem int_cast_bit1 {α} [ring α] (a : ℤ) (a' : α) (h : ↑a = a') : ↑(bit1 a) = bit1 a' :=
507
534
h ▸ int.cast_bit1 _
508
- theorem rat_cast_bit0 {α} [division_ring α] [char_zero α] (a : ℚ) (a' : α) (h : ↑a = a') : ↑(bit0 a) = bit0 a' :=
535
+ theorem rat_cast_bit0 {α} [division_ring α] [char_zero α] (a : ℚ) (a' : α) (h : ↑a = a') :
536
+ ↑(bit0 a) = bit0 a' :=
509
537
h ▸ rat.cast_bit0 _
510
- theorem rat_cast_bit1 {α} [division_ring α] [char_zero α] (a : ℚ) (a' : α) (h : ↑a = a') : ↑(bit1 a) = bit1 a' :=
538
+ theorem rat_cast_bit1 {α} [division_ring α] [char_zero α] (a : ℚ) (a' : α) (h : ↑a = a') :
539
+ ↑(bit1 a) = bit1 a' :=
511
540
h ▸ rat.cast_bit1 _
512
541
513
542
/-- Given `a' : α` a natural numeral, returns `(a : ℕ, ⊢ ↑a = a')`.
@@ -572,7 +601,7 @@ meta def prove_rat_uncast_nat (ic qc : instance_cache) (cz_inst : expr) : ∀ (a
572
601
match match_numeral a' with
573
602
| match_numeral_result.zero := do
574
603
(qc, e) ← qc.mk_app ``has_zero .zero [],
575
- (ic, p) ← ic.mk_app ``rat .cast_zero [cz_inst ],
604
+ (ic, p) ← ic.mk_app ``rat .cast_zero [],
576
605
return (ic, qc, e, p)
577
606
| match_numeral_result.one := do
578
607
(qc, e) ← qc.mk_app ``has_one .one [],
@@ -728,7 +757,8 @@ theorem add_neg_neg {α} [add_group α] (a b c : α) (h : b + a = c) : -a + -b =
728
757
h ▸ by simp
729
758
730
759
/-- Given `a`,`b`,`c` rational numerals, returns `⊢ a + b = c`. -/
731
- meta def prove_add_rat (ic : instance_cache) (ea eb ec : expr) (a b c : ℚ) : tactic (instance_cache × expr) :=
760
+ meta def prove_add_rat (ic : instance_cache) (ea eb ec : expr) (a b c : ℚ) :
761
+ tactic (instance_cache × expr) :=
732
762
match match_neg ea, match_neg eb, match_neg ec with
733
763
| some ea, some eb, some ec := do
734
764
(ic, p) ← prove_add_nonneg_rat ic eb ea ec (-b) (-a) (-c),
@@ -749,8 +779,9 @@ match match_neg ea, match_neg eb, match_neg ec with
749
779
end
750
780
751
781
/-- Given `a`,`b` rational numerals, returns `(c, ⊢ a + b = c)`. -/
752
- meta def prove_add_rat' (ic : instance_cache) (a b : expr) : tactic (instance_cache × expr × expr) := do
753
- na ← a.to_rat,
782
+ meta def prove_add_rat' (ic : instance_cache) (a b : expr) :
783
+ tactic (instance_cache × expr × expr) :=
784
+ do na ← a.to_rat,
754
785
nb ← b.to_rat,
755
786
let nc := na + nb,
756
787
(ic, c) ← ic.of_rat nc,
@@ -764,7 +795,8 @@ theorem clear_denom_simple_div {α} [division_ring α] (a b : α) (h : b ≠ 0)
764
795
765
796
/-- Given `a` a nonnegative rational numeral, returns `(b, c, ⊢ a * b = c)`
766
797
where `b` and `c` are natural numerals. (`b` will be the denominator of `a`.) -/
767
- meta def prove_clear_denom_simple (c : instance_cache) (a : expr) (na : ℚ) : tactic (instance_cache × expr × expr × expr) :=
798
+ meta def prove_clear_denom_simple (c : instance_cache) (a : expr) (na : ℚ) :
799
+ tactic (instance_cache × expr × expr × expr) :=
768
800
if na.denom = 1 then do
769
801
(c, d) ← c.mk_app ``has_one .one [],
770
802
(c, p) ← c.mk_app ``clear_denom_simple_nat [a],
@@ -783,7 +815,8 @@ mul_right_cancel' ha.1 $ mul_right_cancel' hb.1 $
783
815
by rw [mul_assoc c, hd, hc, ← h, ← ha.2 , ← hb.2 , ← mul_assoc, mul_right_comm a]
784
816
785
817
/-- Given `a`,`b` nonnegative rational numerals, returns `(c, ⊢ a * b = c)`. -/
786
- meta def prove_mul_nonneg_rat (ic : instance_cache) (a b : expr) (na nb : ℚ) : tactic (instance_cache × expr × expr) :=
818
+ meta def prove_mul_nonneg_rat (ic : instance_cache) (a b : expr) (na nb : ℚ) :
819
+ tactic (instance_cache × expr × expr) :=
787
820
if na.denom = 1 ∧ nb.denom = 1 then
788
821
prove_mul_nat ic a b
789
822
else do
@@ -801,7 +834,8 @@ theorem mul_pos_neg {α} [ring α] (a b c : α) (h : a * b = c) : a * -b = -c :=
801
834
theorem mul_neg_neg {α} [ring α] (a b c : α) (h : a * b = c) : -a * -b = c := h ▸ by simp
802
835
803
836
/-- Given `a`,`b` rational numerals, returns `(c, ⊢ a * b = c)`. -/
804
- meta def prove_mul_rat (ic : instance_cache) (a b : expr) (na nb : ℚ) : tactic (instance_cache × expr × expr) :=
837
+ meta def prove_mul_rat (ic : instance_cache) (a b : expr) (na nb : ℚ) :
838
+ tactic (instance_cache × expr × expr) :=
805
839
match match_sign a, match_sign b with
806
840
| sum.inl a, sum.inl b := do
807
841
(ic, c, p) ← prove_mul_nonneg_rat ic a b (-na) (-nb),
@@ -875,7 +909,8 @@ theorem div_eq {α} [division_ring α] (a b b' c : α)
875
909
(hb : b⁻¹ = b') (h : a * b' = c) : a / b = c := by rwa ← hb at h
876
910
877
911
/-- Given `a`,`b` rational numerals, returns `(c, ⊢ a / b = c)`. -/
878
- meta def prove_div (ic : instance_cache) (a b : expr) (na nb : ℚ) : tactic (instance_cache × expr × expr) :=
912
+ meta def prove_div (ic : instance_cache) (a b : expr) (na nb : ℚ) :
913
+ tactic (instance_cache × expr × expr) :=
879
914
do (ic, b', pb) ← prove_inv ic b nb,
880
915
(ic, c, p) ← prove_mul_rat ic a b' na nb⁻¹,
881
916
(ic, p) ← ic.mk_app ``div_eq [a, b, b', c, pb, p],
@@ -990,7 +1025,8 @@ section
990
1025
open match_numeral_result
991
1026
992
1027
/-- Given `a` a rational numeral and `b : nat`, returns `(c, ⊢ a ^ b = c)`. -/
993
- meta def prove_pow (a : expr) (na : ℚ) : instance_cache → expr → tactic (instance_cache × expr × expr)
1028
+ meta def prove_pow (a : expr) (na : ℚ) :
1029
+ instance_cache → expr → tactic (instance_cache × expr × expr)
994
1030
| ic b :=
995
1031
match match_numeral b with
996
1032
| zero := do
@@ -1106,14 +1142,16 @@ lemma nat_div (a b q r m : ℕ) (hm : q * b = m) (h : r + m = a) (h₂ : r < b)
1106
1142
by rw [← h, ← hm, nat.add_mul_div_right _ _ (lt_of_le_of_lt (nat.zero_le _) h₂),
1107
1143
nat.div_eq_of_lt h₂, zero_add]
1108
1144
1109
- lemma int_div (a b q r m : ℤ) (hm : q * b = m) (h : r + m = a) (h₁ : 0 ≤ r) (h₂ : r < b) : a / b = q :=
1145
+ lemma int_div (a b q r m : ℤ) (hm : q * b = m) (h : r + m = a) (h₁ : 0 ≤ r) (h₂ : r < b) :
1146
+ a / b = q :=
1110
1147
by rw [← h, ← hm, int.add_mul_div_right _ _ (ne_of_gt (lt_of_le_of_lt h₁ h₂)),
1111
1148
int.div_eq_zero_of_lt h₁ h₂, zero_add]
1112
1149
1113
1150
lemma nat_mod (a b q r m : ℕ) (hm : q * b = m) (h : r + m = a) (h₂ : r < b) : a % b = r :=
1114
1151
by rw [← h, ← hm, nat.add_mul_mod_self_right, nat.mod_eq_of_lt h₂]
1115
1152
1116
- lemma int_mod (a b q r m : ℤ) (hm : q * b = m) (h : r + m = a) (h₁ : 0 ≤ r) (h₂ : r < b) : a % b = r :=
1153
+ lemma int_mod (a b q r m : ℤ) (hm : q * b = m) (h : r + m = a) (h₁ : 0 ≤ r) (h₂ : r < b) :
1154
+ a % b = r :=
1117
1155
by rw [← h, ← hm, int.add_mul_mod_self, int.mod_eq_of_lt h₁ h₂]
1118
1156
1119
1157
lemma int_div_neg (a b c' c : ℤ) (h : a / b = c') (h₂ : -c' = c) : a / -b = c :=
@@ -1126,7 +1164,8 @@ lemma int_mod_neg (a b c : ℤ) (h : a % b = c) : a % -b = c :=
1126
1164
* `prove_div_mod ic a b ff` returns `(c, ⊢ a / b = c)`
1127
1165
* `prove_div_mod ic a b tt` returns `(c, ⊢ a % b = c)`
1128
1166
-/
1129
- meta def prove_div_mod (ic : instance_cache) : expr → expr → bool → tactic (instance_cache × expr × expr)
1167
+ meta def prove_div_mod (ic : instance_cache) :
1168
+ expr → expr → bool → tactic (instance_cache × expr × expr)
1130
1169
| a b mod :=
1131
1170
match match_neg b with
1132
1171
| some b := do
0 commit comments