sig
  type statement =
    BlastCSystemDescr.C_Command.statement =
      Expr of Ast.Expression.expression
    | Return of Ast.Expression.expression
  and command =
    BlastCSystemDescr.C_Command.command =
      Skip
    | Block of statement list
    | Pred of Ast.Predicate.predicate
    | FunctionCall of Ast.Expression.expression
    | Havoc of Ast.Expression.lval
    | HavocAll
    | Phi of Ast.Expression.lval * bool
  and t =
    BlastCSystemDescr.C_Command.t = {
    code : command;
    read : Ast.Expression.lval list;
    written : Ast.Expression.lval list;
  } 
  val print : Format.formatter -> t -> unit
  val to_string : t -> string
end