sig
  type bop = Plus | Minus | Times | Div
  type expr =
      Int of Location.t * int
    | Var of Location.t * Name.t
    | Binop of Location.t * Ast.bop * Ast.expr * Ast.expr
    | Rand of Location.t * int * int
  type stm =
      Asn of Location.t * Name.t * Ast.expr
    | Seq of Location.t * Ast.stm * Ast.stm
    | Ite of Location.t * Ast.expr * Ast.stm * Ast.stm
    | While of Location.t * Ast.expr * Ast.stm
  val loc_of_expr : Ast.expr -> Location.t
  val loc_of_stm : Ast.stm -> Location.t
  val neg_guard : Ast.expr -> Ast.expr
  val vars_of_stm : Ast.stm -> Name.Set.t
  val char_of_bop : Ast.bop -> char
  val fprint_expr : Format.formatter -> Ast.expr -> unit
  val fprint_stm : Format.formatter -> Ast.stm -> unit
end