Exemplo n.º 1
0
        public void TestBiconditionalElimination()
        {
            RephraserType r1 = new BiconditionalElimination(),
                r2 = new BiconditionalElimination(),
                r3 = new BiconditionalElimination();

            r1.AddLeftBlock(new Block("a")).AddRightBlock(new Block("b"));
            r2.AddLeftBlock(ClauseParser.Parse("(a&b)")).AddRightBlock(new Block("c"));
            r3.AddLeftBlock(ClauseParser.Parse("(a&b)")).AddRightBlock(ClauseParser.Parse("(c||d)"));

            Assert.AreEqual("(~a||b)&(a||~b)", r1.Translate().ToString());
            Assert.AreEqual("(~(a&b)||c)&((a&b)||~c)", r2.Translate().ToString());
            Assert.AreEqual("(~(a&b)||(c||d))&((a&b)||~(c||d))", r3.Translate().ToString());
        }
Exemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="logic"></param>
        /// <param name="rootBlock"></param>
        /// <param name="currentBlock"></param>
        private void TranslateToCNF(
            PropositionalLogic logic,
            ref Block rootBlock,
            ref Block currentBlock)
        {
            RephraserType type = null;

            if (logic.IsBiconditional)
            {
                type = new BiconditionalElimination();
            }
            else if (logic.IsImplication)
            {
                type = new ModusPonens();
            }
            else if (logic.IsDisjunction)
            {
                type = new Distribution();
            }

            if (type == null)
            {
                throw new System.Exception("Obligatory exception");
            }
            System.Console.WriteLine("{0}, {1}", currentBlock.GetContent(true).ToString(), currentBlock.GetHashCode());

            var unAffectedBlock = currentBlock.NextBlock.NextBlock;
            var newList         = Translation(
                ref rootBlock,
                type,
                currentBlock.PreviousBlock,
                logic,
                currentBlock.NextBlock);

            currentBlock = unAffectedBlock.Equals(currentBlock) ?
                           newList :
                           unAffectedBlock.ExtendFront(newList);

            System.Console.WriteLine("{0}, {1}", currentBlock.GetContent(true).ToString(), currentBlock.GetHashCode());
        }