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

AffineHomomorphism< K > Class Template Reference

#include <affhom.H>

Inheritance diagram for AffineHomomorphism< K >:

AbstractHomomorphism< K > List of all members.

Detailed Description

template<class K>
class AffineHomomorphism< K >

AffineHomomorphism: an AbstractHomomorphism with source and target.

The main difference with a simple AbstractHomomorphism is that an affine hom can check if it is well-defined (see is_well_defined()). Also displays better. To do: is_injective, is surjective...

Parameters:
@return 

Definition at line 19 of file affhom.H.

Public Member Functions

 AffineHomomorphism (const AffineAlgebra< K > *thesource, const AffineAlgebra< K > *thetarget)
void make_identity (const AffineAlgebra< K > *ptr)
 turns the homomorphism into the identity
void fix_alphabets ()
 makes 100% sure that the alphabets in 'images' correspond to target
void remove_extra_data ()
 undefines the images of variables with index too high to make sense in source, updates the kernel too
bool fill_zeroes ()
 sets the undefined images to zero
void get_data_from (const AbstractHomomorphism< K > &f)
 creates an AffineHomomorphism from an AbstractHomomorphism
bool is_well_defined () const
 as the name says... target must have a grobner basis
AffineHomomorphism< K > simple_section () const
 find a section in very simple cases
void read_from_GAP_file (ifstream &file)
 read information from a file
void compute_kernel ()
 finds kernel generators
void populate_associated_algebra ()
 prepares the ground for kernel/image calculations
bool maps_onto (const Polynomial< K > &P) const
bool maps_onto (const Polynomial< K > &P, Polynomial< K > &pre_image) const
bool factors_through (const Ideal< K > &J) const
 returns true iff this is zero on the ideal J
bool is_finite () const
 returns true iff the ideal generated by the image is of finite codimension
bool is_essentially_surjective () const
 returns true iff the ideal generated by the image is all of *target
bool is_essentially_contained_in (const AffineHomomorphism< K > &g) const
 returns true iff the ideal generated by the image of this is included in that of g
AffineHomomorphism< K > & operator *= (const AffineHomomorphism< K > &f)
AffineHomomorphism< K > operator * (const AffineHomomorphism< K > &f) const

Public Attributes

const AffineAlgebra< K > * source
const AffineAlgebra< K > * target
Ideal< K > kernel
AffineAlgebra< K > assoc_alg
 associated algebra

Friends

ostream & operator<< (ostream &os, const AffineHomomorphism< K > &f)
 print
ofstream & operator<< (ofstream &file, AffineHomomorphism< K > &f)
 write to file
void operator>> (ifstream &file, AffineHomomorphism< K > &f)
 read from file


Member Function Documentation

template<class K>
void AffineHomomorphism< K >::compute_kernel  )  [inline]
 

finds kernel generators

This fills this->kernel.generators with, well, generators for the kernel of *this. In fact, a reduced grobner basis is provided. So far, LEX is required.

Definition at line 225 of file affhom.H.

template<class K>
bool AffineHomomorphism< K >::factors_through const Ideal< K > &  J  )  const [inline]
 

returns true iff this is zero on the ideal J

*target must have a grobner basis

Definition at line 327 of file affhom.H.

Referenced by HomFinder::get_equivalence_class().

template<class K>
bool AffineHomomorphism< K >::fill_zeroes  )  [inline]
 

sets the undefined images to zero

Not done by default as it might be useful to keep track of the undefined images

Definition at line 106 of file affhom.H.

template<class K>
void AffineHomomorphism< K >::fix_alphabets  )  [inline]
 

makes 100% sure that the alphabets in 'images' correspond to target

Definition at line 60 of file affhom.H.

Referenced by AffineHomomorphism< F_2 >::get_data_from(), AffineHomomorphism< F_2 >::make_identity(), and MilnorAnalyzer::re_setup().

template<class K>
void AffineHomomorphism< K >::get_data_from const AbstractHomomorphism< K > &  f  )  [inline]
 

creates an AffineHomomorphism from an AbstractHomomorphism

The alphabets must be set BEFORE this is called.

Definition at line 127 of file affhom.H.

template<class K>
bool AffineHomomorphism< K >::is_essentially_contained_in const AffineHomomorphism< K > &  g  )  const [inline]
 

