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 /interp/constrintern.ml | |
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 'interp/constrintern.ml')
-rw-r--r-- | interp/constrintern.ml | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/interp/constrintern.ml b/interp/constrintern.ml index ee245450b..ce445c3f6 100644 --- a/interp/constrintern.ml +++ b/interp/constrintern.ml @@ -1187,25 +1187,31 @@ let interp_open_constr sigma env c = let interp_constr_judgment sigma env c = Default.understand_judgment sigma env (intern_constr sigma env c) -let interp_constr_evars_gen_impls ?(evdref=ref Evd.empty_evar_defs) +let interp_constr_evars_gen_impls ?evdref env ?(impls=([],[])) kind c = - let c = intern_gen (kind=IsType) ~impls (Evd.evars_of !evdref) env c in - let imps = implicits_of_rawterm c in - Default.understand_tcc_evars evdref env kind c, imps + match evdref with + | None -> + let c = intern_gen (kind=IsType) ~impls Evd.empty env c in + let imps = implicits_of_rawterm c in + Default.understand_gen kind Evd.empty env c, imps + | Some evdref -> + let c = intern_gen (kind=IsType) ~impls (Evd.evars_of !evdref) env c in + let imps = implicits_of_rawterm c in + Default.understand_tcc_evars evdref env kind c, imps let interp_constr_evars_gen evdref env ?(impls=([],[])) kind c = let c = intern_gen (kind=IsType) ~impls (Evd.evars_of !evdref) env c in Default.understand_tcc_evars evdref env kind c -let interp_casted_constr_evars_impls ?(evdref=ref Evd.empty_evar_defs) +let interp_casted_constr_evars_impls ?evdref env ?(impls=([],[])) c typ = - interp_constr_evars_gen_impls ~evdref env ~impls (OfType (Some typ)) c + interp_constr_evars_gen_impls ?evdref env ~impls (OfType (Some typ)) c -let interp_type_evars_impls ?(evdref=ref Evd.empty_evar_defs) env ?(impls=([],[])) c = - interp_constr_evars_gen_impls ~evdref env IsType ~impls c +let interp_type_evars_impls ?evdref env ?(impls=([],[])) c = + interp_constr_evars_gen_impls ?evdref env IsType ~impls c -let interp_constr_evars_impls ?(evdref=ref Evd.empty_evar_defs) env ?(impls=([],[])) c = - interp_constr_evars_gen_impls ~evdref env (OfType None) ~impls c +let interp_constr_evars_impls ?evdref env ?(impls=([],[])) c = + interp_constr_evars_gen_impls ?evdref env (OfType None) ~impls c let interp_casted_constr_evars evdref env ?(impls=([],[])) c typ = interp_constr_evars_gen evdref env ~impls (OfType (Some typ)) c |