public ProgramState SetConstraint(SymbolicValue symbolicValue, SymbolicValueConstraint constraint) { if (constraint == null) { return(this); } var updatedConstraintsMap = Constraints.AddConstraintForSymbolicValue(symbolicValue, constraint); updatedConstraintsMap = updatedConstraintsMap.AddConstraintTo <EqualsRelationship>(symbolicValue, constraint, this); if (constraint is BoolConstraint) { updatedConstraintsMap = updatedConstraintsMap.AddConstraintTo <NotEqualsRelationship>(symbolicValue, constraint.OppositeForLogicalNot, this); } return(new ProgramState( Values, updatedConstraintsMap, ProgramPointVisitCounts, ExpressionStack, Relationships)); }