prove_constructors_distinct : (thm -> thm)
|- !f0 f1. ?! fn. (!x. fn(LEAF x) = f0 x) /\ (!b1 b2. fn(NODE b1 b2) = f1(fn b1)(fn b2)b1 b2)prove_constructors_distinct proves and returns the theorem:
|- !x b1 b2. ~(LEAF x = NODE b1 b2)This states that leaf nodes are different from internal nodes. When the concrete type in question has more than two constructors, the resulting theorem is just conjunction of inequalities of this kind.