let build_prop_of_from wenv pre wp =
on_context wenv "build_froms" wp Keep_opened Keep_assigns
(fun env _assigns p ->
let alpha, p' = F.p_more_alpha_cv F.empty_alpha p in
let p = F.p_implies p p' in
let add_pre (alpha, p) (id, pre) = match predicate env pre with
| Result pre ->
let frame = L.get_frame env in
let pre = WpModel.update_at_label frame Clabels.Pre pre in
Datalib.Collector.add_depend id "hypothesis";
let p = F.p_implies pre p in
let alpha', pre' = F.p_more_alpha_cv alpha pre in
let p = F.p_implies pre' p in
alpha', p
| Warning(source,reason) ->
Datalib.Collector.add_warning ~source ~reason
"Ignored hypothesis %a" WpAnnot.pp_id id ;
alpha, p
in
let alpha, p = List.fold_left add_pre (alpha, p) pre in
let vars = F.fold_alpha (fun _v v' acc -> v'::acc) alpha [] in
let p = F.p_forall vars p in
p
)