sig
  type state
  type letter
  module StateSet : Set.S
  module Alphabet : Set.S
  module StateToTransitionMap : Map.S
  module TransitionMap : Map.S
  type dfa = {
    mutable dfa_states : StateSet.t;
    mutable dfa_alphabet : Alphabet.t;
    mutable dfa_start_state : StateSet.elt option;
    mutable dfa_final_states : StateSet.t;
    mutable dfa_transitions :
      StateSet.elt TransitionMap.t StateToTransitionMap.t;
  }
  val dfa_empty : Dfa.DFA.dfa
  val fresh_dfa_empty : unit -> Dfa.DFA.dfa
  val get_dfa_alphabet : Dfa.DFA.dfa -> Alphabet.t
  val add_letter : Dfa.DFA.dfa -> Alphabet.elt -> unit
  val add_all_letters : Dfa.DFA.dfa -> Alphabet.t -> unit
  val get_dfa_states : Dfa.DFA.dfa -> StateSet.t
  val get_dfa_start_state : Dfa.DFA.dfa -> StateSet.elt
  val get_dfa_final_states : Dfa.DFA.dfa -> StateSet.t
  val add_state : Dfa.DFA.dfa -> StateSet.elt -> unit
  val set_start_state : Dfa.DFA.dfa -> StateSet.elt -> unit
  val set_final_states : Dfa.DFA.dfa -> StateSet.t -> unit
  val add_final_state : Dfa.DFA.dfa -> StateSet.elt -> unit
  val get_dfa_transitions :
    Dfa.DFA.dfa -> StateSet.elt TransitionMap.t StateToTransitionMap.t
  val get_TransitionMap :
    Dfa.DFA.dfa -> StateToTransitionMap.key -> StateSet.elt TransitionMap.t
  val get_destStateSet :
    StateSet.elt TransitionMap.t -> TransitionMap.key -> StateSet.t
  val get_destStateSet_s :
    Dfa.DFA.dfa ->
    StateToTransitionMap.key -> TransitionMap.key -> StateSet.t
  val add_transitions_aux :
    Dfa.DFA.dfa ->
    StateToTransitionMap.key -> Alphabet.elt * StateSet.elt -> unit
  val add_transitions :
    Dfa.DFA.dfa -> StateSet.elt -> (Alphabet.elt * StateSet.elt) list -> unit
  val print_automata :
    Dfa.DFA.dfa -> (Alphabet.elt -> unit) -> (StateSet.elt -> unit) -> unit
end