A semantic framework of abstract data types