fix: recursive overapplication at WF/Fix.lean
This commit is contained in:
parent
f306c9b69b
commit
b745c4f51a
2 changed files with 16 additions and 3 deletions
|
|
@ -50,10 +50,11 @@ private partial def replaceRecApps (recFnName : Name) (fixedPrefixSize : Nat) (d
|
|||
| Expr.app _ _ _ =>
|
||||
let processApp (e : Expr) : TermElabM Expr :=
|
||||
e.withApp fun f args => do
|
||||
if f.isConstOf recFnName && args.size == fixedPrefixSize + 1 then
|
||||
let r := mkApp F (← loop F args.back)
|
||||
if f.isConstOf recFnName && args.size >= fixedPrefixSize + 1 then
|
||||
let r := mkApp F (← loop F args[fixedPrefixSize])
|
||||
let decreasingProp := (← whnf (← inferType r)).bindingDomain!
|
||||
return mkApp r (← mkDecreasingProof decreasingProp decrTactic?)
|
||||
let r := mkApp r (← mkDecreasingProof decreasingProp decrTactic?)
|
||||
return mkAppN r (← args[fixedPrefixSize+1:].toArray.mapM (loop F))
|
||||
else
|
||||
return mkAppN (← loop F f) (← args.mapM (loop F))
|
||||
let matcherApp? ← matchMatcherApp? e
|
||||
|
|
|
|||
12
tests/lean/run/wfOverapplicationIssue.lean
Normal file
12
tests/lean/run/wfOverapplicationIssue.lean
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
theorem Array.sizeOf_lt_of_mem' [DecidableEq α] [SizeOf α] {as : Array α} (h : a ∈ as) : sizeOf a < sizeOf as := by
|
||||
simp [Membership.mem, contains, any, Id.run, BEq.beq, anyM] at h
|
||||
let rec aux (j : Nat) : anyM.loop (m := Id) (fun b => decide (a = b)) as as.size (Nat.le_refl ..) j = true → sizeOf a < sizeOf as := by
|
||||
unfold anyM.loop
|
||||
intro h
|
||||
split at h
|
||||
. simp [Bind.bind, pure] at h; split at h
|
||||
next he => subst a; apply sizeOf_get_lt
|
||||
next => have ih := aux (j+1) h; assumption
|
||||
. contradiction
|
||||
apply aux 0 h
|
||||
termination_by aux j => as.size - j
|
||||
Loading…
Add table
Reference in a new issue