The course presents propositional logic, predicate logic, and modal logic. The course is organized around the study of algorithms that manipulate these logics, including algorithms for proof and refutation.
Classical results, including soundness, completeness, undecidability of some theories, and compactness, are obtained by systematically studying the algorithms. Algorithms for satisfiability and model checking are studied in depth. Examples and problems illustrate the use of logic in reasoning about programs and systems.
The algorithms studied will be written in the Haskell programming language. The course aims for small, clear, and elegant programs that are easy to understand. Efficiency of the programs is not an important issue. While some familarity with Haskell would be beneficial, good programmers should catch on quickly.
The class will combine both traditional lecture, and signifcant student led discussion focused on the study of programs written by both the instructor and the students in the class. If you ever wanted to learn a new subject by writing exploratory programs and by studying your and other class members programs, this is the class for you.
Students will be assessed by a series of exercises, problem sets, projects, and presentations.
Exercises will be shared in class. They may be peer critiqued. They will not be formally graded, but submission of exercises will be tracked. Students should prepare exercises in advance and deposit them in the class "repository" on D2L. Participation in the presentation and critique of exercises will be part of class participation, which will be 20% of the grade.
Problem sets are to be handed in. They will be graded by the instructors. These grades will be recorded. Problem sets will account for 20% of the grade.
Projects will be larger in scope and significantly more open ended than problem sets. Each student will do one project. The project grade is 40% of the grade
Presentations: students will be asked to prepare presentations on lecture topics, exercises, and on their projects. Presentations will typically be 20 to 30 minute lecture segments. Presentations will account for 20% of the grade. Presentations will be evaluated for clarity, organization, technical content, and overall effectiveness.