Zulip Chat Archive
Stream: new members
Topic: Access parent goal
๐ ๐๐๐๐๐๐๐ ๐๐๐ ๐๐๐๐๐ (Nov 12 2024 at 02:23):
Suppose my tactic myTac
is running in the position below. Is there some way it can access the parent MVarId
, i.e., the thing with expected type P
?
example : P := by
have : Q := by myTac
...
Kyle Miller (Nov 12 2024 at 04:09):
A trick I know is to start off with refine (?_ : ?goal)
, and then you can refer to ?goal
inside the have
Daniel Weber (Nov 12 2024 at 04:52):
This seems to work, but it's hacky
import Lean
open Lean Elab Tactic
example (test : O โ Q) : P := by
have : Q := by
apply test
run_tac do
withMainContext do
let mg โ getMainGoal
for (a, a') in (โ getMCtx).eAssignment do
if a == mg then continue
let some (_, t, v, b) := a'.letFun? | continue
let v โ instantiateMVars v
if (v.findMVar? (ยท == mg)).isSome then
logInfo m!"{a} ({a'})"
return
sorry
sorry
๐ ๐๐๐๐๐๐๐ ๐๐๐ ๐๐๐๐๐ (Nov 12 2024 at 05:25):
Kyle Miller said:
A trick I know is to start off with
refine (?_ : ?goal)
, and then you can refer to?goal
inside thehave
Indeed! I was wondering if it's possible to do programmatically without adjusting the proof script, though.
๐ ๐๐๐๐๐๐๐ ๐๐๐ ๐๐๐๐๐ (Nov 12 2024 at 05:27):
Daniel Weber said:
This seems to work, but it's hacky
import Lean open Lean Elab Tactic example (test : O โ Q) : P := by have : Q := by apply test run_tac do withMainContext do let mg โ getMainGoal for (a, a') in (โ getMCtx).eAssignment do if a == mg then continue let some (_, t, v, b) := a'.letFun? | continue let v โ instantiateMVars v if (v.findMVar? (ยท == mg)).isSome then logInfo m!"{a} ({a'})" return sorry sorry
Thanks! This does work, but relies on the by myTac
appearing inside have
, and the have
elaborating to a let_fun
. I guess the answer to the question of 'is there a mapping from mvars to 'parent mvars' in the MVarCtx
is 'no'.
Daniel Weber (Nov 12 2024 at 05:28):
You can find the mvar with the maximal index which is assigned and contains the current goal, but then the parent would be the goal before apply
, not the goal before the have
. I assumed you were asking about have
specifically
Daniel Weber (Nov 12 2024 at 08:15):
@Michael Bucko may I ask why you're randomly reacting to messages?
Michael Bucko (Nov 12 2024 at 08:51):
Daniel Weber schrieb:
Michael Bucko may I ask why you're randomly reacting to messages?
I'm not a bot :) I react after I read and find something interesting. And I read and code a lot.
Last updated: May 02 2025 at 03:31 UTC