aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--lib/util.ml7
-rw-r--r--lib/util.mli1
-rw-r--r--tactics/tactics.ml5
3 files changed, 11 insertions, 2 deletions
diff --git a/lib/util.ml b/lib/util.ml
index 76d9c6728..67ff2a501 100644
--- a/lib/util.ml
+++ b/lib/util.ml
@@ -399,6 +399,13 @@ let rec list_compare cmp l1 l2 =
| 0 -> list_compare cmp l1 l2
| c -> c)
+let rec list_equal cmp l1 l2 =
+ match l1, l2 with
+ | [], [] -> true
+ | x1 :: l1, x2 :: l2 ->
+ cmp x1 x2 && list_equal cmp l1 l2
+ | _ -> false
+
let list_intersect l1 l2 =
List.filter (fun x -> List.mem x l2) l1
diff --git a/lib/util.mli b/lib/util.mli
index baa116489..458eb1d05 100644
--- a/lib/util.mli
+++ b/lib/util.mli
@@ -116,6 +116,7 @@ val ascii_of_ident : string -> string
(** {6 Lists. } *)
val list_compare : ('a -> 'a -> int) -> 'a list -> 'a list -> int
+val list_equal : ('a -> 'a -> bool) -> 'a list -> 'a list -> bool
val list_add_set : 'a -> 'a list -> 'a list
val list_eq_set : 'a list -> 'a list -> bool
val list_intersect : 'a list -> 'a list -> 'a list
diff --git a/tactics/tactics.ml b/tactics/tactics.ml
index 6b67a6d60..3ad89c825 100644
--- a/tactics/tactics.ml
+++ b/tactics/tactics.ml
@@ -2710,8 +2710,9 @@ let compute_scheme_signature scheme names_info ind_type_guess =
let ccl_arg_ok = is_pred (p + scheme.nargs + 1) f = IndArg in
let ind_is_ok =
- list_lastn scheme.nargs indargs
- = extended_rel_list 0 scheme.args in
+ list_equal eq_constr
+ (list_lastn scheme.nargs indargs)
+ (extended_rel_list 0 scheme.args) in
if not (ccl_arg_ok & ind_is_ok) then
error_ind_scheme "the conclusion of";
[]