Skip to content

Commit 4b7ea26

Browse files
authored
fix: add grind normalization theorem for Int.negSucc (#8775)
This PR adds a `grind` normalization theorem for `Int.negSucc`. Example: ```lean example (p : Int) (n : Nat) (hmp : Int.negSucc (n + 1) + 1 = p) (hnm : Int.negSucc (n + 1 + 1) + 1 = Int.negSucc (n + 1)) : p = Int.negSucc n := by grind ```
1 parent 32eedc2 commit 4b7ea26

File tree

3 files changed

+12
-24
lines changed

3 files changed

+12
-24
lines changed

src/Init/Grind/Norm.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ init_grind_norm
182182
Int.emod_neg Int.ediv_neg
183183
Int.ediv_zero Int.emod_zero
184184
Int.ediv_one Int.emod_one
185-
185+
Int.negSucc_eq
186186
natCast_eq natCast_div natCast_mod
187187
natCast_add natCast_mul
188188

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
11
-- These are test cases extracted from Mathlib, where `omega` works but `grind` does not (yet!)
22

33
example (n : Int) (n0 : ¬0 ≤ n) (a : Nat) : n ≠ (a : Int) := by grind
4-
5-
-- TODO: add to the library?
6-
attribute [grind] Int.negSucc_eq
7-
8-
example (p : Int) (n : Nat) (hmp : Int.negSucc (n + 1) + 1 = p)
9-
(hnm : Int.negSucc (n + 1 + 1) + 1 = Int.negSucc (n + 1)) : p = Int.negSucc n := by grind

tests/lean/run/grind_cutsat_eq_1.lean

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,28 @@ example (a b : Int) (f : Int → Int) (h₁ : f a + b + 3 = 2) : False := by
1212
fail_if_success grind
1313
sorry
1414

15-
theorem ex₁ (a b : Int) (_ : 2*a + 3*b = 0) (_ : 23*b + 1) : False := by
15+
example (a b : Int) (_ : 2*a + 3*b = 0) (_ : 23*b + 1) : False := by
1616
grind
1717

18-
theorem ex₂ (a b : Int) (_ : 23*a + 1) (_ : 2*b + 3*a = 0) : False := by
18+
example (a b : Int) (_ : 23*a + 1) (_ : 2*b + 3*a = 0) : False := by
1919
grind
2020

21-
theorem ex₃ (a b c : Int) (_ : c + 3*a = 0) (_ : 23*a + 1) (_ : 2*b + c = 0) : False := by
21+
example (a b c : Int) (_ : c + 3*a = 0) (_ : 23*a + 1) (_ : 2*b + c = 0) : False := by
2222
grind
2323

24-
theorem ex₄ (a b c : Int) (_ : 2*c + 3*a = 0) (_ : 2*b + c = 0) (_ : 23*a + 1) : False := by
24+
example (a b c : Int) (_ : 2*c + 3*a = 0) (_ : 2*b + c = 0) (_ : 23*a + 1) : False := by
2525
grind
2626

27-
theorem ex₅ (a c : Int) (_ : 2*c + 3*a = 0) (_ : c + 1 = 0) : False := by
27+
example (a c : Int) (_ : 2*c + 3*a = 0) (_ : c + 1 = 0) : False := by
2828
grind
2929

30-
theorem ex₆ (a c : Int) (_ : c + 3*a = 0) (_ : c + 3*a = 1) : False := by
30+
example (a c : Int) (_ : c + 3*a = 0) (_ : c + 3*a = 1) : False := by
3131
grind
3232

33-
theorem ex₇ (a c : Int) (_ : c + 3*a = 0) (_ : c - 3*a = 6) (_ : 2*c + a = 0) : False := by
33+
example (a c : Int) (_ : c + 3*a = 0) (_ : c - 3*a = 6) (_ : 2*c + a = 0) : False := by
3434
grind
3535

36-
theorem ex₈ (a b : Int) (_ : 2 ∣ a + 1) (_ : a = 2*b) : False := by
36+
example (a b : Int) (_ : 2 ∣ a + 1) (_ : a = 2*b) : False := by
3737
grind
3838

3939
example (a b : Int) (_ : a = 2*b) (_ : 2 ∣ a + 1) : False := by
@@ -70,12 +70,6 @@ example (a b : Int) : a = 0 → b = 1 → a + b > 2 → False := by
7070
example (a b c : Int) : a = 0 → a + b > 2 → b = c → 1 = c → False := by
7171
grind
7272

73-
#print ex₁
74-
#print ex₂
75-
#print ex₃
76-
#print ex₄
77-
#print ex₅
78-
#print ex₆
79-
#print ex₇
80-
#print ex₈
81-
#print ex₉
73+
example (p : Int) (n : Nat) (hmp : Int.negSucc (n + 1) + 1 = p)
74+
(hnm : Int.negSucc (n + 1 + 1) + 1 = Int.negSucc (n + 1)) : p = Int.negSucc n := by
75+
grind

0 commit comments

Comments
 (0)