def _is_statement_in_list(new_stmt, old_stmt_list):
    for old_stmt in old_stmt_list:
        if old_stmt.equals(new_stmt):
            return True
        elif old_stmt.evidence_equals(new_stmt) and old_stmt.matches(new_stmt):
            if isinstance(new_stmt, Complex):
                agent_pairs = zip(old_stmt.sorted_members(),
                                  new_stmt.sorted_members())
            else:
                agent_pairs = zip(old_stmt.agent_list(), new_stmt.agent_list())
            for ag_old, ag_new in agent_pairs:
                s_old = set(ag_old.db_refs.items())
                s_new = set(ag_new.db_refs.items())
                if s_old == s_new:
                    continue
                if s_old > s_new:
                    return True
                if s_new > s_old:
                    ag_old.db_refs.update(ag_new.db_refs)
                    return True
                if _fix_different_refs(ag_old, ag_new, 'CHEBI'):
                    return _is_statement_in_list(new_stmt, old_stmt_list)
                if _fix_different_refs(ag_old, ag_new, 'UMLS'):
                    return _is_statement_in_list(new_stmt, old_stmt_list)
                logger.warning("Found an unexpected kind of duplicate. "
                               "Ignoring it.")
                return True
            return True
        elif old_stmt.get_hash(True, True) == new_stmt.get_hash(True, True):
            e_old = old_stmt.evidence[0]
            e_new = new_stmt.evidence[0]
            if e_old.annotations['last_verb'] is None:
                e_old.annotations['last_verb'] = e_new.annotations['last_verb']
            if e_old.get_source_hash(True) == e_new.get_source_hash(True):
                return True
    return False