def intersect(automaton1: Automaton, automaton2: Automaton) -> Automaton: automaton1 = automaton1.as_DFA() automaton2 = automaton2.as_DFA() states = get_states_cross_product(automaton1, automaton2) initial = automaton1.initial + automaton2.initial accept = set() for a1 in automaton1.accept: for a2 in automaton2.accept: accept.add(a1+a2) alphabet = automaton1.alphabet | automaton2.alphabet return Automaton(states, initial, accept, alphabet)