vocabulary Address;

/*

* Value Types
*/

City is written as String(64); Company Name is written as String; Family Name is written as String(20); Given Names is written as String(20); Number is written as String(12); Postcode is written as String; Street Line is written as String(64);

/*

* Entity Types
*/

Company is identified by its Name;

Family is identified by its Name;

Person is identified by Family and Given Names where

Person is of one Family,
Family includes Person,
Person has one Given Names;

Street is identified by first-Street Line and second-Street Line and third-Street Line where

Street includes one first-Street Line,
Street includes at most one second-Street Line,
Street includes at most one third-Street Line;

Address is identified by street-Number and Street and City and Postcode where

Address is at at most one street-Number,
Address is at one Street,
Address is in one City,
Address is in at most one Postcode restricted to {1000..9999},
Postcode is of Address;

Company has head office at at most one Address; Person lives at at most one Address;

/*

* Constraints:
*/

Street includes third Street Line

only if Street includes second Street Line;