Formal Synthesis of Digital Systems