From a38d13198cf1ee6b943d02888fdc60b797d75eb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20M=C3=A9ric?= Date: Fri, 28 Jan 2022 17:18:09 +0100 Subject: [PATCH 01/18] Add invariants and queries draft in 2021-ITP-PMTI --- .../2021-ITP-PMTI/document/root.bib | 7 ++ .../scholarly_paper/2021-ITP-PMTI/paper.thy | 110 +++++++++++++++++- 2 files changed, 114 insertions(+), 3 deletions(-) diff --git a/examples/scholarly_paper/2021-ITP-PMTI/document/root.bib b/examples/scholarly_paper/2021-ITP-PMTI/document/root.bib index 2c2df5d..e85bf84 100644 --- a/examples/scholarly_paper/2021-ITP-PMTI/document/root.bib +++ b/examples/scholarly_paper/2021-ITP-PMTI/document/root.bib @@ -13,6 +13,13 @@ @STRING{j-tosem= "" } @STRING{pub-acm:adr= "" } +@Manual{ wenzel:isabelle-isar:2020, + title = {The Isabelle/Isar Reference Manual}, + author = {Makarius Wenzel}, + year = 2020, + note = {Part of the Isabelle distribution.} +} + @TechReport{ bsi:50128:2014, type = {Standard}, key = {BS EN 50128:2011}, diff --git a/examples/scholarly_paper/2021-ITP-PMTI/paper.thy b/examples/scholarly_paper/2021-ITP-PMTI/paper.thy index 3c15748..1b88a24 100644 --- a/examples/scholarly_paper/2021-ITP-PMTI/paper.thy +++ b/examples/scholarly_paper/2021-ITP-PMTI/paper.thy @@ -258,12 +258,119 @@ subsection\Code-Generation in Isabelle\ text\Explain eval and nbe, and refer to references.\ + + + section\Invariants in DOF\ +text\ + A novel mechanism to specify invariants is implemented + and can now be specified in common HOL syntax. +% These invariants can be checked when an instance of the class is defined. +% To enable the checking of the invariants, the \<^emph>\invariants\_checking\ +% theory attribute must be set: +% \begin{isar} +% declare[[invariants_checking = true]] +% \end{isar} + If we take back the ontology example of~@{cite "brucker.ea:isabelledof:2019"}, we can now + specify the constraints, like that any instance of a \<^emph>\result\ class finally has + a non-empty property list, if its \<^emph>\kind\ is \<^emph>\proof\, or that + the \<^emph>\establish\ relation between \<^emph>\claim\ and + \<^emph>\result\ is total, using the keyword \<^emph>\invariant\ in the class definition: + \begin{isar} +doc_class title = + short_title :: "string option" <= "None" +doc_class author = + email :: "string" <= "''''" + +datatype classification = SIL0 | SIL1 | SIL2 | SIL3 | SIL4 + +doc_class abstract = + keywordlist :: "string list" <= "[]" + safety_level :: "classification" <= "SIL3" +doc_class text_section = + authored_by :: "author set" <= "{}" + level :: "int option" <= "None" + +type_synonym notion = string + + doc_class introduction = text_section + + authored_by :: "author set" <= "UNIV" + uses :: "notion set" + invariant author_finite :: "finite (authored_by \)" +doc_class claim = introduction + + based_on :: "notion list" +doc_class technical = text_section + + formal_results :: "thm list" +doc_class "definition" = technical + + is_formal :: "bool" + property :: "term list" <= "[]" + +datatype kind = expert_opinion | argument | "proof" + + doc_class result = technical + + evidence :: kind + property :: "thm list" <= "[]" + invariant has_property :: "evidence \ = proof \ property \ \ []" + doc_class example = technical + + referring_to :: "(notion + definition) set" <= "{}" + doc_class conclusion = text_section + + establish :: "(claim \ result) set" + invariant total_rel :: "\ x. x \ Domain (establish \) + \ (\ y \ Range (establish \). (x, y) \ establish \)" +\end{isar} + + In our example, the invariant \<^emph>\author\_finite\ enforces that the user sets the + \<^emph>\authored\_by\ set. + The \<^emph>\$\sigma$\ symbol is reserved and references the future instance class. + By relying on the implementation of the Records + in Isabelle/HOL~@{cite "wenzel:isabelle-isar:2020"}, + one can reference an attribute of an instance using its selector function. + For example, \<^emph>\establish $\sigma$\ denotes the value + of the \<^emph>\establish\ attribute + of the future instance of the class \<^emph>\conclusion\. + + if we define some instances like: (ADD EXAMPLE !!!) + The value of each attribute defined for the instances is checked at run-time + against their class invariants. + SPEAK ABOUT INVARIANTS INHERITAGE ??? + As the class \<^emph>\class\_inv2\ is a subsclass + of the class \<^emph>\class\_inv1\, it inherits \<^emph>\class\_inv1\ invariants. + Hence the \<^emph>\inv1\ invariant is checked + when the instance \<^emph>\testinv2\ is defined. +\ + + section\Proving Morphisms on Ontologies\ section\Example and Queries\ +text\ +A new mechanism to make query on instances is available and uses the HOL implementation of Lists. +So complex queries can be defined using functions over the instances list. +With the class: +\begin{isar} +doc_class Z = + z::"int" +\end{isar} +and some instances: +\begin{isar} +text*[test1Z::Z, z=1]\lorem ipsum...\ +text*[test2Z::Z, z=4]\lorem ipsum...\ +text*[test3Z::Z, z=3]\lorem ipsum...\ +\end{isar} +we can get all the instances of the class Z: +\begin{isar} +value*\@{Z-instances}\ +\end{isar} +or the instances of the class Z whose attribute z > 2: +\begin{isar} +value*\filter (\\. Z.z \ > 2) @{Z-instances}\ +\end{isar} + +EXPLAIN VALUE* ??? +\ + section*[ontoexample::text_section,main_author="Some(@{docitem ''idir''}::author)"] \Applications\ subsection\Engineering Example : An Extract from PLib\ @@ -271,7 +378,6 @@ subsection\Engineering Example : An Extract from PLib\ subsection\Mathematics Example : An Extract from OntoMathPro\ - section\Conclusion\ subsection\Related Works\ subsubsection\The notion of \<^emph>\Integrated Source\\ @@ -311,8 +417,6 @@ https://doi.org/10.1145/2479787.2479830 section\ Related work \ -ML\open Goal\ - text\ \<^item> Geschwalle: Tom Gruber's "Ontology for Engineering Mathematics" \<^url>\https://tomgruber.org/writing/an-ontology-for-engineering-mathematics\ From c5cdf5f8264465a9d7a7c02e60e45c195d8a0a68 Mon Sep 17 00:00:00 2001 From: Burkhart Wolff Date: Sat, 29 Jan 2022 22:27:30 +0100 Subject: [PATCH 02/18] revised introduction --- .../2021-ITP-PMTI/document/root.bib | 27 +++++ .../scholarly_paper/2021-ITP-PMTI/paper.thy | 98 +++++++++++++++---- 2 files changed, 108 insertions(+), 17 deletions(-) diff --git a/examples/scholarly_paper/2021-ITP-PMTI/document/root.bib b/examples/scholarly_paper/2021-ITP-PMTI/document/root.bib index e85bf84..445dbed 100644 --- a/examples/scholarly_paper/2021-ITP-PMTI/document/root.bib +++ b/examples/scholarly_paper/2021-ITP-PMTI/document/root.bib @@ -11225,6 +11225,33 @@ abstract="Reasoning using process algebras often involves doing complex proofs, isbn="978-1-4471-3182-3" } +@book{books/daglib/0032976, + added-at = {2014-03-12T00:00:00.000+0100}, + author = {Euzenat, Jérôme and Shvaiko, Pavel}, + biburl = {https://www.bibsonomy.org/bibtex/28d5372a81f181d9d5a761ca12209cf39/dblp}, + interhash = {fc55a5b84d114e38db0a0303cc1bd7da}, + intrahash = {8d5372a81f181d9d5a761ca12209cf39}, + isbn = {978-3-642-38720-3}, + keywords = {dblp}, + pages = {I-XVII, 1-511}, + publisher = {Springer}, + timestamp = {2015-06-18T09:49:52.000+0200}, + title = {Ontology Matching, Second Edition.}, + year = 2013 +} + + + +@misc{AFP-ref22, + title = "{A}rchive of {F}ormal {P}roofs", + author = "{M.Eberl and G. Klein and A. Lochbihler and + T. Nipkow and L. Paulson and R. Thiemann (eds)}", + howpublished = "\url{https://afp-isa.org}", + year = 2022, + note = "Accessed: 2018-12-06" +} + + @article{HOL-CSP-AFP, author = {Safouan Taha and Lina Ye and Burkhart Wolff}, title = {{HOL-CSP Version 2.0}}, diff --git a/examples/scholarly_paper/2021-ITP-PMTI/paper.thy b/examples/scholarly_paper/2021-ITP-PMTI/paper.thy index 1b88a24..93ea350 100644 --- a/examples/scholarly_paper/2021-ITP-PMTI/paper.thy +++ b/examples/scholarly_paper/2021-ITP-PMTI/paper.thy @@ -51,37 +51,97 @@ abstract*[abs, keywordlist="[\Ontologies\,\Formal Documents\< section*[introheader::introduction,main_author="Some(@{author ''bu''})"] \ Introduction \ text*[introtext::introduction]\ -The linking of \<^emph>\formal\ and \<^emph>\informal\ information is perhaps the -most pervasive challenge in the digitization of knowledge and its -propagation. This challenge incites numerous research efforts -summarized under the labels ``semantic web'', ``integrated document management'', or any -form of advanced ``semantic'' text processing. Turning informal into -(more) formal content is the key for advanced techniques of research, -combination, and the maintenance of consistency in evolving data. +The linking of \<^emph>\formal\ and \<^emph>\informal\ information is perhaps the most pervasive challenge +in the digitization of knowledge and its propagation. Unsurprisingly, this problem reappears +in the libraries with formalized mathematics and engineering such as the Isabelle Archive of +Formal Proofs @{cite "AFP-ref22"}, which passed the impressive numbers of 650 articles, +written by 420 authors at the beginning of 2022. Still, while the problem of logical consistency +even under system-changes and pervasive theory evolution is technically solved via continuous +proof-checking, the problem of knowledge retrieval and of linking semi-formal explanations to +definitions and proofs remains largely unresolved. + +The \<^emph>\knowledge\ problem of the increasingly massive \<^emph>\digital information\ available +incites numerous research efforts summarized under the labels ``semantic web'', +``integrated document management'', or any form of advanced ``semantic'' text processing. +The central role in these technologies, that are increasingly important in jurisprudence, +medical research and life-sciences in order to tame their respective publication tsunamies, +is played by \<^emph>\document ontologies\, \<^ie>, a machine-readable form of meta-data attached to +document-elements as well as their document discourse. In order to make these techniques +applicable to the area of \<^emph>\formal theory development\, +the following is needed: +\<^item> a general mechanism to define and develop \<^emph>\domain-specific\ ontologies, +\<^item> this mechanism should be adapted to entities occurring in formal theories, + \<^ie>, provide built-in support for types, terms, theorems, proofs, etc., +\<^item> ways to annotate meta-data generated by ontologies to the document elements, + as ``deep'' as possible, together with strong validation checks, +\<^item> a smooth integration into the theory document development process, and +\<^item> ways to relate ontologies and ontology-conform documents along different + ontologies by \<^emph>\ontological mappings\ and \<^emph>\data translations\ + @{footnote \We follow throughout this text the terminology established in + @{cite "books/daglib/0032976"}, pp. 39 ff.\}. +\ + +text\Recently, \<^dof> @{cite "brucker.ea:isabelledof:2019" and "brucker.ea:isabelle-ontologies:2018"} +\<^footnote>\The official releases are available on \<^url>\https://zenodo.org/record/3370483#.YfWg6S-B1qt\, the + developer version on \<^url>\https://github.com/logicalhacking/Isabelle_DOF\\ +has been designed as an Isabelle component that attempts to answer these needs. + \<^dof> generates from ontology definitions directly integrated into Isabelle theories +typed meta-data, that may be annotated to a number of document elements and that were +validated ``on-the-fly'' during the general continuous type and proof-checking process +in the Prover IDE (Isabelle/PIDE). Thus, \<^dof> profits and extends Isabelle's +document-centric view on code, definitions, proofs, text-elements and other modeling +elements. + +In more detail, the schema of \<^dof> text elements --- whose syntax follows closely +the corresponding Isabelle standard elements, except that these do not +posses the brackets with the meta-data --- looks as follows: +@{theory_text [display,indent=10, margin=70] +\ + text*[label::classid, attr\<^sub>1=E\<^sub>1, ... attr\<^sub>n=E\<^sub>n]\ some formal text \ + +\} +while code-elements have the form: +@{theory_text [display,indent=10, margin=70] +\ + ML*[label::classid, attr\<^sub>1=E\<^sub>1, ... attr\<^sub>n=E\<^sub>n]\ some SML code \ +\} +which means for each element that a meta-data object is created and associated to it. +This meta-data can be referenced via its label and used in further computations in text - +or code elements. +%; the details will be explained in the subsequent section. Admittedly, Isabelle is not the first system that comes into one's mind when -writing a document, be it a scientific paper, a book, or a larger technical -documentation. However, it has a typesetting system inside which is in the +writing a scientific paper, a book, or a larger technical documentation. +However, it has a typesetting system inside which is in the tradition of document generation systems such as mkd, Document! X, Doxygen, -Javadoc, etc., and which embed elements of formal content such as formula pretty-prints -into informal text. In Isabelle, these "links" or embedded meta-text elements -are a form of machine-checked macro called \<^emph>\antiquotations\. +Javadoc, etc., and which embed formal content elements such as formula pretty-prints +into formal text. In Isabelle, these embedded meta-text elements using references +to the context represent a machine-checked macro called \<^emph>\antiquotation\. -For example, the text element as appearing in the Isabelle frontend: +With standard Isabelle antiquotations, for example, the following text element +inside the integrated source will appear in Isabelle/PIDE as follows: @{theory_text [display,indent=10, margin=70] \ text\ According to the reflexivity axiom @{thm refl}, we obtain in \ for @{term "fac 5"} the result @{value "fac 5"}.\ \} -is represented in the generated \<^LaTeX> or HTML output by: +In the generated document represented in the generated \<^LaTeX> or HTML output, it is shown as: @{theory_text [display,indent=10, margin=70] \According to the reflexivity axiom \x = x\, we obtain in \ for \fac 5\ the result \120\.\ } -where the meta-texts \@{thm refl}\ ("give the presentation of theorem 'refl'), -\@{term "fac 5"}\ ("parse and type-check 'fac 5' in the previous logical context) +where the meta-texts \@{thm refl}\ ("give the presentation of theorem 'refl'"), +\@{term "fac 5"}\ ("parse and type-check 'fac 5' in the previous logical context") and \@{value "fac 5"}\ ("compile and execute 'fac 5' according to its -definitions") are built-in antiquotations in \<^hol>. +definitions") are built-in antiquotations in \<^hol>. + +One distinguishing feature of \<^dof> is that specific antiquotations were generated from +an ontology rather than being hard-coded into the Isabelle system infrastructure. +\ + +(* +text +\ %too long ! This leads to an evolution strategy we call "integrate the document, strengthen the @@ -104,6 +164,10 @@ has been designed as an Isabelle component that \<^emph>\generates\ from a more abstract description, namely an \<^emph>\ontology\ that provides typed meta-data and typed reference mechanisms inside text- and ML-contexts. +*) + +text\ + In this paper, we extend prior versions of \<^dof> by \<^enum> a new form of contexts, namely \<^emph>\term contexts\. Thus, annotations generated from \<^dof> may also occur in \\\-terms used to denote meta-data, and From b35c774d274b506100b1406d07eb069bf37e6ab3 Mon Sep 17 00:00:00 2001 From: Burkhart Wolff Date: Sun, 30 Jan 2022 13:47:18 +0100 Subject: [PATCH 03/18] polished intro --- .../scholarly_paper/2021-ITP-PMTI/paper.thy | 120 +++++++++--------- 1 file changed, 63 insertions(+), 57 deletions(-) diff --git a/examples/scholarly_paper/2021-ITP-PMTI/paper.thy b/examples/scholarly_paper/2021-ITP-PMTI/paper.thy index 93ea350..6e8a8fe 100644 --- a/examples/scholarly_paper/2021-ITP-PMTI/paper.thy +++ b/examples/scholarly_paper/2021-ITP-PMTI/paper.thy @@ -36,14 +36,18 @@ abstract*[abs, keywordlist="[\Ontologies\,\Formal Documents\< Thus, \<^dof> is designed to annotate and interact with typed meta-data within formal developments in Isabelle. - While prior versions of \<^dof> provided already a mechanism to check ontological \<^emph>\rules\ - (in OWL terminology) or \<^emph>\class invariants\ (in UML/OCL terminology) via hand-written SML test-code, - we provide in this paper a novel mechanism to specify \<^emph>\invariants\ in \<^hol> via a reflection - mechanism. This allows for both efficient run-time checking of abstract properties of formal +% While prior versions of \<^dof> provided already a mechanism to check ontological \<^emph>\rules\ +% (in OWL terminology) or \<^emph>\class invariants\ (in UML/OCL terminology) via hand-written SML test-code, +% we provide in this paper a novel mechanism to specify \<^emph>\invariants\ in \<^hol> via a reflection +% mechanism. + In this paper we extend \<^dof> with \<^emph>\invariants\ via a reflection mechanism, + which serve as equivalent to the concept of ontological \<^emph>\rules\ (in OWL terminology) or + \<^emph>\class invariants\ (in UML/OCL terminology). + This allows for both efficient run-time checking of abstract properties of formal content \<^bold>\as well as\ formal proofs that establish mappings between different ontologies in general and specific ontology instances in concrete cases. With this feature widely called \<^emph>\ontology mapping\ in the literature, our framework paves the - way for a deeper integration of ontological information in + way for a deeper integration of ontological information in, for example, the articles of the Archive of Formal Proofs. \ @@ -58,19 +62,20 @@ Formal Proofs @{cite "AFP-ref22"}, which passed the impressive numbers of 650 ar written by 420 authors at the beginning of 2022. Still, while the problem of logical consistency even under system-changes and pervasive theory evolution is technically solved via continuous proof-checking, the problem of knowledge retrieval and of linking semi-formal explanations to -definitions and proofs remains largely unresolved. +definitions and proofs remains largely open. The \<^emph>\knowledge\ problem of the increasingly massive \<^emph>\digital information\ available incites numerous research efforts summarized under the labels ``semantic web'', ``integrated document management'', or any form of advanced ``semantic'' text processing. -The central role in these technologies, that are increasingly important in jurisprudence, -medical research and life-sciences in order to tame their respective publication tsunamies, -is played by \<^emph>\document ontologies\, \<^ie>, a machine-readable form of meta-data attached to -document-elements as well as their document discourse. In order to make these techniques -applicable to the area of \<^emph>\formal theory development\, -the following is needed: +These technologies are increasingly important in jurisprudence, medical research and +life-sciences in order to tame their respective publication tsunamies. The central role +in these technologies is played by \<^emph>\document ontologies\, \<^ie>, a machine-readable form +of meta-data attached to document-elements as well as their document discourse. In order +to make these techniques applicable to the area of \<^emph>\formal theory development\, +the following is needed: \<^vs>\0.2cm\ + \<^item> a general mechanism to define and develop \<^emph>\domain-specific\ ontologies, -\<^item> this mechanism should be adapted to entities occurring in formal theories, +\<^item> ... that should be adapted to entities occurring in formal theories, \<^ie>, provide built-in support for types, terms, theorems, proofs, etc., \<^item> ways to annotate meta-data generated by ontologies to the document elements, as ``deep'' as possible, together with strong validation checks, @@ -81,62 +86,56 @@ the following is needed: @{cite "books/daglib/0032976"}, pp. 39 ff.\}. \ -text\Recently, \<^dof> @{cite "brucker.ea:isabelledof:2019" and "brucker.ea:isabelle-ontologies:2018"} -\<^footnote>\The official releases are available on \<^url>\https://zenodo.org/record/3370483#.YfWg6S-B1qt\, the - developer version on \<^url>\https://github.com/logicalhacking/Isabelle_DOF\\ +text\ \<^vs>\-0.2cm\ +Recently, \<^dof> @{cite "brucker.ea:isabelledof:2019" and "brucker.ea:isabelle-ontologies:2018"} +\<^footnote>\The official releases are available at \<^url>\https://zenodo.org/record/3370483#.YfWg6S-B1qt\, the + developer version at \<^url>\https://github.com/logicalhacking/Isabelle_DOF\.\ has been designed as an Isabelle component that attempts to answer these needs. \<^dof> generates from ontology definitions directly integrated into Isabelle theories typed meta-data, that may be annotated to a number of document elements and that were validated ``on-the-fly'' during the general continuous type and proof-checking process -in the Prover IDE (Isabelle/PIDE). Thus, \<^dof> profits and extends Isabelle's -document-centric view on code, definitions, proofs, text-elements and other modeling -elements. +in an IDE (Isabelle/PIDE). Thus, we extend the document-centric view on code, definitions, +proofs, text-elements, etc., prevailing in the Isabelle system framework. -In more detail, the schema of \<^dof> text elements --- whose syntax follows closely -the corresponding Isabelle standard elements, except that these do not -posses the brackets with the meta-data --- looks as follows: -@{theory_text [display,indent=10, margin=70] -\ - text*[label::classid, attr\<^sub>1=E\<^sub>1, ... attr\<^sub>n=E\<^sub>n]\ some formal text \ - -\} -while code-elements have the form: +In more detail, \<^dof> introduces a number of ``ontology aware'' text-elements with analogous +syntax to standard ones. The difference is a bracket with meta-data of the form: \<^vs>\-0.3cm\ @{theory_text [display,indent=10, margin=70] \ + text*[label::classid, attr\<^sub>1=E\<^sub>1, ... attr\<^sub>n=E\<^sub>n]\ some semi-formal text \ ML*[label::classid, attr\<^sub>1=E\<^sub>1, ... attr\<^sub>n=E\<^sub>n]\ some SML code \ + ... \} -which means for each element that a meta-data object is created and associated to it. -This meta-data can be referenced via its label and used in further computations in text - -or code elements. +\<^vs>\-0.3cm\ In these \<^dof> elements, a meta-data object is created and associated to it. This +meta-data can be referenced via its label and used in further computations in text or code. %; the details will be explained in the subsequent section. -Admittedly, Isabelle is not the first system that comes into one's mind when -writing a scientific paper, a book, or a larger technical documentation. -However, it has a typesetting system inside which is in the -tradition of document generation systems such as mkd, Document! X, Doxygen, -Javadoc, etc., and which embed formal content elements such as formula pretty-prints -into formal text. In Isabelle, these embedded meta-text elements using references -to the context represent a machine-checked macro called \<^emph>\antiquotation\. +Admittedly, Isabelle is not the first system that comes into one's mind when writing a scientific +paper, a book, or a larger technical documentation. However, it has a typesetting system inside +which is in the tradition of document generation systems such as mkd, Document! X, Doxygen, +Javadoc, etc., and which embed formal content such as formula pretty-prints into semi-formal text +or code. The analogous mechanism the Isabelle system provides is a machine-checked macro +called \<^emph>\antiquotation\ that depends on the logical context of the document element. With standard Isabelle antiquotations, for example, the following text element -inside the integrated source will appear in Isabelle/PIDE as follows: +of the integrated source will appear in Isabelle/PIDE as follows: \<^vs>\-0.3cm\ @{theory_text [display,indent=10, margin=70] \ text\ According to the reflexivity axiom @{thm refl}, we obtain in \ for @{term "fac 5"} the result @{value "fac 5"}.\ \} -In the generated document represented in the generated \<^LaTeX> or HTML output, it is shown as: +\<^vs>\-0.5cm\ In the corresponding generated \<^LaTeX> or HTML output, this looks like this: +\<^vs>\-0.1cm\ @{theory_text [display,indent=10, margin=70] \According to the reflexivity axiom \x = x\, we obtain in \ for \fac 5\ the result \120\.\ } -where the meta-texts \@{thm refl}\ ("give the presentation of theorem 'refl'"), +\<^vs>\-0.1cm\where the meta-texts \@{thm refl}\ ("give the presentation of theorem 'refl'"), \@{term "fac 5"}\ ("parse and type-check 'fac 5' in the previous logical context") and \@{value "fac 5"}\ ("compile and execute 'fac 5' according to its definitions") are built-in antiquotations in \<^hol>. -One distinguishing feature of \<^dof> is that specific antiquotations were generated from -an ontology rather than being hard-coded into the Isabelle system infrastructure. +One distinguishing feature of \<^dof> is that specific antiquotations \<^emph>\were generated from +an ontology\ rather than being hard-coded into the Isabelle system infrastructure. \ (* @@ -166,24 +165,31 @@ and typed reference mechanisms inside text- and ML-contexts. *) -text\ - -In this paper, we extend prior versions of \<^dof> by -\<^enum> a new form of contexts, namely \<^emph>\term contexts\. Thus, annotations generated - from \<^dof> may also occur in \\\-terms used to denote meta-data, and +text\In this paper, we extend prior versions of \<^dof> by +\<^enum> support of antiquotions in a new class of contexts, namely \<^emph>\term contexts\ + (rather than SML code or semi-formal text). Thus, annotations generated + from \<^dof> may also occur in \\\-terms used to denote meta-data. \<^enum> formal, machine-checked invariants on meta-data, which correspond to the concept of - "rules" in ontology languages such as OWL, and which can be specified in + "rules" in OWL or "constraints" in UML, and which can be specified in common HOL \\\-term syntax. \ -text\ -Beyond the gain of expressivity in \<^dof> ontologies, these features pave the way -for advanced queries of elements inside an integrated document, and for formal proofs -over the relations/translations of ontologies and ontology-instances --- The latter -question raised scientific interest under the label "ontology alignment" for which -we therefore present a (partial) solution. To sum up, we completed \<^dof> to a +text\ For example, the \<^dof> evaluation command taking a HOL-expression: +@{theory_text [display,indent=10, margin=70] +\ value*[ass::Assertion, relev=2::int] \mapfilter (\ \. relev \ > 2) @{instance_of \Assertion\}\\ +} +where \<^dof> command \value*\ type-checks, expands in an own validation phase +the \instance_of\-term antiquotation, and evaluates the resulting HOL expression +above. Assuming an ontology providing the class \Assertion\ having at least the +integer attribute \relev\, the command finally creates an instance of \Assertion\ and +binds this to the label \ass\ for further use. + +Beyond the gain of expressivity in \<^dof> ontologies, term-antiquotations pave the way +for advanced queries of elements inside an integrated source, and invariants +allow for formal proofs over the relations/translations of ontologies and ontology-instances. +The latter question raised scientific interest under the label "ontology alignment" for +which we therefore present a formal solution. To sum up, we completed \<^dof> to a a fairly rich, ITP-oriented ontology language, which is a concrete proposal for the -Isabelle community for a deeper structuring of the Archive of Formal Proofs (AFP; -\<^url>\https://www.isa-afp.org\). +ITP community allowing a deeper structuring of mathematical libraries such as the AFP. \ From eaef236dccb35574315008308a34986003add7c9 Mon Sep 17 00:00:00 2001 From: Burkhart Wolff Date: Sun, 30 Jan 2022 14:48:54 +0100 Subject: [PATCH 04/18] added category 'background' into scholarly paper --- src/ontologies/scholarly_paper/scholarly_paper.thy | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/ontologies/scholarly_paper/scholarly_paper.thy b/src/ontologies/scholarly_paper/scholarly_paper.thy index de669b4..b542d79 100755 --- a/src/ontologies/scholarly_paper/scholarly_paper.thy +++ b/src/ontologies/scholarly_paper/scholarly_paper.thy @@ -122,6 +122,11 @@ As Security of the system we define etc... A formal statement can, but must not have a reference to true formal Isabelle/Isar definition. \ +doc_class background = text_section + + comment :: string + claims :: "thm list" + + subsection\Technical Content and its Formats\ datatype status = formal | semiformal | description @@ -466,6 +471,7 @@ doc_class article = \author\\<^sup>+ ~~ abstract ~~ \introduction\\<^sup>+ ~~ + \background\\<^sup>* ~~ \technical || example \\<^sup>+ ~~ \conclusion\\<^sup>+ ~~ bibliography ~~ From 3e06e659b68144e06a18b3b5949ba6291ada7728 Mon Sep 17 00:00:00 2001 From: Burkhart Wolff Date: Sun, 30 Jan 2022 14:50:22 +0100 Subject: [PATCH 05/18] global restructuring --- .../scholarly_paper/2021-ITP-PMTI/paper.thy | 110 +++++++++--------- 1 file changed, 54 insertions(+), 56 deletions(-) diff --git a/examples/scholarly_paper/2021-ITP-PMTI/paper.thy b/examples/scholarly_paper/2021-ITP-PMTI/paper.thy index 6e8a8fe..3507e66 100644 --- a/examples/scholarly_paper/2021-ITP-PMTI/paper.thy +++ b/examples/scholarly_paper/2021-ITP-PMTI/paper.thy @@ -197,7 +197,8 @@ ITP community allowing a deeper structuring of mathematical libraries such as th declare_reference*[casestudy::text_section] (*>*) -section*[bgrnd::text_section,main_author="Some(@{docitem ''adb''}::author)"] \ Background\ +section*[bgrnd::background,main_author="Some(@{docitem ''bu''}::author)"] \ Background\ +(* subsection\Isabelle/DOF Design and Implementation\ text\ In this section, we provide a guided tour through the underlying technologies of this paper: @@ -215,32 +216,25 @@ text\ The plugin Isabelle/HOL offers a modeling language similar to functional programming languages extended by a logic and automated proof and animation techniques. \ - -subsection*[bgrnd_isadof::text_section]\The \<^dof> Framework\ +*) +subsection*[bgrnd_isadof::background]\The \<^dof> Framework\ text\ \<^dof> ~@{cite "brucker.ea:isabelle-ontologies:2018" and "brucker.ea:isabelledof:2019"} - is a document ontology framework that extends Isabelle/HOL. We understand - by a \<^emph>\document ontology\ structured meta-data attached to an integrated document allowing - classifying text-elements, connect them to typed meta-data, and establishing typed links between text- - and formal elements (such as definitions, proofs, code, test-results, etc). - + is a document ontology framework that extends Isabelle/HOL. \<^dof> offers basically two things: a language called ODL to \<^emph>\specify\ a formal ontology, and ways to \<^emph>\annotate\ an integrated document written in Isabelle/HOL with the specified - meta-data. Additionally, \<^dof> generates from an ontology a family of semantic macros---called - \<^emph>\antiquotations\ that may appear in text or code---allowing establishing - machine-checked links between classified entities. Not unlike the UML/OCL meta-model, ODL offers class - invariants as well as means to express - structural constraints in documents. - Unlike UML, however, \<^dof> allows for integrated documents with informal and formal elements - including the necessary management of logical contexts. + meta-data. Additionally, \<^dof> generates from an ontology a family of + \<^emph>\antiquotations\ allowing to establish machine-checked links between classified entities. +% Unlike UML, however, \<^dof> allows for integrated documents with informal and formal elements +% including the necessary management of logical contexts. The perhaps most attractive aspect of \<^dof> is its deep integration into the IDE of Isabelle - (PIDE), which allows hypertext-like navigation as well as fast user-feedback - during development and evolution of the integrated document. This includes rich editing support, + (PIDE), which allows a hypertext-like navigation as well as fast user-feedback + during development and evolution of the integrated source. This includes rich editing support, including on-the-fly semantics checks, hinting, or auto-completion. \<^dof> supports \<^LaTeX> - based document generation as well as ontology-aware ``views'' on - the integrated document, \ie, specific versions of generated PDF addressing, + the integrated document, \<^ie>, specific versions of generated PDF addressing, for example, different stake-holders. \ @@ -248,7 +242,7 @@ text\ figure*[isadof_screenshot::figure, relative_width="100", src="''figures/cicm2018-combined''"]\ The \<^dof> IDE (left) and the corresponding PDF(right). \ -text*[description_scrrenshot::text_section]\ +text*[description_scrrenshot::background]\ @{docitem \isadof_screenshot\} shows \<^dof> in action: the left-hand side shows the IDE of \<^dof> in the context of a user session maintaining our case study (see @{docitem (unchecked) "casestudy"}) @@ -257,7 +251,7 @@ text*[description_scrrenshot::text_section]\ \ (*>*) -subsection*[bgrnd_ODL::text_section]\A Guided Tour through ODL\ +subsection*[bgrnd_ODL::background]\A Guided Tour through ODL\ text\ \<^dof> provides a strongly typed Ontology Definition Language (ODL) that provides the usual concepts of ontologies such as @@ -300,6 +294,8 @@ text\\autoref{text-elements} shows an ontological annotation of a requirem it suffices to click on its keyword: the IDE will display the class-definition and its surrounding documentation in the ontology.\ +(* + text\\<^dof>'s generated antiquotations are part of a general mechanism of Isabelle's standard antiquotations heavily used in various papers and technical reports. For example, in the following informal text, the antiquotation \<^verbatim>\thm refl\ refers @@ -323,15 +319,18 @@ text\\<^dof>'s generated antiquotations are part of a general mechanism of generated glossaries or lists of concepts. \ +*) + +subsection\Meta-Objects as Extensible Records\ + +text\Explain record notation.\ subsection\Code-Generation in Isabelle\ text\Explain eval and nbe, and refer to references.\ - - - -section\Invariants in DOF\ +section*[invariants::technical,main_author="Some(@{docitem ''nic''}::author)"] +\Term-Context support and Invariants in DOF\ text\ A novel mechanism to specify invariants is implemented @@ -410,10 +409,9 @@ datatype kind = expert_opinion | argument | "proof" when the instance \<^emph>\testinv2\ is defined. \ +subsection\Example and Queries\ -section\Proving Morphisms on Ontologies\ - -section\Example and Queries\ +section*["morphisms"::technical,main_author="Some(@{docitem ''idir''}::author)"] \Proving Morphisms on Ontologies\ text\ A new mechanism to make query on instances is available and uses the HOL implementation of Lists. @@ -448,8 +446,34 @@ subsection\Engineering Example : An Extract from PLib\ subsection\Mathematics Example : An Extract from OntoMathPro\ -section\Conclusion\ -subsection\Related Works\ +section*[concl::conclusion]\Conclusion\ +subsection*[rw::related_work]\Related Works\ + +text\ +\<^item> Geschwalle: Tom Gruber's "Ontology for Engineering Mathematics" + \<^url>\https://tomgruber.org/writing/an-ontology-for-engineering-mathematics\ +\<^item> OntoMathPro contains indeed something like a "taxonomy of the fields of mathematics" pp 110 + \<^url>\https://kpfu.ru/staff_files/F_438204284/OntoMathPro_ontology_KESW2014.pdf\ + According to In total, OntoMathPRO contains 3,449 classes ... + +\<^item> Translated from the Russian Federal Standard for Higher Education on mathematics + for master students, Section 5.2: + \<^url>\http://www.edu.ru/db-mon/mo/Data/d_10/prm40-1.pdf\ +\<^item> Elements of OntoMathPro : + (* figures/OntoMathPro-Taxonomy.png + figures/OntoMathPro-Taxonomy-2.png *) +\<^item> Other Onto: DBpedia @{cite "10.1007/978-3-540-76298-0_52"} + SPARQL endpoint: \<^url>\http://dbpedia.org/sparql\ +\<^item> Other Onto: ScienceWISE + \<^url>\http://data.sciencewise.info/openrdf-sesame/repositories/SW\ + \<^url>\https://github.com/CLLKazan/OntoMathPro\ + +\<^item> Search Engines: Wikipedia Formula Search, \<^url>\http://shinh.org/wfs\ + +\<^item> And then: The stuff from Univ Erlangen (Kohlhase et al). + +\ + subsubsection\The notion of \<^emph>\Integrated Source\\ text\Links to the term: Integrated Document \<^item> \<^url>\https://www.openkm.com/blog/integrated-document-management.html\ @@ -485,34 +509,8 @@ https://doi.org/10.1145/2479787.2479830 *) -section\ Related work \ - -text\ -\<^item> Geschwalle: Tom Gruber's "Ontology for Engineering Mathematics" - \<^url>\https://tomgruber.org/writing/an-ontology-for-engineering-mathematics\ -\<^item> OntoMathPro contains indeed something like a "taxonomy of the fields of mathematics" pp 110 - \<^url>\https://kpfu.ru/staff_files/F_438204284/OntoMathPro_ontology_KESW2014.pdf\ - According to In total, OntoMathPRO contains 3,449 classes ... - -\<^item> Translated from the Russian Federal Standard for Higher Education on mathematics - for master students, Section 5.2: - \<^url>\http://www.edu.ru/db-mon/mo/Data/d_10/prm40-1.pdf\ -\<^item> Elements of OntoMathPro : - (* figures/OntoMathPro-Taxonomy.png - figures/OntoMathPro-Taxonomy-2.png *) -\<^item> Other Onto: DBpedia @{cite "10.1007/978-3-540-76298-0_52"} - SPARQL endpoint: \<^url>\http://dbpedia.org/sparql\ -\<^item> Other Onto: ScienceWISE - \<^url>\http://data.sciencewise.info/openrdf-sesame/repositories/SW\ - \<^url>\https://github.com/CLLKazan/OntoMathPro\ - -\<^item> Search Engines: Wikipedia Formula Search, \<^url>\http://shinh.org/wfs\ - -\<^item> And then: The stuff from Univ Erlangen (Kohlhase et al). - -\ - +text\\pagebreak\ section\Annex\ subsection\Remotely relevant stuff\ From cc151291f64874f319a8dce30af412b8cd1d419e Mon Sep 17 00:00:00 2001 From: Burkhart Wolff Date: Sun, 30 Jan 2022 14:55:19 +0100 Subject: [PATCH 06/18] some figures on MathTaxonomies --- .../figures/OntoMathPro-Taxonomy-1.png | Bin 0 -> 103523 bytes .../figures/OntoMathPro-Taxonomy-2.png | Bin 0 -> 87086 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 examples/scholarly_paper/2021-ITP-PMTI/document/figures/OntoMathPro-Taxonomy-1.png create mode 100644 examples/scholarly_paper/2021-ITP-PMTI/document/figures/OntoMathPro-Taxonomy-2.png diff --git a/examples/scholarly_paper/2021-ITP-PMTI/document/figures/OntoMathPro-Taxonomy-1.png b/examples/scholarly_paper/2021-ITP-PMTI/document/figures/OntoMathPro-Taxonomy-1.png new file mode 100644 index 0000000000000000000000000000000000000000..cee5a129d44bb5a1177418f2494af8b9b54154a5 GIT binary patch literal 103523 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 UwO_DvJp&MUy85}Sb4q9e0G@L}ng9R* literal 0 HcmV?d00001 diff --git a/examples/scholarly_paper/2021-ITP-PMTI/document/figures/OntoMathPro-Taxonomy-2.png b/examples/scholarly_paper/2021-ITP-PMTI/document/figures/OntoMathPro-Taxonomy-2.png new file mode 100644 index 0000000000000000000000000000000000000000..02d0f6d23b82c47a9182f5a59b9adebc731f5aa9 GIT binary patch literal 87086 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

0vs^^o%~$>My*$1Sj|;TF_kHSA7P`sO0px)I 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 literal 0 HcmV?d00001 From 05b896291bb00e24ab9b72973b8f527b3f4c2294 Mon Sep 17 00:00:00 2001 From: Burkhart Wolff Date: Sun, 30 Jan 2022 14:56:22 +0100 Subject: [PATCH 07/18] ... --- .../scholarly_paper/2022-RAS-SI/paper.thy | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/examples/scholarly_paper/2022-RAS-SI/paper.thy b/examples/scholarly_paper/2022-RAS-SI/paper.thy index 288df21..ad10f83 100644 --- a/examples/scholarly_paper/2022-RAS-SI/paper.thy +++ b/examples/scholarly_paper/2022-RAS-SI/paper.thy @@ -175,8 +175,8 @@ text\At a glance, the overall concepts and notions we are using here are l \<^item> Recursion: \ \X. P X
 \ \<^item> Generalised Operators (“Architectural Operators”): 
 \ \ x\A \ P x, \ x\A \ P x, \ x\B. P x, \ x\B. P x\ - \ \S\x\B. P x
, |||x\B. P x, ||x\B. P x, SEQ x\B. P x\ - (for infinite index sets A, finite sets B) + \ \S\x\B. P x
, |||x\B. P x, ||x\B. P x, SEQ x\L. P x\ + (for infinite index sets A, finite sets B, and lists \L\) \<^item> A typed view on processes with Hindley-Milner Polymorphism; (operators and are typed over \'\ process\; process-schemata are just higher-order functions over processes.) @@ -245,15 +245,28 @@ Two Cars, “current” set of 
assumptions Safety Property: \<^item> speeds for “rear” and “front” cars: \v\<^sub>r\,\v\<^sub>f\ \ - -figure*[AcVecSpaceVsSpeedVs::figure,relative_width="100",src="''figures/AcVecSpaceVsSpeedVs.png''"] - \Acceleration Vector Space vs. Speed Vectors \ -figure*[MaxwellVsCutIn::figure,relative_width="100",src="''figures/MaxwellVsCutIn.png''"] - \Maxwell's Daemon vs. Cut-In Scenarios\ figure*[RSS_Safe_Longitudinal_Distance::figure,relative_width="100",src="''figures/RSS_Safe_Longitudinal_Distance.png''"] \Safe Longitudinal Distance in RSS\ figure*[RSS_formula::figure,relative_width="100",src="''figures/RSS_formula.png''"] \The Formula of RSS\ + +section*[intro_fwk::technical]\The Autonomous Car Framework in HOL-CSP\ + +subsection*[intro_fwk_concepts::technical]\Basics Concepts\ +text\The basis of this work is inspired by ontologies for +Autonomous Car Scenarios given, for example, in MOSAR (\<^url>\https://www.mosar.io\) that +describes a collection of \<^emph>\actors\ (\<^eg> cars, trucks, bicycles), \<^emph>\equipments\ +(\<^eg> signals, vehicle lights, etc.), \<^emph>\infrastructures\ (\<^eg> expressways, +intersections, etc.) and their dynamic interactions throughout driving scenarios. + +Actors have a physical state (position, speed, mass, extension, ...) which can have the form of +a vector. Moreover, they can have \<^emph>\capabilities\ such as a set of acceleration-vectors expressing +their ability to move forwards, sidewards, etc. as well as their capability to brake. +\ +figure*[AcVecSpaceVsSpeedVs::figure,relative_width="100",src="''figures/AcVecSpaceVsSpeedVs.png''"] + \Acceleration Vector Space vs. Speed Vectors \ +figure*[MaxwellVsCutIn::figure,relative_width="100",src="''figures/MaxwellVsCutIn.png''"] + \Maxwell's Daemon vs. Cut-In Scenarios\ figure*[Samplings::figure,relative_width="100",src="''figures/Samplings.png''"] \Samplings of Continuous Observables\ figure*[actor_def::figure,relative_width="100",src="''figures/actor_def.png''"] From b243f302526a22e8b4b8f2c497e7ffa9f3912e1b Mon Sep 17 00:00:00 2001 From: Burkhart Wolff Date: Sun, 30 Jan 2022 20:57:59 +0100 Subject: [PATCH 08/18] changed 'L' - operator to 'Lang' in order to avoid name conflicts in papers. --- src/DOF/RegExpInterface.thy | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/DOF/RegExpInterface.thy b/src/DOF/RegExpInterface.thy index 1bbdfe7..81c81f7 100755 --- a/src/DOF/RegExpInterface.thy +++ b/src/DOF/RegExpInterface.thy @@ -68,13 +68,13 @@ This universe of denotations is in our concrete case:\ text\Now the denotational semantics for regular expression can be defined on a post-card:\ -fun L :: "'a rexp => 'a lang" - where L_Emp : "L Zero = {}" - |L_One: "L One = {[]}" - |L_Atom: "L (\a\) = {[a]}" - |L_Un: "L (el || er) = (L el) \ (L er)" - |L_Conc: "L (el ~~ er) = {xs@ys | xs ys. xs \ L el \ ys \ L er}" - |L_Star: "L (Star e) = Regular_Set.star(L e)" +fun Lang :: "'a rexp => 'a lang" + where L_Emp : "Lang Zero = {}" + |L_One: "Lang One = {[]}" + |L_Atom: "Lang (\a\) = {[a]}" + |L_Un: "Lang (el || er) = (Lang el) \ (Lang er)" + |L_Conc: "Lang (el ~~ er) = {xs@ys | xs ys. xs \ Lang el \ ys \ Lang er}" + |L_Star: "Lang (Star e) = Regular_Set.star(Lang e)" text\A more useful definition is the sub-language - definition\ From 9d9fd03b7259d03e739d28f32dd508d249291fc1 Mon Sep 17 00:00:00 2001 From: Burkhart Wolff Date: Sun, 30 Jan 2022 20:59:21 +0100 Subject: [PATCH 09/18] minor stuff --- examples/scholarly_paper/2021-ITP-PMTI/paper.thy | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/scholarly_paper/2021-ITP-PMTI/paper.thy b/examples/scholarly_paper/2021-ITP-PMTI/paper.thy index 3507e66..3766b96 100644 --- a/examples/scholarly_paper/2021-ITP-PMTI/paper.thy +++ b/examples/scholarly_paper/2021-ITP-PMTI/paper.thy @@ -165,7 +165,7 @@ and typed reference mechanisms inside text- and ML-contexts. *) -text\In this paper, we extend prior versions of \<^dof> by +text\As novel contribution, this work extends prior versions of \<^dof> by \<^enum> support of antiquotions in a new class of contexts, namely \<^emph>\term contexts\ (rather than SML code or semi-formal text). Thus, annotations generated from \<^dof> may also occur in \\\-terms used to denote meta-data. @@ -174,13 +174,13 @@ text\In this paper, we extend prior versions of \<^dof> by common HOL \\\-term syntax. \ text\ For example, the \<^dof> evaluation command taking a HOL-expression: -@{theory_text [display,indent=10, margin=70] -\ value*[ass::Assertion, relev=2::int] \mapfilter (\ \. relev \ > 2) @{instance_of \Assertion\}\\ +@{theory_text [display,indent=6, margin=70] +\ value*[ass::Assertion, relvce=2::int] \mapfilter (\ \. relvce \ > 2) @{instance_of \Assertion\}\\ } where \<^dof> command \value*\ type-checks, expands in an own validation phase the \instance_of\-term antiquotation, and evaluates the resulting HOL expression above. Assuming an ontology providing the class \Assertion\ having at least the -integer attribute \relev\, the command finally creates an instance of \Assertion\ and +integer attribute \relvce\, the command finally creates an instance of \Assertion\ and binds this to the label \ass\ for further use. Beyond the gain of expressivity in \<^dof> ontologies, term-antiquotations pave the way From 46325cc64b6281df4be18fd3b78ef5c16f033a2b Mon Sep 17 00:00:00 2001 From: "Achim D. Brucker" Date: Sun, 30 Jan 2022 22:52:48 +0000 Subject: [PATCH 10/18] Added unofficial support for lipics-v2021 (warning: this requires a patched version of lipics-v2021.cls). --- install | 1 + src/DOF/latex/lipics-v2021-dof.cls | 1249 +++++++++++++++++ .../root-lipics-v2021-UNSUPPORTED.tex | 94 ++ .../scholarly_paper/DOF-scholarly_paper.sty | 23 +- src/scripts/build_lib.sh | 1 + 5 files changed, 1361 insertions(+), 7 deletions(-) create mode 100644 src/DOF/latex/lipics-v2021-dof.cls create mode 100755 src/document-templates/root-lipics-v2021-UNSUPPORTED.tex diff --git a/install b/install index b6ddcc6..697dceb 100755 --- a/install +++ b/install @@ -181,6 +181,7 @@ install_and_register(){ cp $GEN_DIR/scripts/* "$DIR" cp $GEN_DIR/document-templates/* "$DIR" cp $GEN_DIR/DOF/*/*.sty "$DIR" + cp $GEN_DIR/DOF/*/*.cls "$DIR" ISABELLE_SHORT_VERSION=`echo $ISABELLE_VERSION | sed -e 's/:.*$//'` sed -i -e "s|%%% CONFIG %%%| \ diff --git a/src/DOF/latex/lipics-v2021-dof.cls b/src/DOF/latex/lipics-v2021-dof.cls new file mode 100644 index 0000000..cf03c47 --- /dev/null +++ b/src/DOF/latex/lipics-v2021-dof.cls @@ -0,0 +1,1249 @@ +%% +%% This is file `lipics-v2021.cls'. +%% +%% ----------------------------------------------------------------- +%% Author: Dagstuhl Publishing & le-tex publishing services +%% +%% This file is part of the lipics package for preparing +%% LIPICS articles. +%% +%% Copyright (C) 2021 Schloss Dagstuhl +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is +%% Schloss Dagstuhl (publishing@dagstuhl.de). +%% ----------------------------------------------------------------- +%% +\ProvidesClass{lipics-v2021-dof} + [2021/05/04 v3.1.2 LIPIcs articles (removed comment package for compatibility with Isabelle 2021 (and older).] +\NeedsTeXFormat{LaTeX2e}[2015/01/01] +\emergencystretch1em +\advance\hoffset-1in +\advance\voffset-1in +\advance\hoffset2.95mm +\newif\if@nobotseplist \@nobotseplistfalse +\def\@endparenv{% + \addpenalty\@endparpenalty\if@nobotseplist\else\addvspace\@topsepadd\fi\@endpetrue} +\def\@doendpe{% + \@endpetrue + \def\par{\@restorepar + \everypar{}% + \par + \if@nobotseplist + \addvspace\topsep + \addvspace\partopsep + \global\@nobotseplistfalse + \fi + \@endpefalse}% + \everypar{{\setbox\z@\lastbox}% + \everypar{}% + \if@nobotseplist\global\@nobotseplistfalse\fi + \@endpefalse}} +\def\enumerate{% + \ifnum \@enumdepth >\thr@@\@toodeep\else + \advance\@enumdepth\@ne + \edef\@enumctr{enum\romannumeral\the\@enumdepth}% + \expandafter + \list + \csname label\@enumctr\endcsname + {\advance\partopsep\topsep + \topsep\z@\@plus\p@ + \ifnum\@listdepth=\@ne + \labelsep0.72em + \else + \ifnum\@listdepth=\tw@ + \labelsep0.3em + \else + \labelsep0.5em + \fi + \fi + \usecounter\@enumctr\def\makelabel##1{\hss\llap{##1}}}% + \fi} +\def\endenumerate{\ifnum\@listdepth=\@ne\global\@nobotseplisttrue\fi\endlist} +\def\itemize{% + \ifnum \@itemdepth >\thr@@\@toodeep\else + \advance\@itemdepth\@ne + \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% + \expandafter + \list + \csname\@itemitem\endcsname + {\advance\partopsep\topsep + \topsep\z@\@plus\p@ + \ifnum\@listdepth=\@ne + \labelsep0.83em + \else + \ifnum\@listdepth=\tw@ + \labelsep0.75em + \else + \labelsep0.5em + \fi + \fi + \def\makelabel##1{\hss\llap{##1}}}% + \fi} +\def\enditemize{\ifnum\@listdepth=\@ne\global\@nobotseplisttrue\fi\endlist} +\def\@title{\textcolor{red}{Author: Please provide a title}} +\let\@subtitle\@empty +\def\subtitle#1{\gdef\@subtitle{#1}} +\def\subtitleseperator{: } +\def\@sect#1#2#3#4#5#6[#7]#8{% + \ifnum #2>\c@secnumdepth + \let\@svsec\@empty + \else + \refstepcounter{#1}% + \protected@edef\@svsec{\@seccntformat{#1}\relax}% + \fi + \@tempskipa #5\relax + \ifdim \@tempskipa>\z@ + \begingroup + #6{% + \@hangfrom{\hskip #3\relax + \ifnum #2=1 + \colorbox{lipicsYellow}{\kern0.15em\@svsec\kern0.15em}\quad + \else + \@svsec\quad + \fi}% + \interlinepenalty \@M #8\@@par}% + \endgroup + \csname #1mark\endcsname{#7}% + \addcontentsline{toc}{#1}{% + \ifnum #2>\c@secnumdepth \else + \protect\numberline{\csname the#1\endcsname}% + \fi + #7}% + \else + \def\@svsechd{% + #6{\hskip #3\relax + \@svsec #8}% + \csname #1mark\endcsname{#7}% + \addcontentsline{toc}{#1}{% + \ifnum #2>\c@secnumdepth \else + \protect\numberline{\csname the#1\endcsname}% + \fi + #7}}% + \fi + \@xsect{#5}} +\def\@seccntformat#1{\csname the#1\endcsname} +\def\@biblabel#1{\textcolor{lipicsGray}{\sffamily\bfseries#1}} +\def\EventLogoHeight{25} +\def\copyrightline{% + \ifx\@hideLIPIcs\@undefined + \ifx\@EventLogo\@empty + \else + \setbox\@tempboxa\hbox{\includegraphics[height=\EventLogoHeight\p@]{\@EventLogo}}% + \rlap{\hspace\textwidth\hspace{-\wd\@tempboxa}\hspace{\z@}% + \vtop to\z@{\vskip-0mm\unhbox\@tempboxa\vss}}% + \fi + \scriptsize + \vtop{\hsize\textwidth + \nobreakspace\par + \@Copyright + \ifx\@EventLongTitle\@empty\else\@EventLongTitle.\\\fi + \ifx\@EventEditors\@empty\else + \@Eds: \@EventEditors + ; Article~No.\,\@ArticleNo; pp.\,\@ArticleNo:\thepage--\@ArticleNo:\number\numexpr\getpagerefnumber{TotPages}% + \\ + \fi + \setbox\@tempboxa\hbox{\IfFileExists{lipics-logo-bw.pdf}{\includegraphics[height=14\p@,trim=0 15 0 0]{lipics-logo-bw}}{\includegraphics[height=14\p@, width=62pt]{example-image-plain}}}% + \hspace*{\wd\@tempboxa}\enskip + \href{https://www.dagstuhl.de/lipics/}% + {Leibniz International Proceedings in Informatics}\\ + \smash{\unhbox\@tempboxa}\enskip + \href{https://www.dagstuhl.de}% + {Schloss Dagstuhl -- Leibniz-Zentrum f{\"u}r Informatik, Dagstuhl Publishing, Germany}}% + \fi} +\def\ps@plain{\let\@mkboth\@gobbletwo + \let\@oddhead\@empty + \let\@evenhead\@empty + \let\@evenfoot\copyrightline + \let\@oddfoot\copyrightline} +\def\lipics@opterrshort{Option "\CurrentOption" not supported} +\def\lipics@opterrlong{The option "\CurrentOption" from article.cls is not supported by lipics.cls.} +\DeclareOption{a5paper}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}} +\DeclareOption{b5paper}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}} +\DeclareOption{legalpaper}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}} +\DeclareOption{executivepaper}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}} +\DeclareOption{landscape}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}} +\DeclareOption{10pt}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}} +\DeclareOption{11pt}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}} +\DeclareOption{12pt}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}} +\DeclareOption{oneside}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}} +\DeclareOption{twoside}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}} +\DeclareOption{titlepage}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}} +\DeclareOption{notitlepage}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}} +\DeclareOption{onecolumn}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}} +\DeclareOption{twocolumn}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}} +\DeclareOption{fleqn}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}} +\DeclareOption{openbib}{\@latexerr{\lipics@opterrshort}{\lipics@opterrlong}} +\DeclareOption{a4paper}{\PassOptionsToClass{\CurrentOption}{article} + \advance\hoffset-2.95mm + \advance\voffset8.8mm} +\DeclareOption{numberwithinsect}{\let\numberwithinsect\relax} +\DeclareOption{cleveref}{\let\usecleveref\relax} +\DeclareOption{autoref}{\let\useautoref\relax} +\DeclareOption{anonymous}{\let\authoranonymous\relax} +\DeclareOption{thm-restate}{\let\usethmrestate\relax} +\DeclareOption{authorcolumns}{\let\authorcolumns\relax} +\let\compactauthor\relax +\DeclareOption{oldauthorstyle}{\let\compactauthor\@empty} +\DeclareOption{compactauthor}{\let\compactauthor\relax} +\DeclareOption{pdfa}{\let\pdfa\relax} +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} +\ProcessOptions +\LoadClass[twoside,notitlepage,fleqn]{article} +\renewcommand\normalsize{% + \@setfontsize\normalsize\@xpt{13}% + \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@ + \abovedisplayshortskip \z@ \@plus3\p@ + \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@ + \belowdisplayskip \abovedisplayskip + \let\@listi\@listI} +\normalsize +\renewcommand\small{% + \@setfontsize\small\@ixpt{11.5}% + \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@ + \abovedisplayshortskip \z@ \@plus2\p@ + \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@ + \def\@listi{\leftmargin\leftmargini + \topsep 4\p@ \@plus2\p@ \@minus2\p@ + \parsep 2\p@ \@plus\p@ \@minus\p@ + \itemsep \parsep}% + \belowdisplayskip \abovedisplayskip +} +\renewcommand\footnotesize{% + \@setfontsize\footnotesize{8.5}{9.5}% + \abovedisplayskip 6\p@ \@plus2\p@ \@minus4\p@ + \abovedisplayshortskip \z@ \@plus\p@ + \belowdisplayshortskip 3\p@ \@plus\p@ \@minus2\p@ + \def\@listi{\leftmargin\leftmargini + \topsep 3\p@ \@plus\p@ \@minus\p@ + \parsep 2\p@ \@plus\p@ \@minus\p@ + \itemsep \parsep}% + \belowdisplayskip \abovedisplayskip +} +\renewcommand\large{\@setfontsize\large{10.5}{13}} +\renewcommand\Large{\@setfontsize\Large{12}{14}} +\setlength\parindent{1.5em} +\setlength\headheight{3mm} +\setlength\headsep {10mm} +\setlength\footskip{3mm} +\setlength\textwidth{140mm} +\setlength\textheight{222mm} +\setlength\oddsidemargin{32mm} +\setlength\evensidemargin{38mm} +\setlength\marginparwidth{25mm} +\setlength\topmargin{13mm} +\setlength{\skip\footins}{2\baselineskip \@plus 4\p@ \@minus 2\p@} +\def\@listi{\leftmargin\leftmargini + \parsep\z@ \@plus\p@ + \topsep 8\p@ \@plus2\p@ \@minus4\p@ + \itemsep \parsep} +\let\@listI\@listi +\@listi +\def\@listii {\leftmargin\leftmarginii + \labelwidth\leftmarginii + \advance\labelwidth-\labelsep + \topsep 4\p@ \@plus2\p@ \@minus\p@ + \parsep\z@ \@plus\p@ + \itemsep \parsep} +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\leftmarginiii + \advance\labelwidth-\labelsep + \topsep 2\p@ \@plus\p@\@minus\p@ + \parsep \z@ + \partopsep \p@ \@plus\z@ \@minus\p@ + \itemsep \z@ \@plus\p@} +\def\ps@headings{% + \def\@evenhead{\large\sffamily\bfseries + \llap{\hbox to0.5\oddsidemargin{ \ifx\@hideLIPIcs\@undefined\ifx\@ArticleNo\@empty\textcolor{red}{XX}\else\@ArticleNo\fi:\fi\thepage\hss}}\leftmark\hfil}% + \def\@oddhead{\large\sffamily\bfseries\rightmark\hfil + \rlap{\hbox to0.5\oddsidemargin{\hss \ifx\@hideLIPIcs\@undefined\ifx\@ArticleNo\@empty\textcolor{red}{XX}\else\@ArticleNo\fi:\fi\thepage}}}% + \def\@oddfoot{\hfil + \rlap{% + \vtop{% + \vskip10mm + \colorbox{lipicsYellow} + {\@tempdima\evensidemargin + \advance\@tempdima1in + \advance\@tempdima\hoffset + \hb@xt@\@tempdima{% + \ifx\@hideLIPIcs\@undefined + \textcolor{lipicsGray}{\normalsize\sffamily + \bfseries\quad + \expandafter\textsolittle + \expandafter{\@EventShortTitle}}% + \fi + \strut\hss}}}}} + \let\@evenfoot\@empty + \let\@mkboth\markboth + \let\sectionmark\@gobble + \let\subsectionmark\@gobble} +\pagestyle{headings} +\renewcommand\maketitle{\par + \begingroup + \thispagestyle{plain} + \renewcommand\thefootnote{\@fnsymbol\c@footnote}% + \if@twocolumn + \ifnum \col@number=\@ne + \@maketitle + \else + \twocolumn[\@maketitle]% + \fi + \else + \newpage + \global\@topnum\z@ % Prevents figures from going at top of page. + \@maketitle + \fi + \thispagestyle{plain}\@thanks + \endgroup + \global\let\thanks\relax + \global\let\maketitle\relax + \global\let\@maketitle\relax + \global\let\@thanks\@empty + \global\let\@author\@empty + \global\let\@date\@empty + \global\let\@title\@empty + \global\let\@subtitle\@empty + \global\let\title\relax + \global\let\author\relax + \global\let\date\relax + \global\let\and\relax +} +\newwrite\tocfile +\def\@maketitle{% + \newpage + \null\vskip-\baselineskip + \vskip-\headsep + \@titlerunning + \@authorrunning + %%\let \footnote \thanks + \parindent\z@ \raggedright + \if!\@title!\def\@title{\textcolor{red}{Author: Please fill in a title}}\fi + {\LARGE\sffamily\bfseries\mathversion{bold}\@title \if!\@subtitle!\else{\\\Large\sffamily\bfseries\mathversion{bold}\@subtitle}\fi \par}% + \vskip 1em + \ifx\@author\orig@author + \textcolor{red}{Author: Please provide author information}% + \else + {\def\thefootnote{\@arabic\c@footnote}% + \setcounter{footnote}{0}% + \fontsize{9.5}{12}\selectfont\@author}% + \fi + \bgroup + \immediate\openout\tocfile=\jobname.vtc + \protected@write\tocfile{ + \let\footnote\@gobble + \let\thanks\@gobble + \def\footnotemark{} + \def\and{and }% + \def\,{ } + \def\\{ } + }{% + \string\contitem + \string\title{\@title \if!\@subtitle!\else\subtitleseperator \@subtitle\fi}% + \string\author{\@authorsfortoc}% + \string\page{\@ArticleNo:\thepage--\@ArticleNo:\number\numexpr\getpagerefnumber{TotPages}}}% + \closeout\tocfile + \egroup + \par} +\renewcommand\tableofcontents{% + \section*{\contentsname}% + \@starttoc{toc}} +\setcounter{secnumdepth}{4} +\renewcommand\section{\@startsection {section}{1}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\sffamily\Large\bfseries\raggedright}} +\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\sffamily\Large\bfseries\raggedright}} +\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\sffamily\Large\bfseries\raggedright}} +\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% + {-3.25ex \@plus-1ex \@minus-.2ex}% + {1.5ex \@plus .2ex}% + {\sffamily\large\bfseries\raggedright}} +\renewcommand\subparagraph{\@startsection{subparagraph}{5}{\z@}% + {3.25ex \@plus1ex \@minus .2ex}% + {-1em}% + {\sffamily\normalsize\bfseries}} +\newcommand{\proofsubparagraph}{\@startsection{subparagraph}{5}{\z@}% + {3.25ex \@plus1ex \@minus .2ex}% + {-1em}% + {\color{lipicsGray}\sffamily\normalsize\bfseries}} +\setlength\leftmargini \parindent +\setlength\leftmarginii {1.2em} +\setlength\leftmarginiii{1.2em} +\setlength\leftmarginiv {1.2em} +\setlength\leftmarginv {1.2em} +\setlength\leftmarginvi {1.2em} +\renewcommand\labelenumi{% + \textcolor{lipicsGray}{\sffamily\bfseries\upshape\mathversion{bold}\theenumi.}} +\renewcommand\labelenumii{% + \textcolor{lipicsGray}{\sffamily\bfseries\upshape\mathversion{bold}\theenumii.}} +\renewcommand\labelenumiii{% + \textcolor{lipicsGray}{\sffamily\bfseries\upshape\mathversion{bold}\theenumiii.}} +\renewcommand\labelenumiv{% + \textcolor{lipicsGray}{\sffamily\bfseries\upshape\mathversion{bold}\theenumiv.}} +\renewcommand\labelitemi{% + \textcolor{lipicsBulletGray}{\ifnum\@listdepth=\@ne + \rule{0.67em}{0.33em}% + \else + \rule{0.45em}{0.225em}% + \fi}} +\renewcommand\labelitemii{% + \textcolor{lipicsBulletGray}{\rule{0.45em}{0.225em}}} +\renewcommand\labelitemiii{% + \textcolor{lipicsBulletGray}{\sffamily\bfseries\textasteriskcentered}} +\renewcommand\labelitemiv{% + \textcolor{lipicsBulletGray}{\sffamily\bfseries\textperiodcentered}} +\renewenvironment{description} + {\list{}{\advance\partopsep\topsep\topsep\z@\@plus\p@ + \labelwidth\z@ \itemindent-\leftmargin + \let\makelabel\descriptionlabel}} + {\ifnum\@listdepth=\@ne\global\@nobotseplisttrue\fi\endlist} +\renewcommand*\descriptionlabel[1]{% + \hspace\labelsep\textcolor{lipicsGray}{\sffamily\bfseries\mathversion{bold}#1}} +\def\topmattervskip{0.7} +\renewenvironment{abstract}{% + \vskip\topmattervskip\bigskipamount + \noindent + \rlap{\color{lipicsLineGray}\vrule\@width\textwidth\@height1\p@}% + \hspace*{7mm}\fboxsep1.5mm\colorbox[rgb]{1,1,1}{\raisebox{-0.4ex}{% + \large\selectfont\sffamily\bfseries\abstractname}}% + \vskip3\p@ + \fontsize{9}{12}\selectfont + \noindent\ignorespaces} + {\vskip\topmattervskip\baselineskip\noindent + \subjclassHeading + \ifx\@ccsdescString\@empty + \textcolor{red}{Author: Please fill in 1 or more \string\ccsdesc\space macro}% + \else + \@ccsdescString + \fi + \vskip\topmattervskip\baselineskip + \noindent\keywordsHeading + \ifx\@keywords\@empty + \textcolor{red}{Author: Please fill in \string\keywords\space macro}% + \else + \@keywords + \fi + \ifx\@hideLIPIcs\@undefined + \ifx\@DOIPrefix\@empty\else + \vskip\topmattervskip\baselineskip\noindent + \doiHeading\href{https://doi.org/\@lipicsdoi}{\@lipicsdoi}% + \fi + \fi + \ifx\@category\@empty\else + \vskip\topmattervskip\baselineskip\noindent + \categoryHeading\@category + \fi + \ifx\@relatedversion\@empty\else + \vskip\topmattervskip\baselineskip\noindent + \relatedversionHeading\ifx\authoranonymous\relax\textcolor{red}{Anonymous related version(s)}\else\@relatedversion\fi + \fi + \ifx\@supplement\@empty\else + \vskip\topmattervskip\baselineskip\noindent + \supplementHeading\ifx\authoranonymous\relax\textcolor{red}{Anonymous supplementary material}\else\@supplement\fi + \fi + \ifx\@funding\@empty\else + \vskip\topmattervskip\baselineskip\noindent + \fundingHeading\ifx\authoranonymous\relax\textcolor{red}{Anonymous funding}\else\@funding\fi + \fi + \ifx\@acknowledgements\@empty\else + \vskip\topmattervskip\baselineskip\noindent + \acknowledgementsHeading\ifx\authoranonymous\relax\textcolor{red}{Anonymous acknowledgements} \else\@acknowledgements\fi + \fi + \protected@write\@auxout{}{\string\gdef\string\@pageNumberEndAbstract{\thepage}}% + }% end abstract +\renewenvironment{thebibliography}[1] + {\if@noskipsec \leavevmode \fi + \par + \@tempskipa-3.5ex \@plus -1ex \@minus -.2ex\relax + \@afterindenttrue + \@tempskipa -\@tempskipa \@afterindentfalse + \if@nobreak + \everypar{}% + \else + \addpenalty\@secpenalty\addvspace\@tempskipa + \fi + \noindent + \rlap{\color{lipicsLineGray}\vrule\@width\textwidth\@height1\p@}% + \hspace*{7mm}\fboxsep1.5mm\colorbox[rgb]{1,1,1}{\raisebox{-0.4ex}{% + \normalsize\sffamily\bfseries\refname}}% + \@xsect{1ex \@plus.2ex}% + \list{\@biblabel{\@arabic\c@enumiv}}% + {\leftmargin8.5mm + \labelsep\leftmargin + \settowidth\labelwidth{\@biblabel{#1}}% + \advance\labelsep-\labelwidth + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \fontsize{9}{12}\selectfont + \sloppy + \clubpenalty4000 + \@clubpenalty \clubpenalty + \widowpenalty4000% + \sfcode`\.\@m\protected@write\@auxout{}{\string\gdef\string\@pageNumberStartBibliography{\thepage}}} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \protected@write\@auxout{}{\string\gdef\string\@pageNumberEndBibliography{\thepage}}% + \endlist} +\g@addto@macro\appendix{\immediate\write\@auxout{\string\gdef\string\@pageNumberStartAppendix{\thepage}}}% +\renewcommand\footnoterule{% + \kern-8\p@ + {\color{lipicsBulletGray}\hrule\@width40mm\@height1\p@}% + \kern6.6\p@} +\renewcommand\@makefntext[1]{% + \parindent\z@\hangindent1em + \leavevmode + \hb@xt@1em{\@makefnmark\hss}#1} +\usepackage{microtype} +\usepackage[utf8]{inputenc} +\ifx\pdfa\relax% + \IfFileExists{glyphtounicode.tex}{ + \input glyphtounicode + \pdfgentounicode=1 + }{}% +\fi +\IfFileExists{lmodern.sty}{\RequirePackage{lmodern}}{} +\IfFileExists{fontawesome5.sty}{% +\RequirePackage{fontawesome5}% +\IfFileExists{orcid.pdf}{% +\def\orcidsymbol{\includegraphics[height=9\p@]{orcid}} +}{ +\def\orcidsymbol{\textcolor{lipicsGray}{\fontsize{9}{12}\sffamily\bfseries \faOrcid}}% +} +\def\mailsymbol{\textcolor{lipicsGray}{\fontsize{9}{12}\sffamily\bfseries \faIcon[regular]{envelope}}}% +\def\homesymbol{\textcolor{lipicsGray}{\fontsize{9}{12}\sffamily\bfseries \faHome}}% +}{% +\ClassWarning{Package fontawesome5 not installed}{Please install package fontawesome5} +\def\orcidsymbol{\textcolor{lipicsGray}{\fontsize{9}{12}\sffamily\bfseries ORCID}} +\def\mailsymbol{\textcolor{lipicsGray}{\fontsize{9}{12}\sffamily\bfseries @}}% +\def\homesymbol{\textcolor{lipicsGray}{\fontsize{9}{12}\sffamily\bfseries H}}% +}% +\RequirePackage[T1]{fontenc} +\RequirePackage{textcomp} +\RequirePackage[mathscr]{eucal} +\RequirePackage{amssymb} +\PassOptionsToPackage{retainmissing}{MnSymbol} +\AtBeginDocument{\@ifpackageloaded{MnSymbol}% + {\expandafter\let\csname ver@amssymb.sty\endcsname\relax + \let\complement\@undefined + \RequirePackage{amssymb}}{}} +\RequirePackage{soul} +\sodef\textsolittle{}{.12em}{.5em\@plus.08em\@minus.06em}% + {.4em\@plus.275em\@minus.183em} +\RequirePackage{color} %kept for backward compatibility +\AtBeginDocument{ + \@ifpackageloaded{xcolor}{ + }{ + \RequirePackage{xcolor} + } + \definecolor{darkgray}{rgb}{0.31,0.31,0.33} + \definecolor[named]{lipicsGray}{rgb}{0.31,0.31,0.33} + \definecolor[named]{lipicsBulletGray}{rgb}{0.60,0.60,0.61} + \definecolor[named]{lipicsLineGray}{rgb}{0.51,0.50,0.52} + \definecolor[named]{lipicsLightGray}{rgb}{0.85,0.85,0.86} + \definecolor[named]{lipicsYellow}{rgb}{0.99,0.78,0.07} +} +\RequirePackage{babel} +\RequirePackage[tbtags,fleqn]{amsmath} +\AtBeginDocument{ + \@ifpackageloaded{enumitem}{\ClassWarning{Package 'enumitem' incompatible}{Don't use package 'enumitem'; Package enumerate preloaded!}}{} + \@ifpackageloaded{paralist}{\ClassWarning{Package 'paralist' incompatible}{Don't use package 'paralist'; Package enumerate preloaded!}}{} +} +\RequirePackage{enumerate} +\def\@enum@{\list{\textcolor{lipicsGray}{\sffamily\bfseries\upshape\mathversion{bold}\csname label\@enumctr\endcsname}}% + {\advance\partopsep\topsep + \topsep\z@\@plus\p@ + \usecounter{\@enumctr}\def\makelabel##1{\hss\llap{##1}}}} +\def\romanenumerate{\enumerate[(i)]} +\let\endromanenumerate\endenumerate +\def\alphaenumerate{\enumerate[(a)]} +\let\endalphaenumerate\endenumerate +\def\bracketenumerate{\enumerate[(1)]} +\let\endbracketenumerate\endenumerate +\RequirePackage{graphicx} +\RequirePackage{array} +\let\@classzold\@classz +\def\@classz{% + \expandafter\ifx\d@llarbegin\begingroup + \toks \count@ = + \expandafter{\expandafter\small\the\toks\count@}% + \fi + \@classzold} +\RequirePackage{multirow} +\RequirePackage{tabularx} +\RequirePackage[online]{threeparttable} +\def\TPTtagStyle#1{#1)} +\def\tablenotes{\small\TPT@defaults + \@ifnextchar[\TPT@setuptnotes\TPTdoTablenotes} % ] +\RequirePackage{listings} +\lstset{basicstyle=\small\ttfamily,% + backgroundcolor=\color{lipicsLightGray},% + frame=single,framerule=0pt,xleftmargin=\fboxsep,xrightmargin=\fboxsep} +\RequirePackage[left,mathlines]{lineno} +\linenumbers +\renewcommand\linenumberfont{\normalfont\tiny\sffamily} +%%%% patch to cope with amsmath +%%%% http://phaseportrait.blogspot.de/2007/08/lineno-and-amsmath-compatibility.html +\newcommand*\patchAmsMathEnvironmentForLineno[1]{% + \expandafter\let\csname old#1\expandafter\endcsname\csname #1\endcsname + \expandafter\let\csname oldend#1\expandafter\endcsname\csname end#1\endcsname + \renewenvironment{#1}% + {\linenomath\csname old#1\endcsname}% + {\csname oldend#1\endcsname\endlinenomath}}% +\newcommand*\patchBothAmsMathEnvironmentsForLineno[1]{% + \patchAmsMathEnvironmentForLineno{#1}% + \patchAmsMathEnvironmentForLineno{#1*}}% +\AtBeginDocument{% + \patchBothAmsMathEnvironmentsForLineno{equation}% + \patchBothAmsMathEnvironmentsForLineno{align}% + \patchBothAmsMathEnvironmentsForLineno{flalign}% + \patchBothAmsMathEnvironmentsForLineno{alignat}% + \patchBothAmsMathEnvironmentsForLineno{gather}% + \patchBothAmsMathEnvironmentsForLineno{multline}} +\let\usehyperxmp\@empty% +\ifx\pdfa\relax% + \IfFileExists{hyperxmp.sty}{% + \RequirePackage{hyperxmp}% + \@ifpackagelater{hyperxmp}{2019/04/05}{% + \let\usehyperxmp\relax% + }{% + \ClassWarning{Package hyperxmp outdated}{You are using an outdated version of the package hyperxmp. Please update!}% + }}{}% +\fi% +\IfFileExists{totpages.sty}{ + \RequirePackage{totpages} +}{ + \ClassWarning{Package totpages not installed}{Please install package totpages} + \newcounter{TotPages} + \setcounter{TotPages}{99} +} +\ifx\usehyperxmp\relax% + \RequirePackage[pdfa,unicode]{hyperref}% +\else% + \RequirePackage[unicode]{hyperref}% +\fi% +\let\C\relax% +\let\G\relax% +\let\F\relax% +\let\U\relax% +\pdfstringdefDisableCommands{% + \let\thanks\@gobble% + \let\footnote\@gobble% + \def\footnotemark{}% + \def\cs#1{\textbackslash #1}% + \let\normalfont\@empty% + \let\scshape\@empty% + \def\and{and }% + \def\,{ }% + \def\textrightarrow{ -> }% + \let\mathsf\@empty% +}% +\hypersetup{ + breaklinks=true, + pdfencoding=unicode, + bookmarksnumbered, + pdfborder={0 0 0}, + pdfauthor={ } +}% +\AtBeginDocument{ +\ifx\usehyperxmp\relax +\hypersetup{ +pdftitle={\@title \if!\@subtitle!\else\subtitleseperator \@subtitle\fi}, +pdfauthor={\ifx\authoranonymous\relax Anonymous author(s) \else \@authorsforpdf \fi}, +pdfkeywords={\@keywords}, +pdfproducer={LaTeX with lipics-v2021.cls}, +pdfsubject={LIPIcs, Vol.\@SeriesVolume, \@EventShortTitle}, +pdfcopyright = { Copyright (C) \ifx\authoranonymous\relax Anonymous author(s) \else \@copyrightholder; \fi licensed under Creative Commons License CC-BY 4.0}, +pdflang={en}, +pdfmetalang={en}, +pdfpublisher={Schloss Dagstuhl -- Leibniz-Zentrum für Informatik, Dagstuhl Publishing, Germany}, +pdflicenseurl={https://creativecommons.org/licenses/by/4.0/}, +pdfpubtype={LIPIcs}, +pdfvolumenum={\@SeriesVolume}, +pdfpagerange={\@ArticleNo:\thepage-\@ArticleNo:\theTotPages}, +pdfdoi={\@lipicsdoi}, +pdfapart=3, +pdfaconformance=B +} +\else% +\hypersetup{ +pdftitle={\@title \if!\@subtitle!\else\subtitleseperator \@subtitle\fi}, +pdfauthor={\ifx\authoranonymous\relax Anonymous author(s) \else \@authorsforpdf \fi}, +pdfkeywords={\@keywords}, +pdfcreator={LaTeX with lipics-v2021.cls}, +pdfsubject={LIPIcs, Vol.\@SeriesVolume, \@EventShortTitle; Copyright (C) \ifx\authoranonymous\relax Anonymous author(s) \else \@copyrightholder; \fi licensed under Creative Commons License CC-BY 4.0} +}% +\fi % +} +\ifx\usehyperxmp\relax +\pdfobjcompresslevel=0 +\pdfinclusioncopyfonts=1 +\IfFileExists{colorprofiles.tex}{ +\RequirePackage{colorprofiles}% +\IfFileExists{sRGB.icc}{ +\immediate\pdfobj stream attr{/N 3} file{sRGB.icc} +\pdfcatalog{% +/OutputIntents [ +<< +/Type /OutputIntent +/S /GTS_PDFA1 +/DestOutputProfile \the\pdflastobj\space 0 R +/OutputConditionIdentifier (sRGB) +/Info (sRGB) +>> +] +}}{} +}{\ClassWarning{Package colorprofiles not installed}{Please install package colorprofiles}} +\fi +\RequirePackage[labelsep=space,singlelinecheck=false,% + font={up,small},labelfont={sf,bf},% + listof=false]{caption}%"listof" instead of "list" for backward compatibility +\@ifpackagelater{hyperref}{2009/12/09} + {\captionsetup{compatibility=false}}%cf. http://groups.google.de/group/comp.text.tex/browse_thread/thread/db9310eb540fbbd8/42e30f3b7b3aa17a?lnk=raot + {} +\DeclareCaptionLabelFormat{boxed}{% + \kern0.05em{\color[rgb]{0.99,0.78,0.07}\rule{0.73em}{0.73em}}% + \hspace*{0.67em}\bothIfFirst{#1}{~}#2} +\captionsetup{labelformat=boxed} +\captionsetup[table]{position=top} +\RequirePackage[figuresright]{rotating} +\caption@AtBeginDocument{\@ifpackageloaded{subfig}{\ClassError{lipics}{% + Do not load the subfig package}{The more recent subcaption package is already loaded}}{}} +\RequirePackage{subcaption} +\def\titlerunning#1{\gdef\@titlerunning{{\let\footnote\@gobble\markboth{#1}{#1}}}} +\def\authorrunning#1{% + \gdef\@authorrunning{\markright{\ifx\authoranonymous\relax\textcolor{red}{Anonymous author(s)} \else\if!#1!\textcolor{red}{Author: Please fill in the \string\authorrunning\space macro}\else#1\fi\fi}}} +\titlerunning{\@title \if!\@subtitle!\else\subtitleseperator \@subtitle\fi} +\authorrunning{\textcolor{red}{Author: Please use the \string\authorrunning\space macro}} +\def\EventLongTitle#1{\gdef\@EventLongTitle{#1}} +\EventLongTitle{} +\def\EventShortTitle#1{\gdef\@EventShortTitle{#1}} +\EventShortTitle{} +\def\EventEditors#1{\gdef\@EventEditors{#1}} +\EventEditors{} +\def\EventNoEds#1{\gdef\@EventNoEds{#1}\xdef\@Eds{Editor\ifnum#1>1s\fi}} +\EventNoEds{1} +\def\EventLogo#1{\gdef\@EventLogo{#1}} +\EventLogo{} +\def\EventAcronym#1{\gdef\@EventAcronym{#1}} +\EventAcronym{} +\def\EventYear#1{\gdef\@EventYear{#1}} +\EventYear{} +\def\EventDate#1{\gdef\@EventDate{#1}} +\EventDate{} +\def\EventLocation#1{\gdef\@EventLocation{#1}} +\EventLocation{} +\def\SeriesVolume#1{\gdef\@SeriesVolume{#1}} +\SeriesVolume{} +\def\ArticleNo#1{\gdef\@ArticleNo{#1}} +\ArticleNo{} +\def\DOIPrefix#1{\gdef\@DOIPrefix{#1}} +\DOIPrefix{10.4230/LIPIcs} +\def\@lipicsdoi{\@DOIPrefix.\@EventAcronym.\@EventYear.\@ArticleNo} +\def\and{\newline} +\let\orig@author\@author +\let\@authorsfortoc\@empty +\let\@authorsforpdf\@empty +\newcount\c@author +\newcounter{currentauthor} +\def\authorcolumnsMin{6} +\def\@authornum{0} +\def\author#1#2#3#4#5{% + \ifx\@author\orig@author\let\@author\@empty\fi + \g@addto@macro\@author{% + \noexpandarg\StrBehind{#2}{\and \url}[\homepageTemp]\IfSubStr{#2}{\and \url}{\StrBefore{#2}{\and \url}[\affiliation]}{\def\affiliation{#2}}% + \expandarg\exploregroups\StrRemoveBraces{\homepageTemp}[\homepage]% + \ifx\authorcolumns\relax + \ifnum\c@author>\authorcolumnsMin + \stepcounter{currentauthor} + \ifodd\value{currentauthor} + \begin{minipage}[t]{\textwidth} + \begin{minipage}[t]{0.49\textwidth} + \else + \hfill \begin{minipage}[t]{0.49\textwidth} + \fi + \else + \ClassWarning{Option 'authorcolumns' only applicable for > 6 authors}{Option 'authorcolumns' only applicable for >6 authors!} + \addvspace{0.5\baselineskip} + \fi + \else + \addvspace{0.5\baselineskip} + \fi + {\Large\bfseries + \if!#1! + \textcolor{red}{Author: Please enter author name}% + \else + \ifx\authoranonymous\relax + \textcolor{red}{Anonymous author} + \else + #1\,% + \ifx\compactauthor\relax\if!#3!\else{\,\href{mailto:#3}{\mailsymbol}}\fi% + \ifx\homepage\@empty\else{\,\href{\homepage}{\homesymbol}}\fi\fi% + \if!#4!\else{\,\href{#4}{\orcidsymbol}}\fi% + \if!#5!\else + \ifx\@funding\@empty + \expandafter\g@addto@macro\expandafter\@funding{\textit{\expandafter{\let\footnote\@gobble #1}}:\space{#5}} + \else + \expandafter\g@addto@macro\expandafter\@funding{\\\textit{\expandafter{\let\footnote\@gobble #1}}:\space{#5}} + \fi + \fi + \fi + \fi + } + {\small + \if!#2!\textcolor{red}{Author: Please enter affiliation as second parameter of the author macro}\else{\\* \ifx\authoranonymous\relax\textcolor{red}{Anonymous affiliation}\else\ifx\compactauthor\relax \affiliation \else#2\fi\fi}\fi + \ifx\compactauthor\relax\else\if!#3!\else{\ifx\authoranonymous\relax\else\\*\href{mailto:#3}{#3}\fi}\fi\fi + }\par + \ifx\authorcolumns\relax + \ifnum\c@author>\authorcolumnsMin + \end{minipage} + \ifnum\c@author=\value{currentauthor} + \end{minipage} + \else + \ifodd\value{currentauthor} + \else + \end{minipage}% + \medskip + \fi + \fi + \fi + \fi}% + \global\advance\c@author\@ne + \protected@write\@auxout{}{\string\gdef\string\@authornum{\the\c@author}} + \ifnum\c@author=\@ne + \gdef\@authorsfortoc{#1}% + \gdef\@authorsforpdf{#1} + \else + \expandafter\g@addto@macro\expandafter\@authorsforpdf\expandafter{, #1} + \expandafter\g@addto@macro\expandafter\@authorsfortoc\expandafter{\expandafter\csname\the\c@author authand\endcsname#1}% + \@namedef{\the\c@author authand}{,\space}% + \AtBeginDocument{% + \expandafter\ifnum\@authornum=2 + \@namedef{2authand}{\space and\space}% + \else + \@namedef{\@authornum authand}{,\space and\space}% + \fi} + \fi} +\newcommand*\affil[2][]{% + \ClassError{lipics} + {\string\affil\space deprecated: Please enter affiliation as second parameter of the author macro} + {Since 2017, \string\affil\space is obsolete in lipics.}} +\newcommand*\Copyright[1]{% + \def\@copyrightholder{#1} + \def\@Copyright{% + \setbox\@tempboxa\hbox{\IfFileExists{cc-by.pdf}{\includegraphics[height=14\p@,clip]{cc-by}}{\includegraphics[height=14\p@, width=40pt]{example-image-plain}}}% + \@rightskip\@flushglue \rightskip\@rightskip + \hangindent\dimexpr\wd\@tempboxa+0.5em\relax + \href{https://creativecommons.org/licenses/by/4.0/}% + {\smash{\lower\baselineskip\hbox{\unhcopy\@tempboxa}}}\enskip + \textcopyright\ % + \ifx!#1!\textcolor{red}{Author: Please fill in the \string\Copyright\space macro}\else\ifx\authoranonymous\relax\textcolor{red}{Anonymous author(s)}\else#1\fi\fi + ;\\% + licensed under Creative Commons License CC-BY 4.0\ifx!#1!\\\null\fi\par}} +\Copyright{\textcolor{red}{Author: Please provide a copyright holder}} +\let\@copyrightholder\@empty +\def\hideLIPIcs{\let\@hideLIPIcs\relax} +\usepackage{xstring} +\def\keywords#1{\def\@keywords{#1}} +\let\@keywords\@empty +\def\keywordsHeading{% + \textcolor{lipicsGray}{\fontsize{9}{12}\sffamily\bfseries + Keywords and phrases\enskip}} +%\RequirePackage{comment} +%\excludecomment{CCSXML} +% inspired by https://tex.stackexchange.com/questions/12810/how-do-i-split-a-string +\global\newcommand\ccsdesc[2][100]{\@ccsdesc#1~#2~~\relax} +\let\orig@ccsdesc\@ccsdesc +\let\@ccsdesc\@empty +\let\@ccsdescString\@empty +\gdef\@ccsdesc#1~#2~#3~{ + \ifx\@ccsdesc\orig@ccsdesc\let\@ccsdesc\@empty\fi + \ifx!#3! + \ifx\@ccsdescString\@empty + \g@addto@macro\@ccsdescString{{#2}} + \else + \g@addto@macro\@ccsdescString{; {#2}} + \fi + \else + \ifx\@ccsdescString\@empty + \g@addto@macro\@ccsdescString{{#2} $\rightarrow$ {#3}} + \else + \g@addto@macro\@ccsdescString{; {#2} $\rightarrow$ {#3}} + \fi + \fi +\ccsdescEnd +} +\def\ccsdescEnd#1\relax{} +\def\subjclass#1{ + \ClassError{lipics} + {\string\subjclass\space deprecated: Please enter subject classification in 1 or more ccsdesc macros} + {Since 2019, \string\subjclass\space is obsolete in lipics.}} +\let\@subjclass\@empty +\def\subjclassHeading{% + \textcolor{lipicsGray}{\fontsize{9}{12}\sffamily\bfseries + 2012 ACM Subject Classification\enskip}} +\def\doiHeading{% + \textcolor{lipicsGray}{\fontsize{9}{12}\sffamily\bfseries + Digital Object Identifier\enskip}} +\def\category#1{\def\@category{#1}} +\let\@category\@empty +\def\categoryHeading{% + \textcolor{lipicsGray}{\fontsize{9}{12}\sffamily\bfseries + Category\enskip}} +\def\relatedversion#1{\def\@relatedversion{#1}} +\let\@relatedversion\@empty +\define@key{relatedversiondetails}{linktext}{\def\relatedversiondetails@linktext{#1}} +\define@key{relatedversiondetails}{cite}{\def\relatedversiondetails@cite{#1}} +\newcommand*\addtorelatedversionmacro[2]{% + \ifx\@relatedversion\@empty% + \g@addto@macro\@relatedversion{#1}% + \else% + \g@addto@macro\@relatedversion{\\#1}% + \fi% +}% +\newcommand{\relatedversiondetails}[3][]{% + \begingroup% + \let\relatedversiondetails@linktext\@empty + \let\relatedversiondetails@cite\@empty + \setkeys{relatedversiondetails}{#1}% + \ifx\relatedversiondetails@linktext\@empty% + \protected@edef\tmp{\textit{#2}:\space{\url{#3}}}% + \else% + \protected@edef\tmp{\textit{#2}:\space{\href{#3}{\texttt{\relatedversiondetails@linktext}}}}% + \fi% + \ifx\relatedversiondetails@cite\@empty% + \else% + \protected@edef\tmp{\tmp\nobreakspace\cite{\relatedversiondetails@cite}}% + \fi% + \expandafter\addtorelatedversionmacro\expandafter{\tmp}{#1}% + \endgroup% +}% +\def\relatedversionHeading{% + \textcolor{lipicsGray}{\fontsize{9}{12}\sffamily\bfseries + Related Version\enskip}} +\def\supplement#1{\def\@supplement{#1}} +\let\@supplement\@empty +\define@key{supplementdetails}{linktext}{\def\supplementdetails@linktext{#1}} +\define@key{supplementdetails}{cite}{\def\supplementdetails@cite{#1}} +\define@key{supplementdetails}{subcategory}{\def\supplementdetails@subcategory{#1}} +\define@key{supplementdetails}{swhlinktext}{\def\supplementdetails@swhlinktext{#1}} +\let\supplementdetails@swhlinktext\@empty +\define@key{supplementdetails}{swhid}{ + \ifx\supplementdetails@swhlinktext\@empty% + \StrBefore{#1}{;}[\supplementdetails@swhlinktext]% + \fi% + \def\supplementdetails@swhid{#1}% +} + +\define@key{supplementdetails}{swhdelimiter}{\def\supplementdetails@swhdelimiter{#1}} +\def\supplementdetails@swhdelimiter{\\ \hspace*{1.2em}} +\newcommand*\addtosupplementmacro[2]{% + \ifx\@supplement\@empty% + \g@addto@macro\@supplement{#1}% + \else% + \g@addto@macro\@supplement{\\#1}% + \fi% +}% +\newcommand{\supplementdetails}[3][]{% + \begingroup% + \let\supplementdetails@linktext\@empty + \let\supplementdetails@cite\@empty + \let\supplementdetails@subcategory\@empty + \let\supplementdetails@swhid\@empty + \setkeys{supplementdetails}{#1}% + \ifx\supplementdetails@subcategory\@empty% + \protected@edef\tmp{\textit{#2}} + \else + \protected@edef\tmp{\textit{#2\,\,(\supplementdetails@subcategory)}}% + \fi + \ifx\supplementdetails@linktext\@empty% + \protected@edef\tmp{\tmp:\space{\url{#3}}}% + \else% + \protected@edef\tmp{\tmp:\space{\href{#3}{\texttt{\supplementdetails@linktext}}}}% + \fi% + \ifx\supplementdetails@cite\@empty% + \else% + \protected@edef\tmp{\tmp\nobreakspace\cite{\supplementdetails@cite}}% + \fi + \ifx\supplementdetails@swhid\@empty% + \else% + \ifx\supplementdetails@swhlinktext\@empty% + \protected@edef\tmp{\tmp \supplementdetails@swhdelimiter{} archived at % + \href{https://archive.softwareheritage.org/\supplementdetails@swhid}{\nolinkurl{\supplementdetails@swhid}}}% + \else% + \protected@edef\tmp{\tmp \supplementdetails@swhdelimiter{} archived at % + \href{https://archive.softwareheritage.org/\supplementdetails@swhid}{\nolinkurl{\supplementdetails@swhlinktext}}}% + \fi% + \fi% + \expandafter\addtosupplementmacro\expandafter{\tmp}{#1}% + \endgroup% +}% +\def\supplementHeading{% + \textcolor{lipicsGray}{\fontsize{9}{12}\sffamily\bfseries + Supplementary Material\enskip}} +\newcommand\flag[2][0.9cm]{% + \leavevmode\marginpar{% + \raisebox{\dimexpr-\totalheight+\ht\strutbox\relax}% + [\dimexpr\ht\strutbox+3mm][\dp\strutbox]{\expandafter\includegraphics[width=#1]{#2}}% +}} +\def\funding#1{\def\@funding{#1}} +\let\@funding\@empty +\def\fundingHeading{% + \textcolor{lipicsGray}{\fontsize{9}{12}\sffamily\bfseries + Funding\enskip}} +\def\acknowledgements#1{\def\@acknowledgements{#1}} +\let\@acknowledgements\@empty +\def\acknowledgementsHeading{% + \textcolor{lipicsGray}{\fontsize{9}{12}\sffamily\bfseries + Acknowledgements\enskip}} +\RequirePackage{amsthm} +\ifx\usethmrestate\relax + \RequirePackage{thm-restate} +\fi +\thm@headfont{% + \textcolor{lipicsGray}{$\blacktriangleright$}\nobreakspace\sffamily\bfseries} +\def\th@remark{% + \thm@headfont{% + \textcolor{lipicsGray}{$\blacktriangleright$}\nobreakspace\sffamily}% + \normalfont % body font + \thm@preskip\topsep \divide\thm@preskip\tw@ + \thm@postskip\thm@preskip +} +\def\@endtheorem{\endtrivlist}%\@endpefalse +\renewcommand\qedsymbol{\textcolor{lipicsGray}{\ensuremath{\blacktriangleleft}}} +\renewenvironment{proof}[1][\proofname]{\par + \pushQED{\qed}% + \normalfont \topsep6\p@\@plus6\p@\relax + \trivlist + \item[\hskip\labelsep + \color{lipicsGray}\sffamily\bfseries + #1\@addpunct{.}]\ignorespaces +}{% + \popQED\endtrivlist%\@endpefalse +} +\newcommand{\claimqedhere}{\renewcommand\qedsymbol{\textcolor{lipicsGray}{\ensuremath{\vartriangleleft}}}% +\qedhere% +\renewcommand\qedsymbol{\textcolor{lipicsGray}{\ensuremath{\blacktriangleleft}}}} +\newenvironment{claimproof}[1][\proofname]{ + \pushQED{\qed}% + \normalfont \topsep6\p@\@plus6\p@\relax + \trivlist + \item[\hskip\labelsep + \color{lipicsGray}\sffamily + #1\@addpunct{.}]\ignorespaces +}{% + \renewcommand\qedsymbol{\textcolor{lipicsGray}{\ensuremath{\vartriangleleft}}} + \popQED\endtrivlist%\@endpefalse + \renewcommand\qedsymbol{\textcolor{lipicsGray}{\ensuremath{\blacktriangleleft}}} +} +% inspired by qed of amsthm class +\DeclareRobustCommand{\lipicsEnd}{% + \leavevmode\unskip\penalty9999 \hbox{}\nobreak\hfill + \quad\hbox{$\lrcorner$}% +} +\AtBeginDocument{ + \@ifpackageloaded{algorithm2e}{ + \@ifpackagelater{algorithm2e}{2009/11/17}{ + \renewcommand{\algorithmcfname}{\sffamily\bfseries{}Algorithm}% + \renewcommand{\@algocf@procname}{\sffamily\bfseries{}Procedure}% + \SetAlgoCaptionSeparator{~} + \SetAlCapHSkip{0pt} + \renewcommand{\algocf@captiontext}[2]{% + \kern0.05em{\color{lipicsYellow}\rule{0.73em}{0.73em}}% + \hspace*{0.67em}\small #1\algocf@capseparator\nobreakspace#2} + \renewcommand{\algocf@makecaption}[2]{% + \parbox[t]{\textwidth}{\algocf@captiontext{#1}{#2}}% + }% + \renewcommand{\algocf@captionproctext}[2]{% + {% + \kern0.05em{\color{lipicsYellow}\rule{0.73em}{0.73em}}% + \hspace*{0.67em}\small% +\ProcSty{\ProcFnt\algocf@procname\ifthenelse{\boolean{algocf@procnumbered}}{\nobreakspace\thealgocf\algocf@typo\algocf@capseparator}{\relax}}% + \nobreakspace\ProcNameSty{\ProcNameFnt\algocf@captname #2@}% Name of the procedure in ProcName Style. + \ifthenelse{\equal{\algocf@captparam #2@}{\arg@e}}{}{% if no argument, write nothing + \ProcNameSty{\ProcNameFnt(}\ProcArgSty{\ProcArgFnt\algocf@captparam #2@}\ProcNameSty{\ProcNameFnt)}%else put arguments in ProcArgSty: + }% endif + \algocf@captother #2@% + }% +}% + \renewcommand{\@algocf@capt@boxed}{above} + \renewcommand{\@algocf@capt@ruled}{above} + \setlength\algotitleheightrule{0pt} + }{\ClassWarning{% + Package algorithm2e outdated}{You are using an outdated version of the package algorithm2e. Please update!}} + }{} + \@ifpackageloaded{algorithm}{ + \captionsetup[algorithm]{name=Algorithm, labelformat=boxed, position=top} + \newcommand\fs@ruled@notop{\def\@fs@cfont{\bfseries}\let\@fs@capt\floatc@ruled + \def\@fs@pre{}% + \def\@fs@post{\kern2pt\hrule\relax}% + \def\@fs@mid{\kern2pt\hrule\kern2pt}% + \let\@fs@iftopcapt\iftrue} + \@ifundefined{fst@algorithm}{}{ + \renewcommand\fst@algorithm{\fs@ruled@notop} + } + }{} + \ifx\usecleveref\relax\else + \@ifpackageloaded{cleveref}{\ClassWarning{Use document option 'cleveref' instead}{Use document option 'cleveref' instead directly loading package 'cleveref'}}{} + \fi + \ifx\usethmrestate\relax\else + \@ifpackageloaded{thm-restate}{\ClassWarning{Use document option 'thm-restate' instead}{Use document option 'thm-restate' instead directly loading package 'thm-restate'}}{} + \fi + \ifx\useautoref\relax + \@ifundefined{algorithmautorefname}{\newcommand{\algorithmautorefname}{Algorithm}}{\renewcommand{\algorithmautorefname}{Algorithm}}% + \fi +} + +\ifx\usecleveref\relax + \RequirePackage[capitalise, noabbrev]{cleveref} + \crefname{algocf}{Algorithm}{Algorithms} + \Crefname{algocf}{Algorithm}{Algorithms} + \newcommand{\crefrangeconjunction}{--} + \newcommand{\creflastconjunction}{, and\nobreakspace} +\fi +\ifx\useautoref\relax + \RequirePackage{aliascnt} +\fi +\newtheoremstyle{claimstyle}{\topsep}{\topsep}{}{0pt}{\sffamily}{. }{5pt plus 1pt minus 1pt}% + {$\vartriangleright$ \thmname{#1}\thmnumber{ #2}\thmnote{ (#3)}} +\theoremstyle{plain} +\newtheorem{theorem}{Theorem} +\ifx\numberwithinsect\relax + \@addtoreset{theorem}{section} + \expandafter\def\expandafter\thetheorem\expandafter{% + \expandafter\thesection\expandafter\@thmcountersep\thetheorem} +\fi + +\ifx\useautoref\relax + \addto\extrasenglish{% + \def\chapterautorefname{Chapter}% + \def\sectionautorefname{Section}% + \def\subsectionautorefname{Subsection}% + \def\subsubsectionautorefname{Subsubsection}% + \def\paragraphautorefname{Paragraph}% + \def\subparagraphautorefname{Subparagraph}% + } + \addto\extrasUKenglish{% + \def\chapterautorefname{Chapter}% + \def\sectionautorefname{Section}% + \def\subsectionautorefname{Subsection}% + \def\subsubsectionautorefname{Subsubsection}% + \def\paragraphautorefname{Paragraph}% + \def\subparagraphautorefname{Subparagraph}% + } + \addto\extrasUSenglish{% + \def\chapterautorefname{Chapter}% + \def\sectionautorefname{Section}% + \def\subsectionautorefname{Subsection}% + \def\subsubsectionautorefname{Subsubsection}% + \def\paragraphautorefname{Paragraph}% + \def\subparagraphautorefname{Subparagraph}% + } + \ifx\usethmrestate\relax + \newtheorem{lemma}[theorem]{Lemma} + \newtheorem{corollary}[theorem]{Corollary} + \newtheorem{proposition}[theorem]{Proposition} + \newtheorem{exercise}[theorem]{Exercise} + \newtheorem{definition}[theorem]{Definition} + \newtheorem{conjecture}[theorem]{Conjecture} + \newtheorem{observation}[theorem]{Observation} + \theoremstyle{definition} + \newtheorem{example}[theorem]{Example} + \theoremstyle{remark} + \newtheorem{note}[theorem]{Note} + \newtheorem*{note*}{Note} + \newtheorem{remark}[theorem]{Remark} + \newtheorem*{remark*}{Remark} + \theoremstyle{claimstyle} + \newtheorem{claim}[theorem]{Claim} + \newtheorem*{claim*}{Claim} + \else + \newaliascnt{lemma}{theorem} + \newtheorem{lemma}[lemma]{Lemma} + \aliascntresetthe{lemma} + \newcommand{\lemmaautorefname}{Lemma} + \newaliascnt{corollary}{theorem} + \newtheorem{corollary}[corollary]{Corollary} + \aliascntresetthe{corollary} + \newcommand{\corollaryautorefname}{Corollary} + \newaliascnt{proposition}{theorem} + \newtheorem{proposition}[proposition]{Proposition} + \aliascntresetthe{proposition} + \newcommand{\propositionautorefname}{Proposition} + \newaliascnt{exercise}{theorem} + \newtheorem{exercise}[exercise]{Exercise} + \aliascntresetthe{exercise} + \newcommand{\exerciseautorefname}{Exercise} + \newaliascnt{definition}{theorem} + \newtheorem{definition}[definition]{Definition} + \aliascntresetthe{definition} + \newcommand{\definitionautorefname}{Definition} + \newaliascnt{conjecture}{theorem} + \newtheorem{conjecture}[conjecture]{Conjecture} + \aliascntresetthe{conjecture} + \newcommand{\conjectureautorefname}{Conjecture} + \newaliascnt{observation}{theorem} + \newtheorem{observation}[observation]{Observation} + \aliascntresetthe{observation} + \newcommand{\observationautorefname}{Observation} + \theoremstyle{definition} + \newaliascnt{example}{theorem} + \newtheorem{example}[example]{Example} + \aliascntresetthe{example} + \newcommand{\exampleautorefname}{Example} + \theoremstyle{remark} + \newaliascnt{note}{theorem} + \newtheorem{note}[note]{Note} + \aliascntresetthe{note} + \newcommand{\noteautorefname}{Note} + \newtheorem*{note*}{Note} + \newaliascnt{remark}{theorem} + \newtheorem{remark}[remark]{Remark} + \aliascntresetthe{remark} + \newcommand{\remarkautorefname}{Remark} + \newtheorem*{remark*}{Remark} + \theoremstyle{claimstyle} + \newaliascnt{claim}{theorem} + \newtheorem{claim}[claim]{Claim} + \aliascntresetthe{claim} + \newcommand{\claimautorefname}{Claim} + \newtheorem*{claim*}{Claim} + \fi +\else + \newtheorem{lemma}[theorem]{Lemma} + \newtheorem{corollary}[theorem]{Corollary} + \newtheorem{proposition}[theorem]{Proposition} + \newtheorem{exercise}[theorem]{Exercise} + \newtheorem{definition}[theorem]{Definition} + \newtheorem{conjecture}[theorem]{Conjecture} + \newtheorem{observation}[theorem]{Observation} + \theoremstyle{definition} + \newtheorem{example}[theorem]{Example} + \theoremstyle{remark} + \newtheorem{note}[theorem]{Note} + \newtheorem*{note*}{Note} + \newtheorem{remark}[theorem]{Remark} + \newtheorem*{remark*}{Remark} + \theoremstyle{claimstyle} + \newtheorem{claim}[theorem]{Claim} + \newtheorem*{claim*}{Claim} +\fi +\theoremstyle{plain} +\endinput +%% +%% End of file `lipics-v2021.cls'. diff --git a/src/document-templates/root-lipics-v2021-UNSUPPORTED.tex b/src/document-templates/root-lipics-v2021-UNSUPPORTED.tex new file mode 100755 index 0000000..e809da7 --- /dev/null +++ b/src/document-templates/root-lipics-v2021-UNSUPPORTED.tex @@ -0,0 +1,94 @@ +%% Copyright (c) 2019-2022 University of Exeter +%% 2018-2022 University of Paris-Saclay +%% 2018-2019 The University of Sheffield +%% +%% License: +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN +%% archives in directory macros/latex/base/lppl.txt; either +%% version 1.3c of the License, or (at your option) any later version. +%% OR +%% The 2-clause BSD-style license. +%% + +%% 2022/01/25 Unreleased/Isabelle2021 + +%% Warning: Do Not Edit! +%% ===================== +%% This is the root file for the Isabelle/DOF using the lipics class. +%% Note that lipics cannot be distributed as part of Isabelle/DOF; you need +%% to download lipics.cls from +%% https://www.dagstuhl.de/en/publications/lipics/instructions-for-authors/ +%% and add it manually to the praemble.tex and the ROOT file. +%% +%% All customization and/or additional packages should be added to the file +%% preamble.tex. + +\documentclass[a4paper,UKenglish,cleveref, autoref,thm-restate]{lipics-v2021-dof} +\bibliographystyle{plainurl}% the mandatory bibstyle +\usepackage{isabelle} +\usepackage{isabellesym} +% \usepackage{amsmath} +% \usepackage{DOF-amssymb} +\usepackage[numbers, sort&compress, sectionbib]{natbib} +\IfFileExists{DOF-core.sty}{}{% + \PackageError{DOF-core}{Isabelle/DOF not installed. + This is a Isabelle_DOF project. The document preparation requires + the Isabelle_DOF framework. Please obtain the framework by cloning + the Isabelle_DOF git repository, i.e.: + "git clone https://git.logicalhacking.com/Isabelle_DOF/Isabelle_DOF" + You can install the framework as follows: + "cd Isabelle_DOF/document-generator && ./install"}{% + For further help, see https://git.logicalhacking.com/Isabelle_DOF/Isabelle_DOF} +} + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% provide an alternative definition of +% begin: scholarly_paper.author +\RequirePackage{keycommand} +\makeatletter +\newcommand{\DOFlipicsAuthor}[4]{\expandafter\author{#1}{#2}{#3}{#4}} +\expandafter\newkeycommand\csname isaDof.text.scholarly_paper.author\endcsname% +[label=,type=% +,scholarly_paper.author.email=% +,scholarly_paper.author.affiliation=% +,scholarly_paper.author.orcid=% +,scholarly_paper.author.http_site=% +][1]{% + \protected@write\@auxout{}{\string\protect\string\DOFlipicsAuthor{#1}% + {\commandkey{scholarly_paper.author.affiliation}} + {\commandkey{scholarly_paper.author.email}} + {\commandkey{scholarly_paper.author.orcid}} + {} + } +} + +\makeatother +% end: scholarly_paper.author +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\input{ontologies} +\renewcommand{\DOFauthor}{} +\renewcommand{\DOFinstitute}{} +\expandafter\newcommand\csname 2authand\endcsname{} +\expandafter\newcommand\csname 3authand\endcsname{} +\expandafter\newcommand\csname 4authand\endcsname{} + +\IfFileExists{preamble.tex}{\input{preamble.tex}}{}% +\begin{document} + + +\maketitle +\input{session} +% optional bibliography +\IfFileExists{root.bib}{% +{\small + \bibliography{root} +}}{} +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: diff --git a/src/ontologies/scholarly_paper/DOF-scholarly_paper.sty b/src/ontologies/scholarly_paper/DOF-scholarly_paper.sty index 1314048..7130be7 100755 --- a/src/ontologies/scholarly_paper/DOF-scholarly_paper.sty +++ b/src/ontologies/scholarly_paper/DOF-scholarly_paper.sty @@ -40,7 +40,7 @@ \RequirePackage{DOF-scholarly_paper-thm}% }% {% - \@ifclassloaded{lipics-v2019}% + \@ifclassloaded{lipics-v2021-dof}% {% \newcommand{\institute}[1]{}% \newcommand{\inst}[1]{}% @@ -48,20 +48,29 @@ \newcommand{\email}[1]{}% }% {% - \@ifclassloaded{eptcs}% + \@ifclassloaded{lipics-v2019}% {% + \newcommand{\institute}[1]{}% \newcommand{\inst}[1]{}% \newcommand{\orcidID}[1]{}% + \newcommand{\email}[1]{}% }% {% - \@ifclassloaded{svjour3}% + \@ifclassloaded{eptcs}% {% - \newcommand{\inst}[1]{}% + \newcommand{\inst}[1]{}% + \newcommand{\orcidID}[1]{}% }% {% - \PackageError{DOF-scholarly_paper} - {Scholarly Paper only supports LNCS or scrartcl as document class.} - {}\stop% + \@ifclassloaded{svjour3}% + {% + \newcommand{\inst}[1]{}% + }% + {% + \PackageError{DOF-scholarly_paper} + {Scholarly Paper only supports LNCS or scrartcl as document class.} + {}\stop% + }% }% }% }% diff --git a/src/scripts/build_lib.sh b/src/scripts/build_lib.sh index e6b8861..f159b5b 100755 --- a/src/scripts/build_lib.sh +++ b/src/scripts/build_lib.sh @@ -119,6 +119,7 @@ fi cp $ROOT root.tex cp $ISABELLE_HOME_USER/DOF/latex/*.sty . cp $ISABELLE_HOME_USER/DOF/document-template/*.sty . +cp $ISABELLE_HOME_USER/DOF/document-template/*.cls . # delete outdated aux files from previous runs rm -f *.aux From 35b47223b982a215775842874e735cf7d26b52b5 Mon Sep 17 00:00:00 2001 From: Burkhart Wolff Date: Sun, 30 Jan 2022 14:48:54 +0100 Subject: [PATCH 11/18] added category 'background' into scholarly paper --- src/ontologies/scholarly_paper/scholarly_paper.thy | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/ontologies/scholarly_paper/scholarly_paper.thy b/src/ontologies/scholarly_paper/scholarly_paper.thy index de669b4..b542d79 100755 --- a/src/ontologies/scholarly_paper/scholarly_paper.thy +++ b/src/ontologies/scholarly_paper/scholarly_paper.thy @@ -122,6 +122,11 @@ As Security of the system we define etc... A formal statement can, but must not have a reference to true formal Isabelle/Isar definition. \ +doc_class background = text_section + + comment :: string + claims :: "thm list" + + subsection\Technical Content and its Formats\ datatype status = formal | semiformal | description @@ -466,6 +471,7 @@ doc_class article = \author\\<^sup>+ ~~ abstract ~~ \introduction\\<^sup>+ ~~ + \background\\<^sup>* ~~ \technical || example \\<^sup>+ ~~ \conclusion\\<^sup>+ ~~ bibliography ~~ From e650892b48658f0d076395b20f1704717865e193 Mon Sep 17 00:00:00 2001 From: Burkhart Wolff Date: Sun, 30 Jan 2022 20:57:59 +0100 Subject: [PATCH 12/18] changed 'L' - operator to 'Lang' in order to avoid name conflicts in papers. --- src/DOF/RegExpInterface.thy | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/DOF/RegExpInterface.thy b/src/DOF/RegExpInterface.thy index 1bbdfe7..81c81f7 100755 --- a/src/DOF/RegExpInterface.thy +++ b/src/DOF/RegExpInterface.thy @@ -68,13 +68,13 @@ This universe of denotations is in our concrete case:\ text\Now the denotational semantics for regular expression can be defined on a post-card:\ -fun L :: "'a rexp => 'a lang" - where L_Emp : "L Zero = {}" - |L_One: "L One = {[]}" - |L_Atom: "L (\a\) = {[a]}" - |L_Un: "L (el || er) = (L el) \ (L er)" - |L_Conc: "L (el ~~ er) = {xs@ys | xs ys. xs \ L el \ ys \ L er}" - |L_Star: "L (Star e) = Regular_Set.star(L e)" +fun Lang :: "'a rexp => 'a lang" + where L_Emp : "Lang Zero = {}" + |L_One: "Lang One = {[]}" + |L_Atom: "Lang (\a\) = {[a]}" + |L_Un: "Lang (el || er) = (Lang el) \ (Lang er)" + |L_Conc: "Lang (el ~~ er) = {xs@ys | xs ys. xs \ Lang el \ ys \ Lang er}" + |L_Star: "Lang (Star e) = Regular_Set.star(Lang e)" text\A more useful definition is the sub-language - definition\ From 8f7e898f4ba8ed33bbc6495eb92d85b0c641b703 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20M=C3=A9ric?= Date: Mon, 31 Jan 2022 13:01:59 +0100 Subject: [PATCH 13/18] Fix invariant railroad diagram --- examples/technical_report/Isabelle_DOF-Manual/04_RefMan.thy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/technical_report/Isabelle_DOF-Manual/04_RefMan.thy b/examples/technical_report/Isabelle_DOF-Manual/04_RefMan.thy index f4045db..7787c2a 100755 --- a/examples/technical_report/Isabelle_DOF-Manual/04_RefMan.thy +++ b/examples/technical_report/Isabelle_DOF-Manual/04_RefMan.thy @@ -234,7 +234,7 @@ A document class\<^bindex>\document class\ can be defined using the We call document classes with an \accepts_clause\ \<^emph>\monitor classes\ or \<^emph>\monitors\ for short. \<^rail>\ @@{command "doc_class"} class_id '=' (class_id '+')? (attribute_decl+) \ - (invariant_decl?) + (invariant_decl *) (accepts_clause rejects_clause?)?\ \<^item> \attribute_decl\:\<^index>\attribute\_decl@\attribute_decl\\ \<^rail>\ name '::' '"' type '"' default_clause? \ @@ -243,7 +243,7 @@ A document class\<^bindex>\document class\ can be defined using the records in HOL. Note that sufficient type information must be provided in order to disambiguate the argument of the expression and the \<^boxed_text>\\\ symbol is reserved to reference the instance of the class itself. - \<^rail>\ 'invariant' name '::' '"' term '"' + 'and' \ + \<^rail>\ 'invariant' (name '::' '"' term '"' + 'and') \ \<^item> \accepts_clause\:\<^index>\accepts\_clause@\accepts_clause\\ \<^rail>\ 'accepts' '"' regexpr '"'\ \<^item> \rejects_clause\:\<^index>\rejects\_clause@\rejects_clause\\ From 7ac669e52ef4f440c1aca2b8128981afc1b8f880 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20M=C3=A9ric?= Date: Mon, 31 Jan 2022 17:38:37 +0100 Subject: [PATCH 14/18] Update invariants section --- .../scholarly_paper/2021-ITP-PMTI/paper.thy | 76 +++++++++++-------- 1 file changed, 44 insertions(+), 32 deletions(-) diff --git a/examples/scholarly_paper/2021-ITP-PMTI/paper.thy b/examples/scholarly_paper/2021-ITP-PMTI/paper.thy index 3766b96..ec3b6be 100644 --- a/examples/scholarly_paper/2021-ITP-PMTI/paper.thy +++ b/examples/scholarly_paper/2021-ITP-PMTI/paper.thy @@ -270,11 +270,12 @@ text\ HOL-types, allowing for formal \<^emph>\links\ to and between ontological concepts. For example, the basic concept of requirements from CENELEC 50128~@{cite "bsi:50128:2014"} is captured in ODL as follows: - \begin{isar} + @{theory_text [display,indent=10, margin=70] +\ doc_class requirement = text_element + (* derived from text_element *) ~ long_name ::"string option" (* an optional string attribute *) ~ is_concerned::"role set" (* roles working with this req. *) - \end{isar} +\} This ODL class definition maybe part of one or more Isabelle theory--files capturing the entire ontology definition. Isabelle's session management allows for pre-compiling them before being imported in the actual target documentation required to be compliant to this ontology. @@ -300,9 +301,10 @@ text\\<^dof>'s generated antiquotations are part of a general mechanism of Isabelle's standard antiquotations heavily used in various papers and technical reports. For example, in the following informal text, the antiquotation \<^verbatim>\thm refl\ refers to the reflexivity axiom from HOL: - \begin{isar} +@{theory_text [display,indent=10, margin=70] +\ textAccording to the reflexivity axiom <@>{thm refl}, we obtain in \ - for <@>{term fac 5} the result <@>{value fac 5}.\end{isar} + for <@>{term fac 5} the result <@>{value fac 5}.\} In the PDF output, this is represented as follows: \begin{out} According to the reflexivity axiom $x = x$, we obtain in \\\ for $\operatorname{fac} 5$ the result $120$. @@ -336,17 +338,18 @@ text\ A novel mechanism to specify invariants is implemented and can now be specified in common HOL syntax. % These invariants can be checked when an instance of the class is defined. -% To enable the checking of the invariants, the \<^emph>\invariants\_checking\ +% To enable the checking of the invariants, the \<^theory_text>\invariants_checking\ % theory attribute must be set: -% \begin{isar} -% declare[[invariants_checking = true]] -% \end{isar} +% @{theory_text [display,indent=10, margin=70] + \ + declare[[invariants_checking = true]] + \} If we take back the ontology example of~@{cite "brucker.ea:isabelledof:2019"}, we can now specify the constraints, like that any instance of a \<^emph>\result\ class finally has - a non-empty property list, if its \<^emph>\kind\ is \<^emph>\proof\, or that - the \<^emph>\establish\ relation between \<^emph>\claim\ and - \<^emph>\result\ is total, using the keyword \<^emph>\invariant\ in the class definition: - \begin{isar} + a non-empty property list, if its \<^theory_text>\kind\ is \<^theory_text>\proof\, or that + the \<^theory_text>\establish\ relation between \<^theory_text>\claim\ and + \<^theory_text>\result\ is total, using the keyword \<^theory_text>\invariant\ in the class definition: +@{theory_text [display,indent=10, margin=70] \ doc_class title = short_title :: "string option" <= "None" doc_class author = @@ -387,26 +390,35 @@ datatype kind = expert_opinion | argument | "proof" establish :: "(claim \ result) set" invariant total_rel :: "\ x. x \ Domain (establish \) \ (\ y \ Range (establish \). (x, y) \ establish \)" -\end{isar} +\} - In our example, the invariant \<^emph>\author\_finite\ enforces that the user sets the - \<^emph>\authored\_by\ set. - The \<^emph>\$\sigma$\ symbol is reserved and references the future instance class. + In our example, the invariant \<^theory_text>\author_finite \ enforces that the user sets the + \<^theory_text>\authored_by\ set. + The \<^theory_text>\\\ symbol is reserved and references the future instance class. By relying on the implementation of the Records in Isabelle/HOL~@{cite "wenzel:isabelle-isar:2020"}, one can reference an attribute of an instance using its selector function. - For example, \<^emph>\establish $\sigma$\ denotes the value - of the \<^emph>\establish\ attribute - of the future instance of the class \<^emph>\conclusion\. + For example, \<^theory_text>\establish \\ denotes the value + of the \<^theory_text>\establish\ attribute + of the future instance of the class \<^theory_text>\conclusion\. if we define some instances like: (ADD EXAMPLE !!!) + +@{theory_text [display,indent=10, margin=70] \ +text*[church::author, email="\church@lambda.org\"]\\ +text*[introduction1::introduction, authored_by = "{@{author \church\}}"]\\ +(*text*[introduction2::introduction]\\*) +text*[resultProof::result, evidence = "proof", property="[@{thm \HOL.refl\}]"]\\ +text*[resultArgument::result, evidence = "argument"]\\ + +\} The value of each attribute defined for the instances is checked at run-time against their class invariants. SPEAK ABOUT INVARIANTS INHERITAGE ??? - As the class \<^emph>\class\_inv2\ is a subsclass - of the class \<^emph>\class\_inv1\, it inherits \<^emph>\class\_inv1\ invariants. - Hence the \<^emph>\inv1\ invariant is checked - when the instance \<^emph>\testinv2\ is defined. + As the class \<^theory_text>\class_inv2\ is a subsclass + of the class \<^theory_text>\class_inv1\, it inherits \<^theory_text>\class_inv1\ invariants. + Hence the \<^theory_text>\inv1\ invariant is checked + when the instance \<^theory_text>\testinv2\ is defined. \ subsection\Example and Queries\ @@ -417,24 +429,24 @@ text\ A new mechanism to make query on instances is available and uses the HOL implementation of Lists. So complex queries can be defined using functions over the instances list. With the class: -\begin{isar} +@{theory_text [display,indent=10, margin=70] \ doc_class Z = z::"int" -\end{isar} +\} and some instances: -\begin{isar} +@{theory_text [display,indent=10, margin=70] \ text*[test1Z::Z, z=1]\lorem ipsum...\ text*[test2Z::Z, z=4]\lorem ipsum...\ text*[test3Z::Z, z=3]\lorem ipsum...\ -\end{isar} +\} we can get all the instances of the class Z: -\begin{isar} +@{theory_text [display,indent=10, margin=70] \ value*\@{Z-instances}\ -\end{isar} -or the instances of the class Z whose attribute z > 2: -\begin{isar} +\} +or the instances of the class Z whose attribute \<^theory_text>\z > 2\: +@{theory_text [display,indent=10, margin=70] \ value*\filter (\\. Z.z \ > 2) @{Z-instances}\ -\end{isar} +\} EXPLAIN VALUE* ??? \ From 502f5c5cd2e5109df2ae3bcbbd3dd061100f35f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20M=C3=A9ric?= Date: Wed, 2 Feb 2022 12:43:51 +0100 Subject: [PATCH 15/18] Switch to lipics template and update invariants section --- examples/scholarly_paper/2021-ITP-PMTI/ROOT | 5 + ...ed-invariant-checking-violated-example.png | Bin 0 -> 19529 bytes .../invariant-checking-violated-example.png | Bin 0 -> 17275 bytes .../figures/term-context-checking-example.png | Bin 0 -> 9204 bytes ...rm-context-equality-evaluation-example.png | Bin 0 -> 10341 bytes .../term-context-evaluation-example.png | Bin 0 -> 10525 bytes .../2021-ITP-PMTI/document/isadof.cfg | 2 +- .../2021-ITP-PMTI/document/lstisadof.sty | 32 ++ .../2021-ITP-PMTI/document/preamble.tex | 12 +- .../scholarly_paper/2021-ITP-PMTI/paper.thy | 309 ++++++++++++++---- 10 files changed, 294 insertions(+), 66 deletions(-) create mode 100644 examples/scholarly_paper/2021-ITP-PMTI/document/figures/inherited-invariant-checking-violated-example.png create mode 100644 examples/scholarly_paper/2021-ITP-PMTI/document/figures/invariant-checking-violated-example.png create mode 100644 examples/scholarly_paper/2021-ITP-PMTI/document/figures/term-context-checking-example.png create mode 100644 examples/scholarly_paper/2021-ITP-PMTI/document/figures/term-context-equality-evaluation-example.png create mode 100644 examples/scholarly_paper/2021-ITP-PMTI/document/figures/term-context-evaluation-example.png diff --git a/examples/scholarly_paper/2021-ITP-PMTI/ROOT b/examples/scholarly_paper/2021-ITP-PMTI/ROOT index ebac2b7..e577066 100644 --- a/examples/scholarly_paper/2021-ITP-PMTI/ROOT +++ b/examples/scholarly_paper/2021-ITP-PMTI/ROOT @@ -15,4 +15,9 @@ session "2021-ITP-PMTI" = "Isabelle_DOF" + "figures/three-phase-odo.pdf" "figures/df-numerics-encshaft.png" "figures/wheel-df.png" + "figures/invariant-checking-violated-example.png" + "figures/inherited-invariant-checking-violated-example.png" + "figures/term-context-checking-example.png" + "figures/term-context-evaluation-example.png" + "figures/term-context-equality-evaluation-example.png" "lstisadof.sty" diff --git a/examples/scholarly_paper/2021-ITP-PMTI/document/figures/inherited-invariant-checking-violated-example.png b/examples/scholarly_paper/2021-ITP-PMTI/document/figures/inherited-invariant-checking-violated-example.png new file mode 100644 index 0000000000000000000000000000000000000000..ead1fa5153396de6b9cd4f1a6cc7cab0d78e44ee GIT binary patch literal 19529 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 literal 0 HcmV?d00001 diff --git a/examples/scholarly_paper/2021-ITP-PMTI/document/figures/invariant-checking-violated-example.png b/examples/scholarly_paper/2021-ITP-PMTI/document/figures/invariant-checking-violated-example.png new file mode 100644 index 0000000000000000000000000000000000000000..bab2aba2c969794c2349cb2fa33cf9f1efbb64d4 GIT binary patch literal 17275 zcmY&=QtSYonUN7AW8{cA z!{lT{VW2Rf0001B#KnXZ004j?e*Wt~0R8+zs1>sPG{6o5;z|$@5bL|LI{*Oq0OCUY zO0GJWS>RgImw11tyPVcNEa+fhm`ej8MoYy=gjCd5Jw6&t>RrSbHypf=-Lf5ENtu|C&dwexubI>e;RZ`8K!M$S z`OuI`D=N+n!uYgg@$pGXgH1_m_5r0~^KD}xApn55{Q-PpY7x;PAsmqaZ4J&zYkk_( zbb#@hUD_pJ(>-IqJs>_ThW)a6tY_aMRC{I)Zq89ronJ=^rqKLAe){|Vtma=0pDdBD zFk9>CeSd#JmzI!dRJ>!>x&70ii-6?j0SRqCL;vdc1yRLJ(Pv)#N52ZXh&`m00mI%d z7egM#tj`E7xy3a=q%fZhTj_U$x83gtlgn2Zc87S;(Ka4XqLv-r#J=h&>l|K&1<-;< z;^GRF?|QDimfAxka4hqRv`U{%1pR~b+S-tS&zcG=pXIzaoH+3cBsY$Q6BYT83Kx&T z^6{~<79HmtOr1j$9E_@BGd&*TuOOpjA}$SYH1#j@FvR@{MuJw(RGNc>#(k8C{RBuN|CS zU|?JtPZcc@vw31pFAKt1yS3IpW#F_&H?oz~!|tai+Jgf0>$$HeRE=)7?P0BK+Be7d z+umwihQ^t)apoRW_dm_6T;eYsp~X79lPcH0zBp5dmwjHD2d98ulbi?kzO%%ST39oL zImH%}4lX-#6fCXrObKTwop$wEHFY^>hTy_J)eC}8e6^blCBe9+im z&z~Iq5H|7iTizC7O5O8EhH`i-il~QHPRSXnroUgtDC(UT$mbJ~hy%?fX+;Jn`hJV7 zi|d)9U{+w22OSQdNH#89hv_^EWxNIwqp;AB!Olau>L>y7)0hx6e$d{<=_-lHAjcyM zWNE$#b8ph%O?H;QTW~EIM|0a6R3t$aQ=fkpfFCZJI(0Dj91Pjl0JkYdZ*W-1AvRn0 zX1>-lxS*NZE6&U!C|d-e+`g0B3^vyq`JnX>Dy zqW`WT6;vO~Vb{0rX{Q@M(kAw`%bqYDnCh+|eI#nmz04Nsl`Qo4i1ahEwk zEtz#pW?kQr&BtJ6Efb?|=}#^uwWfsA-d9~aG0;QhpV1Ef*M2wt4r@QYcQy2n){>gN>uR6NqF%iVj zCs6;i)6AYpj)IDY*;Uj;*|uK{jY+4VVLX+fVWZGi7a>)|_x@V?HQauUWvwie&1BqD zRo<2#7*~DubsFqc!<3NvdlVUJAjHZePdzi6`P*oL@7n@1qc0@e3+pMt?#4(Rvtrs- z8>=Kj@E?lYuG-QyvF z?W`p0mw9p1t~gHM!-n@_OInBD*YjxLc zQnT%=dqP~)$8w`5O{+Mu294VMFZi(Uvlgr}uG>uC=MdMjMX_TnxR!d9G3I6@)x`(O`6I5D(22D^*#pS&TXb3h&ZH%p3q+;0&Lxk91d7A z0E7l83HHEP-7TL)5>u9W8UKRNWP+-C)5cRuCJggZ!isj}FRnF5LYCmZZP+e0GSVI~ zq29WjNq}aRg8X>>#mV zF=E7?+|1Nk=4fw}5K9DRBV8~qNK972#DY%NixtBN-{VopaOTRTA{;sMmOOo|1=!HahIJRi?9?*Hw?eI4+stLQgLjk7G3{0#ArN1GsQq z@+Y|_f|qe?koD)c91PuECAogqk+?hg3;w0?LArLxZ&Z^&>rz^?nH(H+jPFOyJ8qvW z_MF>u9RlqVdJX%-u$61AAxLFX@bAv~D??ahPP`a#NgoG&*3;I4<5!?o-0OX8|FLS^ zhz3rS??bOxMfIHn&}AwDu|Mh0rSTRihUkE<`=1pqVhJYFh@t?3ljTsD;~P>dN4on} z3%`dK@%PgG>gmVH=|{BZZ4Wm(A97Uj3L&&@>sCbL7B@68e>qOV6M6VeWhBq_M1jD4o zc9R_2Wn2QisDhfHD#>RmqYk0JXv@tF!>8&~P@D=>oqap1aLX-HQFXbsW=H7KKuJs? zlTuQ;ax<&B39br7x%*xPex%2CQY~l11#|QA!kQ1w?^iYBL?>^T@z3UojPyiw=6bQnoNhUS4+%29As*qU0;6N5%)l)&-rn%QUUQ}z+>1_Raz}L;} zzQIh%vM($wG#Xi$h-8p^PlG|8cz=N8fp`2J7m;Iq%k#JWvxwYiwC{YivKKKQsBt?Y zJepA{IZGQPZPq0Cer|3zRV+W-Fb1B1;iU%=Qj^yNLFm<%zVNn(0`o>|_H+QsKmMtj z0xa@4B(dmP!ZZ+BD(6L0{f7TB$8bT$2!v;JlSfw4YNYn>0G2}!F*KbiN`drk7F-DW+|M0a9y@L{aszgMUt6-s#o9oO)=$J?+QU!X?u< z?wL@l>G_WkY}sNTZBa<&u+Cq0-s=XJ&neY7qS{)^TCN6%%7YH7J=2<5L+9)v83|z2 z9PNEFNd6Dc7irFB533e~if9z>uCi)JXm1ZABMj`NtY;F5xta&AjRnxexrWEPy>-L# zljw)`QLs_lj|O>Ej|KcfyHf6`pWlf?nJ3>o_vcc+()lC`eb4riM9LJUN3N!x{>92S zLUoyJHpzQIL$d}zP)?Yi z>GgI1A|At&a?5+1YJof>XR(W|Zk|LHV2ntV5ioU&P0kyIa?bWH#D|`py;~m^Eqw{@ z(`)6;uN)OcG3k}toY`P@GLVvuc&k%#n0&1nK70iF@}TyJCr>4bO*;^6@2Z56m2D1t zlW*$e^j47bTHvtE@#SHkXzbDPFkudgYvOZPi71wP67EQbB_O57Vc*IaEP^1I%nQd= zXJ!$mJ#n*GJ>v3&G+o7BOFyTq9Zb51ari#8D`%f>YF8Y&xh(ccwIT9{gu|`ZL;fb` zFD~ziyDdlgSoCzwZ&zpjL8#);yV2A1Fo9#^l%_nR%OePLzt^Fz3z!TszE*d(*;$fg z&;TKQs+G_e^Z&SWzM1`kxdcEOYi-;?9>?Tz**yv7GHu+Et% z$y3uQS&5B51H-$$Dpc!F!CjbG#4)id1TH~DC`Lz(?lJn=kDD}{Ty~JsxnrRgp|d}O zQV=NkA)9@p-M!6VvZXBjjV3s%72(qf{t!HLFpjkr zMIo6R?CZY0Iv_A?sR~;X6lAVIi>G>C53q-wb{E9|R(FAd1%ux@=~W_Qx)2DfO371_hXR zb5qJ|HwhK+qMq^gvcKUt1yOPy?S_K?A(k)F?rxuWTQDvx&l$$^3VYL0RFlP*BcF`* zr8o{08MaJ{MKQrP6ap#4_hjizC6&+63}TTpz}*}ygdPkXJ+uX6a#m78kHi$Ix3Kc& zzFepJlO#+=Qlwe)ksdyWudG_f>cOI!emkmAGE^om6pmL;*l)fL6NwBSQMWda@v5dQ z{w&u0KJOsIYEHXJK4;7Y5xHfn=iiXi)$3is zlaZFO^jy`B^QE-v6@h|1kiUF9noo=UO^F2i!DeYEFwuZkqrf^ATI9gVQYj$cEQho`l0W5A+!tvGPzsJ9!O#B(lsKYsHAuTU@sd59#)GtGTiqlO-D@!#o`Pb@ z5U44@49&X|GJ7Yaf#ZIaGGUZ@el8SdMcCmx+5oOf-sI!3y2`L9Yxcdy;mcj`ZeZUY zOEwsrK?QYqF=&#WTL_Pe+Az@SBi9ie(Z_l}kTN)nH*?Wss;TvHA;L$bFPussP^r-_ z+TfP}D{3~UU&0N$jSIo@Oexs<8x>qq*Vc-Cn}E4%x64$T>_z=TF$ivI{zUfrluHxF zakhpJv`&ldbnkn$NoK0-$Pt=9oINp=UrbEhc5;kv=#zs=1Ll)b2{rrPVm2ACmWe6- z`En+do45Re>$H+2Fr>G)=T-b)<~P}lLv%jB-}TUg!^3;OKe7EiGtKN|Acmc5kM>wq zL}KuAHk8z&+fbsTa;JEvkR|x0u$E5+sLZ%8ZyW6Cksoq!=7Jy{OwT zl6G;|vBYmbsvQ7HYDclA&)%(8p3l{Y_54!vEAAN1ZCbW5uGWQjxlfCKXSE<@NPO#D zSqR$4QyC}AGdpAk|I%zA^-P|;Q*=>Yw|^gMoGZI!4a5_GZHVioM0s;GhUOGJH(p3+d&-8$RsJ;V?T(VGe@mo-hZZcI3Hn?!6F(}RGnxq%g%EqtuJIh zeumpq&+KFXPSs&r{Q3C0&|{&4I&P(0X4u|l>vWT1qo&S@<5wSJ*KLEP@yB6gx4L;; z0(6HyRZK`@-B`7^rlNxX+!MibsLaNV zL0Cs;T)SU{lyn7-PN(^{TY0%=z2DjeyoboDzL-^b{5n_7xJmc9BE;^ieiZ;VC8%@V zD_7++V+HPRzU568(_l_jQnBa*oU2Sg)^tBa zaqp{>Zuh}lL>L7H209Lo)f(HE{MLNYRd6rMmG5nVCE1M@uUG)WeP>3|bYr zFnbtJJMb{gV`J&-%PCetbgn;ocWyX@_^9TuPY8F-c?g@4Fi9VQ^$&>|iVBH}{pG+{7s_2|=X2Mn>W;I-9F;jjKCw}FN>|03=`6oX5eD_rn5Ve@b8jqtjWHcen0N#IXo)rVdu4(d`wp4S$oNocyY?U zaBlQ$(f;h&y>4l*g7Qkr&d7Lr`dW3m>d5ZD2P@sjRz~#nN_4ecja!MlpmSlhY+XCx z@}b-Zg0|S_7QEaYs$xK8>Pn56A2BFA;tr%!T%Av;%FA7-omSZAnT#lE8 z!(Qd8|2LFS<*%4YeaJ{#gLK5G8bwJ7NTV0}exB35z4i%asu8^CbjW(nQ!^yHU^t(zL@6F4 z1up3mw?U=5!LVVypwf_DgkZL82WCd9csiRB1$pZ8wAsFpVBKlB-QO3FFZyyga;~m7 z?W$I0wotdsEV(8v^oD|@hYcC;>bJEwY?-^KA26J?_Col7si={GzF0=MrX=O$q`fdZ zmR!fN8||C5jVT&OS;KC(liW!@Et`0-X45f0X9u_Y#YbR^#09?2og;Vytyb-)X~<=- z?!Y^GESn0`2G4`!rlfRlxKX@0_m!aG8NlLcF}%toWNcG&Ca;!s?tqseZ!+ji{1LSt zk~qJ1nWaat2=_|zycs?2xY<;WJ;BZiOSxcyel^!6KJI#3B`zxB9G0s*8$aiuJI6=3 z^g>DmL5T$3&Dg}eOV;@sWB0@#*)2vbtGo#e;9_wLTw>eKlzBJxDLlNxDg$Mic7H7U zvxkt-NCIlx%5YpUQ!ao1sG`+#HHgR6FR*R2*SjZgLgcb8r;7P%<+8B=taQVm953+f!@T^wWeCeee z_NI9~DD94we#nFNrcBPGs`K1pY)l(mX}2XIl&oFkvu3f3mqOaG7^b799Bs-AX?K}7 z(3Tk&+oU~F;HQw6{jqmw5H0Un=d{VlT@)mxXG8caD;Pwc$cmc(t(AkR^t|??K z8#5HL<4f-(@7TmV3Dysae6rJEoH2<8PyVmY58P9r zz$_QtRB0u{wlhQll`Pj9O{FcT}|t4iy`m_M4DTF+9->M2GB%P zJfiEGoo}{K$gZ(G%@8i{1U$aV6cu0klOu6{8yuz0<$?RN*>3X}9CM-E7hewOt~U9G+v~owTX#}Kb>HHbL*D2jLqn>%3Mi6^iX4}*`!-#WnVq8v` z;sp;rrGI^tuRAVC_|-#ynlyi@5psLnaf%E$>rI#!a37zf<-v`zjCqQ`w zaA&CQ?t13KzN6f5@nh}|R?5AZphW${CZm~$PeG@r=QNM~e&-ijvcoUItFV%5w-@(= zNp~*1;7CQdHOuoE`?8`mtIYuUd`)+eB#WKDzSaeO0x!ch+^kyoOHD7VM_bKc`|#tEzQvftW!-0Q`8xa?c*f zPY3NJ0*1>E2LZQO!sLytG-xD+H z7~`#s<6|EKHfV|XN-1cqkQ0+q5REp`{gY!#(XEaE>g?%8E>>Q?J#d82>3)ouaGwEG z(1S)_3k?qd(w@bqaB~-d%{H&tbSAS}H_%KJ@uh7^SOY#os{%Lh`3Gc1Ce|k{P1{&T z7Vq2ibFf0!)c&u%YYGetKEzLdIf#d69#8Zl2qWNsX}LEp2mpSw+lzRAG5G-CUtmCH zs*!yH%yWU@U-m)V&tI-7dtMq6+qMLjM`4Y4wrUe5`I&wm1ONd5{HOT>0DL$`=Z`vV zX`ZyNWxX_Eo^jsm^BsPrj^VSKaa!n8Y*X}jv1@!D#y)ovDCuu#yR%8J%7zm)Ot7!5f& z0qSKSgME$6<3ZjYgO1!4VuBFlwk9>@td1 zZ%!sgT|il27Ts<|r+9{*o^Or3Xdrif{a+b=n$VZku&}xsR@vAnQDEueIT@9dtUqQ8 zwc<}Fp~j5C<>Nh2MDk=UCrFPRIuWPqX%G{SJNC5Sr8>25(|^SLA3ume;>%!AaIwRS z^zgAhPa4QSJM(Ab$D;K_LGYzl6ZtHrJN``8HAinc6&hKT6kXOx$-GT-VQhQF3xV7K z|KC0E%a;BzlYb(&%e7sCTf?SdX;4tsG|VcBq^KSNhS}PZMJcoAbT5c-&c26nR9$nU zU8c*;2=;1>D6n#CF>1Ac_w%o^8-iw=ux2HTmKUym9uRKDSRGE$Gm%5U& zf=WdJ2^|T^oL$D$;L$Wzb+|q&yAvh$7dqNAB!~!(34}S&e@Z{N(*fM|hnTjfNEhz56#%ADX7lqk)H&Mr_7DjnVWY^25!EFm?o8x4;(Xay7U5A1c!KM> z6Y}G!%F{!sM9gmP^-qw*OxI)95RG zi41pmTSXj*wnVg7w&ihzgg0FM82@A1+-F3- zEQbF%8M-eHlmRsz#mrh@aqsTS;khmwM1jSfX!qVcYWX9T|-tE#H18L3=RVQE)a6NFChU@~G7FTa9( z0@fh|gFc)V<6E)EXjL$l|KrO)uJfX|HW7Yml;%x-W?(wzvVgp%sLa%;bW~9ZB>V71vjc`4_&*@~B>`mWhtSCj zzISY+7~a2&Z(war0Ma{8xgqJ(QgG8y6$P!l+p}GTe)7Lv0Q|Oue{fkrRW*c?iBW>U z;>}7sXms=to>)aw(jmvg4322v>1_qqn42E$zX;bJ4e*m_pV3|g*j-Osb;YYGX=~q* zn)V0P5CXx2N!CnvHJ(=j$Nx9ZelmzCkQpE%u~mm>T(&f}b?#sdwUyV6SnWDT5Y+g% zV(YG8r02P9Q(n3M^`w8*lBFQWfYPDz=@GcTL)poV&w zrKEv_0R9Jpej?@O9U>Q8gc-{=p3;kC*9U7mIM64_WrHzvknyUhXBsjW^1tf<@TZYDhBpSi6i9TxNs(A-Ms?P{c=24?*K)-ee(15Cst<+kxUbN`wo zq)+0NkyZjrQ>$vq676wn=!{G-`i3P5oW^H_fgK%LfUYPfA>mJlyI0Zq*;f99^~I)p|NO^>;dF1__55oRLO; z+JDgH67dDxB=W7&)0KnQ<5h^KO*rl*#5yW`?GTRgK>_Hnh*xY3>{3{`Yr$;?^`9Qx zsegIV(FvYVouWps)n14zR?oo3O|;+m1M%-NBEVEs<1rQ?UC^d5-7d&JvRm26p4Q>g zEAlv9c20l+Ybw$rj<=iDsC8Uk^IA4NS*p}OKldu|$@fRVl&$DU{#+-~X(SS|iq8C8 zfV5z>>h+C&lxKuQfzi@qx>DE2Q3fU=^^6V5wp>d|CmbTd7WX>mmkbrgG9d-On4e9t zxWKmmT9=Vju2J6zbQmcr1H4~)zCNz9>GHboXGAO@w0CgV|18mj1!e>FwDj*GYzsR; z0AVTQO1HQ!$m_8EsMdpflrBjnWk7EJns*+h`%|=A?n`Zsk$)XJM6`4;17u=kjos?n zn|)6tZE~t+sg9#QaS%3>@v^~ouAOpvKFNw}hmYSKObbK7WOFS>x7bSn`SJr(IvdGz zu^s4kfq&Q7+kx9S3|#P8M0dl4AP@eDg&Vk^>|I{cM3vi{4h7!f%OUnO<+A0Qh;M~| zNhZqXx_E{Xo=5b%f?o`&7?!+~Iv;xveHaZYQK0G4P(#ZGJJq%;I2?{x>Ag56nv;V(Q|jp9lU zyEN3AT;>u~mZFV}-|v^P^H{2I$p2WiFf<D*G^o^2yC$Z2rLX>D_ zSaJEqEm@JG4Xr1;;e+?!DOHu`$Eth7!^Yme4H$K(EXTWT)XCv0+LgR6R%mKj_t)y- z$MQTl)C!16zheAwvqo;I$d$nXg8z>nPsVis=W);(LJk7P!u(UuN=NJ~oq>jE;=ZH4 z9oq@y{5-O1hS4z9!weJI)E(RSY(aFM7U@CJQHgtl!)AO$jzdtHSk=bzaF6BbKXAqw zV-ww;@@qXh#_L^deog$>7dgA*&A8EqQ%Zq!z5OI^;9dgy*q& z=$;TbT_fH^6N3Ul{PoBX(V|ei*!Vu)CAW%hpzN6E$HN!Ja}LvQb(?5uL@(NOW$O}5)7&~R_ zwB0im`K4Y|?BE%Gt8iF6QySA@pB6z4KhV`EYLAc<-!}t&j0XRgO<_5deo00}dDeyr zU%~Rhqbf{gp%sGAJF1o5?FC3%+cn8(`4EaQduFdHv6KKuAD>0)m5UdL17e0`#qmas;2aECFMDb2!rBQKD{C7!G%%`yuz=7R1uIr2V;*n z`g=QMc^1F);B<^-TU6wtgOyJKKA}_T+cAU8@#eNbc86Zb-Xhu;CgKkq9zB$ZBpe1! z5CrJ+GzV>zZECA2F?Xh+4NXP4RQRhrEPrMlf`#%Qb(As$&NM{OzcM(_Qrv=412`8zy(CteRLMqa!QI`ijjyP15G^Pe57h{_a{- zn~v3`vF{(>iT$kRJUU_=r+>6RZzjdt)4x0?CMXh21hV74h@lbJn}bD8(V zZy+TUH9+#2Jwxcyb_cp1=t@9%haq&BetV`UInQBy!MkRx)9OV=&F{>$A}56{J+wm1 zp*J}YINCpGEq-M@v!+KX?(SLMNg%0xrTaDp%h8<)Bpokm=%g!>NJhG-4}QBI0O%fR znIKCTI&211+e#n_zCs=!k+|zCdNh4eQsFHzeu} zqbiXIvc@{=bhuP4BA9cu3+*Ptj8Q|HC1qEf%Jb>%w(;m1FBBGA3*inKryONCXUC!nv4~ZwD^pkWHMy0U-H@KRwU_EvWj- zrOY`aI2jt3w`3nV%um`NN2MCIRG-e5g0nR5SH;{HoeL{ZKQwOUL-B7&65L3{Zn229 z_h!5uS9|fg9#%X1r7V6K`P(e>QloqJ^?c_r1D$|@xHAL(Jc+yM_19Gf$dpNBBHfcc zGZmnx5FpsuZrVF&x+_r;Yvi>B5_w>_=VeQbn1wjYBiq!<;4!2i-=~Ag_xaxpPYh(n z`PZ-82*HDPT;_KXJR|# zB!5BvlheM8|I1hA2-nb0JV-v|(1xl$IFexCMYJNkdl;YRdM1SRrgR1QT$a)U)qSE^ zlmy?dzFhZe7$MMq-c|YM-p>T`X8<5Z!KA#+ZHb=s@HuCk<4rjt` zF52;+I_PZfYw$mW%nugHl+UBtBZR~^-1o1pFo5RWjfEQ~7sG-U+I!O5E7jv@uq|S` z!KP>(vCCjW4xM+Ru1}(Sx7J9%M%WX4fwLq=(qG>HvfLkfN)EI_=PiHQvO|WWit;Mj zo71xu%sU_7n(RFi$P@3T9?{=}O$ndMYPUlQ^M>TVPIoB}(Z0IU_Zgv;;&Wz9Qo6^P z&u!6Fa(wI!B;N$Bn&nv321~LuyDtXGi+l4n{&XBFF!g8 zek;*AL~4urC1?$YHT#(X4qPOKraDVwN(;|)c?|5AwT0Oa%}8Xu1~*m3ECqo0umdvn zi2Q2R-!$=E8)AxK6`(7LW-oTT7}8mzalwBC04kI{X9ZcFf|+nsI<6UOf2U8WJ9#IQ z{!STEP?o0^pS+I|685Q&@U#B8khyF5ZYBbNfxF1(=G4&g)2;CHakARaEt83lmRY-Jz5Y-V*N6COU)$Wg zzM^5XL9+|7OYg{56_C>?tw{|C*a@}!#nWgiY8jo2Bhh1ebY||tU2=EJs;sK2ysW*; z1qLLxmiJb&nE4v^9Hud4oXk1eJXBbnA}BRlr6l9ZRBoRBDR#B$v8Tz{Y#X#&t}6C z$eBJ(Fb$>d*w zg16rGp46M3Sh{ZKFc8p;-KMxbm;4zbhwGr{DE27zEm<_nmOU{yEN?iaiv=w zOSthalwv`(7$PclhgC#d06s#o$qAb*_OYy17)bvmQJ9vp&+`Kj_}z>l`+I;#V&@$l~9|c=Q%c4H# z&s!B+)5r)Jb5An#^eBJq7PCiK#x&xt8KuP8J;a5W zEYaKkD(4A;y^9#kQ-|Kun#bVVqA+bw&rnrGjwtyvXVDZR11K5@1@mcu(OJEcAuxwxrowpr5 zKC5V8q#BZ$=WXh8FRe&?xG9-}a442hGuQ|b20tZXZ0E}fUsn&zyO3S`G;;@Q)-@b zKNYay{E?}5Ow@cGXOSR^pqQ7v{c93h*r1cN5mdLjyYhKwgp{sw+!J#i%kjciHgWP@ zUJ72*s%O+vV|~4vf=F1mi;9Fs9Sh|b=p_jWZ|Loo46MV61cec|^2-yW9f%`2%WUM~ z1loM#cEhAMTpQ2+W>VVM*LoxoY=$0KBrZwM!RkE zj+3~>C2ql#CCkym7g{vQh3mF<*>UyMEk`z0F6XAnW*ov8mlm0_a`MeMx%_tFFER`g zjE@c|*De=N7PPhvjdHMWAffk3n7SLy_dXWSgKhT$sE`7DVE7Yez%QqJ zt-Y-xR5r}2h&Jw+N9|kbRTnr*PTWt19(kqBxz%Z(L-xmH3zNN=m6_W28lAkR%SL`5 zWx>j@&4abSq1VOR`^XzI{mX4Ph?8BQfN8KH0aut}zYKULuzG3^88Q4{Ue>w8e%Q~> zZ`4oF2Z*Ni$@pZI%BfFC-KXAL+dskxh88j%ldURpa&ky6T&^yU5K9^mCvxTr>%AVF z;zq7ZC4!Jtc);LClux62WN^0;=`ju*tzQ^6p){2J5VM{m%{{4V0hgqVB z+7O*)4PN1nAs2f(kbn^B&gHq=49WD2z{}NGt*C?_u5L5VE+ZfvkFXaufXTmZ8vcQJs>>zf9vFx|1f-x@DW2%lG6|Kh)DAX^I1AH z3fjT^Xt!Oy08fXq3|=_uAhKsVFVk8mIxMD-xA&qcu+&i6JPykiFZ{8QO7CYE+3*X^ z5PR;%s9dMql}AHyGvuJ0Z0-vy3u++<$w{b4#L7Kg?vEZ@m&Hm}-< zy??>V*W1Yl@Ve8KB`YI-^*k5voAk0y$&0;^a^1&>1t*HSTXe0t-zoxTOA#y>5%YL` zC8%T|;b=&g>z{$OKBJVFDWtJVygr@wvk6~v zt2a9|F{Ho7Ws%vt#PaB_*2&sh-;6D$45Lx6df;u@Z-a&*LDWCNR_xVrbX?0R_Klld zOJIt_gGDEd_7U#U?B}t&$EPgUvuTB7H6|(cB+jcQjD-burYsAN1+zbjV#x|jMLV0Z zMT7cOki_2#m(k^*36}PQO?osV__HRn6BH~4qBt2XxOrfcChV8rmC zue{?Rgs#Dp1-&52yTJ^swbpjnnHmRp^6hNn`+9lNIi@s#l{A3vl3gL6)37&gTBRms z9Z&hTt%2&3T{Ut&N*e5i1qwAbXU=^UW5292-RNXqA{@l?@xBE3sGVz|m!z%eJNHZS zcq?J)i)xAnz?~ogmk9XXlZ8v`G&YU)r8#-|HhqSG($;=(aMqts*OXWTq`TGxryMEi z$M+Z8?8P)*OlX^ltug$@`t(A^t&z`SH~BR+;fFUL23h7}(iJEgWBg&|1Ir&C(PHg1 z!p$;a<==WQRk9NZG&BJR{(B+)hGOh>Ch$x-+i(z@RZAd(78f3Rh%}FMFKBW`IVibDmTp{6O{PDYE>(IqYNn2EuY3ty3O4KVCRJCXU><~!US7QATg`Fo_D~Q)2<3| z&U5K~;1D}Ihnx$?YtZ$H8@iI;+Ke6WjVf&o%zT_b^yq{d@Wyv|DjxXqO99BVgT|r9 zhfGi-Jsn=iywW1DCWVEC1%K}O+Rdj7?{8%^f_0W__Rm)Wu>SR3fR|f}BXxf6IISGl z`>l>I)aEXHO8=4V0-Nn+r&O>XsWu8w?$`eiKi^+~jYx)0(lEs2q`_2OEFKH(M(Y9J zIA|ekjz)cL_>V?FFm2y7H`^I8XbQ6poGsQs64Y^M2#5(oSH-1|?5ZAD*B5#=b8XjL zX0kdQPFCbSW#6b|Yg;eY5?pBu(yR~ebv~$fIg4B8oM`M2|4JNxl%{!b9({2J1O{<= z9%v^rSgmuulzX{F>f6w87Iwp~e^|GbToGskT{CR)9 zPMcpBX+v%N=o_Sfjeo@i1hCDkD~Lu~v7;Rd+f`f|V7r;nralGBnv?(7D3(<1?7wyQ z%S3>}{3ENputCO(;dm_!^^AhMZtg?mUNX!r%nb=_JJ@SrkNNT5o0*k8v%~rI{$Ez< z7z?1GN6cz;0wDD?|J^-rvszU6{oLp~?OE!yEVb@9!!8H&A0quz$l|vx?)$ylAEIn_ zqgeuhQ3r=N#@DB@)c;7L|4XTuI^EIx|LxyP(SM(`kDnHGW1aJV*`tj|mwvst_3BH* zkCwgyNw@F6WVnDbn-wmYaNlRGk-1IUUxr;Jx3nGmTveZ$cdv-v@#E)usr46sS)KK_ z&b_O5ao&|{lcH{w9WU<5+V!H%!fsz#{OyaOIgK)q;Y54Jchx;ADk>Tx@A$dj{_SXJ zx9w*5%Ge*9XUNgBOGZZOFm#B?Q>|f3?z< z{S6yz29cprPo05jv7S2@3w&B1c%p+UP;B0<;sbe*{yu0v{zVZ}hX1~IMXvj`1omxx z81CBe4cY7h)dTzU=6T=QedUqc;!?xy&sT1^vh?n{dYfO#b&FT*TDp1u|5JspdTxL9 ztUP~yE`PPu{7-+=MP1#_9ypf!^3=@cr@P;}RTOMjzwXD!{YEQmqpx7Wb%FR1^gf6a-}N86aej|6~#%goH55J&%v%p7D+M-0z!6|IX01Q@IG@#!L3wJ=#)w~g_3B-(?N=;!y?WlR znne9^v0p?%gVyf&`RwnTzj>KrT;K+KvS7#JT?Q8wPqdFREe;BXj1a z$i1pbqaw-wd^Xz^H(o#aV;1 z%Ov(1YFUvu{p^+d)d92hTTks&O}VApPA8*>3|b_5<7s7i2XDVG^%%3uwnZrl5@RPv z)%p3kp9~=4>&njEe6k2RF?u8sAu7SBq1R{`k8>oNwMYO?=nw=@cs)}a&%oifhyN)7 z-(}MdVWKusskNYVNJJG2BXo4NA&AH2Da@}lHS@VyNJ^==-211xE1rU%vsNs>G6;fL zRp%n&4!tS)#6XzzF<%(yv#Ywu7$>%o%kJwPGCW zS`5R-e}LoL#NW%c<}dO;?q)D=n91S$cRli$5Wm#tM^fO(0h{eH5RWY{E1S*6VzI&) zTK3k6>S@dTgRMk3m=X`oqmTMMBWa|^08s(HKmehTQjCN#rD;jQk8@v_)>m=SR@PQ) z0zGE+5vGHl)prEH_tQjXRi8e6XXcE?_946Aj%KGc69y3iP{F81+O)PM{=~1)ueok^7 zWMtd_$}%T=5hdk8z-1%QB7H?cP;sjy`Uv$?1{Yy~vk5YrzKy6SO5kNxhaW0Qe9tEg zFqnF(kCX5f1wE)D!c~`P!-N^?!?Je%O8EM@sk!ipaoZ=O;7f`}dhz`zMjeE<-DtOL zDNarLBED<^5{nRjpM=j10fWInd>+4XB*bB}QCMtOjJVa{$>;GnjH;|>XLg6Bkw(uP zZ`4Q$<*Aaa`WCClx^Ea{fC0~jL>EI`S?>N*cedxs zqm;kx+{auU6F&!i42@0~k}JIN0d0n;zZLl+0$3=$^2DR;Dg@d8{ z8R=;0W8~|BU;5~W#UZc7@)RVdzofXWu|jjI^0xhUbKtJ1x$ihO^tv3bL|zv7Bp@4E zOC60%@f>{qtI2U2MsF}I-x!+ss%d4)!J_9JbzpAZ4liGbuzJnhJn;L#m^oro0j8Ri z7DFBszG32F2gYwVlH){la{i57@tXhntcg$8k6cD5T7N$2tvvm*)E^SGRxg+s`;FgD zH-fww%W;+e$>*f~kaJ(6uP}ifTX=dURWQY3)f1<+p=OQTopZ4QJYa1D4_-Ss)wq!;%2TCT4XwA$umu zd9x>vdwwq9x$%}YBWsWSxv7d)z$yOi&ktO0pMM;a`oA=P_&NSk^z*ISla4!zsj$;8 zuUYV8{mL+L%fXA!uJr6jCPB5wFTRMk@jf4@lM@%Wj*a&hy(j`sU36+C+StlQPE-5A z9$O@jgrM;bVK38SN}Rv}B(9M9{QD5ZOq<2(vMBHY%v(bgH8vRIh9m)bvALHgcp?th2?|i`HvPKP6&TCKQTp#y`=iU#xZ}Hh^b7AwYZX^f|?6&#m`R zwL{cg^tQyPZY?g$&P7b6Rp%u}|9aww72AoI_W8*fjPlf0Boh=>eE=hkvUi@V-!)_{ zq2@x6o#fec?hv7=fPg1ziEIp|g@p)MAU_)X&jEE`!((F1f7v=2q)}s&APCuq;&kMH zPT-M76AlzJ&dr^1)_h;&$pA~S)~u3R6q$s9YCqj8BX3w^-5&|{4{(isl?gIuJ-IvT zP6dx(ws(cSfsmaf@TkSd@1@+#t}UwPa0CJtgmrKF>66Q?^e53!SMt7VV@VLZh53q?x$FDi`6If^c!lKS&|Bor|UHI z%Nod_3~eO&v`J`)$_H#)wH8w^oyPLCg+7w3H!})#dtS~-hRwR~w8hmdk_$U_Ye>M9 zwPTzPnJu}Vu-i*4EQ&n&=O}|c^A-m&&fodY19bj6E2wTQ+U8Dfpug%qc=!xq zv~n<{C#M$F1z3t^Cxiiw2X(^}a8M|`m@x{C7k$Sqy@x-dRGbfw-Txqe`h08Y>R0Wl zuz$`GT=&oRbRweB?A$d!rHYw0>U9esReCWfRHL>A43R(p|0(Rji^YZT81WE8@~HF= z(!c@DPG(lu>FLY#6&Fx6L;!qIjb8?lJdO3@%g+}Ilksw&{03pvpf4%JDPfkDBaJC& zxhe-qyq70-M4_ku61CFP-nxN47&Db*WRw%^D29#m%V+6`-)f9oWb6&y-OZu$kLgr} z0x3@w7QvwK;D0V(*7HQ0>kFFzq~Yp?W3DU{{=2+j@YlZNMgS>frcR{kn0--a$G%uS zdDDY3Q8}E64!e-bg-FIj@cCz7)-pgR|5@4t(S#)iuWfH>wa(MHHoxMNj0?NsMFD=A zpZi1`lC6P`8J(UdO(JSx=xpg!C$+vvUNAHY2MKtJCq?A*0R(hyNc;~)wUSsGHI;_8 zF>KsBX{e~ulk@(Z+b1#wiMV*-?Z4Fh@Me|H;v6k|; zNrjM>sfpt42Fg=~5*zC|fUi$x((H>bzP%B539N*gJ8g8uK~<^agTu$2yzhTF!g|xy z`Ekoc=6zm3k3iRfZ!#LvvVOA|m`+Vz;6M%IGSu^}>^e<&;G@VUZS zHYLGeuD4P8^H;||*5s9!or_F)p=Uo|2v!>d%6gsMinYiJnNdR+&-DhV$ihn}Ym0I@ z6)APkc2^cCBaXKmAjtf?md1y;dDSt0DH@75Dy}YlVPRT^z~w9@Xl$eD7!g%4dkGP= z2~7m7%%G1y8@YF^Xuyx^?#SQ^@J7g~P;Um8U8aK;Q9DP~qywMKQ6-4+PLGJMVcGgfEu| zqNCz}N+^DsT#eP%wz0LJ?X1`u6;V_p4r@1a&k9L?%R!EwkKP{6?GtS4b|cuOmI>)< zK~yRSEA2X?K(9!yg9i+K!~6k-k#B-RINFA0izm7IguWNkG8yEtGxOQzL)X94)1NZj z)-wr=xn#k3)ikHn=os%97K1N0gRDquyJ5bk>Rukaawmj^=tH&&Sv&wtduS36#xu?3 zCuFd`7AsDH8RWuK2f2_w)+(@1KV{@GgLar_t|>g^TBzqr8a`b+>87&WAWcpBLTdUm z%|Mq}a)kb>k;_taLZF#6fgA2c?Z|X!J8) zI-RAi{dUY(#;OnSI=aew4Si1Om1V;>VGd>eHbpu5owln|W-T362lCbu6B7g2j2JNj z{NI_smF__n?tIyQ_v5YHdNvBd$5@>W_8l*qmf=+$Kl3;wn+fSTUHg8pWKO1|pn~Z( zAdq!3aMZpxd|lVop?_^1(#kyGf74pTV05OPhIXHu62ykjk%NaOBV-ikPEv1#VEo~tPm+4jrbegrOV7c82 z7+4q>fv!V9`S7Xh;ecQV`F-I-!on$lEDiFf1zin%_zGUc!1M^?=E@bjJH0rJ}o zL79R}+e7p4SV*|%OY?wGwqHtf@-T(og@8c$CJNQSkXnldzLOG06;V5nmCjy0>H47? zsi^B+XUj$TdTZG<`;g^5^dDA59W8gdauw0^)Ap6|*-x;%mm)N&`XLi2z zR@@=vYxuXAf~6zKvJuy*Q`bT2vuAJN=B0Ppfoj^ytR?$K@LHMgWaRd>kq{*HowOMA znL*gS(~m->zLRqf{Rn&~yJ%$vv??M~sWUV(DlIMJ@_@a7Ga~pTl3sC1C6~i?cemC8 zI|@__HDlSZu8M`n-!-ujrH0d zpRv7ZWV=3BRMb~g))^TYfy)5Ek#>1`gX+HiL9LGlqn;{ z8E{(IxO~R;o1cOw*=k{%If5yt0;l#e1k~u|cN1i)tLwp@pVG22Bns7+Lg9i#Tm=GP zD(_O>XJ+NFn5^ua(w3}c^r3k9LlLmp8iKACIM*wsjJ4rf#@?wEeL@$tnB4?iSPZ2I z^gL^+qcOp71$4b~bMrx~;_T=E6nvNbA@yShlgVN-n1w|x-uR)Vjl;Z{HB9LJ7 zCIUp})w1^A%04txNDU4!0tyl6dDbEv*7Lx~UKj+@!xKRSU1TcY1S%w|#br_i3W>rr zQW?w;@W5e}0zqFh!qy3`^xqUB2uJoF1bUveXlvtWbQZ7_vbnj7v*Wwu_go%t&;WM^ zgBhRjmc?dUksBXqE?1e+t6arT>FL7rz8oB^1J9&__Qkyqe(N~0Hau?WJuiNnH0^oT zqOY%AQd(nbYTVC7XeuAl(nYNb%V&sZHMREbyJTCN*6${Yih2Uz0+V1Y278Q?{suow zFela~0O3Nt2mz_JaH*9S-<8GYRJ|%?F-+~BEVPnaL}A=|ocU)y?Gu$nLtxB}NI_n9 zODI~>GwOH|;W3*V?WWXPzF^44)?eAS!E9o4 zNOsEmoFfshKLmOomtS!)v%WCKSh^~RG;Q^2k+$OuR_pETOjsPTsW92Xb_I-9I7vw< zz*L6%xa#Pram@BtqpjL53S6?6At1FDqKjL+JBEm4o&WP$O4GBUiOZ%m9G2^4qg7G# z`s~}XYA1_^n+|YVuI9wfx_U;RL>SoLT92relUtHs$V8)&eN2sQZA|+)+o)wK@IquS zd)qZtS86RNEJo#b9jyyi%E2VAro1&N4_52@Ig`OZO^Co{VFc7dK#ftp0L-?6LrxQt z)5FRzqy0@9-8)&FHR0&TN-oOG#9*3_{Td3sdoPPO*-xn!WN_wQi-79ZQjp<$xj=aD zBuYDQqQ^nGYfcRN^!Z<3qX7mOKCSlNtDNHz2}RRBJ4jKTbgxApR=j5+p!zFqVs&nT z8I8e6OwB!U|J`={pndk@t&6A;KF-2Z^M!#l+>XFKn-uxHXdOjBio8Yw8PliUK-G#P$|5$L%HsBSF{I%2`n zH&kDr-ohz+!mHxoqw{+1D*;R1A_8r(7WUg>CWOJ7D7<=^Q}s_CA8Dp5*<#WnV>kgu zpvNH~8@DiNPjcx@h?@#p3_dO9W0?Vjvb8pJ1lJGeXHI|49p$L+tdG^=vXatrPiI3; zLoA1hEv+=?i+|Ze9Z7xlFc6*g=ylGGdaZf>=6$*m6g4#p4Z9mj2#ca20vJqZxLU}p zrK&jiX1??w)spQuOTcZ>OXm4(F^3?c-e+0`_g+j(@+E{d6SaX=~dG z$}jy}Qpx0TP#9}7bu&0mT%c_Ij=LdcU_vBi_}-fVF}2i$7tVWc zI`579OWIyle@dBhFoL|}_QJRt@vc>NRsQDFw;i@cy8ILyk|jHmttxnb^rn{?i++l- z_&&nzN@0O!=zD9dUHnC5Z?n;^n7!_%%D?M=j2Cf+Dmg=PZs;}jDl0Y5B20i^x>U1IT zhZ0wunB678|NQ<0u-LXWa;|!dsomCn@}?#b(;L0AO$&6Pwxq+`ZJeb zzOWq;x73iH`g&qmg3Fd6lfVR|FfgyYtU0x4QYeZ4zL24ij}#?5Bfa^)(x#D!zsd+9 z0_Ih#dS?jvl!lV5lW{SxP_!3zf>-4_bE+}(O*zUq@h}%yj7!#ZO9ASwumM(+W>b+w z@+*uaTaYtiA7(FEWUD3qk~gb3sqS6yx7W5U^pB-D7c*2u#l|#!-Tbh2mo_(fDhO*=|S(jpUCe zawLa{A~;{@@$rygIDreXk*$og1l$!y96Kb0LGe7X0;pYRDiqgc)vhTi8wXlAY>W1G)I6d?H4%?Y9e689togcG!O{UMr9k^iu^3r&Uf zk{xz1!fxlwg7hCXo{CgRU!zDVh??9xDagIJV%Dzoz6;mx-`rP+UYz#4P;}IOw+5#21(@k2C+B9nTH`YEpRv)4g)$@bZ7qCo@tI((DPCi(%UT~^J!ZxDD`XrFQMz_} zylC8l#G?gNzDP*{r>@~BXfWVW!E;#$Z^SDvr9+U=V3=ifNMq>&7NCr7&n6!wAPbOr zphB7(j7a!~ATk^AM2CQnpfyfxR9bbKO<1)0n3b7nKic0>yFC$Tm8q&3q!?&$? zZ}m3xN%`dQVBC^+xz=K@T?e6okT(YL zHx12}7>=T>s?$_dT3H;2%f;ck>(&dYwFvK>RHlSnT9bPx*)g{t(g$r`C@~ckiFAE7 z9}mkl*HYgO?Em?UF`qXT2Z2Tkr^O_}fU<9R>Hm&K1|zh5hS>R&>O}GA$$oC(fBrKx zMc3KE&{w-gMuX_;{B1(~s68K%NR$1Wyn__)$sjDB{aJ2!yw^@9ie$WKfoGs(h~HEc z&7TERP3kKv@QZTsMFN3?4)c$e?mI+sHyL7=7U@J|_@nS#1G(n1nGh<|Y*wDfo%teW4i3HJv1{@ZZtUI=lG6Xs?bB05=XRz2 zI5sfc_vn6N#NJEK^XS@SkBO^;znkVLIZEPj-^U=+a=~(SHR$-Yd``^GN9)Qg4+Pkc zHpOyiY@{wuI;3WtJQ01b|HP|9b?{2s2X$3~^S6QkulDusag*|XC<>jV=GLk1ww4d> zopf?>_Zq+WXra%+YsbZ=0<@=6t0DHo{agPfe|b1G^vGB4rIDML?u%>jbk$Y>>%?Tt zh``aIZtU|{AGmCf?EmZg7Y&0gtr>ofg1E;n`x9b2QJ~(<3haEb9klqd{m!+1YMM%? z;ih_!hwy0x@$?;9WV1=D0 zyS83o?j3 z@}CE-Lll%*iw5^j8cquNgBh~_w`1#X)IcPP*ZgDOZy2a-i(ZFl(p`uGe+;9jS=0l0 ze!h7-vO?6~zmXo|JE3S#*3To`O(Ts(YBx!GI3by}Xmsx+!D;%A3)6S>a4cZ)VFZ*T z(3WwFa*F?j)Pf81JUzGEZ+z0T!bp|0WyT$yGrB*;l1%A8d|pUwxoDdi=wCSpOPon! z*V}oA0B4ef1H+x21CD*9UR~lW3@iSU?oO?aJuqdUHQCm4VQ89oS%{qzwK;IGgO!bo z&)kq_!b3zwAu-s^ZPWQPi-tH@^s#hX8QC80F;d#S{;%pY$h`?Fc2#ah2C7c}k%~$;i_;#qXw~Sx`Zy%k+<)FUd~$M5vn;Jd zV8?#(g*_fc8a{pql$i;9QOfV#dgb}$*FFXq964a!9FyD8&t$gE8M&L_t*j z*YAd&c$%7DR8(|jHc@<74-SvxaV5?qb#-#iB;a21))^Za8F5NWC8s@ zyYC*}*7fS%IiwZScHha@JBRdb9v1$owli)w0!rb4USXsvLNn^?5d;HcB92@6`pD70 zC2auNj#8KSIv2PFRQ?_QM6R_lF*B=8`%onF7f{H;c%1*>_|PNIt2nHJ=wp|QC;0oo zo23;Z)t-^ku6f&iC!Lp`y*{PkBrd2pV$-@Sx}!!Iw5OPzOiST_USXsvg4rzIxAy7( zM%V=-&3u+F^e1PE3TaQ?^h5a4z@gC;=TV-%1`U^e5+|?!_Uf8Z&c~3*5&IKP2PwWq z(`xzYlezy}>t$DgB6}|iI~J&_dy*;=!+8`VAoXwI(Wv!!5)rM$zeP$w@a~}B^s{|- zzq&ZP;oeCZ_1u$ze#i8-$6lN-zB{ZN`?n}Y1di>A2z0K0i_mvc#o6R0zLSlyO^t|1 zL;D5=G`eQ5C&CZQ3?tAC0Tl+6(lWqzlEbLVdUj@aSQ=^c%<&2gg8%wPWG;SW&_q%* zMsNg-K#xa2#r6c~34AB#Tof)DV{HQuUOOoBos@%s`y%}BVjaI=KX^xFkAE>>1r#8l zy0x_AJJ~>#@%YA_YCZp{quT2{hPpb%BU}Y~D2>8kx~uD|QnBGg)e!(^MyQ^-%{f)K zmX>@cWvuJ&hCi$~o;G!;;xkU#EFxSGMxdJ@pvJgGCUIlmNojP&t?(G8#pJ1j;qQ1i zsasf#_C}yB*3#H_QX)}dRQM~NZBWnvc#*8V>j7W zcTo(M14f|T5s+Dn2ELQv9N^>|k?DwmTc_BxyMQo37=dnsK-04-+g&hC*79p>W&3J1 zk_&}`$5I*r*!>GDpA#bzC0kiFRHQBA77ba##bE?`C<3sx^w5ff#qI(GU~B0D&|#K6 z6am#&C%ZsF(B13;t}sg&fff+xzSbi4Fl<3=I2uNv3lPxUcM=HA%6V{P&Ga!t`nwMB z88c(u(SP#Qc0BI_)nS$}0%{^4ZCl#zI|Md`fsfbipX|VI(9WVVY5)LWbxUaz z0)iYuMqEVA!{96%UQc!Lp~sMmnj)CsUNYrpBprFAcY#JleyiVkNY!19FK{5grf!1}gCnP4F>IPR1fE=r#ZyhV}E0TrNQ;8sH zRe@Rn?*6k~uf^ye*iglEuP$y8k!d&2V}<=@1X#=$E7k44UaBim@uw|q{#7i}(z`cw zI!MMSReLMRj*d&YuSdYOXV#a!#kN?6A7j3GSep)`0cV$QG&OCqPZXr|NCI6qKK03o z*+m-mN%Gl>QImGWqSd?-##-~(tJC$TqPx9yt-hsCz5bGekxPS!8u1?+VGFYx* zX|bh?O9BcP=2zTSF16}uaFq{hV`9F%kGL&hGj;zYY2tfrW{tx(J}=*BRgM)J& zMdV~&qe2EebT^{*e@xB_t}4$BLj1U_ z0hG~x<*uKbK}HbHA$H3{?r*&#dD>=ew!zg!0_L@=y&}MC=27jg=lgh-PQ!;-T}2bJ zx4jO-tkHV)22^)3bj7XolbZYBJ?i?;z-PFI4uNLgiY=#%u2)y+z>BuRIt-)gAy$`* z0D*s1fbgHXi;66%a@4XJ%D+3#y{7-b7I3FY^M)g@kZz2Mlx$PM0dIflkz+@o6E}+- zeAzy)QYPSP(U)z8DG^VhSlORQ#a+^&0J-N~G>4k!VhRWZrLR}ZjZ1G^1eIR*zH+y( z@6o7JTD#l{{`OV$vdrJs_1AlhXS?l=NH~y?02MNS@$DkJa3C*hx>Ckuck^EIj^MwY z3ZdH0@q*M1RdiVQP6(eI*tF3PcU`0sG^s9<({sCI)*uMvHngkzE{H&123SkN^2$*U z?L9%6x?Zm~q45;LFiTxG%)B}0Y*7g>a;Ne>XS+F!jf{H#Je;rBoU>%8SG?^rld?g- z(fxh6>0P|QElvn~Q%u?kA_E2)!LQ((=s3>9)V7f{# z&-!Yi@3w@*k}3ZA%G{?xJ&5ASZ!EsRtyn^qL2}<0S?axH9<>k9O38#lRWT_}o?FfQ z>kOn~mh&L=sEc>UEj1X3B%NGBaD+yx?)au?b!2R3wW+#*=BdXLD_zO1w35}biuNLT z|5)}@Y@y*Hs}S1OB#G}_gGt*QkXo^~Y@mG%$( zphYOac5wSw?NX&N48fskegL^q{In(;Kp+NLPi@&~n#Y1wAeTsK!{O6O!zVGPm~ii% zzU(#!Etk+(`&cK0izs zC)Y^6wi)m%{>C7ESed!f#Nw~{Y^S>!*4-e%buMY1Y)0=>7zTqA#wuKk(hq!uVK?9L z9>Zam;witR#AKMRPp|p?%-{QVd3H(VwG^EejzgO>y@;HxD8?Wd%Ir1rZggKNvy!&m z5%@BY@BlDFb8Xjcw-rDAbCg+-l@e#jNcyK|GlTP;d3V5mRGQFC5ct*saig{1O*T00 zUCvOHjKD+ZyIv78qI3z|FyNk6-THGXFVqIpvL8u zX>aX#_8HTE7h6hA;3lJF_3uSrjT;!Q&H33|z#XMIRvMoTvXE2Rh$j$yILweRdq^qD zDf*@1Kxu;E`QwgW`5r6&TGw|5w*8a_Rq~{YB$!?x$1SYcY)-*I3>4=ry&37HGXiVW(c2t+bVpszV8ZbN!|*I+~>5}0EK8DGGytTA|C z>qcwkK^mr03Aw%K;^v>+eoxeOASUF^!6%DYeIR!|v7K2EDtNLdjkBZ7G9=>9s{HZg zaDewZt)EL}57gS7GWoB__{!7DQ16nft!KVBJT{56>+-rPeO24RdbC25v6Z3V(<=u? z4HI24M2(5@!V(9r@9&yfx)J2yc&?QSvugjITVesvvMP_y3rlOR%8yM^TYIyerJfRd zww$jN`y9T=`AVt{HkIX`n8dhI(!447w_m8J$Vcb;_B!-`W9#LyYp$&GnrSt!bX8bl zzRWjeW9-^31ZmDq#{-+Ubrl>p^03a;@P8K{nf0;C;+1<&k5^5FQ3aTnJL>5aqo`28 z1ql)t1rSH2;!G)nnCwqu|9NB`4|g>Q&QDF0W~E-p{8nx~dQ5fn=SYUOLBXPideQ%4x~Wku%AXkfrn|_E1Gcuz z#7)S}g4>o$S%2ae$zvwI`r;jTS%G7JnoC#4(?=9k^{WR`>} zkhqrSole(k#i-m1GQQ;qS@Y&#jix4Y2CX)8e=P6b!)x1U-bq|^gOvA)<^!4DS2FMW zxT07#$v^~?tUD(%cG3ZCis!btnW;^SZRR)mh$Yw~8&*Mtzh&Pw@&$~pl)p`z)|8GG zW{~Aq_F3MJ^!+;o-kO}XWo@g8P8u%8h^DVSpQ><%5&FT=- z!ufe9X?tXAh6u})+Cth-GJhnQHE&D($Uaiuu66YuihUq5ZkKXcpMO~0RUkE@=N*(~ zx`*_y=&IV&pV^pNKw^(%`OB)NZN<~_g#} zTXe@Krdw{{xhZ3l4)3uwCuG<;kIwG$6kUc4ch%@{T6BHgASWxl2hMFj6Z)0oSDZ3R zVgm`|u)5WsQYlXs&|>a_(m5RcNh`wXh$5YNUg~5U7-J{$cSbVXLtiAvj?w&IAFh@s zvDn{%PVd6OLy0`NhvWL4%CzxWJdvU5bPwDbSlKxdrg+I^HXL3ADpnwb`T5(s2hC}`*?WQO-w?36WzQmvt! zVYdtSvuz{pj%1c+rS?z!?LXGqJ`t*bsfn}g3dy-WsT!!(z;sCUrQ-tx-BYf1Ljv{W;7?q(WFdTQ~HH61wggZkAKH3 zwQ9Zuh^vbfSa>SK0-I}iJJ3tFH6iU02nVdp=tI=auHXnQY58$0np`yA0}|X}G1_-s zDP($S(V6@4>vtAL#GLozbQ@?LCqHvECb*P=KD*Q|sSW9WI^MPM#?zdi!>dE{06dG6 zm;S1XR?uiY&hpF12~W%4!Hz^_SW}E4(GUO9oI35e&9yG?t zV8~0*?F7`eQdazS;|~e0eTp$Zz5I$vi8(icMOP0Hkg8oX;<@=YO19&X2o-aR%>tFT zQdYXxfaC<@t)2K=T&zBb^;v1vN9HzUQ+CVLl_^lY2%&AhLOF{4L_vlMd+r+rnJ+?x z5_Fv6&80-l*^mu7M|9>L>Q7G1yc^jDOmy#&(VJ^aw>Cr!{S8W`>NIp#{)Z(HW`RJ; zPFS9pylWgN9F0d~gDHDg=U_l2l;sn=5jc7TZW8{COzoVU%=2reSCiH#fx-2D!-yN) zp6B`p0xiubCepkGh=T}3-pq`*S2ipQ(`D^*djvq_V7zzwHlPVjbX*i3MMef&C>=GB zZYR5G+CeDWw_kKlVMvCOMbc2UGFm@gtB-LacJ->h(4cCNcN=Fc;-cdo_9e@sk&9TL zSHzi3R3c=EwR^>p>(xS45|K&A_>;4-(ZvK9MK zN?tS!Zwh*GNOZ^3mW!z1wKLAn)A83`TmU;(IBJuPBswB*<{%!I$uDX5EA+K+_{ruD z3mRZxuReq7%`Q{8wXqY#ZK)N(K2(iE;U;!*s&uArd5 z>*t*x2}ggUpy&uz)#}|@xD7^7V<$Y3;9!rV-Hlp2&=ojNs;Q_y7I_B*5rWY8sVMS@2{dg81ULJ`D(wO z8Aud1I`7Nbo+rFFVs=y-pF9+Gs-&Z6i9b7ibErcfESho^UR|Ta514)YKDArv2Jc_d zyEy-^s_|c}l66vgZ?vnaEk<|#FGFR$7ldyMXh_?PQdu2!oeaeV^3&+rm@m6#h(z>~ zQk@tEdc&RG8R6w^?WridrI#D=?`Mps+$-}dzhbff@bfy~>U5P|{C24DnlQ)m5m2<_ z-8xV*5S$3m!NhqyDKnMbu*2GQv#iWkuyfcSLd3A6RedOz3fg(nE*d*8W&(LA%T4yI zX2k{<*qD~1>9mN=rX!sf`h?4gkl{~+vb1|8bdzjcTy${z4-KsSaLY1^cUQx-nX(uJ zg{(j7Iy`hv`Vnf2Qz!l%uktx1j7^%euD&6fHXfafDu3fTH`{qW6ca9ggL59TAv%>? z4$ojv(Hp1I@Mm#4MCz8FD_vz0tE&rJ#4%c$2%|WNeDq)&7@YfVMCSB`O&S0G@GdAt?VeC05!pnCVzFzOs>!QT|m=cZ4qCn2gFI)6sz(tJf1Z1-Rq!%u|xiwJ4L}n zLPYZy5ej<>;*{DpB;qf;s>sv@^pR+RLr%_H3!t!@?WobureX<4-$^1~wJ1xjr;h_O zc|kx;<2szQr(DlyM8gfrzchYZR21|6{E(F;mT-;r93(qOJr23`Xb>_dwK(P zn+;g)D3Ywl8BPi8o_9Ple#6zcWs@C_8C|+iQxKN&wh9hN-(@v>ow6K->-Itojfm@h zZaCO=Zo4ZCy{Q(|j$%m}?rL{ks~gH;LzHFkfKgCA2vAL}$yk%BXpS<(bUnKaxQU}w zO(RC^&mRi+6k;MW(Vs7|n&kV+uyoAGNa+HKsmCzU!{s}|Py971OByR*nGGH5Z|7aV zbnza_G^=d?ubkBIvA_glbI(BM^LG>@rJ0DUD!;|v4c-)19|fDtvoK37ho~4&F;UTP z#0CZihwo=w?yyEABq@^$k!zk8v)OZqET~k}X<496p8S1goo^nGkKNvh%i+MY84LS;+lc)~@7=6>V?46q-S)>jNdFZGaJHoRK(>j5X({7Y*wJIcjZ~SUwXuI%SYZg7$@`3e%98n z`sF(PvQv;BLqkCQrJfQO(l>IW#=^oXq+?-0b4ooYPR1e7{<$APXXCZ;$D9y;;J-74 zg|(p+f?Y$F+h=(mj5SJA zmv^7-rj`{k+6;Wh*Kd28awDG-L7>A~h<{#=pK8RS*>MAr?&YK>^cNGPv!@LW*3awP zVi!l9=4SQSeo!V1Pm!ypEVL|WvTUk zdMXV_!1B4(sZ&Q|N3q@Vf6wCgNf)s0Hr$Y0UGhr~6)E~4H=tSu0_9|6k?V2ZR0>!( zasd~pW+64h!HoxFh}^23O=7hKys>mET#1hTD&Kpfil=CXeWiY9%WwYLOs258%*i8K z5%9tHS+KCwngfYG!p&Z>{KL5b?alq|$zp$hzxIBaBE5KtywNB5l8%O{(g}rJW?U*a z!ocZi8CC;vmyCU3F>o9XlVFlE*v>w~c<_t(iAX3LnR&wM(qXHBy#lbjnk7bDCBL&m zbFzB%dn3}t4*T}?-gmX7qUTeR{pz4R@SR8lT>93%Bw)Ge%g8_RbeFaU_HWhk_?R15 zjhCF39*%Es%NCu#MEpWl&PMWkIkPr08o4U7p zko(yus6658I7Q9L3Hmqe)DdIn%*h8gQ=^_&>@H#A)#(ZEpf~TEJ7JmsLX(McXlo=O z)J@r)E3Ya?^cNw&q=ptd^3kWOF5W0-z4I2IcjV}4gnpc6E0#nqdU`-2qRx_Em)qg-^CjWHN#ln zn>Z{J;d!b*S7~Rm$VbX7T~l&*h)d_q4n3UQ2gNX4F>=AvGn5PCIqb5fYY|VZ%p^?W zQBuZd+qJ|gzki}Ga$L&VP15t$rAntkUBAJNs_>n_i1>ufsZNYaG_YF<#O!`0l0!ih z*$*LyfdbRpNCpMYf~2|Z3&yJ3IVSq7QpwPWNH*M80=yEtQ|_734C>(t#_`=nRPIz- z{|uZzb3d8|`JfB_ePHgQa6x(6dM@>6( ziFMJBTZJvT-&?IUTv{SDiKC1>meSm8pKDthp75W@49O4Y`y&R7yM5mS`u8&MM|}5T zn2%WOWc2hHp5ry~!l+;w;G@j-AaOVHto(T>L%-_J z{ANs8k&wG>Y|?D>t1E`X8c&@j3Y`c=9R{PWRTLA$qF6*yJb7dQK*{amcT{X+`OEo- z96mA$ytk8lTx?9@?JN)Jd9}nq5t*Q5MkZ%x?{1Z@(l@?oS5{(N_wcI0^1MNhC*Oap zYm`%H9~t^B^5=H##5N8^epsA|OXWE9^RKq?%AXcrZZMMJ`#II7be8_9z{q_vy2%$r zel3}Ej(#z63QN%(RUQpoU>=_;+S^MmG&9YGKDmmZXTl8|+v-3?Vr9S?a#lHQjpOSa7wf2HPj5*XqB=I-Z zOr&>X;Ry++XjlBWsecG*i1Ff$E`O#h8*Mp%E~zf6_7Q&WO-aMa_9z!NJ4WxUX+|tQ zI}(ZcZy9luf>0>Hz`XGMBGB^NjN!&dV1ZCtB5-LqINRZ-FUm6_aa*HOEhlcu)CRj+oiJb_+F~oo02p|U-jaJ5^YqXVRMl=m9 z-*JeP$Xy=Ie{mN~gb2QygwgcYJ~9-9gM;&0x&1P9;_F;7 z5GnGX-P&Xae8=$f8eWEYf5PI=p5k}f$QrjT3{Lj&en>ztU|BmO@qQrVJD5Up@%5gc z-ffCWYEp$1a^&@0V5UA<%)_k^tFY~8_?4Ge5GHARwADnb(|pxvm0Dk44=z35W*!yo zChh}Xy8k&gd5FKU*j_#dPo|8td~#KK1k3R%tV|g|&IzxS4Ml$&YcsdgD0w%#YLtOR zuIj1+ncMxf=;ghI=}I_naH1T}z|;c%z6`HEu%7EJ2^tK>Htjv!pZQibJnpukboH;j zcpwu9x$n&M9^M+1kJ+n=@JrY^P*j@5oKs*zSk(*z>aYH;m`N?Elm|> zo*b^R7EX#%+&rx>Lz6HoRC>qg`g22H8*ul*L4h+%M;44)ylCui>>rf2m)iQ&_sa7h zGm4DB=Ax9Qqq|2Le_SQZ#mCPwMxCOhzCEEfQZL#ni04(rTMdIO=i^%S7J(*kWuJbheet_``YrN4E5+SuYktPY2u1PXc5+D} z2ULq?>gx1JbkE-JC&|`V*B81TrqYRO{L4vnE^e8e6%|TJb;$gvVeMGj-cLUTRdGsd z<@Z`{Y%#>g8|RIS1rKa%f!AeuT!S_1@RAshPgbK%NDduu4rAYZDPyf$ET=bXyMv~g zW4Hd7Uo_xC?rd!ZYzcze&eNwsKW9tOn4CvDw}kwM7~O1irhdETnVcNjmhJ)!%tLiX zV>;{iiMaWYI8@7f|J=Y@2BLcI??~FdIp1{}Qb9lfFg~6IAfj_d zXJ_|(NY#?g!4AE#kGytv-qlC@@nJK14lus`bEW2(XID}AUeD>+5a(fH(9*@rW28Ef z-PJy5XM6_na-a^Ps2LULzJ7@ld-L-uOGQPv`7=4Eq{iN=NWKZ%2Q=BkmwdlKeRxOR zGKH%muJf1-N017`CnU6fv{&Mt>K5Z7jfMl0Yl8j_q^qeaR?yN$1Uv%X_VDny46yFYpO1)AeP9#wiBpA zyWy!J;D7b?D+3BnXbg|J+z(Cz?*yhHadW!=Y#FE#`&l2M>zY7U1n?o6ljyE#Mvr^+ zrn8F)zH*eem*uH%ShbUy%~#``<%{Pne<%en)OLu!w@iQd zv_`cMmyc6?T|-P_4`Qt>gMkMtJ+)2qGp-x+JT*LyH`#}OIiW^3W84iKY&`^Gx7v=! zyDJDIw;VpAB3ywX-0vlGnwUy&TllpYAmZUf@o;WMS-yX6z;$f-30D;ljqm1leLyH8 zCFb+ipx&zcm(}5i&C+sEQDluBCy@xo|ExPlCPaqh&hg~$#L4-|Sktc;$B9h>g|ZCB z&=2SQPOSV@FnPN7cLvRV^K=avW~XG>daKIyRK2LN*Bv3EdEwTyA$!SCJRfd63M`tU zc+b-Ol{xJ(wo&MVHGk(8majb z$j`1WGI5ni*SlK^3ZfP*H(V_Y4qQV>{;*Fx0fE&h)f;N*edZfir+hYWtAy!1$gk%= z@?9Q2+mAB)U#zdmkDm$@U-sBiAkLr?n^n~*IeMqm1V;h5mPgR_e)rIM`E8`N54@w{ee zn&juRm7jXPXsGXA*3tcAE}HY6Oesz|k=|A>Oq{Zvk|#t2{1A*VE#=QtQ>l#qe>j4} zQb*mbu*X?Q&1~ipUqv^N!}g(j!@5i}W~a4nx&e*}!0%~sCrtKNQM}Yil}RHMx5kz( zh2B<6dVQl10||Fk84!MQy<80`f)<4v)8>B=a{?M8&43YiK8>_mg@Y5oi*btoM7*s2 za1cL)xhtGIhSeimPc^biAelj8m63HS{WT^djb&fDzL`x@T;6>Cr%0+)1q=kRnngrK z@1LB30ck=`j?(wf9EA+{K%gy6gIe>q2%TKI|H%8fO|M#1Po?e`9xg?PdXK{Gdx}Y{ zyD)4_lSn&F{wATRi8sBlu)nvTpLrV|r$>`mSRj|koP=xDxZ19U{0kdj}9?HWz zrZ6PWjNZGJXwkNLjgg`4o!l+Pbnsx352(l;9wk<0%q^rw{agL^2+UdEd(7M{7s3_& zhO1|m61=H0dNZEg9!tb$ANiywz8kpB#E=|u}{Cn2f-H8U7=LqdGD^jtj(v^vI ztiFsF38180b^1kgawynOT+P-Ym7W2fn!zuDhXk+*c zP3kdVf%MJa^+A1^Xc|0o&FObnKQE$9_I8x?miJ|9aQabW&o-C=Fh^-!wsJ-ltjl`B zh%hVMA1d;9IF?$vbGK#FvihK!J@aJn_I}N}7WKbcu=*e@;Z%AAyk#oCmusNXUNDuy z+=H#jYW95sy7ZW0KMeFe%G}J zAYgcL!CFCb;up{a#tsoc^MMI7 z!R_FnsB1k4N z9O(JjlkZUQ@b2tkdoYnd4djMs{7;c|Qa{R`LJ=wUwB}2RgV4^uOBq^LSiG3KveEY` zU~wSV2Qsj+&VVpTAdxZPv2vsK=UI*?)CRs`$x@JF|LBw-W35jkdRq|*O1OPkY|f4=LR)7SZD;=3 zo4T?Z$TkNFPFr~D+^?0I;06gnJ>_O20{6a759`|vMiBfe$Xb=Wb9JBREbyy8{WQq? zA$e`%&_x*WJKKNk&Z2)KUdT)&8S(2)KiNpaD++;s^)ubcS7?ml3l%lJ;CO>XfdogP bALG$KFkX+J!FntEc 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 Z0hNL+M&;)xzx0k^G7^g7)uKkh{||9AVTk|$ literal 0 HcmV?d00001 diff --git a/examples/scholarly_paper/2021-ITP-PMTI/document/isadof.cfg b/examples/scholarly_paper/2021-ITP-PMTI/document/isadof.cfg index dbf4a8e..2b1aec7 100644 --- a/examples/scholarly_paper/2021-ITP-PMTI/document/isadof.cfg +++ b/examples/scholarly_paper/2021-ITP-PMTI/document/isadof.cfg @@ -1,2 +1,2 @@ -Template: scrartcl +Template: lipics-v2021-UNSUPPORTED Ontology: scholarly_paper diff --git a/examples/scholarly_paper/2021-ITP-PMTI/document/lstisadof.sty b/examples/scholarly_paper/2021-ITP-PMTI/document/lstisadof.sty index 3bbe86a..dace263 100755 --- a/examples/scholarly_paper/2021-ITP-PMTI/document/lstisadof.sty +++ b/examples/scholarly_paper/2021-ITP-PMTI/document/lstisadof.sty @@ -11,6 +11,13 @@ %% The 2-clause BSD-style license. %% %% SPDX-License-Identifier: LPPL-1.3c+ OR BSD-2-Clause +\usepackage{listings} +\usepackage{listingsutf8} +\usepackage{tikz} +\usepackage[many]{tcolorbox} +\tcbuselibrary{listings} +\tcbuselibrary{skins} +\usepackage{xstring} \definecolor{OliveGreen} {cmyk}{0.64,0,0.95,0.40} \definecolor{BrickRed} {cmyk}{0,0.89,0.94,0.28} @@ -73,6 +80,31 @@ \def\endlstdelim{\texttt{\textbf{\color{black!60}#2}}\egroup}% \ttfamily\textbf{\color{black!60}#1}\bgroup\rmfamily\color{#3}\aftergroup\endlstdelim% } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% +\providecolor{isar}{named}{blue} +\renewcommand{\isacommand}[1]{\textcolor{OliveGreen!60}{\ttfamily\bfseries #1}} +\newcommand{\inlineisarbox}[1]{#1} +\NewTColorBox[]{isarbox}{}{ + ,boxrule=0pt + ,boxsep=0pt + ,colback=white!90!isar + ,enhanced jigsaw + ,borderline west={2pt}{0pt}{isar!60!black} + ,sharp corners + ,before skip balanced=0.5\baselineskip plus 2pt + % ,before skip=10pt + % ,after skip=10pt + ,enlarge top by=0mm + ,enhanced + ,overlay={\node[draw,fill=isar!60!black,xshift=0pt,anchor=north + east,font=\bfseries\footnotesize\color{white}] + at (frame.north east) {Isar};} +} +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \newcommand{\subscr}[1]{\ensuremath{_{\mbox{#1}}}} \newcommand{\supscr}[1]{\ensuremath{^{\mbox{#1}}}} \lstdefinestyle{ISAR}{% diff --git a/examples/scholarly_paper/2021-ITP-PMTI/document/preamble.tex b/examples/scholarly_paper/2021-ITP-PMTI/document/preamble.tex index eb5cf25..2605b9d 100644 --- a/examples/scholarly_paper/2021-ITP-PMTI/document/preamble.tex +++ b/examples/scholarly_paper/2021-ITP-PMTI/document/preamble.tex @@ -12,5 +12,13 @@ \newcommand{\fixIsarList}{\vspace{-\topsep}\vspace{-\baselineskip}\mbox{}\\[0pt]\noindent} -\title{} -\author{<AUTHOR>} +\nolinenumbers +%\title{<TITLE>} +%\author{<AUTHOR>} +\titlerunning{A Framework for Proving Ontology-Relations and Runtime Testing Ontology Instances} +%\author{Idir Ait-Sadoune}{LMF \and CentraleSupelec \and Université Paris-Saclay}{idir.aitsadoune@centralesupelec.fr}{}{} +%\author{Nicolas Méric}{LMF \and Université Paris-Saclay}{nicolas.meric@lri.fr}{}{} +%\author{Burkhart Wolff}{LMF \and Université Paris-Saclay}{wolff@lri.fr}{}{} +\Copyright{Idir Ait-Sadoune, Nicolas Méric, and Burkhart Wolff} +\authorrunning{I. Ait-Sadoune, N. Méric and B. Wolff} +\keywords{Ontologies, Formal Documents, Formal Development, Isabelle/HOL, Ontology Alignment, OWL, UML/OCL} diff --git a/examples/scholarly_paper/2021-ITP-PMTI/paper.thy b/examples/scholarly_paper/2021-ITP-PMTI/paper.thy index ec3b6be..b12c0f3 100644 --- a/examples/scholarly_paper/2021-ITP-PMTI/paper.thy +++ b/examples/scholarly_paper/2021-ITP-PMTI/paper.thy @@ -3,7 +3,6 @@ theory "paper" imports "Isabelle_DOF.scholarly_paper" begin - open_monitor*[this::article] declare[[ strict_monitor_checking = false]] @@ -19,6 +18,63 @@ define_shortcut* hol \<rightleftharpoons> \<open>HOL\<close> csp \<rightleftharpoons> \<open>CSP\<close> \<comment>\<open>obsolete\<close> holcsp \<rightleftharpoons> \<open>HOL-CSP\<close> \<comment>\<open>obsolete\<close> +ML\<open> + +fun boxed_text_antiquotation name (* redefined in these more abstract terms *) = + DOF_lib.gen_text_antiquotation name DOF_lib.report_text + (fn ctxt => DOF_lib.string_2_text_antiquotation ctxt + #> DOF_lib.enclose_env false ctxt "isarbox") + +val neant = K(Latex.text("",\<^here>)) + +fun boxed_theory_text_antiquotation name (* redefined in these more abstract terms *) = + DOF_lib.gen_text_antiquotation name DOF_lib.report_theory_text + (fn ctxt => DOF_lib.string_2_theory_text_antiquotation ctxt + #> DOF_lib.enclose_env false ctxt "isarbox" + (* #> neant *)) (*debugging *) + +fun boxed_sml_text_antiquotation name = + DOF_lib.gen_text_antiquotation name (K(K())) + (fn ctxt => Input.source_content + #> Latex.text + #> DOF_lib.enclose_env true ctxt "sml") + (* the simplest conversion possible *) + +fun boxed_pdf_antiquotation name = + DOF_lib.gen_text_antiquotation name (K(K())) + (fn ctxt => Input.source_content + #> Latex.text + #> DOF_lib.enclose_env true ctxt "out") + (* the simplest conversion possible *) + +fun boxed_latex_antiquotation name = + DOF_lib.gen_text_antiquotation name (K(K())) + (fn ctxt => Input.source_content + #> Latex.text + #> DOF_lib.enclose_env true ctxt "ltx") + (* the simplest conversion possible *) + +fun boxed_bash_antiquotation name = + DOF_lib.gen_text_antiquotation name (K(K())) + (fn ctxt => Input.source_content + #> Latex.text + #> DOF_lib.enclose_env true ctxt "bash") + (* the simplest conversion possible *) +\<close> + +setup\<open>(* std_text_antiquotation \<^binding>\<open>my_text\<close> #> *) + boxed_text_antiquotation \<^binding>\<open>boxed_text\<close> #> + (* std_text_antiquotation \<^binding>\<open>my_cartouche\<close> #> *) + boxed_text_antiquotation \<^binding>\<open>boxed_cartouche\<close> #> + (* std_theory_text_antiquotation \<^binding>\<open>my_theory_text\<close>#> *) + boxed_theory_text_antiquotation \<^binding>\<open>boxed_theory_text\<close> #> + + boxed_sml_text_antiquotation \<^binding>\<open>boxed_sml\<close> #> + boxed_pdf_antiquotation \<^binding>\<open>boxed_pdf\<close> #> + boxed_latex_antiquotation \<^binding>\<open>boxed_latex\<close>#> + boxed_bash_antiquotation \<^binding>\<open>boxed_bash\<close> + \<close> + (*>*) title*[tit::title]\<open>A Framework for Proving Ontology-Relations and Runtime Testing Ontology Instances\<close> @@ -26,7 +82,7 @@ title*[tit::title]\<open>A Framework for Proving Ontology-Relations and Runtime author*[idir,email="\<open>idir.aitsadoune@lri.fr\<close>",affiliation="\<open>LMF, CentraleSupelec\<close>"]\<open>Idir Ait-Sadoune\<close> author*[nic,email="\<open>nicolas.meric@lri.fr\<close>",affiliation="\<open>LRI, Université Paris-Saclay\<close>"]\<open>Nicolas Méric\<close> author*[bu,email="\<open>wolff@lri.fr\<close>",affiliation = "\<open>LRI, Université Paris-Saclay\<close>"]\<open>Burkhart Wolff\<close> - + abstract*[abs, keywordlist="[\<open>Ontologies\<close>,\<open>Formal Documents\<close>,\<open>Formal Development\<close>,\<open>Isabelle/HOL\<close>,\<open>Ontology Alignment\<close>,\<open>OWL\<close>,\<open>UML/OCL\<close>]"] \<open> \<^dof> is a novel ontology framework on top of Isabelle @{cite "brucker.ea:isabelledof:2019" and "brucker.ea:isabelle-ontologies:2018"}. @@ -335,98 +391,224 @@ section*[invariants::technical,main_author="Some(@{docitem ''nic''}::author)"] \<open>Term-Context support and Invariants in DOF\<close> text\<open> + + A novel mechanism to specify invariants is implemented and can now be specified in common HOL syntax. -% These invariants can be checked when an instance of the class is defined. -% To enable the checking of the invariants, the \<^theory_text>\<open>invariants_checking\<close> -% theory attribute must be set: -% @{theory_text [display,indent=10, margin=70] - \<open> - declare[[invariants_checking = true]] - \<close>} - If we take back the ontology example of~@{cite "brucker.ea:isabelledof:2019"}, we can now - specify the constraints, like that any instance of a \<^emph>\<open>result\<close> class finally has - a non-empty property list, if its \<^theory_text>\<open>kind\<close> is \<^theory_text>\<open>proof\<close>, or that - the \<^theory_text>\<open>establish\<close> relation between \<^theory_text>\<open>claim\<close> and - \<^theory_text>\<open>result\<close> is total, using the keyword \<^theory_text>\<open>invariant\<close> in the class definition: -@{theory_text [display,indent=10, margin=70] \<open> -doc_class title = - short_title :: "string option" <= "None" + One can now specify the constraints using the keyword \<^theory_text>\<open>invariant\<close> in the class definition. + If we take back the ontology example for mathematical papers + of~@{cite "brucker.ea:isabelledof:2019"} (ADD LISTING REFERENCE!!!), + it was proposed to specify some constraints like that any instance of a \<^emph>\<open>result\<close> class + finally has a non-empty property list, if its \<^theory_text>\<open>kind\<close> is \<^theory_text>\<open>"proof"\<close> + (see the \<^theory_text>\<open>invariant has_property\<close>), or that + the \<^theory_text>\<open>establish\<close> relation between \<^theory_text>\<open>claim\<close> and \<^theory_text>\<open>result\<close> must be defined when an instance + of the class \<^theory_text>\<open>conclusion\<close> is defined (see the \<^theory_text>\<open>invariant establish_defined\<close>). +@{boxed_theory_text [display,indent=10, margin=70] \<open> doc_class author = email :: "string" <= "''''" - -datatype classification = SIL0 | SIL1 | SIL2 | SIL3 | SIL4 - -doc_class abstract = - keywordlist :: "string list" <= "[]" - safety_level :: "classification" <= "SIL3" doc_class text_section = authored_by :: "author set" <= "{}" level :: "int option" <= "None" - -type_synonym notion = string - - doc_class introduction = text_section + - authored_by :: "author set" <= "UNIV" - uses :: "notion set" - invariant author_finite :: "finite (authored_by \<sigma>)" +doc_class introduction = text_section + + authored_by :: "author set" <= "UNIV" + uses :: "string set" + invariant author_finite :: "finite (authored_by \<sigma>)" + and force_level :: "the (level \<sigma>) > 1" doc_class claim = introduction + - based_on :: "notion list" + based_on :: "string list" doc_class technical = text_section + formal_results :: "thm list" -doc_class "definition" = technical + - is_formal :: "bool" - property :: "term list" <= "[]" datatype kind = expert_opinion | argument | "proof" - doc_class result = technical + - evidence :: kind - property :: "thm list" <= "[]" - invariant has_property :: "evidence \<sigma> = proof \<longleftrightarrow> property \<sigma> \<noteq> []" - doc_class example = technical + - referring_to :: "(notion + definition) set" <= "{}" - doc_class conclusion = text_section + - establish :: "(claim \<times> result) set" - invariant total_rel :: "\<forall> x. x \<in> Domain (establish \<sigma>) - \<longrightarrow> (\<exists> y \<in> Range (establish \<sigma>). (x, y) \<in> establish \<sigma>)" +doc_class result = technical + + evidence :: kind + property :: "thm list" <= "[]" + invariant has_property :: "evidence \<sigma> = proof \<longleftrightarrow> property \<sigma> \<noteq> []" +doc_class conclusion = text_section + + establish :: "(claim \<times> result) set" + invariant establisg_defined :: "\<forall> x. x \<in> Domain (establish \<sigma>) + \<longrightarrow> (\<exists> y \<in> Range (establish \<sigma>). (x, y) \<in> establish \<sigma>)" \<close>} - In our example, the invariant \<^theory_text>\<open>author_finite \<close> enforces that the user sets the - \<^theory_text>\<open>authored_by\<close> set. - The \<^theory_text>\<open>\<sigma>\<close> symbol is reserved and references the future instance class. + + In our example, the invariant \<^theory_text>\<open>author_finite \<close> of the class \<^theory_text>\<open>introduction\<close> enforces + that the user sets the \<^theory_text>\<open>authored_by\<close> set. + The \<^theory_text>\<open>\<sigma>\<close> symbol is reserved and references the future class instance. By relying on the implementation of the Records in Isabelle/HOL~@{cite "wenzel:isabelle-isar:2020"}, one can reference an attribute of an instance using its selector function. For example, \<^theory_text>\<open>establish \<sigma>\<close> denotes the value of the \<^theory_text>\<open>establish\<close> attribute of the future instance of the class \<^theory_text>\<open>conclusion\<close>. - - if we define some instances like: (ADD EXAMPLE !!!) + Now we can define some instances: -@{theory_text [display,indent=10, margin=70] \<open> +@{boxed_theory_text [display] \<open> text*[church::author, email="\<open>church@lambda.org\<close>"]\<open>\<close> -text*[introduction1::introduction, authored_by = "{@{author \<open>church\<close>}}"]\<open>\<close> -(*text*[introduction2::introduction]\<open>\<close>*) -text*[resultProof::result, evidence = "proof", property="[@{thm \<open>HOL.refl\<close>}]"]\<open>\<close> -text*[resultArgument::result, evidence = "argument"]\<open>\<close> +text*[resultProof::result, evidence = "proof", property="[@{thm \<open>HOL.refl\<close>}]"]\<open>\<close> + +text*[introduction1::introduction, authored_by = "{@{author \<open>church\<close>}}", level = "Some 0"]\<open>\<close> + +text*[claimNotion::claim, authored_by = "{@{author \<open>church\<close>}}", based_on= "[\<open>Notion1\<close>, \<open>Notion2\<close>]", level = "Some 0"]\<open>\<close> \<close>} - The value of each attribute defined for the instances is checked at run-time - against their class invariants. - SPEAK ABOUT INVARIANTS INHERITAGE ??? - As the class \<^theory_text>\<open>class_inv2\<close> is a subsclass - of the class \<^theory_text>\<open>class_inv1\<close>, it inherits \<^theory_text>\<open>class_inv1\<close> invariants. - Hence the \<^theory_text>\<open>inv1\<close> invariant is checked - when the instance \<^theory_text>\<open>testinv2\<close> is defined. \<close> +(*<*) +declare_reference*["invariant-checking-figure"::figure] +(*>*) + +text\<open> + In the intance \<^theory_text>\<open>introduction1\<close>, \<^theory_text>\<open>@{author \<open>church\<close>}\<close> denotes + the instance \<^theory_text>\<open>church\<close> of the class \<^theory_text>\<open>author\<close>. + The value of each attribute defined for the instances is checked at run-time + against their class invariants. + The \<^theory_text>\<open>resultProof\<close> instance respects the \<^theory_text>\<open>invariant has_property\<close>, + because we specify its attribute \<^theory_text>\<open>evidence\<close> to the \<^theory_text>\<open>kind\<close> \<^theory_text>\<open>"proof"\<close>, + we also specify its attribute \<^theory_text>\<open>property\<close> with a suited value + as a list of \<^theory_text>\<open>"thm"\<close>. + In \<^figure>\<open>invariant-checking-figure\<close>, + we try to specify a new instance \<^theory_text>\<open>introduction1\<close> of the class \<^theory_text>\<open>introduction\<close>. + But an invariant checking error is triggered because we do not respect the + constraint specified in the \<^theory_text>\<open>force_level\<close> invariant, + when we specify the \<^theory_text>\<open>level\<close> attribute of \<^theory_text>\<open>introduction\<close> to \<^theory_text>\<open>Some 0\<close>. + The \<^theory_text>\<open>force_level\<close> invariant forces the value of the argument + of the attribute \<^theory_text>\<open>level\<close> option type to be greater than 1. +\<close> + +figure*[ + "invariant-checking-figure"::figure + , relative_width="99" + , src="''figures/invariant-checking-violated-example''" +]\<open>The invariant \<^theory_text>\<open>force_level\<close> of the class \<^theory_text>\<open>introduction\<close> is violated by + the instance \<^theory_text>\<open>introduction1\<close>.\<close> + +(*<*) +declare_reference*["inherited-invariant-checking-figure"::figure] +(*>*) + +text\<open> + Classes inherit the invariants from their superclasses. + As the class \<^theory_text>\<open>claim\<close> is a subsclass + of the class \<^theory_text>\<open>introduction\<close>, it inherits the \<^theory_text>\<open>introduction\<close> invariants. + Hence the \<^theory_text>\<open>force_level\<close> invariant is checked + when the instance \<^theory_text>\<open>claimNotion\<close> is defined, + like in \<^figure>\<open>inherited-invariant-checking-figure\<close>. +\<close> + +figure*[ + "inherited-invariant-checking-figure"::figure + , relative_width="99" + , src="''figures/inherited-invariant-checking-violated-example''" +]\<open>The invariant \<^theory_text>\<open>force_level\<close> of the class claim is inherited + from the class \<^theory_text>\<open>introduction\<close> and is violated by the instance \<^theory_text>\<open>claimNotion\<close>. +\<close> + +(* +text\<open>For example, with the following two classes: +\<^theory_text>\<open> +doc_class class_inv1 = + int1 :: "int" + invariant inv1 :: "int1 \<sigma> \<ge> 3" + +doc_class class_inv2 = class_inv1 + + int2 :: "int" + invariant inv2 :: "int2 \<sigma> < 2" +\<close> + + as the class \<^theory_text>\<open>class_inv2\<close> is a subsclass + of the class \<^theory_text>\<open>class_inv1\<close>, it inherits \<^theory_text>\<open>class_inv1\<close> invariants. + Hence the \<^theory_text>\<open>inv1\<close> invariant is checked + when the instance \<^theory_text>\<open>testinv2\<close> is defined, like we can see in . + + Now let's define two instances, one of each class:\<close> + + + +text\<open> +\<^theory_text>\<open> +text*[testinv1::class_inv1, int1=4]\<open>lorem ipsum...\<close> +text*[testinv2::class_inv2, int1=3, int2=1]\<open>lorem ipsum...\<close> +\<close> +\<close> +*) + +text\<open> + The value of each attribute defined for the instances is checked against their classes invariants. + As the class \<^theory_text>\<open>class_inv2\<close> is a subsclass of the class \<^theory_text>\<open>class_inv1\<close>, + it inherits \<^theory_text>\<open>class_inv1\<close> invariants. + Hence the \<^theory_text>\<open>int1\<close> invariant is checked when the instance \<^theory_text>\<open>testinv2\<close> is defined.\<close> + +text\<open> + Isabelle/HOl provides commands which type-check and print terms (the command \<^theory_text>\<open>term\<close>) + and evaluates and print a term (the command \<^theory_text>\<open>value\<close>). + We provide the equivalent commands, respectively \<^theory_text>\<open>term*\<close> and \<^theory_text>\<open>value*\<close>. + These commands add up type-checking and expanding of isabelle/DOF antiquotations + in a own validation phase. + For example one can now reference a class instance in a \<^theory_text>\<open>term*\<close> command: +@{theory_text [display,indent=10, margin=70] \<open> +term*\<open>@{author \<open>church\<close>}\<close> +\<close>} + +The term \<^theory_text>\<open>@{author \<open>church\<close>}\<close> is type-checked, \<^ie>, the command \<^theory_text>\<open>term*\<close> checks that +\<^theory_text>\<open>church\<close> references a term of type \<^theory_text>\<open>author\<close>. + + and the and we would like +Isabelle to check that this instance is indeed an instance of this class. +Here, we want to reference the instance \<^theory_text>\<open>@{docitem \<open>xcv4\<close>}\<close> previously defined. +We can use the term* command which extends the classic term command +and does the appropriate checking. +@{theory_text [display,indent=10, margin=70] \<open> +term*\<open>@{F \<open>xcv4\<close>}\<close> +\<close>} +We can also reference an attribute of the instance. +Here we reference the attribute r of the class F which has the type @{typ \<open>thm list\<close>}. + +@{theory_text [display,indent=10, margin=70] \<open> +term*\<open>r @{F \<open>xcv4\<close>}\<close> + +term \<open>@{A \<open>xcv2\<close>}\<close> +\<close>} +\<close> + +figure*[ + "term-context-checking-example-figure"::figure + , relative_width="99" + , src="''figures/term-context-checking-example''" +]\<open>The invariant \<^theory_text>\<open>force_level\<close> of the class claim is inherited + from the class \<^theory_text>\<open>introduction\<close> and is violated by the instance \<^theory_text>\<open>claimNotion\<close>. +\<close> + +figure*[ + "term-context-evaluation-figure"::figure + , relative_width="99" + , src="''figures/term-context-evaluation-example''" +]\<open>The invariant \<^theory_text>\<open>force_level\<close> of the class claim is inherited + from the class \<^theory_text>\<open>introduction\<close> and is violated by the instance \<^theory_text>\<open>claimNotion\<close>. +\<close> + +figure*[ + "term-context-equality-evaluation-figure"::figure + , relative_width="99" + , src="''figures/term-context-equality-evaluation-example''" +]\<open>The invariant \<^theory_text>\<open>force_level\<close> of the class claim is inherited + from the class \<^theory_text>\<open>introduction\<close> and is violated by the instance \<^theory_text>\<open>claimNotion\<close>. +\<close> + + +text\<open>We declare a new text element. Note that the class name contains an underscore "\_".\<close> +text*[te::text_element]\<open>Lorem ipsum...\<close> + +text\<open>Unfortunately due to different lexical conventions for constant symbols and mixfix symbols + this term antiquotation has to be denoted like this: @{term\<open>@{text-element \<open>ee\<close>}\<close>}. + We need to substitute an hyphen "-" for the underscore "\_".\<close> +term*\<open>@{text-element \<open>te\<close>}\<close> subsection\<open>Example and Queries\<close> section*["morphisms"::technical,main_author="Some(@{docitem ''idir''}::author)"] \<open>Proving Morphisms on Ontologies\<close> text\<open> -A new mechanism to make query on instances is available and uses the HOL implementation of Lists. +A new mechanism to make query on instances is available and uses the HOL implementation of lists. So complex queries can be defined using functions over the instances list. With the class: @{theory_text [display,indent=10, margin=70] \<open> @@ -443,7 +625,8 @@ we can get all the instances of the class Z: @{theory_text [display,indent=10, margin=70] \<open> value*\<open>@{Z-instances}\<close> \<close>} -or the instances of the class Z whose attribute \<^theory_text>\<open>z > 2\<close>: +\<^theory_text>\<open>@{Z-instances}\<close> denotes list of the values of the instances of the class \<^theory_text>\<open>Z\<close>. +To get the instances of the class Z whose attribute \<^theory_text>\<open>z > 2\<close>: @{theory_text [display,indent=10, margin=70] \<open> value*\<open>filter (\<lambda>\<sigma>. Z.z \<sigma> > 2) @{Z-instances}\<close> \<close>} From d319ab255597a5fdf6015a4cddb90fbe57f4e796 Mon Sep 17 00:00:00 2001 From: Burkhart Wolff <wolff@lri.fr> Date: Wed, 2 Feb 2022 17:03:17 +0100 Subject: [PATCH 16/18] section on extensible records --- .../2021-ITP-PMTI/document/root.bib | 10 ++++++ .../scholarly_paper/2021-ITP-PMTI/paper.thy | 36 ++++++++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/examples/scholarly_paper/2021-ITP-PMTI/document/root.bib b/examples/scholarly_paper/2021-ITP-PMTI/document/root.bib index 445dbed..3f5e548 100644 --- a/examples/scholarly_paper/2021-ITP-PMTI/document/root.bib +++ b/examples/scholarly_paper/2021-ITP-PMTI/document/root.bib @@ -20,6 +20,7 @@ note = {Part of the Isabelle distribution.} } + @TechReport{ bsi:50128:2014, type = {Standard}, key = {BS EN 50128:2011}, @@ -55,6 +56,15 @@ the development, deployment and maintenanceactivities.} } +@inproceedings{naraschewski1998object, + title={Object-oriented verification based on record subtyping in higher-order logic}, + author={Naraschewski, Wolfgang and Wenzel, Markus}, + booktitle={International Conference on Theorem Proving in Higher Order Logics}, + pages={349--366}, + year={1998}, + organization={Springer} +} + @InCollection{ brucker.ea:isabelledof:2019, abstract = {DOF is a novel framework for defining ontologies and enforcing them during document development and evolution. A diff --git a/examples/scholarly_paper/2021-ITP-PMTI/paper.thy b/examples/scholarly_paper/2021-ITP-PMTI/paper.thy index b12c0f3..0992ada 100644 --- a/examples/scholarly_paper/2021-ITP-PMTI/paper.thy +++ b/examples/scholarly_paper/2021-ITP-PMTI/paper.thy @@ -378,10 +378,44 @@ text\<open>\<^dof>'s generated antiquotations are part of a general mechanism of \<close> *) +(*<*) +type_synonym A = int +type_synonym B = int +record T = + x :: A + y :: B +(*>*) + +term "\<lparr>x = a,y = b\<rparr>" subsection\<open>Meta-Objects as Extensible Records\<close> +(* too fat ? what do we need of this ? *) +text\<open> +Isabelle/HOL supports both fixed and schematic records at the level of terms and +types. The notation for terms and types is as follows: -text\<open>Explain record notation.\<close> +\<^item> fixed record terms \<^term>\<open>\<lparr>x = a,y = b\<rparr>\<close>; fixed record types \<open>\<lparr>x::A, y::B\<rparr>\<close>. +\<^item> schematic record terms \<^term>\<open>\<lparr>x = a,y = b, \<dots> = m::'a\<rparr>\<close>; + schematic record types: \<open>\<lparr>x::A, y::B, \<dots> = 'a\<rparr>\<close> which were usually abbreviated + to \<^typ>\<open>'a T_scheme\<close>. +\<^item> selectors are written \<^term>\<open>x(R::'a T_scheme)\<close>, \<^term>\<open>y(R::'a T_scheme)\<close>. +\<^item> updates were denoted \<^term>\<open>r\<lparr>x := a\<rparr>\<lparr>y := b\<rparr>\<close> or just \<^term>\<open>r\<lparr>x:=a, y:=b\<rparr>\<close>. +\<close> + +text\<open> ... where the so-called more-field \<open>\<dots>\<close> is used to 'fill-in' record-extensions. +Schematic record types allow for simulating object-oriented features such as +(single-)inheritance while maintaining a compositional style of verification +@{cite "naraschewski1998object"}: it is possible to prove a property \<^term>\<open>P (x::'a T\<close> +which will remain true for all extensions (which are just instances of the +\<^typ>\<open>'a T\<close>-type). +\<close> + +text\<open>In \<^dof>, \<^verbatim>\<open>onto_class\<close>es and the logically equivalent \<^verbatim>\<open>doc_class\<close>es were +represented by schematic record types and instances thereof by schematic terms. +Invariants of an \<^verbatim>\<open>onto_class\<close> are thu predicates over schematic record +types and can therefore be inherited in a subclass. \<^dof> handles the parametric +polymorphism implicitly. +\<close> subsection\<open>Code-Generation in Isabelle\<close> From a2f305754518cdb2b6e1807be7433f6eb89b6162 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20M=C3=A9ric?= <nicolasmeric@posteo.net> Date: Thu, 3 Feb 2022 09:00:32 +0100 Subject: [PATCH 17/18] Update extensible record section Make it compile --- examples/scholarly_paper/2021-ITP-PMTI/paper.thy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/scholarly_paper/2021-ITP-PMTI/paper.thy b/examples/scholarly_paper/2021-ITP-PMTI/paper.thy index 0992ada..8bcafe7 100644 --- a/examples/scholarly_paper/2021-ITP-PMTI/paper.thy +++ b/examples/scholarly_paper/2021-ITP-PMTI/paper.thy @@ -405,9 +405,9 @@ types. The notation for terms and types is as follows: text\<open> ... where the so-called more-field \<open>\<dots>\<close> is used to 'fill-in' record-extensions. Schematic record types allow for simulating object-oriented features such as (single-)inheritance while maintaining a compositional style of verification -@{cite "naraschewski1998object"}: it is possible to prove a property \<^term>\<open>P (x::'a T\<close> +@{cite "naraschewski1998object"}: it is possible to prove a property \<^term>\<open>P (a::T)\<close> which will remain true for all extensions (which are just instances of the -\<^typ>\<open>'a T\<close>-type). +\<^typ>\<open>T\<close>-type). \<close> text\<open>In \<^dof>, \<^verbatim>\<open>onto_class\<close>es and the logically equivalent \<^verbatim>\<open>doc_class\<close>es were From 7033335e3f2955638361c53810e115707382e4d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20M=C3=A9ric?= <nicolasmeric@posteo.net> Date: Thu, 3 Feb 2022 09:03:32 +0100 Subject: [PATCH 18/18] Update extensible record section Update text to reflect that a property apply on the scheme type of the record --- examples/scholarly_paper/2021-ITP-PMTI/paper.thy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/scholarly_paper/2021-ITP-PMTI/paper.thy b/examples/scholarly_paper/2021-ITP-PMTI/paper.thy index 8bcafe7..e0b1e66 100644 --- a/examples/scholarly_paper/2021-ITP-PMTI/paper.thy +++ b/examples/scholarly_paper/2021-ITP-PMTI/paper.thy @@ -405,7 +405,7 @@ types. The notation for terms and types is as follows: text\<open> ... where the so-called more-field \<open>\<dots>\<close> is used to 'fill-in' record-extensions. Schematic record types allow for simulating object-oriented features such as (single-)inheritance while maintaining a compositional style of verification -@{cite "naraschewski1998object"}: it is possible to prove a property \<^term>\<open>P (a::T)\<close> +@{cite "naraschewski1998object"}: it is possible to prove a property \<^term>\<open>P (z::'a T_scheme)\<close> which will remain true for all extensions (which are just instances of the \<^typ>\<open>T\<close>-type). \<close>