Mathematical programming approaches to the synthesis of chemical process systems