sig
  exception BadSyntaxKind of char
  type prelude = string list
  type prelude_map = Printer.prelude Ident.Mid.t
  type prelude_export_map = Printer.prelude Ident.Mid.t
  type interface = string list
  type interface_map = Printer.interface Ident.Mid.t
  type interface_export_map = Printer.interface Ident.Mid.t
  type blacklist = string list
  type field_info = {
    field_name : string;
    field_trace : string;
    field_ident : Ident.ident option;
  }
  type printing_info = {
    why3_env : Env.env;
    vc_term_loc : Loc.position option;
    vc_term_attrs : Ident.Sattr.t;
    queried_terms :
      (Term.lsymbol * Loc.position option * Ident.Sattr.t) Wstdlib.Mstr.t;
    type_coercions : Term.Sls.t Ty.Mty.t;
    type_fields : Term.lsymbol list Ty.Mty.t;
    type_sorts : Ty.ty Wstdlib.Mstr.t;
    record_fields : Term.lsymbol list Term.Mls.t;
    constructors : Term.lsymbol Wstdlib.Mstr.t;
    set_str : Ident.Sattr.t Wstdlib.Mstr.t;
  }
  val default_printing_info : Env.env -> Printer.printing_info
  type printer_args = {
    env : Env.env;
    prelude : Printer.prelude;
    th_prelude : Printer.prelude_map;
    blacklist : Printer.blacklist;
    printing_info : Printer.printing_info option Stdlib.ref;
  }
  type printer =
      Printer.printer_args -> ?old:Stdlib.in_channel -> Task.task Pp.pp
  val register_printer :
    desc:Pp.formatted -> string -> Printer.printer -> unit
  val lookup_printer : string -> Printer.printer
  val list_printers : unit -> (string * Pp.formatted) list
  val print_prelude : Printer.prelude Pp.pp
  val print_th_prelude : Task.task -> Printer.prelude_map Pp.pp
  val print_interface : Printer.interface Pp.pp
  val meta_syntax_type : Theory.meta
  val meta_syntax_logic : Theory.meta
  val meta_syntax_literal : Theory.meta
  val meta_remove_prop : Theory.meta
  val meta_remove_logic : Theory.meta
  val meta_remove_type : Theory.meta
  val meta_remove_def : Theory.meta
  val meta_realized_theory : Theory.meta
  val syntax_type : Ty.tysymbol -> string -> bool -> Theory.tdecl
  val syntax_logic : Term.lsymbol -> string -> bool -> Theory.tdecl
  val syntax_literal : Ty.tysymbol -> string -> bool -> Theory.tdecl
  val remove_prop : Decl.prsymbol -> Theory.tdecl
  val check_syntax_type : Ty.tysymbol -> string -> unit
  val check_syntax_logic : Term.lsymbol -> string -> unit
  type syntax_map = (string * int) Ident.Mid.t
  val get_syntax_map : Task.task -> Printer.syntax_map
  val add_syntax_map :
    Theory.tdecl -> Printer.syntax_map -> Printer.syntax_map
  val get_rliteral_map : Task.task -> Printer.syntax_map
  val add_rliteral_map :
    Theory.tdecl -> Printer.syntax_map -> Printer.syntax_map
  val query_syntax : Printer.syntax_map -> Ident.ident -> string option
  val syntax_arity : string -> int
  val syntax_arguments_prec :
    string -> (int -> 'Pp.pp) -> int list -> 'a list Pp.pp
  val syntax_arguments : string -> 'Pp.pp -> 'a list Pp.pp
  val gen_syntax_arguments_prec :
    Stdlib.Format.formatter ->
    string ->
    (Stdlib.Format.formatter -> int -> char option -> int -> unit) ->
    int list -> unit
  val syntax_arguments_typed_prec :
    string ->
    (int -> Term.term Pp.pp) ->
    Ty.ty Pp.pp -> Term.term -> int list -> Term.term list Pp.pp
  val syntax_arguments_typed :
    string ->
    Term.term Pp.pp -> Ty.ty Pp.pp -> Term.term -> Term.term list Pp.pp
  val syntax_range_literal :
    ?cb:Number.int_constant Pp.pp option ->
    string -> Number.int_constant Pp.pp
  val syntax_float_literal :
    string -> Number.float_format -> Number.real_constant Pp.pp
  val on_syntax_map :
    (Printer.syntax_map -> 'Trans.trans) -> 'Trans.trans
  val sprint_tdecl :
    ('-> Stdlib.Format.formatter -> Theory.tdecl -> 'a * string list) ->
    Theory.tdecl -> 'a * string list -> 'a * string list
  val sprint_decl :
    ('-> Stdlib.Format.formatter -> Decl.decl -> 'a * string list) ->
    Theory.tdecl -> 'a * string list -> 'a * string list
  exception UnsupportedType of Ty.ty * string
  exception UnsupportedTerm of Term.term * string
  exception UnsupportedDecl of Decl.decl * string
  exception NotImplemented of string
  val unsupportedType : Ty.ty -> string -> 'a
  val unsupportedTerm : Term.term -> string -> 'a
  val unsupportedPattern : Term.pattern -> string -> 'a
  val unsupportedDecl : Decl.decl -> string -> 'a
  val notImplemented : string -> 'a
  exception Unsupported of string
  val unsupported : string -> 'a
  val catch_unsupportedType : (Ty.ty -> 'a) -> Ty.ty -> 'a
  val catch_unsupportedTerm : (Term.term -> 'a) -> Term.term -> 'a
  val catch_unsupportedDecl : (Decl.decl -> 'a) -> Decl.decl -> 'a
end