New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Spurious failure of SSReflect's assumption interpretation #18898
Comments
This is a perfectly valid behaviour of forward views. The problem is There are two standard solutions to this problem,
|
Maybe the behaviour where |
No, it does not work. It fails with the exact same message. By the way, did you really mean Anyway, unless all the arguments are maximally implicit, which is the same as the full manual instantiation, it seems to fail. |
Lemma bind_inv {A B v} o f : @bind A B o f = Some v -> exists w, o = Some w /\ f w = Some v.
Proof. intros H. destruct o as [o|]. now exists o. easy. Qed. works. So does Lemma bind_inv (A B : nonPropType) o f v : @bind A B o f = Some v -> exists w, o = Some w /\ f w = Some v.
Proof. intros H. destruct o as [o|]. now exists o. easy. Qed. |
Indeed if you do not put |
Because EDIT: |
I guess you meant |
Actually, it might be sufficient to just never instantiate a dependent argument with the "view subject". Indeed, even if this resulting instance were to be well-typed by sheer luck (as it is here), the process would then necessarily fail with " |
Your suggestion makes sense, but I don't have cycles to implement it. Lines 286 to 288 in 98a2533
So |
Description of the problem
Assumption interpretation (i.e.,
move => /foo
) fails on trivial examples. The equivalent construction in vanilla Ltac (i.e.,intros H%foo
) works fine, as does the fully instantiated variant in SSReflect (i.e.,move => /(foo _ _ _ _ _)
).Small Coq file to reproduce the bug
Version of Coq where this bug occurs
8.13.1, 8.17.1, 8.19.1
Last version of Coq where the bug did not occur
No response
The text was updated successfully, but these errors were encountered: