- mvarId : Lean.MVarId
- subst : Lean.Meta.FVarSubst
- numNewEqs : Nat
def
Lean.Meta.unifyEq?
(mvarId : Lean.MVarId)
(eqFVarId : Lean.FVarId)
(subst : optParam Lean.Meta.FVarSubst { map := ∅ })
(acyclic : optParam (Lean.MVarId → Lean.Expr → Lean.MetaM Bool) fun x x => pure false)
(caseName? : optParam (Option Lean.Name) none)
:
Helper method for methods such as Cases.unifyEqs?
.
Given the given goal mvarId
containing the local hypothesis eqFVarId
, it performs the following operations:
- If
eqFVarId
is a heterogeneous equality, tries to convert it to a homogeneous one. - If
eqFVarId
is a homogeneous equality of the forma = b
, it tries- If
a
andb
are definitionally equal, clear it - Normalize
a
andb
using the current reducibility setting. - If
a
(b
) is a free variable not occurring inb
(a
), replace it everywhere. - If
a
andb
are distinct constructors, returnnone
to indicate that the goal has been closed. - If
a
andb
are the same contructor, applyinjection
, the result contains the number of new equalities introduced in the goal. - It also tries to apply the given
acyclic
method to try to close the goal. Remark: It is a parameter becausesimp
usesunifyEq?
, andacyclic
depends onsimp
.
- If
Equations
- One or more equations did not get rendered due to their size.
def
Lean.Meta.unifyEq?.substEq
(mvarId : Lean.MVarId)
(eqFVarId : Lean.FVarId)
(subst : optParam Lean.Meta.FVarSubst { map := ∅ })
(acyclic : optParam (Lean.MVarId → Lean.Expr → Lean.MetaM Bool) fun x x => pure false)
(eqDecl : Lean.LocalDecl)
(a : Lean.Expr)
(b : Lean.Expr)
(symm : Bool)
:
Equations
- One or more equations did not get rendered due to their size.
def
Lean.Meta.unifyEq?.injection
(mvarId : Lean.MVarId)
(eqFVarId : Lean.FVarId)
(subst : optParam Lean.Meta.FVarSubst { map := ∅ })
(caseName? : optParam (Option Lean.Name) none)
(eqDecl : Lean.LocalDecl)
(a : Lean.Expr)
(b : Lean.Expr)
:
Equations
- One or more equations did not get rendered due to their size.