internal override BoolExpr <T_Identifier> MakeNegated() { var literal = new Literal <T_Identifier>(this, true); // leverage normalization code if it exists var negatedLiteral = literal.MakeNegated(); if (negatedLiteral.IsTermPositive) { return(negatedLiteral.Term); } else { return(new NotExpr <T_Identifier>(negatedLiteral.Term)); } }
internal override IEnumerable <LiteralVertexPair <T_Identifier> > GetSuccessors( Vertex vertex) { LiteralVertexPair <T_Identifier>[] literalVertexPairArray = new LiteralVertexPair <T_Identifier> [2]; Vertex child1 = vertex.Children[0]; Vertex child2 = vertex.Children[1]; this.InitializeInverseVariableMap(); Literal <T_Identifier> literal1 = new Literal <T_Identifier>(this._inverseVariableMap[vertex.Variable], true); literalVertexPairArray[0] = new LiteralVertexPair <T_Identifier>(child1, literal1); Literal <T_Identifier> literal2 = literal1.MakeNegated(); literalVertexPairArray[1] = new LiteralVertexPair <T_Identifier>(child2, literal2); return((IEnumerable <LiteralVertexPair <T_Identifier> >)literalVertexPairArray); }
internal override IEnumerable<LiteralVertexPair<T_Identifier>> GetSuccessors(Vertex vertex) { var successors = new LiteralVertexPair<T_Identifier>[2]; Debug.Assert(2 == vertex.Children.Length); var then = vertex.Children[0]; var @else = vertex.Children[1]; // get corresponding term expression InitializeInverseVariableMap(); var term = _inverseVariableMap[vertex.Variable]; // add positive successor (then) var literal = new Literal<T_Identifier>(term, true); successors[0] = new LiteralVertexPair<T_Identifier>(then, literal); // add negative successor (else) literal = literal.MakeNegated(); successors[1] = new LiteralVertexPair<T_Identifier>(@else, literal); return successors; }