aboutsummaryrefslogtreecommitdiffhomepage
path: root/tactics/rewrite.ml4
diff options
context:
space:
mode:
authorGravatar herbelin <herbelin@85f007b7-540e-0410-9357-904b9bb8a0f7>2010-09-19 10:18:01 +0000
committerGravatar herbelin <herbelin@85f007b7-540e-0410-9357-904b9bb8a0f7>2010-09-19 10:18:01 +0000
commit99aa9904cb19255a154937a0cca39fbc536ffe97 (patch)
tree04ef97db1dd47396a1d936224bc0b5cf697af88f /tactics/rewrite.ml4
parentacda433289896a8aea287cc9f510e9a874623533 (diff)
Patch solving the bug but leaving open design choices
The patch does not address the possible use of evars by get_symmetric_proof in unify_eqn. Someting has still to be done there. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@13435 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'tactics/rewrite.ml4')
-rw-r--r--tactics/rewrite.ml416
1 files changed, 9 insertions, 7 deletions
diff --git a/tactics/rewrite.ml4 b/tactics/rewrite.ml4
index 4524cf0da..921137842 100644
--- a/tactics/rewrite.ml4
+++ b/tactics/rewrite.ml4
@@ -222,7 +222,7 @@ let find_class_proof proof_type proof_method env evars carrier relation =
try
let goal = mkApp (Lazy.force proof_type, [| carrier ; relation |]) in
let evars, c = Typeclasses.resolve_one_typeclass env evars goal in
- mkApp (Lazy.force proof_method, [| carrier; relation; c |])
+ mkApp (Lazy.force proof_method, [| carrier; relation; c |]), evars
with e when Logic.catchable_exception e -> raise Not_found
let get_reflexive_proof env = find_class_proof reflexive_type reflexive_proof env
@@ -368,7 +368,7 @@ let unify_eqn env sigma hypinfo t =
let res =
if l2r then (prf, (car, rel, c1, c2))
else
- try (mkApp (get_symmetric_proof env Evd.empty car rel,
+ try (mkApp (fst (get_symmetric_proof env Evd.empty car rel),
[| c1 ; c2 ; prf |]),
(car, rel, c2, c1))
with Not_found ->
@@ -1626,23 +1626,25 @@ let setoid_proof gl ty fn fallback =
not_declared env ty rel gl
| _ -> raise e
+let apply_with_evars (c,evars) = tclTHEN (Refiner.tclEVARS evars) (apply c)
+
let setoid_reflexivity gl =
setoid_proof gl "reflexive"
- (fun env evm car rel -> apply (get_reflexive_proof env evm car rel))
+ (fun env evm car rel -> apply_with_evars (get_reflexive_proof env evm car rel))
(reflexivity_red true)
let setoid_symmetry gl =
setoid_proof gl "symmetric"
- (fun env evm car rel -> apply (get_symmetric_proof env evm car rel))
+ (fun env evm car rel -> apply_with_evars (get_symmetric_proof env evm car rel))
(symmetry_red true)
let setoid_transitivity c gl =
setoid_proof gl "transitive"
(fun env evm car rel ->
- let proof = get_transitive_proof env evm car rel in
+ let proof,evm = get_transitive_proof env evm car rel in
match c with
- | None -> eapply proof
- | Some c -> apply_with_bindings (proof,Rawterm.ImplicitBindings [ c ]))
+ | None -> tclTHEN (Refiner.tclEVARS evm) (eapply proof)
+ | Some c -> tclTHEN (Refiner.tclEVARS evm) (apply_with_bindings (proof,Rawterm.ImplicitBindings [ c ])))
(transitivity_red true c)
let setoid_symmetry_in id gl =