aboutsummaryrefslogtreecommitdiffhomepage
path: root/pretyping/evarutil.ml
diff options
context:
space:
mode:
authorGravatar herbelin <herbelin@85f007b7-540e-0410-9357-904b9bb8a0f7>2012-04-16 22:51:56 +0000
committerGravatar herbelin <herbelin@85f007b7-540e-0410-9357-904b9bb8a0f7>2012-04-16 22:51:56 +0000
commit76e5bb5a12f97bd8cb85191b4c39f93b1bbb6a0b (patch)
tree16704038eb17b51478edb60f361b170b689e18bf /pretyping/evarutil.ml
parenta620103f70b8805359167773a2a4fc7e2b0e38f1 (diff)
Fixing a "Not_Found" bug related to commit 15061 on the use of evar candidates.
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@15184 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'pretyping/evarutil.ml')
-rw-r--r--pretyping/evarutil.ml18
1 files changed, 10 insertions, 8 deletions
diff --git a/pretyping/evarutil.ml b/pretyping/evarutil.ml
index 13d3ad2f8..2a2b933da 100644
--- a/pretyping/evarutil.ml
+++ b/pretyping/evarutil.ml
@@ -1190,7 +1190,7 @@ let restrict_hyps evd evk filter candidates =
let typablefilter = closure_of_filter evd evk filter in
(typablefilter,candidates)
-exception EvarSolvedWhileRestricting of evar_map
+exception EvarSolvedWhileRestricting of evar_map * constr
let do_restrict_hyps evd (evk,args as ev) filter candidates =
let filter,candidates = match filter with
@@ -1198,7 +1198,9 @@ let do_restrict_hyps evd (evk,args as ev) filter candidates =
| Some filter -> restrict_hyps evd evk filter candidates in
match candidates,filter with
| Some [], _ -> error "Not solvable."
- | Some [nc],_ -> raise (EvarSolvedWhileRestricting (Evd.define evk nc evd))
+ | Some [nc],_ ->
+ let evd = Evd.define evk nc evd in
+ raise (EvarSolvedWhileRestricting (evd,whd_evar evd (mkEvar ev)))
| None, None -> evd,ev
| _ -> restrict_applied_evar evd ev filter candidates
@@ -1240,12 +1242,12 @@ let postpone_evar_evar f env evd filter1 ev1 filter2 ev2 =
try
let evd,ev2' = do_restrict_hyps evd ev2 filter2 None in
add_conv_pb (Reduction.CONV,env,mkEvar ev1',mkEvar ev2') evd
- with EvarSolvedWhileRestricting evd ->
+ with EvarSolvedWhileRestricting (evd,ev2) ->
(* ev2 solved on the fly *)
- f env evd ev1' (mkEvar ev2)
- with EvarSolvedWhileRestricting evd ->
+ f env evd ev1' ev2
+ with EvarSolvedWhileRestricting (evd,ev1) ->
(* ev1 solved on the fly *)
- f env evd ev2 (mkEvar ev1)
+ f env evd ev2 ev1
(* [solve_evar_evar f Γ Σ ?e1[u1..un] ?e2[v1..vp]] applies an heuristic
* to solve the equation Σ; Γ ⊢ ?e1[u1..un] = ?e2[v1..vp]:
@@ -1371,8 +1373,8 @@ let project_evar_on_evar g env evd aliases k2 (evk1,argsv1 as ev1) (evk2,argsv2
let evd,(evk1',args1) = do_restrict_hyps evd ev1 filter1 candidates1 in
evd,mkEvar (evk1',invert_invertible_arg evd aliases k2 ev2 args1)
with
- | EvarSolvedWhileRestricting evd ->
- raise (EvarSolvedOnTheFly (evd,mkEvar ev1))
+ | EvarSolvedWhileRestricting (evd,ev1) ->
+ raise (EvarSolvedOnTheFly (evd,ev1))
| DoesNotPreserveCandidateRestriction | NotEnoughInformationToInvert ->
raise (CannotProject filter1)
else