From b9ff487eb52929b63893c476009449c85559080a Mon Sep 17 00:00:00 2001
From: Robbert Krebbers <mail@robbertkrebbers.nl>
Date: Wed, 24 Feb 2016 12:49:21 +0100
Subject: [PATCH] Use "clear -H" for set_solver.

Also, use "set_solver by tac" to specify a tactic.
---
 theories/collections.v | 23 +++++++++++------------
 1 file changed, 11 insertions(+), 12 deletions(-)

diff --git a/theories/collections.v b/theories/collections.v
index f2979bd8..dae4a469 100644
--- a/theories/collections.v
+++ b/theories/collections.v
@@ -253,19 +253,18 @@ Ltac set_unfold :=
 (** Since [firstorder] fails or loops on very small goals generated by
 [set_solver] already. We use the [naive_solver] tactic as a substitute.
 This tactic either fails or proves the goal. *)
-Tactic Notation "set_solver" tactic3(tac) :=
+Tactic Notation "set_solver" "by" tactic3(tac) :=
   setoid_subst;
   decompose_empty;
   set_unfold;
   naive_solver tac.
-Tactic Notation "set_solver" "-" hyp_list(Hs) "/" tactic3(tac) :=
-  clear Hs; set_solver tac.
-Tactic Notation "set_solver" "+" hyp_list(Hs) "/" tactic3(tac) :=
-  revert Hs; clear; set_solver tac.
-Tactic Notation "set_solver" := set_solver idtac.
+Tactic Notation "set_solver" "-" hyp_list(Hs) "by" tactic3(tac) :=
+  clear Hs; set_solver by tac.
+Tactic Notation "set_solver" "+" hyp_list(Hs) "by" tactic3(tac) :=
+  clear -Hs; set_solver by tac.
+Tactic Notation "set_solver" := set_solver by idtac.
 Tactic Notation "set_solver" "-" hyp_list(Hs) := clear Hs; set_solver.
-Tactic Notation "set_solver" "+" hyp_list(Hs) :=
-  revert Hs; clear; set_solver.
+Tactic Notation "set_solver" "+" hyp_list(Hs) := clear -Hs; set_solver.
 
 (** * More theorems *)
 Section collection.
@@ -537,10 +536,10 @@ Section collection_monad.
 
   Global Instance collection_fmap_mono {A B} :
     Proper (pointwise_relation _ (=) ==> (⊆) ==> (⊆)) (@fmap M _ A B).
-  Proof. intros f g ? X Y ?; set_solver eauto. Qed.
+  Proof. intros f g ? X Y ?; set_solver by eauto. Qed.
   Global Instance collection_fmap_proper {A B} :
     Proper (pointwise_relation _ (=) ==> (≡) ==> (≡)) (@fmap M _ A B).
-  Proof. intros f g ? X Y [??]; split; set_solver eauto. Qed.
+  Proof. intros f g ? X Y [??]; split; set_solver by eauto. Qed.
   Global Instance collection_bind_mono {A B} :
     Proper (((=) ==> (⊆)) ==> (⊆) ==> (⊆)) (@mbind M _ A B).
   Proof. unfold respectful; intros f g Hfg X Y ?; set_solver. Qed.
@@ -575,12 +574,12 @@ Section collection_monad.
     l ∈ mapM f k ↔ Forall2 (λ x y, x ∈ f y) l k.
   Proof.
     split.
-    - revert l. induction k; set_solver eauto.
+    - revert l. induction k; set_solver by eauto.
     - induction 1; set_solver.
   Qed.
   Lemma collection_mapM_length {A B} (f : A → M B) l k :
     l ∈ mapM f k → length l = length k.
-  Proof. revert l; induction k; set_solver eauto. Qed.
+  Proof. revert l; induction k; set_solver by eauto. Qed.
   Lemma elem_of_mapM_fmap {A B} (f : A → B) (g : B → M A) l k :
     Forall (λ x, ∀ y, y ∈ g x → f y = x) l → k ∈ mapM g l → fmap f k = l.
   Proof.
-- 
GitLab