/* * Reduce Boolean.rules * * Created on 06 April 2006, 00:00 */ /** * bit-wise boolean expressions */ ~~$a => $a; $a & $a => $a :: sideEffectFree($a); $a | $a => $a :: sideEffectFree($a); $a ^ $a => 0 :: sideEffectFree($a); $a & ~$a => 0 :: sideEffectFree($a); ~$a & $a => 0 :: sideEffectFree($a); $a | ~$a => -1 :: sideEffectFree($a); ~$a | $a => -1 :: sideEffectFree($a); $a ^ ~$a => -1 :: sideEffectFree($a); ~$a ^ $a => -1 :: sideEffectFree($a); ~$a & ~$b => ~($a | $b); ~$a | ~$b => ~($a & $b); ~$a ^ ~$b => $a ^ $b; ($a & $b) | ($a & $c) => $a & ($b | $c) :: sideEffectFree($a); ($b & $a) | ($c & $a) => ($b | $c) & $a :: sideEffectFree($a) && sideEffectFree($c); ($a | $b) & ($a | $c) => $a | ($b & $c) :: sideEffectFree($a); /** * arithmetic boolean expressions */ !($a < $b) => $a >= $b; !($a > $b) => $a <= $b; !($a <= $b) => $a > $b; !($a >= $b) => $a < $b; /** * logical boolean expressions */ !!$a => $a; $a == $a => true :: sideEffectFree($a); $a != $a => false :: sideEffectFree($a); $a == !$a => false :: sideEffectFree($a); !$a == $a => false :: sideEffectFree($a); $a != !$a => true :: sideEffectFree($a); !$a != $a => true :: sideEffectFree($a); true && $a => $a; $a && true => $a; true || $a => true; $a || true => true :: sideEffectFree($a); $a == true => $a; true == $a => $a; $a != true => !$a; true != $a => !$a; false && $a => false; $a && false => false :: sideEffectFree($a); false || $a => $a; $a || false => $a; $a == false => !$a; false == $a => !$a; $a != false => $a; false != $a => $a; !($a == $b) => $a != $b; !($a != $b) => $a == $b; !$a && !$b => !($a || $b); !$a || !$b => !($a && $b); ($a && $b) || ($a && $c) => $a && ($b || $c) :: sideEffectFree($a); ($a || $b) && ($a || $c) => $a || ($b && $c) :: sideEffectFree($a); /** * object comparison identities */ this == null => false; null == this => false; this != null => true; null != this => true; /** * conditional statements */ true ? $a : $b => $a; false ? $a : $b => $b; $a ? true : false => $a; $a ? false : true => !$a; !$a ? $b : $c => $a ? $c : $b; $a ? $b : $b => $b :: sideEffectFree($a); $a ? $a : $b => $a || $b :: sideEffectFree($a); $a ? $b : $a => $a && $b :: sideEffectFree($a);