type expr =
    EFalse
  | ETrue
  | EVar of string
  | EAnd of expr * expr
  | EOr of expr * expr
  | ENot of expr
  | EForall of string * expr
  | EExists of string * expr

type asst = (string * bool) list

type bvec = expr list (* low order bit at head of list *)

let eval a e = failwith "Unimplemented"

let free_vars e = failwith "Unimplemented"

let sat e = failwith "Unimplemented"

let int_of_bvec v = failwith "Unimplemented"

let bvec_of_int i = failwith "Unimplemented"

let subst a v = failwith "Unimplemented"

let zero v = failwith "Unimplemented"

let bitand v1 v2 = failwith "Unimplemented"

let eq v1 v2 = failwith "Unimplemented"

let add v1 v2 = failwith "Unimplemented"

(* type-correct, broken implementations: *)

let lt v1 v2 = EFalse

let gt v1 v2 = EFalse

let le v1 v2 = EOr (eq v1 v2, lt v1 v2)

let ge v1 v2 = EOr (eq v1 v2, gt v1 v2)

let mult v1 v2 = v1
