| author | Christian Urban <urbanc@in.tum.de> | 
| Sat, 28 Nov 2009 02:54:24 +0100 | |
| changeset 423 | 2f0ad33f0241 | 
| parent 399 | 646bfe5905b3 | 
| child 466 | 42082fc00903 | 
| permissions | -rw-r--r-- | 
| 381 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 1 | ML {*
 | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 2 | fun repeat_eqsubst_thm ctxt thms thm = | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 3 | repeat_eqsubst_thm ctxt thms (eqsubst_thm ctxt thms thm) | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 4 | handle _ => thm | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 5 | *} | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 6 | |
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 7 | |
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 8 | ML {*
 | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 9 | fun eqsubst_prop ctxt thms t = | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 10 | let | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 11 | val goalstate = Goal.init (cterm_of (ProofContext.theory_of ctxt) t) | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 12 | val a' = case (SINGLE (EqSubst.eqsubst_tac ctxt [0] thms 1) goalstate) of | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 13 | NONE => error "eqsubst_prop" | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 14 | | SOME th => cprem_of th 1 | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 15 | in term_of a' end | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 16 | *} | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 17 | |
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 18 | ML {*
 | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 19 | fun repeat_eqsubst_prop ctxt thms t = | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 20 | repeat_eqsubst_prop ctxt thms (eqsubst_prop ctxt thms t) | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 21 | handle _ => t | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 22 | *} | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 23 | |
