diff options
| author | glondu | 2010-12-02 09:24:33 +0000 |
|---|---|---|
| committer | glondu | 2010-12-02 09:24:33 +0000 |
| commit | 64a5d7b33c4c66fc82974f255cf40badd0b7bacf (patch) | |
| tree | d4b9f0c5beb36a98a3a8868ae5c13545b54d4644 /tactics | |
| parent | a281f908a65ba7ba0678f42e20b3a0ed78250b18 (diff) | |
Add tactic has_evar (#2433)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@13664 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'tactics')
| -rw-r--r-- | tactics/extratactics.ml4 | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/tactics/extratactics.ml4 b/tactics/extratactics.ml4 index 393934abfa..78a1f51b78 100644 --- a/tactics/extratactics.ml4 +++ b/tactics/extratactics.ml4 @@ -718,3 +718,28 @@ TACTIC EXTEND is_evar | _ -> tclFAIL 0 (str "Not an evar") ] END + +let rec has_evar x = + match kind_of_term x with + | Evar _ -> true + | Rel _ | Var _ | Meta _ | Sort _ | Const _ | Ind _ | Construct _ -> + false + | Cast (t1, _, t2) | Prod (_, t1, t2) | Lambda (_, t1, t2) -> + has_evar t1 || has_evar t2 + | LetIn (_, t1, t2, t3) -> + has_evar t1 || has_evar t2 || has_evar t3 + | App (t1, ts) -> + has_evar t1 || has_evar_array ts + | Case (_, t1, t2, ts) -> + has_evar t1 || has_evar t2 || has_evar_array ts + | Fix ((_, tr)) | CoFix ((_, tr)) -> + has_evar_prec tr +and has_evar_array x = + array_exists has_evar x +and has_evar_prec (_, ts1, ts2) = + array_exists has_evar ts1 || array_exists has_evar ts2 + +TACTIC EXTEND has_evar +| [ "has_evar" constr(x) ] -> + [ if has_evar x then tclIDTAC else tclFAIL 0 (str "No evars") ] +END |
