sig
  module Make :
    functor
      (L : ParseLocation.S) (I : Id_intf.Logic) (T : sig
                                                       type t
                                                       val eq_t : t
                                                       val neq_t : t
                                                       val wildcard : t
                                                       val tType : t
                                                       val prop : t
                                                       val true_ : t
                                                       val false_ : t
                                                       val not_t : t
                                                       val or_t : t
                                                       val and_t : t
                                                       val xor_t : t
                                                       val nor_t : t
                                                       val nand_t : t
                                                       val equiv_t : t
                                                       val implied_t : t
                                                       val implies_t : t
                                                       val data_t : t
                                                       val var :
                                                         ?loc:L.t -> I.t -> t
                                                       val const :
                                                         ?loc:L.t -> I.t -> t
                                                       val atom :
                                                         ?loc:L.t -> int -> t
                                                       val distinct :
                                                         ?loc:L.t -> I.t -> t
                                                       val int :
                                                         ?loc:L.t ->
                                                         string -> t
                                                       val rat :
                                                         ?loc:L.t ->
                                                         string -> t
                                                       val real :
                                                         ?loc:L.t ->
                                                         string -> t
                                                       val hexa :
                                                         ?loc:L.t ->
                                                         string -> t
                                                       val binary :
                                                         ?loc:L.t ->
                                                         string -> t
                                                       val colon :
                                                         ?loc:L.t ->
                                                         t -> t -> t
                                                       val eq :
                                                         ?loc:L.t ->
                                                         t -> t -> t
                                                       val not_ :
                                                         ?loc:L.t -> t -> t
                                                       val or_ :
                                                         ?loc:L.t ->
                                                         t list -> t
                                                       val and_ :
                                                         ?loc:L.t ->
                                                         t list -> t
                                                       val imply :
                                                         ?loc:L.t ->
                                                         t -> t -> t
                                                       val equiv :
                                                         ?loc:L.t ->
                                                         t -> t -> t
                                                       val apply :
                                                         ?loc:L.t ->
                                                         t -> t list -> t
                                                       val ite :
                                                         ?loc:L.t ->
                                                         t -> t -> t -> t
                                                       val pi :
                                                         ?loc:L.t ->
                                                         t list -> t -> t
                                                       val letin :
                                                         ?loc:L.t ->
                                                         t list -> t -> t
                                                       val forall :
                                                         ?loc:L.t ->
                                                         t list -> t -> t
                                                       val exists :
                                                         ?loc:L.t ->
                                                         t list -> t -> t
                                                       val lambda :
                                                         ?loc:L.t ->
                                                         t list -> t -> t
                                                       val choice :
                                                         ?loc:L.t ->
                                                         t list -> t -> t
                                                       val description :
                                                         ?loc:L.t ->
                                                         t list -> t -> t
                                                       val arrow :
                                                         ?loc:L.t ->
                                                         t -> t -> t
                                                       val product :
                                                         ?loc:L.t ->
                                                         t -> t -> t
                                                       val union :
                                                         ?loc:L.t ->
                                                         t -> t -> t
                                                       val subtype :
                                                         ?loc:L.t ->
                                                         t -> t -> t
                                                       val sequent :
                                                         ?loc:L.t ->
                                                         t list ->
                                                         t list -> t
                                                       val annot :
                                                         ?loc:L.t ->
                                                         t -> t list -> t
                                                       val sexpr :
                                                         ?loc:L.t ->
                                                         t list -> t
                                                     end) (S : sig
                                                                 type t
                                                                 val annot :
                                                                   ?loc:
                                                                   L.t ->
                                                                   T.t ->
                                                                   T.t list ->
                                                                   T.t
                                                                 val include_ :
                                                                   ?loc:
                                                                   L.t ->
                                                                   string ->
                                                                   I.t list ->
                                                                   t
                                                                 val p_cnf :
                                                                   ?loc:
                                                                   L.t ->
                                                                   int ->
                                                                   int -> t
                                                                 val clause :
                                                                   ?loc:
                                                                   L.t ->
                                                                   T.t list ->
                                                                   t
                                                                 val assumption :
                                                                   ?loc:
                                                                   L.t ->
                                                                   T.t list ->
                                                                   t
                                                                 val pop :
                                                                   ?loc:
                                                                   L.t ->
                                                                   int -> t
                                                                 val push :
                                                                   ?loc:
                                                                   L.t ->
                                                                   int -> t
                                                                 val assert_ :
                                                                   ?loc:
                                                                   L.t ->
                                                                   T.t -> t
                                                                 val check_sat :
                                                                   ?loc:
                                                                   L.t ->
                                                                   unit -> t
                                                                 val set_logic :
                                                                   ?loc:
                                                                   L.t ->
                                                                   string ->
                                                                   t
                                                                 val get_info :
                                                                   ?loc:
                                                                   L.t ->
                                                                   string ->
                                                                   t
                                                                 val set_info :
                                                                   ?loc:
                                                                   L.t ->
                                                                   string *
                                                                   T.t option ->
                                                                   t
                                                                 val get_option :
                                                                   ?loc:
                                                                   L.t ->
                                                                   string ->
                                                                   t
                                                                 val set_option :
                                                                   ?loc:
                                                                   L.t ->
                                                                   string *
                                                                   T.t option ->
                                                                   t
                                                                 val type_decl :
                                                                   ?loc:
                                                                   L.t ->
                                                                   I.t ->
                                                                   int -> t
                                                                 val type_def :
                                                                   ?loc:
                                                                   L.t ->
                                                                   I.t ->
                                                                   I.t list ->
                                                                   T.t -> t
                                                                 val fun_decl :
                                                                   ?loc:
                                                                   L.t ->
                                                                   I.t ->
                                                                   T.t list ->
                                                                   T.t -> t
                                                                 val fun_def :
                                                                   ?loc:
                                                                   L.t ->
                                                                   I.t ->
                                                                   T.t list ->
                                                                   T.t ->
                                                                   T.t -> t
                                                                 val get_proof :
                                                                   ?loc:
                                                                   L.t ->
                                                                   unit -> t
                                                                 val get_unsat_core :
                                                                   ?loc:
                                                                   L.t ->
                                                                   unit -> t
                                                                 val get_value :
                                                                   ?loc:
                                                                   L.t ->
                                                                   T.t list ->
                                                                   t
                                                                 val get_assignment :
                                                                   ?loc:
                                                                   L.t ->
                                                                   unit -> t
                                                                 val get_assertions :
                                                                   ?loc:
                                                                   L.t ->
                                                                   unit -> t
                                                                 val exit :
                                                                   ?loc:
                                                                   L.t ->
                                                                   unit -> t
                                                                 val tpi :
                                                                   ?loc:
                                                                   L.t ->
                                                                   ?annot:
                                                                   T.t ->
                                                                   I.t ->
                                                                   string ->
                                                                   T.t -> t
                                                                 val thf :
                                                                   ?loc:
                                                                   L.t ->
                                                                   ?annot:
                                                                   T.t ->
                                                                   I.t ->
                                                                   string ->
                                                                   T.t -> t
                                                                 val tff :
                                                                   ?loc:
                                                                   L.t ->
                                                                   ?annot:
                                                                   T.t ->
                                                                   I.t ->
                                                                   string ->
                                                                   T.t -> t
                                                                 val fof :
                                                                   ?loc:
                                                                   L.t ->
                                                                   ?annot:
                                                                   T.t ->
                                                                   I.t ->
                                                                   string ->
                                                                   T.t -> t
                                                                 val cnf :
                                                                   ?loc:
                                                                   L.t ->
                                                                   ?annot:
                                                                   T.t ->
                                                                   I.t ->
                                                                   string ->
                                                                   T.t -> t
                                                                 val inductive :
                                                                   ?loc:
                                                                   L.t ->
                                                                   I.t ->
                                                                   T.t list ->
                                                                   (I.t *
                                                                    T.t list)
                                                                   list -> 
                                                                   t
                                                                 val data :
                                                                   ?loc:
                                                                   L.t ->
                                                                   t list ->
                                                                   t
                                                                 val decl :
                                                                   ?loc:
                                                                   L.t ->
                                                                   I.t ->
                                                                   T.t -> t
                                                                 val definition :
                                                                   ?loc:
                                                                   L.t ->
                                                                   I.t ->
                                                                   T.t ->
                                                                   T.t -> t
                                                                 val goal :
                                                                   ?loc:
                                                                   L.t ->
                                                                   ?attr:
                                                                   T.t ->
                                                                   T.t -> t
                                                                 val assume :
                                                                   ?loc:
                                                                   L.t ->
                                                                   ?attr:
                                                                   T.t ->
                                                                   T.t -> t
                                                                 val rewrite :
                                                                   ?loc:
                                                                   L.t ->
                                                                   ?attr:
                                                                   T.t ->
                                                                   T.t -> t
                                                               end->
      sig
        exception Extension_not_found of string
        type language = Dimacs | ICNF | Smtlib | Tptp | Zf
        val enum : (string * Logic.Make.language) list
        val string_of_language : Logic.Make.language -> string
        val find :
          ?language:Logic.Make.language ->
          ?dir:string -> string -> string option
        val parse_file :
          ?language:Logic.Make.language ->
          string -> Logic.Make.language * S.t list
        val parse_input :
          ?language:Logic.Make.language ->
          [ `File of string | `Stdin of Logic.Make.language ] ->
          Logic.Make.language * (unit -> S.t option)
        module type S =
          sig
            type token
            module Lexer :
              sig exception Error val token : Lexing.lexbuf -> token end
            module Parser :
              sig
                exception Error
                val file :
                  (Lexing.lexbuf -> token) -> Lexing.lexbuf -> S.t list
                val input :
                  (Lexing.lexbuf -> token) -> Lexing.lexbuf -> S.t option
                module MenhirInterpreter :
                  sig
                    type token = token
                    type env
                    type production
                    type 'a checkpoint = private
                        InputNeeded of env
                      | Shifting of env * env * bool
                      | AboutToReduce of env * production
                      | HandlingError of env
                      | Accepted of 'a
                      | Rejected
                    val offer :
                      'a checkpoint ->
                      token * Lexing.position * Lexing.position ->
                      'a checkpoint
                    val resume : 'a checkpoint -> 'a checkpoint
                    type supplier =
                        unit -> token * Lexing.position * Lexing.position
                    val lexer_lexbuf_to_supplier :
                      (Lexing.lexbuf -> token) -> Lexing.lexbuf -> supplier
                    val loop : supplier -> 'a checkpoint -> 'a
                    val loop_handle :
                      ('-> 'answer) ->
                      ('a checkpoint -> 'answer) ->
                      supplier -> 'a checkpoint -> 'answer
                    val loop_handle_undo :
                      ('-> 'answer) ->
                      ('a checkpoint -> 'a checkpoint -> 'answer) ->
                      supplier -> 'a checkpoint -> 'answer
                    val loop_test :
                      (env -> 'accu -> 'accu) ->
                      'a checkpoint -> 'accu -> 'accu
                    val acceptable :
                      'a checkpoint -> token -> Lexing.position -> bool
                    type 'a lr1state
                    val number : 'a lr1state -> int
                    type element =
                        Element : 'a lr1state * 'a * Lexing.position *
                          Lexing.position -> element
                    type stack = element MenhirLib.General.stream
                    val stack : env -> stack
                    val positions : env -> Lexing.position * Lexing.position
                    val has_default_reduction : env -> bool
                  end
                module Incremental :
                  sig
                    val input :
                      Lexing.position ->
                      S.t option MenhirInterpreter.checkpoint
                  end
              end
            val find : ?dir:string -> string -> string option
            val parse_file : string -> S.t list
            val parse_input :
              [ `File of string | `Stdin ] -> unit -> S.t option
          end
        val of_language :
          Logic.Make.language ->
          Logic.Make.language * string * (module Logic.Make.S)
        val of_extension :
          string -> Logic.Make.language * string * (module Logic.Make.S)
      end
end