Dear Sage developers, This e-mail is to request some feedback for:
#17160: Finitely generated axiom for (mutiplicative) magmas, semigroups, monoids, groups Context ------- Currently in Sage, any finite semigroup (set with a multiplication) is automatically assumed to be a finite enumerated set. The enumeration can be provided explicitly by implementing __iter__. Otherwise, a default implementation is provided that assumes that a distinguished set of generators is provided via semigroup_generators. This was ok so far, but is too restrictive. In particular, with #8678, Sage often learns indirectly that a given semigroup is actually finite, and suddenly asks for __iter__ or semigroup_generators to exist. This is inconvenient, if not just plain impossible to implement in some extreme cases. So #17160 is about refining the categories to distinguish the cases ``finite'' and ``finite with generators''. Of course something similar will need to be done at some point for the other notions of generation (for additive structures, for additive and multiplicative structures,...). There has been some discussion on the ticket, which I try to synthesize here. Difficulty ---------- There are actually several concepts that we may want to model for a semigroup M: (1) The fact that M is finitely generated: we just know that there exists a finite set of generators for the semigroup. In particular a finite semigroup is automatically finitely generated. (2) The fact that M is endowed with a distinguished enumerated set of generators, provided by a method semigroup_generators. This makes M into an enumerated set. (3) The fact that M is endowed with a distinguished finite enumerated set of generators. This makes M into an enumerated set, but also allows for defining the Cayley graph, ... Note that (3) is a subcase of both (1) and (2); however (1) and (2) together do not imply (3); the distinguished set of generators might not be one of the finite ones. Question 1 ---------- At this point, implementing all three concepts seems like overkill. I don't see a practical use case for (1). I'd say (3) is much more useful than (2), and tend to only implement it for now. What do you think? Question 2 ---------- (3) is naturally implemented as an axiom to handle that the fact that a multiplicative structure (M,*) satisfies (3) does not depend on whether we see `M` as a magma, a semigroup, a monoid, or a group. There remains to choose a good name for this axiom. At this point, there are two reasonable candidates; other suggestions are welcome: (a) ``with finite set of generators''; variant: ``with finite generating set`` (b) ``finitely generated'' (a) is very explicit; however it's longish and does not read as nicely, in part because (b) is so much more common in everyday math discussions: sage: Semigroups().WithFiniteSetOfGenerators() Category of semigroups with finite set of generators sage: Semigroups().FinitelyGenerated() Category of finitely generated semigroups On the other hand, with (b), there is a shift between the math concept and its model in the computer. The latter insists on being constructive: a finite set of generators must be provided. This may lead to some of confusion (why isn't a finite semigroup automatically finitely generated?). This is not unheard of though. For many other categories there is a similar distinction between the pure math concept and the more constructive concept modeled by the category. An object in Semigroups is not just a set with some product; the product has to be distinguished and implemented as '__mult__'. Similarly, for an Euclidean domain, the division method needs to be implemented. What do you think? I personally lean toward (b). Cheers, Nicolas -- Nicolas M. ThiƩry "Isil" <nthi...@users.sf.net> http://Nicolas.Thiery.name/ -- 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 post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel. For more options, visit https://groups.google.com/d/optout.