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); }
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); }