+let check_for_deep_subsumption env active_table eq =
+ let _,_,(eq_ty, left, right, order),metas,id = Equality.open_equality eq in
+ if id = 14242 then assert false;
+
+ let check_subsumed deep l r =
+ let eqtmp =
+ Equality.mk_tmp_equality(0,(eq_ty,l,r,Utils.Incomparable),metas)in
+ match Indexing.subsumption env active_table eqtmp with
+ | None -> false
+ | Some (s,eq') ->
+ prerr_endline
+ ("\n\n " ^ Equality.string_of_equality ~env eq ^
+ "\nis"^(if deep then " CONTEXTUALLY " else " ")^"subsumed by \n " ^
+ Equality.string_of_equality ~env eq' ^ "\n\n");
+ true
+ in
+ let rec aux b (ok_so_far, subsumption_used) t1 t2 =
+ match t1,t2 with
+ | t1, t2 when not ok_so_far -> ok_so_far, subsumption_used
+ | t1, t2 when subsumption_used -> t1 = t2, subsumption_used
+(* VERSIONE ERRATA
+ | Cic.Appl (h1::l),Cic.Appl (h2::l') when h1 = h2 ->
+ let rc = check_subsumed b t1 t1 in
+ if rc then
+ true, true
+ else if h1 = h2 then
+ (try
+ List.fold_left2
+ (fun (ok_so_far, subsumption_used) t t' ->
+ aux true (ok_so_far, subsumption_used) t t')
+ (ok_so_far, subsumption_used) l l'
+ with Invalid_argument _ -> false,subsumption_used)
+ else
+ false, subsumption_used
+ | _ -> false, subsumption_used *)
+ | Cic.Appl (h1::l),Cic.Appl (h2::l') ->
+ let rc = check_subsumed b t1 t2 in
+ if rc then
+ true, true
+ else if h1 = h2 then
+ (try
+ List.fold_left2
+ (fun (ok_so_far, subsumption_used) t t' ->
+ aux true (ok_so_far, subsumption_used) t t')
+ (ok_so_far, subsumption_used) l l'
+ with Invalid_argument _ -> false,subsumption_used)
+ else
+ false, subsumption_used
+ | _ -> false, subsumption_used
+ in
+ fst (aux false (true,false) left right)
+;;
+
+(*
+let check_for_deep env active_table eq =
+ match Indexing.subsumption env active_table eq with
+ | None -> false
+ | Some _ -> true
+;;
+*)
+
+let profiler = HExtlib.profile "check_for_deep";;
+
+let check_for_deep_subsumption env active_table eq =
+ profiler.HExtlib.profile (check_for_deep_subsumption env active_table) eq
+;;
+