sig
  exception UnboundVarName of string
  exception No_such_counter_automata_in_nts_system of string * string
  module type NTS_PARAM =
    sig
      type t
      type anot_type
      val anot_parser : unit -> Nts_functor.NTS_PARAM.anot_type
      val pprint_keyid : Nts_functor.NTS_PARAM.t -> string
      val key_val_of_string : string -> Nts_functor.NTS_PARAM.t
      val compare_keyid :
        Nts_functor.NTS_PARAM.t -> Nts_functor.NTS_PARAM.t -> int
      val pprint_anot : Nts_functor.NTS_PARAM.anot_type -> string
    end
  module Make :
    functor (Param : NTS_PARAM->
      sig
        type anotations
        type control = Nts_State of Param.t
        type transitions_container
        type states_container
        type inv_relation_container
        val fold_states_containers :
          Nts_functor.Make.states_container ->
          ('-> Nts_functor.Make.control -> 'a) -> '-> 'a
        val fold_transitions_container :
          Nts_functor.Make.transitions_container ->
          ('->
           Nts_functor.Make.control ->
           Nts_types.nts_trans_label list -> Nts_functor.Make.control -> 'a) ->
          '-> 'a
        val add_transition_to_container :
          Nts_functor.Make.transitions_container ->
          Nts_functor.Make.control ->
          Nts_types.nts_trans_label list -> Nts_functor.Make.control -> unit
        val iter_transitions_container :
          Nts_functor.Make.transitions_container ->
          (Nts_functor.Make.control ->
           Nts_types.nts_trans_label list -> Nts_functor.Make.control -> unit) ->
          unit
        val iter_state_container :
          Nts_functor.Make.states_container ->
          (Nts_functor.Make.control -> unit) -> unit
        val is_state_in_inv_relation :
          Nts_functor.Make.inv_relation_container ->
          Nts_functor.Make.control -> bool
        val is_state_in_transition_container :
          Nts_functor.Make.control ->
          Nts_functor.Make.transitions_container -> bool
        type nts_automaton = {
          mutable nts_automata_name : string;
          mutable anot : Nts_functor.Make.anotations;
          init_states : Nts_functor.Make.states_container;
          final_states : Nts_functor.Make.states_container;
          error_states : Nts_functor.Make.states_container;
          input_vars : Nts_types.nts_genrel_var list;
          output_vars : Nts_types.nts_genrel_var list;
          local_vars : Nts_types.nts_genrel_var list;
          transitions : Nts_functor.Make.transitions_container;
        }
        type nts_system = {
          nts_system_name : string;
          nts_global_vars : Nts_types.nts_genrel_var list;
          nts_automata : (string, Nts_functor.Make.nts_automaton) Hashtbl.t;
          nts_gvars_init : Nts_types.nts_gen_relation list option;
          nts_system_threads : (string * Big_int.big_int) list option;
        }
        type num_subrel_in_cautomaton = {
          subrel_root : Nts_functor.Make.control;
          sub_vertices : Nts_functor.Make.states_container;
          sub_transitions : Nts_functor.Make.transitions_container;
        }
        val is_state_in_cautomaton :
          Nts_functor.Make.control -> Nts_functor.Make.nts_automaton -> bool
        val pprint_control : Nts_functor.Make.control -> string
        val anot_parser : unit -> Nts_functor.Make.anotations
        val states_container_of_states_list :
          Nts_functor.Make.control list -> Nts_functor.Make.states_container
        val transitions_container_of_trans_list :
          (Nts_functor.Make.control * Nts_functor.Make.control *
           Nts_types.nts_trans_label list)
          list -> Nts_functor.Make.transitions_container
        val control_of_id_param : Param.t -> Nts_functor.Make.control
        val out_degree_of_control_state :
          Nts_functor.Make.control -> Nts_functor.Make.nts_automaton -> int
        val in_degree_of_control_state :
          Nts_functor.Make.control ->
          Nts_functor.Make.inv_relation_container -> int
        val get_varinfo_by_optname :
          Nts_functor.Make.nts_system ->
          string option -> string -> Nts_types.nts_genrel_var option
        val get_varinfo_by_optcautomaton :
          Nts_functor.Make.nts_system ->
          Nts_functor.Make.nts_automaton option ->
          string -> Nts_types.nts_genrel_var option
        val is_error_state :
          Nts_functor.Make.nts_automaton -> Nts_functor.Make.control -> bool
        val is_initial_state :
          Nts_functor.Make.nts_automaton -> Nts_functor.Make.control -> bool
        val is_final_state :
          Nts_functor.Make.nts_automaton -> Nts_functor.Make.control -> bool
        val get_transition_from :
          Nts_functor.Make.nts_automaton ->
          Nts_functor.Make.control ->
          Nts_functor.Make.control ->
          Nts_types.nts_trans_label list list option
        val get_successor_of :
          Nts_functor.Make.nts_automaton ->
          Nts_functor.Make.control -> Nts_functor.Make.states_container
        val get_one_state :
          Nts_functor.Make.states_container ->
          Nts_functor.Make.control option
        val is_successor_of :
          Nts_functor.Make.nts_automaton ->
          Nts_functor.Make.control -> Nts_functor.Make.control -> bool
        val get_one_transition :
          Nts_functor.Make.nts_automaton ->
          Nts_functor.Make.control ->
          Nts_functor.Make.control * Nts_types.nts_trans_label list
        val pprint_inputvars : Nts_functor.Make.nts_automaton -> string
        val pprint_outputvars : Nts_functor.Make.nts_automaton -> string
        val pprint_localvars : Nts_functor.Make.nts_automaton -> string
        val nt_system_var_cleaner :
          Nts_functor.Make.nts_system -> Nts_functor.Make.nts_system
        val nt_system_uncalled_subsystem_cleaner :
          Nts_functor.Make.nts_system -> Nts_functor.Make.nts_system
        val pprint_to_nts : Nts_functor.Make.nts_automaton -> string
        val pprint_nts : Nts_functor.Make.nts_system -> string
        val get_cautomaton_by_name :
          Nts_functor.Make.nts_system ->
          string -> Nts_functor.Make.nts_automaton
        val pprint_transitions :
          string -> Nts_functor.Make.nts_automaton -> string
        val compute_pred_relation :
          Nts_functor.Make.nts_automaton ->
          Nts_functor.Make.inv_relation_container
        val subgraph_between :
          Nts_functor.Make.nts_automaton ->
          Nts_functor.Make.control ->
          Nts_functor.Make.control ->
          Nts_functor.Make.num_subrel_in_cautomaton
        val subgraph_between_cond_on_edges :
          (Nts_functor.Make.control ->
           Nts_types.nts_trans_label list -> Nts_functor.Make.control -> bool) ->
          Nts_functor.Make.nts_automaton ->
          Nts_functor.Make.control ->
          Nts_functor.Make.control ->
          Nts_functor.Make.num_subrel_in_cautomaton
        val pprint_subgraph_transitions :
          Nts_functor.Make.num_subrel_in_cautomaton -> string
        val cautomaton_of_subrelation_cautomaton :
          string ->
          Nts_functor.Make.nts_automaton ->
          Nts_functor.Make.num_subrel_in_cautomaton ->
          Nts_functor.Make.nts_automaton
        val cautomaton_of_transitions_container :
          string ->
          Nts_functor.Make.nts_automaton ->
          Nts_functor.Make.transitions_container ->
          Nts_functor.Make.nts_automaton
        type nts_type_basic_block = Nts_branching_block | Nts_standard_block
        type nts_basic_block = {
          block_head_label : string;
          block_head_state : Nts_functor.Make.control;
          block_type : Nts_functor.Make.nts_type_basic_block;
          mutable block :
            (Nts_functor.Make.control * Nts_types.nts_trans_label list *
             Nts_functor.Make.control)
            list;
          mutable block_succs :
            (Nts_functor.Make.nts_basic_block Pervasives.ref *
             Nts_types.nts_trans_label list)
            list option;
        }
        type nts_automaton_cfg = {
          mutable nts_cfg_name : string;
          mutable cfg_anot : Nts_functor.Make.anotations;
          nts_cfg_init_block :
            (string, Nts_functor.Make.nts_basic_block) Hashtbl.t;
          nts_cfg_final_block :
            (string, Nts_functor.Make.nts_basic_block) Hashtbl.t;
          nts_cfg_error_block :
            (string, Nts_functor.Make.nts_basic_block) Hashtbl.t;
          nts_input_vars : Nts_types.nts_genrel_var list;
          nts_output_vars : Nts_types.nts_genrel_var list;
          nts_local_vars : Nts_types.nts_genrel_var list;
          nts_blocks_transitions :
            (string, Nts_functor.Make.nts_basic_block) Hashtbl.t;
        }
        val get_last_control_state_of_bblock :
          Nts_functor.Make.nts_basic_block -> Nts_functor.Make.control
        val blocks_compression_of_nts_automaton :
          Nts_functor.Make.nts_automaton ->
          Nts_functor.Make.nts_automaton_cfg
      end
end