vocabulary MultipleSubtyping;

/*

* Value Types
*/

Person Name is written as String;

/*

* Entity Types
*/

Person is identified by its Name;

Teenager is a kind of Person;

Adult is a kind of Person;

Child is a kind of Person;

Female is a kind of Person;

Male is a kind of Person;

/*

* Constraints:
*/

for each Person exactly one of these holds:

Person is a Child,
Person is a Teenager,
Person is an Adult;

either Person is a Male or Person is a Female but not both;