Constraint propagation working (though redundancy is required in isValid and constrain)