These options affect the generation of equational theorems in a significant way. For these, their value at definition time, not realization time, should matter.
This is implemented by
- eagerly realizing the equations when they are set to a non-default value
- when realizing them lazily, reset the options to their default
Equations
Instances For
Environment extension for storing which declarations are recursive.
This information is populated by the PreDefinition
module, but the simplifier
uses when unfolding declarations.
Marks the given declaration as recursive.
Equations
- Lean.Meta.markAsRecursive declName = Lean.modifyEnv fun (x : Lean.Environment) => Lean.Meta.recExt.tag x declName
Instances For
Returns true
if declName
was defined using well-founded recursion, or structural recursion.
Equations
- Lean.Meta.isRecursiveDefinition declName = do let __do_lift ← Lean.getEnv pure (Lean.Meta.recExt.isTagged __do_lift declName)
Instances For
Equations
Instances For
Equations
Instances For
Returns true
if s
is of the form eq_<idx>
Equations
- Lean.Meta.isEqnReservedNameSuffix s = (Lean.Meta.eqnThmSuffixBasePrefix.isPrefixOf s && (s.drop 3).isNat)
Instances For
Equations
- Lean.Meta.unfoldThmSuffix = "eq_def"
Instances For
Equations
- Lean.Meta.eqUnfoldThmSuffix = "eq_unfold"
Instances For
Throw an error if names for equation theorems for declName
are not available.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Instances For
Registers a new function for retrieving equation theorems. We generate equations theorems on demand, and they are generated by more than one module. For example, the structural and well-founded recursion modules generate them. Most recent getters are tried first.
A getter returns an Option (Array Name)
. The result is none
if the getter failed.
Otherwise, it is a sequence of theorem names where each one of them corresponds to
an alternative. Example: the definition
def f (xs : List Nat) : List Nat :=
match xs with
| [] => []
| x::xs => (x+1)::f xs
should have two equational theorems associated with it
f [] = []
and
(x : Nat) → (xs : List Nat) → f (x :: xs) = (x+1) :: f xs
Equations
- One or more equations did not get rendered due to their size.
Instances For
- map : Lean.PHashMap Lean.Name (Array Lean.Name)
- mapInv : Lean.PHashMap Lean.Name Lean.Name
Instances For
Equations
- Lean.Meta.instInhabitedEqnsExtState = { default := { map := default, mapInv := default } }
Returns some declName
if thmName
is an equational theorem for declName
.
Equations
- Lean.Meta.isEqnThm? thmName = do let __do_lift ← Lean.getEnv pure (Lean.PersistentHashMap.find? (Lean.Meta.eqnsExt.getState __do_lift).mapInv thmName)
Instances For
Returns equation theorems for the given declaration.
Equations
- One or more equations did not get rendered due to their size.
Instances For
If any equation theorem affecting option is not the default value, create the equations now.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Instances For
Registers a new function for retrieving a "unfold" equation theorem.
We generate this kind of equation theorem on demand, and it is generated by more than one module. For example, the structural and well-founded recursion modules generate it. Most recent getters are tried first.
A getter returns an Option Name
. The result is none
if the getter failed.
Otherwise, it is a theorem name. Example: the definition
def f (xs : List Nat) : List Nat :=
match xs with
| [] => []
| x::xs => (x+1)::f xs
should have the theorem
(xs : Nat) →
f xs =
match xs with
| [] => []
| x::xs => (x+1)::f xs
Equations
- One or more equations did not get rendered due to their size.
Instances For
Returns an "unfold" theorem (f.eq_def
) for the given declaration.
By default, we do not create unfold theorems for nonrecursive definitions.
You can use nonRec := true
to override this behavior.
Equations
- One or more equations did not get rendered due to their size.