ltl2aa: finalize UConcat

This commit is contained in:
Antoine Martin 2022-09-16 15:48:07 +02:00
parent e4f00229d7
commit 2e2a3b4544
3 changed files with 14 additions and 6 deletions

View file

@ -38,7 +38,8 @@ namespace spot
aut_->get_dict()->unregister_all_my_variables(this); aut_->get_dict()->unregister_all_my_variables(this);
} }
bdd outedge_combiner::operator()(unsigned st, const std::vector<unsigned>& dst_filter) bdd outedge_combiner::operator()(unsigned st, const std::vector<unsigned>& dst_filter,
bool remove_original_edges)
{ {
const auto& dict = aut_->get_dict(); const auto& dict = aut_->get_dict();
bdd res = bddtrue; bdd res = bddtrue;
@ -79,6 +80,9 @@ namespace spot
out &= bdd_ithvar(p.first->second); out &= bdd_ithvar(p.first->second);
} }
res2 |= e.cond & out; res2 |= e.cond & out;
if (remove_original_edges)
e.cond = bddfalse;
} }
if (res2 != bddfalse) if (res2 != bddfalse)

View file

@ -53,7 +53,8 @@ namespace spot
public: public:
outedge_combiner(const twa_graph_ptr& aut, unsigned sink = -1u); outedge_combiner(const twa_graph_ptr& aut, unsigned sink = -1u);
~outedge_combiner(); ~outedge_combiner();
bdd operator()(unsigned st, const std::vector<unsigned>& dst_filter = std::vector<unsigned>()); bdd operator()(unsigned st, const std::vector<unsigned>& dst_filter = std::vector<unsigned>(),
bool remove_original_edges = false);
void new_dests(unsigned st, bdd out) const; void new_dests(unsigned st, bdd out) const;
}; };

View file

@ -355,15 +355,18 @@ namespace spot
unsigned new_st = it->second; unsigned new_st = it->second;
bdd comb = bddtrue; bdd comb = bddtrue;
comb &= oe_(new_st, acc_states); comb &= oe_(new_st, acc_states, true);
comb &= oe_(rhs_init); if (comb != bddtrue)
oe_.new_dests(new_st, comb); {
comb &= oe_(rhs_init);
oe_.new_dests(new_st, comb);
}
} }
auto it = old_to_new.find(sere_aut->get_init_state_number()); auto it = old_to_new.find(sere_aut->get_init_state_number());
assert(it != old_to_new.end()); assert(it != old_to_new.end());
//aut_->merge_edges(); aut_->merge_edges();
return it->second; return it->second;
} }