#include <derive.H>
Inheritance diagram for DerivationAnalyzer:
Given a GradedAlgebra over F_2, here written *source, and a derivation d on it, the chief purpose of this is to compute the kernel of d, which is a subalgebra.
However, this is mostly an abstract class. One should create a class which inherits from this and which is optimized for the case at hand (this is what we do with MilnorAnalyzer). The methods which can be re-used without modifications are:
Important: *source must have a Grobner basis.
Tricky Notation: we call 'squares' the subalgebra of *source generated by all the squares. Thus we talk of *source viewed as a squares-module, etc. However, in a class which inherits from DerivationAnalyzer, the user will be likely to use the word 'squares', as well as the algebra with the same name, in the more general sense of 'elements which are in the kernel of the derivation for some trivial reason'.
Simple use of this class:The first idea is, thus, to consider *source as a finitely generated module over 'squares', since the derivation d on *source is squares-linear (we are in char=2). The problem then reduces to a computation of syzygies. Helped by setup() and coords_of(), the user can setup d with something like
DerivationAnalyzer der; der.setup( &A ); long i; for(i=1; i< der.mod_gens.size(); i++) der.d[i]= der.coords_of( A.Sq(1, der.mod_gens[i]) );
Possible improvements: A modification that is worth doing (and we do so in MilnorAnalyzer) is to start by checking which variables in *source satisfy d()=0, and put them in the algebra of squares. This requires modifying setup() (the changes are rather easy, since write_gens() has a flexible syntax). Then one needs to modify coords_of() in order to take the changes into account.
We recommend reading the comments to constant_subalgebra() now, for a more formal explanation.
Definition at line 73 of file derive.H.
Public Member Functions | |
void | setup (GradedAlgebra< F_2 > *thesource) |
sets up the data | |
void | write_gens (list< Polynomial< F_2 > > &result, long ext, long first, long last) |
used by setup | |
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 | constant_subalgebra (string prefix, long offset) |
does the actual computation using syzygies | |
virtual | ~DerivationAnalyzer () |
virtual destructor needed | |
Public Attributes | |
GradedAlgebra< F_2 > * | source |
the algebra on which there is a derivation | |
GradedAlgebra< F_2 > | squares |
the subalgebra of squares | |
AffineHomomorphism< F_2 > | sq_inclusion |
the inclusion homomorphism of squares into *source | |
Tuple< multiPolynomial< F_2 > > | d |
the derivation itself | |
GradedAlgebra< F_2 > | constants |
the algebra of constants, ie elements x satisfying d(x)=0 | |
AffineHomomorphism< F_2 > | cs_inclusion |
the inclusion homomorphism of constants into *source | |
Tuple< Polynomial< F_2 > > | mod_gens |
generators for source as a module over the subalgebra of squares | |
map< PowProd, long > | index_of |
this will find a PowProd in the tuple mod_gens and return its index |
|
virtual destructor needed
|
|
does the actual computation using syzygies The precise assumptions for this to work are as follows: (the information below should be enough to rewrite setup() and coords_of(), if needed)
Definition at line 130 of file derive.cpp. References Polynomial< K >::alphabet, constants, cs_inclusion, d, Ideal< K >::generators, multiIdeal< K >::generators, multiIdeal< K >::grobnerize_with_coefficients(), GradedAlgebra< K >::hom_degree_of(), GradedAlgebra< K >::hom_part_of(), Polynomial< K >::is_zero(), AffineHomomorphism< K >::kernel, AffineHomomorphism< K >::maps_onto(), mod_gens, GradedAlgebra< K >::new_variable(), Table< T >::nlines(), AbstractHomomorphism< K >::of(), AffineHomomorphism< K >::populate_associated_algebra(), AffineAlgebra< K >::reduced_form(), AffineAlgebra< K >::relations, Table< T >::resize(), AbstractHomomorphism< K >::set_image(), Polynomial< K >::sets_to_zero(), Tuple< T >::size(), source, sq_inclusion, multiIdeal< K >::syzygy(), and SimpleAlphabet::variables_in_use(). Referenced by MilnorAnalyzer::start(). |
|
given a member of source, this computes its coordinates when source is viewed as a squares-module
Reimplemented in MilnorAnalyzer. Definition at line 115 of file derive.cpp. References Polynomial< K >::coeffs, mod_gens, multiPolynomial< K >::resize(), multiPolynomial< K >::set_alphabet(), Tuple< T >::size(), and squares. Referenced by MilnorAnalyzer::coords_of(). |
|
sets up the data This computes a number of things, including the generators 'mod_gens' of *source when viewed as a squares-module. Quite simply, if *source is generated by x, y and z, then the generators taken will be I (one), x, y, z, xy, xz, yz and xzy. The function coords_of() knows this, and computes the coordinates of a member of *source in this basis. Definition at line 5 of file derive.cpp. References constants, cs_inclusion, d, AffineAlgebra< K >::get_variables(), GradedAlgebra< K >::hom_degrees, index_of, mod_gens, SimpleAlphabet::nameof(), GradedAlgebra< K >::new_variable(), AffineAlgebra< K >::one(), AffineHomomorphism< K >::populate_associated_algebra(), Tuple< T >::resize(), AbstractHomomorphism< K >::set_image(), AffineHomomorphism< K >::source, source, sq_inclusion, squares, AffineHomomorphism< K >::target, SimpleAlphabet::variables_in_use(), and write_gens(). |
|
used by setup Recursive function whose job is to pick the generators, see setup() and example below.
Definition at line 56 of file derive.cpp. References AbstractHomomorphism< K >::clear(), AffineAlgebra< K >::one(), and source. Referenced by MilnorAnalyzer::re_setup(), setup(), and MilnorAnalyzer::setup_for_Sq1(). |
|
the algebra of constants, ie elements x satisfying d(x)=0
Definition at line 84 of file derive.H. Referenced by constant_subalgebra(), and setup(). |
|
the inclusion homomorphism of constants into *source
Definition at line 86 of file derive.H. Referenced by constant_subalgebra(), and setup(). |
|
the derivation itself
Definition at line 82 of file derive.H. Referenced by constant_subalgebra(), and setup(). |
|
this will find a PowProd in the tuple mod_gens and return its index
Definition at line 94 of file derive.H. Referenced by setup(). |
|
generators for source as a module over the subalgebra of squares
Definition at line 92 of file derive.H. Referenced by constant_subalgebra(), coords_of(), and setup(). |
|
the algebra on which there is a derivation
Definition at line 76 of file derive.H. Referenced by constant_subalgebra(), setup(), and write_gens(). |
|
the inclusion homomorphism of squares into *source
Definition at line 80 of file derive.H. Referenced by constant_subalgebra(), and setup(). |
|
the subalgebra of squares
Definition at line 78 of file derive.H. Referenced by coords_of(), and setup(). |