def _findRedundantProteins(protToPeps, pepToProts, proteins=None):
    if proteins is None:
        proteins = viewkeys(protToPeps)
    pepFrequency = _getValueCounts(pepToProts)
    protPepCounts = _getValueCounts(protToPeps)
    getCount = operator.itemgetter(1)
    getProt = operator.itemgetter(0)
    proteinTuples = list()
    for protein in proteins:
        if isinstance(protein, tuple):
            proteinTuples.append(protein)
        else:
            proteinTuples.append(tuple([protein]))
    sort = list()
    for protein in sorted(proteinTuples, reverse=True):
        if len(protein) == 1:
            protein = protein[0]
        protPepFreq = [pepFrequency[pep] for pep in protToPeps[protein]]
        if min(protPepFreq) > 1:
            sortValue = (len(protPepFreq)*-1, sorted(protPepFreq, reverse=True))
            sort.append((protein, sortValue))
    sortedProteins = map(getProt, sorted(sort, key=getCount, reverse=True))
    redundantProteins = set()
    for protein in sortedProteins:
        for pep in protToPeps[protein]:
            if pepFrequency[pep] <= 1:
                break
        else:
            protPepFrequency = Counter(protToPeps[protein])
            pepFrequency.subtract(protPepFrequency)
            redundantProteins.add(protein)
    return redundantProteins