expansions: simple determinization
This commit is contained in:
parent
931d39e739
commit
f09c1dd7f3
2 changed files with 27 additions and 2 deletions
|
|
@ -325,6 +325,29 @@ namespace spot
|
|||
exp.insert({prefix, suffix});
|
||||
}
|
||||
}
|
||||
|
||||
if (opts & exp_opts::expand_opt::Determinize)
|
||||
{
|
||||
std::multimap<bdd, formula, bdd_less_than> exp_new;
|
||||
|
||||
bdd props = bddtrue;
|
||||
for (const auto& [prefix, _] : exp)
|
||||
props &= bdd_support(prefix);
|
||||
|
||||
std::vector<formula> dests;
|
||||
for (bdd letter : minterms_of(bddtrue, props))
|
||||
{
|
||||
for (const auto& [prefix, suffix] : exp)
|
||||
{
|
||||
if (bdd_implies(letter, prefix))
|
||||
dests.push_back(suffix);
|
||||
}
|
||||
formula or_dests = formula::OrRat(dests);
|
||||
exp_new.insert({letter, or_dests});
|
||||
dests.clear();
|
||||
}
|
||||
exp = exp_new;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -41,8 +41,10 @@ namespace spot
|
|||
BddIsop = 4,
|
||||
BddMinterm = 8,
|
||||
BddSigmaStar = 16,
|
||||
MergeEdges = 32,
|
||||
SignatureMerge = 64,
|
||||
BddEncode = 32,
|
||||
MergeEdges = 64,
|
||||
SignatureMerge = 128,
|
||||
Determinize = 256,
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue