A custom language that targets a problem domain and defines the problem at a high level of abstraction.