--- a/Nominal/Perm.thy Tue May 04 06:05:13 2010 +0100
+++ b/Nominal/Perm.thy Tue May 04 06:24:54 2010 +0100
@@ -113,15 +113,14 @@
(* defines the permutation functions for raw datatypes and
proves that they are instances of pt
- dt_nos refers to the number of "un-unfolded" datatypes
+ user_dt_nos refers to the number of "un-unfolded" datatypes
given by the user
*)
-fun define_raw_perms (dt_info : Datatype_Aux.info) thy =
+fun define_raw_perms (dt_info : Datatype_Aux.info) user_dt_nos thy =
let
val {descr as dt_descr, induct, sorts, ...} = dt_info;
- val dt_nos = length dt_descr
val all_full_tnames = map (fn (_, (n, _, _)) => n) dt_descr;
- val full_tnames = List.take (all_full_tnames, dt_nos);
+ val user_full_tnames = List.take (all_full_tnames, user_dt_nos);
val perm_fn_names = prefix_dt_names dt_descr sorts "permute_"
@@ -135,7 +134,7 @@
val perm_eqs = maps perm_eq dt_descr;
val lthy =
- Theory_Target.instantiation (full_tnames, [], @{sort pt}) thy;
+ Theory_Target.instantiation (user_full_tnames, [], @{sort pt}) thy;
val ((perm_fns, perm_ldef), lthy') =
Primrec.add_primrec
@@ -143,8 +142,8 @@
val perm_zero_thms = prove_permute_zero lthy' induct perm_ldef perm_fns
val perm_plus_thms = prove_permute_plus lthy' induct perm_ldef perm_fns
- val perm_zero_thms' = List.take (perm_zero_thms, dt_nos);
- val perm_plus_thms' = List.take (perm_plus_thms, dt_nos)
+ val perm_zero_thms' = List.take (perm_zero_thms, user_dt_nos);
+ val perm_plus_thms' = List.take (perm_plus_thms, user_dt_nos)
val perms_name = space_implode "_" perm_fn_names
val perms_zero_bind = Binding.name (perms_name ^ "_zero")
val perms_plus_bind = Binding.name (perms_name ^ "_plus")