From 0582920dacd5c57ee925f070fac0da34c115f725 Mon Sep 17 00:00:00 2001
From: Robbert Krebbers <mail@robbertkrebbers.nl>
Date: Mon, 6 Nov 2017 11:39:53 +0100
Subject: [PATCH] Fewer Ltac hacks in `iStartProof`.

---
 theories/proofmode/tactics.v | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/theories/proofmode/tactics.v b/theories/proofmode/tactics.v
index 7ea207f4c..40277672d 100644
--- a/theories/proofmode/tactics.v
+++ b/theories/proofmode/tactics.v
@@ -49,9 +49,14 @@ Tactic Notation "iMatchHyp" tactic1(tac) :=
   | |- context[ environments.Esnoc _ ?x ?P ] => tac x P
   end.
 
-Class AsValid {M} (φ : Prop) (P : uPred M) := as_entails : φ ↔ P.
+Class AsValid {M} (φ : Prop) (P : uPred M) := as_valid : φ ↔ P.
 Arguments AsValid {_} _%type _%I.
 
+Lemma as_valid_1 (φ : Prop) {M} (P : uPred M) `{!AsValid φ P} : φ → P.
+Proof. by apply as_valid. Qed.
+Lemma as_valid_2 (φ : Prop) {M} (P : uPred M) `{!AsValid φ P} : P → φ.
+Proof. by apply as_valid. Qed.
+
 Instance as_valid_valid {M} (P : uPred M) : AsValid (uPred_valid P) P | 0.
 Proof. by rewrite /AsValid. Qed.
 
@@ -65,9 +70,9 @@ Proof. split. apply uPred.equiv_iff. apply uPred.iff_equiv. Qed.
 Ltac iStartProof :=
   lazymatch goal with
   | |- envs_entails _ _ => idtac
-  | |- ?P =>
-    apply (proj2 (_ : AsValid P _)), tac_adequate
-    || fail "iStartProof: not a uPred"
+  | |- ?φ => eapply (as_valid_2 φ);
+               [apply _ || fail "iStartProof: not a uPred"
+               |apply tac_adequate]
   end.
 
 (** * Context manipulation *)
@@ -536,8 +541,8 @@ Tactic Notation "iIntoValid" open_constr(t) :=
       let e := fresh in evar (e:id T);
       let e' := eval unfold e in e in clear e; go (t e')
     | _ =>
-      let tT' := eval cbv zeta in tT in apply (proj1 (_ : AsValid tT' _) t)
-      || fail "iPoseProof: not a uPred"
+      let tT' := eval cbv zeta in tT in apply (as_valid_1 tT');
+        [apply _ || fail "iPoseProof: not a uPred"|exact t]
     end in
   go t.
 
-- 
GitLab