contain.hh
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef SPOT_LTLVISIT_CONTAIN_HH
00023 # define SPOT_LTLVISIT_CONTAIN_HH
00024
00025 #include "ltlast/formula.hh"
00026 #include "tgbaalgos/ltl2tgba_fm.hh"
00027 #include "misc/hash.hh"
00028 #include <map>
00029
00030 namespace spot
00031 {
00032 namespace ltl
00033 {
00034
00035 class language_containment_checker
00036 {
00037 struct record_
00038 {
00039 const tgba* translation;
00040 typedef std::map<const record_*, bool> incomp_map;
00041 incomp_map incompatible;
00042 };
00043 typedef Sgi::hash_map<const formula*,
00044 record_, formula_ptr_hash> trans_map;
00045 public:
00048 language_containment_checker(bdd_dict* dict, bool exprop,
00049 bool symb_merge,
00050 bool branching_postponement,
00051 bool fair_loop_approx);
00052
00053 ~language_containment_checker();
00054
00056 bool contained(const formula* l, const formula* g);
00058 bool neg_contained(const formula* l, const formula* g);
00060 bool contained_neg(const formula* l, const formula* g);
00061
00063 bool equal(const formula* l, const formula* g);
00064
00065 protected:
00066 bool incompatible_(record_* l, record_* g);
00067
00068 record_* register_formula_(const formula* f);
00069
00070
00071 bdd_dict* dict_;
00072 bool exprop_;
00073 bool symb_merge_;
00074 bool branching_postponement_;
00075 bool fair_loop_approx_;
00076
00077 trans_map translated_;
00078 };
00079
00104 formula* reduce_tau03(const formula* f, bool stronger = true);
00105 }
00106 }
00107
00108 #endif // SPOT_LTLVISIT_CONTAIN_HH