C241
Computer Science Department , Indiana University rev. Tue Oct 28 11:35:43 EDT 2008 [SDJ]
NEWS INFO HOMEWORK DESCRIPTION TOPICS TEXT

C241 - Discrete Structures for Computer Science - Fall 2006

What's New -- Look here regularly for postings
21 dec
•  Final scores [PDF] and a chart [PDF] hae been posted.
19 dec
•  Chart of class rankings as of December 17 [PDF]
17 dec
•  Practice problems for Test 3 [PDF] and solutions [PDF]
16 dec
•  Test 3 is scheduled for 5:00–7:00 p.m., Fri., December 19, in our regular classroom (BH305)
•  Christine will be in her office from 4:30-6:30 today (Tuesday) and 10:00–6:00 tomorrow.
12 dec
•  Free-week lectures, [PDF] [PDF] [PDF]
26 nov
•  Preliminary draft of Chapter 8 [PDF].
17 nov
•  Practice problems for Test Two [PDF]
28 oct
•  Lecture notes on program performance evaluation [PDF]

Course Information
Meetings: Lecture: 2:30-3:45 MW BH305 Discussion: 11:15-1:10 F LI033 (Library) Honors Discussion: 9:05-11:00 F BH144
Instructor: Steve Johnson (sjohnson)
Office hours: 11:15AM–12:15PM MW, Lindley 330F; or by appointment. Students welcome any time my door is open
Assoc. Instr.: C. Task: (ctask), Tuedays, 4:30PM–6:30PM, LH130 (desk in the back of the room near the windows).
Dylan Bargatze (UI)
Danielle Krug (UI)
Text:
[PDF] Electronically distributed Lecture Notes
[HTM] Information for the H241 discussion group

Homework Assignments—about 10, equally weighted—are due at the beginning of class on Wednesday of the specified week.
  Week Due Assignment Solns
1 2 [PDF] [PDF]
2 3 [PDF] [PDF]
3 W, 9/24 [PDF] [PDF]
4 W, 10/1 [PDF] [PDF]
W, 10/8 In-class Test One  
5 W, 10/22 [PDF] [PDF]
6 W, 10/29 [PDF] [PDF]
7 W, 11/5 [PDF] [PDF]
8 W, 11/12 [PDF] [PDF]
  W, 11/19 In-class Test Two [PDF]
9 W, 12/3 [PDF] [PDF]
10 W, 12/10 [PDF] [PDF]
11 W, 12/10 Complete departmental course & instructor evaluations.
  F, 12/19 In-class Test Three (Final Exam) 5:00–7:00PM, BH305


§ Catalog description

C241 Discrete Structures for Computer Science (3 cr.) P: C211. Induction and recursive programs, running time, asymptotic notations, combinatorics and discrete probability, trees and lists, the relational data model, graph algorithms, propositional and predicate logic.

§ General Description.

This course introduces fundamental mathematical concepts and techniques used throughout the computer science curriculum. It defines mathematical structures used to model digital computation from the level of discrete ``logic'' and finite-state machines to that of programing languages and concurrent systems.

A one-semester course at this level has the choice of aspects to emphasize, including

  1. Program correctness. How can you determine with mathematical certainty, whether or not a program does what it is supposed to do? To answer this kind of question, one needs to define a mathematical model of program meaning and develop ways to reason about these models. Further courses in this line include C311, P415 and B510.
  2. Program performance. When is one program ``better than'' another in the sense that it runs faster or uses fewer resources? To answer this kind of question one needs to define ways to measure program performance and estimate execution parameters over a range of inputs. Futher courses along this line include B343 and B403.
  3. Theory of computation. What is a ``computer?'' How do various theoretical models compare with one another? Are there problem classes that no computer can solve? (The answer is yes). Further courses along this line include B401 and B502.

In this version of C241 centers on program correctness, but not to the exclusion of the other aspects. Proving program correctness provides a thread, or ``story line,'' and a goal. Ultimately, the goal is to show, in a precise way, how to formulate a statement of program correctness as a mathematical theorem.

