sig
  type scope =
      SC_Global
    | SC_Function_in
    | SC_Function_frame
    | SC_Function_out
    | SC_Block_in
    | SC_Block_out
  type assigns_method =
      NoAssigns
    | NormalAssigns
    | EffectAssigns
    | RegionAssigns
  module type Export =
    sig
      type pred
      val export_goal :
        Format.formatter -> string -> Mcfg.Export.pred -> unit
      val export_decl :
        Format.formatter -> Mcfg.Export.pred Formula.declaration -> unit
    end
  module type Splitter =
    sig
      type pred
      val split :
        Mcfg.assigns_method -> Mcfg.Splitter.pred -> Mcfg.Splitter.pred Bag.t
    end
  module type S =
    sig
      type t_prop
      val pretty : Format.formatter -> Mcfg.S.t_prop -> unit
      val merge : Mcfg.S.t_prop -> Mcfg.S.t_prop -> Mcfg.S.t_prop
      val empty : Mcfg.S.t_prop
      type t_env
      val new_env : Db_types.kernel_function -> Mcfg.S.t_env
      val add_axiom :
        WpAnnot.prop_id ->
        string ->
        Cil_types.logic_label list ->
        Cil_types.predicate Cil_types.named -> unit
      val add_hyp :
        Mcfg.S.t_env ->
        WpAnnot.prop_id ->
        Cil_types.predicate Cil_types.named -> Mcfg.S.t_prop -> Mcfg.S.t_prop
      val add_goal :
        Mcfg.S.t_env ->
        WpAnnot.prop_id ->
        Cil_types.predicate Cil_types.named -> Mcfg.S.t_prop -> Mcfg.S.t_prop
      val add_as_hyp :
        Mcfg.S.t_env -> Mcfg.S.t_prop -> Mcfg.S.t_prop -> Mcfg.S.t_prop
      val add_as_goal :
        Mcfg.S.t_env -> Mcfg.S.t_prop -> Mcfg.S.t_prop -> Mcfg.S.t_prop
      val add_assigns :
        Mcfg.S.t_env ->
        WpAnnot.prop_id ->
        Cil_types.logic_label ->
        WpAnnot.a_kind ->
        Cil_types.identified_term Cil_types.assigns list ->
        Mcfg.S.t_prop -> Mcfg.S.t_prop
      val use_assigns :
        Mcfg.S.t_env ->
        WpAnnot.prop_id ->
        WpAnnot.a_kind ->
        Cil_types.identified_term Cil_types.assigns list ->
        Mcfg.S.t_prop -> Mcfg.S.t_prop
      val assigns_method : unit -> Mcfg.assigns_method
      val label :
        Mcfg.S.t_env ->
        Cil_types.logic_label -> Mcfg.S.t_prop -> Mcfg.S.t_prop
      val assign :
        Mcfg.S.t_env ->
        Cil_types.lval -> Cil_types.exp -> Mcfg.S.t_prop -> Mcfg.S.t_prop
      val return :
        Mcfg.S.t_env ->
        Cil_types.exp option -> Mcfg.S.t_prop -> Mcfg.S.t_prop
      val test :
        Mcfg.S.t_env ->
        Cil_types.exp -> Mcfg.S.t_prop -> Mcfg.S.t_prop -> Mcfg.S.t_prop
      val switch :
        Mcfg.S.t_env ->
        Cil_types.exp ->
        (Cil_types.exp list * Mcfg.S.t_prop) list ->
        Mcfg.S.t_prop -> Mcfg.S.t_prop
      val call_normal :
        Mcfg.S.t_env ->
        get_pre:(Db_types.kernel_function ->
                 (WpAnnot.prop_id * Cil_types.predicate Cil_types.named) list) ->
        get_post:(Db_types.kernel_function ->
                  (WpAnnot.prop_id * Cil_types.predicate Cil_types.named)
                  list) ->
        get_assigns:(Db_types.kernel_function ->
                     Cil_types.identified_term Cil_types.assigns list) ->
        Cil_types.stmt ->
        Cil_types.lval option ->
        Cil_types.exp -> Cil_types.exp list -> Mcfg.S.t_prop -> Mcfg.S.t_prop
      val call_exit :
        Mcfg.S.t_env ->
        get_pre:(Db_types.kernel_function ->
                 (WpAnnot.prop_id * Cil_types.predicate Cil_types.named) list) ->
        get_exits:(Db_types.kernel_function ->
                   (WpAnnot.prop_id * Cil_types.predicate Cil_types.named)
                   list) ->
        get_assigns:(Db_types.kernel_function ->
                     Cil_types.identified_term Cil_types.assigns list) ->
        Cil_types.stmt ->
        Cil_types.exp -> Cil_types.exp list -> Mcfg.S.t_prop -> Mcfg.S.t_prop
      val scope :
        Mcfg.S.t_env ->
        Cil_types.varinfo list ->
        Mcfg.scope -> Mcfg.S.t_prop -> Mcfg.S.t_prop
      val build_prop_of_from :
        Mcfg.S.t_env ->
        WpAnnot.t_id_pred list -> Mcfg.S.t_prop -> Mcfg.S.t_prop
      val close : Mcfg.S.t_env -> Mcfg.S.t_prop -> Mcfg.S.t_prop
    end
end