Avoid containment checks on equal formulae.
* src/ltlvisit/contain.cc (language_containment_checker::contained, language_containment_checker::neg_contained, language_containment_checker::contained_neg): Detect cases where both formulae are equal.
This commit is contained in:
parent
58bbaa0859
commit
c54627bebd
1 changed files with 8 additions and 0 deletions
|
|
@ -89,6 +89,8 @@ namespace spot
|
||||||
bool
|
bool
|
||||||
language_containment_checker::contained(const formula* l, const formula* g)
|
language_containment_checker::contained(const formula* l, const formula* g)
|
||||||
{
|
{
|
||||||
|
if (l == g)
|
||||||
|
return true;
|
||||||
record_* rl = register_formula_(l);
|
record_* rl = register_formula_(l);
|
||||||
const formula* ng = unop::instance(unop::Not, g->clone());
|
const formula* ng = unop::instance(unop::Not, g->clone());
|
||||||
record_* rng = register_formula_(ng);
|
record_* rng = register_formula_(ng);
|
||||||
|
|
@ -101,12 +103,16 @@ namespace spot
|
||||||
language_containment_checker::neg_contained(const formula* l,
|
language_containment_checker::neg_contained(const formula* l,
|
||||||
const formula* g)
|
const formula* g)
|
||||||
{
|
{
|
||||||
|
if (l == g)
|
||||||
|
return false;
|
||||||
const formula* nl = unop::instance(unop::Not, l->clone());
|
const formula* nl = unop::instance(unop::Not, l->clone());
|
||||||
record_* rnl = register_formula_(nl);
|
record_* rnl = register_formula_(nl);
|
||||||
const formula* ng = unop::instance(unop::Not, g->clone());
|
const formula* ng = unop::instance(unop::Not, g->clone());
|
||||||
record_* rng = register_formula_(ng);
|
record_* rng = register_formula_(ng);
|
||||||
nl->destroy();
|
nl->destroy();
|
||||||
ng->destroy();
|
ng->destroy();
|
||||||
|
if (nl == g)
|
||||||
|
return true;
|
||||||
return incompatible_(rnl, rng);
|
return incompatible_(rnl, rng);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -115,6 +121,8 @@ namespace spot
|
||||||
language_containment_checker::contained_neg(const formula* l,
|
language_containment_checker::contained_neg(const formula* l,
|
||||||
const formula* g)
|
const formula* g)
|
||||||
{
|
{
|
||||||
|
if (l == g)
|
||||||
|
return false;
|
||||||
record_* rl = register_formula_(l);
|
record_* rl = register_formula_(l);
|
||||||
record_* rg = register_formula_(g);
|
record_* rg = register_formula_(g);
|
||||||
return incompatible_(rl, rg);
|
return incompatible_(rl, rg);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue