Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit cacc297

Browse files
fix(tactic/norm_num): remove unnecessary argument to rat.cast_zero (#4682)
See [Zulip thread](https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/.60norm_num.60.20error.20message).
1 parent 0f1bc68 commit cacc297

File tree

2 files changed

+85
-45
lines changed

2 files changed

+85
-45
lines changed

src/tactic/norm_num.lean

Lines changed: 84 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import data.rat.meta_defs
99
/-!
1010
# `norm_num`
1111
12-
Evaluating arithmetic expressions including *, +, -, ^, ≤
12+
Evaluating arithmetic expressions including `*`, `+`, `-`, `^`, `≤`.
1313
-/
1414

1515
universes u v w
@@ -123,11 +123,14 @@ theorem adc_one_bit1 {α} [semiring α] (a b : α) (h : a + 1 = b) : 1 + bit1 a
123123
h ▸ by simp [bit1, bit0, add_left_comm, add_assoc]
124124
theorem adc_bit0_bit0 {α} [semiring α] (a b c : α) (h : a + b = c) : bit0 a + bit0 b + 1 = bit1 c :=
125125
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 :=
127128
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 :=
129131
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 :=
131134
h ▸ by simp [bit1, bit0, add_left_comm, add_assoc]
132135

133136
section
@@ -141,10 +144,14 @@ with prove_add_nat : instance_cache → expr → expr → expr → tactic (insta
141144
| _, zero := c.mk_app ``add_zero [a]
142145
| _, one := prove_succ c a r
143146
| 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]
148155
| _, _ := failed
149156
end
150157
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
153160
| zero, _ := do (c, p) ← prove_succ c b r, c.mk_app ``zero_adc [b, r, p]
154161
| _, zero := do (c, p) ← prove_succ c b r, c.mk_app ``adc_zero [b, r, p]
155162
| 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]
164179
| _, _ := failed
165180
end
166181

@@ -170,8 +185,8 @@ add_decl_doc prove_add_nat
170185
add_decl_doc prove_adc_nat
171186

