Main Page | Class Hierarchy | Class List | File List | Class Members | File Members | Related Pages

MilnorAnalyzer Class Reference

#include <derive.H>

Inheritance diagram for MilnorAnalyzer:

DerivationAnalyzer List of all members.

Detailed Description

a class to compute the kernel of all Milnor derivations

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

UnstableAlgebraA
 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


Member Function Documentation

multiPolynomial< F_2 > MilnorAnalyzer::coords_of const Polynomial< F_2 > &  P  )  [virtual]
 

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().

bool MilnorAnalyzer::done  ) 
 

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().

void MilnorAnalyzer::re_setup long  k  ) 
 

gets ready for the next computation

Swaps constants and *source, populates newvar_squared, computes the induced derivation on *source.

Definition at line 444 of file derive.cpp.

References A, alg, Polynomial< K >::alphabet, AbstractHomomorphism< K >::clear(), coords_of(), AffineHomomorphism< K >::fix_alphabets(), AffineAlgebra< K >::fix_alphabets(), AffineAlgebra< K >::get_variables(), GradedAlgebra< K >::hom_degrees, inclusion, Polynomial< K >::is_zero(), AffineHomomorphism< K >::maps_onto(), n_cs_vars, SimpleAlphabet::nameof(), GradedAlgebra< K >::new_variable(), newvar_squared, AbstractHomomorphism< K >::of(), AbstractHomomorphism< K >::of_generator(), AffineAlgebra< K >::one(), AffineHomomorphism< K >::populate_associated_algebra(), UnstableAlgebra::Q(), AffineAlgebra< K >::reduced_form(), Tuple< T >::resize(), AbstractHomomorphism< K >::set_image(), Tuple< T >::size(), AffineHomomorphism< K >::source, AbstractHomomorphism< K >::swap(), GradedAlgebra< K >::swap_variables_order(), AffineHomomorphism< K >::target, SimpleAlphabet::variables_in_use(), and DerivationAnalyzer::write_gens().

Referenced by start().

void MilnorAnalyzer::setup_for_Sq1  ) 
 

gets ready for the 1st computation

Replaces setup().

Definition at line 327 of file derive.cpp.

References A, alg, AbstractHomomorphism< K >::clear(), coords_of(), AffineAlgebra< K >::fix_alphabets(), AffineAlgebra< K >::get_variables(), GradedAlgebra< K >::hom_degrees, inclusion, Polynomial< K >::is_zero(), AffineHomomorphism< K >::maps_onto(), n_cs_vars, SimpleAlphabet::nameof(), GradedAlgebra< K >::new_variable(), newvar_squared, AbstractHomomorphism< K >::of(), AffineAlgebra< K >::one(), AffineHomomorphism< K >::populate_associated_algebra(), AffineAlgebra< K >::reduced_form(), AffineAlgebra< K >::relations, Tuple< T >::resize(), AbstractHomomorphism< K >::set_image(), Tuple< T >::size(), AffineHomomorphism< K >::source, UnstableAlgebra::Sq(), AbstractHomomorphism< K >::swap(), GradedAlgebra< K >::swap_variables_order(), AffineHomomorphism< K >::target, SimpleAlphabet::variables_in_use(), and DerivationAnalyzer::write_gens().

Referenced by start().

void MilnorAnalyzer::start UnstableAlgebra A  ) 
 

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().


Member Data Documentation

UnstableAlgebra* MilnorAnalyzer::A
 

the unstable algebra to analyze

Definition at line 240 of file derive.H.

Referenced by done(), re_setup(), setup_for_Sq1(), and start().

GradedAlgebra<F_2> MilnorAnalyzer::alg
 

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().

GradedAlgebra<F_2> MilnorAnalyzer::ans
 

the answer

Definition at line 242 of file derive.H.

AffineHomomorphism<F_2> MilnorAnalyzer::ans_inclusion
 

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().

AffineHomomorphism<F_2> MilnorAnalyzer::inclusion
 

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().

long MilnorAnalyzer::n_cs_vars
 

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().

AbstractHomomorphism<F_2> MilnorAnalyzer::newvar_squared
 

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().


The documentation for this class was generated from the following files:
Generated on Wed Jun 18 17:22:45 2008 for Pierre Guillot by  doxygen 1.3.9.1