let check_assigns goal region wp =
    match goal , region with
      | NoAssigns , _ -> wp
      | (EffectAssigns _ | RegionAssigns _) , None -> wp
          (* TODO: Should be Assigns Everything !! *)
          (* Seems to be a bug in CIL because Nothing leads
             to no assigned, hence None. *)

          (*
            Datalib.Collector.add_warning
            ~severe:true
            ~reason:"Assigns everything during calculus"
            "Can not prove the assign goal" ;
            F.p_false
          *)

      | EffectAssigns a , Some zones ->
          let ze = List.fold_left
            (fun zs a ->
               let za = WpModel.dzone_assigned a in
               WpModel.dzone_union zs za)
            (F.var a.a_effect) zones
          in
          D.subst a.a_effect ze wp
      | RegionAssigns r , Some zones ->
          let re = List.fold_left
            (fun rs a ->
               let ra = WpModel.region_assigned a in
               WpModel.region_union rs ra)
            (WpModel.region_empty()) zones
          in
          F.p_implies (region_included re r) wp