aboutsummaryrefslogtreecommitdiff
path: root/pretyping
diff options
context:
space:
mode:
Diffstat (limited to 'pretyping')
-rw-r--r--pretyping/evarconv.ml11
-rw-r--r--pretyping/reductionops.mli2
-rw-r--r--pretyping/unification.ml24
-rw-r--r--pretyping/univdecls.ml2
-rw-r--r--pretyping/univdecls.mli4
5 files changed, 17 insertions, 26 deletions
diff --git a/pretyping/evarconv.ml b/pretyping/evarconv.ml
index 0a63985bf1..fe2e86a482 100644
--- a/pretyping/evarconv.ml
+++ b/pretyping/evarconv.ml
@@ -530,8 +530,15 @@ and evar_eqappr_x ?(rhs_is_already_stuck = false) ts env evd pbty
UnifFailure (evd, NotSameHead)
else
begin
- let evd' = check_leq_inductives evd cumi u u' in
- Success (check_leq_inductives evd' cumi u' u)
+ (** Both constructors should be liftable to the same supertype
+ at which we compare them, but we don't have access to that type in
+ untyped unification. We hence try to enforce that one is lower
+ than the other, also unifying more universes in the process.
+ If this fails we just leave the universes as is, as in conversion. *)
+ try Success (check_leq_inductives evd cumi u u')
+ with Univ.UniverseInconsistency _ ->
+ try Success (check_leq_inductives evd cumi u' u)
+ with Univ.UniverseInconsistency e -> Success evd
end
end
in
diff --git a/pretyping/reductionops.mli b/pretyping/reductionops.mli
index 16d75685d4..3b56513f5e 100644
--- a/pretyping/reductionops.mli
+++ b/pretyping/reductionops.mli
@@ -278,7 +278,7 @@ val check_conv : ?pb:conv_pb -> ?ts:transparent_state -> env -> evar_map -> con
(** [infer_conv] Adds necessary universe constraints to the evar map.
pb defaults to CUMUL and ts to a full transparent state.
- @raises UniverseInconsistency iff catch_incon is set to false,
+ @raise UniverseInconsistency iff catch_incon is set to false,
otherwise returns false in that case.
*)
val infer_conv : ?catch_incon:bool -> ?pb:conv_pb -> ?ts:transparent_state ->
diff --git a/pretyping/unification.ml b/pretyping/unification.ml
index 5bc93f1faf..f4269a2c5d 100644
--- a/pretyping/unification.ml
+++ b/pretyping/unification.ml
@@ -250,20 +250,6 @@ let unify_r2l x = x
let sort_eqns = unify_r2l
*)
-let global_pattern_unification_flag = ref true
-
-open Goptions
-
-(* Compatibility option introduced and activated in Coq 8.4 *)
-
-let _ =
- declare_bool_option
- { optdepr = true; (* remove in 8.8 *)
- optname = "pattern-unification for existential variables in tactics";
- optkey = ["Tactic";"Pattern";"Unification"];
- optread = (fun () -> !global_pattern_unification_flag);
- optwrite = (:=) global_pattern_unification_flag }
-
type core_unify_flags = {
modulo_conv_on_closed_terms : Names.transparent_state option;
(* What this flag controls was activated with all constants transparent, *)
@@ -287,12 +273,10 @@ type core_unify_flags = {
use_pattern_unification : bool;
(* This solves pattern "?n x1 ... xn = t" when the xi are distinct rels *)
- (* This says if pattern unification is tried; can be overwritten with *)
- (* option "Set Tactic Pattern Unification" *)
+ (* This says if pattern unification is tried *)
use_meta_bound_pattern_unification : bool;
- (* This is implied by use_pattern_unification (though deactivated *)
- (* by unsetting Tactic Pattern Unification); has no particular *)
+ (* This is implied by use_pattern_unification; has no particular *)
(* reasons to be set differently than use_pattern_unification *)
(* except for compatibility of "auto". *)
(* This was on for all tactics, including auto, since Sep 2006 for 8.1 *)
@@ -473,10 +457,10 @@ let set_flags_for_type flags = { flags with
}
let use_evars_pattern_unification flags =
- !global_pattern_unification_flag && flags.use_pattern_unification
+ flags.use_pattern_unification
let use_metas_pattern_unification sigma flags nb l =
- !global_pattern_unification_flag && flags.use_pattern_unification
+ flags.use_pattern_unification
|| flags.use_meta_bound_pattern_unification &&
Array.for_all (fun c -> isRel sigma c && destRel sigma c <= nb) l
diff --git a/pretyping/univdecls.ml b/pretyping/univdecls.ml
index d16f046fab..8864be5761 100644
--- a/pretyping/univdecls.ml
+++ b/pretyping/univdecls.ml
@@ -38,7 +38,7 @@ let interp_univ_constraints env evd cstrs =
let interp_univ_decl env decl =
let open Misctypes in
let pl : lident list = decl.univdecl_instance in
- let evd = Evd.from_ctx (Evd.make_evar_universe_context env (Some pl)) in
+ let evd = Evd.from_ctx (UState.make_with_initial_binders (Environ.universes env) pl) in
let evd, cstrs = interp_univ_constraints env evd decl.univdecl_constraints in
let decl = { univdecl_instance = pl;
univdecl_extensible_instance = decl.univdecl_extensible_instance;
diff --git a/pretyping/univdecls.mli b/pretyping/univdecls.mli
index 242eb802fa..305d045b1f 100644
--- a/pretyping/univdecls.mli
+++ b/pretyping/univdecls.mli
@@ -14,8 +14,8 @@ type universe_decl =
val default_univ_decl : universe_decl
-val interp_univ_decl : Environ.env -> Vernacexpr.universe_decl_expr ->
+val interp_univ_decl : Environ.env -> Constrexpr.universe_decl_expr ->
Evd.evar_map * universe_decl
-val interp_univ_decl_opt : Environ.env -> Vernacexpr.universe_decl_expr option ->
+val interp_univ_decl_opt : Environ.env -> Constrexpr.universe_decl_expr option ->
Evd.evar_map * universe_decl