00001 /* 00002 * literal_factorization.h 00003 * PolyBoRi 00004 * 00005 * Created by Michael Brickenstein on 29.05.06. 00006 * Copyright 2006 The PolyBoRi Team. See LICENSE file. 00007 * 00008 */ 00009 00010 #include <algorithm> 00011 #include <vector> 00012 #include <map> 00013 #include <set> 00014 #include <utility> 00015 #include "groebner_defs.h" 00016 #ifndef PBORI_GB_LF_H 00017 #define PBORI_GB_LF_H 00018 BEGIN_NAMESPACE_PBORIGB 00019 00020 00021 class LiteralFactorization{ 00022 public: 00023 LiteralFactorization(const Polynomial&); 00024 typedef std::map<idx_type, int> map_type; 00025 map_type factors; 00026 Polynomial rest; 00027 deg_type lmDeg; 00028 bool occursAsLeadOfFactor(idx_type v) const; 00029 bool trivial() const; 00030 bool is11Factorization(); 00031 bool is00Factorization(); 00032 //Theorem: f BoolePolynomial with factor (x+b), b in 0, 1 (considered in the usual Polynomial Ring) 00033 //then f/(x+b) does not involve the variable x 00034 //typedef std::pair<idx_type,idx_type> var_pair_type; 00035 //typedef std::set<var_pair_type> two_var_factors; 00036 typedef std::map<idx_type, idx_type> var2var_map_type; 00037 var2var_map_type var2var_map; 00038 00039 protected: 00040 00041 00042 00043 }; 00044 deg_type common_literal_factors_deg(const LiteralFactorization& a, const LiteralFactorization& b); 00045 END_NAMESPACE_PBORIGB 00046 #endif