1. A method for optimizing a boolean network having a plurality of functions, a plurality of inputs and a plurality of nodes, comprising the steps of: a. locating any cube-free divisors in the boolean network which apply to at least two of said plurality of functions; b. selecting the greatest divisor, wherein said greatest divisor is the cube-free divisor which brings about the largest net savings and wherein the net savings comprises both an area savings component and a power savings component; c. replacing the greatest divisor with a variable in each of said plurality of functions so as to enable further optimization; and d. adding said variable to said boolean network to create an optimized boolean network.