Hi Steven,

I think you are taking this a bit too far out of what we normal use
Python for in real life :-)

The mathematical complication of not having

∀x(x∈S ↔ x∈T) → S = T

be a consequence of

S = T → (∀x)(x∈S ↔ x∈T)

which may sound weird to many people, originates in the fact that the
above must also hold for infinite number of elements in a set, including
uncountably infinite sets and sets which have such sets as elements
(including possibly uncountably infinite recursion of such inclusions).
You enter a world full of wonders when you start considering such things.

In Python, however, we typically always operate on finite sets. In such
a world, the above is not a complication anymore. In fact, the C
implementation uses:

|S| = |T| ∧ S ⊆ T → S = T

or written using the above form:

|S| = |T| ∧ ∀x(x∈S → x∈T)→ S = T


Cheers.


On 3/24/2020 11:19 AM, Steven D'Aprano wrote:
> Apologies in advance... the following is going to contain mathematical 
> jargon and pedantry. Run now while you still can *wink*
>
>
> On Tue, Mar 24, 2020 at 12:56:55AM -0700, Andrew Barnert wrote:
>>>>> On Mar 23, 2020, at 19:52, Steven D'Aprano <st...@pearwood.info> wrote:
>>>> On Mon, Mar 23, 2020 at 06:03:06PM -0700, Andrew Barnert wrote:
>>>> The existing methods are named issubset and issuperset (and
>>>> isdisjoint, which doesn’t have an operator near-equivalent). Given
>>>> that, would you still want equals instead of isequal or something?
>>> Oops! I mean, aha, you passed my test to see if you were paying 
>>> attention, well done!
>>>
>>> *wink*
>>>
>>> I would be satisfied by "isequal", if the method were needed.
>>>
>>>
>>>> So, I’d rather have an uglier, more explicit, and more obviously
>>>> specific-to-set name like iscoextensive. Sure, not everyone will know
>>>> what “coextensive” means
>>> That's an unnecessary use of jargon
>> As far as I’m aware (and your MathWorld search bears this out), 
>> “coextensive” isn’t mathematical jargon.
> No, it's definitely mathematical jargon, but *really* specialised. As 
> far as I can tell, it's only used by people working on the foundations 
> of logic and set theory. I haven't come across it elsewhere.
>
> For example:
>
> https://books.google.com.au/books?id=wEa9DwAAQBAJ&pg=PA284&lpg=PA284&dq=math+coextensive+set+difference+with+equality&source=bl&ots=y-jmrSTxC8&sig=ACfU3U18oCjeXSfwwqML1zuVWwbSJdeZ2Q&hl=en&sa=X&ved=2ahUKEwjqzfGBhbLoAhUOzDgGHfqSAbIQ6AEwAHoECAkQAQ#v=onepage&q=math%20coextensive%20set%20difference%20with%20equality&f=false
>
> "Introduction To Discrete Mathematics Via Logic And Proof" by Calvin 
> Jongsma, on pages 283-4, it says:
>
>     First-Order Logic already has a fixed, standard notation of 
>     identity governed by rules of inference. S = T logically implies
>     (∀x)(x∈S ↔ x∈T) [...] Thus identical sets must contain exactly
>     the same elements. However we can't turn this claim around and 
>     say that sets having the same elements are identical -- 
>     *set equality for coextensive sets doesn't follow from logic alone.*
>     We'll therefore postulate this as an axiom, using the formal 
>     notation of FOL.
>
>     Axiom 5.3.1: Axiom of Extensionality
>     ∀x(x∈S ↔ x∈T) → S = T
>
>     The crierion for equal sets (see Definition 4.1.1 follows 
>     immediately:
>
>     Proposition 5.3.1: Equal Sets
>     S = T ↔ ∀x(x∈S ↔ x∈T)
>
>
> Apologies to everyone who got lost reading that :-)
>
> In the above quote, "identity" should be read as "equality". The 
> emphasised clause "set equality for coextensive sets..." is in the 
> original. The upside down A ∀ means "for all", the rounded E ∈ means 
> "element of".
>
> So translated into English, what the author is saying is that he has a 
> concept of two sets being equal, S = T. He has another concept of two 
> sets being coextensive, namely, that for each element in S, it is also 
> in T, and vice versa. He then says that if two sets are identical 
> (equal), then logically they must also be coextensive, but to go the 
> other way (coextensive implies equality) we have to make it part of the 
> definition.
>
> That's a long-winded, pedantic and precise way of saying that two sets 
> are equal if, and only if, they have precisely the same elements as each 
> other, by definition.
>
>
>> I chose it because of its ordinary (if not super-common) English 
>> meaning.
> Oh.
>
> Well, you outsmarted me, or perhaps outdumbed me *smiles* because it 
> definitely is a term from mathematics, whether you knew it or not.
>
> I thought that you were referring to the mathematical usage.
>
> As far as the non-mathematical meaning:
>
>     being of equal extent or scope or duration;
>     having the same spatial limits or boundaries;
>
> I think we would be justified as reading `A.iscoextensive(B)` in one of 
> two ways:
>
>     len(A) == len(B)
>     (min(A), max(A)) == (min(B), max(B))
>
> but not necessarily as equal.
>
> Why not equal? Consider somebody who started a project on the day of the 
> Olypics Opening Ceremony, and finished the project on the day of the 
> Closing Ceremony. We can say that the project and the Olympics were 
> coextensive, but we can't necessarily say that they were equal or the 
> same thing, or that the project was the Olympics.
>
>
> [...]
>> Sure, but in math, just as in Python, a set is never equal to a list 
>> (with a tiny foundations asterisk that isn’t relevant, but I’ll 
>> mention it below).
> Well, yes and no.
>
> In Python, just as in mathematics, a set is never a superset or subset 
> of a list either, and yet in Python we have a set method which quite 
> happily says that a set can be a superset or subset (or equal to) a 
> list:
>
>     {1, 2}.issubset([2, 1])  # Returns True
>
> We understand that, unlike the operators `<` and `<=`, the issubset 
> method is happy to (conceptually) coerce the list into a set.
>
>
>> So when mathematicians want to say a set is equal to a list… well, 
>> they just don’t say that, because it isn’t true, and usually isn’t 
>> even a meaningful question in the first place.
> Don't you think that there is a sense in which the Natural numbers ℕ {0, 
> 1, 2, 3, ...} and the sequence (0, 1, 2, 3, ...) are "the same thing"?
>
> We even talk about ℕ having successor and predecessor functions, which 
> implies a natural order to the set.
>
>
>>> The foundations of mathematics is one of those things which are 
>>> extremely over-represented on the Internet
>> Well, you’re the only one who brought up foundations here, and in the 
>> same email where you’re railing against people talking about 
>> foundations on the internet, so I’m not sure what the point is.
> Because I genuinely thought you intended to refer to the mathematical 
> jargon, I didn't imagine you just got lucky.
>
>
>> My guess is that you saw Greg, Marc-Andre, etc. talking about sets in 
>> mathematics and naturally thought “oh no, here comes irrelevant 
>> mathematical logic”,
> *blink*
>
> Um, are you confusing me with someone else? Is there something I've said 
> that leads you to the conclusion that I think that being mathematical 
> and logical is irrelevant?
>
>
>> but there isn’t any; the reason sets came up is 
>> that we’re talking about set operations on Python set objects, and 
>> it’s pretty hard to talk about what issubset means/should mean without 
>> talking about sets.
> Oh well I'm glad you set me straight.
>
>

-- 
Marc-Andre Lemburg
eGenix.com

Professional Python Services directly from the Experts (#1, Mar 22 2020)
>>> Python Projects, Coaching and Support ...    https://www.egenix.com/
>>> Python Product Development ...        https://consulting.egenix.com/
________________________________________________________________________

::: We implement business ideas - efficiently in both time and costs :::
    
   eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
    D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
           Registered at Amtsgericht Duesseldorf: HRB 46611
               https://www.egenix.com/company/contact/
                     https://www.malemburg.com/

_______________________________________________
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/YTH3JKX3NVWXUFPD6PJJZBCDWT6CTWAW/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to