Reducibility status for a definition. Controls when isDefEq and whnf are allowed to unfold it.
See TransparencyMode for the full design rationale.
reducible: Unfolded atTransparencyMode.reducibleor above. Reducible definitions still appear in user-facing terms, but are eagerly unfolded when indexing terms into discrimination trees (simp, type class resolution) and ingrind. Think of it as[inline]for indexing. Suitable for abbreviations and definitions that should be transparent to proof automation.implicitReducible: Unfolded atTransparencyMode.instancesor above. Used for type class instances and definitions that appear in types matched during implicit argument resolution (e.g.,Nat.add,Array.size). These definitions cannot be eagerly reduced (instances expand into large terms, recursive definitions are problematic), but must be unfoldable when checking implicit arguments and resolving instance diamonds (e.g.,Add Natvia direct instance vs viaSemiring). The attribute[implicit_reducible](or its alias[instance_reducible]) marks a definition with this status.semireducible: The default. Unfolded atTransparencyMode.defaultor above. Used for ordinary definitions. Suitable for user-written code whereisDefEqshould try hard during type checking, but not during speculative proof automation.irreducible: Only unfolded atTransparencyMode.all. The definition body is effectively hidden fromisDefEqin normal usage.
- reducible : ReducibilityStatus
- semireducible : ReducibilityStatus
- irreducible : ReducibilityStatus
- implicitReducible : ReducibilityStatus
Instances For
@[implicit_reducible]
Equations
@[implicit_reducible]
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Lean.instBEqReducibilityStatus.beq x✝ y✝ = (x✝.ctorIdx == y✝.ctorIdx)
Instances For
@[implicit_reducible]
Equations
Equations
- Lean.ReducibilityStatus.reducible.toAttrString = "[reducible]"
- Lean.ReducibilityStatus.irreducible.toAttrString = "[irreducible]"
- Lean.ReducibilityStatus.semireducible.toAttrString = "[semireducible]"
- Lean.ReducibilityStatus.implicitReducible.toAttrString = "[implicit_reducible]"
Instances For
@[export lean_get_reducibility_status]
Equations
- One or more equations did not get rendered due to their size.
Instances For
Return the reducibility attribute for the given declaration.
Equations
- Lean.getReducibilityStatus declName = do let __do_lift ← Lean.getEnv pure (Lean.getReducibilityStatusCore __do_lift declName)
Instances For
def
Lean.setReducibilityStatus
{m : Type → Type}
[MonadEnv m]
(declName : Name)
(s : ReducibilityStatus)
:
m Unit
Set the reducibility attribute for the given declaration.
Equations
- Lean.setReducibilityStatus declName s = Lean.modifyEnv fun (env : Lean.Environment) => Lean.setReducibilityStatusCore✝ env declName s Lean.AttributeKind.global Lean.Name.anonymous
Instances For
Set the given declaration as [reducible]
Equations
Instances For
Return true if the given declaration has been marked as [reducible].
Equations
- Lean.isReducible declName = do let __do_lift ← Lean.getReducibilityStatus declName pure (match __do_lift with | Lean.ReducibilityStatus.reducible => true | x => false)
Instances For
Return true if the given declaration has been marked as [irreducible]
Equations
- Lean.isIrreducible declName = do let __do_lift ← Lean.getReducibilityStatus declName pure (match __do_lift with | Lean.ReducibilityStatus.irreducible => true | x => false)
Instances For
Equations
- Lean.isImplicitReducibleCore env declName = match Lean.getReducibilityStatusCore env declName with | Lean.ReducibilityStatus.implicitReducible => true | x => false
Instances For
Return true if the given declaration has been marked as [implicit_reducible].
Equations
- Lean.isImplicitReducible declName = do let __do_lift ← Lean.getEnv pure (Lean.isImplicitReducibleCore __do_lift declName)
Instances For
@[reducible, inline, deprecated Lean.isImplicitReducibleCore (since := "2026-02-18")]
Instances For
@[reducible, inline, deprecated Lean.isImplicitReducible (since := "2026-02-18")]
Equations
Instances For
Set the given declaration as [irreducible]