|      1 Function definitions |         | 
|      2  |         | 
|      3 - nominal_datatype should export proofs about alpha_bn: reflexivity, induction, ...? |         | 
|      4  |         | 
|      5 - nominal_datatype should declare xxx.fv_bn_eqvt as [eqvt] |         | 
|      6  |         | 
|      7 - equations that talk about True/False, for example |         | 
|      8     | "simp p (App t1 t2) = (if True then (App (simp p t1) (simp p t2)) else t1)" |         | 
|      9   do not work (since 'function' does not work) |         | 
|     10  |         | 
|     11 - equivariance for functions can be derived automatically (knowing termination and |         | 
|     12   equivariance of the graph). |         | 
|     13  |         | 
|     14 - for multiple simultanously defined functions, compatibility cases should fold the |         | 
|     15   definition and derive eqvt_at for the folded one |         | 
|     16  |         | 
|     17 - equivariance of the graph for multiple functions does not use equivariance |         | 
|     18   infrastructure |         | 
|     19  |         | 
|     20 Nominal_Datatype Parser should check that: |         | 
|     21  |         | 
|     22 - types of bindings match types of binding functions |         | 
|     23 - fsets are not bound in lst bindings |         | 
|     24 - bound arguments are not datatypes |         | 
|     25 - binder is referred to by name and not by type |         | 
|     26  |         | 
|     27 Smaller things: |         | 
|     28  |         | 
|     29 - maybe <t1_t2>.perm_simps should be called permute_<type>.simps; |         | 
|     30   that would conform with the terminology in Nominal2 |         | 
|     31  |         | 
|     32 - nominal_induct does not work without an induction rule |         | 
|     33  |         | 
|     34 - nominal_induct throws strange "THM" exceptions if not enough |         | 
|     35   variables are given |         | 
|     36  |         | 
|     37 - nominal_induct cannot avoid a term (for example function applied |         | 
|     38   to an argument). |         | 
|     39  |         | 
|     40 - .induct and .exhaust could be the default methods for induction/cases |         | 
|     41   on nominal datatypes |         | 
|     42  |         | 
|     43 Other: |         | 
|     44  |         | 
|     45 - nested recursion, like types "trm list" in a constructor |         | 
|     46  |         | 
|     47 - store information about defined nominal datatypes, so that |         | 
|     48   it can be used to define new types that depend on these |         | 
|     49  |         |