There is a vast amount of literature on the algebraic specification of abstract data types. You may consult, for example,  [Dahl92].