Hi, I'm having a problem I can't really understand (with coq 8.12.1).
I have a goal (using extructures
but it's probably irrelevant):
0 \in [fset 0]
and a tactic in scope which prints to
in_fset_auto := rewrite in_fset; auto
but in_fset_auto
fails with
Found no subterm matching (...)
while
rewrite in_fset; auto.
works and solves the goal.
Am I missing something stupid?
Isn't that a problem with auto printing? Like, it used to evaluate as auto with *
or something?
if you do Ltac in_fset_auto_2 := rewrite in_fset; auto.
and use that does it work?
Gaëtan Gilbert said:
if you do
Ltac in_fset_auto_2 := rewrite in_fset; auto.
and use that does it work?
Yes it does.
Pierre-Marie Pédrot said:
Isn't that a problem with auto printing? Like, it used to evaluate as
auto with *
or something?
No, it's not that. I just changed auto
with reflexivity
and it has the exact same resutl.
so what's the real definition of in_fset_auto?
That's the real one…
Now it's
Ltac in_fset_auto :=
rewrite in_fset ; reflexivity.
Is it the same in_fset?
Have you tried printing all?
It could have resolved typeclasses differently.
It's the same in_fset
I checked the default interpretation is the same in both locations.
Really really? Like, you diffed the output of printing all?
With Set Printing All
I still get
Ltac Foo.Bar.tactics.in_fset_auto := rewrite in_fset; reflexivity
Don't trust Ltac printing.
Go to the file defining the tactic and print it there.
Then which printing should I check
Like, Definition foo := in_fet. Print foo.
Ltac tactics.in_fset_auto := rewrite in_fset; reflexivity
From the terminal, the output is literally the same.
(Using Set Printing All
in both)
I used a fully qualified name for in_fset
:
rewrite extructures.fset.in_fset ; reflexivity.
But no change.
Ok found it…
I forgot about one thing… rewrite
is not the same in both files…
This is really terrible that they are both bearing the same name and that printing also doesn't differentiate them.
Thanks for your help!
Last updated: Sep 23 2023 at 14:01 UTC