This PR fixes a non-termination bug that occurred when generating the match-expression splitter theorem. The bug was triggered when the proof automation for the splitter theorem repeatedly applied `injection` to the same local declaration, as it could not be removed due to forward dependencies. See issue #6065 for an example that reproduces this issue. closes #6065
25 lines
533 B
Text
25 lines
533 B
Text
def foo (r : Nat) : Nat :=
|
|
match r with
|
|
| Nat.zero => 0
|
|
| l@(Nat.succ _) =>
|
|
match l with
|
|
| 0 => 0
|
|
| Nat.succ ll =>
|
|
match ll with
|
|
| Nat.succ _ => 0
|
|
| _ => 0
|
|
|
|
example {r : Nat} : foo r = 0 := by
|
|
simp only [foo.eq_def]
|
|
guard_target =ₛ
|
|
(match r with
|
|
| Nat.zero => 0
|
|
| l@h:(Nat.succ n) =>
|
|
match l, h with
|
|
| 0, h => 0
|
|
| Nat.succ ll, h =>
|
|
match ll, h with
|
|
| Nat.succ n_1, h => 0
|
|
| x, h => 0) =
|
|
0
|
|
sorry
|