Add bindings of recursive types by free_variables.
--- a/Quot/Nominal/Fv.thy Wed Feb 17 15:20:22 2010 +0100
+++ b/Quot/Nominal/Fv.thy Wed Feb 17 15:28:50 2010 +0100
@@ -67,7 +67,7 @@
val {descr, ...} = Datatype.the_info @{theory} "Fv.rtrm1";
val sorts = [];
val bindsall = [
- [[[]], [[], []], [[(NONE, 0)], [(NONE, 0)]], [[], [], [(SOME @{term bv1}, 0)]]],
+ [[[]], [[], []], [[(NONE, 0)], [(NONE, 0)]], [[(NONE, 0)], [], [(SOME @{term bv1}, 0)]]],
[[], [[]], [[], []]]
];
fun nth_dtyp i = typ_of_dtyp descr sorts (DtRec i);
@@ -82,8 +82,10 @@
val args = map Free (names ~~ Ts);
val c = Const (cname, Ts ---> (nth_dtyp i));
val fv_c = Free (nth fv_names i, (nth_dtyp i) --> @{typ "atom set"});
- (* TODO we assume that all can be 'atomized' *)
- fun fv_bind (NONE, i) = mk_single_atom (nth args i)
+ fun fv_bind (NONE, i) =
+ if is_rec_type (nth dts i) then (nth fv_frees (body_index (nth dts i))) $ (nth args i) else
+ (* TODO we assume that all can be 'atomized' *)
+ mk_single_atom (nth args i)
| fv_bind (SOME f, i) = f $ (nth args i);
fun fv_arg ((dt, x), bindxs) =
let