#include <derive.H>
Inheritance diagram for MilnorAnalyzer:
Given an unstable algebra A, we are interested in computing the intersection of all the Milnor derivations Q_i, i=0, 1, 2... . When A is finitely generated this intersection "stabilizes" and thus can be computed in finite time. In fact, what we are after is the even part of this intersection.
In principle, one could use DerivationAnalyzer to compute the kernel of d= Q_0 = Sq^1, and then work on the subalgebra of constants, this time with d= Q_1, so as to obtain ker d = ker Q_0 inter ker Q_1, and so on and so forth. Indeed, in a sense this is exactly what we do.
However, in pratice we can avoid a lot of computations with some extra tweaking. Mostly, this means the following: say A is generated by x, y, and z, and ker Sq^1 is generated by sx, sy, sz and a_1, with sx= x^2 when viewed as an element in A, etc. Then, while studying Q_1, it would be wasteful to consider the squares ssx (=x^4...) ssy and ssz. So we prefer to keep sx, sy and sz in the algebra of squares, even though they are not squares in 'constants' (and from now on the term 'square' should be thought of as meaning 'a square somewhere', or more generally 'something that will surely be in the kernel of the derivations to consider subsequently'). So we end up implementing the improvements suggested in the comments to DerivationAnalyzer, and sx is kept in the algebra of squares because Q_1(sx)=0. Bottom line is, sx, sy and sz are in squares rather than ssx, ssy and ssz, and perhaps even more importantly, we can choose I (one) and a_1 as generators for 'constants' as a squares-modules -- no need for sxsy, etc.
Secondly, we note that a_1^2 is a square in A and thus can be written as a polynomial in sx, sy and sz. Therefore, while we thought that the new algebra of squares was a priori generated by sx, sy, sz and sa_1, this second remark now tells us that sa_1 is not useful, either. This will prevent 'squares' from growing embarrassingly large (however if Q_1(a_1)=0, we will add a_1 to squares).
So in the end we have been led to:
Important: A must have a Grobner basis.
Definition at line 237 of file derive.H.
Public Member Functions | |
bool | done () |
checks whether we are done, and compute the final answer | |
virtual multiPolynomial< F_2 > | coords_of (PowProd P) |
virtual multiPolynomial< F_2 > | coords_of (const Polynomial< F_2 > &P) |
given a member of source, this computes its coordinates when source is viewed as a squares-module | |
void | start (UnstableAlgebra *A) |
computes the kernel of Milnor derivations until their intersection is Steenrod stable | |
void | setup_for_Sq1 () |
gets ready for the 1st computation | |
void | re_setup (long k) |
gets ready for the next computation | |
Public Attributes | |
UnstableAlgebra * | A |
the unstable algebra to analyze | |
GradedAlgebra< F_2 > | ans |
the answer | |
AffineHomomorphism< F_2 > | inclusion |
the inclusion of the constants into *A | |
AffineHomomorphism< F_2 > | ans_inclusion |
inclusion of the answer into *A | |
AbstractHomomorphism< F_2 > | newvar_squared |
expressing the squares of new variables in terms of standard squares | |
long | n_cs_vars |
an index to keep track of variables in the kernel of d | |
GradedAlgebra< F_2 > | alg |
a place to store 'constants' as the new *source |
|
given a member of source, this computes its coordinates when source is viewed as a squares-module
Reimplemented from DerivationAnalyzer. Definition at line 615 of file derive.cpp. References DerivationAnalyzer::coords_of(). Referenced by re_setup(), and setup_for_Sq1(). |
|
checks whether we are done, and compute the final answer This contructs the even part of 'constants', and checks whether its image in *A is Steenrod stable. If so, we are done. Definition at line 620 of file derive.cpp. References A, ans_inclusion, GradedAlgebra< K >::even_subalgebra(), UnstableAlgebra::has_closure_of(), inclusion, and AffineHomomorphism< K >::populate_associated_algebra(). Referenced by start(). |
|
|
|
computes the kernel of Milnor derivations until their intersection is Steenrod stable
Definition at line 276 of file derive.cpp. References A, DerivationAnalyzer::constant_subalgebra(), done(), inclusion, AffineHomomorphism< K >::populate_associated_algebra(), re_setup(), and setup_for_Sq1(). |
|
the unstable algebra to analyze
Definition at line 240 of file derive.H. Referenced by done(), re_setup(), setup_for_Sq1(), and start(). |
|
a place to store 'constants' as the new *source
Definition at line 292 of file derive.H. Referenced by re_setup(), and setup_for_Sq1(). |
|
the answer
|
|
inclusion of the answer into *A When the algorithm terminates, 'constants' is the intersection of the kernels of some Milnor derivations, and 'ans' is the even part of that (which is comprised of elements belonging to ALL the kernels). This is the inclusion of the even part into *A. Definition at line 261 of file derive.H. Referenced by done(). |
|
the inclusion of the constants into *A While cs_inlusion is the inclusion of 'constants' into *source (the temporary algebra under analysis), this homomorphism is the inclusion of 'constants' all the way up to *A. Definition at line 250 of file derive.H. Referenced by done(), re_setup(), setup_for_Sq1(), and start(). |
|
an index to keep track of variables in the kernel of d n_cs_vars stands for "number of constants variables". Here constant means "constant a priori" -- which in most of the comments we have called a "square" (sorry for the slight inconsistency). Most of the time, n_cs_vars is equal to squares.variables_in_use(), but not quite always. If you look at the code you will see its use, otherwise you never have to worry about this. Definition at line 290 of file derive.H. Referenced by re_setup(), and setup_for_Sq1(). |
|
expressing the squares of new variables in terms of standard squares After at least a first run, constants is obtained from squares by adding some variables, say a_1 ... a_n. Then a_i^2 is in squares. This AbstractHomomorphism will hold an expression for a_i^2 given by newvar_squared.of_generator( i + (nb of variables in squares)). Definition at line 279 of file derive.H. Referenced by re_setup(), and setup_for_Sq1(). |