aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormsozeau2009-06-11 00:51:32 +0000
committermsozeau2009-06-11 00:51:32 +0000
commitec26ef7bdee30f93b53d53171fc881f8413cb7c1 (patch)
tree37087c44f2d371f34157c64d9da5bd00f5272db8
parentb86677ef8d05114a48f0d7fa53e36a71c71fa4b3 (diff)
When typing a non-dependent arrow, do not put the (anonymous) variable
in the context to avoid it being abstracted over in potential evars occuring in the codomain, which can prevent unifications. Add [intro] to the typeclasses eauto and fix [make_resolve_hyp] to properly normalize types w.r.t. evars before searching for a class in an hypothesis. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@12182 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--pretyping/pretyping.ml12
-rw-r--r--tactics/class_tactics.ml43
2 files changed, 11 insertions, 4 deletions
diff --git a/pretyping/pretyping.ml b/pretyping/pretyping.ml
index 8c06f9bfec..bc0dba8831 100644
--- a/pretyping/pretyping.ml
+++ b/pretyping/pretyping.ml
@@ -434,9 +434,15 @@ module Pretyping_F (Coercion : Coercion.S) = struct
| RProd(loc,name,bk,c1,c2) ->
let j = pretype_type empty_valcon env evdref lvar c1 in
- let var = (name,j.utj_val) in
- let env' = push_rel_assum var env in
- let j' = pretype_type empty_valcon env' evdref lvar c2 in
+ let j' =
+ if name = Anonymous then
+ let j = pretype_type empty_valcon env evdref lvar c2 in
+ { j with utj_val = lift 1 j.utj_val }
+ else
+ let var = (name,j.utj_val) in
+ let env' = push_rel_assum var env in
+ pretype_type empty_valcon env' evdref lvar c2
+ in
let resj =
try judge_of_product env name j j'
with TypeError _ as e -> Stdpp.raise_with_loc loc e in
diff --git a/tactics/class_tactics.ml4 b/tactics/class_tactics.ml4
index 6fdd8c2827..8f548210b8 100644
--- a/tactics/class_tactics.ml4
+++ b/tactics/class_tactics.ml4
@@ -335,6 +335,7 @@ let is_transparent_gr (ids, csts) = function
| IndRef _ | ConstructRef _ -> false
let make_resolve_hyp env sigma st flags pri (id, _, cty) =
+ let cty = Evarutil.nf_evar sigma cty in
let ctx, ar = decompose_prod cty in
let keep =
match kind_of_term (fst (decompose_app ar)) with
@@ -379,7 +380,7 @@ let eauto hints g =
{it = List.map fst goals; sigma = s}, valid s
let real_eauto st hints p evd =
- let tac = fix (hints_tac hints) in
+ let tac = fix (or_tac intro_tac (hints_tac hints)) in
let rec aux evd =
match run_on_evars ~st p evd tac with
| None -> evd