X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fcomponents%2Fng_paramodulation%2Fsuperposition.ml;h=42cf063b64f08b3e352693d7a30bebff78025e95;hb=refs%2Fheads%2Fmatita-lablgtk3;hp=37b39fa2802ef6bb903a8f5e858396c859d746d0;hpb=e22808c929a9cebf5e4e2b7428ff0cbf89e1f92a;p=helm.git diff --git a/helm/software/components/ng_paramodulation/superposition.ml b/helm/software/components/ng_paramodulation/superposition.ml index 37b39fa28..42cf063b6 100644 --- a/helm/software/components/ng_paramodulation/superposition.ml +++ b/helm/software/components/ng_paramodulation/superposition.ml @@ -26,7 +26,7 @@ module Superposition (B : Orderings.Blob) = * B.t Terms.unit_clause * B.t Terms.substitution - (* let debug s = prerr_endline (Lazy.force s);; *) + let print s = prerr_endline (Lazy.force s);; let debug _ = ();; let enable = true;; @@ -272,7 +272,12 @@ module Superposition (B : Orderings.Blob) = let rec demodulate bag (id, literal, vl, pr) table = debug (lazy ("demodulate " ^ (string_of_int id))); match literal with - | Terms.Predicate t -> assert false + | Terms.Predicate t -> (* assert false *) + let bag,_,id1 = + visit bag [] (fun x -> x) id t (ctx_demod table vl) + in + let cl,_,_ = Terms.get_from_bag id1 bag in + bag,cl | Terms.Equation (l,r,ty,_) -> let bag,l,id1 = visit bag [2] @@ -328,17 +333,22 @@ module Superposition (B : Orderings.Blob) = | _, Terms.Equation (l,r,_,_), vl, proof -> (try Some (Unif.unification (* vl *) [] l r) with FoUnif.UnificationFailure _ -> None) - | _, Terms.Equation (_,_,_,_), _, _ -> None | _, Terms.Predicate _, _, _ -> assert false ;; - let build_new_clause bag maxvar filter rule t subst id id2 pos dir = + let build_new_clause_reloc bag maxvar filter rule t subst id id2 pos dir = let maxvar, _vl, subst = Utils.relocate maxvar (Terms.vars_of_term (Subst.apply_subst subst t)) subst in match build_clause bag filter rule t subst id id2 pos dir with - | Some (bag, c) -> Some ((bag, maxvar), c) - | None -> None + | Some (bag, c) -> Some ((bag, maxvar), c), subst + | None -> None,subst + ;; + + let build_new_clause bag maxvar filter rule t subst id id2 pos dir = + fst (build_new_clause_reloc bag maxvar filter rule t + subst id id2 pos dir) ;; + let prof_build_new_clause = HExtlib.profile ~enable "build_new_clause";; let build_new_clause bag maxvar filter rule t subst id id2 pos x = prof_build_new_clause.HExtlib.profile (build_new_clause bag maxvar filter @@ -407,6 +417,7 @@ module Superposition (B : Orderings.Blob) = match acc with | None -> None | Some(bag,maxvar,(id,lit,vl,p),subst) -> + (* prerr_endline ("input subst = "^Pp.pp_substitution subst); *) let l = Subst.apply_subst subst l in let r = Subst.apply_subst subst r in try @@ -421,19 +432,24 @@ module Superposition (B : Orderings.Blob) = with FoUnif.UnificationFailure _ -> match rewrite_eq ~unify l r ty vl table with | Some (id2, dir, subst1) -> + (* prerr_endline ("subst1 = "^Pp.pp_substitution subst1); + prerr_endline ("old subst = "^Pp.pp_substitution subst);*) let newsubst = Subst.concat subst1 subst in let id_t = FoSubst.apply_subst newsubst (Terms.Node[Terms.Leaf B.eqP;ty;contextl r;contextr r]) in (match - build_new_clause bag maxvar (fun _ -> true) + build_new_clause_reloc bag maxvar (fun _ -> true) Terms.Superposition id_t subst1 id id2 (pos@[2]) dir with - | Some ((bag, maxvar), c) -> + | Some ((bag, maxvar), c), r -> + (* prerr_endline ("r = "^Pp.pp_substitution r); *) + let newsubst = Subst.flat + (Subst.concat r subst) in Some(bag,maxvar,c,newsubst) - | None -> assert false) + | None, _ -> assert false) | None -> match l,r with | Terms.Node (a::la), Terms.Node (b::lb) when @@ -455,6 +471,7 @@ module Superposition (B : Orderings.Blob) = in acc | _,_ -> None ;; + let prof_deep_eq = HExtlib.profile ~enable "deep_eq";; let deep_eq ~unify l r ty pos contextl contextr table x = prof_deep_eq.HExtlib.profile (deep_eq ~unify l r ty pos contextl contextr table) x @@ -619,8 +636,8 @@ module Superposition (B : Orderings.Blob) = let bag, clause = if no_demod then bag, clause else demodulate bag clause table in - let _ = debug ("demodulated goal : " - ^ Pp.pp_unit_clause clause) + let _ = debug (lazy ("demodulated goal : " + ^ Pp.pp_unit_clause clause)) in if List.exists (are_alpha_eq clause) g_actives then None else match (is_identity_goal clause) with