Instructor  J. Garrett Morris 
garrettm@ku.edu  
Office  Eaton 2028 
Office hours  TH 2:205:00 PM, and by appointment 
Course website  https://ittc.ku.edu/~garrett/eecs210s20/ https://piazza.com/ku/spring2020/eecs210 
Lectures  TH 9:3010:45, Learned 1136 
The syllabus is available here.
Edsger Dijkstra (1972 recipient of the Turing Award) has said that "computer science is no more about computers than astronomy is about telescopes". This course will introduce you to the concepts and intellectual tools needed to separate (the ideas of) computer science from any particular choice of (that is to say, restriction to) particular machines and the ways they are operated.
We will frame these concepts in formal mathematics. (Although, at this point, it might be more correct to say that the foundations of mathematics lie in formal computer science.) If we want to talk about how long program X takes to run on machine M with data set A, we can rely on empirical measurement and observation. However, we will need something more than observation to validate claims about how long program X would take on an arbitrary machine or for arbitrary input data. This course, then, interleaves an introduction to mathematical reasoning with a survey of the basic objects, notations, and techniques used in computer science.
By mathematical reasoning, I mean proof. You should not find this intimidating. You may have think of proofs as a kind of rarified accomplishment produced by brilliant young theoreticians. And, some of you will be brilliant young theoreticians. But a proof is really just any believable mathematical argumentit's the advanced version of "showing your work". Proofs are the language of mathematics, and much of computer science; my own work is full of theorems and proofs. And, just as how in highschool algebra or calculus you learn standard approaches and useful tricks for solving probles, we'll discover that there are standard approaches and useful tricks for constructing proofs in computer science or mathematics.
We'll also learn about a collection of (formal) objects and ideas that will provide the foundation for much of what you'll learn in the rest of your CS education. We'll learn about sets, relations, and functions, which will serve as the foundations for our formal representations, and are closely connected to how we describe computation abstractly. We'll learn about combinatorics (which is a big word for counting) and probability, which lie at the foundation of many ideas in cryptography and data science. And, we'll learn about graphs and trees, which we can use to represent things from physical networks to interacting software components to programming language syntax.
Hopefully you're excited by what I've said so far, and eager to see how these ideas play out for their own sake. But I realize that many of you are future software engineers and systems architects, not future theoreticians. Why should you take this course? First, many of the ideas we'll begin to explore are relevant to practice. Logic underlies the development of new programming languages and new approaches to verifying programs in existing languages. For example, Amazon uses a tool called TLA+, based in formal logic, to assure that key components of AWS won't crash or misbehave under load. Combinatorics and probability underlie publickey infrastructures, like RSA or ellipticalcurve cryptography. These in turn guarantee everything from ecommerce purchases to the blockchains. Trees appear in many areas of computer science, from programming language compilers to geographic information systems to video game renderers.
I believe that the ideas of theoretical computer science are remarkable for both their beauty and their practicality. I hope by the end of this course, you'll agree. Welcome aboard!
Homework assignments and solutions are no longer available.
Number  Due date  Assignment  Sample solutions 
1  Tuesday, January 28, 9:30 AM  HW1.pdf  HW1ans.pdf 
2  Thursday, February 6, 9:30 AM  HW2.pdf  HW2ans.pdf 
3  Tuesday, February 11, 9:30 AM  HW3.pdf  HW3ans.pdf 
4  Tuesday, February 18, 9:30 AM  HW4.pdf  HW4ans.pdf 
5  Tuesday, February 25, 9:30 AM  HW5.pdf  HW5ans.pdf 
6  Tuesday, March 3, 9:30 AM  HW6.pdf  HW6ans.pdf 
7  Tuesday, March 24, 9:30 AM  HW7.pdf  HW7ans.pdf 
8  Tuesday, March 31, 9:30 AM  HW8.pdf  
9  Tuesday, April 7, 9:30 AM  HW9.pdf  
10  Tuesday, April 14, 9:30 AM  HW10.pdf  
11  Tuesday, April 21, 9:30 AM  HW11.pdf 
date  topics  reading  notes 
1/21 
Administrivia and organization Logic 
Rosen 1.1—1.3  Homework 1 out 
1/23  No class—instructor away  
1/28  Quantifiers  Rosen 1.4—1.5  
1/30  Logic in practice: program verification in Dafny 
Homework 2 out Due on Thursday 2/6. 

2/4 2/6 
Proof methods and strategies 
Rosen 1.6—1.8 Notes on natural deduction 
Homework 3 out 
2/11  Sets and set operations  Rosen 2.1—2.2  Homework 4 out 
2/13  Exam 1  
2/18 2/20 
Relations  Rosen 9.1, 9.3—9.6  Homework 5 out 
2/25 2/27 
Functions  Rosen 2.3  Homework 6 out 
3/3 3/5 
Basic modular arithmetic  Rosen 4.1—4.3  Homework 7 out 
3/24  Cardinality  Rosen 2.5  Homework 8 out 
3/26  Exam 2  
3/24 3/26 
Induction  Erickson, Proof by Induction  
3/31 4/2 
Counting, combinations, and permutations  Rosen 6.1—6.3, 6.5  
4/7  Discrete probability  Rosen 7.1—7.4  
4/9  Recurrence relations  Rosen 8.1, 8.3  
4/14  More counting  Rosen 8.5—8.6  
4/16 4/21 4/23 
Graphs  Rosen 10.1—10.6  
4/28 4/30 5/5 5/7 
Trees  Rosen 11.1—11.5 