docs: def _intesect(self):
          """The intesection of a PDA and a DFA"""
          p1automaton = self.mma
          p2automaton = self.mmb
          p3automaton = PDA(self.alphabet)
          self._break_terms()
          p1counter = 0
          p3counter = 0
          p2states = list(p2automaton.states)
          print 'PDA States: ' + repr(p1automaton.n)
          print 'DFA States: ' + repr(len(list(p2states)))
          ignorechars = p1automaton.nonterminals+ [0] + ['@closing']
          del(ignorechars[ignorechars.index('S')])
          while p1counter < p1automaton.n + 1:
              p1state = p1automaton.s[p1counter]
              p2counter = 0
              while p2counter < len(list(p2states)):
                  p2state = p2states[p2counter]
                  tempstate = PDAState()
                  tempstate.id = (p1state.id, p2state.stateid)
                  tempstate.sym = p1state.sym
                  tempstate.type = p1state.type
                  tempstate.trans = {}
                  found = 0
                  for char in self.alphabet:
                      if char in ignorechars:
                          continue
                      # DFA has single destination from a state
                      p2dest = self._delta(p2automaton, p2state, char)
                      # PDA may have multiple destinations from a state
                      # print p1state.trans
                      if p2dest is not None:
                          for potential in p1state.trans:
                              if char in p1state.trans[potential]:
                                  found = 1
                                  p1dest = potential
                                  if (p1dest,
                                          p2dest.stateid) not in tempstate.trans:
                                      tempstate.trans[
                                          (p1dest, p2dest.stateid)] = []
                                      # print 'Appending A Transition to
                                      # ('+`p1dest`+','+`p2dest.stateid`+') for
                                      # input '+`char`
                                  tempstate.trans[
                                      (p1dest, p2dest.stateid)].append(char)
  
                                  # THEN THE NONTERMINALS + 0 3 transitions
                                  # print p1state.trans
                                  #               print p1automaton.nonterminals
                  if found == 0 and  p1state.type == 3 and len(p1state.trans) >0:
                      assert 1==1,'Check Failed: A READ state with transitions' \
                                  ' did not participate in the cross product'
                  if p2dest is not None:
                      for nonterm in p1automaton.nonterminals + \
                              [0] + ['@closing']:
                          for potential in p1state.trans:
                              if nonterm in p1state.trans[potential]:
                                  p1dest = potential
                                  if (p1dest,
                                          p2state.stateid) not in tempstate.trans:
                                      tempstate.trans[
                                          (p1dest, p2state.stateid)] = []
                                  # print 'Appending B Transition to
                                  # ('+`p1dest`+','+`p2state.stateid`+') for
                                  # input '+`nonterm`
                                  tempstate.trans[
                                      (p1dest, p2state.stateid)].append(nonterm)
                  p3automaton.s[p3counter] = tempstate
                  p3counter = p3counter + 1
                  p2counter = p2counter + 1
              p1counter = p1counter + 1
          # print 'Total States Appended '+`len(p3automaton.input_string)`
          p3automaton.n = p3counter - 1
  
          p3automaton.accepted = []
          for state in p2automaton.states:
              if state.final != TropicalWeight(float('inf')):
                  p3automaton.accepted.append(state.stateid)
          return p3automaton