sig
  type term
  type lit
  type clause
  type name_ctx = (string, TopDown.PARSE.term) Hashtbl.t
  val create_ctx : unit -> TopDown.PARSE.name_ctx
  val term_of_ast :
    ctx:TopDown.PARSE.name_ctx -> TopDownAst.term -> TopDown.PARSE.term
  val lit_of_ast :
    ctx:TopDown.PARSE.name_ctx -> TopDownAst.literal -> TopDown.PARSE.lit
  val clause_of_ast :
    ?ctx:TopDown.PARSE.name_ctx -> TopDownAst.clause -> TopDown.PARSE.clause
  val clauses_of_ast :
    ?ctx:TopDown.PARSE.name_ctx ->
    TopDownAst.clause list -> TopDown.PARSE.clause list
  val parse_chan :
    Pervasives.in_channel ->
    [ `Error of string | `Ok of TopDown.PARSE.clause list ]
  val parse_file :
    string -> [ `Error of string | `Ok of TopDown.PARSE.clause list ]
  val parse_string :
    string -> [ `Error of string | `Ok of TopDown.PARSE.clause list ]
  val clause_of_string : string -> TopDown.PARSE.clause
  val term_of_string : string -> TopDown.PARSE.term
end