returns true iff the ideal generated by the image of this is included in that of g

Definition at line 409 of file affhom.H.

Referenced by HomFinder::get_equivalence_class().

template<class K>
bool AffineHomomorphism< K >::is_essentially_surjective  )  const [inline]
 

returns true iff the ideal generated by the image is all of *target

When *source and *target are graded, this returns true iff this is surjective.

Definition at line 375 of file affhom.H.

template<class K>
bool AffineHomomorphism< K >::is_finite  )  const [inline]
 

returns true iff the ideal generated by the image is of finite codimension

When *source and *target are graded, thus, this returns true iff *target is finitely generated as a module over *source.

Todo:
check if this requires LEX

Definition at line 352 of file affhom.H.

template<class K>
bool AffineHomomorphism< K >::is_well_defined  )  const [inline]
 

as the name says... target must have a grobner basis

This checks if the generators of the relations ideal in *source map to 0, relying on target->reduced_form(). Of course this only makes sense if *target has a grobner basis already computed.

Definition at line 142 of file affhom.H.

Referenced by HomFinder::filter_GL().

template<class K>
void AffineHomomorphism< K >::make_identity const AffineAlgebra< K > *  ptr  )  [inline]
 

turns the homomorphism into the identity

Definition at line 53 of file affhom.H.

Referenced by HomFinder::filter_GL().

template<class K>
void AffineHomomorphism< K >::populate_associated_algebra  )  [inline]
 

prepares the ground for kernel/image calculations

On the surface this looks like the method compute_kernel() except that the associated algebra is kept rather than discarded. The kernel is computed, too. The point is that the algebra is needed repeatedly if you need to make lots of computations with the image.

See also:
assoc_alg.

Definition at line 269 of file affhom.H.

Referenced by DerivationAnalyzer::constant_subalgebra(), MilnorAnalyzer::done(), MilnorAnalyzer::re_setup(), DerivationAnalyzer::setup(), MilnorAnalyzer::setup_for_Sq1(), and MilnorAnalyzer::start().

template<class K>
void AffineHomomorphism< K >::read_from_GAP_file ifstream &  file  )  [inline]
 

read information from a file

This expects to find in 'file' the following information: for each variable in *source, there will be a sequence of coefficients expressing the image of the variable as a linear combination of the variables in *target. All this in the obvious order.

Definition at line 197 of file affhom.H.

template<class K>
void AffineHomomorphism< K >::remove_extra_data  )  [inline]
 

undefines the images of variables with index too high to make sense in source, updates the kernel too

Typical use: you have killed a few variables from the "top" of *source, and you want to restrict the homomorphism to this new, smaller algebra. Assuming you are using LEX, you get a grobner basis for the kernel of this restriction by simply eliminating the relations involving the old variables.

Definition at line 74 of file affhom.H.

Referenced by AffineHomomorphism< F_2 >::get_data_from().

template<class K>
AffineHomomorphism<K> AffineHomomorphism< K >::simple_section  )  const [inline]
 

find a section in very simple cases

This assumes that *this is a surjective homomorphism and moreover that each variable in the target is the image of a variable with the same name in the source. This looks for preimages chiefly on the basis of the names (!!) of the variables, and constructs a section, ie an f such that *this * f is the identity.

This is very much ad hoc, of course. A typical use is right after AffineAlgebra<K>::find_redundancies().

Definition at line 171 of file affhom.H.


Friends And Related Function Documentation

template<class K>
ofstream& operator<< ofstream &  file,
AffineHomomorphism< K > &  f
[friend]
 

write to file

Definition at line 468 of file affhom.H.

template<class K>
ostream& operator<< ostream &  os,
const AffineHomomorphism< K > &  f
[friend]
 

print

Definition at line 456 of file affhom.H.

template<class K>
void operator>> ifstream &  file,
AffineHomomorphism< K > &  f
[friend]
 

read from file

Definition at line 477 of file affhom.H.


Member Data Documentation

template<class K>
AffineAlgebra<K> AffineHomomorphism< K >::assoc_alg
 

associated algebra

This is empty until you call populate_associated_algebra(). When you do, it contains the associated algebra which is needed (or at least very useful) in order to compute the kernel or the image of the homomorphism.

Definition at line 32 of file affhom.H.


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