However, the object is not to learn how to prove a specific program but, rather, how understanding program proving guides us to better insight into what programs mean and better programming methods.


§ Background.

The mathematical basis of computer science is different from that of the Natural Sciences. Computing is discrete in character, whereas the physical world is regarded to be continuous. This means that much of the mathematical preparation in primary and secondary education does not directly apply to computer science. However, the general mathematical maturity that derives from that training does.

Participants are expected to be comfortable with algebra at a level expected in a first-semester Calculus class. Perhaps more important, they should be able to follow and perform mathematical arguments. Proficiency with mathematical reasoning varies among participants in this course, so do not be intimidated if you feel you lack experience. The goal is to get better.

One thing to bear in mind is that writing a program and proving a theorem involve essentially the same thought processes–as will be demonstrated by the end of the course. So if you're a good programmer, you have good mathematical aptitudes. Bringing the aptitudes to the surface, where you can use them, is a largely a matter of practice.

It is assumed that course participants have taken the course C211, Introduction to Computer Science. At IU, the programming language used in C211 is Scheme. Programming proficiency in Scheme is not crucial–there will be few, if any, programming assignments. Using recursive programming techniques is more important. If you have programmed in any "functional" language (Haskell, ML, etc.) you have the needed exposure.

If you have not been exposed to these programming languages and methods, but have taken courses in Logic or have generally good mathematical skills, you should be able to succeed in this course–but taking C211 concurrently is recommended.


§ Objectives.

An important goal of this course is to learn how to organize and present one's analysis of a problem. A standard way to show that a problem can be solved is to present an algorithm (program) for solving it. However, if the problem is hard or the solution is ingenious, it often requires additional explanation (i.e. a proof) to convince someone that the solution is indeed correct.

Concrete goals of this course include:

  1. Understanding the topics listed in the catalog description.
  2. Understanding how to define and reason about mathematical models used to specify programming languages, programs, and their properties.
  3. Exposure to basic terminoloty and results in countability, decidability, complexity,
  4. Familiarity with the numerous forms of inductive argument used throughout computer science.
  5. Understanding of the relationship between logic and programming, the difference between verification (proving that a program works correctly on all inputs) and testing (demonstrating that a program works correctly on some inputs), and insight into the nature of software desgin.

§ Topic Outline. This is a provisional outline of topics covered in this course. The numbers indicate the expected number of lectures on each topic.

  1. [1] Sets, Languages
  2. [3] Logic and Boolean Algebra
    1. Logical Connectives
    2. Truth Tables
    3. Boolean Algebra
    4. Normal Forms
    5. Applications*
  3. [4] Counting
    1. Cardinality
    2. Permutations and Combinations
    3. Decision Trees
  4. [2] Numerical Induction
  5. [3] Order
    1. Countability
    2. Order Notation
    3. Decidability, Complexity
  6. [4] Relations
    1. Functions
    2. Relations on a Single Set
    3. Trees
    4. DAGs
    5. Applications*
  7. [5] Structural Induction
    1. Inductively Defined Sets
    2. Principle of Structural Induction
    3. Defining Functions by Recursion
    4. Applications*
  8. [3] Automata
    1. Automata as recognizers
    2. Relationship to Regular Languages
    3. Applications*
  9. [2] Languages and Meanings
    1. Language Definitions
    2. Specifying Precedence
    3. Language Interpretations
    4. Languages over a Data Type
    5. Language of Expressions
    6. Language of Statements

Suggested Reading: These references are not required, but may be of interest to students seeking more or broader information about topics in this course. Feel free to ask the Instructor for additional reading suggestions.


§ Evaluation.

Your grade is based on performance on approximately 12 homework assignments, two one-hour in-class tests and a two-hour final examination, according to the following percentages:

20% Homework
25% Test One, 75 minutes, given in the 5th or 6th week.
25% Test Two, 75 minutes, given in the 12th or 13th week.
30% Final Exam, 120 minutes, as scheduled by the Registrar during finals week.
5% Participation, attendence, bonus problems, etc. Generally, participation credit is considered only in borderline cases.

