Checks for bad DFA transitions using the examined string
        Args:
            mma (DFA): The hypothesis automaton
            w_string (str): The examined string to be consumed
        Returns:
            str: The prefix of the examined string that matches

def _find_bad_transition(self, mma, w_string):
        """
        Checks for bad DFA transitions using the examined string
        Args:
            mma (DFA): The hypothesis automaton
            w_string (str): The examined string to be consumed
        Returns:
            str: The prefix of the examined string that matches
        """
        conj_out = mma.consume_input(w_string)
        targ_out = self._membership_query(w_string)
        # TODO: handle different length outputs from conjecture and target
        # hypothesis.
        length = min(len(conj_out), len(targ_out))
        diff = [i for i in range(length)
                if conj_out[i] != targ_out[i]]
        if len(diff) == 0:
            diff_index = len(targ_out)
        else:
            diff_index = diff[0]

        low = 0
        high = len(w_string)
        while True:
            i = (low + high) / 2
            length = len(self._membership_query(w_string[:i]))
            if length == diff_index + 1:
                return w_string[:i]
            elif length < diff_index + 1:
                low = i + 1
            else:
                high = i - 1