Recursion and Induction -- CS 389r -- Syllabus

In this class, we will consider how serial, sequential programs are specified and how the correctness of their implementations is confirmed. This class will require careful thought as we will be pushing the boundaries of what the academic community considers to be an adequate specification and sufficient confirmation evidence that a program meets its specification. Typically, some form of testing is the only mechanism that is used to see if a program meets its specification -- this class will investigate both testing and other methods.

We will use proof-based techniques to determine the correctness of code. At first, we will investigate hand proofs; that is, we will use some informal notation to compare a specification program to an implementation program. We will also convert the behavior of some programs into a form that will allow a mechanical comparison of the behavior of two programs.

This class will be taught in an "inverted" style. That is, we will concentrate class time on examples, working through code, describing challenges, and exploring problems being faced by students. Thus, it is important that you bring your laptop to class. There will be lectures to introduce various topics, but primarily, we will use class time for problem solving, demonstrating how to use various tools, and exchanging information.

Tests and quizzes are open-book, open-notes affairs -- however, no electronic devices (laptops, cell phones, tablets, PDAs, calculators) of any kind are allowed during test and quiz events. As such, you may wish to have a physical copy of any materials that you believe will be helpful during quizzes and exams. Certainly, you should bring the "Hacker's Delight, 2nd editoin" class textbook; it will be helpful when taking quizzes and exams. Remember, cell phones are not allowed during exams; during quizzes and exams the remaining time will be periodically announced.

Note: this course requires students to program in a subset of Lisp.

For the adventurous student, special projects are possible. The content of a special project is pretty flexible -- so long as it has to do with specification and validation. For instance, I am interested in the development of an ISA model of IBM's Harvest computer, which was a extension of IBM's Stretch computer. Another possible specification project might involve some older microprocessor, e.g., the Motorola 68030 or the National Semiconductor NS32032. Or, a student might wish to formally specify RISC-V. Another project I'm looking for help with concerns booting FreeBSD or Linux on our evolving ACL2-based x86 ISA emulator. Other independent study projects are possible; please discuss your ideas with the instructor.

The value you get from this class will be directly related to the effort you (as a student) put forward. This class will require that you learn to work on your own, and this class may be less structured than many of the classes you have taken. If you have a laptop computer, you should bring it to class. Having a laptop is not a requirement, but it will be very helpful for students to be able to individually access information during class, and when we are discussing proof issues it may be helpful for you to try things immediately. Note, it is possible to checkout a Linux-based laptop from the UTCS Department; check with the instructor if you wish to borrow such a laptop.

Students will be encouraged to give short (five- to ten-minutes) presentations in class on particular topics. When well done, these presentations can serve in place of a missed quiz or homework. In fact, any student may be called upon to give a two- or three-minute presentation on something being discussed in class or on their solution to a homework problem. Please come to class prepared to work; we will sometimes stop for a few minutes to make sure that everyone that has a chance to consolidate their thinking and to help students overcome problems with their understanding or with questions about the in-class presentations.

Our office hours are listed on the main class web-page. In addition, if you need help, you may certainly seek out and visit with the class TA and/or the instructor(s). You may arrange to meet us at other times than those listed, but you will need to send E-mail to arrange a time. If we become too busy during the scheduled office hours, we will expand our office hours to meet the needs of the students. If you cannot come to the scheduled office hours due to conflicts with other classes, let us know quickly so we can make arrangements to meet your needs.

Class Schedule

The following gives an outline of what we will discuss. We are open to discussing other architecture topics of general interest, and we will include some of our own microprocessor design experience. The syllabus below is approximate; the exact rate at which we will cover some material will vary. Additional summary information about the class laboratories is available on the class laboratory and homework page.

  Schedule Below is Approximate, Lectures Dates May Change Slightly

  *** NOTE:  Exam dates are tentative until January 31, 2019  ***
  *** NOTE:  Lab assignments and due dates are tentative until assigned ***

Class    Date   Short Description

 00     Jan 23  Course Introduction

 01     Jan 28  Introduction to the ACL2 Logic, Data Types, Terms
 02     Jan 30  Substitution and Abbreviations for Terms

 03     Feb  4  Function Definitions, Axioms
 04     Feb  6  Terms as Formulas

 05     Feb 11  Definitions, Revisited
 06     Feb 13  Structural Induction

 07     Feb 18  Proof Problems
 08     Feb 20  More Proof Problems

 09     Feb 25  Arithmetic
 10     Feb 27  Problems

 11     Feb 26  Inadequacies of Structural Induction
 12     Feb 28  The Ordinals

 13     Mar  4  The Definitional Principle
 14     Mar  6 	The Induction Principle

 15     Mar 11  Student Presentation of Project Ideas
 16     Mar 13  Student Presentation of Project Ideas

        Mar 18 -- 23  Spring Break

 17     Mar 25  Relations between Recursion and Induction
 18     Mar 27  Discussion of more problems

 19     Apr  1  Checking the validity of SAT proofs
 20     Apr  3  Verifying the correctness of a proof checker

 21     Apr  8  Specifying and Embedding BDDs in the ACL2 Logic
 22     Apr 10  Proving Properties using BDDs

 23     Apr 15  Modeling Computer System Operation
 24     Apr 17  More Models of Computer System Operation

 25     Apr 22  General Verification
 26     Apr 24  In-class Exam

 27     Apr 29  Student Presentations
 28  *  May  1  Student Presentations

 29     May  6  Student Presntations
 30     May  8  Student Presntations


Homework

There will be six or so homework assignments given during the semester. On most weeks, homework will be assigned on Mondays and due nine days later (on Wednesdays) by class time. In some cases, 16 days will be given for some assignments. No homework will be assigned during the last five weeks of class. The lowest homework grade will be dropped in the computation of the final homework grade. Homework will not be accepted late.

Quizzes and Exams

There will be on, in-class (70- to 80-minute) examination. The material on exams will be cumulative. See the above schedule (marked with a * above) for the dates. There will no final exam. There will be several (two to four) unannounced "pop quizzes". The lowest quiz grade will be dropped. The examination must be taken at the scheduled time. Quizzes are offered at random times; each quiz will take 10 to 15 minutes.

Laboratory Project

The main result of this class will be student projects.

The weighting of the grades for the various aspects of the course are:

     Component       Percentage of Course Grade
     Exam:             30%
     Quizzes:          10%
     Homework:         20%
     Project:          40%

The grading for the entire course will be as follows:

    Course Score     Grade
     [90 -- 100]       A
     [87 --  90)       A-
     [85 --  87)       B+
     [80 --  85)       B
     [77 --  80)       B-
     [75 --  77)       C+
     [70 --  75)       C
     [67 --  70)       C-
     [65 --  67)       D+
     [60 --  65)       D
     [ 0 --  60)       F
Note the interval marks around the course-score column. For example, a course grade of B will be assigned if your semester grade is greater than or equal to 80 and less than 85. This also means that a course grade of at least 67 needs to be achieved for this course to count toward a UTCS degree.

The students that do well in this class are survivors. This class is a lot of work, and it is important to keep current. The material in this class is cumulative; it can be quite difficult to catch up if one falls behind. It is very important to keep doing and turning in your homework. Generally, homework grades are our most reliable indicator of how well a student will do in this class. Note, it is important to show up for class, as pop quizzes will be given, and material not reproduced in any particular book or web page may be discussed.

Return to CS389r course homepage.