diff options
author | msozeau <msozeau@85f007b7-540e-0410-9357-904b9bb8a0f7> | 2008-03-27 00:57:38 +0000 |
---|---|---|
committer | msozeau <msozeau@85f007b7-540e-0410-9357-904b9bb8a0f7> | 2008-03-27 00:57:38 +0000 |
commit | 9eeb0905d1d6f2c9e7b9be83660335838d2c1295 (patch) | |
tree | c41f29ec9c3d627ae89484ba368145a5fc9c2dd1 /pretyping | |
parent | 57eec1e1e4efd09f5181297d87b1908c284e6951 (diff) |
Various fixes on typeclasses:
- Better interface in constrintern w.r.t. evars used during typechecking
- Add "unsatisfiable_constraints" exception which gives back the raw
evar_map that was not satisfied during typeclass search (presentation
could be improved).
- Correctly infer the minimal sort for typeclasses declared as
definitions (everything was in type before).
- Really handle priorities in typeclass eauto: goals produced with higher
priority (lowest number) instances are tried before other of lower
priority goals, regardless of the number of subgoals.
- Change inverse to a notation for flip, now that universe polymorphic
definitions are handled correctly.
- Add EquivalenceDec class similar to SetoidDec, declaring decision
procedures for equivalences.
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@10724 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'pretyping')
-rw-r--r-- | pretyping/pretyping.ml | 4 | ||||
-rw-r--r-- | pretyping/typeclasses_errors.ml | 3 | ||||
-rw-r--r-- | pretyping/typeclasses_errors.mli | 3 |
3 files changed, 9 insertions, 1 deletions
diff --git a/pretyping/pretyping.ml b/pretyping/pretyping.ml index 980a5075f..f9fcdb7b6 100644 --- a/pretyping/pretyping.ml +++ b/pretyping/pretyping.ml @@ -700,7 +700,9 @@ module Pretyping_F (Coercion : Coercion.S) = struct let evdref = ref (Evd.create_evar_defs sigma) in let c = pretype_gen evdref env lvar kind c in let evd,_ = consider_remaining_unif_problems env !evdref in - if fail_evar then check_evars env Evd.empty evd c; + if fail_evar then + (let evd = Typeclasses.resolve_typeclasses ~onlyargs:false ~all:false env (evars_of evd) evd in + check_evars env Evd.empty evd c); evd, c (** Entry points of the high-level type synthesis algorithm *) diff --git a/pretyping/typeclasses_errors.ml b/pretyping/typeclasses_errors.ml index 1648f667a..4db826108 100644 --- a/pretyping/typeclasses_errors.ml +++ b/pretyping/typeclasses_errors.ml @@ -28,6 +28,7 @@ type typeclass_error = | NotAClass of constr | UnboundMethod of global_reference * identifier located (* Class name, method *) | NoInstance of identifier located * constr list + | UnsatisfiableConstraints of evar_map | MismatchedContextInstance of contexts * constr_expr list * named_context (* found, expected *) exception TypeClassError of env * typeclass_error @@ -40,4 +41,6 @@ let unbound_method env cid id = typeclass_error env (UnboundMethod (cid, id)) let no_instance env id args = typeclass_error env (NoInstance (id, args)) +let unsatisfiable_constraints env evm = typeclass_error env (UnsatisfiableConstraints evm) + let mismatched_ctx_inst env c n m = typeclass_error env (MismatchedContextInstance (c, n, m)) diff --git a/pretyping/typeclasses_errors.mli b/pretyping/typeclasses_errors.mli index 82e37f41d..a697087d2 100644 --- a/pretyping/typeclasses_errors.mli +++ b/pretyping/typeclasses_errors.mli @@ -28,6 +28,7 @@ type typeclass_error = | NotAClass of constr | UnboundMethod of global_reference * identifier located (* Class name, method *) | NoInstance of identifier located * constr list + | UnsatisfiableConstraints of evar_map | MismatchedContextInstance of contexts * constr_expr list * named_context (* found, expected *) exception TypeClassError of env * typeclass_error @@ -38,4 +39,6 @@ val unbound_method : env -> global_reference -> identifier located -> 'a val no_instance : env -> identifier located -> constr list -> 'a +val unsatisfiable_constraints : env -> evar_map -> 'a + val mismatched_ctx_inst : env -> contexts -> constr_expr list -> named_context -> 'a |