[ home
| schedule
| assignments
| projects
| resources
| handouts
| overview
| links
]
15-815 Automated Theorem Proving
Projects
The implementation projects are an essential part of this class.
They replace homework assignments and the final in the second half
of the course.
There are three project groups:
See the table below for weekly task assignments.
Within each group, there are 5 responsibilites which are re-assigned
every week.
- Interface
- Validation
- Search
- Redundancy Elimination
- Coordination
See the table above on the tasks for each week. The binding of students to
responsibilities each week is left up to the groups. They should be done in
such a way that everyone has done each of the 5 jobs throughout the 5-week
project.
If a student should be unavailable during a week, it is the coordinator's
job to distribute the workload.
- At the end of each week, each student must send me a weekly
progress report, including a pointer to the files or materials created
or edited.
- Everyone should do their best to complete their task by the deadline.
If this is impossible, a stable, but perhaps incomplete state should
be achieved. Completion of the task then carries over into someone else's
responsibility the following week.
- Each week, the coordinator should send me a summary report
for the whole group's progress.
- The programming language for the project is
Standard ML. This resource
page contains more information on using SML at CMU. We will
be using the Compilation Manager (CM).
- The version control system is
CVS. This resource
page contains more information on the repository and conventions
in effect for this class.
- The emphasis in this course is clarity, elegance, and beauty,
not efficiency.
- If there is simple, elegant, but inefficient way to write
a function, do it. Efficiency will be achieved at the level of
algorithms, not through hacks.
- If you are tempted to improve the efficiency of the code at the
expense of clarity, close your eyes, take a few deep breaths, and wait
until the urge passes.
- Write or negotiate signatures before you write
signficant code. This is essential in a multi-person project.
- Renegotiate changes to your signature with affected parties.
- Break down the overall code in your module into small
functions.
- Lay out the code with a standard tab stop (8 spaces) to a width
no more than 100 characters. Take advantage of SML mode in Emacs or
XEmacs. Pay attention to the look of the code---others will have to
read and modify it!
- Annotate all functions with their invariants.
- Clearly state complex invariants at the beginning of a section
of code which relies on them.
- Avoid the pervasive use of weakly structures datatypes such as lists.
The type-checker can verify more invariants with more specialized types.
- You should not use any extensions is SML of New Jersey which go
beyond or are in conflict with the official definition and standard
library.
- The emphasis in this course is clarity, elegance, and beauty,
not efficiency.
[ home
| schedule
| assignments
| projects
| resources
| handouts
| overview
| links
]
Frank Pfenning
fp@cs