Homework. Homework assignments are due at the beginning of class on the assigned date. Assignments turned in late are penalized 15% per day beyond the due date. If you are unable to attend class to turn in a homework assignment or find someone to turn it in for you, you may place it in the mail box labled "C. Task" (i.e. the AI's mail box, not Instructor's box nor the large drop box) The mail boxes in the Computer Science Main Office, LH215. You must also notify the AI by email that it is there. Late penalties are assessed at the time this notification message was sent.

Tests. Generally, tests focus on topics covered in lecture but not on the previous test; so they are not ``cumulative'' in that sense. At the same time, the topics a cumulative in the sense that they build on previous terminology, definitions and theorems in the course; so some degree of cumulative knowledge is required. It is also assumed that, throughout the course, participants are gaining proficiency in both reading and writing mathematical arguments.

Grade levels are generally based on demonstration of acquired skills:

D Ability to define and reason about inductive structures. Understanding the basic concepts and terminology of graphs, trees and languages. Understanding of logical operations and ideas of equivalence and normal forms.
[ Your performance is insufficient for a successful computer science major and needs to be addressed. ]
C In addition, understanding concepts underlying order estimation, how to assign meaning to a language, basic concepts relating to automata, greater facility using induction and recursion. Higher ability to conduct proofs.
[ You may have a deficiency in mathematics that puts completion of a CS degree at risk. ]
B In addition, insight into formal aspects of proofs. Understanding scoping issues in predicate logic and their relationship to programing languages. Understanding Hoare style program logics. Proving both sequential and functional programs.
[ You are making good progress toward the successful completion of a BS or BA degree in computer science. If you are considering graduate study, consider building more strength in mathematics. ]
A In addition, the ability to apply these concepts problems beyond those explicity encountered in class examples and homework. A level of "fluency" in mathematical comprehension and reasoning.
[ You are "on track" toward completing an undergraduate computer science major and the prospect of advancing to professional (MS) or graduate (PhD) levels of study. ]

It is not assumed that performance measures (tests, homeworks, etc.) are precise. Grading is neither strictly on a scale nor stictly on a "curve" (statistical cut-offs). In other words, I make judgements, subject to these considerations:


General Advice

As in any mathematics class, it is vital to do the homework, especially early on. The beginning concepts may be easy to grasp, but the ideas and methods build on one another as the semester progresses.

Academic Integrity Please review: The Computer Science Department Statement on Academic Integrity and consult with the Instructor if you have any questions about the policy.

It is important for many students to understand that learning mathematics is a social process of interaction. Students are encouraged to work together on the homework. Engage with both the Instructor and the Associate Instructor for individual guidance.

Of course, the down side of collaboration is that is can, in some instances, enable cheating. If you work with another student on homework, it is extremely important to acknowledge the collaboration with a written statement on the work turned in, for example, ``Judy Smith and I worked together on this assignment.'' Presenting someone else's work as your own is plagiarism, for which the penalties are severe: failure in the course and possibly expulsion.

If the Associate Instructor–or another student in the class–has been particularly helpful to you throughout the semester, please send a note of acknowledgment to the Instructor. People who show skill in teaching for education should be recognized.

Incompletes: Please review The Computer Science Department Incomplete Policy. A grade of I is intended for circumstances in which a student is inhibited from course involvement for a few days, up to a very few weeks. Incompletes are not awarded for students who fall behind in the course work and can't catch up, or who suffer circumstances that preclude long-term course participation. As a general rule for this class, if an incomplete is to be considered, it must be possible to make up the missed work within 2-4 weeks. In no case, will an incomplete be allowed when a student needs to re-take the course to learn the material.

Withdrawal: If you are considering withdrawing, please consult with the instructor for a detailed analysis of your performance in the course. Prior to the Official Withdrawal Date, students will receive sufficient performance feedback (at least one test and several homework assignments) to make a judgment about continuing in the course. Beyond that date, withdrawing students need authorization from the Instructor, Program Chair and Dean. And the Instructor is required to specify a ``passing'' or ``failing'' status for the student.