Formal Specification Techniques: An Overview