| 379 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 24 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 25 | text {* tyRel takes a type and builds a relation that a quantifier over this
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 26 | type needs to respect. *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 27 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 28 | fun tyRel ty rty rel lthy = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 29 | if Sign.typ_instance (ProofContext.theory_of lthy) (ty, rty) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 30 | then rel | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 31 | else (case ty of | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 32 | Type (s, tys) => | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 33 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 34 |               val tys_rel = map (fn ty => ty --> ty --> @{typ bool}) tys;
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 35 |               val ty_out = ty --> ty --> @{typ bool};
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 36 | val tys_out = tys_rel ---> ty_out; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 37 | in | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 38 | (case (maps_lookup (ProofContext.theory_of lthy) s) of | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 39 | SOME (info) => list_comb (Const (#relfun info, tys_out), | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 40 | map (fn ty => tyRel ty rty rel lthy) tys) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 41 | | NONE => HOLogic.eq_const ty | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 42 | ) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 43 | end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 44 | | _ => HOLogic.eq_const ty) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 45 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 46 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 47 | (* | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 48 | ML {* cterm_of @{theory} 
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 49 |   (tyRel @{typ "'a \<Rightarrow> 'a list \<Rightarrow> 't \<Rightarrow> 't"} (Logic.varifyT @{typ "'a list"}) 
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 50 |          @{term "f::('a list \<Rightarrow> 'a list \<Rightarrow> bool)"} @{context}) 
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 51 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 52 | *) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 53 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 54 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 55 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 56 | fun mk_babs ty ty' = Const (@{const_name "Babs"}, [ty' --> @{typ bool}, ty] ---> ty)
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 57 | fun mk_ball ty = Const (@{const_name "Ball"}, [ty, ty] ---> @{typ bool})
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 58 | fun mk_bex ty = Const (@{const_name "Bex"}, [ty, ty] ---> @{typ bool})
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 59 | fun mk_resp ty = Const (@{const_name Respects}, [[ty, ty] ---> @{typ bool}, ty] ---> @{typ bool})
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 60 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 61 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 62 | (* applies f to the subterm of an abstractions, otherwise to the given term *) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 63 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 64 | fun apply_subt f trm = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 65 | case trm of | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 66 | Abs (x, T, t) => | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 67 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 68 | val (x', t') = Term.dest_abs (x, T, t) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 69 | in | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 70 | Term.absfree (x', T, f t') | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 71 | end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 72 | | _ => f trm | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 73 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 74 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 75 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 76 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 77 | (* FIXME: if there are more than one quotient, then you have to look up the relation *) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 78 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 79 | fun my_reg lthy rel rty trm = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 80 | case trm of | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 81 | Abs (x, T, t) => | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 82 | if (needs_lift rty T) then | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 83 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 84 | val rrel = tyRel T rty rel lthy | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 85 | in | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 86 | (mk_babs (fastype_of trm) T) $ (mk_resp T $ rrel) $ (apply_subt (my_reg lthy rel rty) trm) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 87 | end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 88 | else | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 89 | Abs(x, T, (apply_subt (my_reg lthy rel rty) t)) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 90 |   | Const (@{const_name "All"}, ty) $ (t as Abs (x, T, _)) =>
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 91 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 92 | val ty1 = domain_type ty | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 93 | val ty2 = domain_type ty1 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 94 | val rrel = tyRel T rty rel lthy | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 95 | in | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 96 | if (needs_lift rty T) then | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 97 | (mk_ball ty1) $ (mk_resp ty2 $ rrel) $ (apply_subt (my_reg lthy rel rty) t) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 98 | else | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 99 |            Const (@{const_name "All"}, ty) $ apply_subt (my_reg lthy rel rty) t
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 100 | end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 101 |   | Const (@{const_name "Ex"}, ty) $ (t as Abs (x, T, _)) =>
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 102 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 103 | val ty1 = domain_type ty | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 104 | val ty2 = domain_type ty1 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 105 | val rrel = tyRel T rty rel lthy | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 106 | in | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 107 | if (needs_lift rty T) then | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 108 | (mk_bex ty1) $ (mk_resp ty2 $ rrel) $ (apply_subt (my_reg lthy rel rty) t) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 109 | else | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 110 |            Const (@{const_name "Ex"}, ty) $ apply_subt (my_reg lthy rel rty) t
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 111 | end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 112 |   | Const (@{const_name "op ="}, ty) $ t =>
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 113 | if needs_lift rty (fastype_of t) then | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 114 | (tyRel (fastype_of t) rty rel lthy) $ t (* FIXME: t should be regularised too *) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 115 |       else Const (@{const_name "op ="}, ty) $ (my_reg lthy rel rty t)
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 116 | | t1 $ t2 => (my_reg lthy rel rty t1) $ (my_reg lthy rel rty t2) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 117 | | _ => trm | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 118 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 119 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 120 | (* For polymorphic types we need to find the type of the Relation term. *) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 121 | (* TODO: we assume that the relation is a Constant. Is this always true? *) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 122 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 123 | fun my_reg_inst lthy rel rty trm = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 124 | case rel of | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 125 | Const (n, _) => Syntax.check_term lthy | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 126 | (my_reg lthy (Const (n, dummyT)) (Logic.varifyT rty) trm) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 127 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 128 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 129 | (* | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 130 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 131 |   val r = Free ("R", dummyT);
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 132 |   val t = (my_reg_inst @{context} r @{typ "'a list"} @{term "\<forall>(x::'b list). P x"});
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 133 |   val t2 = Syntax.check_term @{context} t;
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 134 |   cterm_of @{theory} t2
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 135 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 136 | *) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 137 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 138 | text {* Assumes that the given theorem is atomized *}
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 139 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 140 | fun build_regularize_goal thm rty rel lthy = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 141 | Logic.mk_implies | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 142 | ((prop_of thm), | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 143 | (my_reg_inst lthy rel rty (prop_of thm))) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 144 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 145 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 146 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 147 | fun regularize thm rty rel rel_eqv rel_refl lthy = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 148 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 149 | val goal = build_regularize_goal thm rty rel lthy; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 150 | fun tac ctxt = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 151 | (ObjectLogic.full_atomize_tac) THEN' | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 152 | REPEAT_ALL_NEW (FIRST' [ | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 153 | rtac rel_refl, | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 154 | atac, | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 155 |         rtac @{thm universal_twice},
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 156 |         (rtac @{thm impI} THEN' atac),
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 157 |         rtac @{thm implication_twice},
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 158 | EqSubst.eqsubst_tac ctxt [0] | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 159 |           [(@{thm equiv_res_forall} OF [rel_eqv]),
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 160 |            (@{thm equiv_res_exists} OF [rel_eqv])],
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 161 | (* For a = b \<longrightarrow> a \<approx> b *) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 162 |         (rtac @{thm impI} THEN' (asm_full_simp_tac HOL_ss) THEN' rtac rel_refl),
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 163 |         (rtac @{thm RIGHT_RES_FORALL_REGULAR})
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 164 | ]); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 165 | val cthm = Goal.prove lthy [] [] goal | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 166 |       (fn {context, ...} => tac context 1);
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 167 | in | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 168 | cthm OF [thm] | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 169 | end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 170 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 171 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 172 | (*consts Rl :: "'a list \<Rightarrow> 'a list \<Rightarrow> bool" | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 173 | axioms Rl_eq: "EQUIV Rl" | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 174 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 175 | quotient ql = "'a list" / "Rl" | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 176 | by (rule Rl_eq) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 177 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 178 |   ctyp_of @{theory} (exchange_ty @{context} (Logic.varifyT @{typ "'a list"}) (Logic.varifyT @{typ "'a ql"}) @{typ "nat list \<Rightarrow> (nat \<times> nat) list"});
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 179 |   ctyp_of @{theory} (exchange_ty @{context} (Logic.varifyT @{typ "nat \<times> nat"}) (Logic.varifyT @{typ "int"}) @{typ "nat list \<Rightarrow> (nat \<times> nat) list"})
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 180 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 181 | *) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 182 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 183 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 184 | (* returns all subterms where two types differ *) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 185 | fun diff (T, S) Ds = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 186 | case (T, S) of | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 187 | (TVar v, TVar u) => if v = u then Ds else (T, S)::Ds | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 188 | | (TFree x, TFree y) => if x = y then Ds else (T, S)::Ds | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 189 | | (Type (a, Ts), Type (b, Us)) => | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 190 | if a = b then diffs (Ts, Us) Ds else (T, S)::Ds | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 191 | | _ => (T, S)::Ds | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 192 | and diffs (T::Ts, U::Us) Ds = diffs (Ts, Us) (diff (T, U) Ds) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 193 | | diffs ([], []) Ds = Ds | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 194 | | diffs _ _ = error "Unequal length of type arguments" | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 195 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 196 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 197 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 198 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 199 | fun build_repabs_term lthy thm consts rty qty = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 200 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 201 | (* TODO: The rty and qty stored in the quotient_info should | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 202 | be varified, so this will soon not be needed *) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 203 | val rty = Logic.varifyT rty; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 204 | val qty = Logic.varifyT qty; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 205 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 206 | fun mk_abs tm = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 207 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 208 | val ty = fastype_of tm | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 209 | in Syntax.check_term lthy ((get_fun_OLD absF (rty, qty) lthy ty) $ tm) end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 210 | fun mk_repabs tm = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 211 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 212 | val ty = fastype_of tm | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 213 | in Syntax.check_term lthy ((get_fun_OLD repF (rty, qty) lthy ty) $ (mk_abs tm)) end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 214 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 215 | fun is_lifted_const (Const (x, _)) = member (op =) consts x | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 216 | | is_lifted_const _ = false; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 217 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 218 | fun build_aux lthy tm = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 219 | case tm of | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 220 | Abs (a as (_, vty, _)) => | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 221 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 222 | val (vs, t) = Term.dest_abs a; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 223 | val v = Free(vs, vty); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 224 | val t' = lambda v (build_aux lthy t) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 225 | in | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 226 | if (not (needs_lift rty (fastype_of tm))) then t' | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 227 | else mk_repabs ( | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 228 | if not (needs_lift rty vty) then t' | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 229 | else | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 230 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 231 | val v' = mk_repabs v; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 232 | (* TODO: I believe 'beta' is not needed any more *) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 233 | val t1 = (* Envir.beta_norm *) (t' $ v') | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 234 | in | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 235 | lambda v t1 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 236 | end) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 237 | end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 238 | | x => | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 239 | case Term.strip_comb tm of | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 240 |           (Const(@{const_name Respects}, _), _) => tm
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 241 | | (opp, tms0) => | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 242 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 243 | val tms = map (build_aux lthy) tms0 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 244 | val ty = fastype_of tm | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 245 | in | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 246 | if (is_lifted_const opp andalso needs_lift rty ty) then | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 247 | mk_repabs (list_comb (opp, tms)) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 248 | else if ((Term.is_Free opp) andalso (length tms > 0) andalso (needs_lift rty ty)) then | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 249 | mk_repabs (list_comb (opp, tms)) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 250 | else if tms = [] then opp | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 251 | else list_comb(opp, tms) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 252 | end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 253 | in | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 254 |     repeat_eqsubst_prop lthy @{thms id_def_sym}
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 255 | (build_aux lthy (Thm.prop_of thm)) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 256 | end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 257 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 258 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 259 | text {* Builds provable goals for regularized theorems *}
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 260 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 261 | fun build_repabs_goal ctxt thm cons rty qty = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 262 | Logic.mk_equals ((Thm.prop_of thm), (build_repabs_term ctxt thm cons rty qty)) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 263 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 264 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 265 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 266 | fun repabs lthy thm consts rty qty quot_thm reflex_thm trans_thm rsp_thms = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 267 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 268 | val rt = build_repabs_term lthy thm consts rty qty; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 269 | val rg = Logic.mk_equals ((Thm.prop_of thm), rt); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 270 | fun tac ctxt = (ObjectLogic.full_atomize_tac) THEN' | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 271 | (REPEAT_ALL_NEW (r_mk_comb_tac ctxt rty quot_thm reflex_thm trans_thm rsp_thms)); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 272 | val cthm = Goal.prove lthy [] [] rg (fn x => tac (#context x) 1); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 273 | in | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 274 |     @{thm Pure.equal_elim_rule1} OF [cthm, thm]
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 275 | end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 276 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 277 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 278 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 279 | (* TODO: Check if it behaves properly with varifyed rty *) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 280 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 281 | fun findabs_all rty tm = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 282 | case tm of | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 283 | Abs(_, T, b) => | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 284 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 285 |         val b' = subst_bound ((Free ("x", T)), b);
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 286 | val tys = findabs_all rty b' | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 287 | val ty = fastype_of tm | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 288 | in if needs_lift rty ty then (ty :: tys) else tys | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 289 | end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 290 | | f $ a => (findabs_all rty f) @ (findabs_all rty a) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 291 | | _ => []; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 292 | fun findabs rty tm = distinct (op =) (findabs_all rty tm) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 293 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 294 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 295 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 296 | (* Currently useful only for LAMBDA_PRS *) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 297 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 298 | fun make_simp_prs_thm lthy quot_thm thm typ = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 299 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 300 | val (_, [lty, rty]) = dest_Type typ; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 301 | val thy = ProofContext.theory_of lthy; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 302 | val (lcty, rcty) = (ctyp_of thy lty, ctyp_of thy rty) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 303 | val inst = [SOME lcty, NONE, SOME rcty]; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 304 | val lpi = Drule.instantiate' inst [] thm; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 305 | val tac = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 306 | (compose_tac (false, lpi, 2)) THEN_ALL_NEW | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 307 | (quotient_tac quot_thm); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 308 | val gc = Drule.strip_imp_concl (cprop_of lpi); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 309 | val t = Goal.prove_internal [] gc (fn _ => tac 1) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 310 | in | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 311 |     MetaSimplifier.rewrite_rule [@{thm eq_reflection} OF @{thms id_apply}] t
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 312 | end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 313 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 314 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 315 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 316 | fun findallex_all rty qty tm = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 317 | case tm of | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 318 |     Const (@{const_name All}, T) $ (s as (Abs(_, _, b))) =>
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 319 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 320 | val (tya, tye) = findallex_all rty qty s | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 321 | in if needs_lift rty T then | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 322 | ((T :: tya), tye) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 323 | else (tya, tye) end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 324 |   | Const (@{const_name Ex}, T) $ (s as (Abs(_, _, b))) =>
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 325 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 326 | val (tya, tye) = findallex_all rty qty s | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 327 | in if needs_lift rty T then | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 328 | (tya, (T :: tye)) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 329 | else (tya, tye) end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 330 | | Abs(_, T, b) => | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 331 |       findallex_all rty qty (subst_bound ((Free ("x", T)), b))
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 332 | | f $ a => | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 333 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 334 | val (a1, e1) = findallex_all rty qty f; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 335 | val (a2, e2) = findallex_all rty qty a; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 336 | in (a1 @ a2, e1 @ e2) end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 337 | | _ => ([], []); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 338 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 339 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 340 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 341 | fun findallex lthy rty qty tm = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 342 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 343 | val (a, e) = findallex_all rty qty tm; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 344 | val (ad, ed) = (map domain_type a, map domain_type e); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 345 | val (au, eu) = (distinct (op =) ad, distinct (op =) ed); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 346 | val (rty, qty) = (Logic.varifyT rty, Logic.varifyT qty) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 347 | in | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 348 | (map (exchange_ty lthy rty qty) au, map (exchange_ty lthy rty qty) eu) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 349 | end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 350 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 351 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 352 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 353 | fun make_allex_prs_thm lthy quot_thm thm typ = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 354 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 355 | val (_, [lty, rty]) = dest_Type typ; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 356 | val thy = ProofContext.theory_of lthy; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 357 | val (lcty, rcty) = (ctyp_of thy lty, ctyp_of thy rty) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 358 | val inst = [NONE, SOME lcty]; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 359 | val lpi = Drule.instantiate' inst [] thm; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 360 | val tac = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 361 | (compose_tac (false, lpi, 1)) THEN_ALL_NEW | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 362 | (quotient_tac quot_thm); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 363 | val gc = Drule.strip_imp_concl (cprop_of lpi); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 364 | val t = Goal.prove_internal [] gc (fn _ => tac 1) | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 365 | val t_noid = MetaSimplifier.rewrite_rule | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 366 |       [@{thm eq_reflection} OF @{thms id_apply}] t;
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 367 |     val t_sym = @{thm "HOL.sym"} OF [t_noid];
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 368 |     val t_eq = @{thm "eq_reflection"} OF [t_sym]
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 369 | in | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 370 | t_eq | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 371 | end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 372 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 373 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 374 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 375 | fun lift_thm lthy qty qty_name rsp_thms defs rthm = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 376 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 377 |   val _ = tracing ("raw theorem:\n" ^ Syntax.string_of_term lthy (prop_of rthm))
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 378 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 379 | val (rty, rel, rel_refl, rel_eqv) = lookup_quot_data lthy qty; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 380 | val (trans2, reps_same, absrep, quot) = lookup_quot_thms lthy qty_name; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 381 | val consts = lookup_quot_consts defs; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 382 | val t_a = atomize_thm rthm; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 383 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 384 |   val _ = tracing ("raw atomized theorem:\n" ^ Syntax.string_of_term lthy (prop_of t_a))
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 385 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 386 | val t_r = regularize t_a rty rel rel_eqv rel_refl lthy; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 387 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 388 |   val _ = tracing ("regularised theorem:\n" ^ Syntax.string_of_term lthy (prop_of t_r))
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 389 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 390 | val t_t = repabs lthy t_r consts rty qty quot rel_refl trans2 rsp_thms; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 391 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 392 |   val _ = tracing ("rep/abs injected theorem:\n" ^ Syntax.string_of_term lthy (prop_of t_t))
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 393 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 394 | val (alls, exs) = findallex lthy rty qty (prop_of t_a); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 395 |   val allthms = map (make_allex_prs_thm lthy quot @{thm FORALL_PRS}) alls
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 396 |   val exthms = map (make_allex_prs_thm lthy quot @{thm EXISTS_PRS}) exs
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 397 | val t_a = MetaSimplifier.rewrite_rule (allthms @ exthms) t_t | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 398 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 399 |   val _ = tracing ("??:\n" ^ Syntax.string_of_term lthy (prop_of t_a))
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 400 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 401 | val abs = findabs rty (prop_of t_a); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 402 | val aps = findaps rty (prop_of t_a); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 403 | val app_prs_thms = map (applic_prs lthy rty qty absrep) aps; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 404 |   val lam_prs_thms = map (make_simp_prs_thm lthy quot @{thm LAMBDA_PRS}) abs;
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 405 | val t_l = repeat_eqsubst_thm lthy (lam_prs_thms @ app_prs_thms) t_a; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 406 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 407 |   val _ = tracing ("??:\n" ^ Syntax.string_of_term lthy (prop_of t_l))
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 408 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 409 | val defs_sym = flat (map (add_lower_defs lthy) defs); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 410 | val defs_sym_eq = map (fn x => eq_reflection OF [x]) defs_sym; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 411 | val t_id = simp_ids lthy t_l; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 412 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 413 |   val _ = tracing ("??:\n" ^ Syntax.string_of_term lthy (prop_of t_id))
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 414 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 415 | val t_d0 = MetaSimplifier.rewrite_rule defs_sym_eq t_id; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 416 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 417 |   val _ = tracing ("??:\n" ^ Syntax.string_of_term lthy (prop_of t_d0))
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 418 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 419 | val t_d = repeat_eqsubst_thm lthy defs_sym t_d0; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 420 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 421 |   val _ = tracing ("??:\n" ^ Syntax.string_of_term lthy (prop_of t_d))
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 422 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 423 | val t_r = MetaSimplifier.rewrite_rule [reps_same] t_d; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 424 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 425 |   val _ = tracing ("??:\n" ^ Syntax.string_of_term lthy (prop_of t_r))
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 426 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 427 | val t_rv = ObjectLogic.rulify t_r | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 428 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 429 |   val _ = tracing ("lifted theorem:\n" ^ Syntax.string_of_term lthy (prop_of t_rv))
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 430 | in | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 431 | Thm.varifyT t_rv | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 432 | end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 433 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 434 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 435 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 436 | fun lift_thm_note qty qty_name rsp_thms defs thm name lthy = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 437 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 438 | val lifted_thm = lift_thm lthy qty qty_name rsp_thms defs thm; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 439 | val (_, lthy2) = note (name, lifted_thm) lthy; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 440 | in | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 441 | lthy2 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 442 | end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 443 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 444 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 445 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 446 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 447 | fun regularize_goal lthy thm rel_eqv rel_refl qtrm = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 448 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 449 | val reg_trm = mk_REGULARIZE_goal lthy (prop_of thm) qtrm; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 450 | fun tac lthy = regularize_tac lthy rel_eqv rel_refl; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 451 | val cthm = Goal.prove lthy [] [] reg_trm | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 452 |       (fn {context, ...} => tac context 1);
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 453 | in | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 454 | cthm OF [thm] | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 455 | end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 456 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 457 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 458 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 459 | fun repabs_goal lthy thm rty quot_thm reflex_thm trans_thm rsp_thms qtrm = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 460 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 461 | val rg = Syntax.check_term lthy (mk_inj_REPABS_goal lthy ((prop_of thm), qtrm)); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 462 | fun tac ctxt = (ObjectLogic.full_atomize_tac) THEN' | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 463 | (REPEAT_ALL_NEW (r_mk_comb_tac ctxt rty quot_thm reflex_thm trans_thm rsp_thms)); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 464 | val cthm = Goal.prove lthy [] [] rg (fn x => tac (#context x) 1); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 465 | in | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 466 |     @{thm Pure.equal_elim_rule1} OF [cthm, thm]
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 467 | end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 468 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 469 | |
| 381 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 470 | |
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 471 | ML {*
 | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 472 | fun atomize_goal thy gl = | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 473 | let | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 474 | val vars = map Free (Term.add_frees gl []); | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 475 |     val all = if fastype_of gl = @{typ bool} then HOLogic.all_const else Term.all;
 | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 476 | fun lambda_all (var as Free(_, T)) trm = (all T) $ lambda var trm; | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 477 | val glv = fold lambda_all vars gl | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 478 | val gla = (term_of o snd o Thm.dest_equals o cprop_of) (ObjectLogic.atomize (cterm_of thy glv)) | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 479 | val glf = Type.legacy_freeze gla | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 480 | in | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 481 |     if fastype_of gl = @{typ bool} then @{term Trueprop} $ glf else glf
 | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 482 | end | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 483 | *} | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 484 | |
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 485 | |
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 486 | ML {* atomize_goal @{theory} @{term "x memb [] = False"} *}
 | 
| 399 | 487 | ML {* atomize_goal @{theory} @{term "x = xa ? a # x = a # xa"} *}
 | 
| 381 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 488 | |
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 489 | |
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 490 | |
| 379 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 491 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 492 | fun lift_thm_goal lthy qty qty_name rsp_thms defs rthm goal = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 493 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 494 | val (rty, rel, rel_refl, rel_eqv) = lookup_quot_data lthy qty; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 495 | val (trans2, reps_same, absrep, quot) = lookup_quot_thms lthy qty_name; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 496 | val t_a = atomize_thm rthm; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 497 | val goal_a = atomize_goal (ProofContext.theory_of lthy) goal; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 498 | val t_r = regularize_goal lthy t_a rel_eqv rel_refl goal_a; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 499 | val t_t = repabs_goal lthy t_r rty quot rel_refl trans2 rsp_thms goal_a; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 500 | val (alls, exs) = findallex lthy rty qty (prop_of t_a); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 501 |   val allthms = map (make_allex_prs_thm lthy quot @{thm FORALL_PRS}) alls
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 502 |   val exthms = map (make_allex_prs_thm lthy quot @{thm EXISTS_PRS}) exs
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 503 | val t_a = MetaSimplifier.rewrite_rule (allthms @ exthms) t_t | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 504 | val abs = findabs rty (prop_of t_a); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 505 | val aps = findaps rty (prop_of t_a); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 506 | val app_prs_thms = map (applic_prs lthy rty qty absrep) aps; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 507 |   val lam_prs_thms = map (make_simp_prs_thm lthy quot @{thm LAMBDA_PRS}) abs;
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 508 | val t_l = repeat_eqsubst_thm lthy (lam_prs_thms @ app_prs_thms) t_a; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 509 | val defs_sym = flat (map (add_lower_defs lthy) defs); | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 510 | val defs_sym_eq = map (fn x => eq_reflection OF [x]) defs_sym; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 511 | val t_id = simp_ids lthy t_l; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 512 | val t_d0 = MetaSimplifier.rewrite_rule defs_sym_eq t_id; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 513 | val t_d = repeat_eqsubst_thm lthy defs_sym t_d0; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 514 | val t_r = MetaSimplifier.rewrite_rule [reps_same] t_d; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 515 | val t_rv = ObjectLogic.rulify t_r | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 516 | in | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 517 | Thm.varifyT t_rv | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 518 | end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 519 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 520 | |
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 521 | ML {*
 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 522 | fun lift_thm_goal_note lthy qty qty_name rsp_thms defs thm name goal = | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 523 | let | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 524 | val lifted_thm = lift_thm_goal lthy qty qty_name rsp_thms defs thm goal; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 525 | val (_, lthy2) = note (name, lifted_thm) lthy; | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 526 | in | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 527 | lthy2 | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 528 | end | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 529 | *} | 
| 
57bde65f6eb2
Removed unused things from QuotMain.
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: diff
changeset | 530 | |
| 381 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 531 | ML {*
 | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 532 | fun simp_ids_trm trm = | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 533 | trm |> | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 534 |   MetaSimplifier.rewrite false @{thms eq_reflection[OF FUN_MAP_I] eq_reflection[OF id_apply] id_def_sym prod_fun_id map_id}
 | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 535 | |> cprop_of |> Thm.dest_equals |> snd | 
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 536 | |
| 
991db758a72d
More moving from QuotMain to UnusedQuotMain
 Cezary Kaliszyk <kaliszyk@in.tum.de> parents: 
379diff
changeset | 537 | *} |