let build_prop_of_from wenv (pre:WpPropId.pred_info list) 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) = 
           let pid = WpPropId.property_of_id id in
           match predicate env pre with
           | Result pre ->
               let pre =
                 match L.find_mem env Clabels.Pre with
                   | Some at ->
                       let here = L.mem_at env Clabels.Here in
                       WpModel.update ~at ~here pre
                   | None -> pre
               in
               Datalib.Collector.add_depend pid ;
               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" Description.pp_property pid ;
               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
         let p = F.p_forall (L.collect_logic_vars env) p in
             p
      )