public Constraints with(String name, Object... values) {
SchemaUtil.checkTypeConsistency(schema, strategy, name, values);
if (values.length > 0) {
checkContained(name, values);
// this is the most specific constraint and is idempotent under "and"
In added = Predicates.in(values);
if (values.length == 1) {
// if there is only one value, it is a provided value
return new Constraints(this, name, added, values[0]);
} else {
return new Constraints(this, name, added);