Skip to content

Commit e2abf2e

Browse files
authored
Shorten 139 using grind (#179)
1 parent 6a72ee7 commit e2abf2e

File tree

3 files changed

+8
-25
lines changed

3 files changed

+8
-25
lines changed

HumanEvalLean/HumanEval139.lean

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,9 @@ theorem special_factorial_func_correct {n : Nat} :
3737
special_factorial n = n.brazilianFactorial := by
3838
simp [special_factorial]
3939
suffices ∀ (curr fact brazilFact : Nat), fact = curr ! → brazilFact = curr.brazilianFactorial →
40-
curr ≤ n → special_factorial.go n fact brazilFact curr = n.brazilianFactorial by
41-
apply this
42-
· simp [Nat.factorial]
43-
· simp [Nat.brazilianFactorial]
44-
· simp
45-
intro curr fact brazil_fact h₁ h₂ h₃
46-
fun_induction special_factorial.go with
47-
| case1 fact brazil_fact curr h =>
48-
rw [h₂, (show curr = n by omega)]
49-
| case2 fact brazilFact curr h fact' brazilFact' ih =>
50-
simp only [ge_iff_le, Nat.not_le] at h
51-
simp only [h₁, Nat.succ_eq_add_one, Nat.factorial_succ, h₂, Nat.brazilianFactorial_succ,
52-
Nat.succ_le_of_lt h, forall_const, fact', brazilFact'] at ih
53-
simp only [← ih, fact', h₁, brazilFact', h₂]
40+
curr ≤ n → special_factorial.go n fact brazilFact curr = n.brazilianFactorial by
41+
apply this <;> simp [Nat.factorial, Nat.brazilianFactorial]
42+
intros; fun_induction special_factorial.go <;> grind [Nat.factorial, Nat.brazilianFactorial]
5443

5544
theorem test1 : special_factorial 4 = 288 := by native_decide
5645
theorem test2 : special_factorial 5 = 34560 := by native_decide

HumanEvalLean/HumanEval24.lean

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,12 @@ theorem largestDivisorSpec_go {n i : Nat} (hi : 2 ≤ i)
3131
(hi' : ∀ j, 2 ≤ j → j < i → n % j ≠ 0) : LargestDivisorSpec n (largestDivisor.go n i) := by
3232
fun_induction largestDivisor.go n i
3333
case case1 i hni =>
34-
apply LargestDivisorSpec.one
35-
intro j hj hj'
36-
apply hi' _ hj
37-
exact Nat.mul_self_lt_mul_self_iff.1 (Nat.lt_of_le_of_lt hj' hni)
34+
have := @Nat.mul_self_lt_mul_self_iff i
35+
exact LargestDivisorSpec.one (fun j hj hj' => hi' _ hj (Nat.mul_self_lt_mul_self_iff.1 (by grind)))
3836
case case2 i hni hni' =>
39-
exact LargestDivisorSpec.div hi' hi hni'
37+
grind [LargestDivisorSpec.div]
4038
case case3 i hni hni' ih =>
41-
apply ih (by omega)
42-
intro j hj hij
43-
by_cases hij' : j = i
44-
· exact hij' ▸ hni'
45-
· exact hi' _ hj (by omega)
39+
grind
4640

4741
theorem largestDivisorSpec_largestDivisor {n : Nat} :
4842
LargestDivisorSpec n (largestDivisor n) := by

lean-toolchain

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
leanprover/lean4:nightly-2025-06-11
1+
leanprover/lean4:nightly-2025-08-18

0 commit comments

Comments
 (0)