Automatically created functions: ty1_tyn.bn[simp] lifted equations for bn funs ty1_tyn.fv[simp] lifted equations for fv funs ty1_tyn.perm[simp] lifted permutation equations ty1_tyn.distinct[simp] lifted distincts ty1_tyn.eq_iff ty1_tyn.induct ty1_tyn.inducts instance ty1 and tyn :: fs ty1_tyn.supp empty when for too many bindings Smaller things: - lam.perm should be called permute_lam.simps (that is the convention from Nominal2) - maybe _perm whould be called permute_.simps; that would conform with the terminology in Nominal2 - we also need to lift the size function for nominal datatypes - Abs.thy contains lemmas for equivariance of the alphas; they are not yet used anywhere Bigger things: - Parser adds syntax for raw datatype, but should add for lifted datatype. - the alpha equivalence for Let as::assn t::trm bind "bn as" in t creates as premise EX pi. as ~~bn as' /\ (bn as, t) ~~lst (bn as', t') but I think it should be as ~~bn as' /\ EX pi. (bn as, t) ~~lst (bn as', t') (both are equivalent, but the second seems to be closer to the fv-function) - when there are more than one shallow binder, then alpha equivalence creates more than one permutation. According to the paper, this is incorrect. Example in Classical.thy. - check whether weirdo example in TestMorePerm works with shallow binders - nested recursion, like types "trm list" in a constructor - define permute_bn automatically and prove properties of it - prove renaming-of-binders lemmas - strong induction rules - check support equations for more bindings per constructor - For binding functions that call other binding functions the following are proved with cheat_tac: constr_rsp - store information about defined nominal datatypes, so that it can be used to define new types that depend on these - make parser aware of recursive and of different versions of abs Less important: - fv_rsp uses 'blast' to show goals of the type: a u b = c u d ==> a u x u b = c u x u d When cleaning: - remove all 'PolyML.makestring'.