Nominal/Lift.thy
changeset 1276 3365fce80f0f
parent 1274 d867021d8ac1
child 1277 6eacf60ce41d
--- a/Nominal/Lift.thy	Thu Feb 25 15:41:23 2010 +0100
+++ b/Nominal/Lift.thy	Fri Feb 26 10:34:04 2010 +0100
@@ -40,6 +40,7 @@
 val thy1 = @{theory};
 val tnames = ["rtrm2", "ras"];
 val ftname = "Lift.rtrm2"
+val ntnames = [(@{binding trm2}, @{typ rtrm2}), (@{binding as}, @{typ ras})]
 val binds = [[[[]], [[], []], [[], [(SOME @{term rbv2}, 0)]]], 
              [[[], []]]  (*, [[], [[], []]] *) ];
 val bv_simps = @{thms rbv2.simps}
@@ -55,7 +56,7 @@
 val ((raw_perm_def, raw_perm_simps, perms), thy2) = define_raw_perms tnames full_tnames thy1;
 val lthy1 = Theory_Target.init NONE thy2
 val (((fv_ts_loc, fv_def_loc), alpha), lthy2) = define_fv_alpha ftname binds lthy1;
-val alpha_ts = #preds alpha
+val alpha_ts_loc = #preds alpha
 val alpha_intros = #intrs alpha
 val alpha_cases = #elims alpha
 val alpha_induct = #induct alpha
@@ -63,26 +64,35 @@
 val fv_def = ProofContext.export lthy2 lthy1 fv_def_loc
 val morphism = ProofContext.export_morphism lthy2 lthy1
 val fv_ts = map (Morphism.term morphism) fv_ts_loc
+val alpha_ts = map (Morphism.term morphism) alpha_ts_loc
 val (bv_eqvts, lthy3) = build_eqvts @{binding bv_eqvts} [@{term rbv2}] [hd (tl perms)] 
   (bv_simps @ raw_perm_def) @{thm rtrm2_ras.inducts(2)} lthy2;
 val (fv_eqvts, lthy4) = build_eqvts @{binding fv_eqvts} fv_ts_loc perms (fv_def_loc @ raw_perm_def) induct lthy3;
-val alpha_eqvt = build_alpha_eqvts alpha_ts perms (raw_perm_def @ alpha_inj) alpha_induct lthy4;
-val alpha_equivp = build_equivps alpha_ts induct alpha_induct inject alpha_inj distinct alpha_cases alpha_eqvt lthy4
+val alpha_eqvt = build_alpha_eqvts alpha_ts_loc perms (raw_perm_def @ alpha_inj) alpha_induct lthy4;
+val alpha_equivp_loc = build_equivps alpha_ts_loc induct alpha_induct inject alpha_inj distinct alpha_cases alpha_eqvt lthy4;
+val alpha_equivp = ProofContext.export lthy4 lthy1 alpha_equivp_loc
+val lthy5 = define_quotient_type
+  (map (fn ((b, t), alpha) => (([], b, NoSyn), (t, alpha))) (ntnames ~~ alpha_ts))
+  (ALLGOALS (resolve_tac alpha_equivp)) lthy4;
+val ((c, def), lthy6) = Quotient_Def.quotient_lift_const ("Vr2", @{term rVr2}) lthy5
+*}
 
+ML {*
+val thyf = Local_Theory.exit_global lthy6;
 *}
+setup {* fn _ => thyf *}
+print_theorems
+
 
 
 
 ML {*
-  val thyf = Local_Theory.exit_global lthy4
+val lthy5 = define_quotient_type
+  (map (fn ((b, t), alpha) => (([], b, NoSyn), (t, alpha))) (ntnames ~~ alpha_ts))
+  (ALLGOALS (resolve_tac alpha_equivp)) lthy4
 *}
-setup {* fn _ => thyf *}
-print_theorems
 
 ML {*
-(*val thyn = @{theory}
-val lthy3 = Theory_Target.init NONE thyn;*)
-build_equivps alpha_ts induct alpha_induct inject alpha_inj distinct alpha_cases @{thms alpha2_eqvt} lthy2
 
 *}