Merge and upgrade to development version of Isabelle/HOL.
ci/woodpecker/push/build Pipeline failed Details

This commit is contained in:
Achim D. Brucker 2023-04-24 22:26:39 +01:00
commit 0d74645d2e
25 changed files with 492 additions and 368 deletions

View File

@ -751,7 +751,7 @@ This normal form is closed under deterministic and communication operators.
The advantage of this format is that we can mimick the well-known product automata construction The advantage of this format is that we can mimick the well-known product automata construction
for an arbitrary number of synchronized processes under normal form. for an arbitrary number of synchronized processes under normal form.
We only show the case of the synchronous product of two processes: \<close> We only show the case of the synchronous product of two processes: \<close>
text*[T3::"theorem", short_name="\<open>Product Construction\<close>", level="Some 2"]\<open> Theorem*[T3, short_name="\<open>Product Construction\<close>", level="Some 2"]\<open>
Parallel composition translates to normal form: Parallel composition translates to normal form:
@{cartouche [display,indent=5]\<open>(P\<^sub>n\<^sub>o\<^sub>r\<^sub>m\<lbrakk>\<tau>\<^sub>1,\<upsilon>\<^sub>1\<rbrakk> \<sigma>\<^sub>1) || (P\<^sub>n\<^sub>o\<^sub>r\<^sub>m\<lbrakk>\<tau>\<^sub>2,\<upsilon>\<^sub>2\<rbrakk> \<sigma>\<^sub>2) = @{cartouche [display,indent=5]\<open>(P\<^sub>n\<^sub>o\<^sub>r\<^sub>m\<lbrakk>\<tau>\<^sub>1,\<upsilon>\<^sub>1\<rbrakk> \<sigma>\<^sub>1) || (P\<^sub>n\<^sub>o\<^sub>r\<^sub>m\<lbrakk>\<tau>\<^sub>2,\<upsilon>\<^sub>2\<rbrakk> \<sigma>\<^sub>2) =
P\<^sub>n\<^sub>o\<^sub>r\<^sub>m\<lbrakk>\<lambda>(\<sigma>\<^sub>1,\<sigma>\<^sub>2). \<tau>\<^sub>1 \<sigma>\<^sub>1 \<inter> \<tau>\<^sub>2 \<sigma>\<^sub>2 , \<lambda>(\<sigma>\<^sub>1,\<sigma>\<^sub>2).\<lambda>e.(\<upsilon>\<^sub>1 \<sigma>\<^sub>1 e, \<upsilon>\<^sub>2 \<sigma>\<^sub>2 e)\<rbrakk> (\<sigma>\<^sub>1,\<sigma>\<^sub>2)\<close>} P\<^sub>n\<^sub>o\<^sub>r\<^sub>m\<lbrakk>\<lambda>(\<sigma>\<^sub>1,\<sigma>\<^sub>2). \<tau>\<^sub>1 \<sigma>\<^sub>1 \<inter> \<tau>\<^sub>2 \<sigma>\<^sub>2 , \<lambda>(\<sigma>\<^sub>1,\<sigma>\<^sub>2).\<lambda>e.(\<upsilon>\<^sub>1 \<sigma>\<^sub>1 e, \<upsilon>\<^sub>2 \<sigma>\<^sub>2 e)\<rbrakk> (\<sigma>\<^sub>1,\<sigma>\<^sub>2)\<close>}

View File

@ -347,7 +347,7 @@ text\<open>
\<^item> \<^ML>\<open>Context.proper_subthy : theory * theory -> bool\<close> subcontext test \<^item> \<^ML>\<open>Context.proper_subthy : theory * theory -> bool\<close> subcontext test
\<^item> \<^ML>\<open>Context.Proof: Proof.context -> Context.generic \<close> A constructor embedding local contexts \<^item> \<^ML>\<open>Context.Proof: Proof.context -> Context.generic \<close> A constructor embedding local contexts
\<^item> \<^ML>\<open>Context.proof_of : Context.generic -> Proof.context\<close> the inverse \<^item> \<^ML>\<open>Context.proof_of : Context.generic -> Proof.context\<close> the inverse
\<^item> \<^ML>\<open>Context.theory_name : theory -> string\<close> \<^item> \<^ML>\<open>Context.theory_name : {long:bool} -> theory -> string\<close>
\<^item> \<^ML>\<open>Context.map_theory: (theory -> theory) -> Context.generic -> Context.generic\<close> \<^item> \<^ML>\<open>Context.map_theory: (theory -> theory) -> Context.generic -> Context.generic\<close>
\<close> \<close>
@ -358,7 +358,7 @@ text\<open>The structure \<^ML_structure>\<open>Proof_Context\<close> provides a
\<^item> \<^ML>\<open> Context.Proof: Proof.context -> Context.generic \<close> \<^item> \<^ML>\<open> Context.Proof: Proof.context -> Context.generic \<close>
the path to a generic Context, i.e. a sum-type of global and local contexts the path to a generic Context, i.e. a sum-type of global and local contexts
in order to simplify system interfaces in order to simplify system interfaces
\<^item> \<^ML>\<open> Proof_Context.get_global: theory -> string -> Proof.context\<close> \<^item> \<^ML>\<open> Proof_Context.get_global: {long:bool} -> theory -> string -> Proof.context\<close>
\<close> \<close>
@ -891,7 +891,6 @@ datatype thy = Thy of
\<^item> \<^ML>\<open>Theory.axiom_space: theory -> Name_Space.T\<close> \<^item> \<^ML>\<open>Theory.axiom_space: theory -> Name_Space.T\<close>
\<^item> \<^ML>\<open>Theory.all_axioms_of: theory -> (string * term) list\<close> \<^item> \<^ML>\<open>Theory.all_axioms_of: theory -> (string * term) list\<close>
\<^item> \<^ML>\<open>Theory.defs_of: theory -> Defs.T\<close> \<^item> \<^ML>\<open>Theory.defs_of: theory -> Defs.T\<close>
\<^item> \<^ML>\<open>Theory.join_theory: theory list -> theory\<close>
\<^item> \<^ML>\<open>Theory.at_begin: (theory -> theory option) -> theory -> theory\<close> \<^item> \<^ML>\<open>Theory.at_begin: (theory -> theory option) -> theory -> theory\<close>
\<^item> \<^ML>\<open>Theory.at_end: (theory -> theory option) -> theory -> theory\<close> \<^item> \<^ML>\<open>Theory.at_end: (theory -> theory option) -> theory -> theory\<close>
\<^item> \<^ML>\<open>Theory.begin_theory: string * Position.T -> theory list -> theory\<close> \<^item> \<^ML>\<open>Theory.begin_theory: string * Position.T -> theory list -> theory\<close>

View File

@ -23,35 +23,35 @@
\newkeycommand*{\mathcc}[label=,type=% \newkeycommand*{\mathcc}[label=,type=%
, scholarly_paper.math_content.short_name ={}% , scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontentDOTshortUNDERSCOREname ={}%
, scholarly_paper.math_content.mcc = % , scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontentDOTmcc = %
, Isa_COL.text_element.level =% , IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTlevel =%
, Isa_COL.text_element.referentiable =% , IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTreferentiable =%
, Isa_COL.text_element.variants =% , IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTvariants =%
, scholarly_paper.text_section.main_author =% , scholarlyUNDERSCOREpaperDOTtextUNDERSCOREsectionDOTmainUNDERSCOREauthor =%
, scholarly_paper.text_section.fixme_list =% , scholarlyUNDERSCOREpaperDOTtextUNDERSCOREsectionDOTfixmeUNDERSCORElist =%
, Isa_COL.text_element.level =% , IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTlevel =%
, scholarly_paper.technical.definition_list =% , scholarlyUNDERSCOREpaperDOTtechnicalDOTdefinitionUNDERSCORElist =%
, scholarly_paper.technical.status =% , scholarlyUNDERSCOREpaperDOTtechnicalDOTstatus =%
, CC_terminology.concept_definition.tag=% , CCUNDERSCOREterminologyDOTconceptUNDERSCOREdefinitionDOTtag=%
, CC_terminology.concept_definition.short_tag=% , CCUNDERSCOREterminologyDOTconceptUNDERSCOREdefinitionDOTshortUNDERSCOREtag=%
] ]
[1] [1]
{% {%
\begin{isamarkuptext}% \begin{isamarkuptext}%
\ifthenelse{\equal{\commandkey{scholarly_paper.math_content.short_name}} {} } \ifthenelse{\equal{\commandkey{scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontentDOTshortUNDERSCOREname}} {} }
{% {%
\begin{\commandkey{scholarly_paper.math_content.mcc}}\label{\commandkey{label}} \begin{\commandkey{scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontentDOTmcc}}\label{\commandkey{label}}
#1 #1
\end{\commandkey{scholarly_paper.math_content.mcc}} \end{\commandkey{scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontentDOTmcc}}
}{% }{%
\begin{\commandkey{scholarly_paper.math_content.mcc}}[\commandkey{scholarly_paper.math_content.short_name}]\label{\commandkey{label}} \begin{\commandkey{scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontentDOTmcc}}[\commandkey{scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontentDOTshortUNDERSCOREname}]\label{\commandkey{label}}
#1 #1
\end{\commandkey{scholarly_paper.math_content.mcc}} \end{\commandkey{scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontentDOTmcc}}
} }
\end{isamarkuptext}% \end{isamarkuptext}%
} }
\expandafter\def\csname isaDof.text.scholarly_paper.math_content\endcsname{\mathcc} \expandafter\def\csname isaDofDOTtextDOTscholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontent\endcsname{\mathcc}

View File

