--- a/NEWS Wed Dec 03 21:00:39 2008 -0800
+++ b/NEWS Thu Dec 04 14:43:33 2008 +0100
@@ -58,6 +58,18 @@
*** Pure ***
+* Type Binding.T gradually replaces formerly used type bstring for names
+to be bound. Name space interface for declarations has been simplified:
+
+ NameSpace.declare: NameSpace.naming
+ -> Binding.T -> NameSpace.T -> string * NameSpace.T
+ NameSpace.bind: NameSpace.naming
+ -> Binding.T * 'a -> 'a NameSpace.table -> string * 'a NameSpace.table
+ (*exception Symtab.DUP*)
+
+See further modules src/Pure/General/binding.ML and
+src/Pure/General/name_space.ML
+
* Module moves in repository:
src/Pure/Tools/value.ML ~> src/Tools/
src/Pure/Tools/quickcheck.ML ~> src/Tools/
--- a/src/HOL/Code_Eval.thy Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Code_Eval.thy Thu Dec 04 14:43:33 2008 +0100
@@ -63,7 +63,7 @@
thy
|> TheoryTarget.instantiation ([tyco], vs, @{sort term_of})
|> `(fn lthy => Syntax.check_term lthy eq)
- |-> (fn eq => Specification.definition (NONE, ((Name.binding (triv_name_of eq), []), eq)))
+ |-> (fn eq => Specification.definition (NONE, ((Binding.name (triv_name_of eq), []), eq)))
|> snd
|> Class.prove_instantiation_instance (K (Class.intro_classes_tac []))
|> LocalTheory.exit_global
--- a/src/HOL/Import/hol4rews.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Import/hol4rews.ML Thu Dec 04 14:43:33 2008 +0100
@@ -282,7 +282,7 @@
val thy = case opt_get_output_thy thy of
"" => thy
| output_thy => if internal
- then add_hol4_cmove (Sign.full_name thy bconst) (output_thy ^ "." ^ bthy ^ "." ^ bconst) thy
+ then add_hol4_cmove (Sign.full_bname thy bconst) (output_thy ^ "." ^ bthy ^ "." ^ bconst) thy
else thy
val _ = message ("Adding cmap " ^ bthy ^ "." ^ bconst ^ " -> " ^ isaconst ^ (if internal then " (*)" else ""))
val curmaps = HOL4ConstMaps.get thy
@@ -324,7 +324,7 @@
val thy = case opt_get_output_thy thy of
"" => thy
| output_thy => if internal
- then add_hol4_cmove (Sign.full_name thy bconst) (output_thy ^ "." ^ bthy ^ "." ^ bconst) thy
+ then add_hol4_cmove (Sign.full_bname thy bconst) (output_thy ^ "." ^ bthy ^ "." ^ bconst) thy
else thy
val _ = message ("Adding cmap " ^ bthy ^ "." ^ bconst ^ " -> " ^ isaconst ^ (if internal then " (*)" else ""))
val curmaps = HOL4ConstMaps.get thy
@@ -348,7 +348,7 @@
fun add_hol4_pending bthy bthm hth thy =
let
- val thmname = Sign.full_name thy bthm
+ val thmname = Sign.full_bname thy bthm
val _ = message ("Add pending " ^ bthy ^ "." ^ bthm)
val curpend = HOL4Pending.get thy
val newpend = StringPair.update_new ((bthy,bthm),hth) curpend
--- a/src/HOL/Import/proof_kernel.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Import/proof_kernel.ML Thu Dec 04 14:43:33 2008 +0100
@@ -1960,7 +1960,7 @@
val hth = case Shuffler.set_prop thy22 (HOLogic.mk_Trueprop tm24) [("",th)] of
SOME (_,res) => HOLThm(rens_of linfo,res)
| NONE => raise ERR "new_definition" "Bad conclusion"
- val fullname = Sign.full_name thy22 thmname
+ val fullname = Sign.full_bname thy22 thmname
val thy22' = case opt_get_output_thy thy22 of
"" => (ImportRecorder.add_hol_mapping thyname thmname fullname;
add_hol4_mapping thyname thmname fullname thy22)
--- a/src/HOL/List.thy Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/List.thy Thu Dec 04 14:43:33 2008 +0100
@@ -3423,7 +3423,7 @@
(fn n => fn m => Drule.instantiate' [] [SOME n, SOME m] @{thm nibble_pair_of_char.simps})
nibbles nibbles;
in
- PureThy.note_thmss Thm.lemmaK [((Name.binding "nibble_pair_of_char_simps", []), [(thms, [])])]
+ PureThy.note_thmss Thm.lemmaK [((Binding.name "nibble_pair_of_char_simps", []), [(thms, [])])]
#-> (fn [(_, thms)] => fold_rev Code.add_eqn thms)
end
*}
--- a/src/HOL/Nominal/Nominal.thy Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Nominal/Nominal.thy Thu Dec 04 14:43:33 2008 +0100
@@ -1,5 +1,3 @@
-(* $Id$ *)
-
theory Nominal
imports Main Infinite_Set
uses
--- a/src/HOL/Nominal/nominal_atoms.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Nominal/nominal_atoms.ML Thu Dec 04 14:43:33 2008 +0100
@@ -170,7 +170,7 @@
val (swap_eqs, thy3) = fold_map (fn (ak_name, T) => fn thy =>
let
val swapT = HOLogic.mk_prodT (T, T) --> T --> T;
- val swap_name = Sign.full_name thy ("swap_" ^ ak_name);
+ val swap_name = Sign.full_bname thy ("swap_" ^ ak_name);
val a = Free ("a", T);
val b = Free ("b", T);
val c = Free ("c", T);
@@ -199,10 +199,10 @@
val (prm_eqs, thy4) = fold_map (fn (ak_name, T) => fn thy =>
let
val swapT = HOLogic.mk_prodT (T, T) --> T --> T;
- val swap_name = Sign.full_name thy ("swap_" ^ ak_name)
+ val swap_name = Sign.full_bname thy ("swap_" ^ ak_name)
val prmT = mk_permT T --> T --> T;
val prm_name = ak_name ^ "_prm_" ^ ak_name;
- val qu_prm_name = Sign.full_name thy prm_name;
+ val qu_prm_name = Sign.full_bname thy prm_name;
val x = Free ("x", HOLogic.mk_prodT (T, T));
val xs = Free ("xs", mk_permT T);
val a = Free ("a", T) ;
@@ -235,7 +235,7 @@
val pi = Free ("pi", mk_permT T);
val a = Free ("a", T');
val cperm = Const ("Nominal.perm", mk_permT T --> T' --> T');
- val cperm_def = Const (Sign.full_name thy' perm_def_name, mk_permT T --> T' --> T');
+ val cperm_def = Const (Sign.full_bname thy' perm_def_name, mk_permT T --> T' --> T');
val name = ak_name ^ "_prm_" ^ ak_name' ^ "_def";
val def = Logic.mk_equals
@@ -250,7 +250,7 @@
val (prm_cons_thms,thy6) =
thy5 |> PureThy.add_thms (map (fn (ak_name, T) =>
let
- val ak_name_qu = Sign.full_name thy5 (ak_name);
+ val ak_name_qu = Sign.full_bname thy5 (ak_name);
val i_type = Type(ak_name_qu,[]);
val cat = Const ("Nominal.at",(Term.itselfT i_type) --> HOLogic.boolT);
val at_type = Logic.mk_type i_type;
@@ -299,9 +299,9 @@
HOLogic.mk_Trueprop (HOLogic.mk_eq (cperm $ pi1 $ x, cperm $ pi2 $ x)));
in
AxClass.define_class (cl_name, ["HOL.type"]) []
- [((Name.binding (cl_name ^ "1"), [Simplifier.simp_add]), [axiom1]),
- ((Name.binding (cl_name ^ "2"), []), [axiom2]),
- ((Name.binding (cl_name ^ "3"), []), [axiom3])] thy
+ [((Binding.name (cl_name ^ "1"), [Simplifier.simp_add]), [axiom1]),
+ ((Binding.name (cl_name ^ "2"), []), [axiom2]),
+ ((Binding.name (cl_name ^ "3"), []), [axiom3])] thy
end) ak_names_types thy6;
(* proves that every pt_<ak>-type together with <ak>-type *)
@@ -311,8 +311,8 @@
val (prm_inst_thms,thy8) =
thy7 |> PureThy.add_thms (map (fn (ak_name, T) =>
let
- val ak_name_qu = Sign.full_name thy7 ak_name;
- val pt_name_qu = Sign.full_name thy7 ("pt_"^ak_name);
+ val ak_name_qu = Sign.full_bname thy7 ak_name;
+ val pt_name_qu = Sign.full_bname thy7 ("pt_"^ak_name);
val i_type1 = TFree("'x",[pt_name_qu]);
val i_type2 = Type(ak_name_qu,[]);
val cpt = Const ("Nominal.pt",(Term.itselfT i_type1)-->(Term.itselfT i_type2)-->HOLogic.boolT);
@@ -338,7 +338,7 @@
val (fs_ax_classes,thy11) = fold_map (fn (ak_name, T) => fn thy =>
let
val cl_name = "fs_"^ak_name;
- val pt_name = Sign.full_name thy ("pt_"^ak_name);
+ val pt_name = Sign.full_bname thy ("pt_"^ak_name);
val ty = TFree("'a",["HOL.type"]);
val x = Free ("x", ty);
val csupp = Const ("Nominal.supp", ty --> HOLogic.mk_setT T);
@@ -347,7 +347,7 @@
val axiom1 = HOLogic.mk_Trueprop (cfinite $ (csupp $ x));
in
- AxClass.define_class (cl_name, [pt_name]) [] [((Name.binding (cl_name ^ "1"), []), [axiom1])] thy
+ AxClass.define_class (cl_name, [pt_name]) [] [((Binding.name (cl_name ^ "1"), []), [axiom1])] thy
end) ak_names_types thy8;
(* proves that every fs_<ak>-type together with <ak>-type *)
@@ -357,8 +357,8 @@
val (fs_inst_thms,thy12) =
thy11 |> PureThy.add_thms (map (fn (ak_name, T) =>
let
- val ak_name_qu = Sign.full_name thy11 ak_name;
- val fs_name_qu = Sign.full_name thy11 ("fs_"^ak_name);
+ val ak_name_qu = Sign.full_bname thy11 ak_name;
+ val fs_name_qu = Sign.full_bname thy11 ("fs_"^ak_name);
val i_type1 = TFree("'x",[fs_name_qu]);
val i_type2 = Type(ak_name_qu,[]);
val cfs = Const ("Nominal.fs",
@@ -397,7 +397,7 @@
cperm2 $ (cperm3 $ pi1 $ pi2) $ (cperm1 $ pi1 $ x)));
in
AxClass.define_class (cl_name, ["HOL.type"]) []
- [((Name.binding (cl_name ^ "1"), []), [ax1])] thy'
+ [((Binding.name (cl_name ^ "1"), []), [ax1])] thy'
end) ak_names_types thy) ak_names_types thy12;
(* proves for every <ak>-combination a cp_<ak1>_<ak2>_inst theorem; *)
@@ -406,9 +406,9 @@
val (cp_thms,thy12c) = fold_map (fn (ak_name, T) => fn thy =>
fold_map (fn (ak_name', T') => fn thy' =>
let
- val ak_name_qu = Sign.full_name thy' (ak_name);
- val ak_name_qu' = Sign.full_name thy' (ak_name');
- val cp_name_qu = Sign.full_name thy' ("cp_"^ak_name^"_"^ak_name');
+ val ak_name_qu = Sign.full_bname thy' (ak_name);
+ val ak_name_qu' = Sign.full_bname thy' (ak_name');
+ val cp_name_qu = Sign.full_bname thy' ("cp_"^ak_name^"_"^ak_name');
val i_type0 = TFree("'a",[cp_name_qu]);
val i_type1 = Type(ak_name_qu,[]);
val i_type2 = Type(ak_name_qu',[]);
@@ -442,8 +442,8 @@
(if not (ak_name = ak_name')
then
let
- val ak_name_qu = Sign.full_name thy' ak_name;
- val ak_name_qu' = Sign.full_name thy' ak_name';
+ val ak_name_qu = Sign.full_bname thy' ak_name;
+ val ak_name_qu' = Sign.full_bname thy' ak_name';
val i_type1 = Type(ak_name_qu,[]);
val i_type2 = Type(ak_name_qu',[]);
val cdj = Const ("Nominal.disjoint",
@@ -487,8 +487,8 @@
val thy13 = fold (fn ak_name => fn thy =>
fold (fn ak_name' => fn thy' =>
let
- val qu_name = Sign.full_name thy' ak_name';
- val cls_name = Sign.full_name thy' ("pt_"^ak_name);
+ val qu_name = Sign.full_bname thy' ak_name';
+ val cls_name = Sign.full_bname thy' ("pt_"^ak_name);
val at_inst = PureThy.get_thm thy' ("at_" ^ ak_name' ^ "_inst");
val proof1 = EVERY [Class.intro_classes_tac [],
@@ -518,7 +518,7 @@
(* are instances of pt_<ak> *)
val thy18 = fold (fn ak_name => fn thy =>
let
- val cls_name = Sign.full_name thy ("pt_"^ak_name);
+ val cls_name = Sign.full_bname thy ("pt_"^ak_name);
val at_thm = PureThy.get_thm thy ("at_"^ak_name^"_inst");
val pt_inst = PureThy.get_thm thy ("pt_"^ak_name^"_inst");
@@ -562,8 +562,8 @@
val thy20 = fold (fn ak_name => fn thy =>
fold (fn ak_name' => fn thy' =>
let
- val qu_name = Sign.full_name thy' ak_name';
- val qu_class = Sign.full_name thy' ("fs_"^ak_name);
+ val qu_name = Sign.full_bname thy' ak_name';
+ val qu_class = Sign.full_bname thy' ("fs_"^ak_name);
val proof =
(if ak_name = ak_name'
then
@@ -588,7 +588,7 @@
val thy24 = fold (fn ak_name => fn thy =>
let
- val cls_name = Sign.full_name thy ("fs_"^ak_name);
+ val cls_name = Sign.full_bname thy ("fs_"^ak_name);
val fs_inst = PureThy.get_thm thy ("fs_"^ak_name^"_inst");
fun fs_proof thm = EVERY [Class.intro_classes_tac [], rtac (thm RS fs1) 1];
@@ -628,8 +628,8 @@
fold (fn ak_name' => fn thy' =>
fold (fn ak_name'' => fn thy'' =>
let
- val name = Sign.full_name thy'' ak_name;
- val cls_name = Sign.full_name thy'' ("cp_"^ak_name'^"_"^ak_name'');
+ val name = Sign.full_bname thy'' ak_name;
+ val cls_name = Sign.full_bname thy'' ("cp_"^ak_name'^"_"^ak_name'');
val proof =
(if (ak_name'=ak_name'') then
(let
@@ -666,7 +666,7 @@
val thy26 = fold (fn ak_name => fn thy =>
fold (fn ak_name' => fn thy' =>
let
- val cls_name = Sign.full_name thy' ("cp_"^ak_name^"_"^ak_name');
+ val cls_name = Sign.full_bname thy' ("cp_"^ak_name^"_"^ak_name');
val cp_inst = PureThy.get_thm thy' ("cp_"^ak_name^"_"^ak_name'^"_inst");
val pt_inst = PureThy.get_thm thy' ("pt_"^ak_name^"_inst");
val at_inst = PureThy.get_thm thy' ("at_"^ak_name^"_inst");
@@ -698,7 +698,7 @@
fun discrete_pt_inst discrete_ty defn =
fold (fn ak_name => fn thy =>
let
- val qu_class = Sign.full_name thy ("pt_"^ak_name);
+ val qu_class = Sign.full_bname thy ("pt_"^ak_name);
val simp_s = HOL_basic_ss addsimps [defn];
val proof = EVERY [Class.intro_classes_tac [], REPEAT (asm_simp_tac simp_s 1)];
in
@@ -708,7 +708,7 @@
fun discrete_fs_inst discrete_ty defn =
fold (fn ak_name => fn thy =>
let
- val qu_class = Sign.full_name thy ("fs_"^ak_name);
+ val qu_class = Sign.full_bname thy ("fs_"^ak_name);
val supp_def = @{thm "Nominal.supp_def"};
val simp_s = HOL_ss addsimps [supp_def,Collect_const,finite_emptyI,defn];
val proof = EVERY [Class.intro_classes_tac [], asm_simp_tac simp_s 1];
@@ -719,7 +719,7 @@
fun discrete_cp_inst discrete_ty defn =
fold (fn ak_name' => (fold (fn ak_name => fn thy =>
let
- val qu_class = Sign.full_name thy ("cp_"^ak_name^"_"^ak_name');
+ val qu_class = Sign.full_bname thy ("cp_"^ak_name^"_"^ak_name');
val supp_def = @{thm "Nominal.supp_def"};
val simp_s = HOL_ss addsimps [defn];
val proof = EVERY [Class.intro_classes_tac [], asm_simp_tac simp_s 1];
--- a/src/HOL/Nominal/nominal_induct.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Nominal/nominal_induct.ML Thu Dec 04 14:43:33 2008 +0100
@@ -6,7 +6,7 @@
structure NominalInduct:
sig
- val nominal_induct_tac: Proof.context -> (Name.binding option * term) option list list ->
+ val nominal_induct_tac: Proof.context -> (Binding.T option * term) option list list ->
(string * typ) list -> (string * typ) list list -> thm list ->
thm list -> int -> RuleCases.cases_tactic
val nominal_induct_method: Method.src -> Proof.context -> Method.method
--- a/src/HOL/Nominal/nominal_inductive2.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Nominal/nominal_inductive2.ML Thu Dec 04 14:43:33 2008 +0100
@@ -182,7 +182,7 @@
fun mk_avoids params name sets =
let
val (_, ctxt') = ProofContext.add_fixes_i
- (map (fn (s, T) => (Name.binding s, SOME T, NoSyn)) params) ctxt;
+ (map (fn (s, T) => (Binding.name s, SOME T, NoSyn)) params) ctxt;
fun mk s =
let
val t = Syntax.read_term ctxt' s;
--- a/src/HOL/Nominal/nominal_package.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Nominal/nominal_package.ML Thu Dec 04 14:43:33 2008 +0100
@@ -227,7 +227,7 @@
map (fn (cname, cargs, mx) => (cname, mx)) constrs) dts';
val ps = map (fn (_, n, _, _) =>
- (Sign.full_name tmp_thy n, Sign.full_name tmp_thy (n ^ "_Rep"))) dts;
+ (Sign.full_bname tmp_thy n, Sign.full_bname tmp_thy (n ^ "_Rep"))) dts;
val rps = map Library.swap ps;
fun replace_types (Type ("Nominal.ABS", [T, U])) =
@@ -241,7 +241,7 @@
map replace_types cargs, NoSyn)) constrs)) dts';
val new_type_names' = map (fn n => n ^ "_Rep") new_type_names;
- val full_new_type_names' = map (Sign.full_name thy) new_type_names';
+ val full_new_type_names' = map (Sign.full_bname thy) new_type_names';
val ({induction, ...},thy1) =
DatatypePackage.add_datatype err flat_names new_type_names' dts'' thy;
@@ -263,7 +263,7 @@
val perm_names' = DatatypeProp.indexify_names (map (fn (i, _) =>
"perm_" ^ name_of_typ (nth_dtyp i)) descr);
val perm_names = replicate (length new_type_names) "Nominal.perm" @
- map (Sign.full_name thy1) (List.drop (perm_names', length new_type_names));
+ map (Sign.full_bname thy1) (List.drop (perm_names', length new_type_names));
val perm_names_types = perm_names ~~ perm_types;
val perm_names_types' = perm_names' ~~ perm_types;
@@ -289,7 +289,7 @@
else Const ("Nominal.perm", permT --> T --> T) $ pi $ x
end;
in
- (Attrib.no_binding, HOLogic.mk_Trueprop (HOLogic.mk_eq
+ (Attrib.empty_binding, HOLogic.mk_Trueprop (HOLogic.mk_eq
(Free (nth perm_names_types' i) $
Free ("pi", mk_permT (TFree ("'x", HOLogic.typeS))) $
list_comb (c, args),
@@ -301,7 +301,7 @@
PrimrecPackage.add_primrec_overloaded
(map (fn (s, sT) => (s, sT, false))
(List.take (perm_names' ~~ perm_names_types, length new_type_names)))
- (map (fn s => (Name.binding s, NONE, NoSyn)) perm_names') perm_eqs thy1;
+ (map (fn s => (Binding.name s, NONE, NoSyn)) perm_names') perm_eqs thy1;
(**** prove that permutation functions introduced by unfolding are ****)
(**** equivalent to already existing permutation functions ****)
@@ -566,16 +566,16 @@
(rep_set_name, T))
end)
(descr ~~ rep_set_names))));
- val rep_set_names'' = map (Sign.full_name thy3) rep_set_names';
+ val rep_set_names'' = map (Sign.full_bname thy3) rep_set_names';
val ({raw_induct = rep_induct, intrs = rep_intrs, ...}, thy4) =
InductivePackage.add_inductive_global (serial_string ())
{quiet_mode = false, verbose = false, kind = Thm.internalK,
- alt_name = Name.binding big_rep_name, coind = false, no_elim = true, no_ind = false,
+ alt_name = Binding.name big_rep_name, coind = false, no_elim = true, no_ind = false,
skip_mono = true}
- (map (fn (s, T) => ((Name.binding s, T --> HOLogic.boolT), NoSyn))
+ (map (fn (s, T) => ((Binding.name s, T --> HOLogic.boolT), NoSyn))
(rep_set_names' ~~ recTs'))
- [] (map (fn x => (Attrib.no_binding, x)) intr_ts) [] thy3;
+ [] (map (fn x => (Attrib.empty_binding, x)) intr_ts) [] thy3;
(**** Prove that representing set is closed under permutation ****)
@@ -768,7 +768,7 @@
val newTs' = Library.take (length new_type_names, recTs');
val newTs = Library.take (length new_type_names, recTs);
- val full_new_type_names = map (Sign.full_name thy) new_type_names;
+ val full_new_type_names = map (Sign.full_bname thy) new_type_names;
fun make_constr_def tname T T' ((thy, defs, eqns),
(((cname_rep, _), (cname, cargs)), (cname', mx))) =
@@ -1432,7 +1432,7 @@
if length descr'' = 1 then [big_rec_name] else
map ((curry (op ^) (big_rec_name ^ "_")) o string_of_int)
(1 upto (length descr''));
- val rec_set_names = map (Sign.full_name thy10) rec_set_names';
+ val rec_set_names = map (Sign.full_bname thy10) rec_set_names';
val rec_fns = map (uncurry (mk_Free "f"))
(rec_fn_Ts ~~ (1 upto (length rec_fn_Ts)));
@@ -1509,12 +1509,12 @@
thy10 |>
InductivePackage.add_inductive_global (serial_string ())
{quiet_mode = ! quiet_mode, verbose = false, kind = Thm.internalK,
- alt_name = Name.binding big_rec_name, coind = false, no_elim = false, no_ind = false,
+ alt_name = Binding.name big_rec_name, coind = false, no_elim = false, no_ind = false,
skip_mono = true}
- (map (fn (s, T) => ((Name.binding s, T), NoSyn)) (rec_set_names' ~~ rec_set_Ts))
+ (map (fn (s, T) => ((Binding.name s, T), NoSyn)) (rec_set_names' ~~ rec_set_Ts))
(map dest_Free rec_fns)
- (map (fn x => (Attrib.no_binding, x)) rec_intr_ts) [] ||>
- PureThy.hide_fact true (NameSpace.append (Sign.full_name thy10 big_rec_name) "induct");
+ (map (fn x => (Attrib.empty_binding, x)) rec_intr_ts) [] ||>
+ PureThy.hide_fact true (NameSpace.append (Sign.full_bname thy10 big_rec_name) "induct");
(** equivariance **)
@@ -2002,7 +2002,7 @@
(* define primrec combinators *)
val big_reccomb_name = (space_implode "_" new_type_names) ^ "_rec";
- val reccomb_names = map (Sign.full_name thy11)
+ val reccomb_names = map (Sign.full_bname thy11)
(if length descr'' = 1 then [big_reccomb_name] else
(map ((curry (op ^) (big_reccomb_name ^ "_")) o string_of_int)
(1 upto (length descr''))));
--- a/src/HOL/Nominal/nominal_primrec.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Nominal/nominal_primrec.ML Thu Dec 04 14:43:33 2008 +0100
@@ -9,13 +9,13 @@
signature NOMINAL_PRIMREC =
sig
val add_primrec: string -> string list option -> string option ->
- ((Name.binding * string) * Attrib.src list) list -> theory -> Proof.state
+ ((Binding.T * string) * Attrib.src list) list -> theory -> Proof.state
val add_primrec_unchecked: string -> string list option -> string option ->
- ((Name.binding * string) * Attrib.src list) list -> theory -> Proof.state
+ ((Binding.T * string) * Attrib.src list) list -> theory -> Proof.state
val add_primrec_i: string -> term list option -> term option ->
- ((Name.binding * term) * attribute list) list -> theory -> Proof.state
+ ((Binding.T * term) * attribute list) list -> theory -> Proof.state
val add_primrec_unchecked_i: string -> term list option -> term option ->
- ((Name.binding * term) * attribute list) list -> theory -> Proof.state
+ ((Binding.T * term) * attribute list) list -> theory -> Proof.state
end;
structure NominalPrimrec : NOMINAL_PRIMREC =
--- a/src/HOL/Statespace/state_space.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Statespace/state_space.ML Thu Dec 04 14:43:33 2008 +0100
@@ -268,7 +268,7 @@
(map (fn n => Locale.Rename (Locale.Locale (Locale.intern thy "var")
,[SOME (n,NONE)])) all_comps);
- val full_name = Sign.full_name thy name;
+ val full_name = Sign.full_bname thy name;
val dist_thm_name = distinct_compsN;
val dist_thm_full_name =
let val prefix = fold1' (fn name => fn prfx => prfx ^ "_" ^ name) all_comps "";
@@ -302,7 +302,7 @@
val attr = Attrib.internal type_attr;
- val assumes = Element.Assumes [((Name.binding dist_thm_name,[attr]),
+ val assumes = Element.Assumes [((Binding.name dist_thm_name,[attr]),
[(HOLogic.Trueprop $
(Const ("DistinctTreeProver.all_distinct",
Type ("DistinctTreeProver.tree",[nameT]) --> HOLogic.boolT) $
@@ -373,7 +373,7 @@
fun statespace_definition state_type args name parents parent_comps components thy =
let
- val full_name = Sign.full_name thy name;
+ val full_name = Sign.full_bname thy name;
val all_comps = parent_comps @ components;
val components' = map (fn (n,T) => (n,(T,full_name))) components;
@@ -443,7 +443,7 @@
NONE => []
| SOME s =>
let
- val fx = Element.Fixes [(Name.binding s,SOME (string_of_typ stateT),NoSyn)];
+ val fx = Element.Fixes [(Binding.name s,SOME (string_of_typ stateT),NoSyn)];
val cs = Element.Constrains
(map (fn (n,T) => (n,string_of_typ T))
((map (fn (n,_) => (n,nameT)) all_comps) @
@@ -490,7 +490,7 @@
fun add_parent (Ts,pname,rs) env =
let
- val full_pname = Sign.full_name thy pname;
+ val full_pname = Sign.full_bname thy pname;
val {args,components,...} =
(case get_statespace (Context.Theory thy) full_pname of
SOME r => r
--- a/src/HOL/Tools/datatype_abs_proofs.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Tools/datatype_abs_proofs.ML Thu Dec 04 14:43:33 2008 +0100
@@ -108,7 +108,7 @@
if length descr' = 1 then [big_rec_name'] else
map ((curry (op ^) (big_rec_name' ^ "_")) o string_of_int)
(1 upto (length descr'));
- val rec_set_names = map (Sign.full_name thy0) rec_set_names';
+ val rec_set_names = map (Sign.full_bname thy0) rec_set_names';
val (rec_result_Ts, reccomb_fn_Ts) = DatatypeProp.make_primrec_Ts descr sorts used;
@@ -156,11 +156,11 @@
val ({intrs = rec_intrs, elims = rec_elims, ...}, thy1) =
InductivePackage.add_inductive_global (serial_string ())
{quiet_mode = ! quiet_mode, verbose = false, kind = Thm.internalK,
- alt_name = Name.binding big_rec_name', coind = false, no_elim = false, no_ind = true,
+ alt_name = Binding.name big_rec_name', coind = false, no_elim = false, no_ind = true,
skip_mono = true}
- (map (fn (s, T) => ((Name.binding s, T), NoSyn)) (rec_set_names' ~~ rec_set_Ts))
+ (map (fn (s, T) => ((Binding.name s, T), NoSyn)) (rec_set_names' ~~ rec_set_Ts))
(map dest_Free rec_fns)
- (map (fn x => (Attrib.no_binding, x)) rec_intr_ts) [] thy0;
+ (map (fn x => (Attrib.empty_binding, x)) rec_intr_ts) [] thy0;
(* prove uniqueness and termination of primrec combinators *)
@@ -226,7 +226,7 @@
(* define primrec combinators *)
val big_reccomb_name = (space_implode "_" new_type_names) ^ "_rec";
- val reccomb_names = map (Sign.full_name thy1)
+ val reccomb_names = map (Sign.full_bname thy1)
(if length descr' = 1 then [big_reccomb_name] else
(map ((curry (op ^) (big_reccomb_name ^ "_")) o string_of_int)
(1 upto (length descr'))));
@@ -294,7 +294,7 @@
in Const (@{const_name undefined}, Ts @ Ts' ---> T')
end) constrs) descr';
- val case_names = map (fn s => Sign.full_name thy1 (s ^ "_case")) new_type_names;
+ val case_names = map (fn s => Sign.full_bname thy1 (s ^ "_case")) new_type_names;
(* define case combinators via primrec combinators *)
@@ -317,7 +317,7 @@
val fns = (List.concat (Library.take (i, case_dummy_fns))) @
fns2 @ (List.concat (Library.drop (i + 1, case_dummy_fns)));
val reccomb = Const (recname, (map fastype_of fns) @ [T] ---> T');
- val decl = ((Name.binding (Sign.base_name name), caseT), NoSyn);
+ val decl = ((Binding.name (Sign.base_name name), caseT), NoSyn);
val def = ((Sign.base_name name) ^ "_def",
Logic.mk_equals (list_comb (Const (name, caseT), fns1),
list_comb (reccomb, (List.concat (Library.take (i, case_dummy_fns))) @
--- a/src/HOL/Tools/datatype_codegen.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Tools/datatype_codegen.ML Thu Dec 04 14:43:33 2008 +0100
@@ -440,7 +440,7 @@
(mk_side @{const_name eq_class.eq}, mk_side @{const_name "op ="}));
val def' = Syntax.check_term lthy def;
val ((_, (_, thm)), lthy') = Specification.definition
- (NONE, (Attrib.no_binding, def')) lthy;
+ (NONE, (Attrib.empty_binding, def')) lthy;
val ctxt_thy = ProofContext.init (ProofContext.theory_of lthy);
val thm' = singleton (ProofContext.export lthy' ctxt_thy) thm;
in (thm', lthy') end;
--- a/src/HOL/Tools/datatype_package.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Tools/datatype_package.ML Thu Dec 04 14:43:33 2008 +0100
@@ -567,7 +567,7 @@
val (tyvars, _, _, _)::_ = dts;
val (new_dts, types_syntax) = ListPair.unzip (map (fn (tvs, tname, mx, _) =>
- let val full_tname = Sign.full_name tmp_thy (Syntax.type_name tname mx)
+ let val full_tname = Sign.full_bname tmp_thy (Syntax.type_name tname mx)
in (case duplicates (op =) tvs of
[] => if eq_set (tyvars, tvs) then ((full_tname, tvs), (tname, mx))
else error ("Mutually recursive datatypes must have same type parameters")
@@ -586,8 +586,8 @@
val _ = (case fold (curry add_typ_tfree_names) cargs' [] \\ tvs of
[] => ()
| vs => error ("Extra type variables on rhs: " ^ commas vs))
- in (constrs @ [((if flat_names then Sign.full_name tmp_thy else
- Sign.full_name_path tmp_thy tname) (Syntax.const_name cname mx'),
+ in (constrs @ [((if flat_names then Sign.full_bname tmp_thy else
+ Sign.full_bname_path tmp_thy tname) (Syntax.const_name cname mx'),
map (dtyp_of_typ new_dts) cargs')],
constr_syntax' @ [(cname, mx')], sorts'')
end handle ERROR msg =>
@@ -600,7 +600,7 @@
in
case duplicates (op =) (map fst constrs') of
[] =>
- (dts' @ [(i, (Sign.full_name tmp_thy (Syntax.type_name tname mx),
+ (dts' @ [(i, (Sign.full_bname tmp_thy (Syntax.type_name tname mx),
map DtTFree tvs, constrs'))],
constr_syntax @ [constr_syntax'], sorts', i + 1)
| dups => error ("Duplicate constructors " ^ commas dups ^
--- a/src/HOL/Tools/datatype_rep_proofs.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Tools/datatype_rep_proofs.ML Thu Dec 04 14:43:33 2008 +0100
@@ -77,7 +77,7 @@
(if length descr' = 1 then [big_rec_name] else
(map ((curry (op ^) (big_rec_name ^ "_")) o string_of_int)
(1 upto (length descr'))));
- val rep_set_names = map (Sign.full_name thy1) rep_set_names';
+ val rep_set_names = map (Sign.full_bname thy1) rep_set_names';
val tyvars = map (fn (_, (_, Ts, _)) => map dest_DtTFree Ts) (hd descr);
val leafTs' = get_nonrec_types descr' sorts;
@@ -184,10 +184,10 @@
val ({raw_induct = rep_induct, intrs = rep_intrs, ...}, thy2) =
InductivePackage.add_inductive_global (serial_string ())
{quiet_mode = ! quiet_mode, verbose = false, kind = Thm.internalK,
- alt_name = Name.binding big_rec_name, coind = false, no_elim = true, no_ind = false,
+ alt_name = Binding.name big_rec_name, coind = false, no_elim = true, no_ind = false,
skip_mono = true}
- (map (fn s => ((Name.binding s, UnivT'), NoSyn)) rep_set_names') []
- (map (fn x => (Attrib.no_binding, x)) intr_ts) [] thy1;
+ (map (fn s => ((Binding.name s, UnivT'), NoSyn)) rep_set_names') []
+ (map (fn x => (Attrib.empty_binding, x)) intr_ts) [] thy1;
(********************************* typedef ********************************)
@@ -210,7 +210,7 @@
val rep_names' = map (fn i => big_rep_name ^ (string_of_int i))
(1 upto (length (flat (tl descr))));
val all_rep_names = map (Sign.intern_const thy3) rep_names @
- map (Sign.full_name thy3) rep_names';
+ map (Sign.full_bname thy3) rep_names';
(* isomorphism declarations *)
--- a/src/HOL/Tools/function_package/fundef_common.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Tools/function_package/fundef_common.ML Thu Dec 04 14:43:33 2008 +0100
@@ -82,7 +82,7 @@
psimps, pinducts, termination, defname}) phi =
let
val term = Morphism.term phi val thm = Morphism.thm phi val fact = Morphism.fact phi
- val name = Name.name_of o Morphism.name phi o Name.binding
+ val name = Name.name_of o Morphism.binding phi o Binding.name
in
FundefCtxData { add_simps = add_simps, case_names = case_names,
fs = map term fs, R = term R, psimps = fact psimps,
--- a/src/HOL/Tools/function_package/fundef_core.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Tools/function_package/fundef_core.ML Thu Dec 04 14:43:33 2008 +0100
@@ -485,7 +485,7 @@
|> Syntax.check_term lthy
val ((f, (_, f_defthm)), lthy) =
- LocalTheory.define Thm.internalK ((Name.binding (function_name fname), mixfix), ((Name.binding fdefname, []), f_def)) lthy
+ LocalTheory.define Thm.internalK ((Binding.name (function_name fname), mixfix), ((Binding.name fdefname, []), f_def)) lthy
in
((f, f_defthm), lthy)
end
@@ -898,7 +898,7 @@
PROFILE "def_rel" (define_recursion_relation (rel_name defname) domT ranT fvar f abstract_qglrs clauses RCss) lthy
val (_, lthy) =
- LocalTheory.abbrev Syntax.mode_default ((Name.binding (dom_name defname), NoSyn), mk_acc domT R) lthy
+ LocalTheory.abbrev Syntax.mode_default ((Binding.name (dom_name defname), NoSyn), mk_acc domT R) lthy
val newthy = ProofContext.theory_of lthy
val clauses = map (transfer_clause_ctx newthy) clauses
--- a/src/HOL/Tools/function_package/fundef_lib.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Tools/function_package/fundef_lib.ML Thu Dec 04 14:43:33 2008 +0100
@@ -56,7 +56,7 @@
fun dest_all_all_ctx ctx (Const ("all", _) $ Abs (a as (n,T,b))) =
let
val [(n', _)] = Variable.variant_frees ctx [] [(n,T)]
- val (_, ctx') = ProofContext.add_fixes_i [(Name.binding n', SOME T, NoSyn)] ctx
+ val (_, ctx') = ProofContext.add_fixes_i [(Binding.name n', SOME T, NoSyn)] ctx
val (n'', body) = Term.dest_abs (n', T, b)
val _ = (n' = n'') orelse error "dest_all_ctx"
--- a/src/HOL/Tools/function_package/fundef_package.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Tools/function_package/fundef_package.ML Thu Dec 04 14:43:33 2008 +0100
@@ -9,14 +9,14 @@
signature FUNDEF_PACKAGE =
sig
- val add_fundef : (Name.binding * string option * mixfix) list
+ val add_fundef : (Binding.T * string option * mixfix) list
-> (Attrib.binding * string) list
-> FundefCommon.fundef_config
-> bool list
-> local_theory
-> Proof.state
- val add_fundef_i: (Name.binding * typ option * mixfix) list
+ val add_fundef_i: (Binding.T * typ option * mixfix) list
-> (Attrib.binding * term) list
-> FundefCommon.fundef_config
-> bool list
@@ -36,7 +36,7 @@
open FundefLib
open FundefCommon
-fun note_theorem ((name, atts), ths) = LocalTheory.note Thm.theoremK ((Name.binding name, atts), ths)
+fun note_theorem ((name, atts), ths) = LocalTheory.note Thm.theoremK ((Binding.name name, atts), ths)
fun mk_defname fixes = fixes |> map (fst o fst) |> space_implode "_"
@@ -147,10 +147,10 @@
val goal = HOLogic.mk_Trueprop (HOLogic.mk_all ("x", domT, mk_acc domT R $ Free ("x", domT)))
in
lthy
- |> ProofContext.note_thmss_i "" [((Name.no_binding, [ContextRules.rule_del]), [([allI], [])])] |> snd
- |> ProofContext.note_thmss_i "" [((Name.no_binding, [ContextRules.intro_bang (SOME 1)]), [([allI], [])])] |> snd
+ |> ProofContext.note_thmss_i "" [((Binding.empty, [ContextRules.rule_del]), [([allI], [])])] |> snd
+ |> ProofContext.note_thmss_i "" [((Binding.empty, [ContextRules.intro_bang (SOME 1)]), [([allI], [])])] |> snd
|> ProofContext.note_thmss_i ""
- [((Name.binding "termination", [ContextRules.intro_bang (SOME 0)]),
+ [((Binding.name "termination", [ContextRules.intro_bang (SOME 0)]),
[([Goal.norm_result termination], [])])] |> snd
|> Proof.theorem_i NONE (total_termination_afterqed data) [[(goal, [])]]
end
--- a/src/HOL/Tools/function_package/inductive_wrap.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Tools/function_package/inductive_wrap.ML Thu Dec 04 14:43:33 2008 +0100
@@ -44,14 +44,14 @@
{quiet_mode = false,
verbose = ! Toplevel.debug,
kind = Thm.internalK,
- alt_name = Name.no_binding,
+ alt_name = Binding.empty,
coind = false,
no_elim = false,
no_ind = false,
skip_mono = true}
- [((Name.binding R, T), NoSyn)] (* the relation *)
+ [((Binding.name R, T), NoSyn)] (* the relation *)
[] (* no parameters *)
- (map (fn t => (Attrib.no_binding, t)) defs) (* the intros *)
+ (map (fn t => (Attrib.empty_binding, t)) defs) (* the intros *)
[] (* no special monos *)
lthy
--- a/src/HOL/Tools/function_package/mutual.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Tools/function_package/mutual.ML Thu Dec 04 14:43:33 2008 +0100
@@ -150,8 +150,8 @@
fun def ((MutualPart {i=i, i'=i', fvar=(fname, fT), cargTs, f_def, ...}), (_, mixfix)) lthy =
let
val ((f, (_, f_defthm)), lthy') =
- LocalTheory.define Thm.internalK ((Name.binding fname, mixfix),
- ((Name.binding (fname ^ "_def"), []), Term.subst_bound (fsum, f_def)))
+ LocalTheory.define Thm.internalK ((Binding.name fname, mixfix),
+ ((Binding.name (fname ^ "_def"), []), Term.subst_bound (fsum, f_def)))
lthy
in
(MutualPart {i=i, i'=i', fvar=(fname, fT), cargTs=cargTs, f_def=f_def,
--- a/src/HOL/Tools/function_package/size.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Tools/function_package/size.ML Thu Dec 04 14:43:33 2008 +0100
@@ -89,7 +89,7 @@
map (fn (T as Type (s, _), optname) =>
let
val s' = the_default (Sign.base_name s) optname ^ "_size";
- val s'' = Sign.full_name thy s'
+ val s'' = Sign.full_bname thy s'
in
(s'',
(list_comb (Const (s'', param_size_fTs @ [T] ---> HOLogic.natT),
@@ -133,7 +133,7 @@
let
val (Free (c, _), rhs) = (Logic.dest_equals o Syntax.check_term lthy) eq;
val ((_, (_, thm)), lthy') = lthy |> LocalTheory.define Thm.definitionK
- ((Name.binding c, NoSyn), ((Name.binding def_name, []), rhs));
+ ((Binding.name c, NoSyn), ((Binding.name def_name, []), rhs));
val ctxt_thy = ProofContext.init (ProofContext.theory_of lthy');
val thm' = singleton (ProofContext.export lthy' ctxt_thy) thm;
in (thm', lthy') end;
--- a/src/HOL/Tools/inductive_package.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Tools/inductive_package.ML Thu Dec 04 14:43:33 2008 +0100
@@ -1,5 +1,4 @@
(* Title: HOL/Tools/inductive_package.ML
- ID: $Id$
Author: Lawrence C Paulson, Cambridge University Computer Laboratory
Author: Stefan Berghofer and Markus Wenzel, TU Muenchen
@@ -39,17 +38,17 @@
thm list list * local_theory
type inductive_flags
val add_inductive_i:
- inductive_flags -> ((Name.binding * typ) * mixfix) list ->
+ inductive_flags -> ((Binding.T * typ) * mixfix) list ->
(string * typ) list -> (Attrib.binding * term) list -> thm list -> local_theory ->
inductive_result * local_theory
val add_inductive: bool -> bool ->
- (Name.binding * string option * mixfix) list ->
- (Name.binding * string option * mixfix) list ->
+ (Binding.T * string option * mixfix) list ->
+ (Binding.T * string option * mixfix) list ->
(Attrib.binding * string) list ->
(Facts.ref * Attrib.src list) list ->
local_theory -> inductive_result * local_theory
val add_inductive_global: string -> inductive_flags ->
- ((Name.binding * typ) * mixfix) list -> (string * typ) list -> (Attrib.binding * term) list ->
+ ((Binding.T * typ) * mixfix) list -> (string * typ) list -> (Attrib.binding * term) list ->
thm list -> theory -> inductive_result * theory
val arities_of: thm -> (string * int) list
val params_of: thm -> term list
@@ -64,16 +63,16 @@
sig
include BASIC_INDUCTIVE_PACKAGE
type add_ind_def
- val declare_rules: string -> Name.binding -> bool -> bool -> string list ->
- thm list -> Name.binding list -> Attrib.src list list -> (thm * string list) list ->
+ val declare_rules: string -> Binding.T -> bool -> bool -> string list ->
+ thm list -> Binding.T list -> Attrib.src list list -> (thm * string list) list ->
thm -> local_theory -> thm list * thm list * thm * local_theory
val add_ind_def: add_ind_def
val gen_add_inductive_i: add_ind_def -> inductive_flags ->
- ((Name.binding * typ) * mixfix) list -> (string * typ) list -> (Attrib.binding * term) list ->
+ ((Binding.T * typ) * mixfix) list -> (string * typ) list -> (Attrib.binding * term) list ->
thm list -> local_theory -> inductive_result * local_theory
val gen_add_inductive: add_ind_def -> bool -> bool ->
- (Name.binding * string option * mixfix) list ->
- (Name.binding * string option * mixfix) list ->
+ (Binding.T * string option * mixfix) list ->
+ (Binding.T * string option * mixfix) list ->
(Attrib.binding * string) list -> (Facts.ref * Attrib.src list) list ->
local_theory -> inductive_result * local_theory
val gen_ind_decl: add_ind_def -> bool ->
@@ -638,14 +637,14 @@
(* add definiton of recursive predicates to theory *)
val rec_name =
- if Binding.is_nothing alt_name then
- Binding.binding (space_implode "_" (map (Name.name_of o fst) cnames_syn))
+ if Binding.is_empty alt_name then
+ Binding.name (space_implode "_" (map (Name.name_of o fst) cnames_syn))
else alt_name;
val ((rec_const, (_, fp_def)), ctxt') = ctxt |>
LocalTheory.define Thm.internalK
((rec_name, case cnames_syn of [(_, syn)] => syn | _ => NoSyn),
- (Attrib.no_binding, fold_rev lambda params
+ (Attrib.empty_binding, fold_rev lambda params
(Const (fp_name, (predT --> predT) --> predT) $ fp_fun)));
val fp_def' = Simplifier.rewrite (HOL_basic_ss addsimps [fp_def])
(cterm_of (ProofContext.theory_of ctxt') (list_comb (rec_const, params)));
@@ -656,7 +655,7 @@
val xs = map Free (Variable.variant_frees ctxt intr_ts
(mk_names "x" (length Ts) ~~ Ts))
in
- (name_mx, (Attrib.no_binding, fold_rev lambda (params @ xs)
+ (name_mx, (Attrib.empty_binding, fold_rev lambda (params @ xs)
(list_comb (rec_const, params @ make_bool_args' bs i @
make_args argTs (xs ~~ Ts)))))
end) (cnames_syn ~~ cs);
@@ -673,7 +672,7 @@
elims raw_induct ctxt =
let
val rec_name = Name.name_of rec_binding;
- val rec_qualified = Name.qualified rec_name;
+ val rec_qualified = Binding.qualify rec_name;
val intr_names = map Name.name_of intr_bindings;
val ind_case_names = RuleCases.case_names intr_names;
val induct =
@@ -693,23 +692,23 @@
map (hd o snd);
val (((_, elims'), (_, [induct'])), ctxt2) =
ctxt1 |>
- LocalTheory.note kind ((rec_qualified (Name.binding "intros"), []), intrs') ||>>
+ LocalTheory.note kind ((rec_qualified (Binding.name "intros"), []), intrs') ||>>
fold_map (fn (name, (elim, cases)) =>
- LocalTheory.note kind ((Name.binding (NameSpace.qualified (Sign.base_name name) "cases"),
+ LocalTheory.note kind ((Binding.name (NameSpace.qualified (Sign.base_name name) "cases"),
[Attrib.internal (K (RuleCases.case_names cases)),
Attrib.internal (K (RuleCases.consumes 1)),
Attrib.internal (K (Induct.cases_pred name)),
Attrib.internal (K (ContextRules.elim_query NONE))]), [elim]) #>
apfst (hd o snd)) (if null elims then [] else cnames ~~ elims) ||>>
LocalTheory.note kind
- ((rec_qualified (Name.binding (coind_prefix coind ^ "induct")),
+ ((rec_qualified (Binding.name (coind_prefix coind ^ "induct")),
map (Attrib.internal o K) (#2 induct)), [rulify (#1 induct)]);
val ctxt3 = if no_ind orelse coind then ctxt2 else
let val inducts = cnames ~~ ProjectRule.projects ctxt2 (1 upto length cnames) induct'
in
ctxt2 |>
- LocalTheory.notes kind [((rec_qualified (Name.binding "inducts"), []),
+ LocalTheory.notes kind [((rec_qualified (Binding.name "inducts"), []),
inducts |> map (fn (name, th) => ([th],
[Attrib.internal (K ind_case_names),
Attrib.internal (K (RuleCases.consumes 1)),
@@ -718,13 +717,13 @@
in (intrs', elims', induct', ctxt3) end;
type inductive_flags =
- {quiet_mode: bool, verbose: bool, kind: string, alt_name: Name.binding,
+ {quiet_mode: bool, verbose: bool, kind: string, alt_name: Binding.T,
coind: bool, no_elim: bool, no_ind: bool, skip_mono: bool}
type add_ind_def =
inductive_flags ->
term list -> (Attrib.binding * term) list -> thm list ->
- term list -> (Name.binding * mixfix) list ->
+ term list -> (Binding.T * mixfix) list ->
local_theory -> inductive_result * local_theory
fun add_ind_def {quiet_mode, verbose, kind, alt_name, coind, no_elim, no_ind, skip_mono}
@@ -735,7 +734,7 @@
val _ = message (quiet_mode andalso not verbose)
("Proofs for " ^ coind_prefix coind ^ "inductive predicate(s) " ^ commas_quote names);
- val cnames = map (Sign.full_name (ProofContext.theory_of ctxt) o Name.name_of o #1) cnames_syn; (* FIXME *)
+ val cnames = map (Sign.full_bname (ProofContext.theory_of ctxt) o Name.name_of o #1) cnames_syn; (* FIXME *)
val ((intr_names, intr_atts), intr_ts) =
apfst split_list (split_list (map (check_rule ctxt cs params) intros));
@@ -846,7 +845,7 @@
val intrs = map (apsnd the_single) specs;
val monos = Attrib.eval_thms lthy raw_monos;
val flags = {quiet_mode = false, verbose = verbose, kind = Thm.theoremK,
- alt_name = Name.no_binding, coind = coind, no_elim = false, no_ind = false, skip_mono = false};
+ alt_name = Binding.empty, coind = coind, no_elim = false, no_ind = false, skip_mono = false};
in
lthy
|> LocalTheory.set_group (serial_string ())
@@ -858,7 +857,7 @@
fun add_inductive_global group flags cnames_syn pnames pre_intros monos thy =
let
- val name = Sign.full_name thy (Name.name_of (fst (fst (hd cnames_syn))));
+ val name = Sign.full_bname thy (Name.name_of (fst (fst (hd cnames_syn))));
val ctxt' = thy
|> TheoryTarget.init NONE
|> LocalTheory.set_group group
--- a/src/HOL/Tools/inductive_realizer.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Tools/inductive_realizer.ML Thu Dec 04 14:43:33 2008 +0100
@@ -338,7 +338,7 @@
(Logic.strip_assums_concl rintr));
val s' = Sign.base_name s;
val T' = Logic.unvarifyT T
- in (((Name.binding s', T'), NoSyn), (Const (s, T'), Free (s', T'))) end) rintrs));
+ in (((Binding.name s', T'), NoSyn), (Const (s, T'), Free (s', T'))) end) rintrs));
val rlzparams = map (fn Var ((s, _), T) => (s, Logic.unvarifyT T))
(List.take (snd (strip_comb
(HOLogic.dest_Trueprop (Logic.strip_assums_concl (hd rintrs)))), nparms));
@@ -347,10 +347,10 @@
val (ind_info, thy3') = thy2 |>
InductivePackage.add_inductive_global (serial_string ())
- {quiet_mode = false, verbose = false, kind = Thm.theoremK, alt_name = Name.no_binding,
+ {quiet_mode = false, verbose = false, kind = Thm.theoremK, alt_name = Binding.empty,
coind = false, no_elim = false, no_ind = false, skip_mono = false}
rlzpreds rlzparams (map (fn (rintr, intr) =>
- ((Name.binding (Sign.base_name (name_of_thm intr)), []),
+ ((Binding.name (Sign.base_name (name_of_thm intr)), []),
subst_atomic rlzpreds' (Logic.unvarify rintr)))
(rintrs ~~ maps snd rss)) [] ||>
Sign.absolute_path;
--- a/src/HOL/Tools/inductive_set_package.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Tools/inductive_set_package.ML Thu Dec 04 14:43:33 2008 +0100
@@ -1,5 +1,4 @@
(* Title: HOL/Tools/inductive_set_package.ML
- ID: $Id$
Author: Stefan Berghofer, TU Muenchen
Wrapper for defining inductive sets using package for inductive predicates,
@@ -13,13 +12,13 @@
val pred_set_conv_att: attribute
val add_inductive_i:
InductivePackage.inductive_flags ->
- ((Name.binding * typ) * mixfix) list ->
+ ((Binding.T * typ) * mixfix) list ->
(string * typ) list ->
(Attrib.binding * term) list -> thm list ->
local_theory -> InductivePackage.inductive_result * local_theory
val add_inductive: bool -> bool ->
- (Name.binding * string option * mixfix) list ->
- (Name.binding * string option * mixfix) list ->
+ (Binding.T * string option * mixfix) list ->
+ (Binding.T * string option * mixfix) list ->
(Attrib.binding * string) list -> (Facts.ref * Attrib.src list) list ->
local_theory -> InductivePackage.inductive_result * local_theory
val codegen_preproc: theory -> thm list -> thm list
@@ -464,17 +463,17 @@
| NONE => u)) |>
Pattern.rewrite_term thy [] [to_pred_proc thy eqns'] |>
eta_contract (member op = cs' orf is_pred pred_arities))) intros;
- val cnames_syn' = map (fn (b, _) => (Name.map_name (suffix "p") b, NoSyn)) cnames_syn;
+ val cnames_syn' = map (fn (b, _) => (Binding.map_base (suffix "p") b, NoSyn)) cnames_syn;
val monos' = map (to_pred [] (Context.Proof ctxt)) monos;
val ({preds, intrs, elims, raw_induct, ...}, ctxt1) =
InductivePackage.add_ind_def
- {quiet_mode = quiet_mode, verbose = verbose, kind = kind, alt_name = Name.no_binding,
+ {quiet_mode = quiet_mode, verbose = verbose, kind = kind, alt_name = Binding.empty,
coind = coind, no_elim = no_elim, no_ind = no_ind, skip_mono = skip_mono}
cs' intros' monos' params1 cnames_syn' ctxt;
(* define inductive sets using previously defined predicates *)
val (defs, ctxt2) = fold_map (LocalTheory.define Thm.internalK)
- (map (fn ((c_syn, (fs, U, _)), p) => (c_syn, (Attrib.no_binding,
+ (map (fn ((c_syn, (fs, U, _)), p) => (c_syn, (Attrib.empty_binding,
fold_rev lambda params (HOLogic.Collect_const U $
HOLogic.ap_split' fs U HOLogic.boolT (list_comb (p, params3))))))
(cnames_syn ~~ cs_info ~~ preds)) ctxt1;
@@ -492,17 +491,17 @@
(K (REPEAT (rtac ext 1) THEN simp_tac (HOL_basic_ss addsimps
[def, mem_Collect_eq, split_conv]) 1))
in
- ctxt |> LocalTheory.note kind ((Name.binding (s ^ "p_" ^ s ^ "_eq"),
+ ctxt |> LocalTheory.note kind ((Binding.name (s ^ "p_" ^ s ^ "_eq"),
[Attrib.internal (K pred_set_conv_att)]),
[conv_thm]) |> snd
end) (preds ~~ cs ~~ cs_info ~~ defs) ctxt2;
(* convert theorems to set notation *)
val rec_name =
- if Binding.is_nothing alt_name then
- Binding.binding (space_implode "_" (map (Name.name_of o fst) cnames_syn))
+ if Binding.is_empty alt_name then
+ Binding.name (space_implode "_" (map (Name.name_of o fst) cnames_syn))
else alt_name;
- val cnames = map (Sign.full_name (ProofContext.theory_of ctxt3) o Name.name_of o #1) cnames_syn; (* FIXME *)
+ val cnames = map (Sign.full_bname (ProofContext.theory_of ctxt3) o Name.name_of o #1) cnames_syn; (* FIXME *)
val (intr_names, intr_atts) = split_list (map fst intros);
val raw_induct' = to_set [] (Context.Proof ctxt3) raw_induct;
val (intrs', elims', induct, ctxt4) =
--- a/src/HOL/Tools/primrec_package.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Tools/primrec_package.ML Thu Dec 04 14:43:33 2008 +0100
@@ -1,5 +1,4 @@
(* Title: HOL/Tools/primrec_package.ML
- ID: $Id$
Author: Stefan Berghofer, TU Muenchen; Norbert Voelker, FernUni Hagen;
Florian Haftmann, TU Muenchen
@@ -8,12 +7,12 @@
signature PRIMREC_PACKAGE =
sig
- val add_primrec: (Name.binding * typ option * mixfix) list ->
+ val add_primrec: (Binding.T * typ option * mixfix) list ->
(Attrib.binding * term) list -> local_theory -> thm list * local_theory
- val add_primrec_global: (Name.binding * typ option * mixfix) list ->
+ val add_primrec_global: (Binding.T * typ option * mixfix) list ->
(Attrib.binding * term) list -> theory -> thm list * theory
val add_primrec_overloaded: (string * (string * typ) * bool) list ->
- (Name.binding * typ option * mixfix) list ->
+ (Binding.T * typ option * mixfix) list ->
(Attrib.binding * term) list -> theory -> thm list * theory
end;
@@ -196,7 +195,7 @@
val rhs = singleton (Syntax.check_terms ctxt) raw_rhs;
val SOME var = get_first (fn ((b, _), mx) =>
if Name.name_of b = fname then SOME (b, mx) else NONE) fixes;
- in (var, ((Name.binding def_name, []), rhs)) end;
+ in (var, ((Binding.name def_name, []), rhs)) end;
(* find datatypes which contain all datatypes in tnames' *)
@@ -248,7 +247,7 @@
val _ = if gen_eq_set (op =) (names1, names2) then ()
else primrec_error ("functions " ^ commas_quote names2 ^
"\nare not mutually recursive");
- val qualify = Name.qualified
+ val qualify = Binding.qualify
(space_implode "_" (map (Sign.base_name o #1) defs));
val spec' = (map o apfst o apfst) qualify spec;
val simp_atts = map (Attrib.internal o K)
@@ -260,7 +259,7 @@
|-> (fn defs => `(fn ctxt => prove_spec ctxt names1 rec_rewrites defs spec'))
|-> (fn simps => fold_map (LocalTheory.note Thm.theoremK) simps)
|-> (fn simps' => LocalTheory.note Thm.theoremK
- ((qualify (Name.binding "simps"), simp_atts), maps snd simps'))
+ ((qualify (Binding.name "simps"), simp_atts), maps snd simps'))
|>> snd
end handle PrimrecError (msg, some_eqn) =>
error ("Primrec definition error:\n" ^ msg ^ (case some_eqn
--- a/src/HOL/Tools/recdef_package.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Tools/recdef_package.ML Thu Dec 04 14:43:33 2008 +0100
@@ -268,8 +268,8 @@
error ("No termination condition #" ^ string_of_int i ^
" in recdef definition of " ^ quote name);
in
- Specification.theorem Thm.internalK NONE (K I) (Name.binding bname, atts)
- [] (Element.Shows [(Attrib.no_binding, [(HOLogic.mk_Trueprop tc, [])])]) int lthy
+ Specification.theorem Thm.internalK NONE (K I) (Binding.name bname, atts)
+ [] (Element.Shows [(Attrib.empty_binding, [(HOLogic.mk_Trueprop tc, [])])]) int lthy
end;
val recdef_tc = gen_recdef_tc Attrib.intern_src Sign.intern_const;
--- a/src/HOL/Tools/record_package.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Tools/record_package.ML Thu Dec 04 14:43:33 2008 +0100
@@ -1762,8 +1762,8 @@
val external_names = NameSpace.external_names (Sign.naming_of thy);
val alphas = map fst args;
- val name = Sign.full_name thy bname;
- val full = Sign.full_name_path thy bname;
+ val name = Sign.full_bname thy bname;
+ val full = Sign.full_bname_path thy bname;
val base = Sign.base_name;
val (bfields, field_syntax) = split_list (map (fn (x, T, mx) => ((x, T), mx)) raw_fields);
@@ -2253,7 +2253,7 @@
(* errors *)
- val name = Sign.full_name thy bname;
+ val name = Sign.full_bname thy bname;
val err_dup_record =
if is_none (get_record thy name) then []
else ["Duplicate definition of record " ^ quote name];
--- a/src/HOL/Tools/res_axioms.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Tools/res_axioms.ML Thu Dec 04 14:43:33 2008 +0100
@@ -84,10 +84,10 @@
val rhs = list_abs_free (map dest_Free args, HOLogic.choice_const T $ xtp)
(*Forms a lambda-abstraction over the formal parameters*)
val (c, thy') =
- Sign.declare_const [Markup.property_internal] ((Name.binding cname, cT), NoSyn) thy
+ Sign.declare_const [Markup.property_internal] ((Binding.name cname, cT), NoSyn) thy
val cdef = cname ^ "_def"
val thy'' = Theory.add_defs_i true false [(cdef, Logic.mk_equals (c, rhs))] thy'
- val ax = Thm.axiom thy'' (Sign.full_name thy'' cdef)
+ val ax = Thm.axiom thy'' (Sign.full_bname thy'' cdef)
in dec_sko (subst_bound (list_comb (c, args), p)) (ax :: axs, thy'') end
| dec_sko (Const ("All", _) $ (xtp as Abs (a, T, p))) thx =
(*Universal quant: insert a free variable into body and continue*)
--- a/src/HOL/Tools/typecopy_package.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Tools/typecopy_package.ML Thu Dec 04 14:43:33 2008 +0100
@@ -143,7 +143,7 @@
|> TheoryTarget.instantiation ([tyco], vs, [HOLogic.class_eq])
|> `(fn lthy => Syntax.check_term lthy def_eq)
|-> (fn def_eq => Specification.definition
- (NONE, (Attrib.no_binding, def_eq)))
+ (NONE, (Attrib.empty_binding, def_eq)))
|-> (fn (_, (_, def_thm)) =>
Class.prove_instantiation_exit_result Morphism.thm
(fn _ => fn def_thm => Class.intro_classes_tac []
--- a/src/HOL/Tools/typedef_package.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Tools/typedef_package.ML Thu Dec 04 14:43:33 2008 +0100
@@ -80,7 +80,7 @@
let
val _ = Theory.requires thy "Typedef" "typedefs";
val ctxt = ProofContext.init thy;
- val full = Sign.full_name thy;
+ val full = Sign.full_bname thy;
(*rhs*)
val full_name = full name;
--- a/src/HOL/Typedef.thy Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Typedef.thy Thu Dec 04 14:43:33 2008 +0100
@@ -145,7 +145,7 @@
thy
|> TheoryTarget.instantiation ([tyco], vs, @{sort itself})
|> `(fn lthy => Syntax.check_term lthy eq)
- |-> (fn eq => Specification.definition (NONE, (Attrib.no_binding, eq)))
+ |-> (fn eq => Specification.definition (NONE, (Attrib.empty_binding, eq)))
|> snd
|> Class.prove_instantiation_instance (K (Class.intro_classes_tac []))
|> LocalTheory.exit_global
--- a/src/HOL/Typerep.thy Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/Typerep.thy Thu Dec 04 14:43:33 2008 +0100
@@ -67,7 +67,7 @@
thy
|> TheoryTarget.instantiation ([tyco], vs, @{sort typerep})
|> `(fn lthy => Syntax.check_term lthy eq)
- |-> (fn eq => Specification.definition (NONE, (Attrib.no_binding, eq)))
+ |-> (fn eq => Specification.definition (NONE, (Attrib.empty_binding, eq)))
|> snd
|> Class.prove_instantiation_instance (K (Class.intro_classes_tac []))
|> LocalTheory.exit_global
--- a/src/HOL/ex/Quickcheck.thy Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/ex/Quickcheck.thy Thu Dec 04 14:43:33 2008 +0100
@@ -151,11 +151,11 @@
thy
|> TheoryTarget.instantiation ([tyco], vs, @{sort random})
|> PrimrecPackage.add_primrec
- [(Name.binding (fst (dest_Free random')), SOME (snd (dest_Free random')), NoSyn)]
- (map (fn eq => ((Name.no_binding, [del_func]), eq)) eqs')
+ [(Binding.name (fst (dest_Free random')), SOME (snd (dest_Free random')), NoSyn)]
+ (map (fn eq => ((Binding.empty, [del_func]), eq)) eqs')
|-> add_code
|> `(fn lthy => Syntax.check_term lthy eq)
- |-> (fn eq => Specification.definition (NONE, (Attrib.no_binding, eq)))
+ |-> (fn eq => Specification.definition (NONE, (Attrib.empty_binding, eq)))
|> snd
|> Class.prove_instantiation_instance (K (Class.intro_classes_tac []))
|> LocalTheory.exit_global
--- a/src/HOL/ex/Term_Of_Syntax.thy Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOL/ex/Term_Of_Syntax.thy Thu Dec 04 14:43:33 2008 +0100
@@ -10,7 +10,7 @@
begin
setup {*
- Sign.declare_const [] ((Name.binding "rterm_of", @{typ "'a \<Rightarrow> 'b"}), NoSyn)
+ Sign.declare_const [] ((Binding.name "rterm_of", @{typ "'a \<Rightarrow> 'b"}), NoSyn)
#> snd
*}
--- a/src/HOLCF/Tools/domain/domain_axioms.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOLCF/Tools/domain/domain_axioms.ML Thu Dec 04 14:43:33 2008 +0100
@@ -120,7 +120,7 @@
in (* local *)
fun add_axioms (comp_dnam, eqs : eq list) thy' = let
- val comp_dname = Sign.full_name thy' comp_dnam;
+ val comp_dname = Sign.full_bname thy' comp_dnam;
val dnames = map (fst o fst) eqs;
val x_name = idx_name dnames "x";
fun copy_app dname = %%:(dname^"_copy")`Bound 0;
--- a/src/HOLCF/Tools/domain/domain_extender.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOLCF/Tools/domain/domain_extender.ML Thu Dec 04 14:43:33 2008 +0100
@@ -100,7 +100,7 @@
fun gen_add_domain prep_typ (comp_dnam, eqs''') thy''' =
let
val dtnvs = map ((fn (dname,vs) =>
- (Sign.full_name thy''' dname, map (Syntax.read_typ_global thy''') vs))
+ (Sign.full_bname thy''' dname, map (Syntax.read_typ_global thy''') vs))
o fst) eqs''';
val cons''' = map snd eqs''';
fun thy_type (dname,tvars) = (Sign.base_name dname, length tvars, NoSyn);
--- a/src/HOLCF/Tools/domain/domain_theorems.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOLCF/Tools/domain/domain_theorems.ML Thu Dec 04 14:43:33 2008 +0100
@@ -607,7 +607,7 @@
val dnames = map (fst o fst) eqs;
val conss = map snd eqs;
-val comp_dname = Sign.full_name thy comp_dnam;
+val comp_dname = Sign.full_bname thy comp_dnam;
val d = writeln("Proving induction properties of domain "^comp_dname^" ...");
val pg = pg' thy;
--- a/src/HOLCF/Tools/fixrec_package.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOLCF/Tools/fixrec_package.ML Thu Dec 04 14:43:33 2008 +0100
@@ -1,5 +1,4 @@
(* Title: HOLCF/Tools/fixrec_package.ML
- ID: $Id$
Author: Amber Telfer and Brian Huffman
Recursive function definition package for HOLCF.
@@ -10,9 +9,9 @@
val legacy_infer_term: theory -> term -> term
val legacy_infer_prop: theory -> term -> term
val add_fixrec: bool -> (Attrib.binding * string) list list -> theory -> theory
- val add_fixrec_i: bool -> ((Name.binding * attribute list) * term) list list -> theory -> theory
+ val add_fixrec_i: bool -> ((Binding.T * attribute list) * term) list list -> theory -> theory
val add_fixpat: Attrib.binding * string list -> theory -> theory
- val add_fixpat_i: (Name.binding * attribute list) * term list -> theory -> theory
+ val add_fixpat_i: (Binding.T * attribute list) * term list -> theory -> theory
end;
structure FixrecPackage: FIXREC_PACKAGE =
--- a/src/HOLCF/Tools/pcpodef_package.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/HOLCF/Tools/pcpodef_package.ML Thu Dec 04 14:43:33 2008 +0100
@@ -54,7 +54,7 @@
fun prepare_pcpodef prep_term pcpo def name (t, vs, mx) raw_set opt_morphs thy =
let
val ctxt = ProofContext.init thy;
- val full = Sign.full_name thy;
+ val full = Sign.full_bname thy;
(*rhs*)
val full_name = full name;
@@ -94,7 +94,7 @@
|> TheoryTarget.instantiation ([full_tname], lhs_tfrees, @{sort "Porder.po"});
val less_def' = Syntax.check_term lthy3 less_def;
val ((_, (_, less_definition')), lthy4) = lthy3
- |> Specification.definition (NONE, ((Name.binding ("less_" ^ name ^ "_def"), []), less_def'));
+ |> Specification.definition (NONE, ((Binding.name ("less_" ^ name ^ "_def"), []), less_def'));
val ctxt_thy = ProofContext.init (ProofContext.theory_of lthy4);
val less_definition = singleton (ProofContext.export lthy4 ctxt_thy) less_definition';
val thy5 = lthy4
--- a/src/Pure/General/binding.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/General/binding.ML Thu Dec 04 14:43:33 2008 +0100
@@ -15,17 +15,16 @@
sig
include BASIC_BINDING
type T
- val binding_pos: string * Position.T -> T
- val binding: string -> T
- val no_binding: T
- val dest_binding: T -> (string * bool) list * string
- val is_nothing: T -> bool
- val pos_of: T -> Position.T
-
- val map_binding: ((string * bool) list * string -> (string * bool) list * string)
- -> T -> T
+ val name_pos: string * Position.T -> T
+ val name: string -> T
+ val empty: T
+ val map_base: (string -> string) -> T -> T
+ val qualify: string -> T -> T
val add_prefix: bool -> string -> T -> T
val map_prefix: ((string * bool) list -> T -> T) -> T -> T
+ val is_empty: T -> bool
+ val pos_of: T -> Position.T
+ val dest: T -> (string * bool) list * string
val display: T -> string
end
@@ -44,22 +43,30 @@
datatype T = Binding of ((string * bool) list * string) * Position.T;
(* (prefix components (with mandatory flag), base name, position) *)
-fun binding_pos (name, pos) = Binding (([], name), pos);
-fun binding name = binding_pos (name, Position.none);
-val no_binding = binding "";
-
-fun pos_of (Binding (_, pos)) = pos;
-fun dest_binding (Binding (prefix_name, _)) = prefix_name;
+fun name_pos (name, pos) = Binding (([], name), pos);
+fun name name = name_pos (name, Position.none);
+val empty = name "";
fun map_binding f (Binding (prefix_name, pos)) = Binding (f prefix_name, pos);
-fun is_nothing (Binding ((_, name), _)) = name = "";
+val map_base = map_binding o apsnd;
+
+fun qualify_base path name =
+ if path = "" orelse name = "" then name
+ else path ^ "." ^ name;
+
+val qualify = map_base o qualify_base;
+ (*FIXME should all operations on bare names moved here from name_space.ML ?*)
fun add_prefix sticky prfx b = if prfx = "" then error "empty name prefix"
else (map_binding o apfst) (cons (prfx, sticky)) b;
fun map_prefix f (Binding ((prefix, name), pos)) =
- f prefix (binding_pos (name, pos));
+ f prefix (name_pos (name, pos));
+
+fun is_empty (Binding ((_, name), _)) = name = "";
+fun pos_of (Binding (_, pos)) = pos;
+fun dest (Binding (prefix_name, _)) = prefix_name;
fun display (Binding ((prefix, name), _)) =
let
--- a/src/Pure/General/name_space.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/General/name_space.ML Thu Dec 04 14:43:33 2008 +0100
@@ -30,27 +30,24 @@
val get_accesses: T -> string -> xstring list
val merge: T * T -> T
type naming
- val path_of: naming -> string
+ val default_naming: naming
+ val declare: naming -> Binding.T -> T -> string * T
+ val full_name: naming -> Binding.T -> string
+ val declare_base: naming -> string -> T -> T
val external_names: naming -> string -> string list
- val full: naming -> bstring -> string
- val declare: naming -> string -> T -> T
- val default_naming: naming
+ val path_of: naming -> string
val add_path: string -> naming -> naming
val no_base_names: naming -> naming
val qualified_names: naming -> naming
val sticky_prefix: string -> naming -> naming
- val full_binding: naming -> Binding.T -> string
- val declare_binding: naming -> Binding.T -> T -> string * T
type 'a table = T * 'a Symtab.table
val empty_table: 'a table
- val table_declare: naming -> Binding.T * 'a
+ val bind: naming -> Binding.T * 'a
-> 'a table -> string * 'a table (*exception Symtab.DUP*)
- val table_declare_permissive: naming -> Binding.T * 'a
- -> 'a table -> string * 'a table
- val extend_table: naming -> (bstring * 'a) list -> 'a table -> 'a table
val merge_tables: ('a * 'a -> bool) -> 'a table * 'a table -> 'a table
val dest_table: 'a table -> (string * 'a) list
val extern_table: 'a table -> (xstring * 'a) list
+ val extend_table: naming -> (bstring * 'a) list -> 'a table -> 'a table
end;
structure NameSpace: NAME_SPACE =
@@ -269,7 +266,11 @@
fun full (Naming (path, (qualify, _))) = qualify path;
-fun declare naming name space =
+fun full_name naming b =
+ let val (prefix, bname) = Binding.dest b
+ in full (apply_prefix prefix naming) bname end;
+
+fun declare_base naming name space =
if is_hidden name then
error ("Attempt to declare hidden name " ^ quote name)
else
@@ -281,12 +282,12 @@
val (accs, accs') = pairself (map implode_name) (accesses naming names);
in space |> fold (add_name name) accs |> put_accesses name accs' end;
-fun declare_binding bnaming b =
+fun declare bnaming b =
let
- val (prefix, bname) = Binding.dest_binding b;
+ val (prefix, bname) = Binding.dest b;
val naming = apply_prefix prefix bnaming;
val name = full naming bname;
- in declare naming name #> pair name end;
+ in declare_base naming name #> pair name end;
@@ -296,21 +297,14 @@
val empty_table = (empty, Symtab.empty);
-fun gen_table_declare update naming (binding, x) (space, tab) =
+fun bind naming (b, x) (space, tab) =
let
- val (name, space') = declare_binding naming binding space;
- in (name, (space', update (name, x) tab)) end;
-
-fun table_declare naming = gen_table_declare Symtab.update_new naming;
-fun table_declare_permissive naming = gen_table_declare Symtab.update naming;
-
-fun full_binding naming b =
- let val (prefix, bname) = Binding.dest_binding b
- in full (apply_prefix prefix naming) bname end;
+ val (name, space') = declare naming b space;
+ in (name, (space', Symtab.update_new (name, x) tab)) end;
fun extend_table naming bentries (space, tab) =
let val entries = map (apfst (full naming)) bentries
- in (fold (declare naming o #1) entries space, Symtab.extend (tab, entries)) end;
+ in (fold (declare_base naming o #1) entries space, Symtab.extend (tab, entries)) end;
fun merge_tables eq ((space1, tab1), (space2, tab2)) =
(merge (space1, space2), Symtab.merge eq (tab1, tab2));
--- a/src/Pure/Isar/args.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/args.ML Thu Dec 04 14:43:33 2008 +0100
@@ -35,7 +35,7 @@
val name_source: T list -> string * T list
val name_source_position: T list -> (SymbolPos.text * Position.T) * T list
val name: T list -> string * T list
- val binding: T list -> Name.binding * T list
+ val binding: T list -> Binding.T * T list
val alt_name: T list -> string * T list
val symbol: T list -> string * T list
val liberal_name: T list -> string * T list
@@ -66,8 +66,8 @@
val parse1: (string -> bool) -> OuterLex.token list -> T list * OuterLex.token list
val attribs: (string -> string) -> T list -> src list * T list
val opt_attribs: (string -> string) -> T list -> src list * T list
- val thm_name: (string -> string) -> string -> T list -> (Name.binding * src list) * T list
- val opt_thm_name: (string -> string) -> string -> T list -> (Name.binding * src list) * T list
+ val thm_name: (string -> string) -> string -> T list -> (Binding.T * src list) * T list
+ val opt_thm_name: (string -> string) -> string -> T list -> (Binding.T * src list) * T list
val syntax: string -> ('b * T list -> 'a * ('b * T list)) -> src -> 'b -> 'a * 'b
val context_syntax: string -> (Context.generic * T list -> 'a * (Context.generic * T list)) ->
src -> Proof.context -> 'a * Proof.context
@@ -171,7 +171,7 @@
val name_source_position = named >> T.source_position_of;
val name = named >> T.content_of;
-val binding = P.position name >> Binding.binding_pos;
+val binding = P.position name >> Binding.name_pos;
val alt_name = alt_string >> T.content_of;
val symbol = symbolic >> T.content_of;
val liberal_name = symbol || name;
@@ -280,8 +280,8 @@
fun opt_thm_name intern s =
Scan.optional
- ((binding -- opt_attribs intern || attribs intern >> pair Name.no_binding) --| $$$ s)
- (Name.no_binding, []);
+ ((binding -- opt_attribs intern || attribs intern >> pair Binding.empty) --| $$$ s)
+ (Binding.empty, []);
--- a/src/Pure/Isar/attrib.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/attrib.ML Thu Dec 04 14:43:33 2008 +0100
@@ -1,5 +1,4 @@
(* Title: Pure/Isar/attrib.ML
- ID: $Id$
Author: Markus Wenzel, TU Muenchen
Symbolic representation of attributes -- with name and syntax.
@@ -8,8 +7,8 @@
signature ATTRIB =
sig
type src = Args.src
- type binding = Name.binding * src list
- val no_binding: binding
+ type binding = Binding.T * src list
+ val empty_binding: binding
val print_attributes: theory -> unit
val intern: theory -> xstring -> string
val intern_src: theory -> src -> src
@@ -55,8 +54,8 @@
type src = Args.src;
-type binding = Name.binding * src list;
-val no_binding: binding = (Name.no_binding, []);
+type binding = Binding.T * src list;
+val empty_binding: binding = (Binding.empty, []);
@@ -119,7 +118,7 @@
fun attribute thy = attribute_i thy o intern_src thy;
fun eval_thms ctxt args = ProofContext.note_thmss Thm.theoremK
- [((Name.no_binding, []),
+ [((Binding.empty, []),
map (apsnd (map (attribute (ProofContext.theory_of ctxt)))) args)] ctxt
|> fst |> maps snd;
@@ -373,7 +372,7 @@
fun register_config config thy =
let
val bname = Config.name_of config;
- val name = Sign.full_name thy bname;
+ val name = Sign.full_bname thy bname;
in
thy
|> add_attributes [(bname, syntax (Scan.lift (scan_config thy config) >> Morphism.form),
--- a/src/Pure/Isar/calculation.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/calculation.ML Thu Dec 04 14:43:33 2008 +0100
@@ -115,7 +115,7 @@
fun print_calculation false _ _ = ()
| print_calculation true ctxt calc = Pretty.writeln
- (ProofContext.pretty_fact ctxt (ProofContext.full_name ctxt calculationN, calc));
+ (ProofContext.pretty_fact ctxt (ProofContext.full_bname ctxt calculationN, calc));
(* also and finally *)
--- a/src/Pure/Isar/class.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/class.ML Thu Dec 04 14:43:33 2008 +0100
@@ -96,7 +96,7 @@
thy
|> fold2 add_constraint (map snd consts) no_constraints
|> prove_interpretation tac (class_name_morphism class) (Locale.Locale class)
- (map SOME inst, map (pair (Attrib.no_binding) o Thm.prop_of) def_facts)
+ (map SOME inst, map (pair (Attrib.empty_binding) o Thm.prop_of) def_facts)
||> fold2 add_constraint (map snd consts) constraints
end;
@@ -476,7 +476,7 @@
val inst = the_inst thy' class;
val params = map (apsnd fst o snd) (these_params thy' [class]);
- val c' = Sign.full_name thy' c;
+ val c' = Sign.full_bname thy' c;
val dict' = Morphism.term phi dict;
val dict_def = map_types Logic.unvarifyT dict';
val ty' = Term.fastype_of dict_def;
@@ -485,7 +485,7 @@
fun get_axiom thy = ((Thm.varifyT o Thm.axiom thy) c', thy);
in
thy'
- |> Sign.declare_const pos ((Name.binding c, ty''), mx) |> snd
+ |> Sign.declare_const pos ((Binding.name c, ty''), mx) |> snd
|> Thm.add_def false false (c, def_eq)
|>> Thm.symmetric
||>> get_axiom
@@ -507,13 +507,13 @@
val unchecks = map (fn (c, (_, (ty, t))) => (t, Const (c, ty)))
(these_operations thy [class]);
- val c' = Sign.full_name thy' c;
+ val c' = Sign.full_bname thy' c;
val rhs' = Pattern.rewrite_term thy unchecks [] rhs;
val rhs'' = map_types Logic.varifyT rhs';
val ty' = Term.fastype_of rhs';
in
thy'
- |> Sign.add_abbrev (#1 prmode) pos (Name.binding c, map_types Type.strip_sorts rhs'') |> snd
+ |> Sign.add_abbrev (#1 prmode) pos (Binding.name c, map_types Type.strip_sorts rhs'') |> snd
|> Sign.add_const_constraint (c', SOME ty')
|> Sign.notation true prmode [(Const (c', ty'), mx)]
|> not (#1 prmode = PrintMode.input) ? register_operation class (c', (rhs', NONE))
@@ -574,14 +574,14 @@
val raw_params = (snd o chop (length supparams)) all_params;
fun add_const (v, raw_ty) thy =
let
- val c = Sign.full_name thy v;
+ val c = Sign.full_bname thy v;
val ty = map_atyps (K (TFree (Name.aT, base_sort))) raw_ty;
val ty0 = Type.strip_sorts ty;
val ty' = map_atyps (K (TFree (Name.aT, [class]))) ty0;
val syn = (the_default NoSyn o AList.lookup (op =) global_syntax) v;
in
thy
- |> Sign.declare_const [] ((Name.binding v, ty0), syn)
+ |> Sign.declare_const [] ((Binding.name v, ty0), syn)
|> snd
|> pair ((v, ty), (c, ty'))
end;
@@ -609,7 +609,7 @@
|> add_consts bname class base_sort sups supparams global_syntax
|-> (fn (param_map, params) => AxClass.define_class (bname, supsort)
(map (fst o snd) params)
- [((Name.binding (bname ^ "_" ^ AxClass.axiomsN), []), map (globalize param_map) raw_pred)]
+ [((Binding.name (bname ^ "_" ^ AxClass.axiomsN), []), map (globalize param_map) raw_pred)]
#> snd
#> `get_axiom
#-> (fn assm_axiom => fold (Sign.add_const_constraint o apsnd SOME o snd) params
@@ -618,7 +618,7 @@
fun gen_class prep_spec bname raw_supclasses raw_elems thy =
let
- val class = Sign.full_name thy bname;
+ val class = Sign.full_bname thy bname;
val (((sups, supparams), (supsort, base_sort, mergeexpr)), (elems, global_syntax)) =
prep_spec thy raw_supclasses raw_elems;
val supconsts = map (apsnd fst o snd) (these_params thy sups);
--- a/src/Pure/Isar/constdefs.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/constdefs.ML Thu Dec 04 14:43:33 2008 +0100
@@ -1,5 +1,4 @@
(* Title: Pure/Isar/constdefs.ML
- ID: $Id$
Author: Makarius, Hagia Maria Sion Abbey (Jerusalem)
Old-style constant definitions, with type-inference and optional
@@ -9,12 +8,12 @@
signature CONSTDEFS =
sig
- val add_constdefs: (Name.binding * string option) list *
- ((Name.binding * string option * mixfix) option *
+ val add_constdefs: (Binding.T * string option) list *
+ ((Binding.T * string option * mixfix) option *
(Attrib.binding * string)) list -> theory -> theory
- val add_constdefs_i: (Name.binding * typ option) list *
- ((Name.binding * typ option * mixfix) option *
- ((Name.binding * attribute list) * term)) list -> theory -> theory
+ val add_constdefs_i: (Binding.T * typ option) list *
+ ((Binding.T * typ option * mixfix) option *
+ ((Binding.T * attribute list) * term)) list -> theory -> theory
end;
structure Constdefs: CONSTDEFS =
@@ -46,7 +45,7 @@
err ("Head of definition " ^ quote c ^ " differs from declaration " ^ quote c') []
else ());
- val def = Term.subst_atomic [(Free (c, T), Const (Sign.full_name thy c, T))] prop;
+ val def = Term.subst_atomic [(Free (c, T), Const (Sign.full_bname thy c, T))] prop;
val name = Thm.def_name_optional c (Name.name_of raw_name);
val atts = map (prep_att thy) raw_atts;
--- a/src/Pure/Isar/element.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/element.ML Thu Dec 04 14:43:33 2008 +0100
@@ -1,5 +1,4 @@
(* Title: Pure/Isar/element.ML
- ID: $Id$
Author: Makarius
Explicit data structures for some Isar language elements, with derived
@@ -10,11 +9,11 @@
sig
datatype ('typ, 'term) stmt =
Shows of (Attrib.binding * ('term * 'term list) list) list |
- Obtains of (Name.binding * ((Name.binding * 'typ option) list * 'term list)) list
+ Obtains of (Binding.T * ((Binding.T * 'typ option) list * 'term list)) list
type statement = (string, string) stmt
type statement_i = (typ, term) stmt
datatype ('typ, 'term, 'fact) ctxt =
- Fixes of (Name.binding * 'typ option * mixfix) list |
+ Fixes of (Binding.T * 'typ option * mixfix) list |
Constrains of (string * 'typ) list |
Assumes of (Attrib.binding * ('term * 'term list) list) list |
Defines of (Attrib.binding * ('term * 'term list)) list |
@@ -24,8 +23,8 @@
val facts_map: (('typ, 'term, 'fact) ctxt -> ('a, 'b, 'c) ctxt) ->
(Attrib.binding * ('fact * Attrib.src list) list) list ->
(Attrib.binding * ('c * Attrib.src list) list) list
- val map_ctxt: {name: Name.binding -> Name.binding,
- var: Name.binding * mixfix -> Name.binding * mixfix,
+ val map_ctxt: {binding: Binding.T -> Binding.T,
+ var: Binding.T * mixfix -> Binding.T * mixfix,
typ: 'typ -> 'a, term: 'term -> 'b, fact: 'fact -> 'c,
attrib: Attrib.src -> Attrib.src} -> ('typ, 'term, 'fact) ctxt -> ('a, 'b, 'c) ctxt
val map_ctxt_attrib: (Attrib.src -> Attrib.src) ->
@@ -56,7 +55,7 @@
val rename_var_name: (string * (string * mixfix option)) list ->
string * mixfix -> string * mixfix
val rename_var: (string * (string * mixfix option)) list ->
- Name.binding * mixfix -> Name.binding * mixfix
+ Binding.T * mixfix -> Binding.T * mixfix
val rename_term: (string * (string * mixfix option)) list -> term -> term
val rename_thm: (string * (string * mixfix option)) list -> thm -> thm
val rename_morphism: (string * (string * mixfix option)) list -> morphism
@@ -76,9 +75,9 @@
(Attrib.binding * (thm list * Attrib.src list) list) list ->
(Attrib.binding * (thm list * Attrib.src list) list) list
val activate: (typ, term, Facts.ref) ctxt list -> Proof.context ->
- (context_i list * (Name.binding * Thm.thm list) list) * Proof.context
+ (context_i list * (Binding.T * Thm.thm list) list) * Proof.context
val activate_i: context_i list -> Proof.context ->
- (context_i list * (Name.binding * Thm.thm list) list) * Proof.context
+ (context_i list * (Binding.T * Thm.thm list) list) * Proof.context
end;
structure Element: ELEMENT =
@@ -90,7 +89,7 @@
datatype ('typ, 'term) stmt =
Shows of (Attrib.binding * ('term * 'term list) list) list |
- Obtains of (Name.binding * ((Name.binding * 'typ option) list * 'term list)) list;
+ Obtains of (Binding.T * ((Binding.T * 'typ option) list * 'term list)) list;
type statement = (string, string) stmt;
type statement_i = (typ, term) stmt;
@@ -99,7 +98,7 @@
(* context *)
datatype ('typ, 'term, 'fact) ctxt =
- Fixes of (Name.binding * 'typ option * mixfix) list |
+ Fixes of (Binding.T * 'typ option * mixfix) list |
Constrains of (string * 'typ) list |
Assumes of (Attrib.binding * ('term * 'term list) list) list |
Defines of (Attrib.binding * ('term * 'term list)) list |
@@ -110,23 +109,23 @@
fun facts_map f facts = Notes ("", facts) |> f |> (fn Notes (_, facts') => facts');
-fun map_ctxt {name, var, typ, term, fact, attrib} =
+fun map_ctxt {binding, var, typ, term, fact, attrib} =
fn Fixes fixes => Fixes (fixes |> map (fn (x, T, mx) =>
let val (x', mx') = var (x, mx) in (x', Option.map typ T, mx') end))
| Constrains xs => Constrains (xs |> map (fn (x, T) =>
- let val x' = Name.name_of (#1 (var (Name.binding x, NoSyn))) in (x', typ T) end))
+ let val x' = Name.name_of (#1 (var (Binding.name x, NoSyn))) in (x', typ T) end))
| Assumes asms => Assumes (asms |> map (fn ((a, atts), propps) =>
- ((name a, map attrib atts), propps |> map (fn (t, ps) => (term t, map term ps)))))
+ ((binding a, map attrib atts), propps |> map (fn (t, ps) => (term t, map term ps)))))
| Defines defs => Defines (defs |> map (fn ((a, atts), (t, ps)) =>
- ((name a, map attrib atts), (term t, map term ps))))
+ ((binding a, map attrib atts), (term t, map term ps))))
| Notes (kind, facts) => Notes (kind, facts |> map (fn ((a, atts), bs) =>
- ((name a, map attrib atts), bs |> map (fn (ths, btts) => (fact ths, map attrib btts)))));
+ ((binding a, map attrib atts), bs |> map (fn (ths, btts) => (fact ths, map attrib btts)))));
fun map_ctxt_attrib attrib =
- map_ctxt {name = I, var = I, typ = I, term = I, fact = I, attrib = attrib};
+ map_ctxt {binding = I, var = I, typ = I, term = I, fact = I, attrib = attrib};
fun morph_ctxt phi = map_ctxt
- {name = Morphism.name phi,
+ {binding = Morphism.binding phi,
var = Morphism.var phi,
typ = Morphism.typ phi,
term = Morphism.term phi,
@@ -138,7 +137,7 @@
fun params_of (Fixes fixes) = fixes |> map
(fn (x, SOME T, _) => (Name.name_of x, T)
- | (x, _, _) => raise TERM ("Untyped context element parameter " ^ quote (Name.display x), []))
+ | (x, _, _) => raise TERM ("Untyped context element parameter " ^ quote (Binding.display x), []))
| params_of _ = [];
fun prems_of (Assumes asms) = maps (map fst o snd) asms
@@ -163,7 +162,7 @@
fun pretty_name_atts ctxt (b, atts) sep =
let
- val name = Name.display b;
+ val name = Binding.display b;
in if name = "" andalso null atts then []
else [Pretty.block
(Pretty.breaks (Pretty.str name :: Attrib.pretty_attribs ctxt atts @ [Pretty.str sep]))]
@@ -212,7 +211,7 @@
Pretty.brk 1 :: prt_typ T :: Pretty.brk 1 :: prt_mixfix mx)
| prt_fix (x, NONE, mx) = Pretty.block (Pretty.str (Name.name_of x) ::
Pretty.brk 1 :: prt_mixfix mx);
- fun prt_constrain (x, T) = prt_fix (Name.binding x, SOME T, NoSyn);
+ fun prt_constrain (x, T) = prt_fix (Binding.name x, SOME T, NoSyn);
fun prt_asm (a, ts) =
Pretty.block (Pretty.breaks (prt_name_atts a ":" @ map (prt_term o fst) ts));
@@ -246,13 +245,13 @@
else Pretty.command kind
in Pretty.block (Pretty.fbreaks (head :: prts)) end;
-fun fix (x, T) = (Name.binding x, SOME T);
+fun fix (x, T) = (Binding.name x, SOME T);
fun obtain prop ctxt =
let
val ((xs, prop'), ctxt') = Variable.focus prop ctxt;
val As = Logic.strip_imp_prems (Thm.term_of prop');
- in ((Name.no_binding, (map (fix o Term.dest_Free o Thm.term_of) xs, As)), ctxt') end;
+ in ((Binding.empty, (map (fix o Term.dest_Free o Thm.term_of) xs, As)), ctxt') end;
in
@@ -275,9 +274,9 @@
val (assumes, cases) = take_suffix (fn prem =>
is_elim andalso concl aconv Logic.strip_assums_concl prem) prems;
in
- pretty_ctxt ctxt' (Fixes (map (fn (x, T) => (Name.binding x, SOME T, NoSyn)) fixes)) @
- pretty_ctxt ctxt' (Assumes (map (fn t => (Attrib.no_binding, [(t, [])])) assumes)) @
- (if null cases then pretty_stmt ctxt' (Shows [(Attrib.no_binding, [(concl, [])])])
+ pretty_ctxt ctxt' (Fixes (map (fn (x, T) => (Binding.name x, SOME T, NoSyn)) fixes)) @
+ pretty_ctxt ctxt' (Assumes (map (fn t => (Attrib.empty_binding, [(t, [])])) assumes)) @
+ (if null cases then pretty_stmt ctxt' (Shows [(Attrib.empty_binding, [(concl, [])])])
else
let val (clauses, ctxt'') = fold_map (obtain o cert) cases ctxt'
in pretty_stmt ctxt'' (Obtains clauses) end)
@@ -398,7 +397,7 @@
let
val x = Name.name_of b;
val (x', mx') = rename_var_name ren (x, mx);
- in (Name.binding x', mx') end;
+ in (Binding.name x', mx') end;
fun rename_term ren (Free (x, T)) = Free (rename ren x, T)
| rename_term ren (t $ u) = rename_term ren t $ rename_term ren u
@@ -419,7 +418,7 @@
end;
fun rename_morphism ren = Morphism.morphism
- {name = I, var = rename_var ren, typ = I, term = rename_term ren, fact = map (rename_thm ren)};
+ {binding = I, var = rename_var ren, typ = I, term = rename_term ren, fact = map (rename_thm ren)};
(* instantiate types *)
@@ -447,7 +446,7 @@
fun instT_morphism thy env =
let val thy_ref = Theory.check_thy thy in
Morphism.morphism
- {name = I, var = I,
+ {binding = I, var = I,
typ = instT_type env,
term = instT_term env,
fact = map (fn th => instT_thm (Theory.deref thy_ref) env th)}
@@ -496,7 +495,7 @@
fun inst_morphism thy envs =
let val thy_ref = Theory.check_thy thy in
Morphism.morphism
- {name = I, var = I,
+ {binding = I, var = I,
typ = instT_type (#1 envs),
term = inst_term envs,
fact = map (fn th => inst_thm (Theory.deref thy_ref) envs th)}
@@ -528,7 +527,7 @@
val exp_term = Drule.term_rule thy (singleton exp_fact);
val exp_typ = Logic.type_map exp_term;
val morphism =
- Morphism.morphism {name = I, var = I, typ = exp_typ, term = exp_term, fact = exp_fact};
+ Morphism.morphism {binding = I, var = I, typ = exp_typ, term = exp_term, fact = exp_fact};
in facts_map (morph_ctxt morphism) facts end;
@@ -553,7 +552,7 @@
val defs' = Attrib.map_specs (Attrib.attribute_i (ProofContext.theory_of ctxt)) defs;
val asms = defs' |> map (fn ((name, atts), (t, ps)) =>
let val ((c, _), t') = LocalDefs.cert_def ctxt t
- in (t', ((Name.map_name (Thm.def_name_optional c) name, atts), [(t', ps)])) end);
+ in (t', ((Binding.map_base (Thm.def_name_optional c) name, atts), [(t', ps)])) end);
val (_, ctxt') =
ctxt |> fold (Variable.auto_fixes o #1) asms
|> ProofContext.add_assms_i LocalDefs.def_export (map #2 asms);
@@ -577,7 +576,7 @@
fun prep_facts prep_name get intern ctxt elem = elem |> map_ctxt
{var = I, typ = I, term = I,
- name = Name.map_name prep_name,
+ binding = Binding.map_base prep_name,
fact = get ctxt,
attrib = intern (ProofContext.theory_of ctxt)};
--- a/src/Pure/Isar/expression.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/expression.ML Thu Dec 04 14:43:33 2008 +0100
@@ -8,8 +8,8 @@
sig
datatype 'term map = Positional of 'term option list | Named of (string * 'term) list;
type 'term expr = (string * (string * 'term map)) list;
- type expression = string expr * (Name.binding * string option * mixfix) list;
- type expression_i = term expr * (Name.binding * typ option * mixfix) list;
+ type expression = string expr * (Binding.T * string option * mixfix) list;
+ type expression_i = term expr * (Binding.T * typ option * mixfix) list;
(* Processing of context statements *)
val read_statement: Element.context list -> (string * string list) list list ->
@@ -47,8 +47,8 @@
type 'term expr = (string * (string * 'term map)) list;
-type expression = string expr * (Name.binding * string option * mixfix) list;
-type expression_i = term expr * (Name.binding * typ option * mixfix) list;
+type expression = string expr * (Binding.T * string option * mixfix) list;
+type expression_i = term expr * (Binding.T * typ option * mixfix) list;
(** Parsing and printing **)
@@ -164,7 +164,7 @@
(* FIXME: should check for bindings being the same.
Instead we check for equal name and syntax. *)
if mx1 = mx2 then mx1
- else error ("Conflicting syntax for parameter" ^ quote (Name.display p) ^
+ else error ("Conflicting syntax for parameter" ^ quote (Binding.display p) ^
" in expression.")) (ps, ps')
in (i', ps'') end) is []
in (ps', is') end;
@@ -228,7 +228,7 @@
val inst = Symtab.make insts'';
in
(Element.inst_morphism (ProofContext.theory_of ctxt) (instT, inst) $>
- Morphism.name_morphism (Name.qualified prfx), ctxt')
+ Morphism.binding_morphism (Binding.qualify prfx), ctxt')
end;
@@ -237,7 +237,7 @@
(** Parsing **)
fun parse_elem prep_typ prep_term ctxt elem =
- Element.map_ctxt {name = I, var = I, typ = prep_typ ctxt,
+ Element.map_ctxt {binding = I, var = I, typ = prep_typ ctxt,
term = prep_term ctxt, fact = I, attrib = I} elem;
fun parse_concl prep_term ctxt concl =
@@ -316,7 +316,7 @@
let val (vars, _) = prep_vars fixes ctxt
in ctxt |> ProofContext.add_fixes_i vars |> snd end
| declare_elem prep_vars (Constrains csts) ctxt =
- ctxt |> prep_vars (map (fn (x, T) => (Name.binding x, SOME T, NoSyn)) csts) |> snd
+ ctxt |> prep_vars (map (fn (x, T) => (Binding.name x, SOME T, NoSyn)) csts) |> snd
| declare_elem _ (Assumes _) ctxt = ctxt
| declare_elem _ (Defines _) ctxt = ctxt
| declare_elem _ (Notes _) ctxt = ctxt;
@@ -397,10 +397,10 @@
val defs' = map (Morphism.term morph) defs;
val text' = text |>
(if is_some asm
- then eval_text ctxt false (Assumes [(Attrib.no_binding, [(the asm', [])])])
+ then eval_text ctxt false (Assumes [(Attrib.empty_binding, [(the asm', [])])])
else I) |>
(if not (null defs)
- then eval_text ctxt false (Defines (map (fn def => (Attrib.no_binding, (def, []))) defs'))
+ then eval_text ctxt false (Defines (map (fn def => (Attrib.empty_binding, (def, []))) defs'))
else I)
(* FIXME clone from new_locale.ML *)
in ((loc, morph), text') end;
@@ -580,7 +580,7 @@
val exp_term = Drule.term_rule thy (singleton exp_fact);
val exp_typ = Logic.type_map exp_term;
val export' =
- Morphism.morphism {name = I, var = I, typ = exp_typ, term = exp_term, fact = exp_fact};
+ Morphism.morphism {binding = I, var = I, typ = exp_typ, term = exp_term, fact = exp_fact};
in ((propss, deps, export'), goal_ctxt) end;
in
@@ -634,7 +634,7 @@
fun def_pred bname parms defs ts norm_ts thy =
let
- val name = Sign.full_name thy bname;
+ val name = Sign.full_bname thy bname;
val (body, bodyT, body_eq) = atomize_spec thy norm_ts;
val env = Term.add_term_free_names (body, []);
@@ -651,7 +651,7 @@
val ([pred_def], defs_thy) =
thy
|> bodyT = propT ? Sign.add_advanced_trfuns ([], [], [aprop_tr' (length args) name], [])
- |> Sign.declare_const [] ((Name.binding bname, predT), NoSyn) |> snd
+ |> Sign.declare_const [] ((Binding.name bname, predT), NoSyn) |> snd
|> PureThy.add_defs false
[((Thm.def_name bname, Logic.mk_equals (head, body)), [Thm.kind_internal])];
val defs_ctxt = ProofContext.init defs_thy |> Variable.declare_term head;
@@ -693,7 +693,7 @@
|> Sign.add_path aname
|> Sign.no_base_names
|> PureThy.note_thmss Thm.internalK
- [((Name.binding introN, []), [([intro], [NewLocale.unfold_attrib])])]
+ [((Binding.name introN, []), [([intro], [NewLocale.unfold_attrib])])]
||> Sign.restore_naming thy';
in (SOME statement, SOME intro, axioms, thy'') end;
val (b_pred, b_intro, b_axioms, thy'''') =
@@ -708,8 +708,8 @@
|> Sign.add_path pname
|> Sign.no_base_names
|> PureThy.note_thmss Thm.internalK
- [((Name.binding introN, []), [([intro], [NewLocale.intro_attrib])]),
- ((Name.binding axiomsN, []),
+ [((Binding.name introN, []), [([intro], [NewLocale.intro_attrib])]),
+ ((Binding.name axiomsN, []),
[(map (Drule.standard o Element.conclude_witness) axioms, [])])]
||> Sign.restore_naming thy''';
in (SOME statement, SOME intro, axioms, thy'''') end;
@@ -741,7 +741,7 @@
bname predicate_name raw_imprt raw_body thy =
let
val thy_ctxt = ProofContext.init thy;
- val name = Sign.full_name thy bname;
+ val name = Sign.full_bname thy bname;
val _ = NewLocale.test_locale thy name andalso
error ("Duplicate definition of locale " ^ quote name);
@@ -765,7 +765,7 @@
fst |> map (Element.morph_ctxt satisfy) |>
map_filter (fn Notes notes => SOME notes | _ => NONE) |>
(if is_some asm
- then cons (Thm.internalK, [((Name.binding (bname ^ "_" ^ axiomsN), []),
+ then cons (Thm.internalK, [((Binding.name (bname ^ "_" ^ axiomsN), []),
[([assume (cterm_of thy' (the asm))], [(Attrib.internal o K) NewLocale.witness_attrib])])])
else I);
--- a/src/Pure/Isar/isar_cmd.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/isar_cmd.ML Thu Dec 04 14:43:33 2008 +0100
@@ -14,8 +14,8 @@
val typed_print_translation: bool * (string * Position.T) -> theory -> theory
val print_ast_translation: bool * (string * Position.T) -> theory -> theory
val oracle: bstring -> SymbolPos.text * Position.T -> theory -> theory
- val add_axioms: ((Name.binding * string) * Attrib.src list) list -> theory -> theory
- val add_defs: (bool * bool) * ((Name.binding * string) * Attrib.src list) list -> theory -> theory
+ val add_axioms: ((Binding.T * string) * Attrib.src list) list -> theory -> theory
+ val add_defs: (bool * bool) * ((Binding.T * string) * Attrib.src list) list -> theory -> theory
val declaration: string * Position.T -> local_theory -> local_theory
val simproc_setup: string -> string list -> string * Position.T -> string list ->
local_theory -> local_theory
--- a/src/Pure/Isar/isar_syn.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/isar_syn.ML Thu Dec 04 14:43:33 2008 +0100
@@ -272,7 +272,7 @@
val _ =
OuterSyntax.local_theory "declare" "declare theorems (improper)" K.thy_decl
(P.and_list1 SpecParse.xthms1
- >> (fn args => #2 o Specification.theorems_cmd "" [(Attrib.no_binding, flat args)]));
+ >> (fn args => #2 o Specification.theorems_cmd "" [(Attrib.empty_binding, flat args)]));
(* name space entry path *)
@@ -396,7 +396,7 @@
(begin ? Toplevel.print) o Toplevel.begin_local_theory begin
(Locale.add_locale_cmd name expr elems #-> TheoryTarget.begin)));
-val opt_prefix = Scan.optional (P.binding --| P.$$$ ":") Name.no_binding;
+val opt_prefix = Scan.optional (P.binding --| P.$$$ ":") Binding.empty;
val _ =
OuterSyntax.command "sublocale"
@@ -483,7 +483,7 @@
fun gen_theorem kind =
OuterSyntax.local_theory_to_proof' kind ("state " ^ kind) K.thy_goal
(Scan.optional (SpecParse.opt_thm_name ":" --|
- Scan.ahead (SpecParse.locale_keyword || SpecParse.statement_keyword)) Attrib.no_binding --
+ Scan.ahead (SpecParse.locale_keyword || SpecParse.statement_keyword)) Attrib.empty_binding --
SpecParse.general_statement >> (fn (a, (elems, concl)) =>
(Specification.theorem_cmd kind NONE (K I) a elems concl)));
--- a/src/Pure/Isar/local_defs.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/local_defs.ML Thu Dec 04 14:43:33 2008 +0100
@@ -12,10 +12,10 @@
val mk_def: Proof.context -> (string * term) list -> term list
val expand: cterm list -> thm -> thm
val def_export: Assumption.export
- val add_defs: ((Name.binding * mixfix) * ((Name.binding * attribute list) * term)) list ->
+ val add_defs: ((Binding.T * mixfix) * ((Binding.T * attribute list) * term)) list ->
Proof.context -> (term * (string * thm)) list * Proof.context
- val add_def: (Name.binding * mixfix) * term -> Proof.context -> (term * thm) * Proof.context
- val fixed_abbrev: (Name.binding * mixfix) * term -> Proof.context ->
+ val add_def: (Binding.T * mixfix) * term -> Proof.context -> (term * thm) * Proof.context
+ val fixed_abbrev: (Binding.T * mixfix) * term -> Proof.context ->
(term * term) * Proof.context
val export: Proof.context -> Proof.context -> thm -> thm list * thm
val export_cterm: Proof.context -> Proof.context -> cterm -> cterm * thm
@@ -92,7 +92,7 @@
val ((bvars, mxs), specs) = defs |> split_list |>> split_list;
val ((bfacts, atts), rhss) = specs |> split_list |>> split_list;
val xs = map Name.name_of bvars;
- val names = map2 (Name.map_name o Thm.def_name_optional) xs bfacts;
+ val names = map2 (Binding.map_base o Thm.def_name_optional) xs bfacts;
val eqs = mk_def ctxt (xs ~~ rhss);
val lhss = map (fst o Logic.dest_equals) eqs;
in
@@ -105,7 +105,7 @@
end;
fun add_def (var, rhs) ctxt =
- let val ([(lhs, (_, th))], ctxt') = add_defs [(var, ((Name.no_binding, []), rhs))] ctxt
+ let val ([(lhs, (_, th))], ctxt') = add_defs [(var, ((Binding.empty, []), rhs))] ctxt
in ((lhs, th), ctxt') end;
--- a/src/Pure/Isar/local_theory.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/local_theory.ML Thu Dec 04 14:43:33 2008 +0100
@@ -26,9 +26,9 @@
val target: (Proof.context -> Proof.context) -> local_theory -> local_theory
val affirm: local_theory -> local_theory
val pretty: local_theory -> Pretty.T list
- val abbrev: Syntax.mode -> (Name.binding * mixfix) * term -> local_theory ->
+ val abbrev: Syntax.mode -> (Binding.T * mixfix) * term -> local_theory ->
(term * term) * local_theory
- val define: string -> (Name.binding * mixfix) * (Attrib.binding * term) -> local_theory ->
+ val define: string -> (Binding.T * mixfix) * (Attrib.binding * term) -> local_theory ->
(term * (string * thm)) * local_theory
val note: string -> Attrib.binding * thm list -> local_theory -> (string * thm list) * local_theory
val notes: string -> (Attrib.binding * (thm list * Attrib.src list) list) list ->
@@ -56,10 +56,10 @@
type operations =
{pretty: local_theory -> Pretty.T list,
- abbrev: Syntax.mode -> (Name.binding * mixfix) * term -> local_theory ->
+ abbrev: Syntax.mode -> (Binding.T * mixfix) * term -> local_theory ->
(term * term) * local_theory,
define: string ->
- (Name.binding * mixfix) * (Attrib.binding * term) -> local_theory ->
+ (Binding.T * mixfix) * (Attrib.binding * term) -> local_theory ->
(term * (string * thm)) * local_theory,
notes: string ->
(Attrib.binding * (thm list * Attrib.src list) list) list ->
@@ -142,7 +142,7 @@
|> NameSpace.sticky_prefix (#theory_prefix (get_lthy lthy))
|> NameSpace.qualified_names;
-val full_name = NameSpace.full o full_naming;
+fun full_name naming = NameSpace.full_name (full_naming naming) o Binding.name;
fun theory_result f lthy = lthy |> raw_theory_result (fn thy => thy
|> Sign.sticky_prefix (#theory_prefix (get_lthy lthy))
--- a/src/Pure/Isar/locale.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/locale.ML Thu Dec 04 14:43:33 2008 +0100
@@ -92,10 +92,10 @@
(* Storing results *)
val global_note_qualified: string ->
- ((Name.binding * attribute list) * (thm list * attribute list) list) list ->
+ ((Binding.T * attribute list) * (thm list * attribute list) list) list ->
theory -> (string * thm list) list * theory
val local_note_qualified: string ->
- ((Name.binding * attribute list) * (thm list * attribute list) list) list ->
+ ((Binding.T * attribute list) * (thm list * attribute list) list) list ->
Proof.context -> (string * thm list) list * Proof.context
val add_thmss: string -> string -> (Attrib.binding * (thm list * Attrib.src list) list) list ->
Proof.context -> Proof.context
@@ -104,11 +104,11 @@
val add_declaration: string -> declaration -> Proof.context -> Proof.context
(* Interpretation *)
- val get_interpret_morph: theory -> (Name.binding -> Name.binding) -> string * string ->
+ val get_interpret_morph: theory -> (Binding.T -> Binding.T) -> string * string ->
(Morphism.morphism * ((typ Vartab.table * typ list) * (term Vartab.table * term list))) ->
string -> term list -> Morphism.morphism
val interpretation: (Proof.context -> Proof.context) ->
- (Name.binding -> Name.binding) -> expr ->
+ (Binding.T -> Binding.T) -> expr ->
term option list * (Attrib.binding * term) list ->
theory ->
(Morphism.morphism * ((typ Vartab.table * typ list) * (term Vartab.table * term list))) * Proof.state
@@ -117,7 +117,7 @@
val interpretation_in_locale: (Proof.context -> Proof.context) ->
xstring * expr -> theory -> Proof.state
val interpret: (Proof.state -> Proof.state Seq.seq) ->
- (Name.binding -> Name.binding) -> expr ->
+ (Binding.T -> Binding.T) -> expr ->
term option list * (Attrib.binding * term) list ->
bool -> Proof.state ->
(Morphism.morphism * ((typ Vartab.table * typ list) * (term Vartab.table * term list))) * Proof.state
@@ -226,7 +226,7 @@
(** management of registrations in theories and proof contexts **)
type registration =
- {prfx: (Name.binding -> Name.binding) * (string * string),
+ {prfx: (Binding.T -> Binding.T) * (string * string),
(* first component: interpretation name morphism;
second component: parameter prefix *)
exp: Morphism.morphism,
@@ -248,18 +248,18 @@
val join: T * T -> T
val dest: theory -> T ->
(term list *
- (((Name.binding -> Name.binding) * (string * string)) *
+ (((Binding.T -> Binding.T) * (string * string)) *
(Morphism.morphism * ((typ Vartab.table * typ list) * (term Vartab.table * term list))) *
Element.witness list *
thm Termtab.table)) list
val test: theory -> T * term list -> bool
val lookup: theory ->
T * (term list * ((typ Vartab.table * typ list) * (term Vartab.table * term list))) ->
- (((Name.binding -> Name.binding) * (string * string)) * Element.witness list * thm Termtab.table) option
- val insert: theory -> term list -> ((Name.binding -> Name.binding) * (string * string)) ->
+ (((Binding.T -> Binding.T) * (string * string)) * Element.witness list * thm Termtab.table) option
+ val insert: theory -> term list -> ((Binding.T -> Binding.T) * (string * string)) ->
(Morphism.morphism * ((typ Vartab.table * typ list) * (term Vartab.table * term list))) ->
T ->
- T * (term list * (((Name.binding -> Name.binding) * (string * string)) * Element.witness list)) list
+ T * (term list * (((Binding.T -> Binding.T) * (string * string)) * Element.witness list)) list
val add_witness: term list -> Element.witness -> T -> T
val add_equation: term list -> thm -> T -> T
(*
@@ -433,7 +433,8 @@
fun register_locale name loc thy =
thy |> LocalesData.map (fn (space, locs) =>
- (Sign.declare_name thy name space, Symtab.update (name, loc) locs));
+ (NameSpace.declare_base (Sign.naming_of thy) name space,
+ Symtab.update (name, loc) locs));
fun change_locale name f thy =
let
@@ -811,7 +812,7 @@
fun make_raw_params_elemss (params, tenv, syn) =
[((("", map (fn p => (p, Symtab.lookup tenv p)) params), Assumed []),
Int [Fixes (map (fn p =>
- (Name.binding p, Symtab.lookup tenv p, Symtab.lookup syn p |> the)) params)])];
+ (Binding.name p, Symtab.lookup tenv p, Symtab.lookup syn p |> the)) params)])];
(* flatten_expr:
@@ -954,7 +955,7 @@
#> Binding.add_prefix false lprfx;
val elem_morphism =
Element.rename_morphism ren $>
- Morphism.name_morphism add_prefices $>
+ Morphism.binding_morphism add_prefices $>
Element.instT_morphism thy env;
val elems' = map (Element.morph_ctxt elem_morphism) elems;
in (((name, map (apsnd SOME) locale_params'), mode'), elems') end;
@@ -1003,7 +1004,7 @@
val defs' = Attrib.map_specs (Attrib.attribute_i (ProofContext.theory_of ctxt)) defs;
val asms = defs' |> map (fn ((name, atts), (t, ps)) =>
let val ((c, _), t') = LocalDefs.cert_def ctxt t
- in (t', ((Name.map_name (Thm.def_name_optional c) name, atts), [(t', ps)])) end);
+ in (t', ((Binding.map_base (Thm.def_name_optional c) name, atts), [(t', ps)])) end);
val (_, ctxt') =
ctxt |> fold (Variable.auto_fixes o #1) asms
|> ProofContext.add_assms_i LocalDefs.def_export (map #2 asms);
@@ -1129,7 +1130,7 @@
let val (vars, _) = prep_vars fixes ctxt
in ([], ctxt |> ProofContext.add_fixes_i vars |> snd) end
| declare_ext_elem prep_vars (Constrains csts) ctxt =
- let val (_, ctxt') = prep_vars (map (fn (x, T) => (Name.binding x, SOME T, NoSyn)) csts) ctxt
+ let val (_, ctxt') = prep_vars (map (fn (x, T) => (Binding.name x, SOME T, NoSyn)) csts) ctxt
in ([], ctxt') end
| declare_ext_elem _ (Assumes asms) ctxt = (map #2 asms, ctxt)
| declare_ext_elem _ (Defines defs) ctxt = (map (fn (_, (t, ps)) => [(t, ps)]) defs, ctxt)
@@ -1412,7 +1413,7 @@
|> Element.morph_ctxt (Morphism.thm_morphism (Thm.transfer (ProofContext.theory_of ctxt)))
| prep_facts prep_name get intern ctxt (Ext elem) = elem |> Element.map_ctxt
{var = I, typ = I, term = I,
- name = Name.map_name prep_name,
+ binding = Binding.map_base prep_name,
fact = get ctxt,
attrib = Args.assignable o intern (ProofContext.theory_of ctxt)};
@@ -1637,9 +1638,9 @@
fun name_morph phi_name (lprfx, pprfx) b =
b
- |> (if not (Binding.is_nothing b) andalso pprfx <> ""
+ |> (if not (Binding.is_empty b) andalso pprfx <> ""
then Binding.add_prefix false pprfx else I)
- |> (if not (Binding.is_nothing b)
+ |> (if not (Binding.is_empty b)
then Binding.add_prefix false lprfx else I)
|> phi_name;
@@ -1651,9 +1652,9 @@
(* FIXME sync with exp_fact *)
val exp_typ = Logic.type_map exp_term;
val export' =
- Morphism.morphism {name = I, var = I, typ = exp_typ, term = exp_term, fact = exp_fact};
+ Morphism.morphism {binding = I, var = I, typ = exp_typ, term = exp_term, fact = exp_fact};
in
- Morphism.name_morphism (name_morph phi_name param_prfx) $>
+ Morphism.binding_morphism (name_morph phi_name param_prfx) $>
Element.inst_morphism thy insts $>
Element.satisfy_morphism prems $>
Morphism.term_morphism (MetaSimplifier.rewrite_term thy eqns []) $>
@@ -1732,7 +1733,7 @@
(fn (axiom, elems, params, decls, regs, intros, dests) =>
(axiom, elems, params, add (decl, stamp ()) decls, regs, intros, dests))) #>
add_thmss loc Thm.internalK
- [((Name.no_binding, [Attrib.internal (decl_attrib decl)]), [([Drule.dummy_thm], [])])];
+ [((Binding.empty, [Attrib.internal (decl_attrib decl)]), [([Drule.dummy_thm], [])])];
in
@@ -1789,7 +1790,7 @@
fun def_pred bname parms defs ts norm_ts thy =
let
- val name = Sign.full_name thy bname;
+ val name = Sign.full_bname thy bname;
val (body, bodyT, body_eq) = atomize_spec thy norm_ts;
val env = Term.add_term_free_names (body, []);
@@ -1806,7 +1807,7 @@
val ([pred_def], defs_thy) =
thy
|> bodyT = propT ? Sign.add_advanced_trfuns ([], [], [aprop_tr' (length args) name], [])
- |> Sign.declare_const [] ((Name.binding bname, predT), NoSyn) |> snd
+ |> Sign.declare_const [] ((Binding.name bname, predT), NoSyn) |> snd
|> PureThy.add_defs false
[((Thm.def_name bname, Logic.mk_equals (head, body)), [Thm.kind_internal])];
val defs_ctxt = ProofContext.init defs_thy |> Variable.declare_term head;
@@ -1876,12 +1877,12 @@
|> def_pred aname parms defs exts exts';
val elemss' = change_assumes_elemss axioms elemss;
val a_elem = [(("", []),
- [Assumes [((Name.binding (pname ^ "_" ^ axiomsN), []), [(statement, [])])]])];
+ [Assumes [((Binding.name (pname ^ "_" ^ axiomsN), []), [(statement, [])])]])];
val (_, thy'') =
thy'
|> Sign.add_path aname
|> Sign.no_base_names
- |> PureThy.note_thmss Thm.internalK [((Name.binding introN, []), [([intro], [])])]
+ |> PureThy.note_thmss Thm.internalK [((Binding.name introN, []), [([intro], [])])]
||> Sign.restore_naming thy';
in ((elemss', [statement]), a_elem, [intro], thy'') end;
val (predicate, stmt', elemss'', b_intro, thy'''') =
@@ -1894,14 +1895,14 @@
val cstatement = Thm.cterm_of thy''' statement;
val elemss'' = change_elemss_hyps axioms elemss';
val b_elem = [(("", []),
- [Assumes [((Name.binding (pname ^ "_" ^ axiomsN), []), [(statement, [])])]])];
+ [Assumes [((Binding.name (pname ^ "_" ^ axiomsN), []), [(statement, [])])]])];
val (_, thy'''') =
thy'''
|> Sign.add_path pname
|> Sign.no_base_names
|> PureThy.note_thmss Thm.internalK
- [((Name.binding introN, []), [([intro], [])]),
- ((Name.binding axiomsN, []),
+ [((Binding.name introN, []), [([intro], [])]),
+ ((Binding.name axiomsN, []),
[(map (Drule.standard o Element.conclude_witness) axioms, [])])]
||> Sign.restore_naming thy''';
in (([cstatement], axioms), [statement], elemss'' @ b_elem, [intro], thy'''') end;
@@ -1918,7 +1919,7 @@
fun defines_to_notes is_ext thy (Defines defs) defns =
let
- val defs' = map (fn (_, (def, _)) => (Attrib.no_binding, (def, []))) defs
+ val defs' = map (fn (_, (def, _)) => (Attrib.empty_binding, (def, []))) defs
val notes = map (fn (a, (def, _)) =>
(a, [([assume (cterm_of thy def)], [])])) defs
in
@@ -1940,7 +1941,7 @@
"name" - locale with predicate named "name" *)
let
val thy_ctxt = ProofContext.init thy;
- val name = Sign.full_name thy bname;
+ val name = Sign.full_bname thy bname;
val _ = is_some (get_locale thy name) andalso
error ("Duplicate definition of locale " ^ quote name);
@@ -2007,9 +2008,9 @@
end;
val _ = Context.>> (Context.map_theory
- (add_locale "" "var" empty [Fixes [(Name.binding (Name.internal "x"), NONE, NoSyn)]] #>
+ (add_locale "" "var" empty [Fixes [(Binding.name (Name.internal "x"), NONE, NoSyn)]] #>
snd #> ProofContext.theory_of #>
- add_locale "" "struct" empty [Fixes [(Name.binding (Name.internal "S"), NONE, Structure)]] #>
+ add_locale "" "struct" empty [Fixes [(Binding.name (Name.internal "S"), NONE, Structure)]] #>
snd #> ProofContext.theory_of));
@@ -2378,7 +2379,7 @@
fun activate_elem (loc, ps) (Notes (kind, facts)) thy =
let
val att_morphism =
- Morphism.name_morphism (name_morph phi_name param_prfx) $>
+ Morphism.binding_morphism (name_morph phi_name param_prfx) $>
Morphism.thm_morphism satisfy $>
Element.inst_morphism thy insts $>
Morphism.thm_morphism disch;
@@ -2438,13 +2439,13 @@
in
state
|> Proof.local_goal (ProofDisplay.print_results int) (K I) ProofContext.bind_propp_i
- "interpret" NONE after_qed' (map (pair (Name.no_binding, [])) (prep_propp propss))
+ "interpret" NONE after_qed' (map (pair (Binding.empty, [])) (prep_propp propss))
|> Element.refine_witness |> Seq.hd
|> pair morphs
end;
fun standard_name_morph interp_prfx b =
- if Binding.is_nothing b then b
+ if Binding.is_empty b then b
else Binding.map_prefix (fn ((lprfx, _) :: pprfx) =>
fold (Binding.add_prefix false o fst) pprfx
#> interp_prfx <> "" ? Binding.add_prefix true interp_prfx
--- a/src/Pure/Isar/new_locale.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/new_locale.ML Thu Dec 04 14:43:33 2008 +0100
@@ -11,7 +11,7 @@
val clear_idents: Proof.context -> Proof.context
val test_locale: theory -> string -> bool
val register_locale: string ->
- (string * sort) list * (Name.binding * typ option * mixfix) list ->
+ (string * sort) list * (Binding.T * typ option * mixfix) list ->
term option * term list ->
(declaration * stamp) list * (declaration * stamp) list ->
((string * (Attrib.binding * (thm list * Attrib.src list) list) list) * stamp) list ->
@@ -22,7 +22,7 @@
val extern: theory -> string -> xstring
(* Specification *)
- val params_of: theory -> string -> (Name.binding * typ option * mixfix) list
+ val params_of: theory -> string -> (Binding.T * typ option * mixfix) list
val specification_of: theory -> string -> term option * term list
val declarations_of: theory -> string -> declaration list * declaration list
@@ -84,7 +84,7 @@
datatype locale = Loc of {
(* extensible lists are in reverse order: decls, notes, dependencies *)
- parameters: (string * sort) list * (Name.binding * typ option * mixfix) list,
+ parameters: (string * sort) list * (Binding.T * typ option * mixfix) list,
(* type and term parameters *)
spec: term option * term list,
(* assumptions (as a single predicate expression) and defines *)
@@ -138,7 +138,7 @@
fun register_locale name parameters spec decls notes dependencies thy =
thy |> LocalesData.map (fn (space, locs) =>
- (Sign.declare_name thy name space, Symtab.update (name,
+ (NameSpace.declare_base (Sign.naming_of thy) name space, Symtab.update (name,
Loc {parameters = parameters, spec = spec, decls = decls, notes = notes,
dependencies = dependencies}) locs));
@@ -279,9 +279,9 @@
input |>
(if not (null params) then activ_elem (Fixes params) else I) |>
(* FIXME type parameters *)
- (if is_some asm then activ_elem (Assumes [(Attrib.no_binding, [(the asm, [])])]) else I) |>
+ (if is_some asm then activ_elem (Assumes [(Attrib.empty_binding, [(the asm, [])])]) else I) |>
(if not (null defs)
- then activ_elem (Defines (map (fn def => (Attrib.no_binding, (def, []))) defs))
+ then activ_elem (Defines (map (fn def => (Attrib.empty_binding, (def, []))) defs))
else I) |>
pair marked |> roundup thy (activate_notes activ_elem) (name, Morphism.identity)
end;
@@ -366,7 +366,7 @@
(fn (parameters, spec, decls, notes, dependencies) =>
(parameters, spec, add (decl, stamp ()) decls, notes, dependencies))) #>
add_thmss loc Thm.internalK
- [((Name.no_binding, [Attrib.internal (decl_attrib decl)]), [([Drule.dummy_thm], [])])];
+ [((Binding.empty, [Attrib.internal (decl_attrib decl)]), [([Drule.dummy_thm], [])])];
in
--- a/src/Pure/Isar/object_logic.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/object_logic.ML Thu Dec 04 14:43:33 2008 +0100
@@ -89,7 +89,7 @@
fun typedecl (raw_name, vs, mx) thy =
let
val base_sort = get_base_sort thy;
- val name = Sign.full_name thy (Syntax.type_name raw_name mx);
+ val name = Sign.full_bname thy (Syntax.type_name raw_name mx);
val _ = has_duplicates (op =) vs andalso
error ("Duplicate parameters in type declaration: " ^ quote name);
val n = length vs;
@@ -107,7 +107,7 @@
local
fun gen_add_judgment add_consts (bname, T, mx) thy =
- let val c = Sign.full_name thy (Syntax.const_name bname mx) in
+ let val c = Sign.full_bname thy (Syntax.const_name bname mx) in
thy
|> add_consts [(bname, T, mx)]
|> (fn thy' => Theory.add_deps c (c, Sign.the_const_type thy' c) [] thy')
--- a/src/Pure/Isar/obtain.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/obtain.ML Thu Dec 04 14:43:33 2008 +0100
@@ -40,16 +40,16 @@
signature OBTAIN =
sig
val thatN: string
- val obtain: string -> (Name.binding * string option * mixfix) list ->
+ val obtain: string -> (Binding.T * string option * mixfix) list ->
(Attrib.binding * (string * string list) list) list ->
bool -> Proof.state -> Proof.state
- val obtain_i: string -> (Name.binding * typ option * mixfix) list ->
- ((Name.binding * attribute list) * (term * term list) list) list ->
+ val obtain_i: string -> (Binding.T * typ option * mixfix) list ->
+ ((Binding.T * attribute list) * (term * term list) list) list ->
bool -> Proof.state -> Proof.state
val result: (Proof.context -> tactic) -> thm list -> Proof.context ->
(cterm list * thm list) * Proof.context
- val guess: (Name.binding * string option * mixfix) list -> bool -> Proof.state -> Proof.state
- val guess_i: (Name.binding * typ option * mixfix) list -> bool -> Proof.state -> Proof.state
+ val guess: (Binding.T * string option * mixfix) list -> bool -> Proof.state -> Proof.state
+ val guess_i: (Binding.T * typ option * mixfix) list -> bool -> Proof.state -> Proof.state
end;
structure Obtain: OBTAIN =
@@ -156,14 +156,14 @@
in
state
|> Proof.enter_forward
- |> Proof.have_i NONE (K Seq.single) [((Name.no_binding, []), [(obtain_prop, [])])] int
+ |> Proof.have_i NONE (K Seq.single) [((Binding.empty, []), [(obtain_prop, [])])] int
|> Proof.proof (SOME Method.succeed_text) |> Seq.hd
- |> Proof.fix_i [(Name.binding thesisN, NONE, NoSyn)]
+ |> Proof.fix_i [(Binding.name thesisN, NONE, NoSyn)]
|> Proof.assume_i
- [((Name.binding that_name, [ContextRules.intro_query NONE]), [(that_prop, [])])]
+ [((Binding.name that_name, [ContextRules.intro_query NONE]), [(that_prop, [])])]
|> `Proof.the_facts
||> Proof.chain_facts chain_facts
- ||> Proof.show_i NONE after_qed [((Name.no_binding, []), [(thesis, [])])] false
+ ||> Proof.show_i NONE after_qed [((Binding.empty, []), [(thesis, [])])] false
|-> Proof.refine_insert
end;
@@ -294,9 +294,9 @@
in
state'
|> Proof.map_context (K ctxt')
- |> Proof.fix_i (map (fn ((x, T), mx) => (Name.binding x, SOME T, mx)) parms)
+ |> Proof.fix_i (map (fn ((x, T), mx) => (Binding.name x, SOME T, mx)) parms)
|> `Proof.context_of |-> (fn fix_ctxt => Proof.assm_i
- (obtain_export fix_ctxt rule (map cert ts)) [((Name.no_binding, []), asms)])
+ (obtain_export fix_ctxt rule (map cert ts)) [((Binding.empty, []), asms)])
|> Proof.add_binds_i AutoBind.no_facts
end;
@@ -311,10 +311,10 @@
state
|> Proof.enter_forward
|> Proof.begin_block
- |> Proof.fix_i [(Name.binding AutoBind.thesisN, NONE, NoSyn)]
+ |> Proof.fix_i [(Binding.name AutoBind.thesisN, NONE, NoSyn)]
|> Proof.chain_facts chain_facts
|> Proof.local_goal print_result (K I) (apsnd (rpair I))
- "guess" before_qed after_qed [((Name.no_binding, []), [Logic.mk_term goal, goal])]
+ "guess" before_qed after_qed [((Binding.empty, []), [Logic.mk_term goal, goal])]
|> Proof.refine (Method.primitive_text (K (Goal.init (cert thesis)))) |> Seq.hd
end;
--- a/src/Pure/Isar/outer_parse.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/outer_parse.ML Thu Dec 04 14:43:33 2008 +0100
@@ -61,12 +61,12 @@
val list: (token list -> 'a * token list) -> token list -> 'a list * token list
val list1: (token list -> 'a * token list) -> token list -> 'a list * token list
val name: token list -> bstring * token list
- val binding: token list -> Name.binding * token list
+ val binding: token list -> Binding.T * token list
val xname: token list -> xstring * token list
val text: token list -> string * token list
val path: token list -> Path.T * token list
val parname: token list -> string * token list
- val parbinding: token list -> Name.binding * token list
+ val parbinding: token list -> Binding.T * token list
val sort: token list -> string * token list
val arity: token list -> (string * string list * string) * token list
val multi_arity: token list -> (string list * string list * string) * token list
@@ -81,11 +81,11 @@
val opt_mixfix': token list -> mixfix * token list
val where_: token list -> string * token list
val const: token list -> (string * string * mixfix) * token list
- val params: token list -> (Name.binding * string option) list * token list
- val simple_fixes: token list -> (Name.binding * string option) list * token list
- val fixes: token list -> (Name.binding * string option * mixfix) list * token list
- val for_fixes: token list -> (Name.binding * string option * mixfix) list * token list
- val for_simple_fixes: token list -> (Name.binding * string option) list * token list
+ val params: token list -> (Binding.T * string option) list * token list
+ val simple_fixes: token list -> (Binding.T * string option) list * token list
+ val fixes: token list -> (Binding.T * string option * mixfix) list * token list
+ val for_fixes: token list -> (Binding.T * string option * mixfix) list * token list
+ val for_simple_fixes: token list -> (Binding.T * string option) list * token list
val ML_source: token list -> (SymbolPos.text * Position.T) * token list
val doc_source: token list -> (SymbolPos.text * Position.T) * token list
val properties: token list -> Properties.T * token list
@@ -228,13 +228,13 @@
(* names and text *)
val name = group "name declaration" (short_ident || sym_ident || string || number);
-val binding = position name >> Binding.binding_pos;
+val binding = position name >> Binding.name_pos;
val xname = group "name reference" (short_ident || long_ident || sym_ident || string || number);
val text = group "text" (short_ident || long_ident || sym_ident || string || number || verbatim);
val path = group "file name/path specification" name >> Path.explode;
val parname = Scan.optional ($$$ "(" |-- name --| $$$ ")") "";
-val parbinding = Scan.optional ($$$ "(" |-- binding --| $$$ ")") Name.no_binding;
+val parbinding = Scan.optional ($$$ "(" |-- binding --| $$$ ")") Binding.empty;
(* sorts and arities *)
--- a/src/Pure/Isar/proof.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/proof.ML Thu Dec 04 14:43:33 2008 +0100
@@ -45,27 +45,27 @@
val match_bind_i: (term list * term) list -> state -> state
val let_bind: (string list * string) list -> state -> state
val let_bind_i: (term list * term) list -> state -> state
- val fix: (Name.binding * string option * mixfix) list -> state -> state
- val fix_i: (Name.binding * typ option * mixfix) list -> state -> state
+ val fix: (Binding.T * string option * mixfix) list -> state -> state
+ val fix_i: (Binding.T * typ option * mixfix) list -> state -> state
val assm: Assumption.export ->
(Attrib.binding * (string * string list) list) list -> state -> state
val assm_i: Assumption.export ->
- ((Name.binding * attribute list) * (term * term list) list) list -> state -> state
+ ((Binding.T * attribute list) * (term * term list) list) list -> state -> state
val assume: (Attrib.binding * (string * string list) list) list -> state -> state
- val assume_i: ((Name.binding * attribute list) * (term * term list) list) list ->
+ val assume_i: ((Binding.T * attribute list) * (term * term list) list) list ->
state -> state
val presume: (Attrib.binding * (string * string list) list) list -> state -> state
- val presume_i: ((Name.binding * attribute list) * (term * term list) list) list ->
+ val presume_i: ((Binding.T * attribute list) * (term * term list) list) list ->
state -> state
- val def: (Attrib.binding * ((Name.binding * mixfix) * (string * string list))) list ->
+ val def: (Attrib.binding * ((Binding.T * mixfix) * (string * string list))) list ->
state -> state
- val def_i: ((Name.binding * attribute list) *
- ((Name.binding * mixfix) * (term * term list))) list -> state -> state
+ val def_i: ((Binding.T * attribute list) *
+ ((Binding.T * mixfix) * (term * term list))) list -> state -> state
val chain: state -> state
val chain_facts: thm list -> state -> state
val get_thmss: state -> (Facts.ref * Attrib.src list) list -> thm list
val note_thmss: (Attrib.binding * (Facts.ref * Attrib.src list) list) list -> state -> state
- val note_thmss_i: ((Name.binding * attribute list) *
+ val note_thmss_i: ((Binding.T * attribute list) *
(thm list * attribute list) list) list -> state -> state
val from_thmss: ((Facts.ref * Attrib.src list) list) list -> state -> state
val from_thmss_i: ((thm list * attribute list) list) list -> state -> state
@@ -89,7 +89,7 @@
(theory -> 'a -> attribute) ->
(context * 'b list -> context * (term list list * (context -> context))) ->
string -> Method.text option -> (thm list list -> state -> state Seq.seq) ->
- ((Name.binding * 'a list) * 'b) list -> state -> state
+ ((Binding.T * 'a list) * 'b) list -> state -> state
val local_qed: Method.text option * bool -> state -> state Seq.seq
val theorem: Method.text option -> (thm list list -> context -> context) ->
(string * string list) list list -> context -> state
@@ -109,11 +109,11 @@
val have: Method.text option -> (thm list list -> state -> state Seq.seq) ->
(Attrib.binding * (string * string list) list) list -> bool -> state -> state
val have_i: Method.text option -> (thm list list -> state -> state Seq.seq) ->
- ((Name.binding * attribute list) * (term * term list) list) list -> bool -> state -> state
+ ((Binding.T * attribute list) * (term * term list) list) list -> bool -> state -> state
val show: Method.text option -> (thm list list -> state -> state Seq.seq) ->
(Attrib.binding * (string * string list) list) list -> bool -> state -> state
val show_i: Method.text option -> (thm list list -> state -> state Seq.seq) ->
- ((Name.binding * attribute list) * (term * term list) list) list -> bool -> state -> state
+ ((Binding.T * attribute list) * (term * term list) list) list -> bool -> state -> state
val is_relevant: state -> bool
val future_proof: (state -> context) -> state -> context
end;
@@ -617,7 +617,7 @@
(* note etc. *)
-fun no_binding args = map (pair (Name.no_binding, [])) args;
+fun no_binding args = map (pair (Binding.empty, [])) args;
local
@@ -645,7 +645,7 @@
val local_results =
gen_thmss (ProofContext.note_thmss_i "") (K []) I I (K I) o map (apsnd Thm.simple_fact);
-fun get_thmss state srcs = the_facts (note_thmss [((Name.no_binding, []), srcs)] state);
+fun get_thmss state srcs = the_facts (note_thmss [((Binding.empty, []), srcs)] state);
end;
@@ -689,14 +689,14 @@
val atts = map (prep_att (theory_of state)) raw_atts;
val (asms, state') = state |> map_context_result (fn ctxt =>
ctxt |> ProofContext.apply_case (ProofContext.get_case ctxt name xs));
- val assumptions = asms |> map (fn (a, ts) => ((Name.binding a, atts), map (rpair []) ts));
+ val assumptions = asms |> map (fn (a, ts) => ((Binding.name a, atts), map (rpair []) ts));
in
state'
|> map_context (ProofContext.qualified_names #> ProofContext.no_base_names)
|> assume_i assumptions
|> add_binds_i AutoBind.no_facts
|> map_context (ProofContext.restore_naming (context_of state))
- |> `the_facts |-> (fn thms => note_thmss_i [((Name.binding name, []), [(thms, [])])])
+ |> `the_facts |-> (fn thms => note_thmss_i [((Binding.name name, []), [(thms, [])])])
end;
in
@@ -1002,7 +1002,7 @@
val statement' = (kind, [[], [Thm.term_of cprop_protected]], cprop_protected);
val goal' = Thm.adjust_maxidx_thm ~1 (Drule.protectI RS Goal.init cprop_protected);
fun after_qed' [[th]] = ProofContext.put_thms false (AutoBind.thisN, SOME [Goal.conclude th]);
- val this_name = ProofContext.full_name (ProofContext.reset_naming goal_ctxt) AutoBind.thisN;
+ val this_name = ProofContext.full_bname (ProofContext.reset_naming goal_ctxt) AutoBind.thisN;
fun make_result () = state
|> map_contexts (Variable.auto_fixes prop)
--- a/src/Pure/Isar/proof_context.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/proof_context.ML Thu Dec 04 14:43:33 2008 +0100
@@ -23,8 +23,8 @@
val abbrev_mode: Proof.context -> bool
val set_stmt: bool -> Proof.context -> Proof.context
val naming_of: Proof.context -> NameSpace.naming
- val full_name: Proof.context -> bstring -> string
- val full_binding: Proof.context -> Name.binding -> string
+ val full_name: Proof.context -> Binding.T -> string
+ val full_bname: Proof.context -> bstring -> string
val consts_of: Proof.context -> Consts.T
val const_syntax_name: Proof.context -> string -> string
val the_const_constraint: Proof.context -> string -> typ
@@ -105,27 +105,27 @@
val restore_naming: Proof.context -> Proof.context -> Proof.context
val reset_naming: Proof.context -> Proof.context
val note_thmss: string ->
- ((Name.binding * attribute list) * (Facts.ref * attribute list) list) list ->
+ ((Binding.T * attribute list) * (Facts.ref * attribute list) list) list ->
Proof.context -> (string * thm list) list * Proof.context
val note_thmss_i: string ->
- ((Name.binding * attribute list) * (thm list * attribute list) list) list ->
+ ((Binding.T * attribute list) * (thm list * attribute list) list) list ->
Proof.context -> (string * thm list) list * Proof.context
val put_thms: bool -> string * thm list option -> Proof.context -> Proof.context
- val read_vars: (Name.binding * string option * mixfix) list -> Proof.context ->
- (Name.binding * typ option * mixfix) list * Proof.context
- val cert_vars: (Name.binding * typ option * mixfix) list -> Proof.context ->
- (Name.binding * typ option * mixfix) list * Proof.context
- val add_fixes: (Name.binding * string option * mixfix) list ->
+ val read_vars: (Binding.T * string option * mixfix) list -> Proof.context ->
+ (Binding.T * typ option * mixfix) list * Proof.context
+ val cert_vars: (Binding.T * typ option * mixfix) list -> Proof.context ->
+ (Binding.T * typ option * mixfix) list * Proof.context
+ val add_fixes: (Binding.T * string option * mixfix) list ->
Proof.context -> string list * Proof.context
- val add_fixes_i: (Name.binding * typ option * mixfix) list ->
+ val add_fixes_i: (Binding.T * typ option * mixfix) list ->
Proof.context -> string list * Proof.context
val auto_fixes: Proof.context * (term list list * 'a) -> Proof.context * (term list list * 'a)
val bind_fixes: string list -> Proof.context -> (term -> term) * Proof.context
val add_assms: Assumption.export ->
- ((Name.binding * attribute list) * (string * string list) list) list ->
+ ((Binding.T * attribute list) * (string * string list) list) list ->
Proof.context -> (string * thm list) list * Proof.context
val add_assms_i: Assumption.export ->
- ((Name.binding * attribute list) * (term * term list) list) list ->
+ ((Binding.T * attribute list) * (term * term list) list) list ->
Proof.context -> (string * thm list) list * Proof.context
val add_cases: bool -> (string * RuleCases.T option) list -> Proof.context -> Proof.context
val apply_case: RuleCases.T -> Proof.context -> (string * term list) list * Proof.context
@@ -135,7 +135,7 @@
Context.generic -> Context.generic
val add_const_constraint: string * typ option -> Proof.context -> Proof.context
val add_abbrev: string -> Properties.T ->
- Name.binding * term -> Proof.context -> (term * term) * Proof.context
+ Binding.T * term -> Proof.context -> (term * term) * Proof.context
val revert_abbrev: string -> string -> Proof.context -> Proof.context
val verbose: bool ref
val setmp_verbose: ('a -> 'b) -> 'a -> 'b
@@ -247,8 +247,8 @@
val naming_of = #naming o rep_context;
-val full_name = NameSpace.full o naming_of;
-val full_binding = NameSpace.full_binding o naming_of;
+val full_name = NameSpace.full_name o naming_of;
+fun full_bname thy = NameSpace.full_name (naming_of thy) o Binding.name;
val syntax_of = #syntax o rep_context;
val syn_of = LocalSyntax.syn_of o syntax_of;
@@ -965,14 +965,14 @@
local
-fun update_thms _ (b, NONE) ctxt = ctxt |> map_facts (Facts.del (full_binding ctxt b))
+fun update_thms _ (b, NONE) ctxt = ctxt |> map_facts (Facts.del (full_name ctxt b))
| update_thms do_props (b, SOME ths) ctxt = ctxt |> map_facts
(Facts.add_local do_props (naming_of ctxt) (b, ths) #> snd);
fun gen_note_thmss get k = fold_map (fn ((b, more_attrs), raw_facts) => fn ctxt =>
let
val pos = Binding.pos_of b;
- val name = full_binding ctxt b;
+ val name = full_name ctxt b;
val _ = ContextPosition.report_visible ctxt (Markup.local_fact_decl name) pos;
val facts = PureThy.name_thmss false pos name (map (apfst (get ctxt)) raw_facts);
@@ -991,7 +991,7 @@
fun put_thms do_props thms ctxt = ctxt
|> map_naming (K local_naming)
|> ContextPosition.set_visible false
- |> update_thms do_props (apfst Name.binding thms)
+ |> update_thms do_props (apfst Binding.name thms)
|> ContextPosition.restore_visible ctxt
|> restore_naming ctxt;
@@ -1021,7 +1021,7 @@
if internal then T
else Type.no_tvars T handle TYPE (msg, _, _) => error msg;
val opt_T = Option.map (cond_tvars o cert_typ ctxt o prep_typ ctxt) raw_T;
- val var = (Name.map_name (K x) raw_b, opt_T, mx);
+ val var = (Binding.map_base (K x) raw_b, opt_T, mx);
in (var, ctxt |> declare_var (x, opt_T, mx) |> #2) end);
in
@@ -1095,7 +1095,7 @@
fun add_abbrev mode tags (b, raw_t) ctxt =
let
val t0 = cert_term (ctxt |> set_mode mode_abbrev) raw_t
- handle ERROR msg => cat_error msg ("in constant abbreviation " ^ quote (Name.display b));
+ handle ERROR msg => cat_error msg ("in constant abbreviation " ^ quote (Binding.display b));
val [t] = Variable.exportT_terms (Variable.declare_term t0 ctxt) ctxt [t0];
val ((lhs, rhs), consts') = consts_of ctxt
|> Consts.abbreviate (Syntax.pp ctxt) (tsig_of ctxt) (naming_of ctxt) mode tags (b, t);
@@ -1146,7 +1146,7 @@
fun bind_fixes xs ctxt =
let
- val (_, ctxt') = ctxt |> add_fixes_i (map (fn x => (Name.binding x, NONE, NoSyn)) xs);
+ val (_, ctxt') = ctxt |> add_fixes_i (map (fn x => (Binding.name x, NONE, NoSyn)) xs);
fun bind (t as Free (x, T)) =
if member (op =) xs x then
(case lookup_skolem ctxt' x of SOME x' => Free (x', T) | NONE => t)
--- a/src/Pure/Isar/rule_insts.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/rule_insts.ML Thu Dec 04 14:43:33 2008 +0100
@@ -284,7 +284,7 @@
val (param_names, ctxt') = ctxt
|> Variable.declare_thm thm
|> Thm.fold_terms Variable.declare_constraints st
- |> ProofContext.add_fixes_i (map (fn (x, T) => (Name.binding x, SOME T, NoSyn)) params);
+ |> ProofContext.add_fixes_i (map (fn (x, T) => (Binding.name x, SOME T, NoSyn)) params);
(* Process type insts: Tinsts_env *)
fun absent xi = error
--- a/src/Pure/Isar/spec_parse.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/spec_parse.ML Thu Dec 04 14:43:33 2008 +0100
@@ -15,14 +15,14 @@
val opt_thm_name: string -> token list -> Attrib.binding * token list
val spec: token list -> (Attrib.binding * string list) * token list
val named_spec: token list -> (Attrib.binding * string list) * token list
- val spec_name: token list -> ((Name.binding * string) * Attrib.src list) * token list
- val spec_opt_name: token list -> ((Name.binding * string) * Attrib.src list) * token list
+ val spec_name: token list -> ((Binding.T * string) * Attrib.src list) * token list
+ val spec_opt_name: token list -> ((Binding.T * string) * Attrib.src list) * token list
val xthm: token list -> (Facts.ref * Attrib.src list) * token list
val xthms1: token list -> (Facts.ref * Attrib.src list) list * token list
val name_facts: token list ->
(Attrib.binding * (Facts.ref * Attrib.src list) list) list * token list
val locale_mixfix: token list -> mixfix * token list
- val locale_fixes: token list -> (Name.binding * string option * mixfix) list * token list
+ val locale_fixes: token list -> (Binding.T * string option * mixfix) list * token list
val locale_insts: token list -> (string option list * (Attrib.binding * string) list) * token list
val class_expr: token list -> string list * token list
val locale_expr: token list -> Locale.expr * token list
@@ -33,8 +33,8 @@
(Element.context list * Element.statement) * OuterLex.token list
val statement_keyword: token list -> string * token list
val specification: token list ->
- (Name.binding *
- ((Attrib.binding * string list) list * (Name.binding * string option) list)) list * token list
+ (Binding.T *
+ ((Attrib.binding * string list) list * (Binding.T * string option) list)) list * token list
end;
structure SpecParse: SPEC_PARSE =
@@ -53,8 +53,8 @@
fun thm_name s = P.binding -- opt_attribs --| P.$$$ s;
fun opt_thm_name s =
- Scan.optional ((P.binding -- opt_attribs || attribs >> pair Name.no_binding) --| P.$$$ s)
- Attrib.no_binding;
+ Scan.optional ((P.binding -- opt_attribs || attribs >> pair Binding.empty) --| P.$$$ s)
+ Attrib.empty_binding;
val spec = opt_thm_name ":" -- Scan.repeat1 P.prop;
val named_spec = thm_name ":" -- Scan.repeat1 P.prop;
--- a/src/Pure/Isar/specification.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/specification.ML Thu Dec 04 14:43:33 2008 +0100
@@ -9,33 +9,33 @@
signature SPECIFICATION =
sig
val print_consts: local_theory -> (string * typ -> bool) -> (string * typ) list -> unit
- val check_specification: (Name.binding * typ option * mixfix) list ->
+ val check_specification: (Binding.T * typ option * mixfix) list ->
(Attrib.binding * term list) list list -> Proof.context ->
- (((Name.binding * typ) * mixfix) list * (Attrib.binding * term list) list) * Proof.context
- val read_specification: (Name.binding * string option * mixfix) list ->
+ (((Binding.T * typ) * mixfix) list * (Attrib.binding * term list) list) * Proof.context
+ val read_specification: (Binding.T * string option * mixfix) list ->
(Attrib.binding * string list) list list -> Proof.context ->
- (((Name.binding * typ) * mixfix) list * (Attrib.binding * term list) list) * Proof.context
- val check_free_specification: (Name.binding * typ option * mixfix) list ->
+ (((Binding.T * typ) * mixfix) list * (Attrib.binding * term list) list) * Proof.context
+ val check_free_specification: (Binding.T * typ option * mixfix) list ->
(Attrib.binding * term list) list -> Proof.context ->
- (((Name.binding * typ) * mixfix) list * (Attrib.binding * term list) list) * Proof.context
- val read_free_specification: (Name.binding * string option * mixfix) list ->
+ (((Binding.T * typ) * mixfix) list * (Attrib.binding * term list) list) * Proof.context
+ val read_free_specification: (Binding.T * string option * mixfix) list ->
(Attrib.binding * string list) list -> Proof.context ->
- (((Name.binding * typ) * mixfix) list * (Attrib.binding * term list) list) * Proof.context
- val axiomatization: (Name.binding * typ option * mixfix) list ->
+ (((Binding.T * typ) * mixfix) list * (Attrib.binding * term list) list) * Proof.context
+ val axiomatization: (Binding.T * typ option * mixfix) list ->
(Attrib.binding * term list) list -> theory ->
(term list * (string * thm list) list) * theory
- val axiomatization_cmd: (Name.binding * string option * mixfix) list ->
+ val axiomatization_cmd: (Binding.T * string option * mixfix) list ->
(Attrib.binding * string list) list -> theory ->
(term list * (string * thm list) list) * theory
val definition:
- (Name.binding * typ option * mixfix) option * (Attrib.binding * term) ->
+ (Binding.T * typ option * mixfix) option * (Attrib.binding * term) ->
local_theory -> (term * (string * thm)) * local_theory
val definition_cmd:
- (Name.binding * string option * mixfix) option * (Attrib.binding * string) ->
+ (Binding.T * string option * mixfix) option * (Attrib.binding * string) ->
local_theory -> (term * (string * thm)) * local_theory
- val abbreviation: Syntax.mode -> (Name.binding * typ option * mixfix) option * term ->
+ val abbreviation: Syntax.mode -> (Binding.T * typ option * mixfix) option * term ->
local_theory -> local_theory
- val abbreviation_cmd: Syntax.mode -> (Name.binding * string option * mixfix) option * string ->
+ val abbreviation_cmd: Syntax.mode -> (Binding.T * string option * mixfix) option * string ->
local_theory -> local_theory
val notation: bool -> Syntax.mode -> (term * mixfix) list -> local_theory -> local_theory
val notation_cmd: bool -> Syntax.mode -> (string * mixfix) list -> local_theory -> local_theory
@@ -181,10 +181,10 @@
val (vars, [((raw_name, atts), [prop])]) =
fst (prep (the_list raw_var) [(raw_a, [raw_prop])] lthy);
val (((x, T), rhs), prove) = LocalDefs.derived_def lthy true prop;
- val name = Name.map_name (Thm.def_name_optional x) raw_name;
+ val name = Binding.map_base (Thm.def_name_optional x) raw_name;
val var =
(case vars of
- [] => (Name.binding x, NoSyn)
+ [] => (Binding.name x, NoSyn)
| [((b, _), mx)] =>
let
val y = Name.name_of b;
@@ -193,7 +193,7 @@
Position.str_of (Binding.pos_of b));
in (b, mx) end);
val ((lhs, (_, th)), lthy2) = lthy |> LocalTheory.define Thm.definitionK
- (var, ((Name.map_name (suffix "_raw") name, []), rhs));
+ (var, ((Binding.map_base (suffix "_raw") name, []), rhs));
val ((def_name, [th']), lthy3) = lthy2 |> LocalTheory.note Thm.definitionK
((name, Code.add_default_eqn_attrib :: atts), [prove lthy2 th]);
@@ -217,7 +217,7 @@
val ((x, T), rhs) = LocalDefs.abs_def (#2 (LocalDefs.cert_def lthy prop));
val var =
(case vars of
- [] => (Name.binding x, NoSyn)
+ [] => (Binding.name x, NoSyn)
| [((b, _), mx)] =>
let
val y = Name.name_of b;
@@ -312,13 +312,13 @@
val atts = map (Attrib.internal o K)
[RuleCases.consumes (~ (length obtains)), RuleCases.case_names case_names];
val prems = subtract_prems ctxt elems_ctxt;
- val stmt = [((Name.no_binding, atts), [(thesis, [])])];
+ val stmt = [((Binding.empty, atts), [(thesis, [])])];
val (facts, goal_ctxt) = elems_ctxt
- |> (snd o ProofContext.add_fixes_i [(Name.binding AutoBind.thesisN, NONE, NoSyn)])
+ |> (snd o ProofContext.add_fixes_i [(Binding.name AutoBind.thesisN, NONE, NoSyn)])
|> fold_map assume_case (obtains ~~ propp)
|-> (fn ths => ProofContext.note_thmss_i Thm.assumptionK
- [((Name.binding Obtain.thatN, []), [(ths, [])])] #> #2 #> pair ths);
+ [((Binding.name Obtain.thatN, []), [(ths, [])])] #> #2 #> pair ths);
in ((prems, stmt, facts), goal_ctxt) end);
structure TheoremHook = GenericDataFun
@@ -348,7 +348,7 @@
lthy
|> LocalTheory.notes kind (map2 (fn (a, _) => fn ths => (a, [(ths, [])])) stmt results')
|> (fn (res, lthy') =>
- if Binding.is_nothing name andalso null atts then
+ if Binding.is_empty name andalso null atts then
(ProofDisplay.print_results true lthy' ((kind, ""), res); lthy')
else
let
@@ -361,7 +361,7 @@
in
goal_ctxt
|> ProofContext.note_thmss_i Thm.assumptionK
- [((Name.binding AutoBind.assmsN, []), [(prems, [])])]
+ [((Binding.name AutoBind.assmsN, []), [(prems, [])])]
|> snd
|> Proof.theorem_i before_qed after_qed' (map snd stmt)
|> Proof.refine_insert facts
--- a/src/Pure/Isar/theory_target.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Isar/theory_target.ML Thu Dec 04 14:43:33 2008 +0100
@@ -59,9 +59,9 @@
let
val thy = ProofContext.theory_of ctxt;
val target_name = (if is_class then "class " else "locale ") ^ locale_extern thy target;
- val fixes = map (fn (x, T) => (Name.binding x, SOME T, NoSyn))
+ val fixes = map (fn (x, T) => (Binding.name x, SOME T, NoSyn))
(#1 (ProofContext.inferred_fixes ctxt));
- val assumes = map (fn A => (Attrib.no_binding, [(Thm.term_of A, [])]))
+ val assumes = map (fn A => (Attrib.empty_binding, [(Thm.term_of A, [])]))
(Assumption.assms_of ctxt);
val elems =
(if null fixes then [] else [Element.Fixes fixes]) @
@@ -195,13 +195,13 @@
fun locale_const (Target {target, is_class, ...}) (prmode as (mode, _)) tags ((b, mx), rhs) phi =
let
- val b' = Morphism.name phi b;
+ val b' = Morphism.binding phi b;
val rhs' = Morphism.term phi rhs;
val legacy_arg = (b', Term.close_schematic_term (Logic.legacy_varify rhs'));
val arg = (b', Term.close_schematic_term rhs');
val similar_body = Type.similar_types (rhs, rhs');
(* FIXME workaround based on educated guess *)
- val (prefix', _) = Binding.dest_binding b';
+ val (prefix', _) = Binding.dest b';
val class_global = Name.name_of b = Name.name_of b'
andalso not (null prefix')
andalso (fst o snd o split_last) prefix' = Class.class_prefix target;
@@ -292,7 +292,7 @@
val thy_ctxt = ProofContext.init thy;
val c = Name.name_of b;
- val name' = Name.map_name (Thm.def_name_optional c) name;
+ val name' = Binding.map_base (Thm.def_name_optional c) name;
val (rhs', rhs_conv) =
LocalDefs.export_cterm lthy thy_ctxt (Thm.cterm_of thy rhs) |>> Thm.term_of;
val xs = Variable.add_fixed (LocalTheory.target_of lthy) rhs' [];
--- a/src/Pure/ROOT.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/ROOT.ML Thu Dec 04 14:43:33 2008 +0100
@@ -1,5 +1,4 @@
(* Title: Pure/ROOT.ML
- ID: $Id$
Pure Isabelle.
*)
--- a/src/Pure/Tools/invoke.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/Tools/invoke.ML Thu Dec 04 14:43:33 2008 +0100
@@ -1,5 +1,4 @@
(* Title: Pure/Tools/invoke.ML
- ID: $Id$
Author: Makarius
Schematic invocation of locale expression in proof context.
@@ -8,9 +7,9 @@
signature INVOKE =
sig
val invoke: string * Attrib.src list -> Locale.expr -> string option list ->
- (Name.binding * string option * mixfix) list -> bool -> Proof.state -> Proof.state
+ (Binding.T * string option * mixfix) list -> bool -> Proof.state -> Proof.state
val invoke_i: string * attribute list -> Locale.expr -> term option list ->
- (Name.binding * typ option * mixfix) list -> bool -> Proof.state -> Proof.state
+ (Binding.T * typ option * mixfix) list -> bool -> Proof.state -> Proof.state
end;
structure Invoke: INVOKE =
@@ -60,9 +59,9 @@
| NONE => Drule.termI)) params';
val propp =
- [((Name.no_binding, []), map (rpair [] o Logic.mk_term o Logic.mk_type) types'),
- ((Name.no_binding, []), map (rpair [] o Logic.mk_term) params'),
- ((Name.no_binding, []), map (rpair [] o Element.mark_witness) prems')];
+ [((Binding.empty, []), map (rpair [] o Logic.mk_term o Logic.mk_type) types'),
+ ((Binding.empty, []), map (rpair [] o Logic.mk_term) params'),
+ ((Binding.empty, []), map (rpair [] o Element.mark_witness) prems')];
fun after_qed results =
Proof.end_block #>
Proof.map_context (fn ctxt =>
--- a/src/Pure/assumption.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/assumption.ML Thu Dec 04 14:43:33 2008 +0100
@@ -120,6 +120,6 @@
val thm = export false inner outer;
val term = export_term inner outer;
val typ = Logic.type_map term;
- in Morphism.morphism {name = I, var = I, typ = typ, term = term, fact = map thm} end;
+ in Morphism.morphism {binding = I, var = I, typ = typ, term = term, fact = map thm} end;
end;
--- a/src/Pure/axclass.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/axclass.ML Thu Dec 04 14:43:33 2008 +0100
@@ -9,7 +9,7 @@
signature AX_CLASS =
sig
val define_class: bstring * class list -> string list ->
- ((Name.binding * attribute list) * term list) list -> theory -> class * theory
+ ((Binding.T * attribute list) * term list) list -> theory -> class * theory
val add_classrel: thm -> theory -> theory
val add_arity: thm -> theory -> theory
val prove_classrel: class * class -> tactic -> theory -> theory
@@ -370,7 +370,7 @@
thy
|> Sign.sticky_prefix name_inst
|> Sign.no_base_names
- |> Sign.declare_const [] ((Name.binding c', T'), NoSyn)
+ |> Sign.declare_const [] ((Binding.name c', T'), NoSyn)
|-> (fn const' as Const (c'', _) => Thm.add_def false true
(Thm.def_name c', Logic.mk_equals (Const (c, T'), const'))
#>> Thm.varifyT
@@ -422,7 +422,7 @@
(* class *)
val bconst = Logic.const_of_class bclass;
- val class = Sign.full_name thy bclass;
+ val class = Sign.full_bname thy bclass;
val super = Sign.minimize_sort thy (Sign.certify_sort thy raw_super);
fun check_constraint (a, S) =
@@ -482,9 +482,9 @@
|> Sign.add_path bconst
|> Sign.no_base_names
|> PureThy.note_thmss ""
- [((Name.binding introN, []), [([Drule.standard raw_intro], [])]),
- ((Name.binding superN, []), [(map Drule.standard raw_classrel, [])]),
- ((Name.binding axiomsN, []),
+ [((Binding.name introN, []), [([Drule.standard raw_intro], [])]),
+ ((Binding.name superN, []), [(map Drule.standard raw_classrel, [])]),
+ ((Binding.name axiomsN, []),
[(map (fn th => Drule.standard (class_triv RS th)) raw_axioms, [])])]
||> Sign.restore_naming def_thy;
@@ -530,7 +530,7 @@
fun ax_class prep_class prep_classrel (bclass, raw_super) thy =
let
- val class = Sign.full_name thy bclass;
+ val class = Sign.full_bname thy bclass;
val super = map (prep_class thy) raw_super |> Sign.minimize_sort thy;
in
thy
--- a/src/Pure/consts.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/consts.ML Thu Dec 04 14:43:33 2008 +0100
@@ -30,10 +30,10 @@
val certify: Pretty.pp -> Type.tsig -> bool -> T -> term -> term (*exception TYPE*)
val typargs: T -> string * typ -> typ list
val instance: T -> string * typ list -> typ
- val declare: bool -> NameSpace.naming -> Properties.T -> (Name.binding * typ) -> T -> T
+ val declare: bool -> NameSpace.naming -> Properties.T -> (Binding.T * typ) -> T -> T
val constrain: string * typ option -> T -> T
val abbreviate: Pretty.pp -> Type.tsig -> NameSpace.naming -> string -> Properties.T ->
- Name.binding * term -> T -> (term * term) * T
+ Binding.T * term -> T -> (term * term) * T
val revert_abbrev: string -> string -> T -> T
val hide: bool -> string -> T -> T
val empty: T
@@ -211,7 +211,7 @@
fun err_dup_const c =
error ("Duplicate declaration of constant " ^ quote c);
-fun extend_decls naming decl tab = NameSpace.table_declare naming decl tab
+fun extend_decls naming decl tab = NameSpace.bind naming decl tab
handle Symtab.DUP c => err_dup_const c;
@@ -273,7 +273,7 @@
|> cert_term;
val normal_rhs = expand_term rhs;
val T = Term.fastype_of rhs;
- val lhs = Const (NameSpace.full_binding naming b, T);
+ val lhs = Const (NameSpace.full_name naming b, T);
fun err msg = error (msg ^ " on rhs of abbreviation:\n" ^
Pretty.string_of_term pp (Logic.mk_equals (lhs, rhs)));
--- a/src/Pure/facts.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/facts.ML Thu Dec 04 14:43:33 2008 +0100
@@ -31,9 +31,9 @@
val props: T -> thm list
val could_unify: T -> term -> thm list
val merge: T * T -> T
- val add_global: NameSpace.naming -> Name.binding * thm list -> T -> string * T
- val add_local: bool -> NameSpace.naming -> Name.binding * thm list -> T -> string * T
- val add_dynamic: NameSpace.naming -> Name.binding * (Context.generic -> thm list) -> T -> string * T
+ val add_global: NameSpace.naming -> Binding.T * thm list -> T -> string * T
+ val add_local: bool -> NameSpace.naming -> Binding.T * thm list -> T -> string * T
+ val add_dynamic: NameSpace.naming -> Binding.T * (Context.generic -> thm list) -> T -> string * T
val del: string -> T -> T
val hide: bool -> string -> T -> T
end;
@@ -192,10 +192,10 @@
fun add permissive do_props naming (b, ths) (Facts {facts, props}) =
let
- val (name, facts') = if Binding.is_nothing b then ("", facts)
+ val (name, facts') = if Binding.is_empty b then ("", facts)
else let
val (space, tab) = facts;
- val (name, space') = NameSpace.declare_binding naming b space;
+ val (name, space') = NameSpace.declare naming b space;
val entry = (name, (Static ths, serial ()));
val tab' = (if permissive then Symtab.update else Symtab.update_new) entry tab
handle Symtab.DUP dup => err_dup_fact dup;
@@ -213,7 +213,7 @@
fun add_dynamic naming (b, f) (Facts {facts = (space, tab), props}) =
let
- val (name, space') = NameSpace.declare_binding naming b space;
+ val (name, space') = NameSpace.declare naming b space;
val entry = (name, (Dynamic f, serial ()));
val tab' = Symtab.update_new entry tab
handle Symtab.DUP dup => err_dup_fact dup;
--- a/src/Pure/more_thm.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/more_thm.ML Thu Dec 04 14:43:33 2008 +0100
@@ -281,7 +281,7 @@
let
val name' = if name = "" then "axiom_" ^ serial_string () else name;
val thy' = thy |> Theory.add_axioms_i [(name', prop)];
- val axm = unvarify (Thm.axiom thy' (Sign.full_name thy' name'));
+ val axm = unvarify (Thm.axiom thy' (Sign.full_bname thy' name'));
in (axm, thy') end;
fun add_def unchecked overloaded (name, prop) thy =
@@ -293,7 +293,7 @@
val prop' = Term.map_types (Term.map_atyps (perhaps (AList.lookup (op =) strip_sorts))) prop;
val thy' = Theory.add_defs_i unchecked overloaded [(name, prop')] thy;
- val axm' = Thm.axiom thy' (Sign.full_name thy' name);
+ val axm' = Thm.axiom thy' (Sign.full_bname thy' name);
val thm = unvarify (Thm.instantiate (recover_sorts, []) axm');
in (thm, thy') end;
--- a/src/Pure/morphism.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/morphism.ML Thu Dec 04 14:43:33 2008 +0100
@@ -1,5 +1,4 @@
(* Title: Pure/morphism.ML
- ID: $Id$
Author: Makarius
Abstract morphisms on formal entities.
@@ -17,21 +16,21 @@
signature MORPHISM =
sig
include BASIC_MORPHISM
- val var: morphism -> Name.binding * mixfix -> Name.binding * mixfix
- val name: morphism -> Name.binding -> Name.binding
+ val var: morphism -> Binding.T * mixfix -> Binding.T * mixfix
+ val binding: morphism -> Binding.T -> Binding.T
val typ: morphism -> typ -> typ
val term: morphism -> term -> term
val fact: morphism -> thm list -> thm list
val thm: morphism -> thm -> thm
val cterm: morphism -> cterm -> cterm
val morphism:
- {name: Name.binding -> Name.binding,
- var: Name.binding * mixfix -> Name.binding * mixfix,
+ {binding: Binding.T -> Binding.T,
+ var: Binding.T * mixfix -> Binding.T * mixfix,
typ: typ -> typ,
term: term -> term,
fact: thm list -> thm list} -> morphism
- val name_morphism: (Name.binding -> Name.binding) -> morphism
- val var_morphism: (Name.binding * mixfix -> Name.binding * mixfix) -> morphism
+ val binding_morphism: (Binding.T -> Binding.T) -> morphism
+ val var_morphism: (Binding.T * mixfix -> Binding.T * mixfix) -> morphism
val typ_morphism: (typ -> typ) -> morphism
val term_morphism: (term -> term) -> morphism
val fact_morphism: (thm list -> thm list) -> morphism
@@ -46,15 +45,15 @@
struct
datatype morphism = Morphism of
- {name: Name.binding -> Name.binding,
- var: Name.binding * mixfix -> Name.binding * mixfix,
+ {binding: Binding.T -> Binding.T,
+ var: Binding.T * mixfix -> Binding.T * mixfix,
typ: typ -> typ,
term: term -> term,
fact: thm list -> thm list};
type declaration = morphism -> Context.generic -> Context.generic;
-fun name (Morphism {name, ...}) = name;
+fun binding (Morphism {binding, ...}) = binding;
fun var (Morphism {var, ...}) = var;
fun typ (Morphism {typ, ...}) = typ;
fun term (Morphism {term, ...}) = term;
@@ -64,19 +63,19 @@
val morphism = Morphism;
-fun name_morphism name = morphism {name = name, var = I, typ = I, term = I, fact = I};
-fun var_morphism var = morphism {name = I, var = var, typ = I, term = I, fact = I};
-fun typ_morphism typ = morphism {name = I, var = I, typ = typ, term = I, fact = I};
-fun term_morphism term = morphism {name = I, var = I, typ = I, term = term, fact = I};
-fun fact_morphism fact = morphism {name = I, var = I, typ = I, term = I, fact = fact};
-fun thm_morphism thm = morphism {name = I, var = I, typ = I, term = I, fact = map thm};
+fun binding_morphism binding = morphism {binding = binding, var = I, typ = I, term = I, fact = I};
+fun var_morphism var = morphism {binding = I, var = var, typ = I, term = I, fact = I};
+fun typ_morphism typ = morphism {binding = I, var = I, typ = typ, term = I, fact = I};
+fun term_morphism term = morphism {binding = I, var = I, typ = I, term = term, fact = I};
+fun fact_morphism fact = morphism {binding = I, var = I, typ = I, term = I, fact = fact};
+fun thm_morphism thm = morphism {binding = I, var = I, typ = I, term = I, fact = map thm};
-val identity = morphism {name = I, var = I, typ = I, term = I, fact = I};
+val identity = morphism {binding = I, var = I, typ = I, term = I, fact = I};
fun compose
- (Morphism {name = name1, var = var1, typ = typ1, term = term1, fact = fact1})
- (Morphism {name = name2, var = var2, typ = typ2, term = term2, fact = fact2}) =
- morphism {name = name1 o name2, var = var1 o var2,
+ (Morphism {binding = binding1, var = var1, typ = typ1, term = term1, fact = fact1})
+ (Morphism {binding = binding2, var = var2, typ = typ2, term = term2, fact = fact2}) =
+ morphism {binding = binding1 o binding2, var = var1 o var2,
typ = typ1 o typ2, term = term1 o term2, fact = fact1 o fact2};
fun phi1 $> phi2 = compose phi2 phi1;
--- a/src/Pure/name.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/name.ML Thu Dec 04 14:43:33 2008 +0100
@@ -1,8 +1,7 @@
(* Title: Pure/name.ML
- ID: $Id$
Author: Makarius
-Names of basic logical entities (variables etc.). Generic name bindings.
+Names of basic logical entities (variables etc.).
*)
signature NAME =
@@ -29,11 +28,7 @@
val variant_list: string list -> string list -> string list
val variant: string list -> string -> string
- include BINDING
- type binding = Binding.T
val name_of: Binding.T -> string (*FIMXE legacy*)
- val map_name: (string -> string) -> Binding.T -> Binding.T (*FIMXE legacy*)
- val qualified: string -> Binding.T -> Binding.T (*FIMXE legacy*)
end;
structure Name: NAME =
@@ -146,15 +141,8 @@
fun variant used = singleton (variant_list used);
-(** generic name bindings **)
-
-open Binding;
+(** generic name bindings -- legacy **)
-type binding = Binding.T;
-
-val prefix_of = fst o dest_binding;
-val name_of = snd o dest_binding;
-val map_name = map_binding o apsnd;
-val qualified = map_name o NameSpace.qualified;
+val name_of = snd o Binding.dest;
end;
--- a/src/Pure/pure_thy.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/pure_thy.ML Thu Dec 04 14:43:33 2008 +0100
@@ -31,9 +31,9 @@
val add_thm: (bstring * thm) * attribute list -> theory -> thm * theory
val add_thmss: ((bstring * thm list) * attribute list) list -> theory -> thm list list * theory
val add_thms_dynamic: bstring * (Context.generic -> thm list) -> theory -> theory
- val note_thmss: string -> ((Name.binding * attribute list) *
+ val note_thmss: string -> ((Binding.T * attribute list) *
(thm list * attribute list) list) list -> theory -> (string * thm list) list * theory
- val note_thmss_grouped: string -> string -> ((Name.binding * attribute list) *
+ val note_thmss_grouped: string -> string -> ((Binding.T * attribute list) *
(thm list * attribute list) list) list -> theory -> (string * thm list) list * theory
val add_axioms: ((bstring * term) * attribute list) list -> theory -> thm list * theory
val add_axioms_cmd: ((bstring * string) * attribute list) list -> theory -> thm list * theory
@@ -144,11 +144,11 @@
(FactsData.map (apsnd (fold (cons o lazy_proof) thms)) thy, thms);
fun enter_thms pre_name post_name app_att (b, thms) thy =
- if Binding.is_nothing b
+ if Binding.is_empty b
then swap (enter_proofs (app_att (thy, thms)))
else let
val naming = Sign.naming_of thy;
- val name = NameSpace.full_binding naming b;
+ val name = NameSpace.full_name naming b;
val (thy', thms') =
enter_proofs (apsnd (post_name name) (app_att (thy, pre_name name thms)));
val thms'' = map (Thm.transfer thy') thms';
@@ -159,20 +159,20 @@
(* store_thm(s) *)
fun store_thms (bname, thms) = enter_thms (name_thms true true Position.none)
- (name_thms false true Position.none) I (Name.binding bname, thms);
+ (name_thms false true Position.none) I (Binding.name bname, thms);
fun store_thm (bname, th) = store_thms (bname, [th]) #>> the_single;
fun store_thm_open (bname, th) =
enter_thms (name_thms true false Position.none) (name_thms false false Position.none) I
- (Name.binding bname, [th]) #>> the_single;
+ (Binding.name bname, [th]) #>> the_single;
(* add_thms(s) *)
fun add_thms_atts pre_name ((bname, thms), atts) =
enter_thms pre_name (name_thms false true Position.none)
- (foldl_map (Thm.theory_attributes atts)) (Name.binding bname, thms);
+ (foldl_map (Thm.theory_attributes atts)) (Binding.name bname, thms);
fun gen_add_thmss pre_name =
fold_map (add_thms_atts pre_name);
@@ -189,7 +189,7 @@
fun add_thms_dynamic (bname, f) thy = thy
|> (FactsData.map o apfst)
- (Facts.add_dynamic (Sign.naming_of thy) (Name.binding bname, f) #> snd);
+ (Facts.add_dynamic (Sign.naming_of thy) (Binding.name bname, f) #> snd);
(* note_thmss *)
@@ -199,7 +199,7 @@
fun gen_note_thmss tag = fold_map (fn ((b, more_atts), ths_atts) => fn thy =>
let
val pos = Binding.pos_of b;
- val name = Sign.full_binding thy b;
+ val name = Sign.full_name thy b;
val _ = Position.report (Markup.fact_decl name) pos;
fun app (x, (ths, atts)) = foldl_map (Thm.theory_attributes atts) (x, ths);
@@ -219,7 +219,7 @@
(* store axioms as theorems *)
local
- fun get_ax thy (name, _) = Thm.axiom thy (Sign.full_name thy name);
+ fun get_ax thy (name, _) = Thm.axiom thy (Sign.full_bname thy name);
fun get_axs thy named_axs = map (Thm.forall_elim_vars 0 o get_ax thy) named_axs;
fun add_axm add = fold_map (fn ((name, ax), atts) => fn thy =>
let
--- a/src/Pure/sign.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/sign.ML Thu Dec 04 14:43:33 2008 +0100
@@ -14,11 +14,10 @@
tsig: Type.tsig,
consts: Consts.T}
val naming_of: theory -> NameSpace.naming
+ val full_name: theory -> Binding.T -> string
val base_name: string -> bstring
- val full_name: theory -> bstring -> string
- val full_binding: theory -> Name.binding -> string
- val full_name_path: theory -> string -> bstring -> string
- val declare_name: theory -> string -> NameSpace.T -> NameSpace.T
+ val full_bname: theory -> bstring -> string
+ val full_bname_path: theory -> string -> bstring -> string
val syn_of: theory -> Syntax.syntax
val tsig_of: theory -> Type.tsig
val classes_of: theory -> Sorts.algebra
@@ -92,10 +91,10 @@
val del_modesyntax: Syntax.mode -> (bstring * string * mixfix) list -> theory -> theory
val del_modesyntax_i: Syntax.mode -> (bstring * typ * mixfix) list -> theory -> theory
val notation: bool -> Syntax.mode -> (term * mixfix) list -> theory -> theory
- val declare_const: Properties.T -> (Name.binding * typ) * mixfix -> theory -> term * theory
+ val declare_const: Properties.T -> (Binding.T * typ) * mixfix -> theory -> term * theory
val add_consts: (bstring * string * mixfix) list -> theory -> theory
val add_consts_i: (bstring * typ * mixfix) list -> theory -> theory
- val add_abbrev: string -> Properties.T -> Name.binding * term -> theory -> (term * term) * theory
+ val add_abbrev: string -> Properties.T -> Binding.T * term -> theory -> (term * term) * theory
val revert_abbrev: string -> string -> theory -> theory
val add_const_constraint: string * typ option -> theory -> theory
val primitive_class: string * class list -> theory -> theory
@@ -189,10 +188,10 @@
val naming_of = #naming o rep_sg;
val base_name = NameSpace.base;
-val full_name = NameSpace.full o naming_of;
-val full_binding = NameSpace.full_binding o naming_of;
-fun full_name_path thy elems = NameSpace.full (NameSpace.add_path elems (naming_of thy));
-val declare_name = NameSpace.declare o naming_of;
+val full_name = NameSpace.full_name o naming_of;
+fun full_bname thy = NameSpace.full_name (naming_of thy) o Binding.name;
+fun full_bname_path thy elems =
+ NameSpace.full_name (NameSpace.add_path elems (naming_of thy)) o Binding.name;
(* syntax *)
@@ -510,11 +509,11 @@
fun prep (raw_b, raw_T, raw_mx) =
let
val (mx_name, mx) = Syntax.const_mixfix (Name.name_of raw_b) raw_mx;
- val b = Name.map_name (K mx_name) raw_b;
- val c = full_binding thy b;
+ val b = Binding.map_base (K mx_name) raw_b;
+ val c = full_name thy b;
val c_syn = if authentic then Syntax.constN ^ c else Name.name_of b;
val T = (prepT raw_T handle TYPE (msg, _, _) => error msg) handle ERROR msg =>
- cat_error msg ("in declaration of constant " ^ quote (Name.display b));
+ cat_error msg ("in declaration of constant " ^ quote (Binding.display b));
val T' = Logic.varifyT T;
in ((b, T'), (c_syn, T', mx), Const (c, T)) end;
val args = map prep raw_args;
@@ -526,7 +525,7 @@
|> pair (map #3 args)
end;
-fun bindify (name, T, mx) = (Name.binding name, T, mx);
+fun bindify (name, T, mx) = (Binding.name name, T, mx);
in
@@ -551,7 +550,7 @@
val pp = Syntax.pp_global thy;
val prep_tm = no_frees pp o Term.no_dummy_patterns o cert_term_abbrev thy;
val t = (prep_tm raw_t handle TYPE (msg, _, _) => error msg | TERM (msg, _) => error msg)
- handle ERROR msg => cat_error msg ("in constant abbreviation " ^ quote (Name.display b));
+ handle ERROR msg => cat_error msg ("in constant abbreviation " ^ quote (Binding.display b));
val (res, consts') = consts_of thy
|> Consts.abbreviate pp (tsig_of thy) (naming_of thy) mode tags (b, t);
in (res, thy |> map_consts (K consts')) end;
--- a/src/Pure/simplifier.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/simplifier.ML Thu Dec 04 14:43:33 2008 +0100
@@ -194,11 +194,11 @@
in
lthy |> LocalTheory.declaration (fn phi =>
let
- val b' = Morphism.name phi (Name.binding name);
+ val b' = Morphism.binding phi (Binding.name name);
val simproc' = morph_simproc phi simproc;
in
Simprocs.map (fn simprocs =>
- NameSpace.table_declare naming (b', simproc') simprocs |> snd
+ NameSpace.bind naming (b', simproc') simprocs |> snd
handle Symtab.DUP dup => err_dup_simproc dup)
#> map_ss (fn ss => ss addsimprocs [simproc'])
end)
--- a/src/Pure/theory.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/theory.ML Thu Dec 04 14:43:33 2008 +0100
@@ -36,7 +36,7 @@
val add_defs_i: bool -> bool -> (bstring * term) list -> theory -> theory
val add_finals: bool -> string list -> theory -> theory
val add_finals_i: bool -> term list -> theory -> theory
- val specify_const: Properties.T -> (Name.binding * typ) * mixfix -> theory -> term * theory
+ val specify_const: Properties.T -> (Binding.T * typ) * mixfix -> theory -> term * theory
end
structure Theory: THEORY =
@@ -253,7 +253,7 @@
fun check_def thy unchecked overloaded (bname, tm) defs =
let
val ctxt = ProofContext.init thy;
- val name = Sign.full_name thy bname;
+ val name = Sign.full_bname thy bname;
val (lhs_const, rhs) = Sign.cert_def ctxt tm;
val rhs_consts = fold_aterms (fn Const const => insert (op =) const | _ => I) rhs [];
val _ = check_overloading thy overloaded lhs_const;
--- a/src/Pure/thm.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/thm.ML Thu Dec 04 14:43:33 2008 +0100
@@ -1732,9 +1732,9 @@
fun add_oracle (bname, oracle) thy =
let
val naming = Sign.naming_of thy;
- val name = NameSpace.full naming bname;
+ val name = NameSpace.full_name naming (Binding.name bname);
val thy' = thy |> Oracles.map (fn (space, tab) =>
- (NameSpace.declare naming name space,
+ (NameSpace.declare_base naming name space,
Symtab.update_new (name, stamp ()) tab handle Symtab.DUP dup => err_dup_ora dup));
in ((name, invoke_oracle (Theory.check_thy thy') name oracle), thy') end;
--- a/src/Pure/type.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/type.ML Thu Dec 04 14:43:33 2008 +0100
@@ -509,10 +509,10 @@
fun add_class pp naming (c, cs) tsig =
tsig |> map_tsig (fn ((space, classes), default, types) =>
let
- val c' = NameSpace.full naming c;
+ val c' = NameSpace.full_name naming (Binding.name c);
val cs' = map (cert_class tsig) cs
handle TYPE (msg, _, _) => error msg;
- val space' = space |> NameSpace.declare naming c';
+ val space' = space |> NameSpace.declare_base naming c';
val classes' = classes |> Sorts.add_class pp (c', cs');
in ((space', classes'), default, types) end);
@@ -568,8 +568,8 @@
fun new_decl naming tags (c, decl) (space, types) =
let
val tags' = tags |> Position.default_properties (Position.thread_data ());
- val c' = NameSpace.full naming c;
- val space' = NameSpace.declare naming c' space;
+ val c' = NameSpace.full_name naming (Binding.name c);
+ val space' = NameSpace.declare_base naming c' space;
val types' =
(case Symtab.lookup types c' of
SOME ((decl', _), _) => err_in_decls c' decl decl'
--- a/src/Pure/variable.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Pure/variable.ML Thu Dec 04 14:43:33 2008 +0100
@@ -398,7 +398,7 @@
val fact = export inner outer;
val term = singleton (export_terms inner outer);
val typ = Logic.type_map term;
- in Morphism.morphism {name = I, var = I, typ = typ, term = term, fact = fact} end;
+ in Morphism.morphism {binding = I, var = I, typ = typ, term = term, fact = fact} end;
--- a/src/Tools/induct.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/Tools/induct.ML Thu Dec 04 14:43:33 2008 +0100
@@ -1,5 +1,4 @@
(* Title: Tools/induct.ML
- ID: $Id$
Author: Markus Wenzel, TU Muenchen
Proof by cases, induction, and coinduction.
@@ -51,7 +50,7 @@
val setN: string
(*proof methods*)
val fix_tac: Proof.context -> int -> (string * typ) list -> int -> tactic
- val add_defs: (Name.binding option * term) option list -> Proof.context ->
+ val add_defs: (Binding.T option * term) option list -> Proof.context ->
(term option list * thm list) * Proof.context
val atomize_term: theory -> term -> term
val atomize_tac: int -> tactic
@@ -63,7 +62,7 @@
val cases_tac: Proof.context -> term option list list -> thm option ->
thm list -> int -> cases_tactic
val get_inductT: Proof.context -> term option list list -> thm list list
- val induct_tac: Proof.context -> (Name.binding option * term) option list list ->
+ val induct_tac: Proof.context -> (Binding.T option * term) option list list ->
(string * typ) list list -> term option list -> thm list option ->
thm list -> int -> cases_tactic
val coinduct_tac: Proof.context -> term option list -> term option list -> thm option ->
@@ -553,7 +552,7 @@
let
fun add (SOME (SOME x, t)) ctxt =
let val ([(lhs, (_, th))], ctxt') =
- LocalDefs.add_defs [((x, NoSyn), ((Name.no_binding, []), t))] ctxt
+ LocalDefs.add_defs [((x, NoSyn), ((Binding.empty, []), t))] ctxt
in ((SOME lhs, [th]), ctxt') end
| add (SOME (NONE, t)) ctxt = ((SOME t, []), ctxt)
| add NONE ctxt = ((NONE, []), ctxt);
--- a/src/ZF/Tools/datatype_package.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/ZF/Tools/datatype_package.ML Thu Dec 04 14:43:33 2008 +0100
@@ -101,7 +101,7 @@
val npart = length rec_names; (*number of mutually recursive parts*)
- val full_name = Sign.full_name thy_path;
+ val full_name = Sign.full_bname thy_path;
(*Make constructor definition;
kpart is the number of this mutually recursive part*)
@@ -262,7 +262,7 @@
||> add_recursor
||> Sign.parent_path
- val intr_names = map (Name.binding o #2) (List.concat con_ty_lists);
+ val intr_names = map (Binding.name o #2) (List.concat con_ty_lists);
val (thy1, ind_result) =
thy0 |> Ind_Package.add_inductive_i
false (rec_tms, dom_sum) (map Thm.no_attributes (intr_names ~~ intr_tms))
--- a/src/ZF/Tools/inductive_package.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/ZF/Tools/inductive_package.ML Thu Dec 04 14:43:33 2008 +0100
@@ -29,10 +29,10 @@
(*Insert definitions for the recursive sets, which
must *already* be declared as constants in parent theory!*)
val add_inductive_i: bool -> term list * term ->
- ((Name.binding * term) * attribute list) list ->
+ ((Binding.T * term) * attribute list) list ->
thm list * thm list * thm list * thm list -> theory -> theory * inductive_result
val add_inductive: string list * string ->
- ((Name.binding * string) * Attrib.src list) list ->
+ ((Binding.T * string) * Attrib.src list) list ->
(Facts.ref * Attrib.src list) list * (Facts.ref * Attrib.src list) list *
(Facts.ref * Attrib.src list) list * (Facts.ref * Attrib.src list) list ->
theory -> theory * inductive_result
--- a/src/ZF/Tools/primrec_package.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/ZF/Tools/primrec_package.ML Thu Dec 04 14:43:33 2008 +0100
@@ -9,8 +9,8 @@
signature PRIMREC_PACKAGE =
sig
- val add_primrec: ((Name.binding * string) * Attrib.src list) list -> theory -> theory * thm list
- val add_primrec_i: ((Name.binding * term) * attribute list) list -> theory -> theory * thm list
+ val add_primrec: ((Binding.T * string) * Attrib.src list) list -> theory -> theory * thm list
+ val add_primrec_i: ((Binding.T * term) * attribute list) list -> theory -> theory * thm list
end;
structure PrimrecPackage : PRIMREC_PACKAGE =
--- a/src/ZF/ind_syntax.ML Wed Dec 03 21:00:39 2008 -0800
+++ b/src/ZF/ind_syntax.ML Thu Dec 04 14:43:33 2008 +0100
@@ -85,7 +85,7 @@
Logic.list_implies
(map FOLogic.mk_Trueprop prems,
FOLogic.mk_Trueprop
- (@{const mem} $ list_comb (Const (Sign.full_name sg name, T), args)
+ (@{const mem} $ list_comb (Const (Sign.full_bname sg name, T), args)
$ rec_tm))
in map mk_intr constructs end;