Equations
- Lean.Meta.Grind.mkOffsetPattern pat k = Lean.mkApp2 (Lean.mkConst `Lean.Grind.offset) pat (Lean.mkRawNatLit k)
Instances For
Equations
- Lean.Meta.Grind.mkEqBwdPattern u α lhs rhs = Lean.mkApp3 (Lean.mkConst `Lean.Grind.eqBwdPattern u) α lhs rhs
Instances For
Equations
- Lean.Meta.Grind.isEqBwdPattern e = e.isAppOfArity `Lean.Grind.eqBwdPattern 3
Instances For
- decl
(declName : Name)
: Origin
A global declaration in the environment.
- fvar
(fvarId : FVarId)
: Origin
A local hypothesis.
- stx
(id : Name)
(ref : Syntax)
: Origin
A proof term provided directly to a call to
grind
whereref
is the provided grind argument. Theid
is a unique identifier for the call. - local
(id : Name)
: Origin
It is local, but we don't have a local hypothesis for it.
Instances For
Equations
- Lean.Meta.Grind.instInhabitedOrigin = { default := Lean.Meta.Grind.Origin.decl default }
Equations
- Lean.Meta.Grind.instReprOrigin = { reprPrec := Lean.Meta.Grind.reprOrigin✝ }
Equations
A unique identifier corresponding to the origin.
Equations
- (Lean.Meta.Grind.Origin.decl a).key = a
- (Lean.Meta.Grind.Origin.fvar a).key = a.name
- (Lean.Meta.Grind.Origin.stx a a_1).key = a
- (Lean.Meta.Grind.Origin.local a).key = a
Instances For
Equations
- (Lean.Meta.Grind.Origin.decl a).pp = do let __do_lift ← Lean.mkConstWithLevelParams a pure (Lean.MessageData.ofConst __do_lift)
- (Lean.Meta.Grind.Origin.fvar a).pp = pure (Lean.MessageData.ofExpr (Lean.mkFVar a))
- (Lean.Meta.Grind.Origin.stx a a_1).pp = pure (Lean.MessageData.ofSyntax a_1)
- (Lean.Meta.Grind.Origin.local a).pp = pure (Lean.MessageData.ofName a)
Instances For
Equations
- Lean.Meta.Grind.instBEqOrigin_1 = { beq := fun (a b : Lean.Meta.Grind.Origin) => a.key == b.key }
Equations
- Lean.Meta.Grind.instHashableOrigin = { hash := fun (a : Lean.Meta.Grind.Origin) => hash a.key }
- eqLhs : EMatchTheoremKind
- eqRhs : EMatchTheoremKind
- eqBoth : EMatchTheoremKind
- eqBwd : EMatchTheoremKind
- fwd : EMatchTheoremKind
- bwd : EMatchTheoremKind
- leftRight : EMatchTheoremKind
- rightLeft : EMatchTheoremKind
- default : EMatchTheoremKind
- user : EMatchTheoremKind
Instances For
Equations
A theorem for heuristic instantiation based on E-matching.
It stores universe parameter names for universe polymorphic proofs. Recall that it is non-empty only when we elaborate an expression provided by the user. When
proof
is just a constant, we can use the universe parameter names stored in the declaration.- proof : Expr
- numParams : Nat
Contains all symbols used in
pattterns
.- origin : Origin
- kind : EMatchTheoremKind
Instances For
Equations
- One or more equations did not get rendered due to their size.
Set of E-matching theorems.
The key is a symbol from
EMatchTheorem.symbols
.- origins : Lean.PHashSet Lean.Meta.Grind.Origin
Set of theorem ids that have been inserted using
insert
. - erased : Lean.PHashSet Lean.Meta.Grind.Origin
Theorems that have been marked as erased
Mapping from origin to E-matching theorems associated with this origin.
Instances For
Inserts a thm
with symbols [s_1, ..., s_n]
to s
.
We add s_1 -> { thm with symbols := [s_2, ..., s_n] }
.
When grind
internalizes a term containing symbol s
, we
process all theorems thm
associated with key s
.
If their thm.symbols
is empty, we say they are activated.
Otherwise, we reinsert into map
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Returns true
if s
contains a theorem with the given origin.
Equations
- s.contains origin = Lean.PersistentHashSet.contains (Lean.Meta.Grind.EMatchTheorems.origins✝ s) origin
Instances For
Mark the theorem with the given origin as erased
Equations
- One or more equations did not get rendered due to their size.
Instances For
Returns true if the theorem has been marked as erased.
Equations
- s.isErased origin = Lean.PersistentHashSet.contains (Lean.Meta.Grind.EMatchTheorems.erased✝ s) origin
Instances For
Retrieves theorems from s
associated with the given symbol. See EMatchTheorem.insert
.
The theorems are removed from s
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Returns theorems associated with the given origin.
Equations
- s.find origin = match Lean.PersistentHashMap.find? (Lean.Meta.Grind.EMatchTheorems.omap✝ s) origin with | some thms => thms | x => []
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Returns true
if declName
has been tagged as an E-match theorem using [grind]
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Auxiliary function to expand a pattern containing forbidden application symbols into a multi-pattern.
This function enhances the usability of the [grind =]
attribute by automatically handling
forbidden pattern symbols. For example, consider the following theorem tagged with this attribute:
getLast?_eq_some_iff {xs : List α} {a : α} : xs.getLast? = some a ↔ ∃ ys, xs = ys ++ [a]
Here, the selected pattern is xs.getLast? = some a
, but Eq
is a forbidden pattern symbol.
Instead of producing an error, this function converts the pattern into a multi-pattern,
allowing the attribute to be used conveniently.
The function recursively expands patterns with forbidden symbols by splitting them into their sub-components. If the pattern does not contain forbidden symbols, it is returned as-is.
Equations
- Lean.Meta.Grind.mkGroundPattern e = Lean.mkAnnotation `grind.ground_pat e
Instances For
Equations
- Lean.Meta.Grind.groundPattern? e = Lean.annotation? `grind.ground_pat e
Instances For
Equations
Instances For
- symbolSet : Std.HashSet HeadIndex
- bvarsFound : Std.HashSet Nat
Instances For
Equations
Instances For
Returns a bit-mask mask
s.t. mask[i]
is true if the corresponding argument is
- a type (that is not a proposition) or type former (which has forward dependencies) or
- a proof, or
- an instance implicit argument
When mask[i]
, we say the corresponding argument is a "support" argument.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Instances For
Auxiliary type for the checkCoverage
function.
- ok : CheckCoverageResult
checkCoverage
succeeded - missing
(pos : List Nat)
: CheckCoverageResult
checkCoverage
failed because some of the theorem parameters are missing,pos
contains their positions
Instances For
Creates an E-matching theorem for a theorem with proof proof
, numParams
parameters, and the given set of patterns.
Pattern variables are represented using de Bruijn indices.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Creates an E-matching theorem for declName
with numParams
parameters, and the given set of patterns.
Pattern variables are represented using de Bruijn indices.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Given a theorem with proof proof
and type of the form ∀ (a_1 ... a_n), lhs = rhs
,
creates an E-matching pattern for it using addEMatchTheorem n [lhs]
If normalizePattern
is true, it applies the grind
simplification theorems and simprocs to the pattern.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Given theorem with name declName
and type of the form ∀ (a_1 ... a_n), lhs = rhs
,
creates an E-matching pattern for it using addEMatchTheorem n [lhs]
If normalizePattern
is true, it applies the grind
simplification theorems and simprocs to the
pattern.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Adds an E-matching theorem to the environment.
See mkEMatchTheorem
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Adds an E-matching equality theorem to the environment.
See mkEMatchEqTheorem
.
Equations
- Lean.Meta.Grind.addEMatchEqTheorem declName = do let __do_lift ← Lean.Meta.Grind.mkEMatchEqTheorem declName Lean.ScopedEnvExtension.add Lean.Meta.Grind.ematchTheoremsExt✝ __do_lift
Instances For
Returns the E-matching theorems registered in the environment.
Equations
- Lean.Meta.Grind.getEMatchTheorems = do let __do_lift ← Lean.getEnv pure (Lean.ScopedEnvExtension.getState Lean.Meta.Grind.ematchTheoremsExt✝ __do_lift)
Instances For
Creates an E-match theorem using the given proof and kind.
If groundPatterns
is true
, it accepts patterns without pattern variables. This is useful for
theorems such as theorem evenZ : Even 0
. For local theorems, we use groundPatterns := false
since the theorem is already in the grind
state and there is nothing to be instantiated.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.