Zulip Chat Archive
Stream: general
Topic: Retrieving interactively constructed terms
Seul Baek (Jun 15 2018 at 00:58):
Suppose I'd like to construct a term of type τ
interactively, so I use e ← assert n '(τ)
and apply some further tactics to close off the goal. Now e
is bound to a local constant, which is the expr of a term that has type τ
.
Later in the proof, I need to call a tactic foo : τ → tactic unit
. I think I should be able to use e
in some way to extract a term t : τ
to be used as an argument for foo
. But t ← eval_expr τ e
doesn't work, because eval_expr
only works on closed expressions. Is there something else I can do to retrieve the constructed term?
It seems that define
retains more information than assert
, but I'm not sure whether that helps.
Sebastian Ullrich (Jun 15 2018 at 09:03):
You should probably use tactic.solve_aux
in favor of assert
Seul Baek (Jun 15 2018 at 15:35):
@Sebastian Ullrich I think this is closer to what I need, but it requires that you provide upfront a specific tactic which will solve the newly created goal. If there is a need to go interactive because it can't be predicted beforehand which tactic will do the job, I wonder if there are alternatives?
I'm currently experimenting with combinations of assert
and mk_meta_var
, but it seems that anything I do will only add a local constant to the context, instead of the actual term. Perhaps I'm trying to do something that you're not supposed to do :confused:
Sebastian Ullrich (Jun 15 2018 at 15:38):
If there is a need to go interactive because it can't be predicted beforehand which tactic will do the job, I wonder if there are alternatives?
I'm not sure I understand, what does your use case look like that you don't know when the goal will be solved? Anyway, if you copy and adapt solve_aux
's implementation, you should be able to do something like that.
Last updated: Dec 20 2023 at 11:08 UTC