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-devel+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/816f808f-0c55-4d3c-946e-b3c2d6cbe56fo%40googlegroups.com.

Reply via email to