(* We represent variables as strings containing a name *)
type variable = string;
(* equality on variable names *)
fun eqVar (v0:variable) (v1:variable) = (v0 = v1);
(* Formulas are either... *)
datatype formula =
True (* boolean True *)
| False (* boolean False *)
| Var of variable (* a simple variable *)
| Not of formula (* a negation of a single formula *)
| And of (formula list) (* a conjunction of several formulas *)
| Or of (formula list) (* a disjunction of several formulas *)
| Implies of formula * formula; (* an implication between one formula
* and another *)