Requirements, specifications, and programs are distinguished by the phenomena they concern. Re quirements are about phenomena of the application do main, and describe properties of the domain that the machine is required to bring about and maintain. The application domain is informal, and serious difficulties are encountered both in describing it and in reasoning about it. Requirements are complex, so they must be decomposed. Decomposition is based on the recogni tion of simple sub-problems, characterised by problem frames.