Zulip Chat Archive
Stream: lean4
Topic: elab with tactics
louq (Sep 06 2024 at 02:36):
Im figuring out how to use elab
elab "process_all_goals" : tactic => do
  let goal_type ← Lean.Elab.Tactic.getMainTarget
  let glctx <- Lean.MonadLCtx.getLCtx
I want to use tactics during elaboration. Is there a way for this?
Leni Aniva (Sep 06 2024 at 02:39):
louq said:
Im figuring out how to use elab
elab "process_all_goals" : tactic => do let goal_type ← Lean.Elab.Tactic.getMainTarget let glctx <- Lean.MonadLCtx.getLCtxI want to use tactics during elaboration. Is there a way for this?
you can run the TacticM monad inside of your Elab.TermM monad
let tacticM : TacticM := do
  ...
tacticM.run { elaborator := .anonymous } |>.run { goals := [goal] }
louq (Sep 06 2024 at 02:48):
can you give me an example
Leni Aniva (Sep 06 2024 at 03:19):
louq said:
can you give me an example
do you mean an example of running TacticM inside Elab.TermM?
louq (Sep 06 2024 at 11:08):
yes.
Kyle Miller (Sep 06 2024 at 17:23):
Maybe you're looking for docs#Lean.Elab.Tactic.evalTactic ?
If you want to construct a proof from a tactic script, you could also do elabTermEnsuringType  (<- `(by my_tactics)) goal_type. That's docs#Lean.Elab.Tactic.elabTermEnsuringType
Leni Aniva (Sep 06 2024 at 23:25):
louq said:
yes.
def runTacticM (mvarId: MVarId) (tactic: Elab.Tactic.TacticM Unit): Elab.TermElabM (List MVarId) := do
  mvarId.checkNotAssigned `runTacticM
  let (_, newGoals) ← tacticM { elaborator := .anonymous } |>.run { goals := [mvarId] }
  return newGoals
like this?
louq (Sep 07 2024 at 17:11):
Leni Aniva said:
louq said:
yes.
def runTacticM (mvarId: MVarId) (tactic: Elab.Tactic.TacticM Unit): Elab.TermElabM (List MVarId) := do mvarId.checkNotAssigned `runTacticM let (_, newGoals) ← tacticM { elaborator := .anonymous } |>.run { goals := [mvarId] } return newGoalslike this?
Im using lean4 web version. Can you show me the use of this in lean4?
Last updated: May 02 2025 at 03:31 UTC