Integrating Formal Methods with Model-Driven Engineering