Documentation

Lean.Meta.Tactic.Grind.EMatchTheorem

Equations
  • One or more equations did not get rendered due to their size.
Equations
Equations
  • One or more equations did not get rendered due to their size.
def Lean.Meta.Grind.preprocessPattern (pat : Expr) (normalizePattern : Bool := true) :
Equations
  • One or more equations did not get rendered due to their size.
  • 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 where ref is the provided grind argument. The id 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

A theorem for heuristic instantiation based on E-matching.

  • levelParams : Array Name

    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
  • patterns : List Expr
  • symbols : List HeadIndex

    Contains all symbols used in pattterns.

  • origin : Origin
  • The kind is used for generating the patterns. We save it here to implement grind?.

Instances For
Equations
  • One or more equations did not get rendered due to their size.

Set of E-matching theorems.

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.

Returns true if s contains a theorem with the given origin.

Equations

Mark the theorem with the given origin as erased

Equations
  • One or more equations did not get rendered due to their size.

Returns true if the theorem has been marked as erased.

Equations
@[inline]

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.

Returns theorems associated with the given origin.

Equations
Equations
  • One or more equations did not get rendered due to their size.

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.
Equations
  • One or more equations did not get rendered due to their size.

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.

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.
Equations
  • One or more equations did not get rendered due to their size.

Auxiliary type for the checkCoverage function.

def Lean.Meta.Grind.mkEMatchTheoremCore (origin : Origin) (levelParams : Array Name) (numParams : Nat) (proof : Expr) (patterns : List Expr) (kind : EMatchTheoremKind) :

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.
def Lean.Meta.Grind.mkEMatchTheorem (declName : Name) (numParams : Nat) (patterns : List Expr) (kind : EMatchTheoremKind) :

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.
def Lean.Meta.Grind.mkEMatchEqTheoremCore (origin : Origin) (levelParams : Array Name) (proof : Expr) (normalizePattern useLhs : Bool) :

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.
Equations
  • One or more equations did not get rendered due to their size.
def Lean.Meta.Grind.mkEMatchEqTheorem (declName : Name) (normalizePattern useLhs : Bool := true) :

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.
def Lean.Meta.Grind.addEMatchTheorem (declName : Name) (numParams : Nat) (patterns : List Expr) (kind : EMatchTheoremKind) :

Adds an E-matching theorem to the environment. See mkEMatchTheorem.

Equations
  • One or more equations did not get rendered due to their size.

Adds an E-matching equality theorem to the environment. See mkEMatchEqTheorem.

Equations
def Lean.Meta.Grind.mkEMatchTheoremWithKind? (origin : Origin) (levelParams : Array Name) (proof : Expr) (kind : EMatchTheoremKind) (groundPatterns : Bool := true) :

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.
def Lean.Meta.Grind.mkEMatchTheoremWithKind?.go (origin : Origin) (levelParams : Array Name) (proof : Expr) (kind : EMatchTheoremKind) (groundPatterns : Bool := true) (xs searchPlaces : Array Expr) :
Equations
  • One or more equations did not get rendered due to their size.
Equations
  • One or more equations did not get rendered due to their size.
Equations
  • One or more equations did not get rendered due to their size.
Equations
  • One or more equations did not get rendered due to their size.
def Lean.Meta.Grind.addEMatchAttr (declName : Name) (attrKind : AttributeKind) (thmKind : EMatchTheoremKind) :
Equations
  • One or more equations did not get rendered due to their size.
Equations
  • One or more equations did not get rendered due to their size.