CS 641 Lecture -*- Outline -*- * Introduction of myself ask for names * Course Objectives ** apply tools of semantics types (static analysis), lambda calculus semantic description methods (denotational semantics, axiomatic, oper.) formal semantics of specification techniques soundness of verification methods translate descriptions into interpreters (prototyping) ** justification *** need applications to keep interest so spec languages, verification methods *** design small features (semantics gives consistency, etc.) full abstraction (making semantic descriptions agree) *** honesty formal semantics takes care of details, helps you learn about limits of certain approaches e.g., F=ma in physics * Problem (focus for the course) ** how to design programs in a modular fashion? modules: functions, abstract data types, collections of procs design: modules, interfaces, specifications how to specify, verify modules? abstraction (reasoning at a high level) ** how can a type system help? checking interfaces *** subtypes? refinement, subcontracting, design decisions ** will concentrate on fundamentals (semantics, tools), not techniques (vs. 512) ** what is not being covered? standard denotational semantics at length semantic prototyping systems * Red Tape Getting in touch with me e-mail and coms.class.641 list text: don't *have to* buy Schmidt if you don't have it already Grading. Experiment: no grading during term meetings at least once every 2 weeks not for evaluation purposes (except prodding) final grade based on oral final, evidence (HW, keep it, can redo it) only figures into grade at end of term homework collaboration Format of discussions: discussion of previous stuff (quiz), lecture please ask questions, come prepared Machines: HP-UX machines (zippy, zaphod, snowhite, dwarfs) will use SML for for itself and for making things "live" * Course content ** Semantics = meaning e.g., 3+4 = 7 syntactically, this is nonsense, semanticically it is trivial pragmatically, one only says this to someone whoo is trying to learn arithmetic algorithm vs. function pragmatic aspects distinguish different algorithms for computing same function ** Models usually a mathematical entity that is an abstraction of syntactic aspects, capturing essentials, leaving out inessentials e.g., the integers as model of arithmetic (peano axioms) *** of programming languages function as a model of a program (denotational) rewrite scheme (operational) properties and inference scheme (axiomatic) *** of specification languages e.g., a sequence with certain operations as a model of a specification of stacks ** Course specification *** Prerequisites lambda calculus? functional programming? denotational semantics? *** Description emphasis on connections for pedagogical purposes *** Objectives (already covered above) ** Course outline (summarize plan of course) *** Standard ML modern language, great interest advanced modularity features, advanced type system will use related specification language (extended ML) *** Type theory use of constructive logic tools to study type checking, semantics where standard denotational semantics concerns will apply primarily study of typed lambda calculus and variants language syntaxes subtyping *** Specification necessary for verification spec languages are like programming languages focus on algebraic methods (perhaps algebraic spec of prog. lang.) fundamentals subtyping for abstract types *** Verification make connection with semantics for soundness, completeness (full abs.) focus on refinement and modularity, subtyping *** Other topics (if time) Milner's CCS (concurrency) algebraic semantics see intro to literature