On Mon, Aug 10, 2020 at 2:20 PM Stephen J. Turnbull < turnbull.stephen...@u.tsukuba.ac.jp> wrote:
> haael writes: > > > Could we add the idea of "negative" sets to Python? That means > > sets that contain EVERYTHING EXCEPT certain elements. > > This is usually called the "complement" of a set. Since (in set > theory) there is no set of all sets, "absolute" complement is an > unfounded concept. The idea of having a universe and defining > "absolute complement" as complement relative to the universe is often > adopted, but it has set-theoretic problems (the universe doesn't have > a powerset, for one thing), and frequently you end up with a hierarchy > of universes (categorists who try build category theory on set theory > run into that a lot). > Yes, we can implement things in Python that aren't allowed in formal mathematics and some fun questions arise. What should `set.UNIVERSAL in set.UNIVERSAL` return? Bertrand Russell thinks it's False. > Considering those points, this proposal seems very abstract. I think > it's fun to think about, and maybe it has practical applications in > constructing other sets. But a "set" that isn't iterable, and whose > "in" is logically equivalent to "not in" its complement (which is a > Python set!), doesn't seem directly useful in itself. > I think it'd be best if such a class was not a subclass of the Set ABC, since it's not iterable. You can use it like a set in certain situations where you know what you're doing, but avoid passing it to generic code that expects a real set. > I think this is one where you need to present both use cases and an > implementation. Speaking of implementations and fun: > > > First, let's have a universal set that contains everything. > > > > assert element in set.UNIVERSAL > > For what values of "everything"? Python sets cannot contain all the > objects of Python. Specifically, an element of a set must be > hashable. Will that be true for your universal set? > The builtin set requires hashability, but you could certainly implement a subclass of the Set ABC that satisfies all contracts and accepts non-hashable elements. It would just be much less performant. > > However REMOVING an element from the set puts it on "negative list". > > > > myset = set.UNIVERSAL > > Shouldn't this be "myset = copy(set.UNIVERSAL)"? > > You'd like it to be "myset = set(set.UNIVERSAL)", I guess, and that > indeed would require adding set.UNIVERSAL to Python. > I think the better API would be `myset = UniversalSet()`. Anyway, in the end, I think we all agree that this is fun to think about but too obscure for the Python language itself. Maybe you could put it on PyPI.
_______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/6CO363WFF6YOOI7L5OB7NTC2HGB2Y6KE/ Code of Conduct: http://python.org/psf/codeofconduct/