CS 641 units -*- Outline -*- History in 1990 the course focused on denotational semantics and type theory. in 1992, we used the book Essentials of Programming Languages, and worked with lambda prolog and type inference. in 1994 the emphasis is on axiomatic sematics * introduction problems and techniques of semantics * ML ** standard-ml core language, modules, large programs,static semantics of modules (used in 1990) ** type-reconstruction type system, reconstruction algorithms (used in 1990) * Type Theory ** typed-lambda-calculus type frames, subtyping, partial homomorphisms, cccs (used in 1990) ** fixpoints fixed points and recursion (denotational semantics), full abstraction (used in 1990) ** subtyping-cardelli records, variants, and function subtyping a la Cardelli (at a later date, could do subtyping for higher order types) (used in 1990) ** higher-order-types implicit type systems (with recursive types, intersection types), explicit systems: second order types (F2, \2), stratified systems (F-omega, \-omega), propositions as types (\P), the calculus of constructions (used in 1990) * Specification ** spec-overview the correctness problem, relation to sematics and verification, notion of an implementation as semantics of specification (used in 1990) ** equational-spec examples, review of equational deduction, algebras, free algebra, initial algebra, parameterization, with some emphasis on category theory. Institutions, specification building operations, Extended ML. (planned for, but not realized in 1990) ** interface-spec mutable types, relation to equational specifications, Larch or Specs (planned for, but not realized in 1990) ** refinement-of-specs incompleteness and sufficient completeness, refinement notions, Schoett's work, Extended ML's notions of refinement. (planned for, but not realized in 1990) * Verification ** verification-overviews methods based on denotational semantics, pre and postconditions, the language Euclid, Hoare logics weakest preconditions, etc. (planned for, but not realized in 1990) ** axiomatic-semantics definition of programming languages by axioms in a logic, Dijkstra's language, the lambda calculus (?). (planned for, but not realized in 1990) ** transformational-implementation reasoning about functional programs, higher-order programs, applications to ML. (planned for, but not realized in 1990) ** refinement-and-verification overview (Liskov-Guttag style verification), Hoare's rep invariants and abstraction functions, Verification in Extended ML. Use of subtypes in object-oriented programs. (planned for, but not realized in 1990) ** recursive-function-verification Problems of verification with recursive functions, Verifications with recursive functions and subtypes! (planned for, but not realized in 1990)