sig
  type test
  val tests : OASISExpr.test list
  val string_of_test : OASISExpr.test -> string
  val test_of_string : string -> OASISExpr.test
  type flag = string
  type t =
      EBool of bool
    | ENot of OASISExpr.t
    | EAnd of OASISExpr.t * OASISExpr.t
    | EOr of OASISExpr.t * OASISExpr.t
    | EFlag of OASISExpr.flag
    | ETest of OASISExpr.test * string
  type 'a choices = (OASISExpr.t * 'a) list
  val eval : (string -> string) -> OASISExpr.t -> bool
  val choose :
    ?printer:('-> string) ->
    ?name:string -> (string -> string) -> 'OASISExpr.choices -> 'a
  val check : OASISExpr.flag list -> OASISExpr.t -> unit
  val reduce : OASISExpr.t -> OASISExpr.t
  val reduce_choices : 'OASISExpr.choices -> 'OASISExpr.choices
  val if_then_else :
    OASISExpr.t ->
    'OASISExpr.choices -> 'OASISExpr.choices -> 'OASISExpr.choices
  val odn_of_choices :
    ('-> OASISDataNotation.t) ->
    'OASISExpr.choices -> OASISDataNotation.t
  val to_string : OASISExpr.t -> string
  val string_of_choices : ('-> string) -> 'OASISExpr.choices -> string
end