On Jun 20, 'Travis Scrimshaw' via sage-devel wrote:
That definitely is not a bug in CombinatorialFreeModule, so there shouldn't be
anything changed there. It is doing what it is told: that its indexing set is
in finite sets. I would say the bug is purely in the
DisjointUnionEnumeratedSets not doing a full check of its member sets.

I think so too, but I thought that the behaviour for the disjoint union was intended as this. Now looking at the code it seems that it wasn't. The checks are for a couple of reasonable cases, but some corner cases make them fail on both ways.
An infinite union of empty sets is infinite:

sage: F = Family(ZZ, lambda i: Set())
sage: C = DisjointUnionEnumeratedSets(F)
sage: C.category()
Category of facade infinite enumerated sets

In the case of finite families the following simple change seems to check correctly. But I suppose this can break something, there must've been a reason to check only the last set.
sage: C = DisjointUnionEnumeratedSets([NonNegativeIntegers(), Family([1,2,3])])
sage: C.category()
Category of facade infinite enumerated sets

$ git diff src/sage/sets/disjoint_union_enumerated_sets.py
diff --git a/src/sage/sets/disjoint_union_enumerated_sets.py 
b/src/sage/sets/disjoint_union_enumerated_sets.py
index c6d35ea8bd..f5fdba7119 100644
--- a/src/sage/sets/disjoint_union_enumerated_sets.py
+++ b/src/sage/sets/disjoint_union_enumerated_sets.py
@@ -302,7 +302,7 @@ class DisjointUnionEnumeratedSets(UniqueRepresentation, 
Parent):
             # try to guess if the result is infinite or not.
             if self._family in InfiniteEnumeratedSets():
                 category = InfiniteEnumeratedSets()
-            elif self._family.last().cardinality() == Infinity:
+            elif any(x.cardinality() == Infinity for x in self._family):
                 category = InfiniteEnumeratedSets()
             else:
                 category = FiniteEnumeratedSets()

I can't think of a reasonable way of checking against the infinite union of empty sets. Best, R.

Best,
Travis


On Saturday, June 20, 2020 at 8:43:06 PM UTC+10 hel...@potuz.net wrote:

   On Jun 20, Markus Wageringel wrote:
   >I think the problem here is that enumerating over a disjoint union of an
   >infinite set and a finite set will never reach the elements in the finite
   set.
   >There is this comment in the documentation of DisjointUnionEnumeratedSets
   >
   >
   >    Possible extensions: the current enumeration order is not suitable
   >    for unions of infinite enumerated sets (except possibly for the
   >    last one). One could add options to specify alternative enumeration
   >    orders (anti-diagonal, round robin, ...) to handle this case.
   >
   >
   >so the workaround is to first enumerate over the finite set and then the
   >infinite set, as the last enumerated set in the union will determine
   whether
   >the disjoint union is finite or not:
   >
   >sage: DisjointUnionEnumeratedSets([NonNegativeIntegers(), Family('x')]) in
   >FiniteSets()
   >True
   >sage: DisjointUnionEnumeratedSets([Family('x'), NonNegativeIntegers()]) in
   >FiniteSets()
   >False
   >
   >
   Nice! I hadn't seen that. I do think however that the check in
   CombinatorialFreeModule should be changed or at least that taking the
   disjoint union should print a warning that that this set is considered to
   be finite.

   Best,

   R.

   >--
   >You received this message because you are subscribed to the Google Groups
   >"sage-devel" group.
   >To unsubscribe from this group and stop receiving emails from it, send an
   email
   >to [1]sage-devel+...@googlegroups.com.
   >To view this discussion on the web visit [2][1]https://groups.google.com/d
   /msgid/
   >sage-devel/aeb3c3ba-c804-428d-9119-2629950be6cbo%[2]40googlegroups.com.
   >
   >References:
   >
   >[1] mailto:sage-devel+...@googlegroups.com
   >[2] [3]https://groups.google.com/d/msgid/sage-devel/
   aeb3c3ba-c804-428d-9119-2629950be6cbo%40googlegroups.com?utm_medium=email&
   utm_source=footer


--
You received this message because you are subscribed to the Google Groups
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [4]sage-devel+unsubscr...@googlegroups.com.
To view this discussion on the web visit [5]https://groups.google.com/d/msgid/
sage-devel/9460d061-39db-44b9-90e7-5d348e706bben%40googlegroups.com.

References:

[1] https://groups.google.com/d/msgid/
[2] http://40googlegroups.com/
[3] 
https://groups.google.com/d/msgid/sage-devel/aeb3c3ba-c804-428d-9119-2629950be6cbo%40googlegroups.com?utm_medium=email&utm_source=footer
[4] mailto:sage-devel+unsubscr...@googlegroups.com
[5] 
https://groups.google.com/d/msgid/sage-devel/9460d061-39db-44b9-90e7-5d348e706bben%40googlegroups.com?utm_medium=email&utm_source=footer

--
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/20200621141057.GA914605%40vertex.

Attachment: signature.asc
Description: PGP signature

Reply via email to