| author | Christian Urban <urbanc@in.tum.de> | 
| Wed, 25 Aug 2010 20:19:10 +0800 | |
| changeset 2433 | ff887850d83c | 
| parent 2432 | 7aa18bae6983 | 
| child 2434 | 92dc6cfa3a95 | 
| permissions | -rw-r--r-- | 
| 
2337
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
1  | 
(* Title: nominal_dt_alpha.ML  | 
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
2  | 
Author: Christian Urban  | 
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
3  | 
Author: Cezary Kaliszyk  | 
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
4  | 
|
| 
2426
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
5  | 
Performing quotient constructions and lifting theorems  | 
| 
2337
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
6  | 
*)  | 
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
7  | 
|
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
8  | 
signature NOMINAL_DT_QUOT =  | 
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
9  | 
sig  | 
| 
2400
 
c6d30d5f5ba1
defined qperms and qsizes
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2398 
diff
changeset
 | 
10  | 
val define_qtypes: (string list * binding * mixfix) list -> typ list -> term list ->  | 
| 
2337
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
11  | 
thm list -> local_theory -> Quotient_Info.quotdata_info list * local_theory  | 
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
12  | 
|
| 
2400
 
c6d30d5f5ba1
defined qperms and qsizes
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2398 
diff
changeset
 | 
13  | 
val define_qconsts: typ list -> (string * term * mixfix) list -> local_theory ->  | 
| 
2337
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
14  | 
Quotient_Info.qconsts_info list * local_theory  | 
| 2346 | 15  | 
|
| 
2431
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
16  | 
val define_qperms: typ list -> string list -> (string * sort) list ->  | 
| 
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
17  | 
(string * term * mixfix) list -> thm list -> local_theory -> local_theory  | 
| 
2400
 
c6d30d5f5ba1
defined qperms and qsizes
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2398 
diff
changeset
 | 
18  | 
|
| 
2431
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
19  | 
val define_qsizes: typ list -> string list -> (string * sort) list ->  | 
| 
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
20  | 
(string * term * mixfix) list -> local_theory -> local_theory  | 
| 
2426
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
21  | 
|
| 
2430
 
a746d49b0240
updated to new Isabelle
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2428 
diff
changeset
 | 
22  | 
val lift_thm: Proof.context -> typ list -> thm list -> thm -> thm  | 
| 
2337
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
23  | 
end  | 
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
24  | 
|
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
25  | 
structure Nominal_Dt_Quot: NOMINAL_DT_QUOT =  | 
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
26  | 
struct  | 
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
27  | 
|
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
28  | 
(* defines the quotient types *)  | 
| 
2400
 
c6d30d5f5ba1
defined qperms and qsizes
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2398 
diff
changeset
 | 
29  | 
fun define_qtypes qtys_descr alpha_tys alpha_trms alpha_equivp_thms lthy =  | 
| 
2337
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
30  | 
let  | 
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
31  | 
val qty_args1 = map2 (fn ty => fn trm => (ty, trm, false)) alpha_tys alpha_trms  | 
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
32  | 
val qty_args2 = (qtys_descr ~~ qty_args1) ~~ alpha_equivp_thms  | 
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
33  | 
in  | 
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
34  | 
fold_map Quotient_Type.add_quotient_type qty_args2 lthy  | 
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
35  | 
end  | 
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
36  | 
|
| 2338 | 37  | 
|
| 
2337
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
38  | 
(* defines quotient constants *)  | 
| 
2400
 
c6d30d5f5ba1
defined qperms and qsizes
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2398 
diff
changeset
 | 
