directly computing the values of interest instead of composing functions in an unintelligent way that causes exponential much garbage; using the latest theory
added preliminary support for SMT datatypes (for now restricted to tuples and lists); only the Z3 interface (in oracle mode) makes use of it, there is especially no Z3 proof reconstruction support for datatypes yet
use eta-contracted version for occurrence check (avoids possible non-termination)
Test case: lemma "fwrap f = (%v. f v) ==> P f" apply clarify;
pointed out by Thomas Sewell