leanprover / leanprover/lean4

failed to generate equational theorem

Open
#7,841 8 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug P-medium
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:

Description

Starting in version 4.18.0, Lean fails to generate equational theorems for certain well-founded recursive definitions.

Steps to Reproduce
inductive IsZero : Nat → Type
  | mk : IsZero .zero

def isZero : ∀ n, Option (IsZero n)
  | .zero => some .mk
  | .succ n => match isZero n with
               | none => none
               | some .mk => none
  termination_by n => n

Expected behavior: Code succeeds with no errors.

Actual behavior: The following error:

error: failed to generate equational theorem for 'isZero'
case h_2
x n : Nat
⊢ ((match (motive :=
        (n : Nat) →
          Option (IsZero n) →
            ((y : Nat) → (invImage (fun x => x) instWellFoundedRelationOfSizeOf).1 y n.succ → Option (IsZero y)) →
              Option (IsZero n.succ))
        n, isZero n with
      | n, none => fun x => none
      | .(Nat.zero), some IsZero.mk => fun x => none)
      fun y a => isZero y) =
    match n, isZero n with
    | n, none => none
    | .(Nat.zero), some IsZero.mk => none
Versions

v4.18.0-rc1, v4.18.0, v4.19.0-rc1, v4.19.0-rc2

Impact

Add 👍 to issues you consider important. If others are impacted by this issue, please ask them to add 👍 to it.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by running the self-contained IsZero/isZero reproducer against the listed Lean versions and the latest nightly release. Compare the expected successful compilation with the equational-theorem generation error and use that failure as the regression boundary. Done means the reproducer compiles without errors while preserving its well-founded recursive definition.

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
Clearly specified
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.