1. A method for optimizing a logic network, comprising: receiving a first logic network which defines a logical function,; creating an intermediate logic network based on the first logic network, wherein the intermediate logic network defines an intermediate logical function which is different from the logical function of the first logic network; optimizing the intermediate logic network using an optimization process that preserves the intermediate logical function to create an optimized intermediate logic network; and creating an optimized first logic network which preserves the logical function based on the optimized intermediate logic network.