I. Introduction
Increasingly, modern software must meet both functional and non-functional requirements. For example, non-functional requirements such as execution time, memory usage, and power consumption are of particular importance in designing software for low-cost, low-power embedded systems. Even where non-functional requirements are not specified explicitly, it is often implicitly desirable to reduce resource consumption.