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) }