X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fcomponents%2Fng_paramodulation%2Fstats.ml;h=0f9f45d960e6c30aac980d5bde0f62950d7678a1;hb=ee9a771a3cf2124ef65906ae75eb0ba7e2e4303b;hp=90d6ccf0b8197b9f25276130be3b27dd0594f112;hpb=6f2f9693db45a2ef905123bc48cde9f04ddff54f;p=helm.git diff --git a/helm/software/components/ng_paramodulation/stats.ml b/helm/software/components/ng_paramodulation/stats.ml index 90d6ccf0b..0f9f45d96 100644 --- a/helm/software/components/ng_paramodulation/stats.ml +++ b/helm/software/components/ng_paramodulation/stats.ml @@ -55,15 +55,37 @@ module Stats (B : Terms.Blob) = | Terms.Predicate _ -> assert false; ;; + let goal_pos t goal = + let rec aux path = function + | Terms.Var _ -> [] + | Terms.Leaf x -> + if B.eq t x then path else [] + | Terms.Node l -> + match + HExtlib.list_findopt + (fun x i -> + let p = aux (i::path) x in + if p = [] then None else Some p) + l + with + | None -> [] + | Some p -> p + in + aux [] + (match goal with + | _,Terms.Equation (l,r,ty,_),_,_ -> Terms.Node [ Terms.Leaf B.eqP; ty; l; r ] + | _,Terms.Predicate p,_,_ -> p) + ;; + let parse_symbols l goal = let res = parse_symbols (parse_symbols SymbMap.empty [goal]) l in SymbMap.fold (fun t (occ,ar) acc -> - (t,occ,ar,goal_occ_nbr t goal)::acc) res [] + (t,occ,ar,goal_occ_nbr t goal,goal_pos t goal)::acc) res [] ;; let rec dependencies op clauses acc = match clauses with - | [] -> [] + | [] -> acc | (_,lit,_,_)::tl -> match lit with | Terms.Predicate _ -> assert false @@ -87,7 +109,7 @@ module Stats (B : Terms.Blob) = else dependencies op tl acc else dependencies op tl acc - | _ -> acc + | _ -> dependencies op tl acc ;; let dependencies op clauses = dependencies op clauses [];;