00001 #ifndef _UNSTABLE_H_
00002 #define _UNSTABLE_H_
00003
00004
00005 #include "algebras.H"
00006 #include <string>
00007 #include <sstream>
00008 #include <fstream>
00009 #include "my_gmp.H"
00010 #include "ftwo.H"
00011 using namespace std;
00012
00014
00020 class UnstableAlgebra : public GradedAlgebra<F_2> {
00021 private:
00022
00023 void insert(const Polynomial<F_2>& P,
00024 const string& com,
00025 list< Polynomial<F_2> >& thelist);
00026
00027 public:
00029
00039 list< string > comments;
00041 map< long, Tuple< Polynomial<F_2> > > steenrod;
00042
00044 virtual void swap_variables_order(long i, long j, list< Polynomial<F_2> >& polys);
00045 virtual void swap_variables_order(long i, long j);
00046 virtual void kill_top_variable(const Polynomial<F_2>& replacement,
00047 list< Polynomial<F_2> >& polys);
00048 virtual void kill_top_variable(const Polynomial<F_2>& replacement);
00049 virtual void fix_alphabets();
00050
00053
00061 void write_trivial_steenrod_operations();
00063 Polynomial<F_2> Sq(long i, const Polynomial<F_2>& x) const;
00065 Polynomial<F_2> Q(long i, const Polynomial<F_2>& x) const;
00067
00074 void display() const;
00076
00096 AbstractHomomorphism<F_2> saturate_and_reduce();
00098 bool is_saturated() const;
00100
00104 bool has_closure_of(const AffineHomomorphism<F_2>& f) const;
00106 friend ostream& operator<<(ostream& os, const UnstableAlgebra& A);
00107 friend ofstream& operator<<(ofstream& file, UnstableAlgebra& A);
00108 friend void operator>>(ifstream& file, UnstableAlgebra& A);
00109
00110 };
00111
00112
00113
00114 #endif