A machine can be thought of as a collection of resources together with a definition of the ways in which these resources can interact. For a real machine these resources actually exist as tangible objects, each of the type expected; for example, addressable storage on a real machine will actually consist of the appropriate number of words of storage, together with suitable address decoders and access mechanisms. It is possible to define an abstract machine, by listing the resources it contains and the interactions between them, without building the machine. Such abstract machines are often of use in attempting to prove the properties of programs, since a suitably defined abstract machine may allow the suppression of unneeded detail. See virtual machine.