39  | 
fun define_qconsts qtys consts_specs lthy =  | 
| 
2337
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
40  | 
let  | 
| 2338 | 41  | 
val (qconst_infos, lthy') =  | 
42  | 
fold_map (Quotient_Def.lift_raw_const qtys) consts_specs lthy  | 
|
| 
2337
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
43  | 
val phi = ProofContext.export_morphism lthy' lthy  | 
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
44  | 
in  | 
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
45  | 
(map (Quotient_Info.transform_qconsts phi) qconst_infos, lthy')  | 
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
46  | 
end  | 
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
47  | 
|
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
48  | 
|
| 
2400
 
c6d30d5f5ba1
defined qperms and qsizes
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2398 
diff
changeset
 | 
49  | 
(* defines the quotient permutations and proves pt-class *)  | 
| 
2431
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
50  | 
fun define_qperms qtys qfull_ty_names tvs perm_specs raw_perm_laws lthy =  | 
| 2346 | 51  | 
let  | 
| 
2431
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
52  | 
  val _ = tracing ("qtys:\n" ^ cat_lines (map @{make_string} qtys))
 | 
| 
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
53  | 
|
| 
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
54  | 
val lthy1 =  | 
| 
2401
 
7645e18e8b19
modified the code for class instantiations (with help from Florian)
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2400 
diff
changeset
 | 
55  | 
lthy  | 
| 
 
7645e18e8b19
modified the code for class instantiations (with help from Florian)
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2400 
diff
changeset
 | 
56  | 
|> Local_Theory.exit_global  | 
| 
2431
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
57  | 
    |> Class.instantiation (qfull_ty_names, tvs, @{sort pt}) 
 | 
| 2398 | 58  | 
|
| 
2431
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
59  | 
val (qs, lthy2) = define_qconsts qtys perm_specs lthy1  | 
| 
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
60  | 
|
| 
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
61  | 
val ((_, raw_perm_laws'), lthy3) = Variable.importT raw_perm_laws lthy2  | 
| 2398 | 62  | 
|
| 
2431
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
63  | 
val lifted_perm_laws =  | 
| 
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
64  | 
map (Quotient_Tacs.lifted lthy3 qtys []) raw_perm_laws'  | 
| 
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
65  | 
|> Variable.exportT lthy3 lthy2  | 
| 2398 | 66  | 
|
| 2346 | 67  | 
fun tac _ =  | 
68  | 
Class.intro_classes_tac [] THEN  | 
|
| 
2400
 
c6d30d5f5ba1
defined qperms and qsizes
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2398 
diff
changeset
 | 
69  | 
(ALLGOALS (resolve_tac lifted_perm_laws))  | 
| 2346 | 70  | 
in  | 
| 
2431
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
71  | 
lthy2  | 
| 2398 | 72  | 
|> Class.prove_instantiation_exit tac  | 
| 
2401
 
7645e18e8b19
modified the code for class instantiations (with help from Florian)
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2400 
diff
changeset
 | 
73  | 
|> Named_Target.theory_init  | 
| 2346 | 74  | 
end  | 
75  | 
||
| 
2337
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
76  | 
|
| 
2400
 
c6d30d5f5ba1
defined qperms and qsizes
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2398 
diff
changeset
 | 
77  | 
(* defines the size functions and proves size-class *)  | 
| 
2431
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
78  | 
fun define_qsizes qtys qfull_ty_names tvs size_specs lthy =  | 
| 
2400
 
c6d30d5f5ba1
defined qperms and qsizes
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2398 
diff
changeset
 | 
79  | 
let  | 
| 
 
c6d30d5f5ba1
defined qperms and qsizes
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2398 
diff
changeset
 | 
80  | 
fun tac _ = Class.intro_classes_tac []  | 
| 
 
c6d30d5f5ba1
defined qperms and qsizes
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2398 
diff
changeset
 | 
81  | 
in  | 
| 
2401
 
7645e18e8b19
modified the code for class instantiations (with help from Florian)
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2400 
diff
changeset
 | 
82  | 
lthy  | 
| 
 
7645e18e8b19
modified the code for class instantiations (with help from Florian)
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2400 
diff
changeset
 | 
83  | 
|> Local_Theory.exit_global  | 
| 
2431
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
84  | 
  |> Class.instantiation (qfull_ty_names, tvs, @{sort size})
 | 
| 
2401
 
7645e18e8b19
modified the code for class instantiations (with help from Florian)
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2400 
diff
changeset
 | 
85  | 
|> snd o (define_qconsts qtys size_specs)  | 
| 
2400
 
c6d30d5f5ba1
defined qperms and qsizes
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2398 
diff
changeset
 | 
86  | 
|> Class.prove_instantiation_exit tac  | 
| 
2401
 
7645e18e8b19
modified the code for class instantiations (with help from Florian)
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2400 
diff
changeset
 | 
87  | 
|> Named_Target.theory_init  | 
| 
2400
 
c6d30d5f5ba1
defined qperms and qsizes
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2398 
diff
changeset
 | 
88  | 
end  | 
| 
 
c6d30d5f5ba1
defined qperms and qsizes
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2398 
diff
changeset
 | 
89  | 
|
| 
2426
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
90  | 
|
| 
2431
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
91  | 
(* lifts a theorem and cleans all "_raw" instances  | 
| 
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
92  | 
from variable names *)  | 
| 
2426
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
93  | 
|
| 
2431
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
94  | 
local  | 
| 
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
95  | 
val any = Scan.one (Symbol.not_eof)  | 
| 
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
96  | 
val raw = Scan.this_string "_raw"  | 
| 
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
97  | 
val exclude =  | 
| 
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
98  | 
Scan.repeat (Scan.unless raw any) --| raw >> implode  | 
| 
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
99  | 
val parser = Scan.repeat (exclude || any)  | 
| 
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
100  | 
in  | 
| 
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
101  | 
fun unraw_str s =  | 
| 
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
102  | 
s |> explode  | 
| 
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
103  | 
|> Scan.finite Symbol.stopper parser >> implode  | 
| 
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
104  | 
|> fst  | 
| 
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
105  | 
end  | 
| 
2426
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
106  | 
|
| 
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
107  | 
fun unraw_vars_thm thm =  | 
| 
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
108  | 
let  | 
| 
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
109  | 
fun unraw_var_str ((s, i), T) = ((unraw_str s, i), T)  | 
| 
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
110  | 
|
| 
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
111  | 
val vars = Term.add_vars (prop_of thm) []  | 
| 
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
112  | 
val vars' = map (Var o unraw_var_str) vars  | 
| 
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
113  | 
in  | 
| 
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
114  | 
Thm.certify_instantiate ([], (vars ~~ vars')) thm  | 
| 
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
115  | 
end  | 
| 
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
116  | 
|
| 
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
117  | 
fun unraw_bounds_thm th =  | 
| 
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
118  | 
let  | 
| 
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
119  | 
val trm = Thm.prop_of th  | 
| 
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
120  | 
val trm' = Term.map_abs_vars unraw_str trm  | 
| 
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
121  | 
in  | 
| 
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
122  | 
Thm.rename_boundvars trm trm' th  | 
| 
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
123  | 
end  | 
| 
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
124  | 
|
| 
2430
 
a746d49b0240
updated to new Isabelle
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2428 
diff
changeset
 | 
125  | 
fun lift_thm ctxt qtys simps thm =  | 
| 
2433
 
ff887850d83c
everything now lifts as expected
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2432 
diff
changeset
 | 
126  | 
thm  | 
| 
 
ff887850d83c
everything now lifts as expected
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2432 
diff
changeset
 | 
127  | 
|> Quotient_Tacs.lifted ctxt qtys simps  | 
| 
2426
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
128  | 
|> unraw_bounds_thm  | 
| 
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
129  | 
|> unraw_vars_thm  | 
| 
2431
 
331873ebc5cd
can now deal with type variables in nominal datatype definitions
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2430 
diff
changeset
 | 
130  | 
|> Drule.zero_var_indexes  | 
| 
2426
 
deb5be0115a7
moved lifting code from Lift.thy to nominal_dt_quot.ML
 
Christian Urban <urbanc@in.tum.de> 
parents: 
2401 
diff
changeset
 | 
131  | 
|
| 
2337
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
132  | 
end (* structure *)  | 
| 
 
b151399bd2c3
fixed according to changes in quotient
 
Christian Urban <urbanc@in.tum.de> 
parents:  
diff
changeset
 | 
133  |