1. A method for designing a coherent shared-memory system comprising: accepting an input specification for the shared-memory system that includes a specification of a plurality of state transition rules for the shared-memory system, including accepting a precondition and an action associated with each of the state transition rules, wherein the plurality of state transition rules includes a first subset of rules and a second subset of rules such that correct operation of the memory system is provided by application of all of the rules in the first subset of rules and any selective application of rules in the second subset of rules; accepting a specification of a policy, including accepting preconditions for application of rules in the second subset of state transition rules; and combining the specification of the policy and the input specification of the state transitions rules to form an output specification of a plurality of state transition rules, including combining preconditions associated with rules in the second subset of rules and the policy to determine preconditions for application of actions associated with the second subset of rules.