expansions: simple determinization

This commit is contained in:
Antoine Martin 2023-05-12 08:45:59 +02:00
parent 24b71fd8c7
commit f5574547ce
2 changed files with 27 additions and 2 deletions

View file

@ -325,6 +325,29 @@ namespace spot
exp.insert({prefix, suffix}); 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;
}
} }
} }

View file

@ -41,8 +41,10 @@ namespace spot
BddIsop = 4, BddIsop = 4,
BddMinterm = 8, BddMinterm = 8,
BddSigmaStar = 16, BddSigmaStar = 16,
MergeEdges = 32, BddEncode = 32,
SignatureMerge = 64, MergeEdges = 64,
SignatureMerge = 128,
Determinize = 256,
}; };
}; };