Equations
Instances For
We use this auxiliary constant to mark delayed congruence proofs.
Equations
- Lean.Meta.Grind.congrPlaceholderProof = Lean.mkConst (Lean.Name.mkSimple "[congruence]")
 
Instances For
Returns true if e is True, False, or a literal value.
See LitValues for supported literals.
Equations
- Lean.Meta.Grind.isInterpreted e = if (e.isTrue || e.isFalse) = true then pure true else do let y ← pure PUnit.unit (fun (y : PUnit) => Lean.Meta.isLitValue e) y
 
Instances For
Key for the congruence theorem cache.
Instances For
Equations
- Lean.Meta.Grind.instBEqCongrTheoremCacheKey = { beq := fun (a b : Lean.Meta.Grind.CongrTheoremCacheKey) => Lean.Meta.Grind.isSameExpr a.f b.f && a.numArgs == b.numArgs }
 
Equations
- One or more equations did not get rendered due to their size.
 
State for the GrindM monad.
- canon : Canon.State
 - scState : ShareCommon.State ShareCommon.objectFactory
ShareCommon(akaHashconsing) state. - nextThmIdx : Nat
Next index for creating auxiliary theorems.
 - congrThms : PHashMap CongrTheoremCacheKey CongrTheorem
Congruence theorems generated so far. Recall that for constant symbols we rely on the reserved name feature (i.e.,
mkHCongrWithArityForConst?). Remark: we currently do not reuse congruence theorems - simpStats : Simp.Stats
 - trueExpr : Expr
 - falseExpr : Expr
 
Instances For
Equations
Instances For
Returns the user-defined configuration options
Equations
- Lean.Meta.Grind.getConfig = do let __do_lift ← readThe Lean.Meta.Grind.Context pure __do_lift.config
 
Instances For
Returns the internalized True constant.
Equations
- Lean.Meta.Grind.getTrueExpr = do let __do_lift ← get pure __do_lift.trueExpr
 
Instances For
Returns the internalized False constant.
Equations
- Lean.Meta.Grind.getFalseExpr = do let __do_lift ← get pure __do_lift.falseExpr
 
Instances For
Equations
- Lean.Meta.Grind.getMainDeclName = do let __do_lift ← readThe Lean.Meta.Grind.Context pure __do_lift.mainDeclName
 
Instances For
Equations
Instances For
Returns maximum term generation that is considered during ematching.
Equations
- Lean.Meta.Grind.getMaxGeneration = do let __do_lift ← Lean.Meta.Grind.getConfig pure __do_lift.gen
 
Instances For
Returns true if e is the internalized True expression.
Equations
- Lean.Meta.Grind.isTrueExpr e = do let __do_lift ← Lean.Meta.Grind.getTrueExpr pure (Lean.Meta.Grind.isSameExpr e __do_lift)
 
Instances For
Returns true if e is the internalized False expression.
Equations
- Lean.Meta.Grind.isFalseExpr e = do let __do_lift ← Lean.Meta.Grind.getFalseExpr pure (Lean.Meta.Grind.isSameExpr e __do_lift)
 
Instances For
Stores information for a node in the egraph.
Each internalized expression e has an ENode associated with it.
- self : Expr
Node represented by this ENode.
 - next : Expr
Next element in the equivalence class.
 - root : Expr
Root (aka canonical representative) of the equivalence class
 - congr : Expr
 - flipped : Bool
Proof has been flipped.
 - size : Nat
Number of elements in the equivalence class, this field is meaningless if node is not the root.
 - interpreted : Bool
interpreted := trueif node should be viewed as an abstract value. - ctor : Bool
ctor := trueif the head symbol is a constructor application. - hasLambdas : Bool
hasLambdas := trueif equivalence class contains lambda expressions. - heqProofs : Bool
If
heqProofs := true, then some proofs in the equivalence class are based on heterogeneous equality. - idx : Nat
Unique index used for pretty printing and debugging purposes.
 - generation : Nat
 - mt : Nat
Modification time
 
Instances For
Equations
- One or more equations did not get rendered due to their size.
 
