Remove docobj table, instances were moved to a name space

This commit is contained in:
Nicolas Méric 2023-02-06 17:55:19 +01:00
parent e5a301a3bd
commit 90a6b5aeb2
4 changed files with 52 additions and 94 deletions

View File

@ -222,6 +222,10 @@ struct
fun update_instance name instance thy =
thy |> Instances.map
(Name_Space.define (Context.Theory thy) false (name, instance) #> #2);
fun update_instance_entry name new_instance thy =
thy |> Instances.map
(Name_Space.map_table_entry name (fn _ => new_instance));
fun print_instances verbose ctxt =
Pretty.big_list "Isabelle.DOF Instances:"
@ -236,29 +240,6 @@ struct
fun the_instance instances i =
the_entry_key instances i
type docobj = {pos : Position.T,
thy_name : string,
input_term : term,
value : term,
inline : bool,
id : serial,
cid : string,
vcid : string option}
type docobj_tab ={tab : (docobj option) Symtab.table,
maxano : int
}
val initial_docobj_tab:docobj_tab = {tab = Symtab.empty, maxano = 0}
fun merge_docobj_tab ({tab=otab,maxano=m}, {tab=otab',maxano=m'}) =
(let fun X(NONE,NONE) = false
|X(SOME _, NONE) = false
|X(NONE, SOME _) = false
|X(SOME b, SOME b') = true (* b = b' *)
in {tab=Symtab.merge X (otab,otab'),maxano=Int.max(m,m')}
end)
type ISA_transformers = {check :
(theory -> term * typ * Position.T -> string -> term option),
elaborate : (theory -> string -> typ -> term option -> Position.T -> term)
@ -352,31 +333,28 @@ fun the_monitor_instance monitor_instances i =
(* registrating data of the Isa_DOF component *)
structure Data = Generic_Data
(
type T = {docobj_tab : docobj_tab,
docclass_tab : docclass_tab,
type T = {docclass_tab : docclass_tab,
ISA_transformer_tab : ISA_transformer_tab,
monitor_tab : monitor_tab,
docclass_inv_tab : docclass_inv_tab,
docclass_eager_inv_tab : docclass_eager_inv_tab,
docclass_lazy_inv_tab : docclass_lazy_inv_tab}
val empty = {docobj_tab = initial_docobj_tab,
docclass_tab = initial_docclass_tab,
val empty = {docclass_tab = initial_docclass_tab,
ISA_transformer_tab = initial_ISA_tab,
monitor_tab = initial_monitor_tab,
docclass_inv_tab = initial_docclass_inv_tab,
docclass_eager_inv_tab = initial_docclass_eager_inv_tab,
docclass_lazy_inv_tab = initial_docclass_lazy_inv_tab
}
fun merge( {docobj_tab=d1,docclass_tab = c1,
fun merge( {docclass_tab = c1,
ISA_transformer_tab = e1, monitor_tab=m1,
docclass_inv_tab = n1,
docclass_eager_inv_tab = en1, docclass_lazy_inv_tab = ln1},
{docobj_tab=d2,docclass_tab = c2,
{docclass_tab = c2,
ISA_transformer_tab = e2, monitor_tab=m2,
docclass_inv_tab = n2,
docclass_eager_inv_tab = en2, docclass_lazy_inv_tab = ln2}) =
{docobj_tab=merge_docobj_tab (d1,d2),
docclass_tab = merge_docclass_tab (c1,c2),
{docclass_tab = merge_docclass_tab (c1,c2),
(*
The following merge is ultra-critical: the transformer tabs were
just extended by letting *the first* entry with the same long-name win.
@ -402,59 +380,50 @@ val get_data_global = Data.get o Context.Theory;
val map_data_global = Context.theory_map o map_data;
fun upd_docobj_tab f {docobj_tab,docclass_tab,ISA_transformer_tab,
monitor_tab,docclass_inv_tab,
docclass_eager_inv_tab, docclass_lazy_inv_tab} =
{docobj_tab = f docobj_tab, docclass_tab=docclass_tab,
ISA_transformer_tab=ISA_transformer_tab, monitor_tab=monitor_tab,
docclass_inv_tab=docclass_inv_tab,
docclass_eager_inv_tab=docclass_eager_inv_tab,
docclass_lazy_inv_tab=docclass_lazy_inv_tab};
fun upd_docclass_tab f {docobj_tab=x,docclass_tab = y,ISA_transformer_tab = z,
fun upd_docclass_tab f {docclass_tab = y,ISA_transformer_tab = z,
monitor_tab, docclass_inv_tab,
docclass_eager_inv_tab, docclass_lazy_inv_tab} =
{docobj_tab=x,docclass_tab = f y,ISA_transformer_tab = z, monitor_tab=monitor_tab,
{docclass_tab = f y,ISA_transformer_tab = z, monitor_tab=monitor_tab,
docclass_inv_tab=docclass_inv_tab,
docclass_eager_inv_tab=docclass_eager_inv_tab,
docclass_lazy_inv_tab=docclass_lazy_inv_tab};
fun upd_ISA_transformers f {docobj_tab=x,docclass_tab = y,ISA_transformer_tab = z,
fun upd_ISA_transformers f {docclass_tab = y,ISA_transformer_tab = z,
monitor_tab, docclass_inv_tab,
docclass_eager_inv_tab, docclass_lazy_inv_tab} =
{docobj_tab=x,docclass_tab = y,ISA_transformer_tab = f z, monitor_tab=monitor_tab,
{docclass_tab = y,ISA_transformer_tab = f z, monitor_tab=monitor_tab,
docclass_inv_tab=docclass_inv_tab,
docclass_eager_inv_tab=docclass_eager_inv_tab,
docclass_lazy_inv_tab=docclass_lazy_inv_tab};
fun upd_monitor_tabs f {docobj_tab,docclass_tab,ISA_transformer_tab,
fun upd_monitor_tabs f {docclass_tab,ISA_transformer_tab,
monitor_tab, docclass_inv_tab,
docclass_eager_inv_tab, docclass_lazy_inv_tab} =
{docobj_tab = docobj_tab,docclass_tab = docclass_tab,
{docclass_tab = docclass_tab,
ISA_transformer_tab = ISA_transformer_tab, monitor_tab = f monitor_tab,
docclass_inv_tab=docclass_inv_tab,
docclass_eager_inv_tab=docclass_eager_inv_tab,
docclass_lazy_inv_tab=docclass_lazy_inv_tab};
fun upd_docclass_inv_tab f {docobj_tab,docclass_tab,ISA_transformer_tab,
fun upd_docclass_inv_tab f {docclass_tab,ISA_transformer_tab,
monitor_tab, docclass_inv_tab,
docclass_eager_inv_tab, docclass_lazy_inv_tab} =
{docobj_tab = docobj_tab,docclass_tab = docclass_tab,
{docclass_tab = docclass_tab,
ISA_transformer_tab = ISA_transformer_tab, monitor_tab = monitor_tab,
docclass_inv_tab = f docclass_inv_tab,
docclass_eager_inv_tab=docclass_eager_inv_tab,
docclass_lazy_inv_tab=docclass_lazy_inv_tab};
fun upd_docclass_eager_inv_tab f {docobj_tab,docclass_tab,ISA_transformer_tab,
fun upd_docclass_eager_inv_tab f {docclass_tab,ISA_transformer_tab,
monitor_tab, docclass_inv_tab,
docclass_eager_inv_tab, docclass_lazy_inv_tab} =
{docobj_tab = docobj_tab,docclass_tab = docclass_tab,
{docclass_tab = docclass_tab,
ISA_transformer_tab = ISA_transformer_tab, monitor_tab = monitor_tab,
docclass_inv_tab=docclass_inv_tab,
docclass_eager_inv_tab=f docclass_eager_inv_tab,
docclass_lazy_inv_tab=docclass_lazy_inv_tab};
fun upd_docclass_lazy_inv_tab f {docobj_tab,docclass_tab,ISA_transformer_tab,
fun upd_docclass_lazy_inv_tab f {docclass_tab,ISA_transformer_tab,
monitor_tab, docclass_inv_tab,
docclass_eager_inv_tab, docclass_lazy_inv_tab} =
{docobj_tab = docobj_tab,docclass_tab = docclass_tab,
{docclass_tab = docclass_tab,
ISA_transformer_tab = ISA_transformer_tab, monitor_tab = monitor_tab,
docclass_inv_tab=docclass_inv_tab,
docclass_eager_inv_tab=docclass_eager_inv_tab,
@ -547,12 +516,12 @@ fun is_declared_oid_global' oid thy =
val ((oid, rs), instance) = Name_Space.check_reports (Context.Theory thy)
(get_instances (Proof_Context.init_global thy)) (oid, [Position.none])
handle ERROR _ => (("undefined_instance", []), none_instance)
val _ = writeln ("In define_object_global instance: " ^ \<^make_string> instance)
in if oid = undefined_instance andalso instance = none_instance
then false
else if Long_Name.qualifier oid = Context.theory_name thy
else true (*if Long_Name.qualifier oid = Context.theory_name thy
then true
else false
else false*)
end
(*fun is_declared_oid_local oid thy = let val {tab,...} = #docobj_tab(get_data thy)
@ -729,25 +698,17 @@ fun define_doc_class_global (params', binding) parent fields rexp reject_Atoms i
in map_data_global(upd_docclass_tab(Symtab.update(cid_long,info)))(thy)
end
fun define_object_global (oid, bbb) thy =
let val nn = Context.theory_name thy (* in case that we need the thy-name to identify
the space where it is ... *)
in if is_defined_oid_global' oid thy
then error("multiple definition of document reference")
else map_data_global (upd_docobj_tab(fn {tab=t,maxano=x} =>
{tab=Symtab.update(oid,SOME bbb) t,
maxano=x}))
(thy)
end
fun define_object_global' ((oid, pos), bbb) thy =
fun define_object_global ((oid, pos), bbb) thy =
let val nn = Context.theory_name thy (* in case that we need the thy-name to identify
the space where it is ... *)
in if is_declared_oid_global' oid thy
then if is_defined_oid_global' oid thy
then error("multiple definition of document reference")
else update_instance (Binding.make (oid, pos)) (Instance (SOME bbb)) thy
(*else update_instance (Binding.make (oid, pos)) (Instance (SOME bbb)) thy*)
else let val ((oid', rs), instance) = Name_Space.check_reports (Context.Theory thy)
(get_instances (Proof_Context.init_global thy)) (oid, [Position.none])
in update_instance_entry oid' (Instance (SOME bbb)) thy end
else add_instance (Binding.make (oid, pos)) (Instance (SOME bbb)) thy
end
@ -1052,15 +1013,10 @@ fun writeln_classrefs ctxt = let val tab = #docclass_tab(get_data ctxt)
in writeln (String.concatWith "," (Symtab.keys tab)) end
fun writeln_docrefs ctxt = let val {tab,...} = #docobj_tab(get_data ctxt)
in writeln (String.concatWith "," (Symtab.keys tab)) end
fun print_doc_class_tree ctxt P T =
let val {docobj_tab={tab = x, ...},docclass_tab, ...} = get_data ctxt;
let val {docclass_tab, ...} = get_data ctxt;
val class_tab:(string * docclass_struct)list = (Symtab.dest docclass_tab)
fun is_class_son X (n, dc:docclass_struct) = (X = #inherits_from dc)
fun tree lev ([]:(string * docclass_struct)list) = ""
@ -1390,8 +1346,6 @@ fun elaborate_instances_list thy isa_name _ _ _ =
val base_name' = DOF_core.get_class_name_without_prefix (base_name_without_suffix)
val class_typ = Proof_Context.read_typ (Proof_Context.init_global thy)
(base_name')
val tab = #tab(#docobj_tab(DOF_core.get_data_global thy))
(*val table_list = Symtab.dest tab*)
val table_list = Name_Space.dest_table (DOF_core.get_instances (Proof_Context.init_global thy))
fun get_instances_name_list _ [] = []
| get_instances_name_list class_name (x::xs) =
@ -2058,7 +2012,7 @@ fun create_and_check_docitem is_monitor {is_inline=is_inline} obinding cid_pos d
id = id,
cid = cid_long,
vcid = vcid})*)
|> DOF_core.define_object_global' ((oid, pos), {pos = pos,
|> DOF_core.define_object_global ((oid, pos), {pos = pos,
thy_name = Context.theory_name thy,
input_term = fst value_terms,
value = value (Proof_Context.init_global thy)
@ -2526,7 +2480,7 @@ end (* structure Monitor_Command_Parser *)
ML\<open>
fun print_doc_classes b ctxt =
let val {docobj_tab={tab = x, ...},docclass_tab, ...} = DOF_core.get_data ctxt;
let val {docclass_tab, ...} = DOF_core.get_data ctxt;
val _ = writeln "=====================================";
fun print_attr (n, ty, NONE) = (Binding.print n)
| print_attr (n, ty, SOME t)= (Binding.print n^"("^Syntax.string_of_term ctxt t^")")
@ -2567,12 +2521,12 @@ val _ =
"print document class latex template"
(Parse.string >> (fn b => Toplevel.keep (print_docclass_template b o Toplevel.context_of)));
fun print_doc_items b ctxt =
let val {docobj_tab={tab = x, ...},...}= DOF_core.get_data ctxt;
fun print_doc_items b ctxt =
let val x = DOF_core.get_instances ctxt
val _ = writeln "=====================================";
fun dfg true = "true"
|dfg false= "false"
fun print_item (n, SOME({cid,vcid,id,pos,thy_name,inline, input_term, value})) =
fun print_item (n, DOF_core.Instance (SOME({cid,vcid,id,pos,thy_name,inline, input_term, value}))) =
(writeln ("docitem: "^n);
writeln (" type: "^cid);
case vcid of NONE => () | SOME (s) =>
@ -2584,9 +2538,9 @@ fun print_doc_items b ctxt =
else ());
writeln (" value: "^ (Syntax.string_of_term ctxt value))
)
| print_item (n, NONE) =
| print_item (n, DOF_core.Instance NONE) =
(writeln ("forward reference for docitem: "^n));
in map print_item (Symtab.dest x);
in map print_item (Name_Space.dest_table x);
writeln "=====================================\n\n\n" end;
val _ =
@ -2594,8 +2548,9 @@ val _ =
(Parse.opt_bang >> (fn b => Toplevel.keep (print_doc_items b o Toplevel.context_of)));
fun check_doc_global (strict_checking : bool) ctxt =
let val {docobj_tab={tab = x, ...}, monitor_tab, ...} = DOF_core.get_data ctxt;
val S = map_filter (fn (s,NONE) => SOME s | _ => NONE) (Symtab.dest x)
let val {monitor_tab, ...} = DOF_core.get_data ctxt;
val x = DOF_core.get_instances ctxt
val S = map_filter (fn (s, DOF_core.Instance NONE) => SOME s | _ => NONE) (Name_Space.dest_table x)
val T = map fst (Symtab.dest monitor_tab)
in if null S
then if null T then ()
@ -2621,7 +2576,7 @@ struct
fun meta_args_exec (meta_args as ((binding,cid_pos), doc_attrs) : ODL_Meta_Args_Parser.meta_args_t) thy =
thy |> (if meta_args = Value_Command.empty_meta_args
then (K thy)
then (K thy)
else Context.map_theory (Value_Command.Docitem_Parser.create_and_check_docitem
{is_monitor = false} {is_inline = false}
binding (I cid_pos) (I doc_attrs))

View File

@ -1272,8 +1272,9 @@ ML
DOF_core.is_subclass @{context} "CENELEC_50128.EC" "CENELEC_50128.test_requirement"; \<close>
ML
\<open> val {docobj_tab={maxano, tab=ref_tab},docclass_tab=class_tab,...} = DOF_core.get_data @{context};
Symtab.dest ref_tab;
\<open> val ref_tab = DOF_core.get_instances \<^context>
val {docclass_tab=class_tab,...} = DOF_core.get_data @{context};
Name_Space.dest_table ref_tab;
Symtab.dest class_tab; \<close>
ML

View File

@ -25,14 +25,15 @@ print_doc_items
(* this corresponds to low-level accesses : *)
ML\<open>
val {docobj_tab={tab = docitem_tab, ...},docclass_tab, ISA_transformer_tab, monitor_tab,...}
val docitem_tab = DOF_core.get_instances \<^context>
val {docclass_tab, ISA_transformer_tab, monitor_tab,...}
= DOF_core.get_data @{context};
Symtab.dest docitem_tab;
Name_Space.dest_table docitem_tab;
Symtab.dest docclass_tab;
\<close>
ML\<open>
val (oid, DOF_core.Instance (SOME {value, ...})) =
Name_Space.check (Context.Proof ctxt) (DOF_core.get_instances \<^context>) ("aaa", Position.none)
Name_Space.check (Context.Proof \<^context>) (DOF_core.get_instances \<^context>) ("aaa", Position.none)
\<close>
find_theorems (60) name:"Conceptual.M."

View File

@ -41,8 +41,9 @@ ODL on a paradigmatical example.
text\<open>Voila the content of the Isabelle_DOF environment so far:\<close>
ML\<open>
val {docobj_tab={tab = x, ...},docclass_tab, ISA_transformer_tab,...} = DOF_core.get_data @{context};
ML\<open>
val x = DOF_core.get_instances \<^context>
val {docclass_tab, ISA_transformer_tab,...} = DOF_core.get_data @{context};
Symtab.dest ISA_transformer_tab;
\<close>