Previously, the tactic state shown at `decreasing_by` would leak lots of details about the translation, and mention `invImage`, `PSigma` etc. This is not nice. So this introduces `clean_wf`, which is like `simp_wf` but using `simp`'s `only` mode, and runs this unconditionally. This should clean up the goal to a reasonable extent. Previously `simp_wf` was an unrestricted `simp […]` call, but we probably don’t want arbitrary simplification to happen at this point, so this now became `simp only` call. For backwards compatibility, `decreasing_with` begins with `try simp`. The `simp_wf` tactic is still available to not break too much existing code; it’s docstring suggests to no longer use it. With `set_option cleanDecreasingByGoal false` one can disable the use of `clean_wf`. I hope this is only needed for debugging and understanding. Migration advise: If your `decreasing_by` proof begins with `simp_wf`, either remove that (if the proof still goes through), or replace with `simp`. I am a bit anxious about running even `simp only` unconditionally here, as it may do more than some user might want, e.g. because of options like `zetaDelta := true`. We'll see if we need to reign in this tactic some more. I wonder if in corner cases the `simp_wf` tactic might be able to close the goal, and if that is a problem. If so, we may have to promote simp’s internal `mayCloseGoal` parameter to a simp configuration option and use that here. fixes #4928
17 lines
526 B
Text
17 lines
526 B
Text
def zero_out (arr : Array Nat) (i : Nat) : Array Nat :=
|
|
if h : i < arr.size then
|
|
zero_out (arr.set ⟨i, h⟩ 0) (i + 1)
|
|
else
|
|
arr
|
|
termination_by arr.size - i
|
|
decreasing_by simp; apply Nat.sub_succ_lt_self _ _ h
|
|
|
|
-- set_option trace.Elab.definition true
|
|
theorem size_zero_out (arr : Array Nat) (i : Nat) : (zero_out arr i).size = arr.size := by
|
|
unfold zero_out
|
|
split
|
|
· rw [size_zero_out]
|
|
rw [Array.size_set]
|
|
· rfl
|
|
termination_by arr.size - i
|
|
decreasing_by simp; apply Nat.sub_succ_lt_self; assumption
|