Equations
- Lean.Meta.Grind.instReprENode = { reprPrec := Lean.Meta.Grind.reprENode✝ }
 
Equations
- n.isCongrRoot = Lean.Meta.Grind.isSameExpr n.self n.congr
 
Instances For
Equations
- Lean.Meta.Grind.instHashableENodeKey = { hash := fun (k : Lean.Meta.Grind.ENodeKey✝) => Lean.Meta.Grind.instHashableENodeKey.unsafe_impl_1 k }
 
Equations
- Lean.Meta.Grind.instBEqENodeKey = { beq := fun (k₁ k₂ : Lean.Meta.Grind.ENodeKey✝) => Lean.Meta.Grind.isSameExpr k₁.expr k₂.expr }
 
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
- Lean.Meta.Grind.congrHash.go enodes (f.app a) r = Lean.Meta.Grind.congrHash.go enodes f (mixHash r (Lean.Meta.Grind.hashRoot✝ enodes a))
 - Lean.Meta.Grind.congrHash.go enodes e r = mixHash r (Lean.Meta.Grind.hashRoot✝ enodes e)
 
Instances For
Equations
- One or more equations did not get rendered due to their size.
 
Instances For
Equations
- Lean.Meta.Grind.instHashableCongrKey = { hash := fun (k : Lean.Meta.Grind.CongrKey enodes) => Lean.Meta.Grind.congrHash enodes k.e }
 
Equations
- Lean.Meta.Grind.instBEqCongrKey = { beq := fun (k1 k2 : Lean.Meta.Grind.CongrKey enodes) => Lean.Meta.Grind.isCongruent enodes k1.e k2.e }
 
Equations
- Lean.Meta.Grind.CongrTable enodes = Lean.PHashSet (Lean.Meta.Grind.CongrKey enodes)
 
Instances For
Instances For
Equations
Instances For
The E-matching module instantiates theorems using the EMatchTheorem proof and a (partial) assignment.
We want to avoid instantiating the same theorem with the same assignment more than once.
Therefore, we store the (pre-)instance information in set.
Recall that the proofs of activated theorems have been hash-consed.
The assignment contains internalized expressions, which have also been hash-consed.
- proof : Expr
 
Instances For
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.
 
Instances For
Equations
- Lean.Meta.Grind.instInhabitedNewFact = { default := { proof := default, prop := default, generation := default } }
 
- mvarId : MVarId
 - enodes : ENodeMap
 - parents : ParentMap
 - congrTable : CongrTable self.enodes
 A mapping from each function application index (
HeadIndex) to a list of applications with that index. Recall that theHeadIndexfor a constant is its constant name, and for a free variable, it is its unique id.Equations to be processed.
- inconsistent : Bool
inconsistent := trueifENodes forTrueandFalseare in the same equivalence class. - gmt : Nat
Goal modification time.
 - nextIdx : Nat
Next unique index for creating ENodes
 - thms : PArray EMatchTheorem
Active theorems that we have performed ematching at least once.
 - newThms : PArray EMatchTheorem
Active theorems that we have not performed any round of ematching yet.
 - thmMap : EMatchTheorems
Inactive global theorems. As we internalize terms, we activate theorems as we find their symbols. Local theorem provided by users are added directly into
newThms. - numInstances : Nat
Number of theorem instances generated so far
 - preInstances : PreInstanceSet
(pre-)instances found so far. It includes instances that failed to be instantiated.
 new facts to be processed.
Instances For
Equations
- One or more equations did not get rendered due to their size.
 
Equations
Instances For
Equations
- Lean.Meta.Grind.GoalM.run goal x = goal.mvarId.withContext (StateRefT'.run x goal)
 
Instances For
Equations
- Lean.Meta.Grind.GoalM.run' goal x = goal.mvarId.withContext ((x *> get).run' goal)
 
Instances For
A helper function used to mark a theorem instance found by the E-matching module.
It returns true if it is a new instance and false otherwise.
Equations
- One or more equations did not get rendered due to their size.
 
