expand_proof now also takes an optional term describing the proposition
of the theorem to be expanded (to avoid problems with different theorems
having the same names).
types 'v binop = 'v => 'v => 'v
datatype ('a,'v) expr = Cex 'v
| Vex 'a
| Bex ('v binop) (('a,'v) expr) (('a,'v) expr)