Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bad error message when tactic for filling default field value fails #2950

Closed
leodemoura opened this issue Nov 22, 2023 · 2 comments · Fixed by #5474
Closed

Bad error message when tactic for filling default field value fails #2950

leodemoura opened this issue Nov 22, 2023 · 2 comments · Fixed by #5474
Labels
bug Something isn't working

Comments

@leodemoura
Copy link
Member

structure Foo where
  val : String
  len : Nat := val.length
  inv : val.length = len := by decide

def test2 : Foo := { -- The error message just says "failed to reduce to 'true'\n  false"
  val := "abc"
  len := 5
}

The error should say that Lean failed to initialize field inv using the specified tactic.

@leodemoura leodemoura added the bug Something isn't working label Nov 22, 2023
@girving
Copy link
Contributor

girving commented Feb 7, 2024

I hit this just now. Here's a Zulip discussion with an in-the-wild example, and another (not fully) minimized test case:

variable {α : Type}

class Yop (α : Type) where
  yop : α → α

class Nop (α : Type) [Yop α] where
  nop : ∀ x : α, Yop.yop x = x := by intro; rfl

structure A where
  x : Nat

instance : Yop A where
  yop a := ⟨a.x + 1⟩

instance : Nop A where
  -- `nop` is not defined, but the error message does not mention `nop`:
  --   tactic 'rfl' failed, equality lhs
  --     Yop.yop x✝
  --   is not definitionally equal to rhs
  --     x✝
  --   α: Type
  --   x✝: A
  --   ⊢ Yop.yop x✝ = x✝

@mattrobball
Copy link
Contributor

This comes up quite often, eg when using aesop as an autoparam.

kmill added a commit to kmill/lean4 that referenced this issue Sep 25, 2024
Adds mechanism where when a autoparam tactic fails to synthesize a parameter, the associated parameter or field name for the autoparam is reported in an error.

Notes:
* Autoparams now run their tactics without any error recovery or error-to-sorry enabled. This enables catching the error and reporting the contextual information.
* Autoparams for applications now cleanup the autoParam annotation, brining it in line with autoparams for structure fields.

Closes leanprover#2950
github-merge-queue bot pushed a commit that referenced this issue Sep 27, 2024
Adds a mechanism where when an autoparam tactic fails to synthesize a
parameter, the associated parameter name or field name for the autoparam
is reported in an error.

Examples:
```text
could not synthesize default value for parameter 'h' using tactics

could not synthesize default value for field 'inv' of 'S' using tactics
```

Notes:
* Autoparams now run their tactics without any error recovery or
error-to-sorry enabled. This enables catching the error and reporting
the contextual information. This is justified on the grounds that
autoparams are not interactive.
* Autoparams for applications now cleanup the autoParam annotation,
bringing it in line with autoparams for structure fields.
* This preserves the old behavior that autoparams leave terminfo, but we
will revisit this after some imminent improvements to the unused
variable linter.

Closes #2950
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants