class ci(str):

    def __hash__(self):
        return hash(self.lower())

def __eq__(self, other):
    return self.lower() == other.lower()


class cifrozenset(frozenset):

    def __new__(cls, seq=()):
        return frozenset(ci(x) for x in seq)
a = cifrozenset(('Today', 'I', 'am', 'fine'))
b = cifrozenset(('hello', 'how', 'are', 'you', 'today'))
print(a.intersection(b))
Case-insensitive comparison of sets in Python