CS 641 meeting -*- Outline -*- * Introduction write the name of the course on the board. ** Who introduce self and meet everyone have them write names on board ** motivation for refinement calculus (course spec) ------------------------------------------ WHY REFINEMENT CALCULUS? Proving programs correct is - important + safety critical systems + business critical systems + teaching, research - impossible, in general Open problems: - reasoning about higher-order code + procedural abstractions + callbacks - reasoning about concurrency - reasoning about OOP, AOP - reasoning about components - reasoning about maintenance, improvement, optimization Wide spectrum language - specifications and - programs Want "lightweight" formalisms - elegant theory - easy for programmers to understand ------------------------------------------ *** more abstract semantic technique seeing others using wp semantics, refinement calculus impressed by brevity compared to denotational, makes others able to publish faster, more often easier to understand because more abstract *** more easily applied closely related to programming, verification, spec. languages. want to use it to give semantics to JML verification gives insight into safe coding practices conversely, what can be verified might make good language design Euclid, Alphard want eventually to do that for OOP, AOP *** it's new for me want to see how this compares to more standard It's also fairly new for the community as a whole, although it is gaining currency Q: what about the material interests you? ** Plan of course (syllabus) overview, motivation and a bit of history week 1 mathematical background: higher-order logic, predicates, etc. weeks 2-6 rest of book, as far as we can go... statements, nondeterminism, iteration, weeks 7-15 summary and evaluation at the end Q: Would you make any changes to the plan? ** Objectives *** meta - get you to think critically Q: What kind of questions should you be asking? limitations? utility? - teach you some semantics and formal methods *** normal In one sentence, the main objective is that you will be able to: - design a refinement calculus for a small programming language, - examine its quality using mathematical techniques, and - use it to design and prove correct small programs. Focus on sequential programs, but allow nondeterminism. ------------------------------------------ OBJECTIVES - Explain the goals of the refinement calculus - How to use it in semantics - Its advantages, disadvantages, limits - Judge and improve the quality of refinement calculus semantics - Explain and generalize the its ideas from sequential and nondeterministic programs - Use the refinement calculus to calculate correct implementations ------------------------------------------ ** How I'll run the course *** overview informal and friendly, I'm going to try not to lecture too much lecture meetings: get old homework back (you keep it), discuss homework, if any (some put on board), hand in homework discuss next topic homework: you'll do a term project, perhaps get a paper out of it. term project will be some extension of the ideas, esp. to OOP, AOP, components, security, etc. Can work alone or with others. Q: would you like to work on some kind of term project like these? grading: based on evidence, participation, project, final oral exam I'll give comments on homework, grades if you want them pace: we'll try to uncover and explore carefully want deep understanding of that material (semantics) for homework, we'll be flexible, *** red tape prerequisites (ok to not have 531 this offering, but need 541 or math) books: Back and von Wright's book on reserve also other books on using refinement calculus are on reserve ** summary Q: any other questions about the course?