let copy_nfa (nfa : nfa) : nfa = 
  let id x = x in
  let delta   = Hashtbl.create (Hashtbl.length nfa.delta) in
  let epsilon = Hashtbl.create (Hashtbl.length nfa.epsilon) in
  let _ = copy_table nfa.delta delta id in
  let _ = copy_table nfa.epsilon epsilon id in 
    { nfa with delta = delta;
        epsilon = epsilon;
        q = (Hashtbl.copy nfa.q) }