Does it really matter what the 'value' is? A set is surely implementable as a supertype of a hash, where the value is totally arbitrary; it only matters that the entry exists.
With:
{'A': true, 'B': false}
you seem to be suggesting `B` is 'not in the set'. What's `C`?
They're not really the same thing then. In OJFord's implementation, there's a one-to-one correspondence between states: the element is a member of the set iff it exists as a key in the hash table.
In the true/false implementation, two distinct hash table states (false or key not set) map to one set state (not a member). The program must check whether the key is set, and then check its value.
With:
you seem to be suggesting `B` is 'not in the set'. What's `C`?