The following are the topics we have covered in the course that have a large likelihood of showing up on the exam: - anything to do with assignments (in particular, properties of elevators) - software architecture - their role in software processes - difference between design and architecture - architectural description languages - modeling with Darwin - expressing statements in propositional and predicate logic - doing calculational proofs of statements expressed in propositional and predicate logics - doing calculational proofs of programs, including their time and space usage - expressing properties in CTL - safety vs. liveness - properties of the system vs. properties of the environment - modeling with SMV - the meaning of fairness - modeling of environment - showing equivalence of CTL formulas - semantics of CTL - principles of BDDs - why use them - advantages/disadvantages - design patterns - ????? You are responsible for anything that appeared in Chechik's lecture notes, and Hehner's lecture notes on propositional logic, on predicate logic, on computation tree logic, and on software design and verification by theorem proving, pages 1-17 and 19-28. In principle, you are not responsible for any other information; however, we suggest you consult the recommended text, Huth and Ryan, in particular, the following chapters: - chapter 1: all - chapter 2: sections 2.1-2.3 - chapter 3: sections 3.1-3.7 - chapter 4: all but different notations - chapter 6: section 6.1, 6.3.1-6.3.2 (we have looked at 6.2, but very briefly, and you will not be responsible for exact BDD algorithms)