slight cleaning and simplification of the automatic wrapper for quotient definitions
--- a/src/HOL/Tools/Quotient/quotient_def.ML Thu Jun 24 17:01:52 2010 +0200
+++ b/src/HOL/Tools/Quotient/quotient_def.ML Thu Jun 24 16:27:40 2010 +0100
@@ -12,7 +12,7 @@
val quotdef_cmd: (binding option * mixfix) * (Attrib.binding * (string * string)) ->
local_theory -> Quotient_Info.qconsts_info * local_theory
- val quotient_lift_const: typ list -> string * term -> local_theory ->
+ val lift_raw_const: typ list -> string * term -> local_theory ->
Quotient_Info.qconsts_info * local_theory
end;
@@ -32,12 +32,10 @@
- the new constant as term
- the rhs of the definition as term
- It returns the defined constant and its definition
- theorem; stores the data in the qconsts data slot.
+ It stores the qconst_info in the qconsts data slot.
- Restriction: At the moment the right-hand side of the
- definition must be a constant. Similarly the left-hand
- side must be a constant.
+ Restriction: At the moment the left- and right-hand
+ side of the definition must be a constant.
*)
fun error_msg bind str =
let
@@ -89,10 +87,17 @@
quotient_def (decl, (attr, (lhs, rhs))) lthy''
end
-fun quotient_lift_const qtys (b, t) ctxt =
+(* a wrapper for automatically lifting a raw constant *)
+fun lift_raw_const qtys (qconst_name, rconst) ctxt =
+let
+ val rty = fastype_of rconst
+ val qty = derive_qtyp qtys rty ctxt
+in
quotient_def ((NONE, NoSyn), (Attrib.empty_binding,
- (Quotient_Term.quotient_lift_const qtys (b, t) ctxt, t))) ctxt
+ (Free (qconst_name, qty), rconst))) ctxt
+end
+(* parser and command *)
val quotdef_decl = (Parse.binding >> SOME) -- Parse.opt_mixfix' --| Parse.$$$ "where"
val quotdef_parser =
--- a/src/HOL/Tools/Quotient/quotient_term.ML Thu Jun 24 17:01:52 2010 +0200
+++ b/src/HOL/Tools/Quotient/quotient_term.ML Thu Jun 24 16:27:40 2010 +0100
@@ -26,7 +26,7 @@
val inj_repabs_trm: Proof.context -> term * term -> term
val inj_repabs_trm_chk: Proof.context -> term * term -> term
- val quotient_lift_const: typ list -> string * term -> local_theory -> term
+ val derive_qtyp: typ list -> typ -> Proof.context -> typ
val quotient_lift_all: typ list -> Proof.context -> term -> term
end;
@@ -738,14 +738,12 @@
(ty_substs, filter valid_trm_subst all_trm_substs)
end
-fun quotient_lift_const qtys (b, t) ctxt =
+fun derive_qtyp qtys rty ctxt =
let
val thy = ProofContext.theory_of ctxt
- val (ty_substs, _) = get_ty_trm_substs qtys ctxt;
- val (_, ty) = dest_Const t;
- val nty = subst_tys thy ty_substs ty;
+ val (ty_substs, _) = get_ty_trm_substs qtys ctxt
in
- Free(b, nty)
+ subst_tys thy ty_substs rty
end
(*