tl;dr
Bloomfilters remembers inputs as status of limited number of on/off bits, it checks if an element is in the set by checking if ALL bits of that input is on, if not, it's not there.
Bloom filters are probabilistic data structures used to test whether an element is a member of a set. They are space-efficient and can quickly determine if an element is definitely not in the set, but they may occasionally report false positives.
A Bloom filter works by using multiple hash functions to map elements to a bit array. When an element is added to the filter, each hash function is applied to the element, and the corresponding bits in the array are set to 1. When an element is queried, each hash function is applied again, and the corresponding bits are checked. If all bits are set to 1, the element is likely in the set; otherwise, it is definitely not in the set.
But we see the problem here, the input goes through a hash function, it can only extract limited information about the input, then the results of different input must have collisions eventually. This means that two different elements can map to the same bit in the array or some overlaps, leading to false positives.