Esempio n. 1
0
        public void NeedsNormalisation()
        {
            var e = new CNFExpression <MyModel>(PLExpression <MyModel> .Iff(m => m.L, m => m.R1 || m.R2));

            e.ShouldHaveState(clauseCount: 3);

            e.Clauses.ElementAt(0).ShouldHaveState(
                isDefiniteClause: false,
                isGoalClause: false,
                isHornClause: false,
                isUnitClause: false,
                literalCount: 3);
            e.Clauses.ElementAt(0).Literals.ElementAt(0).ShouldHaveState(
                atomicSentenceSymbol: "m.L",
                isNegated: true);
            e.Clauses.ElementAt(0).Literals.ElementAt(1).ShouldHaveState(
                atomicSentenceSymbol: "m.R1",
                isNegated: false);
            e.Clauses.ElementAt(0).Literals.ElementAt(2).ShouldHaveState(
                atomicSentenceSymbol: "m.R2",
                isNegated: false);

            e.Clauses.ElementAt(1).ShouldHaveState(
                isDefiniteClause: true,
                isGoalClause: false,
                isHornClause: true,
                isUnitClause: false,
                literalCount: 2);
            e.Clauses.ElementAt(1).Literals.ElementAt(0).ShouldHaveState(
                atomicSentenceSymbol: "m.R1",
                isNegated: true);
            e.Clauses.ElementAt(1).Literals.ElementAt(1).ShouldHaveState(
                atomicSentenceSymbol: "m.L",
                isNegated: false);

            e.Clauses.ElementAt(2).ShouldHaveState(
                isDefiniteClause: true,
                isGoalClause: false,
                isHornClause: true,
                isUnitClause: false,
                literalCount: 2);
            e.Clauses.ElementAt(2).Literals.ElementAt(0).ShouldHaveState(
                atomicSentenceSymbol: "m.R2",
                isNegated: true);
            e.Clauses.ElementAt(2).Literals.ElementAt(1).ShouldHaveState(
                atomicSentenceSymbol: "m.L",
                isNegated: false);
        }
Esempio n. 2
0
        public void UnitClause()
        {
            var e = new CNFExpression <MyModel>(m => m.L);

            e.ShouldHaveState(clauseCount: 1);

            e.Clauses.Single().ShouldHaveState(
                isDefiniteClause: true,
                isGoalClause: false,
                isHornClause: true,
                isUnitClause: true,
                literalCount: 1);

            e.Clauses.Single().Literals.Single().ShouldHaveState(
                atomicSentenceSymbol: "m.L",
                isNegated: false);
        }
Esempio n. 3
0
 public static void ShouldHaveState(
     this CNFExpression <MyModel> expression,
     int clauseCount)
 {
     Assert.Equal(clauseCount, expression.Clauses.Count);
 }
Esempio n. 4
0
 public ClauseBuilder(CNFExpression <TModel> owner, List <CNFClause <TModel> > clauses) => (this.owner, this.clauses) = (owner, clauses);