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