Local_Theory.define no longer hard-wires default theorem name -- targets/packages need to take care of it;
authorwenzelm
Wed, 14 Mar 2012 11:45:16 +0100
changeset 46916 e7ea35b41e2d
parent 46915 4b2eccaec3f6
child 46917 2f6c1952188a
Local_Theory.define no longer hard-wires default theorem name -- targets/packages need to take care of it;
NEWS
src/Pure/Isar/generic_target.ML
src/Pure/Isar/overloading.ML
--- a/NEWS	Wed Mar 14 11:10:10 2012 +0100
+++ b/NEWS	Wed Mar 14 11:45:16 2012 +0100
@@ -371,6 +371,12 @@
 
 *** ML ***
 
+* Local_Theory.define no longer hard-wires default theorem name
+"foo_def": definitional packages need to make this explicit, and may
+choose to omit theorem bindings for definitions by using
+Binding.empty/Attrib.empty_binding.  Potential INCOMPATIBILITY for
+derived definitional packages.
+
 * Renamed Thm.capply to Thm.apply, and Thm.cabs to Thm.lambda in
 conformance with similar operations in structure Term and Logic.
 
--- a/src/Pure/Isar/generic_target.ML	Wed Mar 14 11:10:10 2012 +0100
+++ b/src/Pure/Isar/generic_target.ML	Wed Mar 14 11:45:16 2012 +0100
@@ -48,13 +48,11 @@
 
 (* define *)
 
-fun define foundation ((b, mx), ((proto_b_def, atts), rhs)) lthy =
+fun define foundation ((b, mx), ((b_def, atts), rhs)) lthy =
   let
     val thy = Proof_Context.theory_of lthy;
     val thy_ctxt = Proof_Context.init_global thy;
 
-    val b_def = Thm.def_binding_optional b proto_b_def;
-
     (*term and type parameters*)
     val crhs = Thm.cterm_of thy rhs;
     val ((defs, _), rhs') = Local_Defs.export_cterm lthy thy_ctxt crhs ||> Thm.term_of;
@@ -202,7 +200,8 @@
     val lhs = list_comb (const, type_params @ term_params);
     val ((_, def), lthy3) = lthy2
       |> Local_Theory.background_theory_result
-        (Thm.add_def lthy2 false false (b_def, Logic.mk_equals (lhs, rhs)));
+        (Thm.add_def lthy2 false false
+          (Thm.def_binding_optional b b_def, Logic.mk_equals (lhs, rhs)));
   in ((lhs, def), lthy3) end;
 
 fun theory_notes kind global_facts lthy =
--- a/src/Pure/Isar/overloading.ML	Wed Mar 14 11:10:10 2012 +0100
+++ b/src/Pure/Isar/overloading.ML	Wed Mar 14 11:45:16 2012 +0100
@@ -147,15 +147,16 @@
   in 
     ctxt
     |> map_improvable_syntax (K ((([], []), (((K NONE, subst), false), unchecks)), false))
-  end
+  end;
 
 fun define_overloaded (c, U) (v, checked) (b_def, rhs) =
   Local_Theory.background_theory_result
     (Thm.add_def_global (not checked) true
-      (b_def, Logic.mk_equals (Const (c, Term.fastype_of rhs), rhs)))
+      (Thm.def_binding_optional (Binding.name v) b_def,
+        Logic.mk_equals (Const (c, Term.fastype_of rhs), rhs)))
   ##> map_overloading (filter_out (fn (_, (v', _)) => v' = v))
   ##> Local_Theory.target synchronize_syntax
-  #-> (fn (_, def) => pair (Const (c, U), def))
+  #-> (fn (_, def) => pair (Const (c, U), def));
 
 fun foundation (((b, U), mx), (b_def, rhs)) (type_params, term_params) lthy =
   (case operation lthy b of