This course teaches the basic elements found in a formal logic including
syntax for claims and rules for making deductions, as well as on how to
judge if the rules are suitable in the sense that they only lead to claims
that match the reality of the domain that are being reasoned.
The focus will be on formal logics for reasoning about program behavior.

The course teaches modern compiler techniques applied to
general-purpose programming language. The goal of the course is to
give students a working knowledge of the foundations, tools, and
engineering approaches used in developing formal language translators.
The emphasis is on the construction of compilers to position students
to build translators for little languages in their careers.

The course teaches a collection of techniques that lie at the
foundation of an approach to software development that can enable the
construction of large highly reliable software. That foundation is
specification of the precise meaning of the execution behavior of
software. The techniques covered span the development process ranging
from high-level semantic modeling, to system architecture design, and
to coding and debugging.