  We introduce contracts for linear dynamical systems with inputs and outputs.
Contracts are used to express formal specifications on the dynamic behaviour of
such systems through two aspects: assumptions and guarantees. The assumptions
are a linear system that captures the available knowledge about the dynamic
behaviour of the environment in which the system is supposed to operate. The
guarantees are a linear system that captures the required dynamic behaviour of
the system when interconnected with its environment. In addition to contracts,
we also define and characterize notions of contract refinement and contract
conjunction. Contract refinement allows one to determine if a contract
expresses a stricter specifications than another contract. On the other hand,
contract conjunction allows one to combine multiple contracts into a single
contract that fuses the specifications they express.
