Skip to content

Commit 7171504

Browse files
committed
Add (partial )solution to HumanEval160
1 parent 3f1553c commit 7171504

File tree

1 file changed

+26
-3
lines changed

1 file changed

+26
-3
lines changed

HumanEvalLean/HumanEval5.lean

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,28 @@
1-
def intersperse : Unit :=
2-
()
1+
def intersperse : List Int → Int → List Int
2+
| [], _ => []
3+
| [i], _ => [i]
4+
| i₁ :: i₂ :: tl, delim => i₁ :: delim :: intersperse (i₂ :: tl) delim
5+
6+
example : intersperse [] 7 = [] := rfl
7+
example : intersperse [5, 6, 3, 2] 8 = [5, 8, 6, 8, 3, 8, 2] := rfl
8+
example : intersperse [2, 2, 2] 2 = [2, 2, 2, 2, 2] := rfl
9+
10+
theorem intersperse_length_le : (intersperse nums delim).length ≤ 2 * nums.length - 1 := by
11+
fun_induction intersperse <;> simp only [intersperse, List.length_cons] at * <;> omega
12+
13+
-- Every element of index `2 * i` is the `i`th element of the input list.
14+
theorem intersperse_get?_num (h : 1 < nums.length) :
15+
(intersperse nums delim)[2 * i]? = nums[i]? := by
16+
fun_induction intersperse generalizing i <;> try contradiction
17+
next tl _ ih =>
18+
cases tl <;> cases i
19+
case nil.succ j =>
20+
cases j <;> simp +arith [intersperse]
21+
case cons.succ j =>
22+
have hj : 2 * (j + 1) = 2 * j + 2 := rfl
23+
rw [intersperse, hj]
24+
simp [ih]
25+
all_goals simp [intersperse]
326

427
/-!
528
## Prompt
@@ -50,4 +73,4 @@ def check(candidate):
5073
assert candidate([5, 6, 3, 2], 8) == [5, 8, 6, 8, 3, 8, 2]
5174
assert candidate([2, 2, 2], 2) == [2, 2, 2, 2, 2]
5275
```
53-
-/
76+
-/

0 commit comments

Comments
 (0)