sig
  val add_logic_function : Cil_types.logic_info -> unit
  val mk_dummy_term : Cil_types.term_node -> Cil_types.typ -> Cil_types.term
  val instantiate :
    (string * Cil_types.logic_type) list ->
    Cil_types.logic_type -> Cil_types.logic_type
  val unroll_type :
    ?unroll_typedef:bool -> Cil_types.logic_type -> Cil_types.logic_type
  val type_sig_logic : Cil_types.typ -> Cil_types.typsig
  val isLogicType : (Cil_types.typ -> bool) -> Cil_types.logic_type -> bool
  val isLogicArrayType : Cil_types.logic_type -> bool
  val isLogicCharType : Cil_types.logic_type -> bool
  val isLogicVoidType : Cil_types.logic_type -> bool
  val isLogicPointerType : Cil_types.logic_type -> bool
  val isLogicVoidPointerType : Cil_types.logic_type -> bool
  val logicCType : Cil_types.logic_type -> Cil_types.typ
  val array_to_ptr : Cil_types.logic_type -> Cil_types.logic_type
  val typ_to_logic_type : Cil_types.typ -> Cil_types.logic_type
  val named_of_identified_predicate :
    Cil_types.identified_predicate -> Cil_types.predicate Cil_types.named
  val translate_old_label :
    Cil_types.stmt ->
    Cil_types.predicate Cil_types.named ->
    Cil_types.predicate Cil_types.named
  val insert_logic_cast :
    Cil_types.typ -> Cil_types.term_node -> Cil_types.term_node
  val is_C_array : Cil_types.term -> bool
  val mk_logic_StartOf : Cil_types.term -> Cil_types.term
  val isLogicPointer : Cil_types.term -> bool
  val mk_logic_pointer_or_StartOf : Cil_types.term -> Cil_types.term
  val expr_to_term : cast:bool -> Cil_types.exp -> Cil_types.term
  val lval_to_term_lval : cast:bool -> Cil_types.lval -> Cil_types.term_lval
  val host_to_term_host :
    cast:bool -> Cil_types.lhost -> Cil_types.term_lhost
  val offset_to_term_offset :
    cast:bool -> Cil_types.offset -> Cil_types.term_offset
  val remove_term_offset :
    Cil_types.term_offset -> Cil_types.term_offset * Cil_types.term_offset
  val lval_contains_result : Cil_types.term_lhost -> bool
  val loffset_contains_result : Cil_types.term_offset -> bool
  val contains_result : Cil_types.term -> bool
  val get_pred_body :
    Cil_types.logic_info -> Cil_types.predicate Cil_types.named
  val is_result : Cil_types.term -> bool
  val lhost_c_type : Cil_types.term_lhost -> Cil_types.typ
  exception Not_well_formed of (Cil_types.location * string)
  val check_empty : Cil_types.location * string -> 'a list -> unit
  val check_assigns :
    ?loc:Cil_types.location -> 'Cil_types.assigns list -> unit
  val check_all_assigns :
    ?loc:Cil_types.location ->
    'Cil_types.assigns list -> ('b, 'a) Cil_types.behavior list -> unit
  val is_same_logic_label :
    Cil_types.logic_label -> Cil_types.logic_label -> bool
  val is_same_type : Cil_types.logic_type -> Cil_types.logic_type -> bool
  val is_same_var : Cil_types.logic_var -> Cil_types.logic_var -> bool
  val is_same_logic_signature :
    Cil_types.logic_info -> Cil_types.logic_info -> bool
  val is_same_logic_profile :
    Cil_types.logic_info -> Cil_types.logic_info -> bool
  val is_same_builtin_profile :
    Cil_types.builtin_logic_info -> Cil_types.builtin_logic_info -> bool
  val is_same_logic_ctor_info :
    Cil_types.logic_ctor_info -> Cil_types.logic_ctor_info -> bool
  val is_same_constant : Cil_types.constant -> Cil_types.constant -> bool
  val is_same_term : Cil_types.term -> Cil_types.term -> bool
  val is_same_logic_info :
    Cil_types.logic_info -> Cil_types.logic_info -> bool
  val is_same_logic_body :
    Cil_types.logic_body -> Cil_types.logic_body -> bool
  val is_same_indcase :
    string * Cil_types.logic_label list * string list *
    Cil_types.predicate Cil_types.named ->
    string * Cil_types.logic_label list * string list *
    Cil_types.predicate Cil_types.named -> bool
  val is_same_tlval : Cil_types.term_lval -> Cil_types.term_lval -> bool
  val is_same_lhost : Cil_types.term_lhost -> Cil_types.term_lhost -> bool
  val is_same_offset : Cil_types.term_offset -> Cil_types.term_offset -> bool
  val is_same_predicate : Cil_types.predicate -> Cil_types.predicate -> bool
  val is_same_named_predicate :
    Cil_types.predicate Cil_types.named ->
    Cil_types.predicate Cil_types.named -> bool
  val is_same_identified_predicate :
    Cil_types.identified_predicate -> Cil_types.identified_predicate -> bool
  val is_same_identified_term :
    Cil_types.identified_term -> Cil_types.identified_term -> bool
  val is_same_zone :
    Cil_types.identified_term Cil_types.zone ->
    Cil_types.identified_term Cil_types.zone -> bool
  val is_same_assigns :
    Cil_types.identified_term Cil_types.assigns ->
    Cil_types.identified_term Cil_types.assigns -> bool
  val is_same_variant :
    Cil_types.term Cil_types.variant ->
    Cil_types.term Cil_types.variant -> bool
  val is_same_post_cond :
    Cil_types.termination_kind * Cil_types.identified_predicate ->
    Cil_types.termination_kind * Cil_types.identified_predicate -> bool
  val is_same_behavior :
    Cil_types.funbehavior -> Cil_types.funbehavior -> bool
  val is_same_spec : Cil_types.funspec -> Cil_types.funspec -> bool
  val is_same_logic_type_def :
    Cil_types.logic_type_def -> Cil_types.logic_type_def -> bool
  val is_same_logic_type_info :
    Cil_types.logic_type_info -> Cil_types.logic_type_info -> bool
  val is_same_loop_pragma :
    Cil_types.term Cil_types.loop_pragma ->
    Cil_types.term Cil_types.loop_pragma -> bool
  val is_same_slice_pragma :
    Cil_types.term Cil_types.slice_pragma ->
    Cil_types.term Cil_types.slice_pragma -> bool
  val is_same_impact_pragma :
    Cil_types.term Cil_types.impact_pragma ->
    Cil_types.term Cil_types.impact_pragma -> bool
  val is_same_pragma :
    Cil_types.term Cil_types.pragma ->
    Cil_types.term Cil_types.pragma -> bool
  val is_same_code_annotation :
    Cil_types.code_annotation -> Cil_types.code_annotation -> bool
  val is_same_global_annotation :
    Cil_types.global_annotation -> Cil_types.global_annotation -> bool
  val is_same_axiomatic :
    Cil_types.global_annotation list ->
    Cil_types.global_annotation list -> bool
  val get_behavior_names : ('a, 'b, 'c) Cil_types.spec -> string list
  val merge_assigns :
    Cil_types.identified_term Cil_types.assigns list ->
    Cil_types.identified_term Cil_types.assigns list ->
    Cil_types.identified_term Cil_types.assigns list
  val merge_behaviors :
    silent:bool ->
    Cil_types.funbehavior list ->
    Cil_types.funbehavior list -> Cil_types.funbehavior list
  val merge_funspec :
    ?silent_about_merging_behav:bool ->
    Cil_types.funspec -> Cil_types.funspec -> unit
  val is_assert : Cil_types.code_annotation -> bool
  val is_contract : Cil_types.code_annotation -> bool
  val is_stmt_invariant : Cil_types.code_annotation -> bool
  val is_loop_invariant : Cil_types.code_annotation -> bool
  val is_invariant : Cil_types.code_annotation -> bool
  val is_variant : Cil_types.code_annotation -> bool
  val is_assigns : Cil_types.code_annotation -> bool
  val is_pragma : Cil_types.code_annotation -> bool
  val is_loop_pragma : Cil_types.code_annotation -> bool
  val is_slice_pragma : Cil_types.code_annotation -> bool
  val is_impact_pragma : Cil_types.code_annotation -> bool
  val is_loop_annot : Cil_types.code_annotation -> bool
  val extract_loop_pragma :
    Cil_types.code_annotation list ->
    Cil_types.term Cil_types.loop_pragma list
  val extract_contract :
    Cil_types.code_annotation list -> Cil_types.funspec list
  val kw_c_mode : bool Pervasives.ref
  val enter_kw_c_mode : unit -> unit
  val exit_kw_c_mode : unit -> unit
  val is_kw_c_mode : unit -> bool
  val rt_type_mode : bool Pervasives.ref
  val enter_rt_type_mode : unit -> unit
  val exit_rt_type_mode : unit -> unit
  val is_rt_type_mode : unit -> bool
end