1003 lines
37 KiB
TeX
1003 lines
37 KiB
TeX
\NeedsTeXFormat{LaTeX2e}\relax
|
|
\ProvidesClass{hol-ocl-isar}[2007/05/24 Achim D. Brucker ($Rev: 9004 $)]
|
|
|
|
\RequirePackage{ifthen}
|
|
%
|
|
\newboolean{holocl@nocolor}
|
|
\setboolean{holocl@nocolor}{false}
|
|
\DeclareOption{nocolor}{\setboolean{holocl@nocolor}{true}}
|
|
%
|
|
\newboolean{isar@mnsymbol}
|
|
\setboolean{isar@mnsymbol}{false}
|
|
\DeclareOption{mnsymbol}{\setboolean{isar@mnsymbol}{true}}
|
|
|
|
\newboolean{isar@isasymonly}
|
|
\setboolean{isar@isasymonly}{false}
|
|
\DeclareOption{isasymonly}{\setboolean{isar@isasymonly}{true}}
|
|
|
|
\newboolean{holocl@scf}
|
|
\DeclareOption{scf}{\setboolean{holocl@scf}{true}}
|
|
|
|
|
|
\newboolean{holocl@nocolortable}
|
|
\DeclareOption{nocolortable}{\setboolean{holocl@nocolortable}{true}}
|
|
|
|
\newboolean{holocl@noaclist}
|
|
\DeclareOption{noaclist}{\setboolean{holocl@noaclist}{true}}
|
|
|
|
|
|
\ProcessOptions\relax
|
|
|
|
|
|
\ifthenelse{\boolean{isar@mnsymbol}}{%
|
|
}{%
|
|
\RequirePackage{amsmath}
|
|
\RequirePackage{amssymb}
|
|
\RequirePackage{stmaryrd}
|
|
\newcommand{\lsem}{\llbracket}
|
|
\newcommand{\rsem}{\rrbracket}
|
|
}
|
|
|
|
\usepackage{isabellesym}
|
|
|
|
\renewcommand{\isasymrbrakk}{\isamath{\mathclose{\rsem}}}
|
|
\renewcommand{\isasymlbrakk}{\isamath{\mathopen{\lsem}}}
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%% begin: old hol-ocl-ng style
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\usepackage{xspace}
|
|
%\usepackage{euscript}
|
|
\ifthenelse{\boolean{isar@mnsymbol}}{%
|
|
}{
|
|
\usepackage{mathrsfs}
|
|
}
|
|
%\IfFileExists{marginnote.sty}{\usepackage{marginnote}}{}
|
|
\usepackage{marginnote}
|
|
\RequirePackage[final]{listings}
|
|
%%
|
|
\newcommand{\ap}{\:}
|
|
%%
|
|
%% 1.1) Define package options
|
|
%% =========================
|
|
%% 2) Color Definitions
|
|
%% ======================
|
|
%%%%%%%%%%%%%%%%%
|
|
% color setup
|
|
\ifthenelse{\boolean{holocl@nocolor}}{%
|
|
\ifthenelse{\boolean{holocl@nocolortable}}{%
|
|
\usepackage[gray,hyperref,dvipsnames]{xcolor}
|
|
}{%
|
|
\usepackage[gray,hyperref,table,dvipsnames]{xcolor}
|
|
}
|
|
}{%
|
|
\ifthenelse{\boolean{holocl@nocolortable}}{%
|
|
\usepackage[hyperref,dvipsnames,fixpdftex]{xcolor}
|
|
}{%
|
|
\usepackage[hyperref,table,dvipsnames,fixpdftex]{xcolor}
|
|
}
|
|
}
|
|
|
|
\newcommand{\nc@colorlet}[2]{
|
|
\ifthenelse{\boolean{holocl@nocolor}}{%
|
|
\colorlet{#1}{Black}
|
|
}{%
|
|
\colorlet{#1}{#2}
|
|
}}
|
|
|
|
%
|
|
% MathOCl expressions
|
|
\nc@colorlet{MathOclColor} {Magenta}
|
|
\newcommand{\MathOclColorName}{\textcolor{MathOclColor}{magenta}\xspace}
|
|
%
|
|
% intermediate HOL-OCL expressions, e.g., lifting
|
|
\nc@colorlet{HolOclColor} {OliveGreen} %{ForestGreen} % {OliveGreen}
|
|
\newcommand{\HolOclColorName}{\textcolor{HolOclColor}{green}\xspace}
|
|
%
|
|
\nc@colorlet{OclColor} {Magenta}
|
|
\newcommand{\OclColorName}{\textcolor{OclColor}{magenta}\xspace}
|
|
%
|
|
% Color for stuff not yet supported (mainly used in the syntax table)
|
|
\nc@colorlet{UnsupportedColor}{gray!75}
|
|
\newcommand{\UnsupportedColorName}{\textcolor{UnsupportedColor}{gray}\xspace}
|
|
% Color for extension (mainly used in the syntax table)
|
|
\nc@colorlet{ExtensionColor}{ForestGreen}
|
|
\newcommand{\ExtensionColorName}{\textcolor{ExtensionColor}{green}\xspace}
|
|
%
|
|
% OCL Keywords in \inlineocl{...} and \begin{ocl} ... \end{ocl}
|
|
\nc@colorlet{OclKeywordColor} {MidnightBlue}
|
|
\newcommand{\OclKeywordColorName}{\textcolor{OclKeywordColor}{blue}\xspace}
|
|
%
|
|
% SML Keywords in \inlinesml{...} and \begin{sml}...\end{sml}
|
|
\nc@colorlet{SmlKeywordColor} {MidnightBlue}
|
|
\newcommand{\SmlKeywordColorName}{\textcolor{SmlKeywordColor}{blue}\xspace}
|
|
%
|
|
% Java Keywords in \inlinejava{...} and \begin{java}...\end{java}
|
|
\nc@colorlet{JavaKeywordColor} {MidnightBlue}
|
|
\newcommand{\JavaKeywordColorName}{\textcolor{JavaKeywordColor}{blue}\xspace}
|
|
%
|
|
% color for sections and boldface text
|
|
\nc@colorlet{SectionColor} {MidnightBlue}
|
|
\newcommand{\SectionColorName}{\textcolor{SectionColor}{blue}\xspace}
|
|
%
|
|
% color for HOL-OCL and Isabelle theories. To be consistent with the
|
|
% generated output, this should be the same as "SectionColor"
|
|
\nc@colorlet{HolOclThyColor} {SectionColor}
|
|
\newcommand{\HolOclThyColorName}{\SectionColorName}
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%% 3) Defining environments and commands
|
|
%% =====================================
|
|
%%
|
|
%% 3.1) HOL-OCL contact information
|
|
%% --------------------------------
|
|
\newcommand{\HolOclEmail}{\href{mailto:hol-ocl@brucker.ch}{hol-ocl@brucker.ch}}
|
|
\newcommand{\HolOclWebsite}{\url{http://www.brucker.ch/research/hol-ocl/}}
|
|
\newcommand{\HolOclLogo}{}
|
|
\newcommand{\holocl}{HOL-OCL\xspace}
|
|
%%
|
|
%% 3.2) Environments for plain SML and OCL code
|
|
%% --------------------------------------------
|
|
|
|
\ifthenelse{\boolean{isar@mnsymbol}}{%
|
|
\newcommand{\theory}[1]{\texttt{#1}}%
|
|
\newcommand{\tactic}[1]{\texttt{#1}}%
|
|
\newcommand{\simpset}[1]{\texttt{#1}}%
|
|
}{%
|
|
\newcommand{\theory}[1]{\textsf{#1}}%
|
|
\newcommand{\tactic}[1]{\textsf{#1}}%
|
|
\newcommand{\simpset}[1]{\textsf{#1}}%
|
|
}
|
|
\newcommand{\oclfont}{\ttfamily}
|
|
\newcommand{\mathocl}{\mathtt}
|
|
\newcommand{\smlfont}{\ttfamily}
|
|
\newcommand{\javafont}{\ttfamily}
|
|
\newcommand{\holoclthyfont}{\rmfamily}
|
|
|
|
\ifthenelse{\boolean{holocl@nocolor}}{%
|
|
\newcommand{\oclkeywordstyle}{\bfseries}
|
|
\newcommand{\javakeywordstyle}{\bfseries}
|
|
\newcommand{\smlkeywordstyle}{\bfseries}
|
|
\newcommand{\holoclthykeywordstyle}{\bfseries}
|
|
}{%
|
|
\newcommand{\oclkeywordstyle}{\color{OclKeywordColor}\relax}
|
|
\newcommand{\javakeywordstyle}{\color{JavaKeywordColor}\relax}
|
|
\newcommand{\smlkeywordstyle}{\color{SmlKeywordColor}\relax}
|
|
\newcommand{\holoclthykeywordstyle}{\color{HolOclThyColor}\relax}
|
|
}
|
|
|
|
\lstloadlanguages{OCL,ML,Java}
|
|
\lstdefinestyle{sml}{basicstyle=\smlfont,%
|
|
commentstyle=\itshape,%
|
|
keywordstyle=\smlkeywordstyle,%
|
|
ndkeywordstyle=\smlkeywordstyle,%
|
|
language=ML}%
|
|
|
|
\lstdefinestyle{displaysml}{style=sml,%
|
|
floatplacement={tbp},captionpos=b,style=sml,framexleftmargin=10pt,%
|
|
numbers=left,numberstyle=\tiny,stepnumber=5,basicstyle=\small\smlfont,%
|
|
backgroundcolor=\color{black!3},frame=lines,%xleftmargin=-8pt,xrightmargin=-8pt%
|
|
}
|
|
|
|
\lstdefinestyle{ocl}{basicstyle=\oclfont,%
|
|
commentstyle=\itshape,%
|
|
keywordstyle=\oclkeywordstyle,%
|
|
ndkeywordstyle=\oclkeywordstyle,%
|
|
morekeywords={package,endpackage,%
|
|
context,pre,inv,post,init,def,body,derive,%
|
|
measurement},%
|
|
mathescape=true,
|
|
sensitive=t,%
|
|
morecomment=[l]--,%
|
|
morestring=[d]'%
|
|
}%
|
|
|
|
\lstdefinestyle{java}{language=Java,
|
|
basicstyle=\javafont,%
|
|
commentstyle=\itshape,%
|
|
keywordstyle=\javakeywordstyle,%
|
|
ndkeywordstyle=\javakeywordstyle,%
|
|
}%
|
|
|
|
|
|
\lstdefinestyle{displayjava}{style=java,
|
|
floatplacement={tbp},captionpos=b,framexleftmargin=10pt,
|
|
basicstyle=\small\javafont,backgroundcolor=\color{black!3},frame=lines}%
|
|
|
|
|
|
\lstdefinestyle{displayocl}{style=ocl,
|
|
%floatplacement={tbp},captionpos=b,framexleftmargin=10pt,
|
|
floatplacement={tbp},captionpos=b,
|
|
basicstyle=\small\oclfont,backgroundcolor=\color{black!3},frame=lines}%
|
|
|
|
|
|
\lstdefinestyle{holocl}{basicstyle=\holoclthyfont,%
|
|
commentstyle=\itshape,%
|
|
keywordstyle=\holoclthykeywordstyle,%
|
|
ndkeywordstyle=\holoclthykeywordstyle,%
|
|
language=,
|
|
mathescape=true,
|
|
classoffset=0,%
|
|
morekeywords={shows,assumes,proof,next,qed,case,po,lemma,apply,discharged,analyze_consistency,done,theory,end,imports,begin,refine,generate_po_liskov,import_model,load_xmi},%
|
|
}%
|
|
|
|
\lstdefinestyle{displayholocl}{style=holocl,
|
|
floatplacement={tbp},captionpos=b,
|
|
basicstyle=\small\holoclthyfont,backgroundcolor=\color{black!3},frame=lines}%
|
|
|
|
|
|
\lstnewenvironment{ocl}[1][]{\lstset{style=displayocl,#1}}{}%
|
|
\lstnewenvironment{xuse}[1][]{\lstset{style=displayocl,morekeywords={method,class,end,begin,var,attributes,constraints},#1}}{}%
|
|
\lstnewenvironment{java}[1][]{\lstset{style=displayjava,#1}}{}%
|
|
\lstnewenvironment{sml}[1][]{\lstset{style=displaysml,#1}}{}
|
|
\lstnewenvironment{lstholocl}[1][]{\lstset{style=displayholocl,columns=fullflexible,#1}}{}%
|
|
\def\inlinejava{\lstinline[style=java,columns=fullflexible]}%
|
|
\def\inlinesml{\lstinline[style=sml,columns=fullflexible]}%
|
|
\def\inlineocl{\lstinline[style=ocl,columns=fullflexible]}%
|
|
\def\inlineholocl{\lstinline[style=holocl,columns=fullflexible]}%
|
|
%%
|
|
%% 3.3) Environments for citing ``the'' standard
|
|
%% ------------------------------------------
|
|
% \newsavebox{\oclpage}%
|
|
% \newenvironment{oclspecification}[1]%
|
|
% {\savebox{\oclpage}{\small #1}\begin{quote}}%
|
|
% {{\small\mbox{}\\\mbox{}\hfill (Object Constraint Language
|
|
% Specification~\cite{omg:ocl:2003}, %
|
|
% page \usebox{\oclpage})}\end{quote}}
|
|
|
|
\newsavebox{\oclpage}%
|
|
\newenvironment{oclspecification}[2][omg:ocl:2003]
|
|
{\sbox\oclpage{\emph{\small(\OCL Specification~\cite{#1}, %
|
|
page #2)}}%
|
|
% \begin{quote}}
|
|
\begin{addmargin}[2em]{0pt}%
|
|
\begin{minipage}{\linewidth}%
|
|
\vspace{.6\baselineskip}
|
|
\rule{\linewidth}{.5pt}}
|
|
{\hspace*{\fill}\nolinebreak[1]%
|
|
\quad\hspace*{\fill}%
|
|
\finalhyphendemerits=0%
|
|
\usebox{\oclpage}\\%a
|
|
\rule[.25\baselineskip]{\linewidth}{.5pt}%
|
|
\vspace{.6\baselineskip}
|
|
\end{minipage}%
|
|
\end{addmargin}
|
|
}
|
|
%\end{quote}}
|
|
%%
|
|
%% 3.4) V, Val, and VAL
|
|
%% --------------------
|
|
\newcommand{\V}[2]{\ensuremath{V_{#1}({#2})}}
|
|
\newcommand{\Val}[2]{\ensuremath{V_{#1}({#2})}}
|
|
\newcommand{\VAL}[2]{\ensuremath{\mathit{{Val}}_{#1}({#2})}}
|
|
%%
|
|
%% 3.5) Models
|
|
%% -----------
|
|
%\newcommand{\modelsT}{\mathop{\vDash_{\mathsf{t}}}}
|
|
%\newcommand{\modelsF}{\mathop{\vDash_{\mathsf{f}}}}
|
|
%\newcommand{\modelsU}{\mathop{\vDash_{\mathsf{u}}}}
|
|
\newcommand{\modelsT}{\mathop{\isasymMathOclValid_{\isasymMathOclTrue}}}
|
|
\newcommand{\modelsF}{\mathop{\isasymMathOclValid_{\isasymMathOclFalse}}}
|
|
\newcommand{\modelsU}{\mathop{\isasymMathOclValid_{\isasymMathOclUndefined}}}
|
|
%%
|
|
%% 3.6) Class Diagrams, Universes, etc
|
|
%% -----------------------------------
|
|
\ifthenelse{\boolean{isar@mnsymbol}}{%
|
|
\newcommand{\universe}[1]{\ensuremath{\text{\textsw{#1}}}} % for universes
|
|
\newcommand{\domain}[1]{\ensuremath{\text{\textsw{#1}}}} % for domain
|
|
}{%
|
|
\newcommand{\universe}[1]{\ensuremath{\mathscr{#1}}} % for universes
|
|
\newcommand{\domain}[1]{\ensuremath{\mathscr{#1}}} % for domain
|
|
}
|
|
\newcommand{\cdiagram}[1]{\ensuremath{\EuScript{#1}}} % for class diagram
|
|
\newcommand{\typeset}[1]{\mathfrak{#1}}
|
|
\newcommand{\AT}{\typeset{A}}
|
|
\newcommand{\VT}{\typeset{V}}
|
|
\newcommand{\tagTypes}{\typeset{T}}
|
|
\newcommand{\Tref}{\typeset{T}_\text{ref}}
|
|
\newcommand{\Tnonref}{\typeset{T}_\text{nonref}}
|
|
\newcommand{\UTref}{\typeset{U}_\text{ref}}
|
|
\newcommand{\UTnonref}{\typeset{U}_\text{nonref}}
|
|
\newcommand{\UTx}{\typeset{U}_\text{x}}
|
|
\newcommand{\CTref}{\typeset{U}_\text{ref}}
|
|
\newcommand{\CTnonref}{\typeset{U}_\text{nonref}}
|
|
\newcommand{\CTx}{\typeset{U}_\text{x}}
|
|
%%
|
|
%% 3.6) Type Lifting
|
|
%% -----------------
|
|
\newcommand{\tconvR}[1]{\ensuremath{\widehat{#1}}}
|
|
\newcommand{\tconvU}[1]{\ensuremath{\widetilde{#1}}}
|
|
\newcommand{\tconvE}[1]{\ensuremath{\overline{#1}}}
|
|
%%
|
|
%% 3.7) Isabelle specific stuff
|
|
%% ----------------------------
|
|
\newcommand{\Forall}{\isasymAnd}
|
|
\newcommand{\Exists}{\isasymOr}
|
|
\ifthenelse{\boolean{isar@mnsymbol}}{%
|
|
\newcommand{\meta}[1]{\ensuremath{?\mkern-2mu#1}}%
|
|
}{%
|
|
\newcommand{\meta}[1]{\ensuremath{?\!#1}}%
|
|
}
|
|
\newcommand{\Implies}{\isasymLongrightarrow}
|
|
\renewcommand{\implies}{\isasymrightarrow}
|
|
\newcommand{\hilbert}{\isasymsome}
|
|
\newcommand{\thm}[1]{``$\mathrm{#1}$''}
|
|
%%
|
|
%% 3.8) HOL-OCL shortcuts
|
|
%% ----------------------
|
|
%\newcommand{\up}[1]{\ensuremath{#1_{\!\bot}}}
|
|
\newcommand{\up}[1]{\ensuremath{#1_{\mkern-5mu\lower.2ex\hbox{$\bot$}}}}
|
|
\newcommand{\lift}[1]{\ensuremath{\isasymHolOclLiftLeft #1\isasymHolOclLiftRight}}
|
|
\newcommand{\drop}[1]{\ensuremath{\isasymHolOclDropLeft #1\isasymHolOclDropRight}}
|
|
\DeclareMathOperator{\liftOp}{lift}
|
|
%%
|
|
%% 3.9) semantics
|
|
%% --------------
|
|
\newcommand{\lsemantics}{\lsem}
|
|
\newcommand{\rsemantics}{\rsem}
|
|
\newcommand{\biglsemantics}{\bigl\lsem}
|
|
\newcommand{\bigrsemantics}{\bigr\rsem}
|
|
\newcommand{\bigglsemantics}{\biggl\lsem}
|
|
\newcommand{\biggrsemantics}{\biggr\rsem}
|
|
\newcommand{\semantics}[1]{\lsem #1 \rsem}
|
|
|
|
%%
|
|
%% 3.10) Index generation and references
|
|
%% ----------------------
|
|
\newcommand{\emphI}[1]{\emph{#1}\index{#1}}
|
|
\newcommand{\autonameref}[1]{\autoref{#1} ``\nameref{#1}''}
|
|
\newcommand{\vautoref}[1]{\autoref{#1}\vpageref{#1}}
|
|
\newcommand{\vautonameref}[1]{\autoref{#1} ``\nameref{#1}''}
|
|
\newcommand{\definitionautrefname}{definition}
|
|
% \newcommand{\vautonameref}[1]{\autonameref{#1}\vpageref{#1}}
|
|
%%
|
|
%% 3.11) Syntax diagrams and tables
|
|
%% --------------------------------
|
|
\newcommand{\literal}{\mathtt}
|
|
\newcommand{\unsupported}[1]{\textcolor{UnsupportedColor}{#1}}
|
|
\newcommand{\extension}[1]{\textcolor{ExtensionColor}{#1}}
|
|
%%
|
|
%% 3.12) Typographic styles for Datatypes, etc
|
|
%% -------------------------------------------
|
|
%% 3.12.1 HOL Type Constructors
|
|
%% ----------------------------
|
|
\newcommand{\HolBin}[0]{\ensuremath{\mathrm{bin}}}
|
|
\newcommand{\HolNum}[0]{\ensuremath{\mathrm{num}}}
|
|
\newcommand{\HolBoolean}[0]{\ensuremath{\mathrm{bool}}}
|
|
\newcommand{\HolString}[0]{\ensuremath{\mathrm{string}}}
|
|
\newcommand{\HolInteger}[0]{\ensuremath{\mathrm{int}}}
|
|
\newcommand{\HolNat}[0]{\ensuremath{\mathrm{nat}}}
|
|
\newcommand{\HolReal}[0]{\ensuremath{\mathrm{real}}}
|
|
\newcommand{\HolSet}[1]{#1\ap\ensuremath{\mathrm{set}}}
|
|
\newcommand{\HolList}[1]{#1\ap\ensuremath{\mathrm{list}}}
|
|
%\newcommand{\HolOrderedSet}[1]{#1~\ensuremath{\mathrm{orderedset}}}
|
|
\newcommand{\HolMultiset}[1]{#1\ap\ensuremath{\mathrm{multiset}}}
|
|
\newcommand{\classType}[2]{#1\ap\ensuremath{\mathrm{#2}}}
|
|
|
|
\newcommand{\HolMkSet}[1]{\operatorname{set} #1}
|
|
|
|
|
|
|
|
%% 3.12.2 Lifted HOL Type Constructors
|
|
%% ----------------------------
|
|
\newcommand{\HolBooleanUp}[0]{\ensuremath{\up{\mathrm{bool}}}}
|
|
\newcommand{\HolStringUp}[0]{\ensuremath{up{\mathrm{string}}}}
|
|
\newcommand{\HolIntegerUp}[0]{\ensuremath{\up{\mathrm{int}}}}
|
|
\newcommand{\HolRealUp}[0]{\ensuremath{\up{\mathrm{real}}}}
|
|
\newcommand{\HolSetUp}[1]{#1\ap\ensuremath{\up{\mathrm{set}}}}
|
|
\newcommand{\HolListUp}[1]{#1\ap\ensuremath{\up{\mathrm{list}}}}
|
|
%\newcommand{\HolOrderedSetUp}[1]{#1\ap\ensuremath{\up{\mathrm{OrderedSet}}}}
|
|
\newcommand{\HolMultisetUp}[1]{#1\ap\ensuremath{\up{\mathrm{multiset}}}}
|
|
%% 3.12.3 HOL-OCL Type Constructors
|
|
%% --------------------------------
|
|
\newcommand{\HolOclBoolean}{\ensuremath{\mathtt{Boolean}}}
|
|
\newcommand{\HolOclString}{\ensuremath{\mathtt{String}}}
|
|
\newcommand{\HolOclInteger}{\ensuremath{\mathtt{Integer}}}
|
|
\newcommand{\HolOclReal}{\ensuremath{\mathtt{Real}}}
|
|
\newcommand{\HolOclSet}[1]{#1\ap\ensuremath{\mathtt{Set}}}
|
|
\newcommand{\HolOclOclAny}[1]{#1\ap\ensuremath{\mathtt{OclAny}}}
|
|
|
|
\newcommand{\HolOclSequence}[1]{#1\ap\ensuremath{\mathtt{Sequence}}}
|
|
\newcommand{\HolOclOrderedSet}[1]{#1\ap\ensuremath{\mathtt{OrderedSet}}}
|
|
\newcommand{\HolOclBag}[1]{#1\ap\ensuremath{\mathtt{Bag}}}
|
|
|
|
\newcommand{\OclBoolean}[1][\tau]{\ensuremath{\mathtt{Boolean}_{#1}}}
|
|
\newcommand{\OclString}[1][\tau]{\ensuremath{\mathtt{String}_{#1}}}
|
|
\newcommand{\OclInteger}[1][\tau]{\ensuremath{\mathtt{Integer}_{#1}}}
|
|
\newcommand{\OclReal}[1][\tau]{\ensuremath{\mathtt{Real}_{#1}}}
|
|
\newcommand{\OclSet}[2][\tau]{#2\ap\ensuremath{\mathtt{Set}_{#1}}}
|
|
\newcommand{\OclSequence}[2][\tau]{#2\ap\ensuremath{\mathtt{Sequence}_{#1}}}
|
|
\newcommand{\OclOrderedSet}[2][\tau]{#2\ap\ensuremath{\mathtt{OrderedSet}_{#1}}}
|
|
\newcommand{\OclBag}[2][\tau]{#2\ap\ensuremath{\mathtt{Bag}_{#1}}}
|
|
\newcommand{\OclOclAny}[2][\tau]{#2\ap\ensuremath{\mathtt{OclAny}_{#1}}}
|
|
|
|
|
|
\newcommand{\HolTrue}{\mathrm{true}}
|
|
\newcommand{\HolFalse}{\mathrm{false}}
|
|
\newcommand{\HolUnit}{\mathrm{unit}}
|
|
\newcommand{\HolUndef}{\isasymbottom}
|
|
\newcommand{\HolWfrec}{\operatorname{wfrec}}
|
|
\newcommand{\OclTrue}{\isasymMathOclTrue}
|
|
\newcommand{\OclFalse}{\isasymMathOclFalse}
|
|
\newcommand{\OclUndef}{\isasymMathOclUndefined}
|
|
|
|
|
|
%% 3.12.x misc stuff
|
|
%% -----------------
|
|
\newcommand{\oid}{\mathrm{oid}}
|
|
\newcommand{\ofType}{\mathbin{\isasymColon}}
|
|
\newcommand{\defeq}{\mathrel{\mathop:}=}
|
|
\DeclareMathOperator{\HolInl}{Inl}
|
|
\DeclareMathOperator{\HolNumberOf}{numberOf}
|
|
\newcommand{\self}{\mathit{self}}
|
|
\newcommand{\result}{\mathit{result}}
|
|
\newcommand{\op}{\mathit{op}}
|
|
|
|
\newcommand{\SemCom}{\mathit{SemCom}}
|
|
|
|
\DeclareMathOperator{\HolInr}{Inr}
|
|
\DeclareMathOperator{\HolFst}{fst}
|
|
\DeclareMathOperator{\HolSnd}{snd}
|
|
\DeclareMathOperator{\HolOptionCase}{OptionCase}
|
|
\DeclareMathOperator{\HolUpCase}{upCase}
|
|
\DeclareMathOperator{\HolSumCase}{sumCase}
|
|
\DeclareMathOperator{\HolOf}{of}
|
|
\DeclareMathOperator{\HolCase}{case}
|
|
\DeclareMathOperator{\HolIf}{if}
|
|
\DeclareMathOperator{\HolLet}{let}
|
|
\DeclareMathOperator{\HolIn}{in}
|
|
\DeclareMathOperator{\HolThen}{then}
|
|
\DeclareMathOperator{\HolElse}{else}
|
|
|
|
\DeclareMathOperator{\HolHilbert}{\mathop{\varepsilon}}
|
|
|
|
\DeclareMathOperator{\HolSome}{Some}
|
|
\DeclareMathOperator{\HolNone}{None}
|
|
\DeclareMathOperator{\HolArbitrary}{arbitrary}
|
|
|
|
|
|
\DeclareMathOperator{\HolOclStrictify}{\HolOcl{strictify}}
|
|
\DeclareMathOperator{\HolOclIsStrict}{isStrict}
|
|
\DeclareMathOperator{\HolOclCp}{\HolOcl{cp}}
|
|
\DeclareMathOperator{\HolOclDEF}{def} % DEF
|
|
\DeclareMathOperator{\HolOclSem}{Sem}
|
|
\DeclareMathOperator{\HolOclSmash}{\HolOcl{smash}}
|
|
\DeclareMathOperator{\HolOclInvoke}{\HolOcl{invoke}}
|
|
\DeclareMathOperator{\HolOclInvokeS}{\HolOcl{invokeS}}
|
|
\DeclareMathOperator{\HolOclUnion}{\HolOcl{union}}
|
|
\DeclareMathOperator{\HolOclLeast}{Least}
|
|
\DeclareMathOperator{\HolOclChoose}{\HolOcl{Choose}}
|
|
\DeclareMathOperator{\HolOclCall}{\HolOcl{Call}}
|
|
|
|
\DeclareMathOperator{\HolOclOidOf}{\HolOcl{OidOf}}
|
|
\DeclareMathOperator{\HolOclIsModifiedOnly}{\HolOcl{oclIsModifiedOnly}}
|
|
|
|
|
|
\DeclareMathOperator{\HolOclPre}{pre}
|
|
\DeclareMathOperator{\HolOclPost}{post}
|
|
\DeclareMathOperator{\HolOclTab}{OpTab}
|
|
\DeclareMathOperator{\HolDom}{dom}
|
|
\DeclareMathOperator{\HolRan}{ran}
|
|
|
|
\newcommand{\Abs}[1]{\operatorname{\HolOcl{Abs_{#1}}}}
|
|
\newcommand{\Rep}[1]{\operatorname{\HolOcl{Rep_{#1}}}}
|
|
|
|
\DeclareMathOperator{\HolAbsSet}{\HolOcl{Abs_{Set}}}
|
|
\DeclareMathOperator{\HolRepSet}{\HolOcl{Rep_{Set}}}
|
|
|
|
\DeclareMathOperator{\HolAbsSequence}{\HolOcl{Abs_{Sequence}}}
|
|
\DeclareMathOperator{\HolRepSequence}{\HolOcl{Rep_{Sequence}}}
|
|
|
|
|
|
\DeclareMathOperator{\HolUp}{up}
|
|
|
|
\newcommand{\HolIfThen}[3]{\HolIf #1 \HolThen #2 \HolElse #3}
|
|
\newcommand{\OclIfThen}[3]{\isasymMathOclIf #1 \isasymMathOclThen #2 \isasymMathOclElse #3 \isasymMathOclEndif}
|
|
%%%%
|
|
\newcommand{\Lam}[2]{\mathop{\lambda} #1\spot #2}
|
|
\let\llambda\lambda%
|
|
\renewcommand{\lambda}{\mathop{\llambda}}
|
|
\newcommand{\img}{\mathrel{^\backprime}}
|
|
\DeclareMathOperator{\base}{base}
|
|
\DeclareMathOperator{\HolOclBase}{\base}
|
|
\newcommand{\down}{\mathrm{down}}
|
|
\newcommand{\BT}{\typeset{B}}
|
|
\newcommand{\HolOclSt}[1]{#1\ap\ensuremath{\mathrm{St}}}
|
|
|
|
|
|
|
|
%%
|
|
%%
|
|
%%
|
|
\newcommand{\OCLglitch}[2][]{%
|
|
\ifthenelse{\equal{#1}{noentry}}%
|
|
{}{%
|
|
\ifthenelse{\equal{#1}{}}%
|
|
{%
|
|
\addcontentsline{gli}{glitch}{#2}%
|
|
}{%
|
|
\addcontentsline{gli}{glitch}{#1}%
|
|
}}%
|
|
\mbox{}\marginnote[\small\slshape\raggedleft\hspace{0pt}\mbox{}%
|
|
\scalebox{.2}{\includegraphics{figures/warning}}\mbox{}\\#2]%
|
|
{\small\raggedright\slshape\hspace{0pt}\mbox{}\scalebox{.2}{\includegraphics{figures/warning}}\mbox{}\\#2}}
|
|
|
|
\newcommand\listofglitches
|
|
{\chapter*{List of Glitches}%
|
|
\addcontentsline{toc}{chapter}{List of Glitches}\@starttoc{gli}}
|
|
\newcommand\l@glitch[2]{\par\noindent#1,~\textit{#2}\par}
|
|
|
|
%%%
|
|
\newcommand{\OCLextension}[2][]{%
|
|
\ifthenelse{\equal{#1}{noentry}}%
|
|
{}{%
|
|
\ifthenelse{\equal{#1}{}}%
|
|
{%
|
|
\addcontentsline{ext}{extension}{#2}%
|
|
}{%
|
|
\addcontentsline{ext}{extension}{#1}%
|
|
}}%
|
|
\mbox{}\marginnote[\small\slshape\raggedleft\hspace{0pt}\mbox{}%
|
|
\scalebox{.2}{\includegraphics{figures/danger}}\mbox{}\\#2]%
|
|
{\small\slshape\raggedright\hspace{0pt}\mbox{}\scalebox{.2}{\includegraphics{figures/danger}}\mbox{}\\#2}}
|
|
|
|
\newcommand\listofextensions
|
|
{\chapter*{List of Extensions}%
|
|
\addcontentsline{toc}{chapter}{List of Extensions}\@starttoc{ext}}
|
|
\newcommand\l@extension[2]{\par\noindent#1,~\textit{#2}\par}
|
|
|
|
|
|
|
|
%%
|
|
%%%
|
|
%%%
|
|
|
|
\newcommand{\spot}{.\;}
|
|
\newcommand{\DevelopmentSpot}{\textcolor{black!95}{\bullet}\;}
|
|
\newcommand{\template}[1]{\langle #1\rangle}
|
|
\DeclareMathOperator{\Bot}{\mathrm{bot}}
|
|
\newcommand{\bottom}{\bot}
|
|
\newcommand{\getT}{\operatorname{\mathit{getT}}}
|
|
|
|
\newcommand{\mkType}[2][]{%
|
|
\ifthenelse{\equal{#1}{}}%
|
|
{\operatorname{mk_\text{#2}}}%
|
|
{\operatorname{mk_\text{#2}^{(#1)}}}%
|
|
}
|
|
\newcommand{\isType}[2][]{%
|
|
\ifthenelse{\equal{#1}{}}%
|
|
{\operatorname{isType_\text{#2}}}%
|
|
{\operatorname{isType_\text{#2}^{(#1)}}}%
|
|
}
|
|
\newcommand{\isKind}[2][]{%
|
|
\ifthenelse{\equal{#1}{}}%
|
|
{\operatorname{isKind_\text{#2}}}%
|
|
{\operatorname{isKind_\text{#2}^{(#1)}}}%
|
|
}
|
|
\newcommand{\isUnivType}[2][]{%
|
|
\ifthenelse{\equal{#1}{}}%
|
|
{\operatorname{isUniv_\text{#2}}}%
|
|
{\operatorname{isUniv_\text{#2}^{(#1)}}}%
|
|
}
|
|
\newcommand{\getType}[2][]{%
|
|
\ifthenelse{\equal{#1}{}}%
|
|
{\operatorname{get_\text{#2}}}%
|
|
{\operatorname{get_\text{#2}^{(#1)}}}%
|
|
}
|
|
|
|
% \newcommand{\typeCast}[2]{\operatorname{#1\_2\_#2}}
|
|
\newcommand{\typeCast}[3][]{%
|
|
\ifthenelse{\equal{#1}{}}%
|
|
{\operatorname{#2_\text{[#3]}}}%
|
|
{\operatorname{#2_\text{[#3]}^{(#1)}}}%
|
|
}
|
|
|
|
\newcommand{\getAttrib}[3][]{%
|
|
\ifthenelse{\equal{#1}{}}%
|
|
{#2\operatorname{\!.#3}}%
|
|
{#2\operatorname{\!.#3}^{(#1)}}%
|
|
}
|
|
|
|
\newcommand{\getRole}[3][]{%
|
|
\ifthenelse{\equal{#1}{}}%
|
|
{#2\operatorname{\!.#3}}%
|
|
{#2\operatorname{\!.#3}^{(#1)}}%
|
|
}
|
|
|
|
\newcommand{\setAttrib}[4][]{%
|
|
\ifthenelse{\equal{#1}{}}%
|
|
{#2\operatorname{\!.set_{#3}}\ap \mathit{#4}}%
|
|
{#2\operatorname{\!.set_{#3}^{(#1)}}\ap \mathit{#4}}%
|
|
}
|
|
|
|
\newcommand{\newAttrib}[4][]{%
|
|
\ifthenelse{\equal{#1}{}}%
|
|
{#2\operatorname{.new_{#3}}\ap \mathit{#4}}%
|
|
{#2\operatorname{.new_{#3}^{(#1)}}\ap \mathit{#4}}%
|
|
}
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%% end: old hol-ocl-ng style
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\newcommand{\MathOclStyle}[1]{\color{MathOclColor}#1}
|
|
\newcommand{\HolOclStyle}[1]{\color{HolOclColor} #1}
|
|
\newcommand{\OclStyle}[1]{\upshape\ttfamily\color{OclColor} #1}
|
|
|
|
|
|
\newcommand{\MathOcl}[1]{{\MathOclStyle{#1}}}
|
|
\newcommand{\HolOcl}[1]{{\HolOclStyle #1}}
|
|
\newcommand{\Ocl}[1]{\text{\OclStyle{#1}}}
|
|
\newcommand{\newMathOcl}[3]{\expandafter\def\csname isasymMathOcl#1\endcsname{\ensuremath{#2{\MathOcl{#3}}}}}
|
|
\newcommand{\newOcl}[3]{\expandafter\def\csname isasymOcl#1\endcsname{\ensuremath{\operatorname{\Ocl{#3}}}}}
|
|
\newcommand{\newHolOcl}[3]{\expandafter\def\csname isasymHolOcl#1\endcsname{\ensuremath{#2{\HolOcl{#3}}}}}
|
|
\newcommand{\aarrow}{\!-\!>}
|
|
\newcommand{\oP}{\mathopen\MathOcl{\mathtt{(}}}
|
|
\newcommand{\cP}{\mathopen\MathOcl{\mathtt{)}}}
|
|
\newcommand{\OclArg}[1]{\oP #1\cP}
|
|
\newcommand{\OclSpot}{\mathopen\MathOcl{\spot}}
|
|
\newcommand{\OclMid}{\mathop\MathOcl{\mid}}
|
|
\renewcommand{\isasymbullet}{\ensuremath{\OclSpot}}
|
|
|
|
% ; ******************************
|
|
%; * Lifting *
|
|
%; ******************************
|
|
|
|
\ifthenelse{\boolean{isar@mnsymbol}}{%
|
|
\newHolOcl{LiftLeft}{\mathopen}{\llcorner}
|
|
\newHolOcl{LiftRight}{\mathclose}{\lrcorner}
|
|
\newHolOcl{DropLeft}{\mathopen}{\ulcorner}
|
|
\newHolOcl{DropRight}{\mathclose}{\urcorner}
|
|
}{
|
|
\newHolOcl{LiftLeft}{\mathopen}
|
|
{\leavevmode\lower.6ex\hbox{$\llcorner$}\kern-.20em}
|
|
\newHolOcl{LiftRight}{\mathclose}
|
|
{\leavevmode\kern-.20em\lower.6ex\hbox{$\lrcorner$}}
|
|
\newHolOcl{DropLeft}{\mathopen}
|
|
{\leavevmode\lower-.2ex\hbox{$\ulcorner$}\kern-.18em}
|
|
\newHolOcl{DropRight}{\mathclose}
|
|
{\leavevmode\kern-.18em\lower-.2ex\hbox{$\urcorner$}}
|
|
}
|
|
% \newHolOcl{DropLeft}{\mathopen}{\ulcorner}
|
|
% \newHolOcl{DropRight}{\mathclose}{\urcorner}
|
|
%; ******************************
|
|
%; * OclAny *
|
|
%; ******************************
|
|
% \newcommand{\isasymMathOclAny}{}
|
|
\newOcl{IsNew}{\mathbin}{.oclIsNew()}
|
|
\newMathOcl{IsNew}{\mathbin}{\isasymOclIsNew}
|
|
\newOcl{AsType}{\mathbin}{.oclAsType}
|
|
\newMathOcl{AsType}{\mathbin}{\isasymOclAsType}
|
|
\newOcl{IsTypeOf}{\mathbin}{.oclIsTypeOf}
|
|
\newMathOcl{IsTypeOf}{\mathbin}{\isasymOclIsTypeOf}
|
|
\newOcl{IsType}{\mathbin}{.oclIsTypeOf}
|
|
\newMathOcl{IsType}{\mathbin}{\isasymOclIsType}
|
|
\newOcl{IsKindOf}{\mathbin}{.oclIsKindOf}
|
|
\newMathOcl{IsKindOf}{\mathbin}{\isasymOclIsKindOf}
|
|
% \newOcl{AllInstances}{\mathbin}{.AllInstances()}
|
|
% \newMathOcl{AllInstances}{\mathbin}{\isasymOclAllInstances}
|
|
%; ******************************
|
|
%; * OCL Boolean *
|
|
%; ******************************
|
|
\newMathOcl{Valid}{\mathrel}{\vDash}
|
|
\newOcl{Valid}{\mathrel}{Valid}
|
|
\newOcl{LocalValid}{\mathrel}{OclValid}
|
|
\ifthenelse{\boolean{isar@mnsymbol}}{%
|
|
\newMathOcl{True}{\mathord}{\mathocl{t}}
|
|
\newOcl{True}{\mathord}{true}
|
|
\newMathOcl{False}{\mathord}{\mathocl{f}}
|
|
\newOcl{False}{\mathord}{false}
|
|
}
|
|
{%
|
|
\newMathOcl{True}{\mathord}{\mathocl{T}}
|
|
\newOcl{True}{\mathord}{true}
|
|
\newMathOcl{False}{\mathord}{\mathocl{F}}
|
|
\newOcl{False}{\mathord}{false}
|
|
}
|
|
\newMathOcl{Not}{\mathop}{\lnot}
|
|
\newOcl{Not}{\mathop}{not\ap}
|
|
|
|
\newMathOcl{And}{\mathbin}{\wedge}
|
|
\newOcl{And}{\mathbin}{\ap and}
|
|
\newMathOcl{Or}{\mathbin}{\vee}
|
|
\newOcl{Or}{\mathbini}{\ap or \ap}
|
|
\newMathOcl{Xor}{\mathbin}{\oplus}
|
|
\newOcl{Xor}{\mathbin}{\ap xor\ap}
|
|
|
|
\newMathOcl{Sand}{\mathbin}{\dot{\wedge}}
|
|
\newOcl{Sand}{\mathbin}{\ap sand\ap}
|
|
\newMathOcl{Sor}{\mathbin}{\dot{\vee}}
|
|
\newOcl{Sor}{\mathbini}{\ap sor\ap}
|
|
\newMathOcl{Sxor}{\mathbin}{\dot{\oplus}}
|
|
\newOcl{Sxor}{\mathbin}{\ap sxor\ap}
|
|
|
|
\newMathOcl{If}{\mathop}{\mathocl{if}}
|
|
\newOcl{If}{\mathopen}{if}
|
|
\newMathOcl{Then}{\mathop}{\mathocl{then}}
|
|
\newOcl{Then}{\mathbin}{then}
|
|
\newMathOcl{Else}{\mathop}{\mathocl{else}}
|
|
\newOcl{Else}{\mathbin}{else}
|
|
\newMathOcl{Endif}{\mathop}{\mathocl{endif}}
|
|
\newOcl{Endif}{\mathclose}{endif}
|
|
\newMathOcl{Let}{\mathop}{\mathocl{let}}
|
|
\newOcl{Let}{\mathopen}{let}
|
|
\newMathOcl{In}{\mathop}{\mathocl{in}}
|
|
\newOcl{In}{\mathopen}{in}
|
|
\newMathOcl{End}{\mathop}{\mathocl{end}}
|
|
\newOcl{End}{\mathopen}{end}
|
|
|
|
\newMathOcl{Implies}{\mathbin}{\longrightarrow}
|
|
\newOcl{Implies}{\mathbin}{\ap implies\ap}
|
|
|
|
\newMathOcl{Simplies}{\mathbin}{\dot{\longrightarrow}}
|
|
\newOcl{Simplies}{\mathbin}{\ap simplies\ap}
|
|
|
|
\newMathOcl{VImplies}{\mathbin}{\stackrel{1}{\longrightarrow}}
|
|
\newOcl{VImplies}{\mathbin}{\ap implies1\ap}
|
|
\newMathOcl{VVImplies}{\mathbin}{\stackrel{2}{\longrightarrow}}
|
|
\newOcl{VVImplies}{\mathbin}{\ap implies2\ap}
|
|
\newMathOcl{IsDefined}{\mathop}{\partial}
|
|
\newOcl{IsDefined}{\mathop}{.IsDefined()}
|
|
\ifthenelse{\boolean{isar@mnsymbol}}{%
|
|
\newMathOcl{IsUndefined}{\mathop}{\not\partial}%
|
|
}{%
|
|
\newMathOcl{IsUndefined}{\mathop}{\not\!\partial}%
|
|
}
|
|
\newOcl{IsUndefined}{\mathop}{.oclIsUndefined()}
|
|
%; ******************************
|
|
%; * OCL Real and Integer *
|
|
%; ******************************
|
|
\newOcl{Less}{\mathrel}{\ensuremath{<}}
|
|
\newMathOcl{Less}{\mathrel}{\isasymOclLess}
|
|
\newOcl{Le}{\mathrel}{\ensuremath{<=}}
|
|
\newMathOcl{Le}{\mathrel}{\leq}
|
|
\newOcl{Greater}{\mathrel}{\ensuremath{>}}
|
|
\newMathOcl{Greater}{\mathrel}{\isasymOclGreater}
|
|
\newOcl{Ge}{\mathrel}{\ensuremath{>=}}
|
|
\newMathOcl{Ge}{\mathrel}{\geq}
|
|
\newOcl{Abs}{\mathbin}{.abs()}
|
|
\newMathOcl{AbsLeft}{\mathopen}{\lvert}
|
|
\newMathOcl{AbsRight}{\mathclose}{\rvert}
|
|
\newMathOcl{Min}{\mathop}{\mathrm{min}}
|
|
\newOcl{Min}{\mathrel}{.min}
|
|
\newMathOcl{Max}{\mathop}{\mathrm{max}}
|
|
\newOcl{Max}{\mathrel}{.max}
|
|
\newMathOcl{Mod}{\mathop}{\mathrm{mod}}
|
|
\newOcl{Mod}{\mathrel}{.mod}
|
|
\newMathOcl{Div}{\mathop}{\mathrm{div}}
|
|
\newOcl{Div}{\mathrel}{.div}
|
|
\newOcl{Floor}{\mathbin}{.floor()}
|
|
\newMathOcl{FloorLeft}{\mathopen}{\lfloor}
|
|
\newMathOcl{FloorRight}{\mathclose}{\rfloor}
|
|
\newOcl{Round}{\mathbin}{.round()}
|
|
\newMathOcl{RoundLeft}{\mathopen}{\lceil}
|
|
\newMathOcl{RoundRight}{\mathclose}{\rceil}
|
|
%; ******************************
|
|
%; * OclUndefined *
|
|
%; ******************************
|
|
\newMathOcl{Undefined}{\mathord}{\bot}
|
|
\newOcl{Undefined}{\mathord}{OclUndefined}
|
|
%; ******************************
|
|
%; * OCL String *
|
|
%; ******************************
|
|
\newMathOcl{Concat}{\mathbin}{^\frown}
|
|
\newOcl{Concat}{\mathbin}{.concat}
|
|
\newOcl{Substring}{\mathop}{.substring}
|
|
\newMathOcl{Substring}{\mathop}{\isasymOclSubstring}
|
|
\newOcl{ToInteger}{\mathop}{.toInteger()}
|
|
\newMathOcl{ToInteger}{\mathop}{\isasymOclToInteger}
|
|
\newOcl{ToReal}{\mathop}{.toReal()}
|
|
\newMathOcl{ToReal}{\mathop}{\isasymOclToReal}
|
|
\newOcl{ToUpper}{\mathop}{.toUpper()}
|
|
\newMathOcl{ToUpper}{\mathop}{\isasymOclToUpper}
|
|
\newOcl{ToLower}{\mathop}{.toLowert()}
|
|
\newMathOcl{ToLower}{\mathop}{\isasymOclToLower}
|
|
|
|
%; ******************************
|
|
%; * OCL Collection *
|
|
%; ******************************
|
|
\newMathOcl{MtSet}{\mathord}{\emptyset}
|
|
\newOcl{MtSet}{\mathord}{\{\}}
|
|
\newMathOcl{MtSequence}{\mathord}{[]}
|
|
\newOcl{MtSequence}{\mathord}{[]}
|
|
\newMathOcl{MtBag}{\mathord}{\Lbag\Rbag}
|
|
\newOcl{MtBag}{\mathord}{Bag\{\}}
|
|
\newMathOcl{MtOrderedSet}{\mathord}{\langle\rangle}
|
|
\newOcl{MtOrderedSet}{\mathord}{OrderedSet\{\}}
|
|
\newOcl{Size}{\mathbin}{\aarrow size()}
|
|
\newMathOcl{SizeLeft}{\mathopen}{\lVert}
|
|
\newMathOcl{SizeRight}{\mathclose}{\rVert}
|
|
\newMathOcl{Includes}{\mathbin}{\in}
|
|
\newOcl{Includes}{\mathbin}{\aarrow includes}
|
|
\newMathOcl{Excludes}{\mathbin}{\not\in}%\nin}
|
|
\newOcl{Excludes}{\mathbin}{\aarrow excludes}
|
|
\newOcl{Flatten}{\mathbin}{\aarrow flatten}
|
|
\newMathOcl{FlattenLeft}{\mathbin}{\llceil}
|
|
\newMathOcl{FlattenRight}{\mathbin}{\rrceil}
|
|
\newOcl{Sum}{\mathbin}{\aarrow sum}
|
|
\newMathOcl{Sum}{\mathbin}{\isasymOclSum}
|
|
\newOcl{AsSet}{\mathop}{\aarrow asSet()}
|
|
\newMathOcl{AsSet}{\mathop}{\isasymOclAsSet}
|
|
\newOcl{AsSequence}{\mathop}{\aarrow asSequence()}
|
|
\newMathOcl{AsSequence}{\mathop}{\isasymOclAsSequence}
|
|
\newOcl{AsBag}{\mathbin}{\aarrow asBag()}
|
|
\newMathOcl{AsBag}{\mathop}{\isasymOclAsBag}
|
|
\newOcl{AsOrderedSet}{\mathbin}{\aarrow asOrderedSet()}
|
|
\newMathOcl{AsOrderedSet}{\mathbin}{\isasymOclAsOrderedSet}
|
|
\newMathOcl{ForAll}{\mathop}{\forall}
|
|
\newOcl{ForAll}{\mathbin}{\aarrow forall}
|
|
\newMathOcl{Exists}{\mathop}{\exists}
|
|
\newOcl{Exists}{\mathbin}{\aarrow exists}
|
|
\newOcl{Select}{\mathop}{\aarrow select}
|
|
\newcommand{\isasymMathOclSelectRight}{\ensuremath{\mathopen{\MathOcl{\rrparenthesis}}}}
|
|
\newcommand{\isasymMathOclSelectLeft}{\ensuremath{\mathclose{\MathOcl{\llparenthesis}}}}
|
|
\newOcl{Reject}{\mathop}{\aarrow reject}
|
|
\newcommand{\isasymMathOclRejectRight}{\ensuremath{\mathopen{\MathOcl{\llparenthesis}}}}
|
|
\newcommand{\isasymMathOclRejectLeft}{\ensuremath{\mathclose{\MathOcl{\rrparenthesis}}}}
|
|
\newOcl{Collect}{\mathbin}{\aarrow collect}
|
|
% \newMathOcl{Collect}{\mathop}{\isasymOclCollect}
|
|
\newcommand{\isasymMathOclCollectRight}{\ensuremath{\mathopen{\MathOcl{|\!\}}}}}
|
|
\newcommand{\isasymMathOclCollectLeft}{\ensuremath{\mathclose{\MathOcl{\{\!|}}}}
|
|
\newOcl{CollectNested}{\mathbin}{\aarrow collectNested}
|
|
\newcommand{\isasymMathOclCollectNestedRight}{\ensuremath{\mathopen{\MathOcl{|\!\}\!\}}}}}
|
|
\newcommand{\isasymMathOclCollectNestedLeft}{\ensuremath{\mathclose{\MathOcl{\{\!\{\!|}}}}
|
|
\newOcl{Iterate}{\mathbin}{\aarrow iterate}
|
|
\newMathOcl{Iterate}{\mathop}{\isasymOclIterate}
|
|
\newOcl{IsUnique}{\mathbin}{\aarrow isUnique}
|
|
\newMathOcl{IsUnique}{\mathbin}{\isasymOclIsUnique}
|
|
\newOcl{One}{\mathbin}{\aarrow one}
|
|
\newMathOcl{One}{\mathop}{\isasymOclOne}
|
|
\newOcl{Any}{\mathbin}{\aarrow any}
|
|
\newMathOcl{Any}{\mathop}{\isasymOclAny}
|
|
\newOcl{Count}{\mathbin}{\aarrow count}
|
|
\newMathOcl{Count}{\mathop}{\isasymOclCount}
|
|
\newOcl{IncludesAll}{\mathbin}{\aarrow includesAll}
|
|
\newMathOcl{IncludesAll}{\mathop}{\subseteq}
|
|
\newOcl{ExcludesAll}{\mathbin}{\aarrow excludesAll}
|
|
\newMathOcl{ExcludesAll}{\mathop}{\supset\kern-0.5em\subset}
|
|
\newOcl{IsEmpty}{\mathbin}{\aarrow isEmpty()}
|
|
\newMathOcl{IsEmpty}{\mathop}{\emptyset \isasymMathOclStrictEq}
|
|
\newOcl{NotEmpty}{\mathbin}{\aarrow notEmpty()}
|
|
\newMathOcl{NotEmpty}{\mathop}{\emptyset \isasymMathOclStrictNotEq}
|
|
|
|
\newOcl{SortedBy}{\mathbin}{\aarrow sortedBy}
|
|
\newMathOcl{SortedBy}{\mathbin}{\isasymOclSortedBy}
|
|
|
|
|
|
\newOcl{Sum}{\mathbin}{\aarrow sum()}
|
|
\newMathOcl{Sum}{\mathop}{\isasymOclSum}
|
|
\newOcl{Product}{\mathbin}{\aarrow product}
|
|
\newMathOcl{Product}{\mathop}{\times}
|
|
|
|
\newOcl{Including}{\mathbin}{\aarrow including}
|
|
\newMathOcl{Including}{\mathop}{\operatorname{insert}}
|
|
\newOcl{Excluding}{\mathbin}{\aarrow excluding}
|
|
\newMathOcl{Excluding}{\mathop}{\isasymOclExcluding}
|
|
\newMathOcl{SymmetricDifference}{\mathbin}{\ominus}
|
|
\newOcl{SymmetricDifference}{\mathbin}{\aarrow symmetricDiffernce}
|
|
\newMathOcl{Union}{\mathbin}{\cup}
|
|
\newOcl{Union}{\mathbin}{\aarrow union}
|
|
|
|
\newMathOcl{Intersection}{\mathbin}{\cap}
|
|
\newOcl{Intersection}{\mathbin}{\aarrow intersection}
|
|
\newMathOcl{Complement}{\mathop}{^{-1}}
|
|
\newOcl{Complement}{\mathop}{\aarrow complement()}
|
|
|
|
\newMathOcl{At}{\mathop}{\natural}
|
|
\newOcl{At}{\mathop}{\aarrow at}
|
|
\newMathOcl{First}{\mathop}{\natural 1}
|
|
\newOcl{First}{\mathop}{\aarrow first()}
|
|
\newMathOcl{Last}{\mathop}{\natural \$}
|
|
\newOcl{Last}{\mathop}{\aarrow last()}
|
|
|
|
|
|
\newOcl{IndexOf}{\mathbin}{\aarrow indexOf}
|
|
\newMathOcl{IndexOf}{\mathop}{\natural ?}
|
|
|
|
\newOcl{InsertAt}{\mathbin}{\aarrow insertAt}
|
|
\newMathOcl{InsertAt}{\mathop}{\isasymOclInsertAt}
|
|
|
|
\newOcl{SubOrderedSet}{\mathbin}{\aarrow subOrderedSet}
|
|
\newMathOcl{SubOrderedSet}{\mathop}{\isasymOclSubOrderedSet}
|
|
\newOcl{SubSequence}{\mathbin}{\aarrow subSequence}
|
|
\newMathOcl{SubSequence}{\mathop}{\isasymOclSubSequence}
|
|
|
|
|
|
|
|
%; ******************************
|
|
%; * OCL Set *
|
|
%; ******************************
|
|
%; ******************************
|
|
%; * OCL OrderedSet *
|
|
%; ******************************
|
|
\newMathOcl{Prepend}{\mathop}{\#}
|
|
\newOcl{Prepend}{\mathop}{\aarrow prepend}
|
|
\newMathOcl{Append}{\mathop}{@}
|
|
\newOcl{Append}{\mathop}{\aarrow append}
|
|
|
|
|
|
%; ******************************
|
|
%; * OCL Bag *
|
|
%; ******************************
|
|
%; ******************************
|
|
%; * OCL Sequence *
|
|
%; ******************************
|
|
%; ******************************
|
|
%; * OCL Logic *
|
|
%; ******************************
|
|
\newOcl{StrictEq}{\mathrel}{==}
|
|
\newMathOcl{StrictEq}{\mathrel}{\doteq}
|
|
\newOcl{StrongEq}{\mathrel}{=}
|
|
\newMathOcl{StrongEq}{\mathrel}{\triangleq}
|
|
|
|
\newOcl{StrongNotEq}{\mathrel}{\not=}
|
|
\newMathOcl{StrongNotEq}{\mathrel}{\not\triangleq}
|
|
|
|
\newOcl{StrictNotEq}{\mathrel}{<>}
|
|
\newMathOcl{StrictNotEq}{\mathrel}{\not\doteq}
|
|
|
|
|
|
\newOcl{StrictValueEq}{\mathrel}{\ensuremath{\sim==}}
|
|
\newMathOcl{StrictValueEq}{\mathrel}{\dot{\simeq}}
|
|
\newOcl{StrongValueEq}{\mathrel}{\ensuremath{\sim=}}
|
|
\ifthenelse{\boolean{isar@mnsymbol}}{%
|
|
\newMathOcl{StrongValueEq}{\mathrel}{\stackrel{\smalltriangleup}{\simeq}}%
|
|
}{%
|
|
\newMathOcl{StrongValueEq}{\mathrel}{\stackrel{\vartriangle}{\simeq}}%
|
|
}
|
|
\newOcl{StrictDeepValueEq}{\mathrel}{\ensuremath{\sim==\sim}}
|
|
\newMathOcl{StrictDeepValueEq}{\mathrel}{\dot{\approxeq}}
|
|
\newOcl{StrongDeepValueEq}{\mathrel}{\ensuremath{\sim=\sim}}
|
|
\ifthenelse{\boolean{isar@mnsymbol}}{%
|
|
\newMathOcl{StrongDeepValueEq}{\mathrel}{\stackrel{\smalltriangleup}{\approxeq}}%
|
|
}{%
|
|
\newMathOcl{StrongDeepValueEq}{\mathrel}{\stackrel{\vartriangle}{\approxeq}}%
|
|
}
|
|
%\newOcl{RefEq}{\mathrel}{~=}
|
|
% \newMathOcl{RefEq}{\mathrel}{\simeq}
|
|
%; ******************************
|
|
%; * OCL State *
|
|
%; ******************************
|
|
% \newMathOcl{IsTypeOf}{}
|
|
% \newMathOcl{Iny/sNew}{}
|
|
% \newMathOcl{IsKind}{}
|
|
% \newMathOcl{AsType}{}
|
|
% \newMathOcl{InState}{}
|
|
% \newMathOcl{AllInstances}{}
|
|
% \newMathOcl{MethodCall}{}
|
|
% \newMathOcl{FeatureCall}{}
|
|
|
|
\newOcl{IsModifiedOnly}{\mathbin}{\aarrow oclIsModifiedOnly()}
|
|
\newMathOcl{IsModifiedOnly}{\mathbin}{\isasymOclIsModifiedOnly}
|
|
|
|
\newOcl{AllInstances}{\mathbin}{.allInstances()}
|
|
\newMathOcl{AllInstances}{\mathbin}{\isasymOclAllInstances}
|
|
|
|
\newOcl{KindSetOf}{\mathbin}{::kindSetOf()}
|
|
\newMathOcl{KindSetOf}{\mathbin}{\isasymOclKindSetOf}
|
|
|
|
\newOcl{TypeSetOf}{\mathbin}{::typeSetOf()}
|
|
\newMathOcl{TypeSetOf}{\mathbin}{\isasymOclTypeSetOf}
|
|
|
|
\newOcl{AllInstancesATpre}{\mathbin}{.allInstances@pre()}
|
|
\newMathOcl{AllInstancesATpre}{\mathbin}{\isasymOclAllInstancesATpre}
|
|
|
|
\newOcl{ATpre}{\mathbin}{@pre}
|
|
\newMathOcl{ATpre}{\mathbin}{\isasymOclATpre}
|
|
|
|
%%% undefining commands that should never be used directly:
|
|
%\let\llcorner\@undefined
|
|
%%%
|
|
\newcommand{\HolOclWfrec}{\mathop\MathOcl{\operatorname{Wfrec}}}
|
|
\endinput
|