@ -60,26 +60,26 @@
} }
\newcommand{\SRACautorefname}{SRAC} \newcommand{\SRACautorefname}{SRAC}
\newisadof{text.CENELEC_50128.SRAC}% \newisadof{textDOTCENELECUNDERSCORE50128DOTSRAC}%
[label=,type=% [label=,type=%
,Isa_COL.text_element.level=% ,IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTlevel=%
,Isa_COL.text_element.referentiable=% ,IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTreferentiable=%
,Isa_COL.text_element.variants=% ,IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTvariants=%
,CENELEC_50128.requirement.is_concerned=% ,CENELECUNDERSCORE50128DOTrequirementDOTisUNDERSCOREconcerned=%
,CENELEC_50128.requirement.long_name=% ,CENELECUNDERSCORE50128DOTrequirementDOTlongUNDERSCOREname=%
,CENELEC_50128.SRAC.formal_repr=% ,CENELECUNDERSCORE50128DOTSRACDOTformalUNDERSCORErepr=%
,CENELEC_50128.SRAC.assumption_kind=% ,CENELECUNDERSCORE50128DOTSRACDOTassumptionUNDERSCOREkind=%
,CENELEC_50128.EC.assumption_kind=% ,CENELECUNDERSCORE50128DOTECDOTassumptionUNDERSCOREkind=%
,CENELEC_50128.assumption.assumption_kind=% ,CENELECUNDERSCORE50128DOTassumptionDOTassumptionUNDERSCOREkind=%
][1]{% ][1]{%
\begin{isamarkuptext}% \begin{isamarkuptext}%
\ifthenelse{\equal{\commandkey{CENELEC_50128.requirement.long_name}}{}}{% \ifthenelse{\equal{\commandkey{CENELECUNDERSCORE50128DOTrequirementDOTlongUNDERSCOREname}}{}}{%
\begin{SRAC}% \begin{SRAC}%
\addxcontentsline{tos}{chapter}[]{\autoref{\commandkey{label}}}% \addxcontentsline{tos}{chapter}[]{\autoref{\commandkey{label}}}%
}{% }{%
\begin{SRAC}[\commandkey{CENELEC_50128.requirement.long_name}]% \begin{SRAC}[\commandkey{CENELECUNDERSCORE50128DOTrequirementDOTlongUNDERSCOREname}]%
\addxcontentsline{tos}{chapter}[]{\autoref{\commandkey{label}}: \commandkey{CENELEC_50128.requirement.long_name}}% \addxcontentsline{tos}{chapter}[]{\autoref{\commandkey{label}}: \commandkey{CENELECUNDERSCORE50128DOTrequirementDOTlongUNDERSCOREname}}%
\DOFindex{SRAC}{\commandkey{CENELEC_50128.requirement.long_name}}% \DOFindex{SRAC}{\commandkey{CENELECUNDERSCORE50128DOTrequirementDOTlongUNDERSCOREname}}%
}\label{\commandkey{label}}% }\label{\commandkey{label}}%
#1% #1%
\end{SRAC} \end{SRAC}
@ -113,26 +113,26 @@
} }
\newcommand{\ECautorefname}{EC} \newcommand{\ECautorefname}{EC}
\newisadof{text.CENELEC_50128.EC}% \newisadof{textDOTCENELECUNDERSCORE50128DOTEC}%
[label=,type=% [label=,type=%
,Isa_COL.text_element.level=% ,IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTlevel=%
,Isa_COL.text_element.referentiable=% ,IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTreferentiable=%
,Isa_COL.text_element.variants=% ,IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTvariants=%
,CENELEC_50128.requirement.is_concerned=% ,CENELECUNDERSCORE50128DOTrequirementDOTisUNDERSCOREconcerned=%
,CENELEC_50128.requirement.long_name=% ,CENELECUNDERSCORE50128DOTrequirementDOTlongUNDERSCOREname=%
,CENELEC_50128.SRAC.formal_repr=% ,CENELECUNDERSCORE50128DOTSRACDOTformalUNDERSCORErepr=%
,CENELEC_50128.SRAC.assumption_kind=% ,CENELECUNDERSCORE50128DOTSRACDOTassumptionUNDERSCOREkind=%
,CENELEC_50128.EC.assumption_kind=% ,CENELECUNDERSCORE50128DOTECDOTassumptionUNDERSCOREkind=%
,CENELEC_50128.assumption.assumption_kind=% ,CENELECUNDERSCORE50128DOTassumptionDOTassumptionUNDERSCOREkind=%
][1]{% ][1]{%
\begin{isamarkuptext}% \begin{isamarkuptext}%
\ifthenelse{\equal{\commandkey{CENELEC_50128.requirement.long_name}}{}}{% \ifthenelse{\equal{\commandkey{CENELECUNDERSCORE50128DOTrequirementDOTlongUNDERSCOREname}}{}}{%
\begin{EC}% \begin{EC}%
\addxcontentsline{tos}{chapter}[]{\autoref{\commandkey{label}}}% \addxcontentsline{tos}{chapter}[]{\autoref{\commandkey{label}}}%
}{% }{%
\begin{EC}[\commandkey{CENELEC_50128.requirement.long_name}]% \begin{EC}[\commandkey{CENELECUNDERSCORE50128DOTrequirementDOTlongUNDERSCOREname}]%
\addxcontentsline{toe}{chapter}[]{\autoref{\commandkey{label}}: \commandkey{CENELEC_50128.requirement.long_name}}% \addxcontentsline{toe}{chapter}[]{\autoref{\commandkey{label}}: \commandkey{CENELECUNDERSCORE50128DOTrequirementDOTlongUNDERSCOREname}}%
\DOFindex{EC}{\commandkey{CENELEC_50128.requirement.long_name}}% \DOFindex{EC}{\commandkey{CENELECUNDERSCORE50128DOTrequirementDOTlongUNDERSCOREname}}%
}\label{\commandkey{label}}% }\label{\commandkey{label}}%
#1% #1%
\end{EC} \end{EC}
@ -155,23 +155,23 @@
} }
\newcommand{\assumptionautorefname}{assumption} \newcommand{\assumptionautorefname}{assumption}
\newisadof{text.CENELEC_50128.assumption}% \newisadof{textDOTCENELECUNDERSCORE50128DOTassumption}%
[label=,type=% [label=,type=%
,Isa_COL.text_element.level=% ,IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTlevel=%
,Isa_COL.text_element.referentiable=% ,IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTreferentiable=%
,Isa_COL.text_element.variants=% ,IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTvariants=%
,CENELEC_50128.requirement.is_concerned=% ,CENELECUNDERSCORE50128DOTrequirementDOTisUNDERSCOREconcerned=%
,CENELEC_50128.requirement.long_name=% ,CENELECUNDERSCORE50128DOTrequirementDOTlongUNDERSCOREname=%
,CENELEC_50128.SRAC.formal_repr=% ,CENELECUNDERSCORE50128DOTSRACDOTformalUNDERSCORErepr=%
,CENELEC_50128.SRAC.assumption_kind=% ,CENELECUNDERSCORE50128DOTSRACDOTassumptionUNDERSCOREkind=%
,CENELEC_50128.assumption.assumption_kind=% ,CENELECUNDERSCORE50128DOTassumptionDOTassumptionUNDERSCOREkind=%
][1]{% ][1]{%
\begin{isamarkuptext}% \begin{isamarkuptext}%
\ifthenelse{\equal{\commandkey{CENELEC_50128.requirement.long_name}}{}}{% \ifthenelse{\equal{\commandkey{CENELECUNDERSCORE50128DOTrequirementDOTlongUNDERSCOREname}}{}}{%
\begin{assumption}% \begin{assumption}%
}{% }{%
\begin{assumption}[\commandkey{CENELEC_50128.requirement.long_name}]% \begin{assumption}[\commandkey{CENELECUNDERSCORE50128DOTrequirementDOTlongUNDERSCOREname}]%
\DOFindex{assumption}{\commandkey{CENELEC_50128.requirement.long_name}}% \DOFindex{assumption}{\commandkey{CENELECUNDERSCORE50128DOTrequirementDOTlongUNDERSCOREname}}%
}\label{\commandkey{label}}% }\label{\commandkey{label}}%
#1% #1%
\end{assumption} \end{assumption}
@ -196,23 +196,23 @@
\newcommand{\hypothesisautorefname}{hypothesis} \newcommand{\hypothesisautorefname}{hypothesis}
\newisadof{text.CENELEC_50128.hypothesis}% \newisadof{textDOTCENELECUNDERSCORE50128DOThypothesis}%
[label=,type=% [label=,type=%
,Isa_COL.text_element.level=% ,IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTlevel=%
,Isa_COL.text_element.referentiable=% ,IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTreferentiable=%
,Isa_COL.text_element.variants=% ,IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTvariants=%
,CENELEC_50128.requirement.is_concerned=% ,CENELECUNDERSCORE50128DOTrequirementDOTisUNDERSCOREconcerned=%
,CENELEC_50128.requirement.long_name=% ,CENELECUNDERSCORE50128DOTrequirementDOTlongUNDERSCOREname=%
,CENELEC_50128.SRAC.formal_repr=% ,CENELECUNDERSCORE50128DOTSRACDOTformalUNDERSCORErepr=%
,CENELEC_50128.SRAC.hypothesis_kind=% ,CENELECUNDERSCORE50128DOTSRACDOThypothesisUNDERSCOREkind=%
,CENELEC_50128.hypothesis.hyp_type=% ,CENELECUNDERSCORE50128DOThypothesisDOThypUNDERSCOREtype=%
][1]{% ][1]{%
\begin{isamarkuptext}% \begin{isamarkuptext}%
\ifthenelse{\equal{\commandkey{CENELEC_50128.requirement.long_name}}{}}{% \ifthenelse{\equal{\commandkey{CENELECUNDERSCORE50128DOTrequirementDOTlongUNDERSCOREname}}{}}{%
\begin{hypothesis}% \begin{hypothesis}%
}{% }{%
\begin{hypothesis}[\commandkey{CENELEC_50128.requirement.long_name}]% \begin{hypothesis}[\commandkey{CENELECUNDERSCORE50128DOTrequirementDOTlongUNDERSCOREname}]%
\DOFindex{hypothesis}{\commandkey{CENELEC_50128.requirement.long_name}}% \DOFindex{hypothesis}{\commandkey{CENELECUNDERSCORE50128DOTrequirementDOTlongUNDERSCOREname}}%
}\label{\commandkey{label}}% }\label{\commandkey{label}}%
#1% #1%
\end{hypothesis} \end{hypothesis}

View File

@ -180,7 +180,6 @@ text*[tu15::scholarly_paper.experiment ]\<open>Lectus accumsan velit ultrices, .
text*[tu16::scholarly_paper.hypothesis ]\<open>Lectus accumsan velit ultrices, ...\<close> text*[tu16::scholarly_paper.hypothesis ]\<open>Lectus accumsan velit ultrices, ...\<close>
text*[tu17::scholarly_paper.math_proof ]\<open>Lectus accumsan velit ultrices, ...\<close> text*[tu17::scholarly_paper.math_proof ]\<open>Lectus accumsan velit ultrices, ...\<close>
text*[tu18::scholarly_paper.consequence]\<open>Lectus accumsan velit ultrices, ...\<close> text*[tu18::scholarly_paper.consequence]\<open>Lectus accumsan velit ultrices, ...\<close>
text*[tu26::scholarly_paper.math_explanation]\<open>Lectus accumsan velit ultrices, ...\<close>
text*[tu19::scholarly_paper.math_formal]\<open>Lectus accumsan velit ultrices, ...\<close> text*[tu19::scholarly_paper.math_formal]\<open>Lectus accumsan velit ultrices, ...\<close>
text*[tu20::scholarly_paper.proposition]\<open>Lectus accumsan velit ultrices, ...\<close> text*[tu20::scholarly_paper.proposition]\<open>Lectus accumsan velit ultrices, ...\<close>
text*[tu21::scholarly_paper.math_content ]\<open>Lectus accumsan velit ultrices, ...\<close> text*[tu21::scholarly_paper.math_content ]\<open>Lectus accumsan velit ultrices, ...\<close>
@ -194,4 +193,44 @@ text*[tu8::scholarly_paper.tech_code] \<open>Lectus accumsan velit ultric
text*[tu27::scholarly_paper.engineering_content]\<open>Lectus accumsan velit ultrices, ...\<close> text*[tu27::scholarly_paper.engineering_content]\<open>Lectus accumsan velit ultrices, ...\<close>
text*[tu14::scholarly_paper.evaluation ]\<open>Lectus accumsan velit ultrices, ...\<close> text*[tu14::scholarly_paper.evaluation ]\<open>Lectus accumsan velit ultrices, ...\<close>
text\<open> @{axiom tu1} @{lemma tu2} @{example tu3} @{premise tu4} @{theorem tu5} @{assertion tu6}
@{technical tu9} @{assumption tu10 } @{definition tu13 }
@{experiment tu15 } @{hypothesis tu16 } @{math_proof tu17 }
@{consequence tu18 } @{math_formal tu19 } @{proposition tu20 }
@{math_content tu21 } @{math_example tu22 } @{conclusion_stmt tu23 }
@{math_motivation tu24 } @{tech_definition tu25 } @{eng_example tu28 }
@{tech_example tt10 } @{tech_code tu8 } @{engineering_content tu27 }
@{evaluation tu14 }
\<close>
subsection\<open>The Use in Macros\<close>
Lemma*[ttu2::scholarly_paper.lemma ]\<open>Lectus accumsan velit ultrices, ...\<close>
Example*[ttu3::scholarly_paper.math_example ]\<open>Lectus accumsan velit ultrices, ...\<close>
Premise*[ttu4::scholarly_paper.premise ]\<open>Lectus accumsan velit ultrices, ...\<close>
Theorem*[ttu5::scholarly_paper.theorem ]\<open>Lectus accumsan velit ultrices, ...\<close>
Assertion*[ttu6::scholarly_paper.assertion]\<open>Lectus accumsan velit ultrices, ...\<close>
Corollary*[ttu7::scholarly_paper.corollary]\<open>Lectus accumsan velit ultrices, ...\<close>
Assumption*[ttu10::scholarly_paper.assumption ]\<open>Lectus accumsan velit ultrices, ...\<close>
Definition*[ttu13::scholarly_paper.definition ]\<open>Lectus accumsan velit ultrices, ...\<close>
Hypothesis*[ttu16::scholarly_paper.hypothesis ]\<open>Lectus accumsan velit ultrices, ...\<close>
Proof*[ttu17::scholarly_paper.math_proof ]\<open>Lectus accumsan velit ultrices, ...\<close>
Consequence*[ttu18::scholarly_paper.consequence]\<open>Lectus accumsan velit ultrices, ...\<close>
Proposition*[ttu20::scholarly_paper.proposition]\<open>Lectus accumsan velit ultrices, ...\<close>
Conclusion*[ttu23::scholarly_paper.conclusion_stmt ]\<open>Lectus accumsan velit ultrices, ...\<close>
(* Definition*[ttu25::scholarly_paper.tech_definition ]\<open>Lectus accumsan velit ultrices, ...\<close>
interesting modeling bug.
*)
(*Example*[ttu28::scholarly_paper.eng_example ]\<open>Lectus accumsan velit ultrices, ...\<close>
interesting modeling bug.
*)
text\<open> @{lemma ttu2} @{math_example ttu3} @{premise ttu4} @{theorem ttu5} @{assertion ttu6}
@{assumption ttu10 } @{definition ttu13 }
@{hypothesis ttu16 } @{math_proof ttu17 }
@{consequence ttu18 } @{proposition ttu20 }
@{math_content tu21 } @{conclusion_stmt ttu23 }
@ \<open>{eng_example ttu28 }\<close>
@ \<open>{tech_example tt10 }\<close>
\<close>
end end

View File

@ -46,11 +46,11 @@ session "Isabelle_DOF" (AFP) = "Functional-Automata" +
"figures/definition-use-CSP-pdf.png" "figures/definition-use-CSP-pdf.png"
"figures/definition-use-CSP.png" "figures/definition-use-CSP.png"
"figures/MyCommentedIsabelle.png" "figures/MyCommentedIsabelle.png"
"figures/doc-mod-generic.png" "figures/doc-mod-generic.pdf"
"figures/doc-mod-isar.png" "figures/doc-mod-isar.pdf"
"figures/doc-mod-onto-docinst.png" "figures/doc-mod-onto-docinst.pdf"
"figures/doc-mod-DOF.png" "figures/doc-mod-DOF.pdf"
"figures/doc-mod-term-aq.png" "figures/doc-mod-term-aq.pdf"
export_classpath export_classpath

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -20,7 +20,7 @@
@Manual{ wenzel:isabelle-isar:2020, @Manual{ wenzel:isabelle-isar:2020,
title = {The Isabelle/Isar Reference Manual}, title = {The Isabelle/Isar Reference Manual},
author = {Makarius Wenzel}, author = {Makarius Wenzel},
year = 2020, year = 2022,
note = {Part of the Isabelle distribution.} note = {Part of the Isabelle distribution.}
} }

View File

@ -21,23 +21,23 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% begin: figure* % begin: figure*
\NewEnviron{isamarkupfigure*}[1][]{\isaDof[env={figure},#1]{\BODY}} \NewEnviron{isamarkupfigure*}[1][]{\isaDof[env={figure},#1]{\BODY}}
\newisadof{figure.Isa_COL.figure}% \newisadof{figureDOTIsaUNDERSCORECOLDOTfigure}%
[label=,type=% [label=,type=%
,Isa_COL.figure.relative_width=% ,IsaUNDERSCORECOLDOTfigureDOTrelativeUNDERSCOREwidth=%
,Isa_COL.figure.placement=% ,IsaUNDERSCORECOLDOTfigureDOTplacement=%
,Isa_COL.figure.src=% ,IsaUNDERSCORECOLDOTfigureDOTsrc=%
,Isa_COL.figure.spawn_columns=enum False True% ,IsaUNDERSCORECOLDOTfigureDOTspawnUNDERSCOREcolumns=enum False True%
][1]{% ][1]{%
\begin{figure}[] \begin{figure}[]
\centering \centering
\ifcommandkey{Isa_COL.figure.relative_width} \ifcommandkey{IsaUNDERSCORECOLDOTfigureDOTrelativeUNDERSCOREwidth}
{% {%
\gdef\dof@width{\commandkey{Isa_COL.figure.relative_width}} \gdef\dof@width{\commandkey{IsaUNDERSCORECOLDOTfigureDOTrelativeUNDERSCOREwidth}}
\gdef\dof@src{\commandkey{Isa_COL.figure.src}} \gdef\dof@src{\commandkey{IsaUNDERSCORECOLDOTfigureDOTsrc}}
\FPdiv\scale{\dof@width}{100}% \FPdiv\scale{\dof@width}{100}%
\includegraphics[width=\scale\textwidth]{\dof@src}% \includegraphics[width=\scale\textwidth]{\dof@src}%
}{% }{%
\gdef\dof@src{\commandkey{Isa_COL.figure.src}} \gdef\dof@src{\commandkey{IsaUNDERSCORECOLDOTfigureDOTsrc}}
\includegraphics[]{\dof@src}% \includegraphics[]{\dof@src}%
} }
\caption{#1}\label{\commandkey{label}}% \caption{#1}\label{\commandkey{label}}%
@ -50,44 +50,44 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% begin: side_by_side_figure* % begin: side_by_side_figure*
\NewEnviron{isamarkupsideUNDERSCOREbyUNDERSCOREsideUNDERSCOREfigure*}[1][]{\isaDof[env={side_by_side_figure},#1]{\BODY}} \NewEnviron{isamarkupsideUNDERSCOREbyUNDERSCOREsideUNDERSCOREfigure*}[1][]{\isaDof[env={sideUNDERSCOREbyUNDERSCOREsideUNDERSCOREfigure},#1]{\BODY}}
\newisadof{side_by_side_figure.Isa_COL.side_by_side_figure}% \newisadof{sideUNDERSCOREbyUNDERSCOREsideUNDERSCOREfigureDOTIsaUNDERSCORECOLDOTsideUNDERSCOREbyUNDERSCOREsideUNDERSCOREfigure}%
[label=,type=% [label=,type=%
,Isa_COL.figure.relative_width=% ,IsaUNDERSCORECOLDOTfigureDOTrelativeUNDERSCOREwidth=%
,Isa_COL.figure.placement=% ,IsaUNDERSCORECOLDOTfigureDOTplacement=%
,Isa_COL.figure.src=% ,IsaUNDERSCORECOLDOTfigureDOTsrc=%
,Isa_COL.side_by_side_figure.anchor=% ,IsaUNDERSCORECOLDOTsideUNDERSCOREbyUNDERSCOREsideUNDERSCOREfigureDOTanchor=%
,Isa_COL.side_by_side_figure.caption=% ,IsaUNDERSCORECOLDOTsideUNDERSCOREbyUNDERSCOREsideUNDERSCOREfigureDOTcaption=%
,Isa_COL.side_by_side_figure.relative_width2=% ,IsaUNDERSCORECOLDOTsideUNDERSCOREbyUNDERSCOREsideUNDERSCOREfigureDOTrelativeUNDERSCOREwidthTWO=%
,Isa_COL.side_by_side_figure.src2=% ,IsaUNDERSCORECOLDOTsideUNDERSCOREbyUNDERSCOREsideUNDERSCOREfigureDOTsrcTWO=%
,Isa_COL.side_by_side_figure.anchor2=% ,IsaUNDERSCORECOLDOTsideUNDERSCOREbyUNDERSCOREsideUNDERSCOREfigureDOTanchorTWO=%
,Isa_COL.side_by_side_figure.caption2=% ,IsaUNDERSCORECOLDOTsideUNDERSCOREbyUNDERSCOREsideUNDERSCOREfigureDOTcaptionTWO=%
,Isa_COL.side_by_side_figure.placement=% ,IsaUNDERSCORECOLDOTsideUNDERSCOREbyUNDERSCOREsideUNDERSCOREfigureDOTplacement=%
,Isa_COL.figure.spawn_columns=enum False True% ,IsaUNDERSCORECOLDOTfigureDOTspawnUNDERSCOREcolumns=enum False True%
][1]{% ][1]{%
\begin{figure}[] \begin{figure}[]
\subfloat[\label{\commandkey{Isa_COL.side_by_side_figure.anchor}}\commandkey{Isa_COL.side_by_side_figure.caption}]% \subfloat[\label{\commandkey{IsaUNDERSCORECOLDOTsideUNDERSCOREbyUNDERSCOREsideUNDERSCOREfigureDOTanchor}}\commandkey{IsaUNDERSCORECOLDOTsideUNDERSCOREbyUNDERSCOREsideUNDERSCOREfigureDOTcaption}]%
{\ifcommandkey{Isa_COL.figure.relative_width}% {\ifcommandkey{IsaUNDERSCORECOLDOTfigureDOTrelativeUNDERSCOREwidth}%
{% {%
\gdef\dof@width{\commandkey{Isa_COL.figure.relative_width}} \gdef\dof@width{\commandkey{IsaUNDERSCORECOLDOTfigureDOTrelativeUNDERSCOREwidth}}
\gdef\dof@src{\commandkey{Isa_COL.figure.src}} \gdef\dof@src{\commandkey{IsaUNDERSCORECOLDOTfigureDOTsrc}}
\FPdiv\scale{\dof@width}{100}% \FPdiv\scale{\dof@width}{100}%
\includegraphics[width=\scale\textwidth]{\dof@src}% \includegraphics[width=\scale\textwidth]{\dof@src}%
}{% }{%
\gdef\dof@src{\commandkey{Isa_COL.figure.src}} \gdef\dof@src{\commandkey{IsaUNDERSCORECOLDOTfigureDOTsrc}}
\includegraphics[]{\dof@src}% \includegraphics[]{\dof@src}%
}% }%
}% }%
\hfill% \hfill%
\subfloat[\label{\commandkey{Isa_COL.side_by_side_figure.anchor2}}\commandkey{Isa_COL.side_by_side_figure.caption2}]% \subfloat[\label{\commandkey{IsaUNDERSCORECOLDOTsideUNDERSCOREbyUNDERSCOREsideUNDERSCOREfigureDOTanchorTWO}}\commandkey{IsaUNDERSCORECOLDOTsideUNDERSCOREbyUNDERSCOREsideUNDERSCOREfigureDOTcaptionTWO}]%
{\ifcommandkey{Isa_COL.side_by_side_figure.relative_width2}% {\ifcommandkey{IsaUNDERSCORECOLDOTsideUNDERSCOREbyUNDERSCOREsideUNDERSCOREfigureDOTrelativeUNDERSCOREwidthTWO}%
{% {%
\gdef\dof@width{\commandkey{Isa_COL.side_by_side_figure.relative_width2}} \gdef\dof@width{\commandkey{IsaUNDERSCORECOLDOTsideUNDERSCOREbyUNDERSCOREsideUNDERSCOREfigureDOTrelativeUNDERSCOREwidthTWO}}
\gdef\dof@src{\commandkey{Isa_COL.side_by_side_figure.src2}} \gdef\dof@src{\commandkey{IsaUNDERSCORECOLDOTsideUNDERSCOREbyUNDERSCOREsideUNDERSCOREfigureDOTsrcTWO}}
\FPdiv\scale{\dof@width}{100}% \FPdiv\scale{\dof@width}{100}%
\includegraphics[width=\scale\textwidth]{\dof@src}% \includegraphics[width=\scale\textwidth]{\dof@src}%
}{% }{%
\gdef\dof@src{\commandkey{Isa_COL.side_by_side_figure.src2}} \gdef\dof@src{\commandkey{IsaUNDERSCORECOLDOTsideUNDERSCOREbyUNDERSCOREsideUNDERSCOREfigureDOTsrcTWO}}
\includegraphics[]{\dof@src}% \includegraphics[]{\dof@src}%
}% }%
}% }%

View File

@ -53,27 +53,27 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% begin: newcommand wrapper % begin: newcommand wrapper
\newcommand\newisadof[1]{\expandafter\newkeycommand\csname isaDof.#1\endcsname}% \newcommand\newisadof[1]{\expandafter\newkeycommand\csname isaDofDOT#1\endcsname}%
\newcommand\renewisadof[1]{\expandafter\renewkeycommand\csname isaDof.#1\endcsname}% \newcommand\renewisadof[1]{\expandafter\renewkeycommand\csname isaDofDOT#1\endcsname}%
\newcommand\provideisadof[1]{\expandafter\providekeycommand\csname isaDof.#1\endcsname}% \newcommand\provideisadof[1]{\expandafter\providekeycommand\csname isaDofDOT#1\endcsname}%
% end: newcommand wrapper % end: newcommand wrapper
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% begin: generic dispatcher % begin: generic dispatcher
\newkeycommand+[\|]\isaDof[env={UNKNOWN},label=,type={dummyT},args={}][1]{% \newkeycommand+[\|]\isaDof[env={UNKNOWN},label=,type={dummyT},args={}][1]{%
\ifcsname isaDof.\commandkey{type}\endcsname% \ifcsname isaDofDOT\commandkey{type}\endcsname%
\csname isaDof.\commandkey{type}\endcsname% \csname isaDofDOT\commandkey{type}\endcsname%
[label=\commandkey{label},\commandkey{args}]{#1}% [label=\commandkey{label},\commandkey{args}]{#1}%
\else% \else%
\ifcsname isaDof.\commandkey{env}.\commandkey{type}\endcsname% \ifcsname isaDofDOT\commandkey{env}DOT\commandkey{type}\endcsname%
\csname isaDof.\commandkey{env}.\commandkey{type}\endcsname% \csname isaDofDOT\commandkey{env}DOT\commandkey{type}\endcsname%
[label=\commandkey{label},\commandkey{args}]{#1}% [label=\commandkey{label},\commandkey{args}]{#1}%
\else% \else%
\message{Isabelle/DOF: Using default LaTeX representation for concept % \message{Isabelle/DOF: Using default LaTeX representation for concept %
"\commandkey{env}.\commandkey{type}".}% "\commandkey{env}.\commandkey{type}".}%
\ifcsname isaDof.\commandkey{env}\endcsname% \ifcsname isaDofDOT\commandkey{env}\endcsname%
\csname isaDof.\commandkey{env}\endcsname% \csname isaDofDOT\commandkey{env}\endcsname%
[label=\commandkey{label}]{#1}% [label=\commandkey{label}]{#1}%
\else% \else%
\errmessage{Isabelle/DOF: No LaTeX representation for concept % \errmessage{Isabelle/DOF: No LaTeX representation for concept %

View File

@ -73,9 +73,9 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% begin: title* % begin: title*
\NewEnviron{isamarkuptitle*}[1][]{\isaDof[env={title},#1]{\BODY}} \NewEnviron{isamarkuptitle*}[1][]{\isaDof[env={title},#1]{\BODY}}
\newisadof{title.scholarly_paper.title}% \newisadof{titleDOTscholarlyUNDERSCOREpaperDOTtitle}%
[label=,type=% [label=,type=%
,scholarly_paper.title.short_title=% ,scholarlyUNDERSCOREpaperDOTtitleDOTshortUNDERSCOREtitle=%
][1]{% ][1]{%
\immediate\write\@auxout{\noexpand\title{#1}}% \immediate\write\@auxout{\noexpand\title{#1}}%
} }
@ -85,9 +85,9 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% begin: subtitle* % begin: subtitle*
\NewEnviron{isamarkupsubtitle*}[1][]{\isaDof[env={subtitle},#1]{\BODY}} \NewEnviron{isamarkupsubtitle*}[1][]{\isaDof[env={subtitle},#1]{\BODY}}
\newisadof{subtitle.scholarly_paper.subtitle}% \newisadof{subtitleDOTscholarlyUNDERSCOREpaperDOTsubtitle}%
[label=,type=% [label=,type=%
,scholarly_paper.subtitle.abbrev=% ,scholarlyUNDERSCOREpaperDOTsubtitleDOTabbrev=%
][1]{% ][1]{%
\immediate\write\@auxout{\noexpand\subtitle{#1}}% \immediate\write\@auxout{\noexpand\subtitle{#1}}%
} }
@ -128,21 +128,21 @@
} }
\NewEnviron{isamarkupauthor*}[1][]{\isaDof[env={text},#1]{\BODY}} \NewEnviron{isamarkupauthor*}[1][]{\isaDof[env={text},#1]{\BODY}}
\provideisadof{text.scholarly_paper.author}% \provideisadof{textDOTscholarlyUNDERSCOREpaperDOTauthor}%
[label=,type=% [label=,type=%
,scholarly_paper.author.email=% ,scholarlyUNDERSCOREpaperDOTauthorDOTemail=%
,scholarly_paper.author.affiliation=% ,scholarlyUNDERSCOREpaperDOTauthorDOTaffiliation=%
,scholarly_paper.author.orcid=% ,scholarlyUNDERSCOREpaperDOTauthorDOTorcid=%
,scholarly_paper.author.http_site=% ,scholarlyUNDERSCOREpaperDOTauthorDOThttpUNDERSCOREsite=%
][1]{% ][1]{%
\stepcounter{dof@cnt@author} \stepcounter{dof@cnt@author}
\def\dof@a{\commandkey{scholarly_paper.author.affiliation}} \def\dof@a{\commandkey{scholarlyUNDERSCOREpaperDOTauthorDOTaffiliation}}
\ifthenelse{\equal{\commandkey{scholarly_paper.author.orcid}}{}}{% \ifthenelse{\equal{\commandkey{scholarlyUNDERSCOREpaperDOTauthorDOTorcid}}{}}{%
\protected@write\@auxout{}{\string\addauthor{#1\string\inst{\thedof@cnt@author}}}% \protected@write\@auxout{}{\string\addauthor{#1\string\inst{\thedof@cnt@author}}}%
}{% }{%
\protected@write\@auxout{}{\string\addauthor{#1\string\inst{\thedof@cnt@author}\string\orcidID{\commandkey{scholarly_paper.author.orcid}}}}% \protected@write\@auxout{}{\string\addauthor{#1\string\inst{\thedof@cnt@author}\string\orcidID{\commandkey{scholarlyUNDERSCOREpaperDOTauthorDOTorcid}}}}%
} }
\protected@write\@auxout{}{\string\addaffiliation{\dof@a\\\string\email{\commandkey{scholarly_paper.author.email}}}}% \protected@write\@auxout{}{\string\addaffiliation{\dof@a\\\string\email{\commandkey{scholarlyUNDERSCOREpaperDOTauthorDOTemail}}}}%
} }
% end: scholarly_paper.author % end: scholarly_paper.author
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@ -151,15 +151,15 @@
% begin: scholarly_paper.abstract % begin: scholarly_paper.abstract
\providecommand{\keywords}[1]{\mbox{}\\[2ex]\mbox{}\noindent{\textbf{Keywords:}} #1} \providecommand{\keywords}[1]{\mbox{}\\[2ex]\mbox{}\noindent{\textbf{Keywords:}} #1}
\NewEnviron{isamarkupabstract*}[1][]{\isaDof[env={text},#1]{\BODY}} \NewEnviron{isamarkupabstract*}[1][]{\isaDof[env={text},#1]{\BODY}}
\newisadof{text.scholarly_paper.abstract}% \newisadof{textDOTscholarlyUNDERSCOREpaperDOTabstract}%
[label=,type=% [label=,type=%
,scholarly_paper.abstract.keywordlist=% ,scholarlyUNDERSCOREpaperDOTabstractDOTkeywordlist=%
][1]{% ][1]{%
\begin{isamarkuptext}% \begin{isamarkuptext}%
\begin{abstract}% \begin{abstract}%
#1% #1%
\ifthenelse{\equal{\commandkey{scholarly_paper.abstract.keywordlist}}{}}{}{% \ifthenelse{\equal{\commandkey{scholarlyUNDERSCOREpaperDOTabstractDOTkeywordlist}}{}}{}{%
\keywords{\commandkey{scholarly_paper.abstract.keywordlist}}% \keywords{\commandkey{scholarlyUNDERSCOREpaperDOTabstractDOTkeywordlist}}%
}% }%
\end{abstract}% \end{abstract}%
\end{isamarkuptext}% \end{isamarkuptext}%
@ -172,84 +172,84 @@
%\newtheorem{theorem}{Theorem} %\newtheorem{theorem}{Theorem}
\newtheorem{defn}{Definition} \newtheorem{defn}{Definition}
\newcommand{\defnautorefname}{Definition} \newcommand{\defnautorefname}{Definition}
\NewEnviron{isamarkupDefinition*}[1][]{\isaDof[env={text},#1,type={scholarly_paper.math_content}]{\BODY}} \NewEnviron{isamarkupDefinition*}[1][]{\isaDof[env={text},#1,type={scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontent}]{\BODY}}
\newtheorem{axm}{Axiom} \newtheorem{axm}{Axiom}
\newcommand{\axmautorefname}{Axiom} \newcommand{\axmautorefname}{Axiom}
\NewEnviron{isamarkupAxiom*}[1][]{\isaDof[env={text},#1,type={scholarly_paper.math_content}]{\BODY}} \NewEnviron{isamarkupAxiom*}[1][]{\isaDof[env={text},#1,type={scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontent}]{\BODY}}
\newtheorem{theom}{Theorem} \newtheorem{theom}{Theorem}
\newcommand{\theomautorefname}{Theorem} \newcommand{\theomautorefname}{Theorem}
\NewEnviron{isamarkupTheorem*}[1][]{\isaDof[env={text},#1,type={scholarly_paper.math_content}]{\BODY}} \NewEnviron{isamarkupTheorem*}[1][]{\isaDof[env={text},#1,type={scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontent}]{\BODY}}
\newtheorem{lemm}{Lemma} \newtheorem{lemm}{Lemma}
\newcommand{\lemmautorefname}{Lemma} \newcommand{\lemmautorefname}{Lemma}
\NewEnviron{isamarkupLemma*}[1][]{\isaDof[env={text},#1,type={scholarly_paper.math_content}]{\BODY}} \NewEnviron{isamarkupLemma*}[1][]{\isaDof[env={text},#1,type={scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontent}]{\BODY}}
\newtheorem{corr}{Corollary} \newtheorem{corr}{Corollary}
\newcommand{\corrautorefname}{Corollary} \newcommand{\corrautorefname}{Corollary}
\NewEnviron{isamarkupCorollary*}[1][]{\isaDof[env={text},#1,type={scholarly_paper.math_content}]{\BODY}} \NewEnviron{isamarkupCorollary*}[1][]{\isaDof[env={text},#1,type={scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontent}]{\BODY}}
\newtheorem{prpo}{Proposition} \newtheorem{prpo}{Proposition}
\newcommand{\prpoautorefname}{Proposition} \newcommand{\prpoautorefname}{Proposition}
\NewEnviron{isamarkupProposition*}[1][]{\isaDof[env={text},#1,type={scholarly_paper.math_content}]{\BODY}} \NewEnviron{isamarkupProposition*}[1][]{\isaDof[env={text},#1,type={scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontent}]{\BODY}}
\newtheorem{rulE}{Rule} \newtheorem{rulE}{Rule}
\newcommand{\rulEautorefname}{Rule} \newcommand{\rulEautorefname}{Rule}
\NewEnviron{isamarkupRule*}[1][]{\isaDof[env={text},#1,type={scholarly_paper.math_content}]{\BODY}} \NewEnviron{isamarkupRule*}[1][]{\isaDof[env={text},#1,type={scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontent}]{\BODY}}
\newtheorem{assn}{Assertion} \newtheorem{assn}{Assertion}
\newcommand{\assnautorefname}{Assertion} \newcommand{\assnautorefname}{Assertion}
\NewEnviron{isamarkupAssertion*}[1][]{\isaDof[env={text},#1,type={scholarly_paper.math_content}]{\BODY}} \NewEnviron{isamarkupAssertion*}[1][]{\isaDof[env={text},#1,type={scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontent}]{\BODY}}
\newtheorem{hypt}{Hypothesis} \newtheorem{hypt}{Hypothesis}
\newcommand{\hyptautorefname}{Hypothesis} \newcommand{\hyptautorefname}{Hypothesis}
\NewEnviron{isamarkupHypothesis*}[1][]{\isaDof[env={text},#1,type={scholarly_paper.math_content}]{\BODY}} \NewEnviron{isamarkupHypothesis*}[1][]{\isaDof[env={text},#1,type={scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontent}]{\BODY}}
\newtheorem{assm}{Assumption} \newtheorem{assm}{Assumption}
\newcommand{\assmautorefname}{Assumption} \newcommand{\assmautorefname}{Assumption}
\NewEnviron{isamarkupAssumption*}[1][]{\isaDof[env={text},#1,type={scholarly_paper.math_content}]{\BODY}} \NewEnviron{isamarkupAssumption*}[1][]{\isaDof[env={text},#1,type={scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontent}]{\BODY}}
\newtheorem{prms}{Premise} \newtheorem{prms}{Premise}
\newcommand{\prmsautorefname}{Premise} \newcommand{\prmsautorefname}{Premise}
\NewEnviron{isamarkupPremise*}[1][]{\isaDof[env={text},#1,type={scholarly_paper.math_content}]{\BODY}} \NewEnviron{isamarkupPremise*}[1][]{\isaDof[env={text},#1,type={scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontent}]{\BODY}}
\newtheorem{cons}{Consequence} \newtheorem{cons}{Consequence}
\newcommand{\consautorefname}{Consequence} \newcommand{\consautorefname}{Consequence}
\NewEnviron{isamarkupConsequence*}[1][]{\isaDof[env={text},#1,type={scholarly_paper.math_content}]{\BODY}} \NewEnviron{isamarkupConsequence*}[1][]{\isaDof[env={text},#1,type={scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontent}]{\BODY}}
\newtheorem{conc_stmt}{Conclusion} \newtheorem{concUNDERSCOREstmt}{Conclusion}
\newcommand{\concstmtautorefname}{Conclusion} \newcommand{\concUNDERSCOREstmtautorefname}{Conclusion}
\NewEnviron{isamarkupConclusion*}[1][]{\isaDof[env={text},#1,type={scholarly_paper.math_content}]{\BODY}} \NewEnviron{isamarkupConclusion*}[1][]{\isaDof[env={text},#1,type={scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontent}]{\BODY}}
\newtheorem{prf_stmt}{Proof} \newtheorem{prfUNDERSCOREstmt}{Proof}
\newcommand{\prfstmtautorefname}{Proof} \newcommand{\prfUNDERSCOREstmtautorefname}{Proof}
\NewEnviron{isamarkupProof*}[1][]{\isaDof[env={text},#1,type={scholarly_paper.math_content}]{\BODY}} \NewEnviron{isamarkupProof*}[1][]{\isaDof[env={text},#1,type={scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontent}]{\BODY}}
\newtheorem{expl_stmt}{Example} \newtheorem{explUNDERSCOREstmt}{Example}
\newcommand{\explstmtautorefname}{Example} \newcommand{\explUNDERSCOREstmtautorefname}{Example}
\NewEnviron{isamarkupExample*}[1][]{\isaDof[env={text},#1,type={scholarly_paper.math_content}]{\BODY}} \NewEnviron{isamarkupExample*}[1][]{\isaDof[env={text},#1,type={scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontent}]{\BODY}}
\newtheorem{rmrk}{Remark} \newtheorem{rmrk}{Remark}
\newcommand{\rmrkautorefname}{Remark} \newcommand{\rmrkautorefname}{Remark}
\NewEnviron{isamarkupRemark*}[1][]{\isaDof[env={text},#1,type={scholarly_paper.math_content}]{\BODY}} \NewEnviron{isamarkupRemark*}[1][]{\isaDof[env={text},#1,type={scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontent}]{\BODY}}
\newtheorem{notn}{Notation} \newtheorem{notn}{Notation}
\newcommand{\notnautorefname}{Notation} \newcommand{\notnautorefname}{Notation}
\NewEnviron{isamarkupNotation*}[1][]{\isaDof[env={text},#1,type={scholarly_paper.math_content}]{\BODY}} \NewEnviron{isamarkupNotation*}[1][]{\isaDof[env={text},#1,type={scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontent}]{\BODY}}
\newtheorem{tmgy}{Terminology} \newtheorem{tmgy}{Terminology}
\newcommand{\tmgyautorefname}{Terminology} \newcommand{\tmgyautorefname}{Terminology}
\NewEnviron{isamarkupTerminology*}[1][]{\isaDof[env={text},#1,type={scholarly_paper.math_content}]{\BODY}} \NewEnviron{isamarkupTerminology*}[1][]{\isaDof[env={text},#1,type={scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontent}]{\BODY}}
\newisadof{text.scholarly_paper.math_content}% \newisadof{textDOTscholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontent}%
[label=,type=% [label=,type=%
, scholarly_paper.math_content.short_name ={}% , scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontentDOTshortUNDERSCOREname ={}%
, scholarly_paper.math_content.mcc = % , scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontentDOTmcc = %
, Isa_COL.text_element.level =% , IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTlevel =%
, Isa_COL.text_element.referentiable =% , IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTreferentiable =%
, Isa_COL.text_element.variants =% , IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTvariants =%
, scholarly_paper.text_section.main_author =% , scholarlyUNDERSCOREpaperDOTtextUNDERSCOREsectionDOTmainUNDERSCOREauthor =%
, scholarly_paper.text_section.fixme_list =% , scholarlyUNDERSCOREpaperDOTtextUNDERSCOREsectionDOTfixmeUNDERSCORElist =%
, Isa_COL.text_element.level =% , IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTlevel =%
, scholarly_paper.technical.definition_list =% , scholarlyUNDERSCOREpaperDOTtechnicalDOTdefinitionUNDERSCORElist =%
, scholarly_paper.technical.status =% , scholarlyUNDERSCOREpaperDOTtechnicalDOTstatus =%
] ]
[1] [1]
{% {%
\begin{isamarkuptext}% \begin{isamarkuptext}%
\ifthenelse{\equal{\commandkey{scholarly_paper.math_content.short_name}} {} } \ifthenelse{\equal{\commandkey{scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontentDOTshortUNDERSCOREname}} {} }
{% {%
\begin{\commandkey{scholarly_paper.math_content.mcc}}\label{\commandkey{label}} \begin{\commandkey{scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontentDOTmcc}}\label{\commandkey{label}}
#1 #1
\end{\commandkey{scholarly_paper.math_content.mcc}} \end{\commandkey{scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontentDOTmcc}}
}{% }{%
\begin{\commandkey{scholarly_paper.math_content.mcc}}[\commandkey{scholarly_paper.math_content.short_name}]\label{\commandkey{label}} \begin{\commandkey{scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontentDOTmcc}}[\commandkey{scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontentDOTshortUNDERSCOREname}]\label{\commandkey{label}}
#1 #1
\end{\commandkey{scholarly_paper.math_content.mcc}} \end{\commandkey{scholarlyUNDERSCOREpaperDOTmathUNDERSCOREcontentDOTmcc}}
} }
\end{isamarkuptext}% \end{isamarkuptext}%
} }

View File

@ -53,12 +53,12 @@ ML\<open>
val _ = val _ =
Monitor_Command_Parser.document_command \<^command_keyword>\<open>abstract*\<close> "Textual Definition" Monitor_Command_Parser.document_command \<^command_keyword>\<open>abstract*\<close> "Textual Definition"
{markdown = true, body = true} {markdown = true, body = true}
(Onto_Macros.enriched_document_cmd_exp (SOME "abstract") []) (K(K I)); (Onto_Macros.enriched_document_cmd_exp (SOME "abstract") []) [] I;
val _ = val _ =
Monitor_Command_Parser.document_command \<^command_keyword>\<open>author*\<close> "Textual Definition" Monitor_Command_Parser.document_command \<^command_keyword>\<open>author*\<close> "Textual Definition"
{markdown = true, body = true} {markdown = true, body = true}
(Onto_Macros.enriched_document_cmd_exp (SOME "author") []) (K(K I)); (Onto_Macros.enriched_document_cmd_exp (SOME "author") []) [] I;
\<close> \<close>
text\<open>Scholarly Paper is oriented towards the classical domains in science: text\<open>Scholarly Paper is oriented towards the classical domains in science:
@ -203,7 +203,6 @@ datatype math_content_class =
| "notn" \<comment>\<open>notation\<close> | "notn" \<comment>\<open>notation\<close>
| "tmgy" \<comment>\<open>terminology\<close> | "tmgy" \<comment>\<open>terminology\<close>
text\<open>Instances of the \<open>doc_class\<close> \<^verbatim>\<open>math_content\<close> are by definition @{term "semiformal"}; they may text\<open>Instances of the \<open>doc_class\<close> \<^verbatim>\<open>math_content\<close> are by definition @{term "semiformal"}; they may
be non-referential, but in this case they will not have a @{term "short_name"}.\<close> be non-referential, but in this case they will not have a @{term "short_name"}.\<close>
@ -444,49 +443,50 @@ fun doc_cmd kwd txt flag key =
in in
Onto_Macros.enriched_formal_statement_command default [("mcc",key)] meta_args thy Onto_Macros.enriched_formal_statement_command default [("mcc",key)] meta_args thy
end) end)
(Onto_Macros.transform_attr [("mcc",key)]) [\<^const_name>\<open>mcc\<close>]
(Onto_Macros.transform_attr [(\<^const_name>\<open>mcc\<close>,key)])
in in
val _ = doc_cmd \<^command_keyword>\<open>Definition*\<close> "Freeform Definition" val _ = doc_cmd \<^command_keyword>\<open>Definition*\<close> "Freeform Definition"
Definition_default_class "defn"; Definition_default_class \<^const_name>\<open>defn\<close>;
val _ = doc_cmd \<^command_keyword>\<open>Lemma*\<close> "Freeform Lemma Description" val _ = doc_cmd \<^command_keyword>\<open>Lemma*\<close> "Freeform Lemma Description"
Lemma_default_class "lemm"; Lemma_default_class \<^const_name>\<open>lemm\<close>;
val _ = doc_cmd \<^command_keyword>\<open>Theorem*\<close> "Freeform Theorem" val _ = doc_cmd \<^command_keyword>\<open>Theorem*\<close> "Freeform Theorem"
Theorem_default_class "theom"; Theorem_default_class \<^const_name>\<open>theom\<close>;
(* cut and paste to make it runnable, but nonsensical so far: *) (* cut and paste to make it runnable, but nonsensical so far: *)
val _ = doc_cmd \<^command_keyword>\<open>Proposition*\<close> "Freeform Proposition" val _ = doc_cmd \<^command_keyword>\<open>Proposition*\<close> "Freeform Proposition"
Proposition_default_class "prpo"; Proposition_default_class \<^const_name>\<open>prpo\<close>;
val _ = doc_cmd \<^command_keyword>\<open>Premise*\<close> "Freeform Premise" val _ = doc_cmd \<^command_keyword>\<open>Premise*\<close> "Freeform Premise"
Premise_default_class "prms"; Premise_default_class \<^const_name>\<open>prms\<close>;
val _ = doc_cmd \<^command_keyword>\<open>Corollary*\<close> "Freeform Corollary" val _ = doc_cmd \<^command_keyword>\<open>Corollary*\<close> "Freeform Corollary"
Corollary_default_class "corr"; Corollary_default_class \<^const_name>\<open>corr\<close>;
val _ = doc_cmd \<^command_keyword>\<open>Consequence*\<close> "Freeform Consequence" val _ = doc_cmd \<^command_keyword>\<open>Consequence*\<close> "Freeform Consequence"
Consequence_default_class "cons"; Consequence_default_class \<^const_name>\<open>cons\<close>;
val _ = doc_cmd \<^command_keyword>\<open>Conclusion*\<close> "Freeform Conclusion" val _ = doc_cmd \<^command_keyword>\<open>Conclusion*\<close> "Freeform Conclusion"
Conclusion_default_class "conc_stmt"; Conclusion_default_class \<^const_name>\<open>conc_stmt\<close>;
val _ = doc_cmd \<^command_keyword>\<open>Assumption*\<close> "Freeform Assumption" val _ = doc_cmd \<^command_keyword>\<open>Assumption*\<close> "Freeform Assumption"
Assumption_default_class "assm"; Assumption_default_class \<^const_name>\<open>assm\<close>;
val _ = doc_cmd \<^command_keyword>\<open>Hypothesis*\<close> "Freeform Hypothesis" val _ = doc_cmd \<^command_keyword>\<open>Hypothesis*\<close> "Freeform Hypothesis"
Hypothesis_default_class "prpo"; Hypothesis_default_class \<^const_name>\<open>prpo\<close>;
val _ = doc_cmd \<^command_keyword>\<open>Assertion*\<close> "Freeform Assertion" val _ = doc_cmd \<^command_keyword>\<open>Assertion*\<close> "Freeform Assertion"
Assertion_default_class "assn"; Assertion_default_class \<^const_name>\<open>assn\<close>;
val _ = doc_cmd \<^command_keyword>\<open>Proof*\<close> "Freeform Proof" val _ = doc_cmd \<^command_keyword>\<open>Proof*\<close> "Freeform Proof"
Proof_default_class "prf_stmt"; Proof_default_class \<^const_name>\<open>prf_stmt\<close>;
val _ = doc_cmd \<^command_keyword>\<open>Example*\<close> "Freeform Example" val _ = doc_cmd \<^command_keyword>\<open>Example*\<close> "Freeform Example"
Example_default_class "expl_stmt"; Example_default_class \<^const_name>\<open>expl_stmt\<close>;
end end
end end
\<close> \<close>

View File

@ -34,16 +34,16 @@
\newisadof{text.technical_report.SML}% \newisadof{text.technical_report.SML}%
[ label=,type=% [ label=,type=%
, Isa_COL.text_element.level=% , IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTlevel=%
, Isa_COL.text_element.referentiable=% , IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTreferentiable=%
, Isa_COL.text_element.variants=% , IsaUNDERSCORECOLDOTtextUNDERSCOREelementDOTvariants=%
, scholarly_paper.text_section.main_author=% , scholarlyUNDERSCOREpaperDOTtextUNDERSCOREsectionDOTmainUNDERSCOREauthor=%
, scholarly_paper.text_section.fixme_list=% , scholarlyUNDERSCOREpaperDOTtextUNDERSCOREsectionDOTfixmeUNDERSCORElist=%
, scholarly_paper.technical.definition_list=% , scholarlyUNDERSCOREpaperDOTtechnicalDOTdefinitionUNDERSCORElist=%
, scholarly_paper.technical.status=% , scholarlyUNDERSCOREpaperDOTtechnicalDOTstatus=%
, scholarly_paper.technical.formal_results=% , scholarlyUNDERSCOREpaperDOTtechnicalDOTformalUNDERSCOREresults=%
, technical_report.code.checked=% , technicalUNDERSCOREreportDOTcodeDOTchecked=%
, technical_report.code.caption=% , technicalUNDERSCOREreportDOTcodeDOTcaption=%
] ]
[1] [1]
{% {%

View File

@ -103,17 +103,11 @@ fun transform_cid thy NONE X = X
end end
in in
fun transform_attr S cid_long thy doc_attrs = fun transform_attr S doc_attrs =
let let
fun transform_attr' [] doc_attrs = doc_attrs fun transform_attr' [] doc_attrs = doc_attrs
| transform_attr' (s::S) (doc_attrs) = | transform_attr' (s::S) (doc_attrs) =
let fun markup2string s = s |> YXML.content_of let val (name', value) = s
|> Symbol.explode
|> List.filter (fn c => c <> Symbol.DEL)
|> String.concat
fun toLong n = DOF_core.get_attribute_info cid_long (markup2string n) thy
|> the |> #long_name
val (name', value) = s |> (fn (n, v) => (toLong n, v))
val doc_attrs' = doc_attrs val doc_attrs' = doc_attrs
|> map (fn (name, term) => if name = name' |> map (fn (name, term) => if name = name'
then (name, value) then (name, value)
@ -154,7 +148,7 @@ end (* local *)
fun heading_command (name, pos) descr level = fun heading_command (name, pos) descr level =
Monitor_Command_Parser.document_command (name, pos) descr Monitor_Command_Parser.document_command (name, pos) descr
{markdown = false, body = true} (enriched_text_element_cmd level) (K(K I)); {markdown = false, body = true} (enriched_text_element_cmd level) [] I;
val _ = heading_command \<^command_keyword>\<open>title*\<close> "section heading" NONE; val _ = heading_command \<^command_keyword>\<open>title*\<close> "section heading" NONE;
val _ = heading_command \<^command_keyword>\<open>subtitle*\<close> "section heading" NONE; val _ = heading_command \<^command_keyword>\<open>subtitle*\<close> "section heading" NONE;

View File

@ -841,6 +841,10 @@ val check_opening_ml_invs = check_invs get_opening_ml_invariants
val check_closing_ml_invs = check_invs get_closing_ml_invariants val check_closing_ml_invs = check_invs get_closing_ml_invariants
(* Output name for LaTeX macros.
Also rewrite "." to allow macros with objects long names *)
val output_name = Latex.output_name o translate_string (fn "." => "DOT" | s => s)
val ISA_prefix = "Isabelle_DOF_" val ISA_prefix = "Isabelle_DOF_"
val doc_class_prefix = ISA_prefix ^ "doc_class_" val doc_class_prefix = ISA_prefix ^ "doc_class_"
@ -2134,19 +2138,21 @@ fun close_monitor_command (args as (((oid, pos), cid_pos),
end end
fun meta_args_2_latex thy transform_attr fun meta_args_2_latex thy sem_attrs transform_attr
((((lab, pos), cid_opt), attr_list) : ODL_Meta_Args_Parser.meta_args_t) = ((((lab, pos), cid_opt), attr_list) : ODL_Meta_Args_Parser.meta_args_t) =
(* for the moment naive, i.e. without textual normalization of (* for the moment naive, i.e. without textual normalization of
attribute names and adapted term printing *) attribute names and adapted term printing *)
let val l = DOF_core.get_instance_name_global lab thy |> enclose "{" "}" let val l = DOF_core.get_instance_name_global lab thy |> DOF_core.output_name
|> enclose "{" "}"
|> prefix "label = " |> prefix "label = "
(* val _ = writeln("meta_args_2_string lab:"^ lab ^":"^ (@{make_string } cid_opt) ) *) (* val _ = writeln("meta_args_2_string lab:"^ lab ^":"^ (@{make_string } cid_opt) ) *)
val cid_long = case cid_opt of val cid_long = case cid_opt of
NONE => DOF_core.cid_of lab thy NONE => DOF_core.cid_of lab thy
| SOME(cid,_) => DOF_core.get_onto_class_name_global' cid thy | SOME(cid,_) => DOF_core.get_onto_class_name_global' cid thy
(* val _ = writeln("meta_args_2_string cid_long:"^ cid_long ) *) (* val _ = writeln("meta_args_2_string cid_long:"^ cid_long ) *)
val cid_txt = "type = " ^ (enclose "{" "}" cid_long); val cid_txt = cid_long |> DOF_core.output_name
|> enclose "{" "}"
|> prefix "type = "
fun ltx_of_term _ _ (c as \<^Const_>\<open>Cons \<^Type>\<open>char\<close> for _ _\<close>) = HOLogic.dest_string c fun ltx_of_term _ _ (c as \<^Const_>\<open>Cons \<^Type>\<open>char\<close> for _ _\<close>) = HOLogic.dest_string c
| ltx_of_term _ _ \<^Const_>\<open>Nil _\<close> = "" | ltx_of_term _ _ \<^Const_>\<open>Nil _\<close> = ""
| ltx_of_term _ _ \<^Const_>\<open>numeral _ for t\<close> = Int.toString(HOLogic.dest_numeral t) | ltx_of_term _ _ \<^Const_>\<open>numeral _ for t\<close> = Int.toString(HOLogic.dest_numeral t)
@ -2191,8 +2197,24 @@ fun meta_args_2_latex thy transform_attr
val default_args_filtered = filter (fn (a,_) => not (exists (fn b => b = a) val default_args_filtered = filter (fn (a,_) => not (exists (fn b => b = a)
(map (fn (c,_) => c) actual_args))) default_args (map (fn (c,_) => c) actual_args))) default_args
val transformed_args = (actual_args@default_args_filtered) val transformed_args = (actual_args@default_args_filtered)
|> transform_attr cid_long thy |> transform_attr
val str_args = transformed_args fun update_sem_std_attrs [] attrs = attrs
| update_sem_std_attrs (attr::attrs) attrs' =
let val attrs'' = attrs' |> map (fn (name, value) =>
let val value' = value |> Long_Name.base_name
in
if name = attr
then if value' (*|> Symbol_Pos.is_identifier*)
|> Symbol.is_ascii_identifier
then (name, DOF_core.output_name value')
else ISA_core.err ("Bad name of semantic attribute"
^ name ^ ": " ^ value
^ ". Name must be ASCII") pos
else (name, value') end)
in update_sem_std_attrs attrs attrs'' end
val updated_sem_std_attrs = update_sem_std_attrs sem_attrs transformed_args
val updated_sem_std_attrs' = updated_sem_std_attrs |> map (apfst DOF_core.output_name)
val str_args = updated_sem_std_attrs'
|> map (fn (lhs,rhs) => lhs^" = "^(enclose "{" "}" rhs)) |> map (fn (lhs,rhs) => lhs^" = "^(enclose "{" "}" rhs))
val label_and_type = String.concat [ l, ",", cid_txt] val label_and_type = String.concat [ l, ",", cid_txt]
@ -2218,15 +2240,15 @@ fun gen_enriched_document_cmd' {inline} cid_transform attr_transform
(* {markdown = true} sets the parsing process such that in the text-core (* {markdown = true} sets the parsing process such that in the text-core
markdown elements are accepted. *) markdown elements are accepted. *)
fun document_output {markdown: bool, markup: Latex.text -> Latex.text} transform_attr meta_args text ctxt = fun document_output {markdown: bool, markup: Latex.text -> Latex.text} sem_attrs transform_attr meta_args text ctxt =
let let
val thy = Proof_Context.theory_of ctxt; val thy = Proof_Context.theory_of ctxt;
val _ = Context_Position.reports ctxt (Document_Output.document_reports text); val _ = Context_Position.reports ctxt (Document_Output.document_reports text);
val output_meta = meta_args_2_latex thy transform_attr meta_args; val output_meta = meta_args_2_latex thy sem_attrs transform_attr meta_args;
val output_text = Document_Output.output_document ctxt {markdown = markdown} text; val output_text = Document_Output.output_document ctxt {markdown = markdown} text;
in markup (output_meta @ output_text) end; in markup (output_meta @ output_text) end;
fun document_output_reports name {markdown, body} transform_attr meta_args text ctxt = fun document_output_reports name {markdown, body} sem_attrs transform_attr meta_args text ctxt =
let let
(*val pos = Input.pos_of text; (*val pos = Input.pos_of text;
val _ = val _ =
@ -2236,16 +2258,16 @@ fun document_output_reports name {markdown, body} transform_attr meta_args text
fun markup xml = fun markup xml =
let val m = if body then Markup.latex_body else Markup.latex_heading let val m = if body then Markup.latex_body else Markup.latex_heading
in [XML.Elem (m (Latex.output_name name), xml)] end; in [XML.Elem (m (Latex.output_name name), xml)] end;
in document_output {markdown = markdown, markup = markup} transform_attr meta_args text ctxt end; in document_output {markdown = markdown, markup = markup} sem_attrs transform_attr meta_args text ctxt end;
(* document output commands *) (* document output commands *)
fun document_command (name, pos) descr mark cmd transform_attr = fun document_command (name, pos) descr mark cmd sem_attrs transform_attr =
Outer_Syntax.command (name, pos) descr Outer_Syntax.command (name, pos) descr
(ODL_Meta_Args_Parser.attributes -- Parse.document_source >> (fn (meta_args, text) => (ODL_Meta_Args_Parser.attributes -- Parse.document_source >> (fn (meta_args, text) =>
Toplevel.theory' (fn _ => cmd meta_args) Toplevel.theory' (fn _ => cmd meta_args)
(SOME (Toplevel.presentation_context #> document_output_reports name mark transform_attr meta_args text)))); (SOME (Toplevel.presentation_context #> document_output_reports name mark sem_attrs transform_attr meta_args text))));
(* Core Command Definitions *) (* Core Command Definitions *)
@ -2271,14 +2293,14 @@ val _ =
val _ = val _ =
document_command \<^command_keyword>\<open>text*\<close> "formal comment (primary style)" document_command \<^command_keyword>\<open>text*\<close> "formal comment (primary style)"
{markdown = true, body = true} (gen_enriched_document_cmd {inline=true} I I) (K(K I)); {markdown = true, body = true} (gen_enriched_document_cmd {inline=true} I I) [] I;
(* This is just a stub at present *) (* This is just a stub at present *)
val _ = val _ =
document_command \<^command_keyword>\<open>text-macro*\<close> "formal comment macro" document_command \<^command_keyword>\<open>text-macro*\<close> "formal comment macro"
{markdown = true, body = true} {markdown = true, body = true}
(gen_enriched_document_cmd {inline=false} (* declare as macro *) I I) (K(K I)); (gen_enriched_document_cmd {inline=false} (* declare as macro *) I I) [] I;
val (declare_reference_default_class, declare_reference_default_class_setup) val (declare_reference_default_class, declare_reference_default_class_setup)
@ -2553,6 +2575,9 @@ ML\<open>
local local
fun elaborate stmt ctxt = stmt |> map (apsnd (map (apfst (DOF_core.elaborate_term ctxt)
#> apsnd (map (DOF_core.elaborate_term ctxt)))))
fun prep_statement prep_att prep_stmt raw_elems raw_stmt ctxt = fun prep_statement prep_att prep_stmt raw_elems raw_stmt ctxt =
let let
val (stmt, elems_ctxt) = prep_stmt raw_elems raw_stmt ctxt; val (stmt, elems_ctxt) = prep_stmt raw_elems raw_stmt ctxt;
@ -2562,11 +2587,7 @@ fun prep_statement prep_att prep_stmt raw_elems raw_stmt ctxt =
(case raw_stmt of (case raw_stmt of
Element.Shows _ => Element.Shows _ =>
let val stmt' = Attrib.map_specs (map prep_att) stmt let val stmt' = Attrib.map_specs (map prep_att) stmt
val stmt'' = stmt' |> map (fn (b, ts) => val stmt'' = elaborate stmt' ctxt
(b, ts |> map (fn (t', t's) =>
(DOF_core.elaborate_term ctxt t',
t's |> map (fn t'' =>
DOF_core.elaborate_term ctxt t'')))))
in (([], prems, stmt'', NONE), stmt_ctxt) end in (([], prems, stmt'', NONE), stmt_ctxt) end
| Element.Obtains raw_obtains => | Element.Obtains raw_obtains =>
let let
@ -2581,11 +2602,7 @@ fun prep_statement prep_att prep_stmt raw_elems raw_stmt ctxt =
||> Proof_Context.restore_stmt asms_ctxt; ||> Proof_Context.restore_stmt asms_ctxt;
val stmt' = [(Binding.empty_atts, [(#2 (#1 (Obtain.obtain_thesis ctxt)), [])])]; val stmt' = [(Binding.empty_atts, [(#2 (#1 (Obtain.obtain_thesis ctxt)), [])])];
val stmt'' = stmt' |> map (fn (b, ts) => val stmt'' = elaborate stmt' ctxt
(b, ts |> map (fn (t', t's) =>
(DOF_core.elaborate_term ctxt t',
t's |> map (fn t'' =>
DOF_core.elaborate_term ctxt t'')))))
in ((Obtain.obtains_attribs raw_obtains, prems, stmt'', SOME that'), that_ctxt) end) in ((Obtain.obtains_attribs raw_obtains, prems, stmt'', SOME that'), that_ctxt) end)
end; end;
@ -2826,7 +2843,7 @@ fun pretty_docitem_antiquotation_generic cid_decl ctxt ({unchecked, define}, src
|(true,true) => XML.enclose("{\\isaDofmacroDef[type={"^cid_decl^"}]{")"}}" |(true,true) => XML.enclose("{\\isaDofmacroDef[type={"^cid_decl^"}]{")"}}"
|(false,true) => XML.enclose("{\\isaDofmacroExp[type={"^cid_decl^"}]{")"}}" |(false,true) => XML.enclose("{\\isaDofmacroExp[type={"^cid_decl^"}]{")"}}"
) )
(Latex.text (str, pos)) (Latex.text (DOF_core.output_name str, pos))
end end

View File

@ -36,8 +36,11 @@ define_shortcut* TeXLive \<rightleftharpoons> \<open>\TeXLive\<close>
text\<open>Note that these setups assume that the associated \<^LaTeX> macros text\<open>Note that these setups assume that the associated \<^LaTeX> macros
are defined, \<^eg>, in the document prelude. \<close> are defined, \<^eg>, in the document prelude. \<close>
define_macro* index \<rightleftharpoons> \<open>\index{\<close> _ \<open>}\<close> define_macro* index \<rightleftharpoons> \<open>\index{\<close> _ \<open>}\<close>
define_macro* bindex \<rightleftharpoons> \<open>\bindex{\<close> _ \<open>}\<close> define_macro* bindex \<rightleftharpoons> \<open>\bindex{\<close> _ \<open>}\<close>
define_macro* nolinkurl \<rightleftharpoons> \<open>\nolinkurl{\<close> _ \<open>}\<close>
define_macro* center \<rightleftharpoons> \<open>\center{\<close> _ \<open>}\<close>
define_macro* ltxinline \<rightleftharpoons> \<open>\inlineltx|\<close> _ \<open>|\<close>
ML\<open> ML\<open>

View File

@ -106,9 +106,9 @@ text\<open>
side_by_side_figure*[docModGenConcr::side_by_side_figure,anchor="''docModGen''", side_by_side_figure*[docModGenConcr::side_by_side_figure,anchor="''docModGen''",
caption="''Schematic Representation.''",relative_width="45", caption="''Schematic Representation.''",relative_width="45",
src="''figures/doc-mod-generic.png''",anchor2="''docModIsar''", src="''figures/doc-mod-generic.pdf''",anchor2="''docModIsar''",
caption2="''The Isar Instance.''",relative_width2="45", caption2="''The Isar Instance.''",relative_width2="45",
src2="''figures/doc-mod-isar.png''"]\<open>A Representation of a Document Model.\<close> src2="''figures/doc-mod-isar.pdf''"]\<open>A Representation of a Document Model.\<close>
text\<open>The body of a theory file consists of a sequence of \<^emph>\<open>commands\<close> that must be introduced text\<open>The body of a theory file consists of a sequence of \<^emph>\<open>commands\<close> that must be introduced
by a command keyword such as \<^boxed_theory_text>\<open>requirement\<close> above. Command keywords may mark by a command keyword such as \<^boxed_theory_text>\<open>requirement\<close> above. Command keywords may mark
@ -184,13 +184,13 @@ text\<open>Antiquotations seen as semantic macros are partial functions of type
side_by_side_figure*[docModOnto::side_by_side_figure,anchor="''docModGen''", side_by_side_figure*[docModOnto::side_by_side_figure,anchor="''docModGen''",
caption="''A Document with Ontological Annotations.''",relative_width="47", caption="''A Document with Ontological Annotations.''",relative_width="47",
src="''figures/doc-mod-DOF.png''",anchor2="''docModDOF''", src="''figures/doc-mod-DOF.pdf''",anchor2="''docModDOF''",
caption2="''Ontological References.''",relative_width2="47", caption2="''Ontological References.''",relative_width2="47",
src2="''figures/doc-mod-onto-docinst.png''"]\<open>Documents conform to Ontologies.\<close> src2="''figures/doc-mod-onto-docinst.pdf''"]\<open>Documents conform to Ontologies.\<close>
text\<open>Since Isabelle's commands are freely programmable, it is possible to implement \<^dof> as an text\<open>Since Isabelle's commands are freely programmable, it is possible to implement \<^dof> as an
extension of the system. In particular, the ontology language of \<^dof> provides an ontology extension of the system. In particular, the ontology language of \<^dof> provides an ontology
definition language ODL that \<^emph>\<open>generates\<close> anti-quotations and the infrastructure to check and evaluate definition language ODL\<^bindex>\<open>ODL\<close> that \<^emph>\<open>generates\<close> anti-quotations and the infrastructure to check and evaluate
them. This allows for checking an annotated document with respect to a given ontology, which may be them. This allows for checking an annotated document with respect to a given ontology, which may be
specific for a given domain-specific universe of discourse (see @{figure "docModOnto"}). ODL will specific for a given domain-specific universe of discourse (see @{figure "docModOnto"}). ODL will
be described in @{text_section (unchecked) "isadof_tour"} in more detail.\<close> be described in @{text_section (unchecked) "isadof_tour"} in more detail.\<close>

View File

@ -23,7 +23,7 @@ chapter*[isadof_tour::text_section]\<open>\<^isadof>: A Guided Tour\<close>
text\<open> text\<open>
In this chapter, we will give an introduction into using \<^isadof> for users that want to create and In this chapter, we will give an introduction into using \<^isadof> for users that want to create and
maintain documents following an existing document ontology. maintain documents following an existing document ontology\<^bindex>\<open>ontology\<close> in ODL\<^bindex>\<open>ODL\<close>.
\<close> \<close>
section*[getting_started::technical]\<open>Getting Started\<close> section*[getting_started::technical]\<open>Getting Started\<close>
@ -34,7 +34,7 @@ text\<open>
\<^LaTeX>. We assume a basic familiarity with a Linux/Unix-like command line (i.e., a shell). \<^LaTeX>. We assume a basic familiarity with a Linux/Unix-like command line (i.e., a shell).
Furthermore, we focus on the installation of the latest official release of \<^isadof> as Furthermore, we focus on the installation of the latest official release of \<^isadof> as
available in the Archive of Formal Proofs (AFP).\<^footnote>\<open>If you want to work with the development version available in the Archive of Formal Proofs (AFP).\<^footnote>\<open>If you want to work with the development version
of Isabelle/DOF, please obtain its source code from the Isabelle/DOF Git repostitory of \<^isadof>, please obtain its source code from the \<^isadof> Git repostitory
(\<^url>\<open>https://git.logicalhacking.com/Isabelle_DOF/Isabelle_DOF\<close> and follow the instructions (\<^url>\<open>https://git.logicalhacking.com/Isabelle_DOF/Isabelle_DOF\<close> and follow the instructions
in provided \<^verbatim>\<open>README.MD\<close> file.\<close> in provided \<^verbatim>\<open>README.MD\<close> file.\<close>
@ -72,11 +72,12 @@ text\<open>
By installing the AFP in the previous steps, you already installed \<^isadof>. In fact, \<^isadof> By installing the AFP in the previous steps, you already installed \<^isadof>. In fact, \<^isadof>
is currently consisting out of two AFP entries: is currently consisting out of two AFP entries:
\<^item> Isabelle\_DOF: This entry \<^item> \<^verbatim>\<open>Isabelle_DOF\<close>: This entry
contains the Isabelle/DOF system itself, including the Isabelle/DOF manual. contains the \<^isadof> system itself, including the \<^isadof> manual.
\<^item> Isabelle\_DOF-Example-I: This entry contains an example of \<^item> \<^verbatim>\<open>Isabelle_DOF-Example-I\<close>: This entry contains an example of
an academic paper written using the Isabelle/DOF system oriented towards an academic paper written using the \<^isadof> system oriented towards an
\<^item> Isabelle\_DOF-Example-II: This entry contains another example of introductory paper.
\<^item> \<^verbatim>\<open>Isabelle_DOF-Example-II\<close>: This entry contains another example of
a mathematics-oriented academic paper. a mathematics-oriented academic paper.
It is recommended to follow structure one of these papers.\<close> It is recommended to follow structure one of these papers.\<close>
@ -143,10 +144,10 @@ want to use. Otherwise, they will not be available.
paragraph\<open>Warning.\<close> paragraph\<open>Warning.\<close>
text\<open> text\<open>
Note that the session @{session "Isabelle_DOF"} needs to be part of the ``main'' session Note that the session \<^session>\<open>Isabelle_DOF\<close> needs to be part of the ``main'' session
hierarchy. Loading the Isabelle/DOF theories as part of a session section, e.g., hierarchy. Loading the \<^isadof> theories as part of a session section, e.g.,
\<close> \<close>
text\<open> text\<open>\<^latex>\<open>
\begin{config}{ROOT} \begin{config}{ROOT}
session example = HOL + session example = HOL +
options [document = pdf, document_output = "output", document_build = dof] options [document = pdf, document_output = "output", document_build = dof]
@ -156,7 +157,7 @@ session example = HOL +
theories theories
C C
\end{config} \end{config}
\<close> \<close>\<close>
text\<open> text\<open>
will not work. Trying to build a document using such a setup will result in the will not work. Trying to build a document using such a setup will result in the
following error message: following error message:
@ -214,35 +215,31 @@ text\<open>At times, this causes idiosyncrasies like the ones cited in the follo
\<close> \<close>
section*[scholar_onto::example]\<open>Writing Academic Publications in \<^boxed_theory_text>\<open>scholarly_paper\<close>\<close> section*[scholar_onto::example]\<open>Writing Academic Publications in \<^boxed_theory_text>\<open>scholarly_paper\<close>\<close>
subsection\<open>Writing Academic Papers\<close> subsection\<open>A Selection of major Examples\<close>
text\<open> text\<open>
The ontology \<^verbatim>\<open>scholarly_paper\<close> The ontology \<^verbatim>\<open>scholarly_paper\<close> \<^index>\<open>ontology!scholarly\_paper\<close> is an ontology modeling
\<^index>\<open>ontology!scholarly\_paper\<close> is an ontology modeling academic/scientific papers, with a slight bias towards texts in the domain of mathematics and
academic/scientific papers, with a slight bias towards texts in the domain of mathematics and engineering. engineering. We explain first the principles of its underlying ontology, and then we present two
We explain first the principles of its underlying ontology, and then we present two ``real'' ``real'' examples from our own publication practice.
examples from our own publication practice. \<^enum> The iFM 2020 paper~@{cite "taha.ea:philosophers:2020"} is a typical mathematical text,
\<close> heavy in definitions with complex mathematical notation and a lot of non-trivial cross-referencing
text\<open> between statements, definitions and proofs which are ontologically tracked. However, wrt.
\<^enum> The iFM 2020 paper~@{cite "taha.ea:philosophers:2020"} is a typical mathematical text, the possible linking between the underlying formal theory and this mathematical presentation, it follows a pragmatic path without any ``deep'' linking to types, terms and theorems,
heavy in definitions with complex mathematical notation and a lot of non-trivial cross-referencing deliberately not exploiting \<^isadof> 's full potential with this regard.
between statements, definitions and proofs which are ontologically tracked. However, wrt. \<^enum> In the CICM 2018 paper~@{cite "brucker.ea:isabelle-ontologies:2018"}, we deliberately
the possible linking between the underlying formal theory and this mathematical presentation, refrain from integrating references to formal content in order to demonstrate that \<^isadof> is not
it follows a pragmatic path without any ``deep'' linking to types, terms and theorems, a framework from Isabelle users to Isabelle users only, but people just avoiding as much as
deliberately not exploiting \<^isadof> 's full potential with this regard. possible \<^LaTeX> notation.
\<^enum> In the CICM 2018 paper~@{cite "brucker.ea:isabelle-ontologies:2018"}, we deliberately
refrain from integrating references to formal content in order to demonstrate that \<^isadof> is not
a framework from Isabelle users to Isabelle users only, but people just avoiding as much as
possible \<^LaTeX> notation.
The \<^isadof> distribution contains both examples using the ontology \<^verbatim>\<open>scholarly_paper\<close> in The \<^isadof> distribution contains both examples using the ontology \<^verbatim>\<open>scholarly_paper\<close> in
the directory \nolinkurl{examples/scholarly_paper/2018-cicm-isabelle_dof-applications/} or the directory \<^nolinkurl>\<open>examples/scholarly_paper/2018-cicm-isabelle_dof-applications/\<close> or
\nolinkurl{examples/scholarly_paper/2020-iFM-CSP}. \<^nolinkurl>\<open>examples/scholarly_paper/2020-iFM-CSP\<close>.
You can inspect/edit the example in Isabelle's IDE, by either You can inspect/edit the example in Isabelle's IDE, by either
\<^item> starting Isabelle/jEdit using your graphical user interface (\<^eg>, by clicking on the \<^item> starting Isabelle/jEdit using your graphical user interface (\<^eg>, by clicking on the
Isabelle-Icon provided by the Isabelle installation) and loading the file Isabelle-Icon provided by the Isabelle installation) and loading the file
\nolinkurl{examples/scholarly_paper/2018-cicm-isabelle_dof-applications/IsaDofApplications.thy}, \<^nolinkurl>\<open>examples/scholarly_paper/2018-cicm-isabelle_dof-applications/IsaDofApplications.thy"\<close>
\<^item> starting Isabelle/jEdit from the command line by, \<^eg>, calling: \<^item> starting Isabelle/jEdit from the command line by, \<^eg>, calling:
@{boxed_bash [display]\<open>ë\prompt{\isadofdirn}ë @{boxed_bash [display]\<open>ë\prompt{\isadofdirn}ë
isabelle jedit -d . examples/scholarly_paper/2020-iFM-CSP/paper.thy \<close>} isabelle jedit -d . examples/scholarly_paper/2020-iFM-CSP/paper.thy \<close>}
@ -312,7 +309,7 @@ as follows:
Additional means assure that the following invariant is maintained in a document Additional means assure that the following invariant is maintained in a document
conforming to \<^verbatim>\<open>scholarly_paper\<close>: conforming to \<^verbatim>\<open>scholarly_paper\<close>:
\center {\<open>level > 0\<close>} \<^center>\<open>\<open>level > 0\<close>\<close>
\<close> \<close>
text\<open>\<^vs>\<open>1.0cm\<close>\<close> text\<open>\<^vs>\<open>1.0cm\<close>\<close>
@ -464,10 +461,6 @@ in which the text-elements instances are expected to appear in the textual order
defined by \<^typ>\<open>article\<close>. defined by \<^typ>\<open>article\<close>.
\<close> \<close>
figure*[doc_termAq::figure,relative_width="80",src="''figures/doc-mod-term-aq.png''"]
\<open>Term-Antiquotations Referencing to Annotated Elements\<close>
side_by_side_figure*[exploring::side_by_side_figure,anchor="''fig-Dogfood-II-bgnd1''", side_by_side_figure*[exploring::side_by_side_figure,anchor="''fig-Dogfood-II-bgnd1''",
caption="''Exploring a reference of a text-element.''",relative_width="48", caption="''Exploring a reference of a text-element.''",relative_width="48",
src="''figures/Dogfood-II-bgnd1''",anchor2="''fig-bgnd-text_section''", src="''figures/Dogfood-II-bgnd1''",anchor2="''fig-bgnd-text_section''",
@ -485,12 +478,21 @@ side_by_side_figure*["hyperlinks"::side_by_side_figure,anchor="''fig:Dogfood-IV-
text\<open> text\<open>
From these class definitions, \<^isadof> also automatically generated editing From these class definitions, \<^isadof> also automatically generated editing
support for Isabelle/jEdit. In \autoref{fig-Dogfood-II-bgnd1} and support for Isabelle/jEdit. In
\autoref{fig-bgnd-text_section} we show how hovering over links permits to explore its @{figure "exploring"}(left)
% \autoref{fig-Dogfood-II-bgnd1}
and
@{figure "exploring"}(right)
% \autoref{fig-bgnd-text_section}
we show how hovering over links permits to explore its
meta-information. Clicking on a document class identifier permits to hyperlink into the meta-information. Clicking on a document class identifier permits to hyperlink into the
corresponding class definition (\autoref{fig:Dogfood-IV-jumpInDocCLass}); hovering over an corresponding class definition (
attribute-definition (which is qualified in order to disambiguate; @{figure "hyperlinks"}(left)
\autoref{fig:Dogfood-V-attribute}) shows its type. %\autoref{fig:Dogfood-IV-jumpInDocCLass})
; hovering over an attribute-definition (which is qualified in order to disambiguate; cf.
@{figure "hyperlinks"}(right)
%\autoref{fig:Dogfood-V-attribute}
) shows its type.
\<close> \<close>
figure*[figDogfoodVIlinkappl::figure,relative_width="80",src="''figures/Dogfood-VI-linkappl.png''"] figure*[figDogfoodVIlinkappl::figure,relative_width="80",src="''figures/Dogfood-VI-linkappl.png''"]
@ -499,17 +501,68 @@ figure*[figDogfoodVIlinkappl::figure,relative_width="80",src="''figures/Dogfood-
text\<open> text\<open>
An ontological reference application in @{figure "figDogfoodVIlinkappl"}: the An ontological reference application in @{figure "figDogfoodVIlinkappl"}: the
ontology-dependant antiquotation \<^boxed_theory_text>\<open>@{example \<open>ex1\<close>}\<close> refers to the corresponding ontology-dependant antiquotation \<^boxed_theory_text>\<open>@{example \<open>ex1\<close>}\<close> refers to the corresponding
text-element \<^boxed_theory_text>\<open>ex1\<close>. text-element \<^boxed_theory_text>\<open>ex1\<close>. Hovering allows for inspection, clicking for jumping to the
Hovering allows for inspection, clicking for jumping to the definition. definition. If the link does not exist or has a non-compatible type, the text is not validated,
If the link does not exist or has a non-compatible type, the text is not validated, \<^ie>, \<^ie>, Isabelle/jEdit will respond with an error.\<close>
Isabelle/jEdit will respond with an error.\<close>
text\<open>We advise users to experiment with different notation variants. text\<open>We advise users to experiment with different notation variants.
Note, further, that the Isabelle \<^latex>\<open>@\{cite ...\}\<close>-text-anti-quotation makes its checking Note, further, that the Isabelle \<^latex>\<open>@\{cite ...\}\<close>-text-anti-quotation makes its checking
on the level of generated \<^verbatim>\<open>.aux\<close>-files, which are not necessarily up-to-date. Ignoring the PIDE on the level of generated \<^verbatim>\<open>.aux\<close>-files, which are not necessarily up-to-date. Ignoring the PIDE
error-message and compiling a with a consistent bibtex usually makes disappear this behavior. error-message and compiling it with a consistent bibtex usually makes disappear this behavior.
\<close> \<close>
subsection*["using-term-aq"::technical, main_author = "Some @{author ''bu''}"]
\<open>Using Term-Antiquotations\<close>
text\<open>The present version of \<^isadof> is the first version that supports the novel feature of
\<^dof>-generated term-antiquotations\<^bindex>\<open>term-antiquotations\<close>, \<^ie>, antiquotations embedded
in HOL-\<open>\<lambda>\<close>-terms possessing arguments that were validated in the ontological context.
These \<open>\<lambda>\<close>-terms may occur in definitions, lemmas, or in values to define attributes
in class instances. They have the format:\<close>
text\<open>\<^center>\<open>\<open>@{name arg\<^sub>1 ... arg\<^sub>n\<^sub>-\<^sub>1} arg\<^sub>n\<close>\<close>\<close>
text\<open>Logically, they are defined as an identity in the last argument \<open>arg\<^sub>n\<close>; thus,
ontologically checked prior arguments \<open>arg\<^sub>1 ... arg\<^sub>n\<^sub>-\<^sub>1\<close> can be ignored during a proof
process; ontologically, they can be used to assure the traceability of, \<^eg>, semi-formal
assumptions throughout their way to formalisation and use in lemmas and proofs. \<close>
figure*[doc_termAq::figure,relative_width="50",src="''figures/doc-mod-term-aq.pdf''"]
\<open>Term-Antiquotations Referencing to Annotated Elements\<close>
text\<open>As shown in @{figure \<open>doc_termAq\<close>}, this feature of \<^isadof> substantially increases
the expressibility of links between the formal and the informal in \<^dof> documents.\<close>
text\<open> In the following, we describe a common scenario linking semi-formal assumptions and
formal ones:
@{boxed_theory_text [display]
\<open>
declare_reference*[e2::"definition"]
Assumption*[a1::"assumption", short_name="\<open>safe environment.\<close>"]
\<open>The system shall only be used in the temperature range from 0 to 60 degrees Celsius.
Formally, this is stated as follows in @{definition (unchecked) \<open>e2\<close>}.\<close>
definition*[e2, status=formal] safe_env :: "state \<Rightarrow> bool"
where "safe_env \<sigma> \<equiv> (temp \<sigma> \<in> {0 .. 60})"
theorem*[e3::"theorem"] safety_preservation::" @{assumption \<open>a1\<close>} (safe_env \<sigma>) \<Longrightarrow> ... "
\<close>}
\<close>
text\<open>Note that Isabelle procedes in a strict ``declaration-before-use''-manner, \<^ie> assumes
linear visibility on all references. This also holds for the declaration of ontological
references. In order to represent cyclic dependencies, it is therefore necessary to
start with the forward declaration \<^theory_text>\<open>declare_reference*\<close>. From there on, this reference
can be used in text, term, and code-contexts, albeit its definition appears textually later.
The corresponding freeform-formulation of this assumption can be explicitly referred in the
assumption of a theorem establishing the link. The \<^theory_text>\<open>theorem*\<close>-variant of the common
Isabelle/Isar \<^theory_text>\<open>theorem\<close>-command will in contrast to the latter not ignore \<open>\<open>a1\<close>\<close>,
\<^ie> parse just as string, but also validate it in the previous context.
Note that the \<^theory_text>\<open>declare_reference*\<close> command will appear in the \<^LaTeX> generated from this
document fragment. In order to avoid this, one has to enclose this command into the
document comments :\<close>
text\<open>\<^center>\<open>\<open>(*<*) ... (*>*)\<close>\<close>\<close>
section*[tech_onto::example]\<open>Writing Technical Reports in \<^boxed_theory_text>\<open>technical_report\<close>\<close> section*[tech_onto::example]\<open>Writing Technical Reports in \<^boxed_theory_text>\<open>technical_report\<close>\<close>
@ -595,7 +648,7 @@ In the \<^pdf> output, these text-fragments were displayed verbatim.
section\<open>Style Guide\<close> section\<open>Some Recommendations: A little Style Guide\<close>
text\<open> text\<open>
The document generation of \<^isadof> is based on Isabelle's document generation framework, The document generation of \<^isadof> is based on Isabelle's document generation framework,
using \<^LaTeX>{} as the underlying back-end. As Isabelle's document generation framework, it is using \<^LaTeX>{} as the underlying back-end. As Isabelle's document generation framework, it is
@ -613,11 +666,18 @@ text\<open> This is \emph{emphasized} and this is a
text\<open> This is *\<open>emphasized\<close> and this is a text\<open> This is *\<open>emphasized\<close> and this is a
citation @{cite "brucker.ea:isabelle-ontologies:2018"}.\<close> citation @{cite "brucker.ea:isabelle-ontologies:2018"}.\<close>
\<close>} \<close>}
The list of standard Isabelle document antiquotations, as well as their options and styles,
can be found in the Isabelle reference manual @{cite "wenzel:isabelle-isar:2020"}, also be found
under \<^url>\<open>https://www.cl.cam.ac.uk/research/hvg/Isabelle/dist/Isabelle2022/doc/isar-ref.pdf\<close>,
section 4.2.
Clearly, this is not always possible and, in fact, often \<^isadof> documents will contain In practice, \<^isadof> documents with ambitious layout will contain a certain number of
\<^LaTeX>-commands, but this should be restricted to layout improvements that otherwise are (currently) \<^LaTeX>-commands, but this should be restricted to layout improvements that otherwise are (currently)
not possible. As far as possible, the use of \<^LaTeX>-commands should be restricted to the definition not possible. As far as possible, raw \<^LaTeX> should be restricted to the definition
of ontologies and document templates (see @{docitem (unchecked) \<open>isadof_ontologies\<close>}). of ontologies and macros (see @{docitem (unchecked) \<open>isadof_ontologies\<close>}). If raw
\<^LaTeX> commands can not be avoided, it is recommended to use the Isabelle document comment
\<^latex>\<open>\verb+\+\verb+<^latex>+\<close>\<open>\<open>argument\<close>\<close> to isolate these parts
(cf. \<^url>\<open>https://www.cl.cam.ac.uk/research/hvg/Isabelle/dist/Isabelle2022/doc/isar-ref.pdf\<close>).
Restricting the use of \<^LaTeX> has two advantages: first, \<^LaTeX> commands can circumvent the Restricting the use of \<^LaTeX> has two advantages: first, \<^LaTeX> commands can circumvent the
consistency checks of \<^isadof> and, hence, only if no \<^LaTeX> commands are used, \<^isadof> can consistency checks of \<^isadof> and, hence, only if no \<^LaTeX> commands are used, \<^isadof> can

View File

@ -43,7 +43,7 @@ text\<open>
\<^boxed_theory_text>\<open>text*\<close>, \<^boxed_theory_text>\<open>declare_reference*\<close>, \<^etc>.; \<^boxed_theory_text>\<open>text*\<close>, \<^boxed_theory_text>\<open>declare_reference*\<close>, \<^etc>.;
They allow for the annotation of text-elements with meta-information defined in ODL, They allow for the annotation of text-elements with meta-information defined in ODL,
\<^item> the \<^isadof> library \<^theory>\<open>Isabelle_DOF.Isa_COL\<close> providing \<^item> the \<^isadof> library \<^theory>\<open>Isabelle_DOF.Isa_COL\<close> providing
ontological basic (documents) concepts as well as supporting infrastructure, ontological basic (documents) concepts \<^bindex>\<open>ontology\<close> as well as supporting infrastructure,
\<^item> an infrastructure for ontology-specific \<^emph>\<open>layout definitions\<close>, exploiting this meta-information, \<^item> an infrastructure for ontology-specific \<^emph>\<open>layout definitions\<close>, exploiting this meta-information,
and and
\<^item> an infrastructure for generic \<^emph>\<open>layout definitions\<close> for documents following, \<^eg>, the format \<^item> an infrastructure for generic \<^emph>\<open>layout definitions\<close> for documents following, \<^eg>, the format
@ -51,27 +51,29 @@ text\<open>
\<close> \<close>
text\<open> text\<open>
Similarly to Isabelle, which is based on a core logic \<^theory>\<open>Pure\<close> and then extended by libraries Similarly to Isabelle, which is based on a core logic \<^theory>\<open>Pure\<close> and then extended by libraries
to major systems like \<^verbatim>\<open>HOL\<close>, \<^isadof> has a generic core infrastructure \<^dof> and then to major systems like \<^verbatim>\<open>HOL\<close>, \<^isadof> has a generic core infrastructure \<^dof> and then presents
presents itself to users via major library extensions, which add domain-specific itself to users via major library extensions, which add domain-specific system-extensions.
system-extensions. Ontologies in \<^isadof> are not just a sequence of descriptions in Ontologies\<^bindex>\<open>ontology\<close> in \<^isadof> are not just a sequence of descriptions in \<^isadof>'s Ontology
\<^isadof>'s Ontology Definition Language (ODL). Rather, they are themselves presented as integrated Definition Language (ODL)\<^bindex>\<open>ODL\<close>. Rather, they are themselves presented as integrated
sources that provide textual descriptions, abbreviations, macro-support and even ML-code. sources that provide textual descriptions, abbreviations, macro-support and even ML-code.
Conceptually, the library of \<^isadof> is currently organized as follows\<^footnote>\<open>The \<^emph>\<open>technical\<close> Conceptually, the library of \<^isadof> is currently organized as follows\<^footnote>\<open>The \<^emph>\<open>technical\<close>
organization is slightly different and shown in organization is slightly different and shown in
@{technical (unchecked) \<open>infrastructure\<close>}.\<close>: @{technical (unchecked) \<open>infrastructure\<close>}.\<close>
\<^bindex>\<open>COL\<close>\<^bindex>\<open>scholarly\_paper\<close>\<^bindex>\<open>technical\_report\<close> \<^bindex>\<open>CENELEC\<close>:
% %
\<^latex>\<open>
\begin{center} \begin{center}
\begin{minipage}{.9\textwidth}\footnotesize \begin{minipage}{.9\textwidth}\footnotesize
\dirtree{% \dirtree{%
.1 COL\DTcomment{The Common Ontology Library}. .1 COL\DTcomment{The Common Ontology Library}.
.2 scholarly\_paper\DTcomment{Scientific Papers}. .2 scholarly\_paper\DTcomment{Scientific Papers}.
.3 technical\_report\DTcomment{Extended Papers}. .3 technical\_report\DTcomment{Extended Papers, Technical Reports}.
.4 CENELEC\_50128\DTcomment{Papers according to CENELEC\_50128}. .4 CENELEC\_50128\DTcomment{Papers according to CENELEC\_50128}.
.4 CC\_v3\_1\_R5\DTcomment{Papers according to Common Criteria}. .4 CC\_v3\_1\_R5\DTcomment{Papers according to Common Criteria}.
.4 \ldots. .4 \ldots.
} }
\end{minipage} \end{minipage}
\end{center} \end{center}\<close>
These libraries not only provide ontological concepts, but also syntactic sugar in Isabelle's These libraries not only provide ontological concepts, but also syntactic sugar in Isabelle's
command language Isar that is of major importance for users (and may be felt as \<^isadof> key command language Isar that is of major importance for users (and may be felt as \<^isadof> key
@ -95,27 +97,25 @@ text\<open>
section\<open>The Ontology Definition Language (ODL)\<close> section\<open>The Ontology Definition Language (ODL)\<close>
text\<open> text\<open>
ODL shares some similarities with meta-modeling languages such as UML class ODL shares some similarities with meta-modeling languages such as UML class
models: It builds upon concepts like class, inheritance, class-instances, attributes, references models: It builds upon concepts like class, inheritance, class-instances, attributes, references
to instances, and class-invariants. Some concepts like advanced type-checking, referencing to to instances, and class-invariants. Some concepts like advanced type-checking, referencing to
formal entities of Isabelle, and monitors are due to its specific application in the formal entities of Isabelle, and monitors are due to its specific application in the
Isabelle context. Conceptually, ontologies specified in ODL consist of: Isabelle context. Conceptually, ontologies specified in ODL consist of:
\<^item> \<^emph>\<open>document classes\<close> (\<^boxed_theory_text>\<open>doc_class\<close>) \<^index>\<open>doc\_class\<close> that describe concepts, \<^item> \<^emph>\<open>document classes\<close> (\<^boxed_theory_text>\<open>doc_class\<close>) \<^index>\<open>doc\_class\<close> that describe concepts,
the keyword (\<^boxed_theory_text>\<open>onto_class\<close>) \<^index>\<open>onto\_class\<close> is accepted equally, the keyword (\<^boxed_theory_text>\<open>onto_class\<close>) \<^index>\<open>onto\_class\<close> is accepted equally,
\<^item> an optional document base class expressing single inheritance \<^item> an optional document base class expressing single inheritance class extensions,
class extensions, \<^item> \<^emph>\<open>attributes\<close> specific to document classes, where
\<^item> \<^emph>\<open>attributes\<close> specific to document classes, where \<^item> attributes are HOL-typed,
\<^item> attributes are HOL-typed, \<^item> attributes of instances of document elements are mutable,
\<^item> attributes of instances of document elements are mutable, \<^item> attributes can refer to other document classes, thus, document
\<^item> attributes can refer to other document classes, thus, document classes must also be HOL-types (such attributes are called \<^emph>\<open>links\<close>),
classes must also be HOL-types (such attributes are called \<^item> attribute values were denoted by HOL-terms,
\<^emph>\<open>links\<close>), \<^item> a special link, the reference to a super-class, establishes an
\<^item> attribute values were denoted by HOL-terms, \<^emph>\<open>is-a\<close> relation between classes,
\<^item> a special link, the reference to a super-class, establishes an \<^item> classes may refer to other classes via a regular expression in an
\<^emph>\<open>is-a\<close> relation between classes, \<^emph>\<open>accepts\<close> clause, or via a list in a \<^emph>\<open>rejects\<close> clause,
\<^item> classes may refer to other classes via a regular expression in an \<^item> attributes may have default values in order to facilitate notation.
\<^emph>\<open>accepts\<close> clause, or via a list in a \<^emph>\<open>rejects\<close> clause,
\<^item> attributes may have default values in order to facilitate notation.
\<close> \<close>
text\<open> text\<open>
@ -262,13 +262,14 @@ A document class\<^bindex>\<open>document class\<close> can be defined using the
text\<open> text\<open>
\<^isadof> provides a default document representation (\<^ie>, content and layout of the generated \<^isadof> provides a default document representation (\<^ie>, content and layout of the generated
\<^pdf>) that only prints the main text, omitting all attributes. \<^isadof> provides the \<^pdf>) that only prints the main text, omitting all attributes. \<^isadof> provides the
\inlineltx|\newisadof[]{}|\<^index>\<open>newisadof@\<^boxed_latex>\<open>\newisadof\<close>\<close>\<^index>\<open>document class!PDF\<close> \<^ltxinline>\<open>\newisadof[]{}\<close>\<^index>\<open>newisadof@\<^boxed_latex>\<open>\newisadof\<close>\<close>\<^index>\<open>document class!PDF\<close>
command for defining a dedicated layout for a document class in \<^LaTeX>. Such a document command for defining a dedicated layout for a document class in \<^LaTeX>. Such a document
class-specific \<^LaTeX>-definition can not only provide a specific layout (\<^eg>, a specific class-specific \<^LaTeX>-definition can not only provide a specific layout (\<^eg>, a specific
highlighting, printing of certain attributes), it can also generate entries in the table of highlighting, printing of certain attributes), it can also generate entries in the table of
contents or an index. Overall, the \inlineltx|\newisadof[]{}| command follows the structure contents or an index. Overall, the \<^ltxinline>\<open>\newisadof[]{}\<close> command follows the structure
of the \<^boxed_theory_text>\<open>doc_class\<close>-command: of the \<^boxed_theory_text>\<open>doc_class\<close>-command:
% bu: not embeddable macro: too many guillemots ...
\begin{ltx}[escapechar=ë] \begin{ltx}[escapechar=ë]
\newisadof{ë\<open>class_id\<close>ë}[label=,type=, ë\<open>attribute_decl\<close>ë][1]{% \newisadof{ë\<open>class_id\<close>ë}[label=,type=, ë\<open>attribute_decl\<close>ë][1]{%
% ë\LaTeXë-definition of the document class representation % ë\LaTeXë-definition of the document class representation
@ -282,17 +283,17 @@ text\<open>
needs to declare all attributes of the document class. Within the \<^LaTeX>-definition of the document needs to declare all attributes of the document class. Within the \<^LaTeX>-definition of the document
class representation, the identifier \<^boxed_latex>\<open>#1\<close> refers to the content of the main text of the class representation, the identifier \<^boxed_latex>\<open>#1\<close> refers to the content of the main text of the
document class (written in \<^boxed_theory_text>\<open>\<open> ... \<close>\<close>) and the attributes can be referenced document class (written in \<^boxed_theory_text>\<open>\<open> ... \<close>\<close>) and the attributes can be referenced
by their name using the \inlineltx|\commandkey{...}|-command (see the documentation of the by their name using the \<^ltxinline>\<open>\commandkey{...}\<close>-command (see the documentation of the
\<^LaTeX>-package ``keycommand''~@{cite "chervet:keycommand:2010"} for details). Usually, the \<^LaTeX>-package ``keycommand''~@{cite "chervet:keycommand:2010"} for details). Usually, the
representations definition needs to be wrapped in a representations definition needs to be wrapped in a
\inlineltx|\begin{isarmarkup}...\end{isamarkup}|-environment, to ensure the correct context \<^ltxinline>\<open>\begin{isarmarkup}...\end{isamarkup}\<close>-environment, to ensure the correct context
within Isabelle's \<^LaTeX>-setup. within Isabelle's \<^LaTeX>-setup.
% TODO: % TODO:
% Clarify \newisadof signature: \newisadof[]{} vs \newisadof{}[]{}. % Clarify \newisadof signature: \newisadof[]{} vs \newisadof{}[]{}.
Moreover, \<^isadof> also provides the following two variants of \inlineltx|\newisadof{}[]{}|: Moreover, \<^isadof> also provides the following two variants of \inlineltx|\newisadof{}[]{}|:
\<^item> \inlineltx|\renewisadof{}[]{}|\<^index>\<open>renewisadof@\<^boxed_latex>\<open>\renewisadof\<close>\<close> for re-defining \<^item> \<^ltxinline>\<open>\renewisadof{}[]{}\<close>\<^index>\<open>renewisadof@\<^boxed_latex>\<open>\renewisadof\<close>\<close> for re-defining
(over-writing) an already defined command, and (over-writing) an already defined command, and
\<^item> \inlineltx|\provideisadof{}[]{}|\<^index>\<open>provideisadof@\<^boxed_latex>\<open>\provideisadof\<close>\<close> for providing \<^item> \<^ltxinline>\<open>\provideisadof{}[]{}\<close>\<^index>\<open>provideisadof@\<^boxed_latex>\<open>\provideisadof\<close>\<close> for providing
a definition if it is not yet defined. a definition if it is not yet defined.
\<close> \<close>
text\<open> text\<open>
@ -451,9 +452,7 @@ term*\<open>@{B--test- \<open>b\<close>}\<close>
declare_reference*["text-elements-expls"::technical] declare_reference*["text-elements-expls"::technical]
(*>*) (*>*)
ML\<open>
\<close>
subsection*["subsec:onto-term-ctxt"::technical]\<open>Ontological Term-Contexts and their Management\<close> subsection*["subsec:onto-term-ctxt"::technical]\<open>Ontological Term-Contexts and their Management\<close>
text\<open> text\<open>
\<^item> \<open>annotated_term_element\<close> \<^item> \<open>annotated_term_element\<close>
@ -634,6 +633,7 @@ text\<open>
\<^bindex>\<open>COL\<close> \<^footnote>\<open>contained in \<^theory>\<open>Isabelle_DOF.Isa_COL\<close>\<close> \<^bindex>\<open>COL\<close> \<^footnote>\<open>contained in \<^theory>\<open>Isabelle_DOF.Isa_COL\<close>\<close>
that introduces several ontology concepts; its overall class-tree it provides looks as follows: that introduces several ontology concepts; its overall class-tree it provides looks as follows:
% %
\<^latex>\<open>
\begin{center} \begin{center}
\begin{minipage}{.9\textwidth}\footnotesize \begin{minipage}{.9\textwidth}\footnotesize
\dirtree{% \dirtree{%
@ -649,7 +649,7 @@ text\<open>
.1 \ldots. .1 \ldots.
} }
\end{minipage} \end{minipage}
\end{center}\<close> \end{center}\<close>\<close>
text\<open> text\<open>
In particular it defines the super-class \<^typ>\<open>text_element\<close>: the root of all In particular it defines the super-class \<^typ>\<open>text_element\<close>: the root of all
@ -709,6 +709,7 @@ text\<open> The \<^verbatim>\<open>scholarly_paper\<close> ontology is oriented
mathematics, informatics, natural sciences, technology, or engineering. mathematics, informatics, natural sciences, technology, or engineering.
It extends \<^verbatim>\<open>COL\<close> by the following concepts: It extends \<^verbatim>\<open>COL\<close> by the following concepts:
\<^latex>\<open>
\begin{center} \begin{center}
\begin{minipage}{.9\textwidth}\footnotesize \begin{minipage}{.9\textwidth}\footnotesize
\dirtree{% \dirtree{%
@ -733,7 +734,7 @@ It extends \<^verbatim>\<open>COL\<close> by the following concepts:
.5 scholarly\_paper.corollary\DTcomment{Freeform}. .5 scholarly\_paper.corollary\DTcomment{Freeform}.
.5 scholarly\_paper.math\_example\DTcomment{Freeform}. .5 scholarly\_paper.math\_example\DTcomment{Freeform}.
.5 scholarly\_paper.math\_semiformal\DTcomment{Freeform}. .5 scholarly\_paper.math\_semiformal\DTcomment{Freeform}.
.5 scholarly\_paper.math\_formal\DTcomment{Formal(=Checked) Content}. .5 scholarly\_paper.math\_formal\DTcomment{Formal Content}.
.6 scholarly\_paper.assertion\DTcomment{Assertions}. .6 scholarly\_paper.assertion\DTcomment{Assertions}.
.4 scholarly\_paper.tech\_example\DTcomment{...}. .4 scholarly\_paper.tech\_example\DTcomment{...}.
.4 scholarly\_paper.math\_motivation\DTcomment{...}. .4 scholarly\_paper.math\_motivation\DTcomment{...}.
@ -749,10 +750,10 @@ It extends \<^verbatim>\<open>COL\<close> by the following concepts:
} }
\end{minipage} \end{minipage}
\end{center} \end{center}
\<close> \<close>\<close>
(*
TODO: There are some slight problems in the hierarchy ...
*) text\<open>Recall that \<^emph>\<open>Formal Content\<close> means \<^emph>\<open>machine-checked, validated content\<close>.\<close>
text\<open>A pivotal abstract class in the hierarchy is: text\<open>A pivotal abstract class in the hierarchy is:
@{boxed_theory_text [display] @{boxed_theory_text [display]
@ -789,9 +790,12 @@ of the \<^isadof> language:
\<^item> \<open>derived_text_elements \<close> : \<^item> \<open>derived_text_elements \<close> :
\<^rail>\<open> \<^rail>\<open>
( ( @@{command "author*"} ( ( @@{command "author*"} | @@{command "abstract*"}
| @@{command "abstract*"} | @@{command "Definition*"} | @@{command "Lemma*"} | @@{command "Theorem*"}
| @@{command "Definition*"} | @@{command "Lemma*"} | @@{command "Theorem*"} | @@{command "Proposition*"}| @@{command "Proof*"} | @@{command "Example*"}
| @@{command "Premise*"} | @@{command "Assumption*"} | @@{command "Hypothesis*"}
| @@{command "Corollary*"} | @@{command "Consequence*"}| @@{command "Assertion*"}
| @@{command "Conclusion*"}
) )
\<newline> \<newline>
'[' meta_args ']' '\<open>' text '\<close>' '[' meta_args ']' '\<open>' text '\<close>'
@ -800,6 +804,9 @@ of the \<^isadof> language:
\<close> \<close>
\<close> \<close>
text\<open>Usually, command macros for text elements will assign the generated instance text\<open>Usually, command macros for text elements will assign the generated instance
to the default class corresponding for this class. to the default class corresponding for this class.
For pragmatic reasons, \<^theory_text>\<open>Definition*\<close>, \<^theory_text>\<open>Lemma*\<close> and \<^theory_text>\<open>Theorem*\<close> represent an exception For pragmatic reasons, \<^theory_text>\<open>Definition*\<close>, \<^theory_text>\<open>Lemma*\<close> and \<^theory_text>\<open>Theorem*\<close> represent an exception
@ -876,12 +883,14 @@ ML\<open>writeln (DOF_core.print_doc_class_tree
orelse String.isPrefix "Isa_COL" l *)) orelse String.isPrefix "Isa_COL" l *))
toLaTeX)\<close> toLaTeX)\<close>
(*>*) (*>*)
text\<open> The \<^verbatim>\<open>technical_report\<close> ontology in \<^theory>\<open>Isabelle_DOF.technical_report\<close> extends text\<open> The \<^verbatim>\<open>technical_report\<close> \<^bindex>\<open>technical\_report\<close> ontology in
\<^verbatim>\<open>scholarly_paper\<close> by concepts needed \<^theory>\<open>Isabelle_DOF.technical_report\<close> extends
\<^verbatim>\<open>scholarly_paper\<close> \<^bindex>\<open>scholarly\_paper\<close> \<^bindex>\<open>ontology\<close> by concepts needed
for larger reports in the domain of mathematics and engineering. The concepts are fairly for larger reports in the domain of mathematics and engineering. The concepts are fairly
high-level arranged at root-class level, high-level arranged at root-class level,
% %
\<^latex>\<open>
\begin{center} \begin{center}
\begin{minipage}{.9\textwidth}\footnotesize \begin{minipage}{.9\textwidth}\footnotesize
\dirtree{% \dirtree{%
@ -900,7 +909,7 @@ high-level arranged at root-class level,
} }
\end{minipage} \end{minipage}
\end{center} \end{center}
\<close> \<close>\<close>
@ -931,21 +940,21 @@ end
Second, given an implementation of the functionality of the new keyword (implemented in SML), Second, given an implementation of the functionality of the new keyword (implemented in SML),
the new keyword needs to be registered, together with its parser, as outer syntax: the new keyword needs to be registered, together with its parser, as outer syntax:
\<^latex>\<open>
\begin{sml} \begin{sml}
val _ = val _ =
Outer_Syntax.command ("section*", <@>{here}) "section heading" Outer_Syntax.command ("section*", <@>{here}) "section heading"
(attributes -- Parse.opt_target -- Parse.document_source --| semi (attributes -- Parse.opt_target -- Parse.document_source --| semi
>> (Toplevel.theory o (enriched_document_command (SOME(SOME 1)) >> (Toplevel.theory o (enriched_document_command (SOME(SOME 1))
{markdown = false} ))); {markdown = false} )));
\end{sml} \end{sml}\<close>
\<close> \<close>
text\<open> text\<open>
Finally, for the document generation, a new dispatcher has to be defined in \<^LaTeX>---this is Finally, for the document generation, a new dispatcher has to be defined in \<^LaTeX>---this is
mandatory, otherwise the document generation will break. These dispatchers always follow the same mandatory, otherwise the document generation will break. These dispatchers always follow the same
schemata: schemata:
\<^latex>\<open>
\begin{ltx} \begin{ltx}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% begin: section*-dispatcher % begin: section*-dispatcher
@ -953,17 +962,17 @@ schemata:
% end: section*-dispatcher % end: section*-dispatcher
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\end{ltx} \end{ltx}
\<close>
After the definition of the dispatcher, one can, optionally, define a custom representation After the definition of the dispatcher, one can, optionally, define a custom representation
using the \<^boxed_latex>\<open>\newisadof\<close>-command, as introduced in the previous section: using the \<^boxed_latex>\<open>\newisadof\<close>-command, as introduced in the previous section:
\<^latex>\<open>
\begin{ltx} \begin{ltx}
\newisadof{section}[label=,type=][1]{% \newisadof{section}[label=,type=][1]{%
\isamarkupfalse% \isamarkupfalse%
\isamarkupsection{#1}\label{\commandkey{label}}% \isamarkupsection{#1}\label{\commandkey{label}}%
\isamarkuptrue% \isamarkuptrue%
} }
\end{ltx} \end{ltx}\<close>
\<close> \<close>
@ -1300,6 +1309,7 @@ text\<open>
Technically, ontologies\<^index>\<open>ontology!directory structure\<close> are stored in a directory Technically, ontologies\<^index>\<open>ontology!directory structure\<close> are stored in a directory
\<^boxed_bash>\<open>ontologies\<close> and consist of an Isabelle theory file and a \<^LaTeX>-style file: \<^boxed_bash>\<open>ontologies\<close> and consist of an Isabelle theory file and a \<^LaTeX>-style file:
% %
\<^latex>\<open>
\begin{center} \begin{center}
\begin{minipage}{.9\textwidth}\footnotesize \begin{minipage}{.9\textwidth}\footnotesize
\dirtree{% \dirtree{%
@ -1314,7 +1324,7 @@ text\<open>
.4 DOF-technical\_report.sty. .4 DOF-technical\_report.sty.
} }
\end{minipage} \end{minipage}
\end{center} \end{center}\<close>
\<close> \<close>
text\<open> text\<open>
Developing a new ontology ``\<^boxed_bash>\<open>foo\<close>'' requires the Developing a new ontology ``\<^boxed_bash>\<open>foo\<close>'' requires the
@ -1334,6 +1344,7 @@ text\<open>
etc.) of the generated documents. Document-templates etc.) of the generated documents. Document-templates
are stored in a directory are stored in a directory
\<^path>\<open>src/document-templates\<close>:\<^index>\<open>document template!directory structure\<close> \<^path>\<open>src/document-templates\<close>:\<^index>\<open>document template!directory structure\<close>
\<^latex>\<open>
\begin{center} \begin{center}
\begin{minipage}{.9\textwidth}\footnotesize \begin{minipage}{.9\textwidth}\footnotesize
\dirtree{% \dirtree{%
@ -1345,7 +1356,7 @@ text\<open>
.3 root-scrreprt.tex. .3 root-scrreprt.tex.
} }
\end{minipage} \end{minipage}
\end{center} \end{center}\<close>
\<close> \<close>
text\<open> text\<open>
@ -1380,6 +1391,7 @@ text\<open>
adding a new template, call the \<^boxed_bash>\<open>install\<close> script (see \<^technical>\<open>infrastructure\<close>). adding a new template, call the \<^boxed_bash>\<open>install\<close> script (see \<^technical>\<open>infrastructure\<close>).
The common structure of an \<^isadof> document template looks as follows: The common structure of an \<^isadof> document template looks as follows:
\<^latex>\<open>
\begin{ltx}[escapechar=ë, numbers=left,numberstyle=\tiny,xleftmargin=5mm] \begin{ltx}[escapechar=ë, numbers=left,numberstyle=\tiny,xleftmargin=5mm]
\documentclass{article} % The LaTeX-class of your template ë\label{lst:dc}ë \documentclass{article} % The LaTeX-class of your template ë\label{lst:dc}ë
%% The following part is (mostly) required by Isabelle/DOF, do not modify %% The following part is (mostly) required by Isabelle/DOF, do not modify
@ -1404,7 +1416,7 @@ text\<open>
\maketitle\input{session} \maketitle\input{session}
\IfFileExists{root.bib}{\bibliography{root}}{} \IfFileExists{root.bib}{\bibliography{root}}{}
\end{document} \end{document}
\end{ltx} \end{ltx}\<close>
\<close> \<close>
subsection\<open>Tips, Tricks, and Known Limitations\<close> subsection\<open>Tips, Tricks, and Known Limitations\<close>
@ -1470,7 +1482,7 @@ text\<open>
information into an \<^boxed_latex>\<open>\author\<close> and a \<^boxed_latex>\<open>\institution\<close> statement, each of information into an \<^boxed_latex>\<open>\author\<close> and a \<^boxed_latex>\<open>\institution\<close> statement, each of
which containing the information for all authors. The collection of the author information which containing the information for all authors. The collection of the author information
is provided by the following \<^LaTeX>-code: is provided by the following \<^LaTeX>-code:
\<^latex>\<open>
\begin{ltx} \begin{ltx}
\def\dof@author{}% \def\dof@author{}%
\newcommand{\DOFauthor}{\author{\dof@author}} \newcommand{\DOFauthor}{\author{\dof@author}}
@ -1485,7 +1497,7 @@ text\<open>
\leftadd\dof@author{\protect\and #1}% \leftadd\dof@author{\protect\and #1}%
} }
} }
\end{ltx} \end{ltx}\<close>
The new command \<^boxed_latex>\<open>\addauthor\<close> and a similarly defined command \<^boxed_latex>\<open>\addaffiliation\<close> The new command \<^boxed_latex>\<open>\addauthor\<close> and a similarly defined command \<^boxed_latex>\<open>\addaffiliation\<close>
can now be used in the definition of the representation of the concept can now be used in the definition of the representation of the concept
@ -1494,6 +1506,7 @@ job's aux-file. The intermediate step of writing this information into the job's
as the author and affiliation information is required right at the beginning of the document as the author and affiliation information is required right at the beginning of the document
while \<^isadof> allows defining authors at any place within a document: while \<^isadof> allows defining authors at any place within a document:
\<^latex>\<open>
\begin{ltx} \begin{ltx}
\provideisadof{text.scholarly_paper.author}% \provideisadof{text.scholarly_paper.author}%
[label=,type=% [label=,type=%
@ -1517,19 +1530,18 @@ while \<^isadof> allows defining authors at any place within a document:
\string\addaffiliation{\dof@a\\\string\email{% \string\addaffiliation{\dof@a\\\string\email{%
\commandkey{scholarly_paper.author.email}}}}% \commandkey{scholarly_paper.author.email}}}}%
} }
\end{ltx} \end{ltx}\<close>
Finally, the collected information is used in the \<^boxed_latex>\<open>\author\<close> command using the Finally, the collected information is used in the \<^boxed_latex>\<open>\author\<close> command using the
\<^boxed_latex>\<open>AtBeginDocument\<close>-hook: \<^boxed_latex>\<open>AtBeginDocument\<close>-hook:
\<^latex>\<open>
\begin{ltx} \begin{ltx}
\newcommand{\DOFauthor}{\author{\dof@author}} \newcommand{\DOFauthor}{\author{\dof@author}}
\AtBeginDocument{% \AtBeginDocument{%
\DOFauthor \DOFauthor
} }
\end{ltx} \end{ltx}\<close>
\<close> \<close>
@ -1538,15 +1550,15 @@ subsubsection\<open>Restricting the Use of Ontologies to Specific Templates\<clo
text\<open> text\<open>
As ontology representations might rely on features only provided by certain templates As ontology representations might rely on features only provided by certain templates
(\<^LaTeX>-classes), authors of ontology representations might restrict their use to (\<^LaTeX>-classes), authors of ontology representations might restrict their use to
specific classes. This can, \<^eg>, be done using the \inlineltx|\@ifclassloaded{}| command: specific classes. This can, \<^eg>, be done using the \<^ltxinline>\<open>\@ifclassloaded{}\<close> command:
\<^latex>\<open>
\begin{ltx} \begin{ltx}
\@ifclassloaded{llncs}{}% \@ifclassloaded{llncs}{}%
{% LLNCS class not loaded {% LLNCS class not loaded
\PackageError{DOF-scholarly_paper} \PackageError{DOF-scholarly_paper}
{Scholarly Paper only supports LNCS as document class.}{}\stop% {Scholarly Paper only supports LNCS as document class.}{}\stop%
} }
\end{ltx} \end{ltx}\<close>
For a real-world example testing for multiple classes, see For a real-world example testing for multiple classes, see
\<^file>\<open>../../ontologies/scholarly_paper/DOF-scholarly_paper.sty\<close>: \<^file>\<open>../../ontologies/scholarly_paper/DOF-scholarly_paper.sty\<close>: