On Saturday, July 18, 2020 at 2:57:21 PM UTC-7, Christian Nassau wrote: > > Hi Sverre, > > I don't think it's a good idea to have different zeroes in an algebraic > structure that is also categorized as an abelian group, unless you take the > point that a "graded abelian group" should not be an "abelian group". > > But let me also point out that something similar to what you want already > exists: you can take a homogeneous component of the Steenrod algebra and > look at its zero: > > sage: A=SteenrodAlgebra(2) > sage: A[18] > Vector space spanned by (Sq(0,1,0,1), Sq(3,0,0,1), Sq(1,1,2), Sq(4,0,2), > Sq(2,3,1), Sq(5,2,1), Sq(8,1,1), Sq(11,0,1), Sq(0,6), Sq(3,5), Sq(6,4), > Sq(9,3), Sq(12,2), Sq(15,1), Sq(18)) over Finite Field of size 2 > sage: A[18].zero() == A.zero() > True > sage: A[18].zero() == A[17].zero() > False > > This suggests that "A[18].zero().degree()" could give 18, and the fact > that it currently gives a ValueError might be considered a bug. >
It could equally well give zero. Should A[18] remember that it's in degree 18, or should is just be an ungraded module? > Best, > Christian > > > On 18.07.20 23:35, Sverre Lunøe-Nielsen wrote: > > Hi, > > Thank you for your comments so far. I feel I need to expand some more on > the issue of zero elements which is the central thing for the problem we > are adressing. > > It is mathematically equivalent to think of a graded k-algebra A as either > > 1) a direct sum A = \bigosum_i A_i, together with a graded k-linear map > from > the graded tensor product A\tensor_k A --> A, > > or > > 2) a sequence of k-vectorspaces {A_i}_i, together with a set of structure > maps > \{ A_i \tensor_R A_j --> A_{i+j} \}_{i,j}. > > (In both cases the structure maps should satisfy usual algebraic > conditions.) > > Similar for graded A-modules. > > The implementation of the SteenrodAlgebra package takes the approach of > 1), and never speaks about the zero element z_i \in A_i for any i. Rather, > they are all identified in A via the canonical injection A_i --> A. It is > tradition not to worry too much about this since you can "figure it out" if > you have to, and know how you ended up with a zero. > > However, it is arguably better, specially when writing software, to avoid > this simplifaction since it leads to a corner case which has to be dealt > with over and over again. A great share of the bugs I have corrected in > the package I have been editing have been caused by the wrongful assumption > that all elements have an integer degree. Having not to worry about this > would make our code cleaner, and so will all future code building on it. > > I was being rather vague about making proposals for change in the > SteenrodAlgebra package in my last post, so to be clear let me propose a > specific change and invite anyone to share their opinion on it: > > Change SteenrodAlgebra such that _all_ homogeneous elements have a well > defined degree. For the user, this means in particular that when > constructing the zero element, its degree must be given: > > sage: A = SteenrodAlgebra(p=2) > sage: z = A.zero(degree=2) > sage: Sq(1)*Sq(1) == z > True > sage: Sq(2)*Sq(1)*Sq(1) == z > False > > This involves adding the degree as internal data to zero elements, and > change the behaviour of degree() such that it raises an exception only for > inhomogeneous elements. > > I hope I have clearified that I am not seeking a strange new definition of > graded module or algebra, and that I am merely wanting to discuss the > possibility of changing the implementation of SteenrodAlgebra. > > E.g. are there perhaps unwanted software ramifications that our proposal > would bring about? > > Regards, > > Sverre > > > > > > On Saturday, July 18, 2020 at 11:31:43 PM UTC+2, John H Palmieri wrote: >> >> >> >> On Saturday, July 18, 2020 at 2:31:01 AM UTC-7, Sverre Lunøe-Nielsen >> wrote: >>> >>> Dear list, >>> >>> I have been involved in preparing a package by M. Catanzaro and R. >>> Bruner lately, which implements finitely presented modules over the mod `p` >>> Steenrod algebra. >>> >>> We have encountered a conflict regarding how to present graded objects, >>> and I am writing to the list to get other people's opinion on how to >>> proceed on this matter. >>> >>> Briefly, the issue is that the Steenrod algebra allows inhomogeneous >>> elements and our graded modules do not. Thus, the Steenrod algebra has a >>> single zero element with no well defined degree, while our modules could >>> potentially have one zero element for each degree. >>> >>> My wish is to allow degreewise zero elements in our graded modules, so >>> that x.degree() would return an integer for every element x. But because >>> the unique zero in the Steenrod algebra has no well defined degree, I am >>> forced to let degree() treat all zero elements in our modules the same way >>> and return ``None``. >>> >>> A more precise description of the issue is found in the Sphinx note >>> below. >>> >>> My questions to the list are: Has similar issues been discussed and/or >>> resolved before? And more specificly: What acceptable changes could be >>> made to the Steenrod algebra package to achieve what I want? >>> >>> Regards, >>> >>> Sverre Lunøe-Nielsen >>> >>> >>> .. NOTE:: >>> Our implementation treats a graded module as the disjoint union, rather >>> than a >>> direct sum, of vectorspaces of homogeneous elements. Elements are >>> therefore >>> always homogeneous, which also implies that sums between elements of >>> different >>> degrees are not allowed. This also means that acting by an inhomogeneous >>> element of the Steenrod algebra makes no sense. >>> >>> In this setting there is no single zero element, but rather a zero for >>> every >>> degree. It follows that, in theory, all elements, including the zero >>> elements, >>> have a well defined degree. >>> >>> This way of representing a graded object differs from the way the graded >>> Steenrod algebra is represented by :class:`sage.algebras.steenrod` where >>> inhomogeneous >>> elements are allowed and there is only a single zero element. >>> Consequently, >>> this zero element has no well defined degree. >>> >>> Thus, because of the module action, we are forced to follow the same >>> convention >>> when it comes to the degree of zero elements in a module: The method >>> >>> :meth:`sage.modules.finitely_presented_over_the_steenrod_algebra.module.fp_element.FP_Element.degree' >>> returns the value ``None`` for zero elements. >>> >>> An example which highlights this problem is the following:: >>> >>> sage: F = FPA_Module([0], SteenrodAlgebra(p=2)) # The free module >>> on a single generator in degree 0. >>> sage: g = F.generator(0) >>> sage: x1 = Sq(1)*g >>> sage: x2 = Sq(1)*x1 >>> >>> Clearly, the code implementing the module action has all the information >>> it needs >>> to conclude that the element ``x2`` is the zero element in the second >>> degree. >>> However, because of the module action, we cannot distinguish it from the >>> element:: >>> >>> sage: x2_ = (Sq(1) * Sq(1))*g >>> >>> The latter is equal to the action of the zero element of the Steenrod >>> algebra on `g`, but since the zero element has no degree in the Steenrod >>> algebra, >>> the module class cannot deduce what degree the zero element `x2_` should >>> belong >>> to. >>> >> >> In my experience, algebraic topologists often think of graded objects as >> disjoint unions, and you can often get away with this, but really they're >> not — they're direct sums. I think you should use Sage's categories >> framework, graded modules with basis or whatever, to set these up. In any >> case where the degree matters, you should first test whether an element is >> zero (in which case it won't have a degree) and then perhaps whether it is >> homogeneous. If not, you can raise an error (to keep someone from >> multiplying a module element by Sq(1) + Sq(2), for example). If it is >> homogeneous, you can proceed the way you want. >> >> -- >> John >> >> -- > 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-...@googlegroups.com <javascript:>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sage-devel/816f808f-0c55-4d3c-946e-b3c2d6cbe56fo%40googlegroups.com > > <https://groups.google.com/d/msgid/sage-devel/816f808f-0c55-4d3c-946e-b3c2d6cbe56fo%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/02fe5764-4050-48ef-8b8d-3bb89a27914ao%40googlegroups.com.