def test_parsing_binary_precedence(): assert parse_formula("x & y | z -> m") == IfThen( Or(And(Var("x"), Var("y")), Var("z")), Var("m")) assert parse_formula("x | y -> m & z") == IfThen(Or(Var("x"), Var("y")), And(Var("m"), Var("z"))) assert parse_formula("[x | y] & z") == And(Or(Var("x"), Var("y")), Var("z"))
def test_replace_variable_in_quantifiers(): tree = ForAll( "x", Or(And(ForAll("b", Var("b")), Exists("b", Var("b"))), Exists("y", Var("b"))), ) assert tree.replace_variable("b", Var("bbb")) == ForAll( "x", Or(And(ForAll("b", Var("b")), Exists("b", Var("b"))), Exists("y", Var("bbb"))), )
def test_binary_operators_to_str(): assert str(And(Or(Var("a"), Var("b")), Var("c"))) == "[a | b] & c" assert str(Or(And(Var("a"), Var("b")), Var("c"))) == "a & b | c" assert str(Or(Var("a"), Or(Var("b"), Var("c")))) == "a | b | c" assert str(And(Var("a"), And(Var("b"), Var("c")))) == "a & b & c"
def test_not_to_str(): assert str(Not(Var("x"))) == "~x" assert str(Not(Or(Var("x"), Var("y")))) == "~[x | y]"
def test_or_to_str(): assert str(Or(Var("a"), Var("b"))) == "a | b"
def test_replace_variable_in_and_or(): tree = And(Or(Var("x"), Var("y")), Var("z")) assert tree.replace_variable("x", Var("x'")) == And( Or(Var("x'"), Var("y")), Var("z") )
def test_simplify_call_with_lambda_arg(): # (LP.P(x))(Lx.x | a) -> x | a tree = Call(Lambda("P", Call(Var("P"), Var("x"))), Lambda("x", Or(Var("x"), Var("a")))) assert tree.simplify() == Or(Var("x"), Var("a"))
def test_parsing_exists(): assert parse_formula("Ex.x | y") == Exists("x", Or(Var("x"), Var("y"))) assert parse_formula("E x.x | y") == Exists("x", Or(Var("x"), Var("y"))) assert parse_formula("∃x.x | y") == Exists("x", Or(Var("x"), Var("y")))
def test_parsing_negation(): assert parse_formula("~a") == Not(Var("a")) assert parse_formula("~a | b") == Or(Not(Var("a")), Var("b")) assert parse_formula("~[a | b]") == Not(Or(Var("a"), Var("b")))
def test_parsing_disjunction(): assert parse_formula("b | b0") == Or(Var("b"), Var("b0")) assert parse_formula("a | b | c") == Or(Var("a"), Or(Var("b"), Var("c")))