The Z Specification Language Based on J. M. Spivey. An Introduction to Z and formal specifications, Software Engineering Journal, 4(1):40-50, January, 1989. 1 Outline • Basic notation of Z for specifying states and operations • Modularizing specification using schema calculus • Refining specifications 2 Formal Specifications • Use mathematical notation to describe properties of a system. • Describe “what” the system must do without saying “how” it is to be done. • Serve as a single, reliable reference point for those who investigate the customer’s needs, programmers, testers and those who writes instruction manuals for the system. • Is independent of the program code. 3 Underlying Ideas of Z (“Zed”) • Can use mathematical data types, e.g., numbers and sets, to model the data in a system • Can decompose a specification into small pieces called schemas, the main ingredient in Z. • Can use schemas to describe both static and dynamic aspects of a system. 4 Characteristics of Z • Based on sets and predicates (ZermeloFraenkel set theory) • Semi-graphical or visual notation (e.g., open boxes and x? and y!) • Schema for both data and operations • Schema calculus for modularizing specifications • Informal texts for explaining formal ones • ISO standard, ISO/IEC 13568:2002 5 Static vs. Dynamic Aspects • Static aspects – The states that a system can occupy. – The invariant relationships that are maintained as the system moves from state to state. • Dynamic aspects – The operations that are possible. – The relationship between their inputs and outputs. – The changes of state that happen. 6 How to Specify Static Aspects? • Use schemas---math in a box with a name attached---to describe the state space, i.e., state components/variables along with constraints. • Example: BirthdayBook for recording people’s birthdays – known: set of names with birthdays recorded – birthday: function from names to birthdays – Q: What does the constraint/invariant say? 7 State Schema: More Examples • Simple text editor with limited memory • Editor state modeled by two state variables, the texts to the left and right of the cursor 8 Example: Birthday Book • One possible state • Stated properties – – – – – No limit on the number of birthdays recorded No premature decision about the format of names and dates Q: How many birthday can a person have? Q: Does everyone have a birthday? Q: Can two persons share the same birthday? 9 Exercise • Write a Z specification to describe the state space of the following system. A teacher wants to keep a register of students in her class, and to record which of them have completed their homework. 10 How to Specify Dynamic Aspects? • Use schemas to describe operations – Syntactic: name, input and output, state components – Semantic/behavior: input/output relationship, state change/side effect • Example: AddBirthday – – – – Q: What’re inputs, outputs, and the state components referred to? Q: Is it total or partial? Q: What’s the pre and post-conditions? Q: What’s the meaning (semantic domain) of operation schemas? 11 And Notation • Syntactic sugar for introducing pre and poststate variables, e.g., – BirthdayBook [BirthdayBook; BirthdayBook’] – BirthdayBook [BirthdayBook | ?] 12 Stating and Proving Properties • E.g., known’ = known {name?} 13 More Example: FindBirthday • Use of notation • Specify no state change 14 More Example: Remind • Use of set comprehension notation – Selection (|) vs. collection () • Q: What does it return? 15 More Example: InitBirthdayBook • Describes the initial state of the system • By convention, use Init as prefix • Q: Initially, any maplet in the birthday function? 16 Exercise • Write a Z specification to describe the operations of the following system. A teacher wants to keep a register of students in her class, and to record which of them have completed their homework. – An operation to enroll a new student – An operation to record that a student (already enrolled in the class) has finished the homework – An operation to enquire whether a student (who must be enrolled) has finished the homework (answer in the set {yes, no}). ANSWER ::= yes | no 17 Schema Calculus • Modularize specifications by building large schemas from smaller ones, e.g., – Separating normal operations from error handling – Separating access restrictions from functional behaviors – Promoting and framing operations, e.g., reading named a file from reading a file – … => Separation of concerns • How? Provide operations for combining schemas, e.g., S1 S2 where S1 and S2 are schemas 18 Schema Calculus • Schema operator for every logical connective and quantifier • Conjunction and disjunction are most useful • Merge declarations and combine predicates, S1 [D1 | C1] S2 [D2 | C2] S1 S2 [D1; D2 | C1 C2] 19 Example 20 More Examples • Strengthening specifications by making partial operations total. • Q: How to make AddBirthday total? 21 Strengthening AddBirthday REPORT ::= ok | already_known 22 RAddBirthday Notice the framing constraint. Why? 23 Strengthening FindBirthday and Remind 24 RFindBirthday and RRemind REPORT ::= ok | already_known | not_known 25 Exercise • Specify a robust version of the class register system. A teacher wants to keep a register of students in her class, and to record which of them have completed their homework. – An operation to enroll a new student – An operation to record that a student (already enrolled in the class) has finished the homework – An operation to enquire whether a student (who must be enrolled) has finished the homework (answer in the set {yes, no}). ANSWER ::= yes | no 26 Refinement---From Specification to Designs and Implementation • Previously, Z to specify a software module • Now, Z to document the design of a programs • Key idea: data refinement – Describe concrete data structures (<-> abstract data in specification) – Derive descriptions of operations in terms of concrete data structures – Often data refinement leads to operation refinement or algorithm development 27 Specification Refinement • Done in a single or multiple steps • Referred to as direct refinement and deferred refinement data abstraction relation operation data refinement concrete data operation refinement deferred refinement direct refinement concrete operation 28 Implementation of Birthday Book • • • • Expressive clarity in abstract data structure Efficiency and representation in concrete data structure One possible representation NAME[] names; DATE[] dates; Q: Any better representation in Java? 29 Concrete State Model, BirthdayBook1 • Arrays modeled mathematically modeled as functions: • I.e., names[i] as names(i) andnames[i] = v as 30 Abstraction Relation, Abs • • Relation between abstract state space and concrete state space, e.g., BirthdayBook and BirthdayBook1 Q: Why abstract relation? 31 Operation Refinement, AddBirthday1 • Manipulate names and dates arrays 32 Correctness of Operation Refinement • • Whenever AddBirthday is legal in some abstract state, the implementation AddBirthday1 is legal in any corresponding concrete state, i.e., PreA PreC The final state which results from AddBirthday1 represents an abstract state which AddBirthday could produce, i.e., PostC PostA PreA PreC OpA OpC PostC PostC 33 Correctness of AddBirthday1 • • PreA PreC, i.e., Does this hold? Yes, because: 34 Correctness of AddBirthday1 • • PostC PostA Read the proof (p. 46) Abs(PostC) PostA 35 Implementation of AddBirthday1 void addBirthday(NAME name, DATE date) { hwm++; names[hwm] = name; dates[hwm] = date; } 36 Refinement of FindBirthday 37 Refinement of Remind 38 Refinement of InitBirthdayBook 39 Exercise • Implement the class register system specified earlier. Use two arrays. NAME[] names; YesOrNo[] finished; where YesOrNo is an enum consisting of yes and no. Document: – the concrete state space – the abstraction relation – the concrete operations 40