### Use "clear -H" for set_solver.

`Also, use "set_solver by tac" to specify a tactic.`
parent 500002eb
 ... @@ -42,7 +42,7 @@ Module barrier_proto. ... @@ -42,7 +42,7 @@ Module barrier_proto. Proof. Proof. split. split. - move=>[p I]. rewrite /= /tok !mkSet_elem_of /= =>HI. - move=>[p I]. rewrite /= /tok !mkSet_elem_of /= =>HI. destruct p; set_solver eauto. destruct p; set_solver by eauto. - (* If we do the destruct of the states early, and then inversion - (* If we do the destruct of the states early, and then inversion on the proof of a transition, it doesn't work - we do not obtain on the proof of a transition, it doesn't work - we do not obtain the equalities we need. So we destruct the states late, because this the equalities we need. So we destruct the states late, because this ... @@ -90,7 +90,7 @@ Module barrier_proto. ... @@ -90,7 +90,7 @@ Module barrier_proto. i ∈ I → sts.steps (State High I, {[ Change i ]}) (State High (I ∖ {[ i ]}), ∅). i ∈ I → sts.steps (State High I, {[ Change i ]}) (State High (I ∖ {[ i ]}), ∅). Proof. Proof. intros. apply rtc_once. intros. apply rtc_once. constructor; first constructor; rewrite /= /tok /=; [set_solver eauto..|]. constructor; first constructor; rewrite /= /tok /=; [set_solver by eauto..|]. (* TODO this proof is rather annoying. *) (* TODO this proof is rather annoying. *) apply elem_of_equiv=>t. rewrite !elem_of_union. apply elem_of_equiv=>t. rewrite !elem_of_union. rewrite !mkSet_elem_of /change_tokens /=. rewrite !mkSet_elem_of /change_tokens /=. ... ...
 ... @@ -253,19 +253,18 @@ Ltac set_unfold := ... @@ -253,19 +253,18 @@ Ltac set_unfold := (** Since [firstorder] fails or loops on very small goals generated by (** Since [firstorder] fails or loops on very small goals generated by [set_solver] already. We use the [naive_solver] tactic as a substitute. [set_solver] already. We use the [naive_solver] tactic as a substitute. This tactic either fails or proves the goal. *) This tactic either fails or proves the goal. *) Tactic Notation "set_solver" tactic3(tac) := Tactic Notation "set_solver" "by" tactic3(tac) := setoid_subst; setoid_subst; decompose_empty; decompose_empty; set_unfold; set_unfold; naive_solver tac. naive_solver tac. Tactic Notation "set_solver" "-" hyp_list(Hs) "/" tactic3(tac) := Tactic Notation "set_solver" "-" hyp_list(Hs) "by" tactic3(tac) := clear Hs; set_solver tac. clear Hs; set_solver by tac. Tactic Notation "set_solver" "+" hyp_list(Hs) "/" tactic3(tac) := Tactic Notation "set_solver" "+" hyp_list(Hs) "by" tactic3(tac) := revert Hs; clear; set_solver tac. clear -Hs; set_solver by tac. Tactic Notation "set_solver" := set_solver idtac. 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) := clear Hs; set_solver. Tactic Notation "set_solver" "+" hyp_list(Hs) := Tactic Notation "set_solver" "+" hyp_list(Hs) := clear -Hs; set_solver. revert Hs; clear; set_solver. (** * More theorems *) (** * More theorems *) Section collection. Section collection. ... @@ -537,10 +536,10 @@ Section collection_monad. ... @@ -537,10 +536,10 @@ Section collection_monad. Global Instance collection_fmap_mono {A B} : Global Instance collection_fmap_mono {A B} : Proper (pointwise_relation _ (=) ==> (⊆) ==> (⊆)) (@fmap M _ 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} : Global Instance collection_fmap_proper {A B} : Proper (pointwise_relation _ (=) ==> (≡) ==> (≡)) (@fmap M _ 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} : Global Instance collection_bind_mono {A B} : Proper (((=) ==> (⊆)) ==> (⊆) ==> (⊆)) (@mbind M _ A B). Proper (((=) ==> (⊆)) ==> (⊆) ==> (⊆)) (@mbind M _ A B). Proof. unfold respectful; intros f g Hfg X Y ?; set_solver. Qed. Proof. unfold respectful; intros f g Hfg X Y ?; set_solver. Qed. ... @@ -575,12 +574,12 @@ Section collection_monad. ... @@ -575,12 +574,12 @@ Section collection_monad. l ∈ mapM f k ↔ Forall2 (λ x y, x ∈ f y) l k. l ∈ mapM f k ↔ Forall2 (λ x y, x ∈ f y) l k. Proof. Proof. split. split. - revert l. induction k; set_solver eauto. - revert l. induction k; set_solver by eauto. - induction 1; set_solver. - induction 1; set_solver. Qed. Qed. Lemma collection_mapM_length {A B} (f : A → M B) l k : Lemma collection_mapM_length {A B} (f : A → M B) l k : l ∈ mapM f k → length l = length 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 : 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. Forall (λ x, ∀ y, y ∈ g x → f y = x) l → k ∈ mapM g l → fmap f k = l. Proof. Proof. ... ...
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!