Prerequisites
Description
def specOr (x y : Bool) : Bool :=
match x with
| true => true
| false => y
@[macro_inline] def implOr (x y : Bool) : Bool :=
match x with
| true => true
| false => y
@[csimp] theorem specOr_eq_implOr : specOr = implOr := by
funext x y; cases x <;> rfl
/-- Macro-inlining this introduces `specOr` after `toDecl` has already run `csimp`. -/
@[macro_inline] def wrapper (x y : Bool) : Bool :=
specOr x y
def useWrapper (x y : Bool) : Bool :=
wrapper x y
/-- info: false -/
#guard_msgs in
#eval useWrapper false false
/-- info: true -/
#guard_msgs in
#eval useWrapper true false
Context
This came up as part of #8309, where we want to mark the Decidable instances on And and Or as macro_inline.
Steps to Reproduce
- Run the above code
Expected behavior: Code succeeds
Actual behavior: useWrapper fails to compile with Failed to find LCNF signature for implOr
Versions
nightly-2026-08-20
Impact
Add 👍 to issues you consider important. If others are impacted by this issue, please ask them to add 👍 to it.
Prerequisites
https://github.com/leanprover/lean4/issues
Avoid dependencies to Mathlib or Batteries.
https://live.lean-lang.org/#project=lean-nightly
(You can also use the settings there to switch to “Lean nightly”)
Description
Context
This came up as part of #8309, where we want to mark the
Decidableinstances onAndandOrasmacro_inline.Steps to Reproduce
Expected behavior: Code succeeds
Actual behavior:
useWrapperfails to compile withFailed to find LCNF signature for implOrVersions
nightly-2026-08-20Impact
Add 👍 to issues you consider important. If others are impacted by this issue, please ask them to add 👍 to it.