def test_get_atoms_array_select(self): a = Symbol("a", ArrayType(INT, BOOL)) x = Symbol("x", INT) p = Symbol("p", BOOL) phi = And(Iff(Select(a, x), p), Equals(x, Int(1))) atoms = phi.get_atoms() self.assertEqual(len(atoms), 3) self.assertIn(Select(a, x), atoms) self.assertIn(p, atoms) self.assertIn(Equals(x, Int(1)), atoms)
def test_ackermannization_dictionaries(self): self.env.enable_infix_notation = True a, b = (Symbol(x, INT) for x in "ab") f, g = (Symbol(x, FunctionType(INT, [INT, INT])) for x in "fg") h = Symbol("h", FunctionType(INT, [INT])) formula1 = Not(Equals(f(a, g(a, h(a))), f(b, g(b, h(b))))) formula2 = Equals(a, b) formula = And(formula1, formula2) ackermannization = Ackermannizer() _ = ackermannization.do_ackermannization(formula) terms_to_consts = ackermannization.get_term_to_const_dict() consts_to_terms = ackermannization.get_const_to_term_dict() # The maps have the same length self.assertEqual(len(terms_to_consts), len(consts_to_terms)) # The maps are the inverse of each other for t in terms_to_consts: self.assertEqual(t, consts_to_terms[terms_to_consts[t]]) # Check that the the functions are there for atom in formula.get_atoms(): if atom.is_function_application(): self.assertIsNotNone(terms_to_consts[atom])
def test_ackermannization_dictionaries(self): self.env.enable_infix_notation = True a,b = (Symbol(x, INT) for x in "ab") f,g = (Symbol(x, FunctionType(INT, [INT, INT])) for x in "fg") h = Symbol("h", FunctionType(INT, [INT])) formula1 = Not(Equals(f(a, g(a, h(a))), f(b, g(b, h(b))))) formula2 = Equals(a, b) formula = And(formula1, formula2) ackermannization = Ackermannizer() _ = ackermannization.do_ackermannization(formula) terms_to_consts = ackermannization.get_term_to_const_dict() consts_to_terms = ackermannization.get_const_to_term_dict() # The maps have the same length self.assertEqual(len(terms_to_consts), len(consts_to_terms)) # The maps are the inverse of each other for t in terms_to_consts: self.assertEqual(t, consts_to_terms[terms_to_consts[t]]) # Check that the the functions are there for atom in formula.get_atoms(): if atom.is_function_application(): self.assertIsNotNone(terms_to_consts[atom])