Preserve idents (expression in sublocale).
--- a/src/FOL/ex/NewLocaleTest.thy Wed Dec 10 14:45:15 2008 +0100
+++ b/src/FOL/ex/NewLocaleTest.thy Wed Dec 10 16:30:33 2008 +0100
@@ -10,7 +10,6 @@
ML_val {* set new_locales *}
ML_val {* set Toplevel.debug *}
-ML_val {* set show_hyps *}
typedecl int arities int :: "term"
@@ -24,7 +23,7 @@
int_minus: "(-x) + x = 0"
int_minus2: "-(-x) = x"
-text {* Inference of parameter types *}
+section {* Inference of parameter types *}
locale param1 = fixes p
print_locale! param1
@@ -44,7 +43,7 @@
print_locale! param4
-text {* Incremental type constraints *}
+subsection {* Incremental type constraints *}
locale constraint1 =
fixes prod (infixl "**" 65)
@@ -58,7 +57,7 @@
print_locale! constraint2
-text {* Inheritance *}
+section {* Inheritance *}
locale semi =
fixes prod (infixl "**" 65)
@@ -94,7 +93,7 @@
print_locale! pert_hom' thm pert_hom'_def
-text {* Syntax declarations *}
+section {* Syntax declarations *}
locale logic =
fixes land (infixl "&&" 55)
@@ -113,13 +112,13 @@
print_locale! use_decl thm use_decl_def
-text {* Foundational versions of theorems *}
+section {* Foundational versions of theorems *}
thm logic.assoc
thm logic.lor_def
-text {* Defines *}
+section {* Defines *}
locale logic_def =
fixes land (infixl "&&" 55)
@@ -149,7 +148,7 @@
end
-text {* Notes *}
+section {* Notes *}
(* A somewhat arcane homomorphism example *)
@@ -169,7 +168,7 @@
by (rule semi_hom_mult)
-text {* Theorem statements *}
+section {* Theorem statements *}
lemma (in lgrp) lcancel:
"x ** y = x ** z <-> y = z"
@@ -200,7 +199,7 @@
print_locale! rgrp
-text {* Patterns *}
+subsection {* Patterns *}
lemma (in rgrp)
assumes "y ** x = z ** x" (is ?a)
@@ -218,7 +217,7 @@
qed
-text {* Interpretation between locales: sublocales *}
+section {* Interpretation between locales: sublocales *}
sublocale lgrp < right: rgrp
print_facts
@@ -359,7 +358,7 @@
print_locale! trivial (* No instance for y created (subsumed). *)
-text {* Sublocale, then interpretation in theory *}
+subsection {* Sublocale, then interpretation in theory *}
interpretation int: lgrp "op +" "0" "minus"
proof unfold_locales
@@ -374,7 +373,7 @@
(* the latter comes through the sublocale relation *)
-text {* Interpretation in theory, then sublocale *}
+subsection {* Interpretation in theory, then sublocale *}
interpretation (* fol: *) logic "op +" "minus"
(* FIXME declaration of qualified names *)
@@ -386,10 +385,12 @@
assumes assoc: "(x && y) && z = x && (y && z)"
and notnot: "-- (-- x) = x"
begin
-(* FIXME
+
+(* FIXME interpretation below fails
definition lor (infixl "||" 50) where
"x || y = --(-- x && -- y)"
*)
+
end
sublocale logic < two: logic2
@@ -398,7 +399,16 @@
thm two.assoc
-text {* Interpretation in proofs *}
+subsection {* Declarations and sublocale *}
+
+locale logic_a = logic
+locale logic_b = logic
+
+sublocale logic_a < logic_b
+ by unfold_locales
+
+
+section {* Interpretation in proofs *}
lemma True
proof
--- a/src/Pure/Isar/expression.ML Wed Dec 10 14:45:15 2008 +0100
+++ b/src/Pure/Isar/expression.ML Wed Dec 10 16:30:33 2008 +0100
@@ -410,7 +410,7 @@
val fors = prep_vars fixed context |> fst;
val ctxt = context |> ProofContext.add_fixes_i fors |> snd;
- val (_, insts', ctxt') = fold prep_inst raw_insts (0, [], NewLocale.clear_local_idents ctxt);
+ val (_, insts', ctxt') = fold prep_inst raw_insts (0, [], ctxt);
val (_, elems'', ctxt'') = fold prep_elem raw_elems (insts', [], ctxt');
val (insts, elems, concl, ctxt) = prep_concl raw_concl (insts', elems'', ctxt'');
@@ -484,7 +484,7 @@
(* Declare parameters and imported facts *)
val context' = context |>
ProofContext.add_fixes_i fixed |> snd |>
- NewLocale.clear_local_idents |> fold NewLocale.activate_local_facts deps;
+ fold NewLocale.activate_local_facts deps;
val ((elems', _), _) = activate elems (ProofContext.set_stmt true context');
in ((fixed, deps, elems'), (parms, spec, defs)) end;
--- a/src/Pure/Isar/new_locale.ML Wed Dec 10 14:45:15 2008 +0100
+++ b/src/Pure/Isar/new_locale.ML Wed Dec 10 16:30:33 2008 +0100
@@ -47,8 +47,7 @@
val unfold_attrib: attribute
val intro_locales_tac: bool -> Proof.context -> thm list -> tactic
- (* Identifiers and registrations *)
- val clear_local_idents: Proof.context -> Proof.context
+ (* Registrations *)
val add_global_registration: (string * Morphism.morphism) -> theory -> theory
val get_global_registrations: theory -> (string * Morphism.morphism) list
@@ -223,12 +222,10 @@
fun get_global_idents thy =
let val (Ready ids) = (IdentifiersData.get o Context.Theory) thy in ids end;
val put_global_idents = Context.theory_map o IdentifiersData.put o Ready;
-val clear_global_idents = put_global_idents empty;
fun get_local_idents ctxt =
let val (Ready ids) = (IdentifiersData.get o Context.Proof) ctxt in ids end;
val put_local_idents = Context.proof_map o IdentifiersData.put o Ready;
-val clear_local_idents = put_local_idents empty;
end;