let lang_eq (l1 : lang) (l2 : lang) : bool = match l1, l2 with
| Unrestricted, Unrestricted -> true
| Unrestricted, Machine m
| Machine m, Unrestricted -> nfa_eq (new_sigmastar ()) m
| Machine m1, Machine m2 -> nfa_eq m1 m2
| _ -> raise (IllegalLangOp "lang_eq")