Instances For
Returns true if the maximum number of instances has been reached.
Equations
- Lean.Meta.Grind.checkMaxInstancesExceeded = do let __do_lift ← get let __do_lift_1 ← liftM Lean.Meta.Grind.getConfig pure (decide (__do_lift.numInstances ≥ __do_lift_1.instances))
 
Instances For
Returns some n if e has already been "internalized" into the
Otherwise, returns nones.
Equations
- Lean.Meta.Grind.getENode? e = do let __do_lift ← get pure (Lean.PersistentHashMap.find? __do_lift.enodes { expr := e })
 
Instances For
Returns the generation of the given term. Is assumes it has been internalized
Equations
- Lean.Meta.Grind.getGeneration e = do let __do_lift ← Lean.Meta.Grind.getENode e pure __do_lift.generation
 
Instances For
Returns true if e is in the equivalence class of True.
Equations
- Lean.Meta.Grind.isEqTrue e = do let n ← Lean.Meta.Grind.getENode e let __do_lift ← liftM Lean.Meta.Grind.getTrueExpr pure (Lean.Meta.Grind.isSameExpr n.root __do_lift)
 
Instances For
Returns true if e is in the equivalence class of False.
Equations
- Lean.Meta.Grind.isEqFalse e = do let n ← Lean.Meta.Grind.getENode e let __do_lift ← liftM Lean.Meta.Grind.getFalseExpr pure (Lean.Meta.Grind.isSameExpr n.root __do_lift)
 
Instances For
Returns true if a and b are in the same equivalence class.
Equations
- One or more equations did not get rendered due to their size.
 
Instances For
Returns true if the root of its equivalence class.
Equations
- Lean.Meta.Grind.isRoot e = do let __discr ← Lean.Meta.Grind.getENode? e match __discr with | some n => pure (Lean.Meta.Grind.isSameExpr n.root e) | x => pure false
 
Instances For
Returns the root element in the equivalence class of e IF e has been internalized.
Equations
- Lean.Meta.Grind.getRoot? e = do let __discr ← Lean.Meta.Grind.getENode? e match __discr with | some n => pure (some n.root) | x => pure none
 
Instances For
Returns the root element in the equivalence class of e.
Equations
- Lean.Meta.Grind.getRoot e = do let __do_lift ← Lean.Meta.Grind.getENode e pure __do_lift.root
 
Instances For
Returns the root enode in the equivalence class of e.
Equations
- Lean.Meta.Grind.getRootENode e = do let __do_lift ← Lean.Meta.Grind.getRoot e Lean.Meta.Grind.getENode __do_lift
 
Instances For
Returns the next element in the equivalence class of e.
Equations
- Lean.Meta.Grind.getNext e = do let __do_lift ← Lean.Meta.Grind.getENode e pure __do_lift.next
 
Instances For
Returns true if e has already been internalized.
Equations
- Lean.Meta.Grind.alreadyInternalized e = do let __do_lift ← get pure (Lean.PersistentHashMap.contains __do_lift.enodes { expr := e })
 
Instances For
Equations
- Lean.Meta.Grind.getTarget? e = do let __discr ← Lean.Meta.Grind.getENode? e match __discr with | some n => pure n.target? | x => pure none
 
Instances For
Return true if a and b have the same type.
Equations
- Lean.Meta.Grind.hasSameType a b = Lean.Meta.withDefault do let __do_lift ← Lean.Meta.inferType a let __do_lift_1 ← Lean.Meta.inferType b Lean.Meta.isDefEq __do_lift __do_lift_1
 
Instances For
Equations
- One or more equations did not get rendered due to their size.
 
Instances For
Pushes lhs = rhs with proof to newEqs.
Equations
- Lean.Meta.Grind.pushEq lhs rhs proof = Lean.Meta.Grind.pushEqCore lhs rhs proof false
 
Instances For
Pushes HEq lhs rhs with proof to newEqs.
Equations
- Lean.Meta.Grind.pushHEq lhs rhs proof = Lean.Meta.Grind.pushEqCore lhs rhs proof true
 
Instances For
Pushes a = True with proof to newEqs.
Equations
- Lean.Meta.Grind.pushEqTrue a proof = do let __do_lift ← liftM Lean.Meta.Grind.getTrueExpr Lean.Meta.Grind.pushEq a __do_lift proof
 