172187
/-- 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,
175190
nb ← b.to_nat,
176191
(c, r) ← c.of_nat (na + nb),
177192
(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
307322
lt_of_lt_of_le one_lt_two (bit0_le_bit0.2 h)
308323
theorem lt_one_bit1 {α} [linear_ordered_semiring α] (a : α) (h : 0 < a) : 1 < bit1 a :=
309324
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
311327
theorem lt_bit0_bit1 {α} [linear_ordered_semiring α] (a b : α) (h : a ≤ b) : bit0 a < bit1 b :=
312328
lt_of_le_of_lt (bit0_le_bit0.2 h) (lt_add_one _)
313329
theorem lt_bit1_bit0 {α} [linear_ordered_semiring α] (a b : α) (h : a + 1 ≤ b) : bit1 a < bit0 b :=
314330
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
316333

317334
theorem le_one_bit0 {α} [linear_ordered_semiring α] (a : α) (h : 1 ≤ a) : 1 ≤ bit0 a :=
318335
le_of_lt (lt_one_bit0 _ h)
319336
-- deliberately strong hypothesis because bit1 0 is not a numeral
320337
theorem le_one_bit1 {α} [linear_ordered_semiring α] (a : α) (h : 0 < a) : 1 ≤ bit1 a :=
321338
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
323341
theorem le_bit0_bit1 {α} [linear_ordered_semiring α] (a b : α) (h : a ≤ b) : bit0 a ≤ bit1 b :=
324342
le_of_lt (lt_bit0_bit1 _ _ h)
325343
theorem le_bit1_bit0 {α} [linear_ordered_semiring α] (a b : α) (h : a + 1 ≤ b) : bit1 a ≤ bit0 b :=
326344
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 :=
334358
(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 :=
336361
(bit1_succ a _ rfl).symm ▸ le_bit0_bit1 _ _ h
337362

338363
/-- Given `a` a rational numeral, returns `⊢ 0 ≤ a`. -/
@@ -411,7 +436,8 @@ theorem clear_denom_lt {α} [linear_ordered_semiring α] (a a' b b' d : α)
411436
lt_of_mul_lt_mul_right (by rwa [ha, hb]) (le_of_lt h₀)
412437

413438
/-- 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) :=
415441
if na.denom = 1 ∧ nb.denom = 1 then
416442
prove_lt_nat ic a b
417443
else do
@@ -427,7 +453,8 @@ lemma lt_neg_pos {α} [ordered_add_comm_group α] (a b : α) (ha : 0 < a) (hb :
427453
lt_trans (neg_neg_of_pos ha) hb
428454

429455
/-- 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) :=
431458
match match_sign a, match_sign b with
432459
| sum.inl a, sum.inl b := do
433460
(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
505532
h ▸ int.cast_bit0 _
506533
theorem int_cast_bit1 {α} [ring α] (a : ℤ) (a' : α) (h : ↑a = a') : ↑(bit1 a) = bit1 a' :=
507534
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' :=
509537
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' :=
511540
h ▸ rat.cast_bit1 _
512541

513542
/-- 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
572601
match match_numeral a' with
573602
| match_numeral_result.zero := do
574603
(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 [],
576605
return (ic, qc, e, p)
577606
| match_numeral_result.one := do
578607
(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 =
728757
h ▸ by simp
729758

730759
/-- 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) :=
732762
match match_neg ea, match_neg eb, match_neg ec with
733763
| some ea, some eb, some ec := do
734764
(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
749779
end
750780

751781
/-- 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,
754785
nb ← b.to_rat,
755786
let nc := na + nb,
756787
(ic, c) ← ic.of_rat nc,
@@ -764,7 +795,8 @@ theorem clear_denom_simple_div {α} [division_ring α] (a b : α) (h : b ≠ 0)
764795

765796
/-- Given `a` a nonnegative rational numeral, returns `(b, c, ⊢ a * b = c)`
766797
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) :=
768800
if na.denom = 1 then do
769801
(c, d) ← c.mk_app ``has_one.one [],
770802
(c, p) ← c.mk_app ``clear_denom_simple_nat [a],
@@ -783,7 +815,8 @@ mul_right_cancel' ha.1 $ mul_right_cancel' hb.1 $
783815
by rw [mul_assoc c, hd, hc, ← h, ← ha.2, ← hb.2, ← mul_assoc, mul_right_comm a]
784816

785817
/-- 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) :=
787820
if na.denom = 1 ∧ nb.denom = 1 then
788821
prove_mul_nat ic a b
789822
else do
@@ -801,7 +834,8 @@ theorem mul_pos_neg {α} [ring α] (a b c : α) (h : a * b = c) : a * -b = -c :=
801834
theorem mul_neg_neg {α} [ring α] (a b c : α) (h : a * b = c) : -a * -b = c := h ▸ by simp
802835

803836
/-- 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) :=
805839
match match_sign a, match_sign b with
806840
| sum.inl a, sum.inl b := do
807841
(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 : α)
875909
(hb : b⁻¹ = b') (h : a * b' = c) : a / b = c := by rwa ← hb at h
876910

877911
/-- 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) :=
879914
do (ic, b', pb) ← prove_inv ic b nb,
880915
(ic, c, p) ← prove_mul_rat ic a b' na nb⁻¹,
881916
(ic, p) ← ic.mk_app ``div_eq [a, b, b', c, pb, p],
@@ -990,7 +1025,8 @@ section
9901025
open match_numeral_result
9911026

9921027
/-- 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)
9941030
| ic b :=
9951031
match match_numeral b with
9961032
| 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)
11061142
by rw [← h, ← hm, nat.add_mul_div_right _ _ (lt_of_le_of_lt (nat.zero_le _) h₂),
11071143
nat.div_eq_of_lt h₂, zero_add]
11081144

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 :=
11101147
by rw [← h, ← hm, int.add_mul_div_right _ _ (ne_of_gt (lt_of_le_of_lt h₁ h₂)),
11111148
int.div_eq_zero_of_lt h₁ h₂, zero_add]
11121149

11131150
lemma nat_mod (a b q r m : ℕ) (hm : q * b = m) (h : r + m = a) (h₂ : r < b) : a % b = r :=
11141151
by rw [← h, ← hm, nat.add_mul_mod_self_right, nat.mod_eq_of_lt h₂]
11151152

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 :=
11171155
by rw [← h, ← hm, int.add_mul_mod_self, int.mod_eq_of_lt h₁ h₂]
11181156

11191157
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 :=
11261164
* `prove_div_mod ic a b ff` returns `(c, ⊢ a / b = c)`
11271165
* `prove_div_mod ic a b tt` returns `(c, ⊢ a % b = c)`
11281166
-/
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)
11301169
| a b mod :=
11311170
match match_neg b with
11321171
| some b := do

test/norm_num.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ example {α} [semiring α] [char_zero α] : (1:α) ≠ 2 := by norm_num
4242
example {α} [ring α] [char_zero α] : (-1:α) ≠ 2 := by norm_num
4343
example {α} [division_ring α] [char_zero α] : (-1:α) ≠ 2 := by norm_num
4444
example {α} [division_ring α] [char_zero α] : (1:α) / 32 / 7 := by norm_num
45+
example {α} [division_ring α] [char_zero α] : (1:α) / 30 := by norm_num
4546

4647
example : (5 / 2:ℕ) = 2 := by norm_num
4748
example : (5 / -2:ℤ) < -1 := by norm_num

0 commit comments

Comments
 (0)