Assignment Number 1

1.  Please remember, while you are allowed to discuss the problem
definition and design issues with your peers, you solution to
this task should be your own!

2.  You will write an ML program, which meets the specifications
below.  It must be accessible (read/execute) globally on the UMBC
network.  It is due (paper copy to me)  10/10*/96 in class.  Please
identify (on the paper copy) where your code and test data is
stored (e.g. machine,directory,file name).

3.  Statements in the propositional calculus are:

	a) true or false
        b) boolean variables
	c) negations of another statement
	d) conjunction/disjunction/implication/equality
		of two other statements
	e) nothing else

Construct a datatype to represent this concept.

4.  Write an ML function which takes a propositional statement
and returns a list of the variable names.

5.  Write an ML function which takes a propositional statement,
and an environment (a list of variable/boolean constant pairs)
and returns the reduced statement.  That is, which replaces 
occurence of the variables with the appropriate boolean constants,
and does any possible simplification (note:  the environment
does not necessarily contain values for all the variables in
the statement).

6.  Write an ML function which determines whether a propositional
statement is a tautology (i.e. which determines whether it will
be true under any [full] environment).

7.  Please be sure to test your function on several sample
statements (I would recommend that some be tautologies, and
some not).

Grading Structure:

20% Proper Data Structure Defined
10% Find Variable names functions
 5% eliminates duplicates in name list 
    (can be done wherever appropriate)
20% partial evaluator function
25% tautology checker function
10% documentation/comments (clear but not excessive)
10% quality of test data   (adequately tests function)

* What an incredibly nice guy I am.