Ejemplo n.º 1
0
    def setUp(self):
        """
        Setup function for clause/literal unit tests. Initialize
        variables needed throughout the tests.
        """
        print()
        self.formulas = """
        ![X]:(a(X) ~| ~a=b)
        ![X]:(a(X)|b(X)|?[X,Y]:(p(X,f(Y))<~>q(g(a),X)))
        ![X]:(a(X) <= ~a=b)
        ((((![X]:a(X))|b(X))|(?[X]:(?[Y]:p(X,f(Y)))))~&q(g(a),X))
        ![X]:(a(X)|$true)
        """
        lex = Lexer(self.formulas)
        self.f1 = parseFormula(lex)
        self.f2 = parseFormula(lex)
        self.f3 = parseFormula(lex)
        self.f4 = parseFormula(lex)
        self.f5 = parseFormula(lex)
        self.simple_ops = set(["", "!", "?", "~", "&", "|", "=>", "<=>"])
        self.nnf_ops = set(["", "!", "?", "&", "|"])

        self.covformulas = """
        (a|$true)
        ($true|a)
        (a|$false)
        ($false|a)
        (a|a)
        (a&$true)
        ($true&a)
        (a&$false)
        ($false&a)
        (a&a)
        (a=>$true)
        ($true=>a)
        (a=>$false)
        ($false=>a)
        (a=>a)
        (a<=>$true)
        ($true<=>a)
        (a<=>$false)
        ($false<=>a)
        (a<=>a)
        ![X]:(a<=>a)
        ?[X]:(a<=>a)
        a<=>b
        """

        self.testformulas = """
Ejemplo n.º 2
0
    def testSimplification(self):
        """
        Test that simplification works.
        """
        f, m = formulaOpSimplify(self.f1)
        f, m = formulaSimplify(f)
        self.checkSimplificationResult(f)

        f, m = formulaOpSimplify(self.f2)
        f, m = formulaSimplify(f)
        self.checkSimplificationResult(f)

        f, m = formulaOpSimplify(self.f3)
        f, m = formulaSimplify(f)
        self.checkSimplificationResult(f)

        f, m = formulaOpSimplify(self.f4)
        f, m = formulaSimplify(f)
        self.checkSimplificationResult(f)

        f, m = formulaOpSimplify(self.f5)
        f, m = formulaSimplify(f)
        self.checkSimplificationResult(f)

        lex = Lexer(self.covformulas)
        while not lex.TestTok(Token.EOFToken):
            f = parseFormula(lex)
            f, m = formulaOpSimplify(f)
            f, m = formulaSimplify(f)
            self.checkSimplificationResult(f)
Ejemplo n.º 3
0
    def testRenaming(self):
        """
        Test variable renaming
        """
        lex = Lexer("![X]:(p(X)|![X]:(q(X)&?[X]:r(X)))")
        f = parseFormula(lex)

        v1 = f.collectVars()
        self.assertEqual(v1, set(["X"]))
        v2 = f.collectFreeVars()
        self.assertEqual(v2, set())

        f1 = formulaVarRename(f)
        print(f, f1)

        v1 = f1.collectVars()
        self.assertEqual(len(v1), 3)
        v2 = f1.collectFreeVars()
        self.assertEqual(v2, set())
Ejemplo n.º 4
0
    def testMiniScope(self):
        """
        Test Miniscoping.
        """
        lex = Lexer("""
        ![X]:(p(X)|q(a))
        ?[X]:(p(a)&q(X))
        ![X]:(p(X)&q(X))
        ?[X]:(p(X)|q(X))
        ![X]:(p(X)|q(X))
        ![X,Y]:?[Z]:(p(Z)|q(X))
        """)
        res = [True, True, True, True, False, True]

        while not lex.TestTok(Token.EOFToken):
            expected = res.pop(0)
            f = parseFormula(lex)
            f1, m = formulaMiniScope(f)
            print(f, f1, m, expected)
            self.assertEqual(expected, m)
            if m:
                self.assertTrue(not f1.isQuantified())
Ejemplo n.º 5
0
    def testNNF(self):
        """
        Test NNF transformation
        """
        f, m = formulaOpSimplify(self.f1)
        f, m = formulaSimplify(f)
        f, m = formulaNNF(f, 1)
        self.checkNNFResult(f)

        f, m = formulaOpSimplify(self.f2)
        f, m = formulaSimplify(f)
        f, m = formulaNNF(f, 1)
        self.checkNNFResult(f)

        f, m = formulaOpSimplify(self.f3)
        f, m = formulaSimplify(f)
        f, m = formulaNNF(f, 1)
        self.checkNNFResult(f)

        f, m = formulaOpSimplify(self.f4)
        f, m = formulaSimplify(f)
        f, m = formulaNNF(f, 1)
        self.checkNNFResult(f)

        f, m = formulaOpSimplify(self.f5)
        f, m = formulaSimplify(f)
        f, m = formulaNNF(f, 1)
        self.checkNNFResult(f)

        lex = Lexer(self.covformulas)
        while not lex.TestTok(Token.EOFToken):
            f = parseFormula(lex)
            f, m = formulaOpSimplify(f)
            f, m = formulaSimplify(f)
            f, m = formulaNNF(f, 1)
            self.checkNNFResult(f)