aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar sacerdot <sacerdot@85f007b7-540e-0410-9357-904b9bb8a0f7>2004-10-18 13:04:23 +0000
committerGravatar sacerdot <sacerdot@85f007b7-540e-0410-9357-904b9bb8a0f7>2004-10-18 13:04:23 +0000
commit330cae95df597e2407b8267f0889a22e11ca082b (patch)
treed4e0197dd1b3ad978aa05c3f962d37a3d3e57159
parent1c4bf87e00721d7c9eb94eff25ebdb5b69b7df4b (diff)
More informative error message when the tactic tries to generate a new
goal with metavariables in it. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@6233 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--tactics/setoid_replace.ml20
1 files changed, 20 insertions, 0 deletions
diff --git a/tactics/setoid_replace.ml b/tactics/setoid_replace.ml
index 43d25b6ea..be49e06d0 100644
--- a/tactics/setoid_replace.ml
+++ b/tactics/setoid_replace.ml
@@ -1592,6 +1592,25 @@ let apply_coq_setoid_rewrite hole_relation prop_relation c1 c2 (direction,h)
syntactic_but_representation_of_marked_but hole_relation hole_direction
cic_prop_relation precise_prop_relation m ; hyp |])
+let check_evar_map_of_evars_defs evd =
+ let metas = Evd.meta_list evd in
+ let check_freemetas_is_empty rebus =
+ Evd.Metaset.iter
+ (fun m ->
+ if Evd.meta_defined evd m then () else
+ raise (Logic.RefinerError (Logic.OccurMetaGoal rebus)))
+ in
+ List.iter
+ (fun (_,binding) ->
+ match binding with
+ Evd.Cltyp (_,{Evd.rebus=rebus; Evd.freemetas=freemetas}) ->
+ check_freemetas_is_empty rebus freemetas
+ | Evd.Clval (_,{Evd.rebus=rebus1; Evd.freemetas=freemetas1},
+ {Evd.rebus=rebus2; Evd.freemetas=freemetas2}) ->
+ check_freemetas_is_empty rebus1 freemetas1 ;
+ check_freemetas_is_empty rebus2 freemetas2
+ ) metas
+
let relation_rewrite c1 c2 (input_direction,cl) ~new_goals gl =
let but = pf_concl gl in
let (sigma,hyp,c1,c2) =
@@ -1609,6 +1628,7 @@ let relation_rewrite c1 c2 (input_direction,cl) ~new_goals gl =
in
let cl' = {cl with env = env' } in
let c2 = Clenv.clenv_nf_meta cl' c2 in
+ check_evar_map_of_evars_defs env' ;
env',(input_direction,Clenv.clenv_value cl'), c1, c2
in
try