diff options
author | Matthieu Sozeau <mattam@mattam.org> | 2016-05-27 19:37:36 +0200 |
---|---|---|
committer | Matthieu Sozeau <mattam@mattam.org> | 2016-06-16 18:21:08 +0200 |
commit | 855143c550cad6694f77a782d1056b07f8197bd3 (patch) | |
tree | 45ba61851044e31d4b3a8e2d1a0132e985656db9 /test-suite/success/bteauto.v | |
parent | 9e6696d67c7613b665799f7fe7f1a35cf4daf4b3 (diff) |
bteauto: a Proofview.tactic for multiple goals
Add an option to force backtracking at toplevel, which
is used by default when calling typeclasses eauto on a set of goals.
They might be depended on by other subgoals, so the tactic should
be backtracking by default, a once can make it not backtrack.
Diffstat (limited to 'test-suite/success/bteauto.v')
-rw-r--r-- | test-suite/success/bteauto.v | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/test-suite/success/bteauto.v b/test-suite/success/bteauto.v new file mode 100644 index 000000000..f55e32032 --- /dev/null +++ b/test-suite/success/bteauto.v @@ -0,0 +1,40 @@ + +Class A := { foo : nat }. + +Instance A_1 : A | 2 := { foo := 42 }. +Instance A_0 : A | 1 := { foo := 0 }. +Lemma aeq (a : A) : foo = foo. + reflexivity. +Qed. + +Goal exists n, n = 42. + eexists. + eapply eq_trans. + evar (a : A). subst a. + refine (@aeq ?a). + Unshelve. all:cycle 1. + typeclasses eauto. + Fail reflexivity. + Undo 2. + Set Typeclasses Debug. + (* Without multiple successes it fails *) + Fail all:((once typeclasses eauto) + reflexivity). + (* Does backtrack if other goals fail *) + all:((typeclasses eauto) + reflexivity). +Qed. + +Hint Extern 0 (_ = _) => reflexivity : typeclass_instances. + +Goal exists n, n = 42. + eexists. + eapply eq_trans. + evar (a : A). subst a. + refine (@aeq ?a). + Unshelve. all:cycle 1. + typeclasses eauto. + Fail reflexivity. + Undo 2. + Set Typeclasses Debug. + (* Does backtrack between individual goals *) + all:(typeclasses eauto). +Qed. |