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.instanceReducible: Unfolded atTransparencyMode.instancesor above. Auto-applied by theinstancecommand and to subobject projections of class parents. The attribute[instance_reducible]marks a definition with this status; users typically do not need to apply it manually.implicitReducible: Unfolded atTransparencyMode.implicitor above (strictly above.instances). Used for definitions that should unfold when checking implicit and instance-implicit arguments for definitional equality, including for resolving instance diamonds, but must stay opaque to type class search. The attribute[implicit_reducible]marks a definition with this status. (Note: core arithmetic such asNat.addandArray.sizeis deliberatelyinstanceReducible, notimplicitReducible, because type class synthesis depends on it unfolding.)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
- instanceReducible : ReducibilityStatus
Instances For
@[instance_reducible]
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
@[instance_reducible]
Equations
@[instance_reducible]
Equations
Equations
- Lean.instBEqReducibilityStatus.beq x✝ y✝ = (x✝.ctorIdx == y✝.ctorIdx)
Instances For
Equations
- Lean.ReducibilityStatus.reducible.toAttrString = "[reducible]"
- Lean.ReducibilityStatus.irreducible.toAttrString = "[irreducible]"
- Lean.ReducibilityStatus.semireducible.toAttrString = "[semireducible]"
- Lean.ReducibilityStatus.implicitReducible.toAttrString = "[implicit_reducible]"
- Lean.ReducibilityStatus.instanceReducible.toAttrString = "[instance_reducible]"
Instances For
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
Equations
- Lean.isInstanceReducibleCore env declName = match Lean.getReducibilityStatusCore env declName with | Lean.ReducibilityStatus.instanceReducible => true | x => false
Instances For
Return true if the given declaration has been marked as [instance_reducible]
(automatically applied by the instance command and by subobject class projections).
Equations
- Lean.isInstanceReducible declName = do let __do_lift ← Lean.getEnv pure (Lean.isInstanceReducibleCore __do_lift declName)
Instances For
Set the given declaration as [irreducible]