Instances For
Pushes a = False with proof to newEqs.
Equations
- Lean.Meta.Grind.pushEqFalse a proof = do let __do_lift ← liftM Lean.Meta.Grind.getFalseExpr Lean.Meta.Grind.pushEq a __do_lift proof
 
Instances For
Records that parent is a parent of child. This function actually stores the
information in the root (aka canonical representative) of child.
Equations
- One or more equations did not get rendered due to their size.
 
Instances For
Returns the set of expressions e is a child of, or an expression in
es equivalence class is a child of.
The information is only up to date if e is the root (aka canonical representative) of the equivalence class.
Equations
- Lean.Meta.Grind.getParents e = do let __do_lift ← get match Lean.PersistentHashMap.find? __do_lift.parents { expr := e } with | some parents => pure parents | x => pure ∅
 
Instances For
Similar to getParents, but also removes the entry e ↦ parents from the parent map.
Equations
- One or more equations did not get rendered due to their size.
 
Instances For
Returns true is e is the root of its congruence class.
Equations
- Lean.Meta.Grind.isCongrRoot e = do let __do_lift ← Lean.Meta.Grind.getENode e pure __do_lift.isCongrRoot
 
Instances For
Return true if the goal is inconsistent.
Equations
- Lean.Meta.Grind.isInconsistent = do let __do_lift ← get pure __do_lift.inconsistent
 
Instances For
Returns a proof that a = b.
It assumes a and b are in the same equivalence class, and have the same type.
Returns a proof that a = b if they have the same type. Otherwise, returns a proof of HEq a b.
It assumes a and b are in the same equivalence class.
Equations
- Lean.Meta.Grind.mkEqHEqProof a b = do let __do_lift ← liftM (Lean.Meta.Grind.hasSameType a b) if __do_lift = true then Lean.Meta.Grind.mkEqProof a b else Lean.Meta.Grind.mkHEqProof a b
 
Instances For
Returns a proof that a = True.
It assumes a and True are in the same equivalence class.
Equations
- Lean.Meta.Grind.mkEqTrueProof a = do let __do_lift ← liftM Lean.Meta.Grind.getTrueExpr Lean.Meta.Grind.mkEqProof a __do_lift
 
Instances For
Returns a proof that a = False.
It assumes a and False are in the same equivalence class.
Equations
- Lean.Meta.Grind.mkEqFalseProof a = do let __do_lift ← liftM Lean.Meta.Grind.getFalseExpr Lean.Meta.Grind.mkEqProof a __do_lift
 
Instances For
Marks current goal as inconsistent without assigning mvarId.
Equations
- One or more equations did not get rendered due to their size.
 
Instances For
Returns all enodes in the goal
Equations
- One or more equations did not get rendered due to their size.
 
Instances For
Equations
Instances For
Instances For
- propagateUp : Propagator
 - propagateDown : Propagator
 - fallback : Fallback
 
Instances For
Equations
- Lean.Meta.Grind.instInhabitedMethods = { default := { propagateUp := default, propagateDown := default, fallback := default } }
 
Equations
- m.toMethodsRef = Lean.Meta.Grind.Methods.toMethodsRef.unsafe_impl_1 m
 
Instances For
Equations
- Lean.Meta.Grind.getMethods = do let __do_lift ← Lean.Meta.Grind.getMethodsRef pure __do_lift.toMethods
 
Instances For
Equations
- Lean.Meta.Grind.propagateUp e = do let __do_lift ← liftM Lean.Meta.Grind.getMethods __do_lift.propagateUp e
 
Instances For
Equations
- Lean.Meta.Grind.propagateDown e = do let __do_lift ← liftM Lean.Meta.Grind.getMethods __do_lift.propagateDown e
 
Instances For
Equations
- Lean.Meta.Grind.applyFallback = do let __do_lift ← liftM Lean.Meta.Grind.getMethods let fallback : Lean.Meta.Grind.GoalM Unit := __do_lift.fallback fallback
 
Instances For
Returns expressions in the given expression equivalence class.