Rewrite {b}<>->f as (!b)|f instead of b->f.

* src/ltlast/binop.cc, src/ltlast/binop.hh: Here.
* doc/tl/tl.tex, src/ltltest/equals.test: Adjust.
This commit is contained in:
Alexandre Duret-Lutz 2011-11-13 18:12:53 +01:00
parent 098e121a36
commit f68f639e68
4 changed files with 8 additions and 7 deletions

View file

@ -842,7 +842,7 @@ formula $b$, the following rewritings are systematically performed
& \ratgroup{\eword}\Esuffix f&\equiv \0 & \ratgroup{\eword}\Esuffix f&\equiv \0
& \ratgroup{\eword} & \equiv \0 & \ratgroup{\eword} & \equiv \0
& \nratgroup{\eword} & \equiv \1 \\ & \nratgroup{\eword} & \equiv \1 \\
\ratgroup{b}\Asuffix f&\equiv b\IMPLIES f \ratgroup{b}\Asuffix f&\equiv (\NOT{b})\OR f
& \ratgroup{b}\Esuffix f&\equiv b\AND f & \ratgroup{b}\Esuffix f&\equiv b\AND f
& \ratgroup{b} &\equiv b & \ratgroup{b} &\equiv b
& \nratgroup{b} &\equiv \NOT b\\ & \nratgroup{b} &\equiv \NOT b\\

View file

@ -520,7 +520,7 @@ namespace spot
// - 1 []-> Exp = Exp // - 1 []-> Exp = Exp
// - [*0] []-> Exp = 1 // - [*0] []-> Exp = 1
// - Exp []-> 1 = 1 // - Exp []-> 1 = 1
// - boolExp []-> Exp = boolExp -> Exp // - boolExp []-> Exp = !boolExp | Exp
if (first == constant::true_instance()) if (first == constant::true_instance())
return second; return second;
if (first == constant::false_instance() if (first == constant::false_instance()
@ -535,7 +535,8 @@ namespace spot
return second; return second;
} }
if (first->is_boolean()) if (first->is_boolean())
return binop::instance(binop::Implies, first, second); return multop::instance(multop::Or,
unop::instance(unop::Not, first), second);
break; break;
} }

View file

@ -105,7 +105,7 @@ namespace spot
/// - 1 []-> Exp = Exp /// - 1 []-> Exp = Exp
/// - [*0] []-> Exp = 1 /// - [*0] []-> Exp = 1
/// - Exp []-> 1 = 1 /// - Exp []-> 1 = 1
/// - boolExp <>-> Exp = boolExp -> Exp /// - boolExp <>-> Exp = !boolExp | Exp
static formula* instance(type op, formula* first, formula* second); static formula* instance(type op, formula* first, formula* second);
virtual void accept(visitor& v); virtual void accept(visitor& v);

View file

@ -141,11 +141,11 @@ run 0 ../equals '{x;x}[]->FF(0)' '{x;x}[]->0'
run 0 ../equals '{x;x}[]->y' '{x;x}|->y' run 0 ../equals '{x;x}[]->y' '{x;x}|->y'
run 0 ../equals '{x;x}[]->y' '{x;x}(y)' run 0 ../equals '{x;x}[]->y' '{x;x}(y)'
run 0 ../equals '{a*}!' '{a*}<>->1' run 0 ../equals '{a*}!' '{a*}<>->1'
run 0 ../equals '{a -> b} (c)' '(a->b)->c' run 0 ../equals '{a -> b} (c)' '!(a->b)|c'
run 0 ../equals '{a & !b}!' 'a & !b' run 0 ../equals '{a & !b}!' 'a & !b'
run 0 ../equals '{a;[*0]}|->!Xb' 'a -> !Xb' run 0 ../equals '{a;[*0]}|->!Xb' '!a | !Xb'
run 0 ../equals '{{a;b}:b:c:d*:e:f}!' '{{a;b}:{{b && c } & d[*]}:{e && f}}!' run 0 ../equals '{{a;b}:b:c:d*:e:f}!' '{{a;b}:{{b && c } & d[*]}:{e && f}}!'
run 0 ../equals '{a:b:c}|->!Xb' '(a&b&c) -> !Xb' run 0 ../equals '{a:b:c}|->!Xb' '!(a&b&c) | !Xb'
run 0 ../equals '{a:b:c*}|->!Xb' '{(a&&b)&c*}|-> !Xb' run 0 ../equals '{a:b:c*}|->!Xb' '{(a&&b)&c*}|-> !Xb'
run 0 ../equals '{a[*0]}' '{[*0]}' run 0 ../equals '{a[*0]}' '{[*0]}'