Deferring `getElem` proofs leads to `declaration has free metavariables` when using `omega`
Nobody has claimed this yet.
- Dominant language
- Lean
- Stars
- 9.2k
- Forks
- 990
- Avg merge
- 1d 17h
- Merged PRs (30d)
- 175
Description
Prerequisites
Please put an X between the brackets as you perform the following steps:
- Check that your issue is not already filed:
https://github.com/leanprover/lean4/issues - Reduce the issue to a minimal, self-contained, reproducible test case.
Avoid dependencies to Mathlib or Batteries. - Test your test case against the latest nightly release, for example on
https://live.lean-lang.org/#project=lean-nightly
(You can also use the settings there to switch to “Lean nightly”)
Description
Deferring getElem proofs leads to declaration has free metavariables when using omega.
Trying grind for the same proofs can lead to tactic 'grind' failed, the goal mentions the declaration `_example`, which is being defined. To avoid circular reasoning, try rewriting the goal to eliminate `_example` before using `grind`..
Steps to Reproduce
Check
theorem Array.extract_add_one' {xs : Array α} (h₁ : i ≤ j) (h₂ : j < xs.size) :
(xs.extract i (j + 1)) = (xs.extract i j).push xs[j] := by
simp [h₁]
example {arr : Array Nat} (h : 1 < arr.size) : arr.extract 0 2 = #[1, 2] → arr[0] = 1 := by
intro h
rw [Array.extract_add_one'] at h
rw [Array.extract_add_one'] at h
simp at h
all_goals try omega
grind
(live)
Expected behavior: Should type check
Actual behavior: Does not type check. The use of omega reports (kernel) declaration has free variables '_example._proof_2'.
Versions
Lean 4.21.0-nightly-2025-06-05
Additional Information
- Moving the
simp at hbelow theall_goals try omegaresolves the issue. - Discharging proofs immediately via
rw [Array.extract_add_one'] at h <;> try omegaresolves the issue. - Using grind first instead of
omegaresolves the issue:all_goals try grind; all_goals omega. Doingall_goals grindfails withtactic 'grind' failed, the goal mentions the declaration `_example`, which is being defined. To avoid circular reasoning, try rewriting the goal to eliminate `_example` before using `grind`.
Impact
Add 👍 to issues you consider important. If others are impacted by this issue, please ask them to add 👍 to it.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the minimal theorem from the issue on Lean 4.21.0-nightly-2025-06-05, comparing the proof-ordering variants using omega and grind. Trace how deferred getElem proofs and simp affect the generated goals; done means the example type checks without free-metavariable or circular-declaration errors.
Written by the indexing model from the issue text.
Assessment
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100