the mutual recursion between these two functions is a bit hard to follow. perhaps just return from `validate_dt_props` and then call into `validate`?