X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fcomponents%2Fng_paramodulation%2Fstats.ml;h=fd68f0fe765cd7cd75be5805dac8c516a0f623fb;hb=f9abd21eb0d26cf9b632af4df819225be4d091e3;hp=a281ddc867a12ee8a21ab8f1ae17f629cf345e87;hpb=18beb4339a683c5b6243673b91da878a208b36e3;p=helm.git diff --git a/helm/software/components/ng_paramodulation/stats.ml b/helm/software/components/ng_paramodulation/stats.ml index a281ddc86..fd68f0fe7 100644 --- a/helm/software/components/ng_paramodulation/stats.ml +++ b/helm/software/components/ng_paramodulation/stats.ml @@ -83,9 +83,15 @@ module Stats (B : Terms.Blob) = (t,occ,ar,goal_occ_nbr t goal,goal_pos t goal)::acc) res [] ;; + let rec leaf_count = function + | Terms.Node l -> List.fold_left (fun acc x -> acc + (leaf_count x)) 0 l + | Terms.Leaf _ -> 1 + | _ -> 0 + ;; + let rec dependencies op clauses acc = match clauses with - | [] -> [] + | [] -> acc | (_,lit,_,_)::tl -> match lit with | Terms.Predicate _ -> assert false @@ -109,10 +115,21 @@ module Stats (B : Terms.Blob) = else dependencies op tl acc else dependencies op tl acc - | _ -> acc + | ((Terms.Node (Terms.Leaf op1::t) as x),y) + | (y,(Terms.Node (Terms.Leaf op1::t) as x)) when leaf_count x > leaf_count y -> + let rec term_leaves = function + | Terms.Node l -> List.fold_left (fun acc x -> acc @ (term_leaves x)) [] l + | Terms.Leaf x -> [x] + | _ -> [] + in + if List.mem op (List.filter (fun z -> not (B.eq op1 z)) (term_leaves x)) then + dependencies op tl (op1::acc) + else + dependencies op tl acc + | _ -> dependencies op tl acc ;; - let dependencies op clauses = dependencies op clauses [];; + let dependencies op clauses = HExtlib.list_uniq (List.sort Pervasives.compare (dependencies op clauses []));; (* let max_weight_hyp = *)