sig
  module P :
    sig
      type t = string
      type anot_type = unit
      val anot_parser : unit -> unit
      val pprint_keyid : '-> 'a
      val key_val_of_string : '-> 'a
      val compare_keyid : String.t -> String.t -> int
      val pprint_anot : '-> string
    end
  module Nts_int :
    sig
      type anotations = Nts_functor.Make(P).anotations
      type control = Nts_functor.Make(P).control = Nts_State of Ntsint.P.t
      type transitions_container = Nts_functor.Make(P).transitions_container
      type states_container = Nts_functor.Make(P).states_container
      type inv_relation_container =
          Nts_functor.Make(P).inv_relation_container
      val fold_states_containers :
        Ntsint.Nts_int.states_container ->
        ('-> Ntsint.Nts_int.control -> 'a) -> '-> 'a
      val fold_transitions_container :
        Ntsint.Nts_int.transitions_container ->
        ('->
         Ntsint.Nts_int.control ->
         Nts_types.nts_trans_label list -> Ntsint.Nts_int.control -> 'a) ->
        '-> 'a
      val add_transition_to_container :
        Ntsint.Nts_int.transitions_container ->
        Ntsint.Nts_int.control ->
        Nts_types.nts_trans_label list -> Ntsint.Nts_int.control -> unit
      val iter_transitions_container :
        Ntsint.Nts_int.transitions_container ->
        (Ntsint.Nts_int.control ->
         Nts_types.nts_trans_label list -> Ntsint.Nts_int.control -> unit) ->
        unit
      val iter_state_container :
        Ntsint.Nts_int.states_container ->
        (Ntsint.Nts_int.control -> unit) -> unit
      val is_state_in_inv_relation :
        Ntsint.Nts_int.inv_relation_container ->
        Ntsint.Nts_int.control -> bool
      type nts_automaton =
        Nts_functor.Make(P).nts_automaton = {
        mutable nts_automata_name : string;
        mutable anot : Ntsint.Nts_int.anotations;
        init_states : Ntsint.Nts_int.states_container;
        final_states : Ntsint.Nts_int.states_container;
        error_states : Ntsint.Nts_int.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 : Ntsint.Nts_int.transitions_container;
      }
      type nts_system =
        Nts_functor.Make(P).nts_system = {
        nts_system_name : string;
        nts_global_vars : Nts_types.nts_genrel_var list;
        nts_automata : (string, Ntsint.Nts_int.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 =
        Nts_functor.Make(P).num_subrel_in_cautomaton = {
        subrel_root : Ntsint.Nts_int.control;
        sub_vertices : Ntsint.Nts_int.states_container;
        sub_transitions : Ntsint.Nts_int.transitions_container;
      }
      val pprint_control : Ntsint.Nts_int.control -> string
      val anot_parser : unit -> Ntsint.Nts_int.anotations
      val states_container_of_states_list :
        Ntsint.Nts_int.control list -> Ntsint.Nts_int.states_container
      val transitions_container_of_trans_list :
        (Ntsint.Nts_int.control * Ntsint.Nts_int.control *
         Nts_types.nts_trans_label list)
        list -> Ntsint.Nts_int.transitions_container
      val control_of_id_param : Ntsint.P.t -> Ntsint.Nts_int.control
      val out_degree_of_control_state :
        Ntsint.Nts_int.control -> Ntsint.Nts_int.nts_automaton -> int
      val get_varinfo_by_optname :
        Ntsint.Nts_int.nts_system ->
        string option -> string -> Nts_types.nts_genrel_var option
      val get_varinfo_by_optcautomaton :
        Ntsint.Nts_int.nts_system ->
        Ntsint.Nts_int.nts_automaton option ->
        string -> Nts_types.nts_genrel_var option
      val get_transition_from :
        Ntsint.Nts_int.nts_automaton ->
        Ntsint.Nts_int.control ->
        Ntsint.Nts_int.control -> Nts_types.nts_trans_label list list option
      val get_successor_of :
        Ntsint.Nts_int.nts_automaton ->
        Ntsint.Nts_int.control -> Ntsint.Nts_int.states_container
      val get_one_state :
        Ntsint.Nts_int.states_container -> Ntsint.Nts_int.control option
      val is_successor_of :
        Ntsint.Nts_int.nts_automaton ->
        Ntsint.Nts_int.control -> Ntsint.Nts_int.control -> bool
      val get_one_transition :
        Ntsint.Nts_int.nts_automaton ->
        Ntsint.Nts_int.control ->
        Ntsint.Nts_int.control * Nts_types.nts_trans_label list
      val pprint_inputvars : Ntsint.Nts_int.nts_automaton -> string
      val pprint_outputvars : Ntsint.Nts_int.nts_automaton -> string
      val pprint_localvars : Ntsint.Nts_int.nts_automaton -> string
      val nt_system_var_cleaner :
        Ntsint.Nts_int.nts_system -> Ntsint.Nts_int.nts_system
      val nt_system_uncalled_subsystem_cleaner :
        Ntsint.Nts_int.nts_system -> Ntsint.Nts_int.nts_system
      val pprint_to_nts : Ntsint.Nts_int.nts_automaton -> string
      val pprint_nts : Ntsint.Nts_int.nts_system -> string
      val get_cautomaton_by_name :
        Ntsint.Nts_int.nts_system -> string -> Ntsint.Nts_int.nts_automaton
      val pprint_transitions :
        string -> Ntsint.Nts_int.nts_automaton -> string
      val compute_pred_relation :
        Ntsint.Nts_int.nts_automaton -> Ntsint.Nts_int.inv_relation_container
      val subgraph_between :
        Ntsint.Nts_int.nts_automaton ->
        Ntsint.Nts_int.control ->
        Ntsint.Nts_int.control -> Ntsint.Nts_int.num_subrel_in_cautomaton
      val pprint_subgraph_transitions :
        Ntsint.Nts_int.num_subrel_in_cautomaton -> string
      val cautomaton_of_subrelation_cautomaton :
        string ->
        Ntsint.Nts_int.nts_automaton ->
        Ntsint.Nts_int.num_subrel_in_cautomaton ->
        Ntsint.Nts_int.nts_automaton
    end
end