Remove outdated and obsoleted ontologies.

This commit is contained in:
Achim D. Brucker 2022-04-16 09:13:31 +01:00
parent a0993b6eea
commit fee83a2a29
8 changed files with 1 additions and 534 deletions

View File

@ -181,7 +181,6 @@ Usage: isabelle mkroot_DOF [OPTIONS] [DIR]
-o ONTOLOGY (default: scholarly_paper)
Available ontologies:
* CENELEC_50128
* math_exam
* scholarly_paper
* technical_report
-t TEMPLATE (default: scrartcl)

View File

@ -7,8 +7,6 @@ session "Isabelle_DOF" = "Functional-Automata" +
"ontologies"
"ontologies/CENELEC_50128"
"ontologies/Conceptual"
"ontologies/math_exam"
"ontologies/math_paper"
"ontologies/scholarly_paper"
"ontologies/small_math"
"ontologies/technical_report"

View File

@ -1,102 +0,0 @@
%% Copyright (C) 2018 The University of Sheffield
%% 2018 The University of Paris-Saclay
%%
%% License:
%% This program can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN
%% archives in directory macros/latex/base/lppl.txt; either
%% version 1.3c of the License, or (at your option) any later version.
%% OR
%% The 2-clause BSD-style license.
%%
%% SPDX-License-Identifier: LPPL-1.3c+ OR BSD-2-Clause
\NeedsTeXFormat{LaTeX2e}\relax
\ProvidesPackage{DOF-math_exam}
[<isadofltxversion>%
Document-Type Support Framework for math classes.]
\RequirePackage{DOF-COL}
\usepackage{sfmath}
\usepackage{amsmath}
\usepackage{lastpage}
\usepackage{scrlayer-scrpage}
\usepackage{exercise}
\cfoot{\small\textnormal{Page \thepage\ of \pageref{LastPage}}}
\def\dof@author{}%
\def\dof@affiliation{}%
\AtBeginDocument{%
\author{\dof@author}
% \institute{\dof@affiliation}
}
\def\leftadd#1#2{\expandafter\leftaddaux\expandafter{#1}{#2}{#1}}
\def\leftaddaux#1#2#3{\gdef#3{#1#2}}
\newcommand{\addauthor}[1]{%
\ifthenelse{\equal{\dof@author}{}}{%
\gdef\dof@author{#1}%
}{%
\leftadd\dof@author{\protect\and #1}%
}
}
\newkeycommand\isaDofSectionAuthor[label=,type=,affiliation=,email=][1]{%
\immediate\write\@auxout{\noexpand\addauthor{#1}}%
}
\newkeycommand\isaDofTextHeader[label=,type=,examSubject=,date=,timeAllowed=][1]{%
\immediate\write\@auxout{\noexpand\title{#1}}%
}
\newkeycommand\isaDofSectionHeader[label=,type=,examSubject=,date=,timeAllowed=][1]{%
\immediate\write\@auxout{\noexpand\title{#1}}%
}
\newkeycommand\isaDofSubsectionHeader[label=,type=,examSubject=,date=,timeAllowed=][1]{%
\immediate\write\@auxout{\noexpand\title{#1}}%
}
\newkeycommand\isaDofTextAnswerFormalStep[label=,type=,justification=,term=][1]{%
#1
}
\newkeycommand\isaDofTextAnswerYesNo[label=,type=,step_label=,yes_no=][1]{%
#1
}
\newkeycommand\isaDofTextExamitem[label=,type=,concerns=][1]{%
#1
}
\newkeycommand\isaDofTextTask[label=,type=,level=,type=,subitems=concerns=,mark=][1]{%
#1
}
\newkeycommand\isaDofSubsubsectionExercise[label=,type=,Exercise.content=,concerns=,][1]{%
\begin{Exercise}
#1
\end{Exercise}
}
\newkeycommand\isaDofSubsubsectionValidation[label=,type=,tests=,proofs=][1]{%
#1
}
\newkeycommand\isaDofSubsubsectionSolution[label=,type=,content=,valids=,concerns=][1]{%
\begin{Answer}
#1
\end{Answer}
}
\newkeycommand\isaDofSubsubsectionMathExam[label=,type=,content=,global_grade=][1]{%
#1
}
\newkeycommand\isaDofOpenMonitorMathExam[label=,type=]{}
\newkeycommand\isaDofCloseMonitorMathExam[label=,type=]{}

View File

@ -1,195 +0,0 @@
(*************************************************************************
* Copyright (C)
* 2019 The University of Exeter
* 2018-2019 The University of Paris-Saclay
* 2018 The University of Sheffield
*
* License:
* This program can be redistributed and/or modified under the terms
* of the 2-clause BSD-style license.
*
* SPDX-License-Identifier: BSD-2-Clause
*************************************************************************)
theory Nmath_exam
imports "../../DOF/Isa_COL"
begin
text\<open>In our scenario, content has four different types of addressees:
\<^item> the @{emph \<open>setter\<close>}, i.e. the author of the exam,
\<^item> the @{emph \<open>student\<close>}, i.e. the addressee of the exam,
\<^item> the @{emph \<open>checker\<close>}, i.e. a person that checks the exam for
\<^item> the @{emph \<open>external\_examiner\<close>}, i.e. a person that checks the exam for
feasibility and non-ambiguity.
Note that the latter quality assurance mechanism is used in many universities,
where for organizational reasons the execution of an exam takes place in facilities
where the author of the exam is not expected to be physically present.
\<close>
datatype content_class = setter | checker | external_examiner | student
text\<open>Tasks, Answers and Solutions are grouped into the \<^emph>\<open>categories\<close>
\<^enum> \<open>main\<close> and
\<^enum> \<open>sub\<close>. \<close>
datatype category = main | sub
doc_class author =
affiliation :: "string"
roles :: "content_class set"
email :: "string"
doc_class context_description =
label :: string
doc_class exam_item =
level :: "int option"
concerns :: "content_class set"
visible_for :: "content_class set"
doc_class header = exam_item +
date :: string
authors :: "author list"
timeAllowed :: int (* minutes *)
datatype prog_lang = python | C | java | Haskell | SML
doc_class marking = exam_item +
marks :: int
doc_class answer_element = exam_item +
cat :: category
(* justification :: string
"term" :: "string" *)
doc_class text_answer = answer_element +
"term" :: "string"
doc_class program_text = answer_element +
prog_lang :: prog_lang
pre_filled :: "string" <= "\<open>This is a text with \<alpha>, \<beta>, \<gamma>\<close>"
doc_class formula_text = answer_element +
"term" :: "string"
doc_class checkbox = exam_item +
"value" :: "bool option"
doc_class checkboxes = answer_element +
marks :: int
accepts "\<lbrace>checkbox\<rbrace>\<^sup>+"
doc_class radiobutton = exam_item +
"value" :: "bool option"
"term" :: "string"
doc_class radiobuttons = answer_element +
"term" :: "string"
accepts "\<lbrace>radiobutton\<rbrace>\<^sup>+ "
datatype opn = eq | equiv | refines | refined_by
doc_class equational_derivation = answer_element +
eq_deriv :: "(opn option \<times> term option) list"
(* these two could be refined substantially *)
doc_class proof_derivation = answer_element +
"term" :: "term list"
doc_class answer = exam_item +
cat :: category
accepts "\<lbrace>answer_element\<rbrace>\<^sup>+ "
datatype task_type = formal | informal | mixed
doc_class task = exam_item +
cat :: category
local_grade :: marking
type :: task_type
concerns :: "content_class set" <= "{setter,student,checker,external_examiner}"
mark :: int
doc_class validation =
tests :: "term list" <="[]"
proofs :: "thm list" <="[]"
doc_class solution = exam_item +
cat :: category
motivation :: string
valids :: "validation list"
objectives :: string
responds_to :: answer
concerns :: "content_class set" <= "{setter,checker,external_examiner}"
accepts "\<lbrace>answer_element\<rbrace>\<^sup>+"
doc_class exercise = exam_item +
concerns :: "content_class set" <= "{setter,student,checker,external_examiner}"
accepts "header ~~ \<lbrace>author\<rbrace>\<^sup>+ ~~ context_description ~~ \<lbrace>task ~~ answer\<rbrace>\<^sup>+ ~~ \<lbrace>solution\<rbrace>\<^sup>+" (* PSud style*)
(* accepts "\<lbrace>task ~~ answer ~~ \<lbrace>solution\<rbrace>\<^sup>+ \<rbrace>\<^sup>+ " (*Exeter style *) *)
ML\<open>fun check_exercise_inv_1 oid {is_monitor} ctxt =
let fun get_attr oid attr = AttributeAccess.compute_attr_access ctxt attr oid @{here} @{here}
(* val term = AttributeAccess.compute_attr_access ctxt "trace" oid @{here} @{here} *)
fun conv (Const(@{const_name "Pair"},_) $ Const(s,_) $ S) = (s, HOLogic.dest_string S)
val string_pair_list = map conv (HOLogic.dest_list (get_attr oid "trace" ))
val cid_list = map fst string_pair_list
val ctxt' = Proof_Context.init_global(Context.theory_of ctxt)
fun is_task x = DOF_core.is_subclass ctxt' x "Nmath_exam.task"
fun is_answer x = DOF_core.is_subclass ctxt' x "Nmath_exam.answer"
val task_answer_part = (filter (fn x => is_task x orelse is_answer x) cid_list)
val _ = case get_attr (hd task_answer_part) "cat" of
@{term "main"} => ()
| _ => error("class exercise invariant violation: must start with main category. ")
fun check_match [] = ()
|check_match (task_id::answer_id::S) =
(if get_attr task_id "cat" = get_attr answer_id "cat"
then check_match S
else error("class exercise invariant violation: \
\ task and answer category does not match. "))
val _ = check_match task_answer_part
in true end
\<close>
setup\<open>DOF_core.update_class_invariant
"Nmath_exam.exercise"
check_exercise_inv_1\<close>
doc_class math_exam =
global_grade :: int
accepts "header ~~ \<lbrace>author\<rbrace>\<^sup>+ ~~ context_description ~~ \<lbrace>exercise\<rbrace>\<^sup>+ "
text\<open> Invariants (not yet implemented):
\<^enum> the task list must start with a \<open>main\<close> category.
\<^enum> \<open>solutions\<close> must structurally match to answer blocks, i.e. coincide in
category and corresponding answer elements
\<^enum> one-to-n relation between answer_elements and solutions
\<^enum> invariants over markings and grades : sub-task must sum up to task grades, exo
marks to the global grade.
\<^enum> distribution constraints: subtask should have no more than 25 % of overall grade.
\<close>
(*>*)
end
(*<*)

View File

@ -1,114 +0,0 @@
(*************************************************************************
* Copyright (C)
* 2019 The University of Exeter
* 2018-2019 The University of Paris-Saclay
* 2018 The University of Sheffield
*
* License:
* This program can be redistributed and/or modified under the terms
* of the 2-clause BSD-style license.
*
* SPDX-License-Identifier: BSD-2-Clause
*************************************************************************)
theory math_exam
imports "../../DOF/Isa_COL"
begin
(*<<*)
text\<open>In our scenario, content has four different types of addressees:
\<^item> the @{emph \<open>setter\<close>}, i.e. the author of the exam,
\<^item> the @{emph \<open>student\<close>}, i.e. the addressee of the exam,
\<^item> the @{emph \<open>checker\<close>}, i.e. a person that checks the exam for
\<^item> the @{emph \<open>external\_examiner\<close>}, i.e. a person that checks the exam for
feasibility and non-ambiguity.
Note that the latter quality assurance mechanism is used in many universities,
where for organizational reasons the execution of an exam takes place in facilities
where the author of the exam is not expected to be physically present.
\<close>
datatype ContentClass =
setter (* \<open>the 'author' of the exam\<close> *)
| checker (* \<open>the 'proof-reader' of the exam\<close> *)
| externalExaminer (* \<open>an external 'proof-reader' of the exam\<close> *)
| student (* \<open>the victim ;-) ... \<close> *)
doc_class Author =
affiliation :: "string"
email :: "string"
datatype Subject =
algebra | geometry | statistical | analysis
datatype Level =
oneStar | twoStars | threeStars
datatype Grade =
A1 | A2 | A3
doc_class Exam_item =
level :: "int option"
concerns :: "ContentClass set"
doc_class Header = Exam_item +
examSubject :: "(Subject) list"
date :: string
timeAllowed :: int (* minutes *)
type_synonym SubQuestion = string
doc_class Answer_Formal_Step = Exam_item +
justification :: string
"term" :: "string"
doc_class Answer_YesNo = Exam_item +
step_label :: string
yes_no :: bool (* \<open>for checkboxes\<close> *)
datatype Question_Type =
formal | informal | mixed
doc_class Task = Exam_item +
local_grade :: Level
type :: Question_Type
subitems :: "(SubQuestion * (Answer_Formal_Step list + Answer_YesNo)list) list"
concerns :: "ContentClass set" <= "{setter,student,checker,externalExaminer}"
mark :: int
doc_class Exercise = Exam_item +
content :: "(Task) list"
concerns :: "ContentClass set" <= "{setter,student,checker,externalExaminer}"
text\<open>In many institutions, it makes sense to have a rigorous process of validation
for exam subjects : is the initial question correct ? Is a proof in the sense of the
question possible ? We model the possibility that the @{term setter} validates a
question by a sample proof validated by Isabelle. In our scenario this sample proofs
are completely @{emph \<open>intern\<close>}, i.e. not exposed to the students but just additional
material for the internal review process of the exam.\<close>
doc_class Validation =
tests :: "term list" <="[]"
proofs :: "thm list" <="[]"
doc_class Solution = Exam_item +
content :: "Exercise list"
valids :: "Validation list"
concerns :: "ContentClass set" <= "{setter,checker,externalExaminer}"
doc_class MathExam =
content :: "(Header + Author + Exercise) list"
global_grade :: Grade
accepts "\<lbrace>Author\<rbrace>\<^sup>+ ~~ Header ~~ \<lbrace>Exercise ~~ Solution\<rbrace>\<^sup>+ "
(*>>*)
end

View File

@ -1,116 +0,0 @@
(*************************************************************************
* Copyright (C)
* 2019 The University of Exeter
* 2018-2019 The University of Paris-Saclay
* 2018 The University of Sheffield
*
* License:
* This program can be redistributed and/or modified under the terms
* of the 2-clause BSD-style license.
*
* SPDX-License-Identifier: BSD-2-Clause
*************************************************************************)
chapter \<open>A Math Paper Ontology (obsolete vs. scholarly_paper)\<close>
text\<open> Offering support for common Isabelle Elements like definitions, lemma- and theorem
statements, proofs, etc. Isabelle is a lot of things, but it is an interactive theorem
proving environment after all ! So this ontology provides:
\<^item> declarations for textual descriptions of definitions, lemmas, theorems, assertions, ...
and the usual means for typed referencing on them,
\<^item> monitors allowing for filtering content; this means (typed) brackets that can be
put around formal content that is more or less relevant for different types of users,
\fixme{find nicer formulation}
\<^item> LaTeX support. \<close>
theory math_paper
imports "../../DOF/Isa_DOF"
begin
section\<open>Some attempt to model standardized links to Standard Isabelle Formal Content\<close>
text\<open> These document classes are intended to present a number of key-elements
in mathematical papers and generate LaTeX in the style of, for example:
\begin{verbatim}
\begin{definition}[Dilating function]
A dilating function for a run \(\rho'\) is a function \(\mathbb{N} \longrightarrow \mathbb{N}\)
that satisfies:
\begin{enumerate}
\item \(f\) is strictly monotonic, so that the order of the instants in not changed in \(\rho'\);
\item \(\forall n.~f(n) \geq n\), so that instants are inserted into \(\rho\);
\item \(f(0) = 0\), so that no instant is inserted before the first one;
\item \(\forall n.~(\not\exists n_0.~f(n_0) = n) \Longrightarrow
(\forall c.~\neg\mathsf{ticks}(\rho'_{n}(c))\),
there is no tick in stuttering instants;
\item \(\forall n.~(\not\exists n_0.~f(n_0) = n+1) \Longrightarrow
(\forall c.~\mathsf{time}(\rho'_{n+1}(c)) = \mathsf{time}(\rho'_{n}(c)))\),
time does not elapse during stuttering instants;
\end{enumerate}
\end{definition}
\end{verbatim}
which are intended to \<^emph>\<open>complement\<close> Isabelle's formal content elements such as definitions,
lemmas and formal proofs.
We are aware that there is a certain tension between the interest to have more formal checking in
a definition as the above one and the interest in a notationally more liberal presentation that hides
technical details imposed by strict formality (even at the price that a chosen notation may be
intuitive, but an abstraction that is, fi donc, technically incorrect).
We argue that it should be up to the user to decide in each individual case how to draw this line ... \<close>
doc_class formal_stmt =
property :: "term list"
datatype relevance = key | vital | working | auxilliary | alternative
doc_class "definition" = formal_stmt +
relevance :: "relevance option"
property :: "term list" <= "[]"
text\<open>Which gives rise to a presentation like:\<close>
(*<*)
type_notation nat ("\<nat>")
(*>*)
text*[dil_fun :: "definition"]\<open>A dilating function for a run @{term "\<rho>"} is a function
@{typ "\<nat> \<Rightarrow> \<nat>"} that satisfies:
\<^enum> @{term "f"} is strictly monotonic ...
\<^enum> ...
\<^enum> ...
\<close>
doc_class assertion = formal_stmt +
relevance :: "relevance option"
properties :: "term list" <= "[]"
doc_class "lemma" = formal_stmt +
relevance :: "relevance"
properties :: "term list" <= "[]"
doc_class "theorem" = formal_stmt +
relevance :: "relevance"
properties :: "term list" <= "[]"
doc_class "corrollary" = formal_stmt +
relevance :: "relevance"
properties :: "term list" <= "[]"
text\<open>This monitor is used to group formal content in a way to classify the
relevance. On the presentation level, this gives the possibility to adapt or omit
Isabelle/Isar lemma and theorem commands according to their relevance level.
By using inheritance, the document class @{text \<open>formal_content\<close>} can also be used
to introduce organisational information (for example: developer or tester or validator )
as a systematic means to produce documents oriented to specific needs of user (sub-)groups.\<close>
doc_class formal_content =
relevance :: "relevance"
accepts "\<lbrace>definition || assertion || lemma || theorem || corrollary \<rbrace>\<^sup>+"
end

View File

@ -16,8 +16,6 @@ theory
imports
"CENELEC_50128/CENELEC_50128"
"Conceptual/Conceptual"
"math_exam/math_exam"
"math_paper/math_paper"
"scholarly_paper/scholarly_paper"
"small_math/small_math"
"technical_report/technical_report"

View File

@ -15,8 +15,7 @@ theory
AssnsLemmaThmEtc
imports
"Isabelle_DOF.Conceptual"
"Isabelle_DOF.math_paper"
"Isabelle_DOF.scholarly_paper" (* for assert notation *)
"Isabelle_DOF.scholarly_paper"
begin
section\<open>Elementary Creation of Doc-items and Access of their Attibutes\<close>