Assign mvarId := sorry
Equations
- Lean.Elab.admitGoal mvarId = mvarId.withContext do let mvarType ← Lean.Meta.inferType (Lean.mkMVar mvarId) let __do_lift ← Lean.Meta.mkSorry mvarType true mvarId.assign __do_lift
Instances For
Equations
- Lean.Elab.goalsToMessageData goals = Lean.MessageData.joinSep (List.map Lean.MessageData.ofGoal goals) (Lean.toMessageData "\n\n")
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
- elaborator : Lake.Name
Declaration name of the executing elaborator, used by
mkTacticInfo
to persist it in the info tree - recover : Bool
If
true
, enable "error recovery" in some tactics. For example,cases
tactic admits unsolved alternatives whenrecover == true
. The combinatorwithoutRecover <tac>
disables "error recovery" while executing<tac>
. This is useful for tactics such asfirst | ... | ...
.
Instances For
Equations
Instances For
Equations
Instances For
Equations
- Lean.Elab.Tactic.instMonadTacticM = let i := inferInstanceAs (Monad Lean.Elab.Tactic.TacticM); Monad.mk
Equations
- Lean.Elab.Tactic.getGoals = do let __do_lift ← get pure __do_lift.goals
Instances For
Equations
- Lean.Elab.Tactic.setGoals mvarIds = modify fun (x : Lean.Elab.Tactic.State) => { goals := mvarIds }
Instances For
Equations
- Lean.Elab.Tactic.pruneSolvedGoals = do let gs ← Lean.Elab.Tactic.getGoals let gs ← List.filterM (fun (g : Lean.MVarId) => not <$> g.isAssigned) gs Lean.Elab.Tactic.setGoals gs
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Lean.Elab.Tactic.saveState = do let __do_lift ← liftM Lean.Elab.Term.saveState let __do_lift_1 ← get pure { term := __do_lift, tactic := __do_lift_1 }
Instances For
Instances For
Like Meta.withRestoreOrSaveFull
for TermElabM
, but also takes a tacSnap?
that
- when running
act
, is set asContext.tacSnap?
- otherwise (i.e. on restore) is used to update the new snapshot promise to the old task's
value.
This extra restore step is necessary because while
reusableResult?
can be used to replay any effects onState
,Context.tacSnap?
is not part of it but changed via anIO
side effect, so it needs to be replayed separately.
We use an explicit parameter instead of accessing Context.tacSnap?
directly because this prevents
withRestoreOrSaveFull
and withReader
from being used in the wrong order.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Lean.Elab.Tactic.getCurrMacroScope = do let __do_lift ← readThe Lean.Core.Context pure __do_lift.currMacroScope
Instances For
Equations
- Lean.Elab.Tactic.getMainModule = do let __do_lift ← Lean.getEnv pure __do_lift.mainModule
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.Elab.Tactic.mkInitialTacticInfo stx = do let mctxBefore ← Lean.getMCtx let goalsBefore ← Lean.Elab.Tactic.getUnsolvedGoals pure (Lean.Elab.Tactic.mkTacticInfo mctxBefore goalsBefore stx)
Instances For
Equations
- Lean.Elab.Tactic.withTacticInfoContext stx x = do let __do_lift ← Lean.Elab.Tactic.mkInitialTacticInfo stx Lean.Elab.withInfoContext x __do_lift
Instances For
Important: we must define evalTactic
before we define
the instance MonadExcept
for TacticM
since it backtracks the state including error messages,
and this is bad when rethrowing the exception at the catch
block in these methods.
We marked these places with a (*)
in these methods.
Auxiliary datastructure for capturing exceptions at evalTactic
.
- exception : Lean.Exception
- state : Lean.Elab.Tactic.SavedState
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.Elab.Tactic.throwNoGoalsToBeSolved = Lean.throwError (Lean.toMessageData "no goals to be solved")
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.Elab.Tactic.focusAndDone tactic = Lean.Elab.Tactic.focus do let a ← tactic Lean.Elab.Tactic.done pure a
Instances For
Close the main goal using the given tactic. If it fails, log the error and admit
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Lean.Elab.Tactic.instMonadBacktrackSavedStateTacticM = { saveState := Lean.Elab.Tactic.saveState, restoreState := fun (b : Lean.Elab.Tactic.SavedState) => b.restore }
Equations
- Lean.Elab.Tactic.tryCatch x h = do let b ← Lean.saveState tryCatch x fun (ex : Lean.Exception) => do b.restore h ex
Instances For
Equations
- Lean.Elab.Tactic.instMonadExceptExceptionTacticM = { throw := fun {α : Type} => throw, tryCatch := fun {α : Type} => Lean.Elab.Tactic.tryCatch }
Execute x
with error recovery disabled
Equations
- Lean.Elab.Tactic.withoutRecover x = withReader (fun (ctx : Lean.Elab.Tactic.Context) => { elaborator := ctx.elaborator, recover := false }) x
Instances For
Equations
- Lean.Elab.Tactic.orElse x y = tryCatch (Lean.Elab.Tactic.withoutRecover x) fun (x : Lean.Exception) => y ()
Instances For
Equations
- Lean.Elab.Tactic.instOrElseTacticM = { orElse := Lean.Elab.Tactic.orElse }
Equations
- Lean.Elab.Tactic.instAlternativeTacticM = Alternative.mk (fun {x : Type} => Lean.throwError (Lean.toMessageData "failed")) fun {α : Type} => Lean.Elab.Tactic.orElse
Save the current tactic state for a token stx
.
This method is a no-op if stx
has no position information.
We use this method to save the tactic state at punctuation such as ;
Equations
- Lean.Elab.Tactic.saveTacticInfoForToken stx = if stx.getPos?.isNone = true then pure PUnit.unit else Lean.Elab.Tactic.withTacticInfoContext stx (pure ())
Instances For
Elaborate x
with stx
on the macro stack
Equations
- One or more equations did not get rendered due to their size.
Instances For
Adapt a syntax transformation to a regular tactic evaluator.
Equations
- Lean.Elab.Tactic.adaptExpander exp stx = do let stx' ← exp stx Lean.Elab.Tactic.withMacroExpansion stx stx' (Lean.Elab.Tactic.evalTactic stx')
Instances For
Add the given goals at the end of the current goals collection.
Equations
- Lean.Elab.Tactic.appendGoals mvarIds = modify fun (s : Lean.Elab.Tactic.State) => { goals := s.goals ++ mvarIds }
Instances For
Discard the first goal and replace it by the given list of goals, keeping the other goals.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Return the first goal.
Equations
- Lean.Elab.Tactic.getMainGoal = do let __do_lift ← Lean.Elab.Tactic.getGoals Lean.Elab.Tactic.getMainGoal.loop __do_lift
Instances For
Equations
- One or more equations did not get rendered due to their size.
- Lean.Elab.Tactic.getMainGoal.loop [] = Lean.Elab.Tactic.throwNoGoalsToBeSolved
Instances For
Return the main goal metavariable declaration.
Equations
- Lean.Elab.Tactic.getMainDecl = do let __do_lift ← Lean.Elab.Tactic.getMainGoal liftM __do_lift.getDecl
Instances For
Return the main goal tag.
Equations
- Lean.Elab.Tactic.getMainTag = do let __do_lift ← Lean.Elab.Tactic.getMainDecl pure __do_lift.userName
Instances For
Return expected type for the main goal.
Equations
- Lean.Elab.Tactic.getMainTarget = do let __do_lift ← Lean.Elab.Tactic.getMainDecl Lean.instantiateMVars __do_lift.type
Instances For
Execute x
using the main goal local context and instances
Equations
- Lean.Elab.Tactic.withMainContext x = do let __do_lift ← Lean.Elab.Tactic.getMainGoal __do_lift.withContext x
Instances For
Evaluate tac
at mvarId
, and return the list of resulting subgoals.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Like evalTacticAt
, but without restoring the goal list or pruning solved goals.
Useful when these tasks are already being done in an outer loop.
Equations
- Lean.Elab.Tactic.evalTacticAtRaw tac mvarId = do Lean.Elab.Tactic.setGoals [mvarId] Lean.Elab.Tactic.evalTactic tac Lean.Elab.Tactic.getGoals
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Closes main goal using the given expression.
If checkUnassigned == true
, then val
must not contain unassigned metavariables.
Returns true
if val
was successfully used to close the goal.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Lean.Elab.Tactic.liftMetaMAtMain x = Lean.Elab.Tactic.withMainContext do let __do_lift ← Lean.Elab.Tactic.getMainGoal liftM (x __do_lift)
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Get the mvarid of the main goal, run the given tactic
,
then set the new goals to be the resulting goal list.
Equations
- Lean.Elab.Tactic.liftMetaTactic tactic = Lean.Elab.Tactic.liftMetaTacticAux fun (mvarId : Lean.MVarId) => do let gs ← tactic mvarId pure ((), gs)
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Analogue of liftMetaTactic
for tactics that do not return any goals.
Equations
- Lean.Elab.Tactic.liftMetaFinishingTactic tac = Lean.Elab.Tactic.liftMetaTactic fun (g : Lean.MVarId) => do tac g pure []
Instances For
Equations
- Lean.Elab.Tactic.tryTactic? tactic = tryCatch (do let __do_lift ← tactic pure (some __do_lift)) fun (x : Lean.Exception) => pure none
Instances For
Equations
- Lean.Elab.Tactic.tryTactic tactic = tryCatch (do discard tactic pure true) fun (x : Lean.Exception) => pure false
Instances For
Use parentTag
to tag untagged goals at newGoals
.
If there are multiple new untagged goals, they are named using <parentTag>.<newSuffix>_<idx>
where idx > 0
.
If there is only one new untagged goal, then we just use parentTag
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Lean.Elab.Tactic.getNameOfIdent' id = if id.isIdent = true then id.getId else `_
Instances For
Use position of => $body
for error messages.
If there is a line break before body
, the message will be displayed on =>
only,
but the "full range" for the info view will still include body
.
Equations
- Lean.Elab.Tactic.withCaseRef arrow body x = Lean.withRef (Lean.mkNullNode #[arrow, body]) x