(************************************************************************* * Copyright (C) * 2019 The University of Exeter * 2018-2019 The University of Paris-Saclay * 2018 The University of Sheffield * * License: * This program can be redistributed and/or modified under the terms * of the 2-clause BSD-style license. * * SPDX-License-Identifier: BSD-2-Clause *************************************************************************) theory Attributes imports "Isabelle_DOF_Unit_Tests_document" "Isabelle_DOF-Ontologies.Conceptual" Concept_MonitorTest1 begin ML\@{assert} (1 = 1)\ section\Elementar Creation of Doc-items and Access of their Attibutes\ text\Current status:\ print_doc_classes print_doc_items (* this corresponds to low-level accesses : *) ML\ val docitem_tab = DOF_core.get_instances \<^context> val isa_transformer_tab = DOF_core.get_isa_transformers \<^context> val docclass_tab = DOF_core.get_onto_classes @{context}; \ ML\ map fst (Name_Space.dest_table docitem_tab); Name_Space.dest_table docclass_tab; \ find_theorems (60) name:"Conceptual.M." value [simp]"M.trace(M.make undefined [] ())" value "M.ok(M.make undefined_AAA [] ())" value "M.trace(M.make undefined_AAA [] ())" value "M.tag_attribute(M.make undefined_AAA [] ())" value "M.ok(M.make 0 [] ())" (* value "ok(M.make undefined [] ())" value "ok(M.make 0 [] undefined)" *) value [simp] \ M.ok (Conceptual.M.trace_update (\x. []) (Conceptual.M.tag_attribute_update (\x. 0) (Conceptual.M.ok_update (\x. ()) (undefined::M)) ))\ value [simp] \ M.ok (Conceptual.M.trace_update (\x. []) (Conceptual.M.tag_attribute_update (\x. 0) (Conceptual.M.ok_update (\x. ()) (undefined::M)) ))\ value \ M.ok (Conceptual.M.trace_update (\x. []) (Conceptual.M.tag_attribute_update (\x. 0) (Conceptual.M.ok_update (\x. ()) (AAAA::M)) ))\ value \ M.ok (Conceptual.M.trace_update (\x. []) (Conceptual.M.tag_attribute_update (\x. 0) (Conceptual.M.ok_update (\x. ()) (M.make XX1 XX2 XX3::M)) ))\ text\A text item containing standard theorem antiquotations and complex meta-information.\ (* crashes in batch mode ... text*[dfgdfg::B, Conceptual.B.x ="''f''", y = "[''sdf'']"]\ Lorem ipsum ... @{thm refl} \ *) text*[dfgdfg::B]\ Lorem ipsum ... @{thm refl} \ text\document class declarations lead also HOL-type declarations (relevant for ontological links).\ typ "C" typ "D" text\ ... as well as HOL-constant declarations (relevant for monitor rexps and tracres.).\ term "C" text\Voila what happens on the ML level:\ ML\val Type("Conceptual.B.B_ext",[Type("Conceptual.C.C_ext",t)]) = @{typ "C"}; val \<^typ>\D\ = DOF_core.get_onto_class_cid \<^theory> "Conceptual.D" |> snd ; val \<^typ>\E\ = DOF_core.get_onto_class_cid \<^theory> "Conceptual.E" |> snd; \ text*[dfgdfg2::C, z = "None"]\ Lorem ipsum ... @{thm refl} \ text*[omega::E, x = "''def''"]\ Lorem ipsum ... @{thm refl} \ text\ As mentioned in @{docitem \dfgdfg\} \ text\Here is a simulation what happens on the level of the (HOL)-term representation:\ typ \'a A_scheme\ typ \A\ term "A.x (undefined\A.x := 3\)" term "B.x ((undefined::C)\B.y := [''sdf'']\)" term "C.z ((undefined::C)\B.y := [''sdf''], z:= Some undefined\)" ML\ val SOME {def_occurrence = "Conceptual.A", long_name = "Conceptual.A.x", typ = t, def_pos} = DOF_core.get_attribute_info "Conceptual.A" "x" @{theory}; DOF_core.get_attribute_info "Conceptual.B" "x" @{theory}; DOF_core.get_attribute_info "Conceptual.B" "y" @{theory}; DOF_core.get_attribute_info "Conceptual.C" "x" @{theory}; val SOME {def_occurrence = "Conceptual.C", long_name = "Conceptual.B.y", typ = t', def_pos} = DOF_core.get_attribute_info "Conceptual.C" "y" @{theory}; (* this is the situation where an attribute is defined in C, but due to inheritance from B, where it is firstly declared which results in a different long_name. *) DOF_core.get_attribute_info "Conceptual.C" "z" @{theory}; \ ML\ DOF_core.value_of "sdf" \<^theory>; DOF_core.value_of "sdfg" \<^theory>; DOF_core.value_of "dfgdfg" \<^theory>; DOF_core.value_of "omega" \<^theory>; \ text\A not too trivial test: default y -> []. At creation : x -> "f", y -> "sdf". The latter wins at access time. Then @{term "t"}: creation of a multi inheritance object omega, triple updates, the last one wins.\ ML\val s = map HOLogic.dest_string (HOLogic.dest_list @{docitem_attribute y::dfgdfg}); val t = HOLogic.dest_string (@{docitem_attribute x::omega}); \ section\Mutation of Attibutes in DocItems\ ML\ val Const("Groups.zero_class.zero", @{typ "int"}) = @{docitem_attribute a2::omega} \ update_instance*[omega::E, a2+="1"] ML\ val (s as Const("Groups.one_class.one", @{typ "int"}))= @{docitem_attribute a2 :: omega} \ update_instance*[omega::E, a2+="6"] ML\ @{docitem_attribute a2::omega}; val s = HOLogic.dest_number @{docitem_attribute a2::omega} \ type_synonym ALFACENTAURI = E update_instance*[omega::E, x+="''inition''"] ML\ val s = HOLogic.dest_string ( @{docitem_attribute x::omega}) \ update_instance*[omega::E, y+="[''defini'',''tion'']"] update_instance*[omega::E, y+="[''en'']"] ML\ val s = map HOLogic.dest_string (HOLogic.dest_list @{docitem_attribute y::omega}); \ subsection\ Example text antiquotation:\ text\ @{docitem_attribute y::omega} \ section\Simulation of a Monitor\ declare[[free_class_in_monitor_checking]] ML\val monitor_infos = DOF_core.get_monitor_infos \<^context>\ figure*[fig_C::figure, relative_width="90", file_src="''figures/A.png''"] \ The C train \ldots \ ML\val monitor_infos = DOF_core.get_monitor_infos \<^context>\ declare[[free_class_in_monitor_checking = false]] text\Resulting trace of figs1 as ML antiquotation: \ text\Resulting trace of figs as text antiquotation:\ section\A Complex Evaluation involving Automatas\ text\Test trace\_attribute term antiquotation:\ notation Star ("\(_)\\<^sup>*" [0]100) notation Plus (infixr "||" 55) notation Times (infixr "~~" 60) notation Atom ("\_\" 65) definition example_expression where "example_expression \ \\''Conceptual.A''\ || \''Conceptual.F''\\\<^sup>*" no_notation Star ("\(_)\\<^sup>*" [0]100) no_notation Plus (infixr "||" 55) no_notation Times (infixr "~~" 60) no_notation Atom ("\_\" 65) value* \ DA.accepts (na2da (rexp2na example_expression)) (map fst @{trace_attribute \aaa\}) \ definition word_test :: "'a list \ 'a rexp \ bool" (infix "is-in" 60) where " w is-in rexp \ DA.accepts (na2da (rexp2na rexp)) (w)" value* \ (map fst @{trace_attribute \aaa\}) is-in example_expression \ (*<*) text\Final Status:\ print_doc_items print_doc_classes end (*>*)