Common Errors and Patterns
The following list contains common errors one might encounter when using the module system and especially porting existing files to the module system.
- Unknown constant
Check whether you might be trying to access a private definition in the public scope. If so, you might want to make the current declaration private as well or otherwise enter the private scope such as through
private
on a field orby
for a proof. TODO: improve error message.If the message is prefixed with
(interpreter)
, this suggests a missingmeta import
. The new import should be placed in the file defining the metaprogram depending on the missing constant, which is not necessarily the file triggering the error. Note that the language server always doesmeta import
s for the benefit of#eval
etc., so the error might only occur in a cmdline build. TODO: better, staticmeta
checking.- Definitional equality errors, especially after porting
You are likely missing an
expose
attribute on a definition or alternatively, if imported, animport all
. Prefer the former if anyone outside your library might feasible require the same access.Lean.reduceCmd : command
`#reduce <expression>` reduces the expression `<expression>` to its normal form. This involves applying reduction rules until no further reduction is possible. By default, proofs and types within the expression are not reduced. Use modifiers `(proofs := true)` and `(types := true)` to reduce them. Recall that propositions are types in Lean. **Warning:** This can be a computationally expensive operation, especially for complex expressions. Consider using `#eval <expression>` for simple evaluation/execution of expressions.
#reduce
and/ortrace.Meta.isDefEq
can help with finding the blocking definition. You might also see this as a kernel error when a tactic directly emits proof terms referencing specific declarations without going through the elaborator, such as for proof by reflection. In this case, there is no readily available trace for debugging; consider using@[expose] section
s generously on the closure of relevant modules.
