Declarative specification languages with constraints are used in model-driven engineering to specify formal semantics, define model transformations, and describe domain constraints. While these languages support concise specifications, they are nevertheless prone to difficult semantic errors. In this paper we present a type-theoretic approach to the static detection of specification errors. Our approach infers approximations of satisfying assignments and represents them via a canonical regular type system. Type inference is experimentally efficient and type judgments are comprehensible by the user.