Exemplo n.º 1
0
    def add_goal(self, statement):
        """

        :param statement:
        :return:
        """
        statement = parser.parse(statement)
        self._add_statement(deepcopy(statement), self.goals)
        self._add_statement(Not(deepcopy(statement)), self._goals)
Exemplo n.º 2
0
    def add_formula(self, statement):
        """

        :param statement:
        :return:
        """
        if isinstance(statement, str):
            statement = parser.parse(statement)
        self._add_statement(deepcopy(statement), self.formulas)
Exemplo n.º 3
0
    def test_parse_fol_1(self):
        Predicate.reset()
        Herbrand.reset()
        Skolem.reset()
        statement = parser.parse("forall(x,if(A(x),and(B(x),C(x))))")
        expected = Universal(Symbol("x"), If(Predicate("A", [Symbol("x")]),
                                             And(Predicate("B", [Symbol("x")]),
                                                 Predicate("C", [Symbol("x")]))))

        self.assertEqual(expected, statement)
Exemplo n.º 4
0
    def _add_statement(statement, add_to_list):
        """

        :param statement:
        :param add_to_list:
        :param additional: additional operator to apply onto statement
        :return:
        """
        statement = parser.parse(statement)
        statement = converter.convert_formula(statement)
        add_to_list.append(statement)
Exemplo n.º 5
0
 def test_bad_paranthesis(self):
     with self.assertRaises(SyntaxError):
         parser.parse("and((a)),b)")
Exemplo n.º 6
0
 def test_convert_to_cnf_2(self):
     statement = parser.parse("forall(x,if(A(x),and(B(x),C(x))))")
     statement = converter.convert_formula(statement)
     expected = "((B(Herbrand1) | ~A(Herbrand1)) & (C(Herbrand1) | ~A(Herbrand1)))"
     self.assertEqual(expected, str(statement))
Exemplo n.º 7
0
def _herbrandization(statement, forall=None):
    """
    Remove universal quantifiers through herbrandization

    :param statement:
    :param forall:
    :return:
    """
    if forall is None:
        forall = dict()
    if isinstance(statement, Universal):
        forall[statement.symbol] = Herbrand()
        statement = _herbrandization(statement.args[0], forall)
    elif isinstance(statement, Existential):
        statement.args[0] = _herbrandization(statement.args[0], forall)
    elif isinstance(statement, Formula):
        for i in range(len(statement.args)):
            if isinstance(statement.args[i], Symbol):
                if statement.args[i].arg in forall:
                    statement.args[i] = forall[str(statement.args[i])]
            else:
                statement.args[i] = _herbrandization(statement.args[i], forall)
    else:
        if statement in forall:
            statement = forall[str(statement)]
    return statement


if __name__ == "__main__":
    print(convert_formula(parser.parse("not(forall(x,if(A(x),C(x))))")))
Exemplo n.º 8
0
 def test_extra_comma(self):
     with self.assertRaises(SyntaxError):
         parser.parse("and(a!,b)")
Exemplo n.º 9
0
 def test_parse_symbol(self):
     statement = parser.parse("a")
     self.assertEqual(statement, Symbol("a"))
Exemplo n.º 10
0
 def test_wrong_number_arguments(self):
     with self.assertRaises(SyntaxError):
         parser.parse("and(a)")
Exemplo n.º 11
0
 def test_invalid_formula(self):
     with self.assertRaises(SyntaxError):
         parser.parse("not(a),")
Exemplo n.º 12
0
 def test_parse_or(self):
     statement = parser.parse("or(a, b)")
     self.assertEqual(statement, Or(Symbol("a"), Symbol("b")))
Exemplo n.º 13
0
 def test_parse_and(self):
     statement = parser.parse("and(a, b)")
     self.assertEqual(statement, And(Symbol("a"), Symbol("b")))
Exemplo n.º 14
0
 def test_bad_symbol(self):
     with self.assertRaises(SyntaxError):
         parser.parse("&a")
Exemplo n.º 15
0
 def test_empty_parse(self):
     with self.assertRaises(SyntaxError):
         parser.parse("")
Exemplo n.º 16
0
 def test_parse_iff(self):
     statement = parser.parse("iff(a, b)")
     self.assertEqual(statement, Iff(Symbol("a"), Symbol("b")))
Exemplo n.º 17
0
 def test_extra_paranthesis(self):
     statement = parser.parse("and((a),((b)))")
     self.assertEqual(And(Symbol("a"), Symbol("b")), statement)
Exemplo n.º 18
0
 def test_parse_iff_2(self):
     statement = parser.parse("iff(not(A), not(B))")
     self.assertEqual(statement, Iff(Not(Symbol("A")), Not(Symbol("B"))))
Exemplo n.º 19
0
 def test_bad_paranthesis_left(self):
     with self.assertRaises(SyntaxError):
         parser.parse("and(a,b")
Exemplo n.º 20
0
 def test_parse_not(self):
     statement = parser.parse("not(a)")
     self.assertEqual(statement, Not(Symbol("a")))