Faculty: Formal specification and implementation of basic abstract data types