This course is an introduction to the theoretical side of computer science. It teaches students how to construct proofs, as well as read and write literate formal mathematics. It also does a tour of standard concepts used in theoretical computer science, such as modular arithmetic, sets and functions, relations, trees and graphs, counting and countability, and asymptotic analysis of algorithms.
This course is typically offered in fall, spring, and summer terms.
We try to ensure that everyone who needs to take the course can get into it, with CS majors having priority. If you can't register because registration is locked or partly locked or the class is full, here are the instructions. CS majors should consult with the CS academic office. If you are not (or not yet) a CS major, look here for pointers to the waitlist sign-up form and/or other information. Right now (late August 2012), the course is open for general registration and seems to have enough seats for everyone.
If you have an A- or above in the prerequisite courses (or a strong academic record and transfer/proficiency credit for these classes), you may wish to register for the honors add-on to this class: CS 196, section 73. This 1-sh course covers supplementary topics, which vary from term to term. Contact the instructor for details. This package of 173 plus 196 will count as an honors class for the James Scholar requirements. However, if you are in a college other than Engineering, you also need to set up an "Honors Credit Learning Agreement." See the CS academic office for details.
This course is designed for students who have taken introductory programming (CS 125 or ECE 190) and one term of calculus (Math 220, 221) and received a C- or better grade. Similar courses at other institutions, as well as CS 101 and Math 234, should be acceptable substitutes. If you are taking the new ECE sequence, we expect you to have completed ECE 198KL (not just ECE 198JL). Specifically, the course assumes strong fluency with precalculus, and programming experience (in any language) that includes writing recursive functions and manipulating arrays and linked lists.
If you have done well in another class that teaches proof construction (e.g. Math 347/348), or have taken a more advanced math class (e.g. abstract algebra or real analysis) that assumes the ability to write proofs, you should probably take the proficiency exam rather than this course.
The proficiency exam is given at the start of each term, typically during the first week of classes or during the following weekend. Schedule and sign-up information is at Computer Science Proficiency Exams. These exams are similar to course final exams, except shorter (typically two hours long). To get a sense of whether you can pass the exam and to prepare for the exam, look through the lecture notes and exam preparation materials on the web pages for recent offerings of the course (see below).
To get proficiency credit, you must score at least a C- on the proficiency exam. This requires being familiar with a reasonable percentage of the specific topics from the course and, also, being able to write acceptable proof and display an understanding of recursion/induction. If you don't pass the exam, nothing appears on your record. You may either take the course (recommended) or re-take the proficiency exam.
You cannot get proficiency credit if you have previously taken CS 173. If you have taken CS courses above the level of 225 and 232, it may not be possible to get proficiency credit. (Check with the CS academic office.) Even if you can't get credit, you can still use the proficiency exam to get exempted from the CS 173 course requirement.
It is also possible to take the final exam at the end of the term as a proficiency exam. Contact the instructor during the last couple weeks of classes.
Web pages for new terms typically appear right before the start of the term (e.g. in August for fall classes).