Initial Commit

This commit is contained in:
Teddy Cameron-Burke 2025-07-05 18:09:12 +01:00
parent 7e88891b32
commit d35bdf922b
15 changed files with 2710 additions and 0 deletions

8
Example.thy Normal file
View File

@ -0,0 +1,8 @@
theory Example
imports
Idempotent_Scenes
begin
end

135
Idempotent_Scenes.thy Normal file
View File

@ -0,0 +1,135 @@
theory Idempotent_Scenes
imports Optics.Scenes Separation_Algebra.Separation_Algebra
begin
section\<open>Idempotent Scenes\<close>
typedef 's idem_scene = \<open>{F :: 's \<Rightarrow> 's \<Rightarrow> 's. idem_overrider F}\<close>
by (rule exI[of _ \<open>\<lambda>x y. x\<close>], simp only: overrider_def idem_overrider_def idem_overrider_axioms_def) blast
text\<open>To get the lifting setup working as hassle free as possible, we define a separate type all together (no connection in the typedef to scenes)\<close>
setup_lifting type_definition_idem_scene
definition scene_of_idem_scene :: \<open>'a idem_scene \<Rightarrow> 'a scene\<close> (\<open>\<lbrakk>_\<rbrakk>\<^sub>I\<close>) where
\<open>\<lbrakk>F\<rbrakk>\<^sub>I \<equiv> Abs_scene (Rep_idem_scene F)\<close>
text\<open>@{term \<open>\<lbrakk>F\<rbrakk>\<^sub>I\<close>} allows us to map any idempotent scene to a regular scene -- something very important for the lifting.\<close>
lift_definition idem_region :: \<open>'s idem_scene \<Rightarrow> 's rel\<close> is \<open>\<lambda>F. region \<lbrakk>F\<rbrakk>\<^sub>I\<close> .
lift_definition idem_coregion :: \<open>'s idem_scene \<Rightarrow> 's rel\<close> is \<open>\<lambda>F. coregion \<lbrakk>F\<rbrakk>\<^sub>I\<close> .
lift_definition idem_scene_override :: \<open>'a \<Rightarrow> 'a \<Rightarrow> ('a idem_scene) \<Rightarrow> 'a\<close> (\<open>_ \<oplus>\<^sub>I _ on _\<close> [95,0,96] 95)
is \<open>\<lambda>s\<^sub>1 s\<^sub>2 F. s\<^sub>1 \<oplus>\<^sub>S s\<^sub>2 on \<lbrakk>F\<rbrakk>\<^sub>I\<close> .
abbreviation (input) idem_scene_copy :: \<open>'a idem_scene \<Rightarrow> 'a \<Rightarrow> ('a \<Rightarrow> 'a)\<close> (\<open>Icp\<^bsub>_\<^esub>\<close>) where
\<open>Icp\<^bsub>F\<^esub> s \<equiv> cp\<^bsub>\<lbrakk>F\<rbrakk>\<^sub>I\<^esub> s\<close>
lift_definition idem_scene_equiv :: \<open>'a \<Rightarrow> 'a \<Rightarrow> ('a idem_scene) \<Rightarrow> bool\<close> (\<open>_ \<approx>\<^sub>I _ on _\<close> [65,0,66] 65)
is \<open>\<lambda>s\<^sub>1 s\<^sub>2 X. s\<^sub>1 \<approx>\<^sub>S s\<^sub>2 on \<lbrakk>X\<rbrakk>\<^sub>I\<close> .
lift_definition idem_scene_indep :: \<open>'a idem_scene \<Rightarrow> 'a idem_scene \<Rightarrow> bool\<close> (infix \<open>\<bowtie>\<^sub>I\<close> 50)
is \<open>\<lambda>F G. \<lbrakk>F\<rbrakk>\<^sub>I \<bowtie>\<^sub>S \<lbrakk>G\<rbrakk>\<^sub>I\<close> .
lift_definition scene_compat :: \<open>'a idem_scene \<Rightarrow> 'a idem_scene \<Rightarrow> bool\<close> (infix \<open>##\<^sub>I\<close> 50)
is \<open>\<lambda>F G. \<lbrakk>F\<rbrakk>\<^sub>I ##\<^sub>S \<lbrakk>G\<rbrakk>\<^sub>I\<close> .
instantiation idem_scene :: (type) \<open>{bot, top, uminus}\<close>
begin
lift_definition bot_idem_scene :: \<open>'a idem_scene\<close> is \<open>\<lambda> x y. x\<close> by (unfold_locales, simp_all)
lift_definition top_idem_scene :: \<open>'a idem_scene\<close> is \<open>\<lambda>x y. y\<close> by (unfold_locales, simp_all)
lift_definition uminus_idem_scene :: \<open>'a idem_scene \<Rightarrow> 'a idem_scene\<close> is \<open>\<lambda>F x y. F y x\<close> by (unfold_locales, simp_all add: idem_overrider_def)
instance proof qed
end
abbreviation bot_idem_scene :: \<open>'a idem_scene\<close> (\<open>\<bottom>\<^sub>I\<close>) where
\<open>\<bottom>\<^sub>I \<equiv> bot\<close>
abbreviation top_idem_scene :: \<open>'a idem_scene\<close> (\<open>\<top>\<^sub>I\<close>) where
\<open>\<top>\<^sub>I \<equiv> top\<close>
lemma scene_of_idem_scene_bot_eq[transfer_rule]: \<open>\<lbrakk>\<bottom>\<^sub>I\<rbrakk>\<^sub>I = \<bottom>\<^sub>S\<close>
by (metis bot_idem_scene.transfer bot_scene.abs_eq cr_idem_scene_def idem_scene.pcr_cr_eq scene_of_idem_scene_def)
lemma scene_of_idem_scene_top_eq[transfer_rule]: \<open>\<lbrakk>\<top>\<^sub>I\<rbrakk>\<^sub>I = \<top>\<^sub>S\<close>
by (simp add: scene_of_idem_scene_def top_idem_scene.rep_eq top_scene.abs_eq)
definition idem_scene_of_scene :: \<open>'a scene \<Rightarrow> 'a idem_scene\<close> (\<open>\<lbrakk>_\<rbrakk>\<^sub>S\<close>) where
\<open>\<lbrakk>F\<rbrakk>\<^sub>S \<equiv> (if idem_scene F then Abs_idem_scene (Rep_scene F) else \<bottom>\<^sub>I)\<close>
text\<open>We needed the @{term \<open>\<lbrakk>F\<rbrakk>\<^sub>S\<close>} mapping to allow the lifting of @{term \<open>sup\<close>} and @{term \<open>inf\<close>}.
Without this, the type inference is too weak; we cannot define these functions as done in \<^file>\<open>$AFP/Optics/Scenes.thy\<close>
because the type inference has scenes as the representation type @{typ \<open>'a \<Rightarrow> 'a \<Rightarrow> 'a\<close>}.
Since we lifted all of the old definitions, and mapped them to @{typ \<open>'a scene\<close>}, type inference does not give us the representation type but instead the raw type @{typ \<open>'a idem_scene\<close>}.\<close>
lemma idem_scene_of_scene_inv[simp, transfer_rule]: \<open>\<lbrakk>\<lbrakk>S\<rbrakk>\<^sub>I\<rbrakk>\<^sub>S = S\<close>
by (metis Abs_scene_inverse Rep_idem_scene Rep_idem_scene_inverse idem_overrider_def idem_scene.rep_eq idem_scene_of_scene_def mem_Collect_eq
scene_of_idem_scene_def)
lemma scene_of_idem_scene_inv1:
assumes \<open>idem_scene S\<close>
shows \<open>\<lbrakk>\<lbrakk>S\<rbrakk>\<^sub>S\<rbrakk>\<^sub>I = S\<close>
by (metis Abs_idem_scene_inverse Rep_scene_inverse assms idem_scene.rep_eq idem_scene_of_scene_def mem_Collect_eq scene_of_idem_scene_def)
lemma scene_of_idem_scene_inv2:
assumes \<open>\<not>idem_scene S\<close>
shows \<open>\<lbrakk>\<lbrakk>S\<rbrakk>\<^sub>S\<rbrakk>\<^sub>I = \<bottom>\<^sub>S\<close>
by (simp add: assms idem_scene_of_scene_def scene_of_idem_scene_bot_eq)
lemma idem_scene_of_scene_bot_eq[transfer_rule]: \<open>\<lbrakk>\<bottom>\<^sub>S\<rbrakk>\<^sub>S = \<bottom>\<^sub>I\<close>
unfolding idem_scene_of_scene_def by (simp add: bot_idem_scene_def bot_scene.rep_eq)
instantiation idem_scene :: (type) \<open>{sup, inf}\<close>
begin
lift_definition sup_idem_scene :: \<open>'a idem_scene \<Rightarrow> 'a idem_scene \<Rightarrow> 'a idem_scene\<close>
is \<open>\<lambda>F G. \<lbrakk>sup \<lbrakk>F\<rbrakk>\<^sub>I \<lbrakk>G\<rbrakk>\<^sub>I\<rbrakk>\<^sub>S\<close> .
lift_definition inf_idem_scene :: \<open>'a idem_scene \<Rightarrow> 'a idem_scene \<Rightarrow> 'a idem_scene\<close>
is \<open>\<lambda>F G. \<lbrakk>inf \<lbrakk>F\<rbrakk>\<^sub>I \<lbrakk>G\<rbrakk>\<^sub>I\<rbrakk>\<^sub>S\<close> .
instance by (intro_classes)
end
abbreviation idem_scene_union :: \<open>'a idem_scene \<Rightarrow> 'a idem_scene \<Rightarrow> 'a idem_scene\<close> (infixl \<open>\<squnion>\<^sub>I\<close> 65)
where \<open>F \<squnion>\<^sub>I G \<equiv> sup F G\<close>
subsection\<open>Idempotent Scenes form a Separation Algebra\<close>
instantiation idem_scene :: (type) sep_algebra
begin
lift_definition sep_disj_idem_scene :: \<open>'a idem_scene \<Rightarrow> 'a idem_scene \<Rightarrow> bool\<close> is \<open>(\<bowtie>\<^sub>I)\<close> .
lift_definition plus_idem_scene :: \<open>'a idem_scene \<Rightarrow> 'a idem_scene \<Rightarrow> 'a idem_scene\<close> is \<open>(\<squnion>\<^sub>I)\<close> .
lift_definition zero_idem_scene :: \<open>'a idem_scene\<close> is \<open>\<bottom>\<^sub>I\<close> .
instance
apply(intro_classes)
apply transfer
apply (simp add: idem_scene_indep.abs_eq scene_of_idem_scene_bot_eq)
apply transfer
subgoal for x y
apply transfer
using scene_indep_sym by blast
apply transfer
apply (simp add: scene_of_idem_scene_bot_eq sup_idem_scene.abs_eq)
apply transfer
apply transfer
apply (simp add: scene_union_commute)
apply transfer
apply transfer
apply (smt (z3) idem_scene_of_scene_inv idem_scene_union scene_indep_compat scene_of_idem_scene_inv1 scene_of_idem_scene_inv2 scene_union_assoc scene_union_unit(1,2))
apply transfer
apply transfer
apply (smt (verit, ccfv_threshold) bot_idem_scene idem_scene_of_scene_inv idem_scene_union scene_indep_sym scene_le_iff_indep_inv scene_of_idem_scene_inv1 scene_of_idem_scene_inv2
scene_union_ub subscene_trans uminus_scene_twice)
apply transfer
apply transfer
by (smt (z3) Abs_scene_inverse Rep_idem_scene idem_overrider_def idem_scene.rep_eq idem_scene_union mem_Collect_eq scene_indep_pres_compat scene_indep_sym scene_le_iff_indep_inv
scene_of_idem_scene_def scene_of_idem_scene_inv1 scene_union_commute scene_union_ub subscene_trans uminus_scene_twice)
end
end

126
Idempotent_Scenes.thy~ Normal file
View File

@ -0,0 +1,126 @@
theory Idempotent_Scenes
imports Optics.Scenes Separation_Algebra.Separation_Algebra
begin
typedef 's idem_scene = \<open>{F :: 's \<Rightarrow> 's \<Rightarrow> 's. idem_overrider F}\<close>
by (rule exI[of _ \<open>\<lambda>x y. x\<close>], simp only: overrider_def idem_overrider_def idem_overrider_axioms_def) blast
setup_lifting type_definition_idem_scene
definition scene_of_idem_scene :: \<open>'a idem_scene \<Rightarrow> 'a scene\<close> (\<open>\<lbrakk>_\<rbrakk>\<^sub>I\<close>) where
\<open>\<lbrakk>F\<rbrakk>\<^sub>I \<equiv> Abs_scene (Rep_idem_scene F)\<close>
lift_definition idem_region :: \<open>'s idem_scene \<Rightarrow> 's rel\<close> is \<open>\<lambda>F. region \<lbrakk>F\<rbrakk>\<^sub>I\<close> .
lift_definition idem_coregion :: \<open>'s idem_scene \<Rightarrow> 's rel\<close> is \<open>\<lambda>F. coregion \<lbrakk>F\<rbrakk>\<^sub>I\<close> .
lift_definition idem_scene_override :: \<open>'a \<Rightarrow> 'a \<Rightarrow> ('a idem_scene) \<Rightarrow> 'a\<close> (\<open>_ \<oplus>\<^sub>I _ on _\<close> [95,0,96] 95)
is \<open>\<lambda>s\<^sub>1 s\<^sub>2 F. s\<^sub>1 \<oplus>\<^sub>S s\<^sub>2 on \<lbrakk>F\<rbrakk>\<^sub>I\<close> .
abbreviation (input) idem_scene_copy :: \<open>'a idem_scene \<Rightarrow> 'a \<Rightarrow> ('a \<Rightarrow> 'a)\<close> (\<open>Icp\<^bsub>_\<^esub>\<close>) where
\<open>Icp\<^bsub>F\<^esub> s \<equiv> cp\<^bsub>\<lbrakk>F\<rbrakk>\<^sub>I\<^esub> s\<close>
lift_definition idem_scene_equiv :: \<open>'a \<Rightarrow> 'a \<Rightarrow> ('a idem_scene) \<Rightarrow> bool\<close> (\<open>_ \<approx>\<^sub>I _ on _\<close> [65,0,66] 65)
is \<open>\<lambda>s\<^sub>1 s\<^sub>2 X. s\<^sub>1 \<approx>\<^sub>S s\<^sub>2 on \<lbrakk>X\<rbrakk>\<^sub>I\<close> .
lift_definition idem_scene_indep :: \<open>'a idem_scene \<Rightarrow> 'a idem_scene \<Rightarrow> bool\<close> (infix \<open>\<bowtie>\<^sub>I\<close> 50)
is \<open>\<lambda>F G. \<lbrakk>F\<rbrakk>\<^sub>I \<bowtie>\<^sub>S \<lbrakk>G\<rbrakk>\<^sub>I\<close> .
lift_definition scene_compat :: \<open>'a idem_scene \<Rightarrow> 'a idem_scene \<Rightarrow> bool\<close> (infix \<open>##\<^sub>I\<close> 50)
is \<open>\<lambda>F G. \<lbrakk>F\<rbrakk>\<^sub>I ##\<^sub>S \<lbrakk>G\<rbrakk>\<^sub>I\<close> .
instantiation idem_scene :: (type) \<open>{bot, top, uminus}\<close>
begin
lift_definition bot_idem_scene :: \<open>'a idem_scene\<close> is \<open>\<lambda> x y. x\<close> by (unfold_locales, simp_all)
lift_definition top_idem_scene :: \<open>'a idem_scene\<close> is \<open>\<lambda>x y. y\<close> by (unfold_locales, simp_all)
lift_definition uminus_idem_scene :: \<open>'a idem_scene \<Rightarrow> 'a idem_scene\<close> is \<open>\<lambda>F x y. F y x\<close> by (unfold_locales, simp_all add: idem_overrider_def)
instance proof qed
end
abbreviation bot_idem_scene :: \<open>'a idem_scene\<close> (\<open>\<bottom>\<^sub>I\<close>) where
\<open>\<bottom>\<^sub>I \<equiv> bot\<close>
abbreviation top_idem_scene :: \<open>'a idem_scene\<close> (\<open>\<top>\<^sub>I\<close>) where
\<open>\<top>\<^sub>I \<equiv> top\<close>
lemma scene_of_idem_scene_bot_eq: \<open>\<lbrakk>\<bottom>\<^sub>I\<rbrakk>\<^sub>I = \<bottom>\<^sub>S\<close>
by (metis bot_idem_scene.transfer bot_scene.abs_eq cr_idem_scene_def idem_scene.pcr_cr_eq scene_of_idem_scene_def)
lemma scene_of_idem_scene_top_eq: \<open>\<lbrakk>\<top>\<^sub>I\<rbrakk>\<^sub>I = \<top>\<^sub>S\<close>
by (simp add: scene_of_idem_scene_def top_idem_scene.rep_eq top_scene.abs_eq)
definition idem_scene_of_scene :: \<open>'a scene \<Rightarrow> 'a idem_scene\<close> (\<open>\<lbrakk>_\<rbrakk>\<^sub>S\<close>) where
\<open>\<lbrakk>F\<rbrakk>\<^sub>S \<equiv> (if idem_scene F then Abs_idem_scene (Rep_scene F) else \<bottom>\<^sub>I)\<close>
lemma idem_scene_of_scene_inv[simp]: \<open>\<lbrakk>\<lbrakk>S\<rbrakk>\<^sub>I\<rbrakk>\<^sub>S = S\<close>
by (metis Abs_scene_inverse Rep_idem_scene Rep_idem_scene_inverse idem_overrider_def idem_scene.rep_eq idem_scene_of_scene_def mem_Collect_eq
scene_of_idem_scene_def)
lemma scene_of_idem_scene_inv1:
assumes \<open>idem_scene S\<close>
shows \<open>\<lbrakk>\<lbrakk>S\<rbrakk>\<^sub>S\<rbrakk>\<^sub>I = S\<close>
by (metis Abs_idem_scene_inverse Rep_scene_inverse assms idem_scene.rep_eq idem_scene_of_scene_def mem_Collect_eq scene_of_idem_scene_def)
lemma scene_of_idem_scene_inv2:
assumes \<open>\<not>idem_scene S\<close>
shows \<open>\<lbrakk>\<lbrakk>S\<rbrakk>\<^sub>S\<rbrakk>\<^sub>I = \<bottom>\<^sub>S\<close>
by (simp add: assms idem_scene_of_scene_def scene_of_idem_scene_bot_eq)
lemma idem_scene_of_scene_bot_eq: \<open>\<lbrakk>\<bottom>\<^sub>S\<rbrakk>\<^sub>S = \<bottom>\<^sub>I\<close>
unfolding idem_scene_of_scene_def by (simp add: bot_idem_scene_def bot_scene.rep_eq)
instantiation idem_scene :: (type) \<open>{sup, inf}\<close>
begin
lift_definition sup_idem_scene :: \<open>'a idem_scene \<Rightarrow> 'a idem_scene \<Rightarrow> 'a idem_scene\<close>
is \<open>\<lambda>F G. \<lbrakk>sup \<lbrakk>F\<rbrakk>\<^sub>I \<lbrakk>G\<rbrakk>\<^sub>I\<rbrakk>\<^sub>S\<close> .
lift_definition inf_idem_scene :: \<open>'a idem_scene \<Rightarrow> 'a idem_scene \<Rightarrow> 'a idem_scene\<close>
is \<open>\<lambda>F G. \<lbrakk>inf \<lbrakk>F\<rbrakk>\<^sub>I \<lbrakk>G\<rbrakk>\<^sub>I\<rbrakk>\<^sub>S\<close> .
instance by (intro_classes)
end
abbreviation idem_scene_union :: \<open>'a idem_scene \<Rightarrow> 'a idem_scene \<Rightarrow> 'a idem_scene\<close> (infixl \<open>\<squnion>\<^sub>I\<close> 65)
where \<open>F \<squnion>\<^sub>I G \<equiv> sup F G\<close>
lemma idem_scene_union_to_scene: \<open>F \<squnion>\<^sub>I G \<equiv> \<lbrakk>\<lbrakk>F\<rbrakk>\<^sub>I \<squnion>\<^sub>S \<lbrakk>G\<rbrakk>\<^sub>I\<rbrakk>\<^sub>S\<close>
by (simp add: sup_idem_scene.abs_eq)
instantiation idem_scene :: (type) sep_algebra
begin
lift_definition sep_disj_idem_scene :: \<open>'a idem_scene \<Rightarrow> 'a idem_scene \<Rightarrow> bool\<close> is \<open>(\<bowtie>\<^sub>I)\<close> .
lift_definition plus_idem_scene :: \<open>'a idem_scene \<Rightarrow> 'a idem_scene \<Rightarrow> 'a idem_scene\<close> is \<open>(\<squnion>\<^sub>I)\<close> .
lift_definition zero_idem_scene :: \<open>'a idem_scene\<close> is \<open>\<bottom>\<^sub>I\<close> .
instance
apply(intro_classes)
apply transfer
apply (simp add: idem_scene_indep.abs_eq scene_of_idem_scene_bot_eq)
apply transfer
subgoal for x y
apply transfer
using scene_indep_sym by blast
apply transfer
apply (simp add: scene_of_idem_scene_bot_eq sup_idem_scene.abs_eq)
apply transfer
apply transfer
apply (simp add: scene_union_commute)
apply transfer
apply transfer
apply (smt (z3) idem_scene_of_scene_inv idem_scene_union scene_indep_compat scene_of_idem_scene_inv1 scene_of_idem_scene_inv2 scene_union_assoc scene_union_unit(1,2))
apply transfer
apply transfer
apply (smt (verit, ccfv_threshold) bot_idem_scene idem_scene_of_scene_inv idem_scene_union scene_indep_sym scene_le_iff_indep_inv scene_of_idem_scene_inv1 scene_of_idem_scene_inv2
scene_union_ub subscene_trans uminus_scene_twice)
apply transfer
apply transfer
by (smt (z3) Abs_scene_inverse Rep_idem_scene idem_overrider_def idem_scene.rep_eq idem_scene_union mem_Collect_eq scene_indep_pres_compat scene_indep_sym scene_le_iff_indep_inv
scene_of_idem_scene_def scene_of_idem_scene_inv1 scene_union_commute scene_union_ub subscene_trans uminus_scene_twice)
end
end

6
ROOT Normal file
View File

@ -0,0 +1,6 @@
session Idempotent_Scenes = HOL +
options [document = pdf, document_output = "output"]
theories [document = true]
Idempotent_Scenes
document_files
"root.tex"

60
document/root.tex Normal file
View File

@ -0,0 +1,60 @@
\documentclass[11pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage{isabelle,isabellesym}
% further packages required for unusual symbols (see also
% isabellesym.sty), use only when needed
%\usepackage{amssymb}
%for \<leadsto>, \<box>, \<diamond>, \<sqsupset>, \<mho>, \<Join>,
%\<lhd>, \<lesssim>, \<greatersim>, \<lessapprox>, \<greaterapprox>,
%\<triangleq>, \<yen>, \<lozenge>
%\usepackage{eurosym}
%for \<euro>
%\usepackage[only,bigsqcap,bigparallel,fatsemi,interleave,sslash]{stmaryrd}
%for \<Sqinter>, \<Parallel>, \<Zsemi>, \<Parallel>, \<sslash>
%\usepackage{eufrak}
%for \<AA> ... \<ZZ>, \<aa> ... \<zz> (also included in amssymb)
%\usepackage{textcomp}
%for \<onequarter>, \<onehalf>, \<threequarters>, \<degree>, \<cent>,
%\<currency>
% this should be the last package used
\usepackage{pdfsetup}
% urls in roman style, theory text in math-similar italics
\urlstyle{rm}
\isabellestyle{it}
% for uniform font size
%\renewcommand{\isastyle}{\isastyleminor}
\begin{document}
\title{Idempotent-Scenes}
\author{user}
\maketitle
\tableofcontents
% sane default for proof documents
\parindent 0pt\parskip 0.5ex
% generated text of all theories
\input{session}
% optional bibliography
%\bibliographystyle{abbrv}
%\bibliography{root}
\end{document}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End:

BIN
output/document.pdf Normal file

Binary file not shown.

280
output/document/comment.sty Normal file
View File

@ -0,0 +1,280 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Comment.sty version 3.6, October 1999
%
% Purpose:
% selectively in/exclude pieces of text: the user can define new
% comment versions, and each is controlled separately.
% Special comments can be defined where the user specifies the
% action that is to be taken with each comment line.
%
% Author
% Victor Eijkhout
% Department of Computer Science
% University of Tennessee
% 107 Ayres Hall
% Knoxville TN 37996
% USA
%
% victor@eijkhout.net
%
% This program is free software; you can redistribute it and/or
% modify it under the terms of the GNU General Public License
% as published by the Free Software Foundation; either version 2
% of the License, or (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% For a copy of the GNU General Public License, write to the
% Free Software Foundation, Inc.,
% 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA,
% or find it on the net, for instance at
% http://www.gnu.org/copyleft/gpl.html
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This style can be used with plain TeX or LaTeX, and probably
% most other packages too.
%
% Usage: all text included between
% \comment ... \endcomment
% or \begin{comment} ... \end{comment}
% is discarded.
%
% The opening and closing commands should appear on a line
% of their own. No starting spaces, nothing after it.
% This environment should work with arbitrary amounts
% of comment, and the comment can be arbitrary text.
%
% Other `comment' environments are defined by
% and are selected/deselected with
% \includecomment{versiona}
% \excludecoment{versionb}
%
% These environments are used as
% \versiona ... \endversiona
% or \begin{versiona} ... \end{versiona}
% with the opening and closing commands again on a line of
% their own.
%
% LaTeX users note: for an included comment, the
% \begin and \end lines act as if they don't exist.
% In particular, they don't imply grouping, so assignments
% &c are not local.
%
% Special comments are defined as
% \specialcomment{name}{before commands}{after commands}
% where the second and third arguments are executed before
% and after each comment block. You can use this for global
% formatting commands.
% To keep definitions &c local, you can include \begingroup
% in the `before commands' and \endgroup in the `after commands'.
% ex:
% \specialcomment{smalltt}
% {\begingroup\ttfamily\footnotesize}{\endgroup}
% You do *not* have to do an additional
% \includecomment{smalltt}
% To remove 'smalltt' blocks, give \excludecomment{smalltt}
% after the definition.
%
% Processing comments can apply processing to each line.
% \processcomment{name}{each-line commands}%
% {before commands}{after commands}
% By defining a control sequence
% \def\Thiscomment##1{...} in the before commands the user can
% specify what is to be done with each comment line.
% BUG this does not work quite yet BUG
%
% Trick for short in/exclude macros (such as \maybe{this snippet}):
%\includecomment{cond}
%\newcommand{\maybe}[1]{}
%\begin{cond}
%\renewcommand{\maybe}[1]{#1}
%\end{cond}
%
% Basic approach of the implementation:
% to comment something out, scoop up every line in verbatim mode
% as macro argument, then throw it away.
% For inclusions, in LaTeX the block is written out to
% a file \CommentCutFile (default "comment.cut"), which is
% then included.
% In plain TeX (and other formats) both the opening and
% closing comands are defined as noop.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Changes in version 3.1
% - updated author's address
% - cleaned up some code
% - trailing contents on \begin{env} line is always discarded
% even if you've done \includecomment{env}
% - comments no longer define grouping!! you can even
% \includecomment{env}
% \begin{env}
% \begin{itemize}
% \end{env}
% Isn't that something ...
% - included comments are written to file and input again.
% Changes in 3.2
% - \specialcomment brought up to date (thanks to Ivo Welch).
% Changes in 3.3
% - updated author's address again
% - parametrised \CommentCutFile
% Changes in 3.4
% - added GNU public license
% - added \processcomment, because Ivo's fix (above) brought an
% inconsistency to light.
% Changes in 3.5
% - corrected typo in header.
% - changed author email
% - corrected \specialcomment yet again.
% - fixed excludecomment of an earlier defined environment.
% Changes in 3.6
% - The 'cut' file is now written more verbatim, using \meaning;
% some people reported having trouble with ISO latin 1, or umlaute.sty.
% - removed some \newif statements.
% Has this suddenly become \outer again?
%
% Known bugs:
% - excludecomment leads to one superfluous space
% - processcomment leads to a superfluous line break
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\makeinnocent#1{\catcode`#1=12 }
\def\csarg#1#2{\expandafter#1\csname#2\endcsname}
\def\latexname{lplain}\def\latexename{LaTeX2e}
\newwrite\CommentStream
\def\CommentCutFile{comment.cut}
\def\ProcessComment#1% start it all of
{\begingroup
\def\CurrentComment{#1}%
\let\do\makeinnocent \dospecials
\makeinnocent\^^L% and whatever other special cases
\endlinechar`\^^M \catcode`\^^M=12 \xComment}
%\def\ProcessCommentWithArg#1#2% to be used in \leveledcomment
% {\begingroup
% \def\CurrentComment{#1}%
% \let\do\makeinnocent \dospecials
% \makeinnocent\^^L% and whatever other special cases
% \endlinechar`\^^M \catcode`\^^M=12 \xComment}
{\catcode`\^^M=12 \endlinechar=-1 %
\gdef\xComment#1^^M{%
\expandafter\ProcessCommentLine}
\gdef\ProcessCommentLine#1^^M{\def\test{#1}
\csarg\ifx{End\CurrentComment Test}\test
\edef\next{\noexpand\EndOfComment{\CurrentComment}}%
\else \ThisComment{#1}\let\next\ProcessCommentLine
\fi \next}
}
\def\CSstringmeaning#1{\expandafter\CSgobblearrow\meaning#1}
\def\CSstringcsnoescape#1{\expandafter\CSgobbleescape\string#1}
{\escapechar-1
\expandafter\expandafter\expandafter\gdef
\expandafter\expandafter\expandafter\CSgobblearrow
\expandafter\string\csname macro:->\endcsname{}
}
\def\CSgobbleescape#1{\ifnum`\\=`#1 \else #1\fi}
\def\WriteCommentLine#1{\def\CStmp{#1}%
\immediate\write\CommentStream{\CSstringmeaning\CStmp}}
% 3.1 change: in LaTeX and LaTeX2e prevent grouping
\if 0%
\ifx\fmtname\latexename
0%
\else \ifx\fmtname\latexname
0%
\else
1%
\fi \fi
%%%%
%%%% definitions for LaTeX
%%%%
\def\AfterIncludedComment
{\immediate\closeout\CommentStream
\input{\CommentCutFile}\relax
}%
\def\TossComment{\immediate\closeout\CommentStream}
\def\BeforeIncludedComment
{\immediate\openout\CommentStream=\CommentCutFile
\let\ThisComment\WriteCommentLine}
\def\includecomment
#1{\message{Include comment '#1'}%
\csarg\let{After#1Comment}\AfterIncludedComment
\csarg\def{#1}{\BeforeIncludedComment
\ProcessComment{#1}}%
\CommentEndDef{#1}}
\long\def\specialcomment
#1#2#3{\message{Special comment '#1'}%
% note: \AfterIncludedComment does \input, so #2 goes here!
\csarg\def{After#1Comment}{#2\AfterIncludedComment#3}%
\csarg\def{#1}{\BeforeIncludedComment\relax
\ProcessComment{#1}}%
\CommentEndDef{#1}}
\long\def\processcomment
#1#2#3#4{\message{Lines-Processing comment '#1'}%
\csarg\def{After#1Comment}{#3\AfterIncludedComment#4}%
\csarg\def{#1}{\BeforeIncludedComment#2\relax
\ProcessComment{#1}}%
\CommentEndDef{#1}}
\def\leveledcomment
#1#2{\message{Include comment '#1' up to level '#2'}%
%\csname #1IsLeveledCommenttrue\endcsname
\csarg\let{After#1Comment}\AfterIncludedComment
\csarg\def{#1}{\BeforeIncludedComment
\ProcessCommentWithArg{#1}}%
\CommentEndDef{#1}}
\else
%%%%
%%%%plain TeX and other formats
%%%%
\def\includecomment
#1{\message{Including comment '#1'}%
\csarg\def{#1}{}%
\csarg\def{end#1}{}}
\long\def\specialcomment
#1#2#3{\message{Special comment '#1'}%
\csarg\def{#1}{\def\ThisComment{}\def\AfterComment{#3}#2%
\ProcessComment{#1}}%
\CommentEndDef{#1}}
\fi
%%%%
%%%% general definition of skipped comment
%%%%
\def\excludecomment
#1{\message{Excluding comment '#1'}%
\csarg\def{#1}{\let\AfterComment\relax
\def\ThisComment####1{}\ProcessComment{#1}}%
\csarg\let{After#1Comment}\TossComment
\CommentEndDef{#1}}
\if 0%
\ifx\fmtname\latexename
0%
\else \ifx\fmtname\latexname
0%
\else
1%
\fi \fi
% latex & latex2e:
\def\EndOfComment#1{\endgroup\end{#1}%
\csname After#1Comment\endcsname}
\def\CommentEndDef#1{{\escapechar=-1\relax
\csarg\xdef{End#1Test}{\string\\end\string\{#1\string\}}%
}}
\else
% plain & other
\def\EndOfComment#1{\endgroup\AfterComment}
\def\CommentEndDef#1{{\escapechar=-1\relax
\csarg\xdef{End#1Test}{\string\\end#1}%
}}
\fi
\excludecomment{comment}
\endinput
\endinput
%:%file=~~/lib/texinputs/comment.sty%:%

View File

@ -0,0 +1,294 @@
%%
%% macros for Isabelle generated LaTeX output
%%
%%% Simple document preparation (based on theory token language and symbols)
% isabelle environments
\newcommand{\isabellecontext}{UNKNOWN}
\newcommand{\setisabellecontext}[1]{\def\isabellecontext{#1}}
\newcommand{\isastyle}{\UNDEF}
\newcommand{\isastylett}{\UNDEF}
\newcommand{\isastyleminor}{\UNDEF}
\newcommand{\isastyleminortt}{\UNDEF}
\newcommand{\isastylescript}{\UNDEF}
\newcommand{\isastyletext}{\normalsize\normalfont\rmfamily}
\newcommand{\isastyletxt}{\normalfont\rmfamily}
\newcommand{\isastylecmt}{\normalfont\rmfamily}
\newcommand{\isaspacing}{%
\sfcode 42 1000 % .
\sfcode 63 1000 % ?
\sfcode 33 1000 % !
\sfcode 58 1000 % :
\sfcode 59 1000 % ;
\sfcode 44 1000 % ,
}
%symbol markup -- \emph achieves decent spacing via italic corrections
\newcommand{\isamath}[1]{\emph{$#1$}}
\newcommand{\isatext}[1]{\emph{#1}}
\DeclareRobustCommand{\isascriptstyle}{\def\isamath##1{##1}\def\isatext##1{\mbox{\isaspacing\isastylescript##1}}}
\newcommand{\isactrlsub}[1]{\emph{\isascriptstyle${}\sb{#1}$}}
\newcommand{\isactrlsup}[1]{\emph{\isascriptstyle${}\sp{#1}$}}
\DeclareRobustCommand{\isactrlbsub}{\emph\bgroup\math{}\sb\bgroup\mbox\bgroup\isaspacing\isastylescript}
\DeclareRobustCommand{\isactrlesub}{\egroup\egroup\endmath\egroup}
\DeclareRobustCommand{\isactrlbsup}{\emph\bgroup\math{}\sp\bgroup\mbox\bgroup\isaspacing\isastylescript}
\DeclareRobustCommand{\isactrlesup}{\egroup\egroup\endmath\egroup}
\newcommand{\isactrlbold}[1]{{\bfseries\upshape\boldmath#1}}
%blackboard-bold (requires font txmia from pxfonts)
\DeclareSymbolFont{bbbfont}{U}{txmia}{m}{it}
\SetSymbolFont{bbbfont}{bold}{U}{txmia}{bx}{it}
\DeclareMathSymbol{\bbbA}{\mathord}{bbbfont}{129}
\DeclareMathSymbol{\bbbB}{\mathord}{bbbfont}{130}
\DeclareMathSymbol{\bbbC}{\mathord}{bbbfont}{131}
\DeclareMathSymbol{\bbbD}{\mathord}{bbbfont}{132}
\DeclareMathSymbol{\bbbE}{\mathord}{bbbfont}{133}
\DeclareMathSymbol{\bbbF}{\mathord}{bbbfont}{134}
\DeclareMathSymbol{\bbbG}{\mathord}{bbbfont}{135}
\DeclareMathSymbol{\bbbH}{\mathord}{bbbfont}{136}
\DeclareMathSymbol{\bbbI}{\mathord}{bbbfont}{137}
\DeclareMathSymbol{\bbbJ}{\mathord}{bbbfont}{138}
\DeclareMathSymbol{\bbbK}{\mathord}{bbbfont}{139}
\DeclareMathSymbol{\bbbL}{\mathord}{bbbfont}{140}
\DeclareMathSymbol{\bbbM}{\mathord}{bbbfont}{141}
\DeclareMathSymbol{\bbbN}{\mathord}{bbbfont}{142}
\DeclareMathSymbol{\bbbO}{\mathord}{bbbfont}{143}
\DeclareMathSymbol{\bbbP}{\mathord}{bbbfont}{144}
\DeclareMathSymbol{\bbbQ}{\mathord}{bbbfont}{145}
\DeclareMathSymbol{\bbbR}{\mathord}{bbbfont}{146}
\DeclareMathSymbol{\bbbS}{\mathord}{bbbfont}{147}
\DeclareMathSymbol{\bbbT}{\mathord}{bbbfont}{148}
\DeclareMathSymbol{\bbbU}{\mathord}{bbbfont}{149}
\DeclareMathSymbol{\bbbV}{\mathord}{bbbfont}{150}
\DeclareMathSymbol{\bbbW}{\mathord}{bbbfont}{151}
\DeclareMathSymbol{\bbbX}{\mathord}{bbbfont}{152}
\DeclareMathSymbol{\bbbY}{\mathord}{bbbfont}{153}
\DeclareMathSymbol{\bbbZ}{\mathord}{bbbfont}{154}
\newenvironment{isaantiq}{{\isacharat\isacharbraceleft}}{{\isacharbraceright}}
\newdimen\isa@parindent\newdimen\isa@parskip
\newenvironment{isabellebody}{%
\isamarkuptrue\par%
\isa@parindent\parindent\parindent0pt%
\isa@parskip\parskip\parskip0pt%
\isaspacing\isastyle}{\par}
\newenvironment{isabellebodytt}{%
\isamarkuptrue\par%
\isa@parindent\parindent\parindent0pt%
\isa@parskip\parskip\parskip0pt%
\isaspacing\isastylett}{\par}
\newenvironment{isabelle}
{\begin{trivlist}\begin{isabellebody}\item\relax}
{\end{isabellebody}\end{trivlist}}
\newenvironment{isabellett}
{\begin{trivlist}\begin{isabellebodytt}\item\relax}
{\end{isabellebodytt}\end{trivlist}}
\newcommand{\isa}[1]{\emph{\isaspacing\isastyleminor #1}}
\newcommand{\isatt}[1]{\emph{\isaspacing\isastyleminortt #1}}
\newcommand{\isaindent}[1]{\hphantom{#1}}
\newcommand{\isanewline}{\mbox{}\par\mbox{}}
\newcommand{\isasep}{}
\newcommand{\isadigit}[1]{#1}
\newcommand{\isachardefaults}{%
\def\isacharbell{\isamath{\bigbox}}%requires stmaryrd
\chardef\isacharbang=`\!%
\chardef\isachardoublequote=`\"%
\chardef\isachardoublequoteopen=`\"%
\chardef\isachardoublequoteclose=`\"%
\chardef\isacharhash=`\#%
\chardef\isachardollar=`\$%
\chardef\isacharpercent=`\%%
\chardef\isacharampersand=`\&%
\chardef\isacharprime=`\'%
\chardef\isacharparenleft=`\(%
\chardef\isacharparenright=`\)%
\chardef\isacharasterisk=`\*%
\chardef\isacharplus=`\+%
\chardef\isacharcomma=`\,%
\chardef\isacharminus=`\-%
\chardef\isachardot=`\.%
\chardef\isacharslash=`\/%
\chardef\isacharcolon=`\:%
\chardef\isacharsemicolon=`\;%
\chardef\isacharless=`\<%
\chardef\isacharequal=`\=%
\chardef\isachargreater=`\>%
\chardef\isacharquery=`\?%
\chardef\isacharat=`\@%
\chardef\isacharbrackleft=`\[%
\chardef\isacharbackslash=`\\%
\chardef\isacharbrackright=`\]%
\chardef\isacharcircum=`\^%
\chardef\isacharunderscore=`\_%
\def\isacharunderscorekeyword{\_}%
\chardef\isacharbackquote=`\`%
\chardef\isacharbackquoteopen=`\`%
\chardef\isacharbackquoteclose=`\`%
\chardef\isacharbraceleft=`\{%
\chardef\isacharbar=`\|%
\chardef\isacharbraceright=`\}%
\chardef\isachartilde=`\~%
\def\isacartoucheopen{\isatext{\guilsinglleft}}%
\def\isacartoucheclose{\isatext{\guilsinglright}}%
}
% keyword and section markup
\newcommand{\isakeyword}[1]
{\emph{\normalfont\bfseries\def\isachardot{.}\def\isacharunderscore{\isacharunderscorekeyword}%
\def\isacharbraceleft{\{}\def\isacharbraceright{\}}#1}}
\newcommand{\isacommand}[1]{\isakeyword{#1}}
\newcommand{\isakeywordONE}[1]{\isakeyword{#1}}
\newcommand{\isakeywordTWO}[1]{\isakeyword{#1}}
\newcommand{\isakeywordTHREE}[1]{\isakeyword{#1}}
\newcommand{\isatclass}[1]{#1}
\newcommand{\isatconst}[1]{#1}
\newcommand{\isatfree}[1]{#1}
\newcommand{\isatvar}[1]{#1}
\newcommand{\isaconst}[1]{#1}
\newcommand{\isafree}[1]{#1}
\newcommand{\isaskolem}[1]{#1}
\newcommand{\isabound}[1]{#1}
\newcommand{\isavar}[1]{#1}
\newcommand{\isakeywordcontrol}[1]
{\emph{\normalfont\bfseries\itshape\def\isacharunderscore{\isacharunderscorekeyword}#1\,}}
\newcommand{\isamarkupchapter}[1]{\chapter{#1}}
\newcommand{\isamarkupsection}[1]{\section{#1}}
\newcommand{\isamarkupsubsection}[1]{\subsection{#1}}
\newcommand{\isamarkupsubsubsection}[1]{\subsubsection{#1}}
\newcommand{\isamarkupparagraph}[1]{\paragraph{#1}}
\newcommand{\isamarkupsubparagraph}[1]{\subparagraph{#1}}
\newif\ifisamarkup
\newcommand{\isabeginpar}{\par\ifisamarkup\relax\else\medskip\fi}
\newcommand{\isaendpar}{\par\medskip}
\newenvironment{isapar}{\parindent\isa@parindent\parskip\isa@parskip\isabeginpar}{\isaendpar}
\newenvironment{isamarkuptext}{\par\isastyletext\begin{isapar}}{\end{isapar}}
\newenvironment{isamarkuptxt}{\par\isastyletxt\begin{isapar}}{\end{isapar}}
\newcommand{\isamarkupcmt}[1]{{\isastylecmt--- #1}}
% index entries
\newcommand{\isaindexdef}[1]{\textbf{#1}}
\newcommand{\isaindexref}[1]{#1}
% styles
\def\isabellestyle#1{\csname isabellestyle#1\endcsname}
\newcommand{\isabellestyledefault}{%
\def\isastyle{\small\normalfont\ttfamily\slshape}%
\def\isastylett{\small\normalfont\ttfamily}%
\def\isastyleminor{\small\normalfont\ttfamily\slshape}%
\def\isastyleminortt{\small\normalfont\ttfamily}%
\def\isastylescript{\footnotesize\normalfont\ttfamily\slshape}%
\isachardefaults%
}
\isabellestyledefault
\newcommand{\isabellestylett}{%
\def\isastyle{\small\normalfont\ttfamily}%
\def\isastylett{\small\normalfont\ttfamily}%
\def\isastyleminor{\small\normalfont\ttfamily}%
\def\isastyleminortt{\small\normalfont\ttfamily}%
\def\isastylescript{\footnotesize\normalfont\ttfamily}%
\isachardefaults%
}
\newcommand{\isabellestyleit}{%
\def\isastyle{\small\normalfont\itshape}%
\def\isastylett{\small\normalfont\ttfamily}%
\def\isastyleminor{\normalfont\itshape}%
\def\isastyleminortt{\normalfont\ttfamily}%
\def\isastylescript{\footnotesize\normalfont\itshape}%
\isachardefaults%
\def\isacharunderscorekeyword{\mbox{-}}%
\def\isacharbang{\isamath{!}}%
\def\isachardoublequote{}%
\def\isachardoublequoteopen{}%
\def\isachardoublequoteclose{}%
\def\isacharhash{\isamath{\#}}%
\def\isachardollar{\isamath{\$}}%
\def\isacharpercent{\isamath{\%}}%
\def\isacharampersand{\isamath{\&}}%
\def\isacharprime{\isamath{\mskip2mu{'}\mskip-2mu}}%
\def\isacharparenleft{\isamath{(}}%
\def\isacharparenright{\isamath{)}}%
\def\isacharasterisk{\isamath{*}}%
\def\isacharplus{\isamath{+}}%
\def\isacharcomma{\isamath{\mathord,}}%
\def\isacharminus{\isamath{-}}%
\def\isachardot{\isamath{\mathord.}}%
\def\isacharslash{\isamath{/}}%
\def\isacharcolon{\isamath{\mathord:}}%
\def\isacharsemicolon{\isamath{\mathord;}}%
\def\isacharless{\isamath{<}}%
\def\isacharequal{\isamath{=}}%
\def\isachargreater{\isamath{>}}%
\def\isacharat{\isamath{@}}%
\def\isacharbrackleft{\isamath{[}}%
\def\isacharbackslash{\isamath{\backslash}}%
\def\isacharbrackright{\isamath{]}}%
\def\isacharunderscore{\mbox{-}}%
\def\isacharbraceleft{\isamath{\{}}%
\def\isacharbar{\isamath{\mid}}%
\def\isacharbraceright{\isamath{\}}}%
\def\isachartilde{\isamath{{}\sp{\sim}}}%
\def\isacharbackquoteopen{\isatext{\guilsinglleft}}%
\def\isacharbackquoteclose{\isatext{\guilsinglright}}%
}
\newcommand{\isabellestyleliteral}{%
\isabellestyleit%
\def\isacharunderscore{\_}%
\def\isacharunderscorekeyword{\_}%
\chardef\isacharbackquoteopen=`\`%
\chardef\isacharbackquoteclose=`\`%
}
\newcommand{\isabellestyleliteralunderscore}{%
\isabellestyleliteral%
\def\isacharunderscore{\textunderscore}%
\def\isacharunderscorekeyword{\textunderscore}%
}
\newcommand{\isabellestylesl}{%
\isabellestyleit%
\def\isastyle{\small\normalfont\slshape}%
\def\isastylett{\small\normalfont\ttfamily}%
\def\isastyleminor{\normalfont\slshape}%
\def\isastyleminortt{\normalfont\ttfamily}%
\def\isastylescript{\footnotesize\normalfont\slshape}%
}
% cancel text
\usepackage[normalem]{ulem}
\newcommand{\isamarkupcancel}[1]{\isa{\xout{#1}}}
% tags
\newcommand{\isafold}[1]{\emph{$\langle\mathord{\mathit{#1}}\rangle$}}
\IfFileExists{isabelletags.sty}{\usepackage{isabelletags}}{}
\endinput
%:%file=~~/lib/texinputs/isabelle.sty%:%

View File

@ -0,0 +1,506 @@
%%
%% definitions of standard Isabelle symbols
%%
\newcommand{\isasymzero}{\isamath{\mathbf{0}}} %requires amssymb
\newcommand{\isasymone}{\isamath{\mathbf{1}}} %requires amssymb
\newcommand{\isasymtwo}{\isamath{\mathbf{2}}} %requires amssymb
\newcommand{\isasymthree}{\isamath{\mathbf{3}}} %requires amssymb
\newcommand{\isasymfour}{\isamath{\mathbf{4}}} %requires amssymb
\newcommand{\isasymfive}{\isamath{\mathbf{5}}} %requires amssymb
\newcommand{\isasymsix}{\isamath{\mathbf{6}}} %requires amssymb
\newcommand{\isasymseven}{\isamath{\mathbf{7}}} %requires amssymb
\newcommand{\isasymeight}{\isamath{\mathbf{8}}} %requires amssymb
\newcommand{\isasymnine}{\isamath{\mathbf{9}}} %requires amssymb
\newcommand{\isasymA}{\isamath{\mathcal{A}}}
\newcommand{\isasymB}{\isamath{\mathcal{B}}}
\newcommand{\isasymC}{\isamath{\mathcal{C}}}
\newcommand{\isasymD}{\isamath{\mathcal{D}}}
\newcommand{\isasymE}{\isamath{\mathcal{E}}}
\newcommand{\isasymF}{\isamath{\mathcal{F}}}
\newcommand{\isasymG}{\isamath{\mathcal{G}}}
\newcommand{\isasymH}{\isamath{\mathcal{H}}}
\newcommand{\isasymI}{\isamath{\mathcal{I}}}
\newcommand{\isasymJ}{\isamath{\mathcal{J}}}
\newcommand{\isasymK}{\isamath{\mathcal{K}}}
\newcommand{\isasymL}{\isamath{\mathcal{L}}}
\newcommand{\isasymM}{\isamath{\mathcal{M}}}
\newcommand{\isasymN}{\isamath{\mathcal{N}}}
\newcommand{\isasymO}{\isamath{\mathcal{O}}}
\newcommand{\isasymP}{\isamath{\mathcal{P}}}
\newcommand{\isasymQ}{\isamath{\mathcal{Q}}}
\newcommand{\isasymR}{\isamath{\mathcal{R}}}
\newcommand{\isasymS}{\isamath{\mathcal{S}}}
\newcommand{\isasymT}{\isamath{\mathcal{T}}}
\newcommand{\isasymU}{\isamath{\mathcal{U}}}
\newcommand{\isasymV}{\isamath{\mathcal{V}}}
\newcommand{\isasymW}{\isamath{\mathcal{W}}}
\newcommand{\isasymX}{\isamath{\mathcal{X}}}
\newcommand{\isasymY}{\isamath{\mathcal{Y}}}
\newcommand{\isasymZ}{\isamath{\mathcal{Z}}}
\newcommand{\isasyma}{\isamath{\mathrm{a}}}
\newcommand{\isasymb}{\isamath{\mathrm{b}}}
\newcommand{\isasymc}{\isamath{\mathrm{c}}}
\newcommand{\isasymd}{\isamath{\mathrm{d}}}
\newcommand{\isasyme}{\isamath{\mathrm{e}}}
\newcommand{\isasymf}{\isamath{\mathrm{f}}}
\newcommand{\isasymg}{\isamath{\mathrm{g}}}
\newcommand{\isasymh}{\isamath{\mathrm{h}}}
\newcommand{\isasymi}{\isamath{\mathrm{i}}}
\newcommand{\isasymj}{\isamath{\mathrm{j}}}
\newcommand{\isasymk}{\isamath{\mathrm{k}}}
\newcommand{\isasyml}{\isamath{\mathrm{l}}}
\newcommand{\isasymm}{\isamath{\mathrm{m}}}
\newcommand{\isasymn}{\isamath{\mathrm{n}}}
\newcommand{\isasymo}{\isamath{\mathrm{o}}}
\newcommand{\isasymp}{\isamath{\mathrm{p}}}
\newcommand{\isasymq}{\isamath{\mathrm{q}}}
\newcommand{\isasymr}{\isamath{\mathrm{r}}}
\newcommand{\isasyms}{\isamath{\mathrm{s}}}
\newcommand{\isasymt}{\isamath{\mathrm{t}}}
\newcommand{\isasymu}{\isamath{\mathrm{u}}}
\newcommand{\isasymv}{\isamath{\mathrm{v}}}
\newcommand{\isasymw}{\isamath{\mathrm{w}}}
\newcommand{\isasymx}{\isamath{\mathrm{x}}}
\newcommand{\isasymy}{\isamath{\mathrm{y}}}
\newcommand{\isasymz}{\isamath{\mathrm{z}}}
\newcommand{\isasymAA}{\isamath{\mathfrak{A}}} %requires eufrak
\newcommand{\isasymBB}{\isamath{\mathfrak{B}}} %requires eufrak
\newcommand{\isasymCC}{\isamath{\mathfrak{C}}} %requires eufrak
\newcommand{\isasymDD}{\isamath{\mathfrak{D}}} %requires eufrak
\newcommand{\isasymEE}{\isamath{\mathfrak{E}}} %requires eufrak
\newcommand{\isasymFF}{\isamath{\mathfrak{F}}} %requires eufrak
\newcommand{\isasymGG}{\isamath{\mathfrak{G}}} %requires eufrak
\newcommand{\isasymHH}{\isamath{\mathfrak{H}}} %requires eufrak
\newcommand{\isasymII}{\isamath{\mathfrak{I}}} %requires eufrak
\newcommand{\isasymJJ}{\isamath{\mathfrak{J}}} %requires eufrak
\newcommand{\isasymKK}{\isamath{\mathfrak{K}}} %requires eufrak
\newcommand{\isasymLL}{\isamath{\mathfrak{L}}} %requires eufrak
\newcommand{\isasymMM}{\isamath{\mathfrak{M}}} %requires eufrak
\newcommand{\isasymNN}{\isamath{\mathfrak{N}}} %requires eufrak
\newcommand{\isasymOO}{\isamath{\mathfrak{O}}} %requires eufrak
\newcommand{\isasymPP}{\isamath{\mathfrak{P}}} %requires eufrak
\newcommand{\isasymQQ}{\isamath{\mathfrak{Q}}} %requires eufrak
\newcommand{\isasymRR}{\isamath{\mathfrak{R}}} %requires eufrak
\newcommand{\isasymSS}{\isamath{\mathfrak{S}}} %requires eufrak
\newcommand{\isasymTT}{\isamath{\mathfrak{T}}} %requires eufrak
\newcommand{\isasymUU}{\isamath{\mathfrak{U}}} %requires eufrak
\newcommand{\isasymVV}{\isamath{\mathfrak{V}}} %requires eufrak
\newcommand{\isasymWW}{\isamath{\mathfrak{W}}} %requires eufrak
\newcommand{\isasymXX}{\isamath{\mathfrak{X}}} %requires eufrak
\newcommand{\isasymYY}{\isamath{\mathfrak{Y}}} %requires eufrak
\newcommand{\isasymZZ}{\isamath{\mathfrak{Z}}} %requires eufrak
\newcommand{\isasymaa}{\isamath{\mathfrak{a}}} %requires eufrak
\newcommand{\isasymbb}{\isamath{\mathfrak{b}}} %requires eufrak
\newcommand{\isasymcc}{\isamath{\mathfrak{c}}} %requires eufrak
\newcommand{\isasymdd}{\isamath{\mathfrak{d}}} %requires eufrak
\newcommand{\isasymee}{\isamath{\mathfrak{e}}} %requires eufrak
\newcommand{\isasymff}{\isamath{\mathfrak{f}}} %requires eufrak
\newcommand{\isasymgg}{\isamath{\mathfrak{g}}} %requires eufrak
\newcommand{\isasymhh}{\isamath{\mathfrak{h}}} %requires eufrak
\newcommand{\isasymii}{\isamath{\mathfrak{i}}} %requires eufrak
\newcommand{\isasymjj}{\isamath{\mathfrak{j}}} %requires eufrak
\newcommand{\isasymkk}{\isamath{\mathfrak{k}}} %requires eufrak
\newcommand{\isasymll}{\isamath{\mathfrak{l}}} %requires eufrak
\newcommand{\isasymmm}{\isamath{\mathfrak{m}}} %requires eufrak
\newcommand{\isasymnn}{\isamath{\mathfrak{n}}} %requires eufrak
\newcommand{\isasymoo}{\isamath{\mathfrak{o}}} %requires eufrak
\newcommand{\isasympp}{\isamath{\mathfrak{p}}} %requires eufrak
\newcommand{\isasymqq}{\isamath{\mathfrak{q}}} %requires eufrak
\newcommand{\isasymrr}{\isamath{\mathfrak{r}}} %requires eufrak
\newcommand{\isasymss}{\isamath{\mathfrak{s}}} %requires eufrak
\newcommand{\isasymtt}{\isamath{\mathfrak{t}}} %requires eufrak
\newcommand{\isasymuu}{\isamath{\mathfrak{u}}} %requires eufrak
\newcommand{\isasymvv}{\isamath{\mathfrak{v}}} %requires eufrak
\newcommand{\isasymww}{\isamath{\mathfrak{w}}} %requires eufrak
\newcommand{\isasymxx}{\isamath{\mathfrak{x}}} %requires eufrak
\newcommand{\isasymyy}{\isamath{\mathfrak{y}}} %requires eufrak
\newcommand{\isasymzz}{\isamath{\mathfrak{z}}} %requires eufrak
\newcommand{\isasymalpha}{\isamath{\alpha}}
\newcommand{\isasymbeta}{\isamath{\beta}}
\newcommand{\isasymgamma}{\isamath{\gamma}}
\newcommand{\isasymdelta}{\isamath{\delta}}
\newcommand{\isasymepsilon}{\isamath{\varepsilon}}
\newcommand{\isasymzeta}{\isamath{\zeta}}
\newcommand{\isasymeta}{\isamath{\eta}}
\newcommand{\isasymtheta}{\isamath{\vartheta}}
\newcommand{\isasymiota}{\isamath{\iota}}
\newcommand{\isasymkappa}{\isamath{\kappa}}
\newcommand{\isasymlambda}{\isamath{\lambda}}
\newcommand{\isasymmu}{\isamath{\mu}}
\newcommand{\isasymnu}{\isamath{\nu}}
\newcommand{\isasymxi}{\isamath{\xi}}
\newcommand{\isasympi}{\isamath{\pi}}
\newcommand{\isasymrho}{\isamath{\varrho}}
\newcommand{\isasymsigma}{\isamath{\sigma}}
\newcommand{\isasymtau}{\isamath{\tau}}
\newcommand{\isasymupsilon}{\isamath{\upsilon}}
\newcommand{\isasymphi}{\isamath{\varphi}}
\newcommand{\isasymchi}{\isamath{\chi}}
\newcommand{\isasympsi}{\isamath{\psi}}
\newcommand{\isasymomega}{\isamath{\omega}}
\newcommand{\isasymGamma}{\isamath{\Gamma}}
\newcommand{\isasymDelta}{\isamath{\Delta}}
\newcommand{\isasymTheta}{\isamath{\Theta}}
\newcommand{\isasymLambda}{\isamath{\Lambda}}
\newcommand{\isasymXi}{\isamath{\Xi}}
\newcommand{\isasymPi}{\isamath{\Pi}}
\newcommand{\isasymSigma}{\isamath{\Sigma}}
\newcommand{\isasymUpsilon}{\isamath{\Upsilon}}
\newcommand{\isasymPhi}{\isamath{\Phi}}
\newcommand{\isasymPsi}{\isamath{\Psi}}
\newcommand{\isasymOmega}{\isamath{\Omega}}
\newcommand{\isasymbbbA}{\isamath{\bbbA}} %requires font txmia from txfonts
\newcommand{\isasymbool}{\isamath{\bbbB}} %requires font txmia from txfonts
\newcommand{\isasymcomplex}{\isamath{\bbbC}} %requires font txmia from txfonts
\newcommand{\isasymbbbD}{\isamath{\bbbD}} %requires font txmia from txfonts
\newcommand{\isasymbbbE}{\isamath{\bbbE}} %requires font txmia from txfonts
\newcommand{\isasymbbbF}{\isamath{\bbbF}} %requires font txmia from txfonts
\newcommand{\isasymbbbG}{\isamath{\bbbG}} %requires font txmia from txfonts
\newcommand{\isasymbbbH}{\isamath{\bbbH}} %requires font txmia from txfonts
\newcommand{\isasymbbbI}{\isamath{\bbbI}} %requires font txmia from txfonts
\newcommand{\isasymbbbJ}{\isamath{\bbbJ}} %requires font txmia from txfonts
\newcommand{\isasymbbbK}{\isamath{\bbbK}} %requires font txmia from txfonts
\newcommand{\isasymbbbL}{\isamath{\bbbL}} %requires font txmia from txfonts
\newcommand{\isasymbbbM}{\isamath{\bbbM}} %requires font txmia from txfonts
\newcommand{\isasymnat}{\isamath{\bbbN}} %requires font txmia from txfonts
\newcommand{\isasymbbbO}{\isamath{\bbbO}} %requires font txmia from txfonts
\newcommand{\isasymbbbP}{\isamath{\bbbP}} %requires font txmia from txfonts
\newcommand{\isasymrat}{\isamath{\bbbQ}} %requires font txmia from txfonts
\newcommand{\isasymreal}{\isamath{\bbbR}} %requires font txmia from txfonts
\newcommand{\isasymbbbS}{\isamath{\bbbS}} %requires font txmia from txfonts
\newcommand{\isasymbbbT}{\isamath{\bbbT}} %requires font txmia from txfonts
\newcommand{\isasymbbbU}{\isamath{\bbbU}} %requires font txmia from txfonts
\newcommand{\isasymbbbV}{\isamath{\bbbV}} %requires font txmia from txfonts
\newcommand{\isasymbbbW}{\isamath{\bbbW}} %requires font txmia from txfonts
\newcommand{\isasymbbbX}{\isamath{\bbbX}} %requires font txmia from txfonts
\newcommand{\isasymbbbY}{\isamath{\bbbY}} %requires font txmia from txfonts
\newcommand{\isasymint}{\isamath{\bbbZ}} %requires font txmia from txfonts
\newcommand{\isasymleftarrow}{\isamath{\leftarrow}}
\newcommand{\isasymrightarrow}{\isamath{\rightarrow}}
\newcommand{\isasymlongleftarrow}{\isamath{\longleftarrow}}
\newcommand{\isasymlongrightarrow}{\isamath{\longrightarrow}}
\newcommand{\isasymlonglongleftarrow}{\isamath{\xleftarrow{\hphantom{AAA}}}} %requires amsmath
\newcommand{\isasymlonglongrightarrow}{\isamath{\xrightarrow{\hphantom{AAA}}}} %requires amsmath
\newcommand{\isasymlonglonglongleftarrow}{\isamath{\xleftarrow{\hphantom{AAAA}}}} %requires amsmath
\newcommand{\isasymlonglonglongrightarrow}{\isamath{\xrightarrow{\hphantom{AAAA}}}} %requires amsmath
\newcommand{\isasymLeftarrow}{\isamath{\Leftarrow}}
\newcommand{\isasymRightarrow}{\isamath{\Rightarrow}}
\newcommand{\isasymLongleftarrow}{\isamath{\Longleftarrow}}
\newcommand{\isasymLongrightarrow}{\isamath{\Longrightarrow}}
\newcommand{\isasymLleftarrow}{\isamath{\Lleftarrow}} %requires amssymb
\newcommand{\isasymRrightarrow}{\isamath{\Rrightarrow}} %requires amssymb
\newcommand{\isasymleftrightarrow}{\isamath{\leftrightarrow}}
\newcommand{\isasymLeftrightarrow}{\isamath{\Leftrightarrow}}
\newcommand{\isasymlongleftrightarrow}{\isamath{\longleftrightarrow}}
\newcommand{\isasymLongleftrightarrow}{\isamath{\Longleftrightarrow}}
\newcommand{\isasymmapsto}{\isamath{\mapsto}}
\newcommand{\isasymlongmapsto}{\isamath{\longmapsto}}
\newcommand{\isasymmidarrow}{\isamath{\relbar}}
\newcommand{\isasymMidarrow}{\isamath{\Relbar}}
\newcommand{\isasymhookleftarrow}{\isamath{\hookleftarrow}}
\newcommand{\isasymhookrightarrow}{\isamath{\hookrightarrow}}
\newcommand{\isasymleftharpoondown}{\isamath{\leftharpoondown}}
\newcommand{\isasymrightharpoondown}{\isamath{\rightharpoondown}}
\newcommand{\isasymleftharpoonup}{\isamath{\leftharpoonup}}
\newcommand{\isasymrightharpoonup}{\isamath{\rightharpoonup}}
\newcommand{\isasymrightleftharpoons}{\isamath{\rightleftharpoons}}
\newcommand{\isasymleadsto}{\isamath{\leadsto}} %requires amssymb
\newcommand{\isasymdownharpoonleft}{\isamath{\downharpoonleft}} %requires amssymb
\newcommand{\isasymdownharpoonright}{\isamath{\downharpoonright}} %requires amssymb
\newcommand{\isasymupharpoonleft}{\isamath{\upharpoonleft}} %requires amssymb
\newcommand{\isasymupharpoonright}{\isamath{\upharpoonright}} %requires amssymb
\newcommand{\isasymrestriction}{\isamath{\restriction}} %requires amssymb
\newcommand{\isasymColon}{\isamath{\mathrel{::}}}
\newcommand{\isasymup}{\isamath{\uparrow}}
\newcommand{\isasymUp}{\isamath{\Uparrow}}
\newcommand{\isasymdown}{\isamath{\downarrow}}
\newcommand{\isasymDown}{\isamath{\Downarrow}}
\newcommand{\isasymupdown}{\isamath{\updownarrow}}
\newcommand{\isasymUpdown}{\isamath{\Updownarrow}}
\newcommand{\isasymlangle}{\isamath{\langle}}
\newcommand{\isasymrangle}{\isamath{\rangle}}
\newcommand{\isasymllangle}{\isamath{\langle\mskip-5mu\langle}}
\newcommand{\isasymrrangle}{\isamath{\rangle\mskip-5mu\rangle}}
\newcommand{\isasymlceil}{\isamath{\lceil}}
\newcommand{\isasymrceil}{\isamath{\rceil}}
\newcommand{\isasymlfloor}{\isamath{\lfloor}}
\newcommand{\isasymrfloor}{\isamath{\rfloor}}
\newcommand{\isasymlparr}{\isamath{\mathopen{(\mkern-3.3mu\mid}}}
\newcommand{\isasymrparr}{\isamath{\mathclose{\mid\mkern-3.3mu)}}}
\newcommand{\isasymlbrakk}{\isamath{\mathopen{\lbrack\mkern-3mu\lbrack}}}
\newcommand{\isasymrbrakk}{\isamath{\mathclose{\rbrack\mkern-3mu\rbrack}}}
\newcommand{\isasymlbrace}{\isamath{\mathopen{\lbrace\mkern-4.3mu\mid}}}
\newcommand{\isasymrbrace}{\isamath{\mathclose{\mid\mkern-4.3mu\rbrace}}}
\newcommand{\isasymlblot}{\isamath{{\langle}\mkern -3.5mu{|}}}
\newcommand{\isasymrblot}{\isamath{{|}\mkern -3.5mu{\rangle}}}
\newcommand{\isasymguillemotleft}{\isatext{\guillemotleft}}
\newcommand{\isasymguillemotright}{\isatext{\guillemotright}}
\newcommand{\isasymbottom}{\isamath{\bot}}
\newcommand{\isasymtop}{\isamath{\top}}
\newcommand{\isasymand}{\isamath{\wedge}}
\newcommand{\isasymAnd}{\isamath{\bigwedge}}
\newcommand{\isasymor}{\isamath{\vee}}
\newcommand{\isasymOr}{\isamath{\bigvee}}
\newcommand{\isasymforall}{\isamath{\forall\,}}
\newcommand{\isasymexists}{\isamath{\exists\,}}
\newcommand{\isasymnot}{\isamath{\neg}}
\newcommand{\isasymnexists}{\isamath{\nexists\,}} %requires amssymb
\newcommand{\isasymcircle}{\isamath{\ocircle}} %requires wasysym
\newcommand{\isasymbox}{\isamath{\Box}} %requires amssymb
\newcommand{\isasymdiamond}{\isamath{\Diamond}} %requires amssymb
\newcommand{\isasymdiamondop}{\isamath{\diamond}}
\newcommand{\isasymsurd}{\isamath{\surd}}
\newcommand{\isasymturnstile}{\isamath{\vdash}}
\newcommand{\isasymTurnstile}{\isamath{\models}}
\newcommand{\isasymtturnstile}{\isamath{\vdash\!\!\!\vdash}}
\newcommand{\isasymTTurnstile}{\isamath{\mid\!\models}}
\newcommand{\isasymstileturn}{\isamath{\dashv}}
\newcommand{\isasymle}{\isamath{\le}}
\newcommand{\isasymge}{\isamath{\ge}}
\newcommand{\isasymlless}{\isamath{\ll}}
\newcommand{\isasymggreater}{\isamath{\gg}}
\newcommand{\isasymlesssim}{\isamath{\lesssim}} %requires amssymb
\newcommand{\isasymgreatersim}{\isamath{\gtrsim}} %requires amssymb
\newcommand{\isasymlessapprox}{\isamath{\lessapprox}} %requires amssymb
\newcommand{\isasymgreaterapprox}{\isamath{\gtrapprox}} %requires amssymb
\newcommand{\isasymin}{\isamath{\in}}
\newcommand{\isasymnotin}{\isamath{\notin}}
\newcommand{\isasymsubset}{\isamath{\subset}}
\newcommand{\isasymsupset}{\isamath{\supset}}
\newcommand{\isasymsubseteq}{\isamath{\subseteq}}
\newcommand{\isasymsupseteq}{\isamath{\supseteq}}
\newcommand{\isasymsqsubset}{\isamath{\sqsubset}} %requires amssymb
\newcommand{\isasymsqsupset}{\isamath{\sqsupset}} %requires amssymb
\newcommand{\isasymsqsubseteq}{\isamath{\sqsubseteq}}
\newcommand{\isasymsqsupseteq}{\isamath{\sqsupseteq}}
\newcommand{\isasyminter}{\isamath{\cap}}
\newcommand{\isasymInter}{\isamath{\bigcap\,}}
\newcommand{\isasymunion}{\isamath{\cup}}
\newcommand{\isasymUnion}{\isamath{\bigcup\,}}
\newcommand{\isasymsqunion}{\isamath{\sqcup}}
\newcommand{\isasymSqunion}{\isamath{\bigsqcup\,}}
\newcommand{\isasymsqinter}{\isamath{\sqcap}}
\newcommand{\isasymSqinter}{\isamath{\bigsqcap\,}} %requires stmaryrd
\newcommand{\isasymsetminus}{\isamath{\setminus}}
\newcommand{\isasympropto}{\isamath{\propto}}
\newcommand{\isasymuplus}{\isamath{\uplus}}
\newcommand{\isasymUplus}{\isamath{\biguplus\,}}
\newcommand{\isasymnoteq}{\isamath{\not=}}
\newcommand{\isasymsim}{\isamath{\sim}}
\newcommand{\isasymdoteq}{\isamath{\doteq}}
\newcommand{\isasymsimeq}{\isamath{\simeq}}
\newcommand{\isasymapprox}{\isamath{\approx}}
\newcommand{\isasymasymp}{\isamath{\asymp}}
\newcommand{\isasymcong}{\isamath{\cong}}
\newcommand{\isasymsmile}{\isamath{\smile}}
\newcommand{\isasymequiv}{\isamath{\equiv}}
\newcommand{\isasymfrown}{\isamath{\frown}}
\newcommand{\isasymJoin}{\isamath{\Join}} %requires amssymb
\newcommand{\isasymbowtie}{\isamath{\bowtie}}
\newcommand{\isasymprec}{\isamath{\prec}}
\newcommand{\isasymsucc}{\isamath{\succ}}
\newcommand{\isasympreceq}{\isamath{\preceq}}
\newcommand{\isasymsucceq}{\isamath{\succeq}}
\newcommand{\isasymparallel}{\isamath{\parallel}}
\newcommand{\isasymParallel}{\isamath{\bigparallel}} %requires stmaryrd
\newcommand{\isasyminterleace}{\isamath{\interleave}} %requires stmaryrd
\newcommand{\isasymsslash}{\isamath{\sslash}} %requires stmaryrd
\newcommand{\isasymbar}{\isamath{\mid}}
\newcommand{\isasymbbar}{\isamath{[\mskip-1.5mu]}}
\newcommand{\isasymplusminus}{\isamath{\pm}}
\newcommand{\isasymminusplus}{\isamath{\mp}}
\newcommand{\isasymtimes}{\isamath{\times}}
\newcommand{\isasymdiv}{\isamath{\div}}
\newcommand{\isasymcdot}{\isamath{\cdot}}
\newcommand{\isasymsqdot}{\isamath{\sbox\z@{$\centerdot$}\ht\z@=.33333\ht\z@\vcenter{\box\z@}}} %requires amssymb
\newcommand{\isasymstar}{\isamath{\star}}
\newcommand{\isasymbullet}{\boldmath\isamath{\mathchoice{\displaystyle{\cdot}}{\textstyle{\cdot}}{\scriptstyle{\bullet}}{\scriptscriptstyle{\bullet}}}}
\newcommand{\isasymcirc}{\isamath{\circ}}
\newcommand{\isasymdagger}{\isamath{\dagger}}
\newcommand{\isasymddagger}{\isamath{\ddagger}}
\newcommand{\isasymlhd}{\isamath{\lhd}} %requires amssymb
\newcommand{\isasymrhd}{\isamath{\rhd}} %requires amssymb
\newcommand{\isasymunlhd}{\isamath{\unlhd}} %requires amssymb
\newcommand{\isasymunrhd}{\isamath{\unrhd}} %requires amssymb
\newcommand{\isasymtriangleleft}{\isamath{\triangleleft}}
\newcommand{\isasymtriangleright}{\isamath{\triangleright}}
\newcommand{\isasymtriangle}{\isamath{\triangle}}
\newcommand{\isasymtriangleq}{\isamath{\triangleq}} %requires amssymb
\newcommand{\isasymoplus}{\isamath{\oplus}}
\newcommand{\isasymOplus}{\isamath{\bigoplus\,}}
\newcommand{\isasymotimes}{\isamath{\otimes}}
\newcommand{\isasymOtimes}{\isamath{\bigotimes\,}}
\newcommand{\isasymodot}{\isamath{\odot}}
\newcommand{\isasymOdot}{\isamath{\bigodot\,}}
\newcommand{\isasymominus}{\isamath{\ominus}}
\newcommand{\isasymoslash}{\isamath{\oslash}}
\newcommand{\isasymdots}{\isamath{\dots}}
\newcommand{\isasymcdots}{\isamath{\cdots}}
\newcommand{\isasymSum}{\isamath{\sum\,}}
\newcommand{\isasymProd}{\isamath{\prod\,}}
\newcommand{\isasymCoprod}{\isamath{\coprod\,}}
\newcommand{\isasyminfinity}{\isamath{\infty}}
\newcommand{\isasymintegral}{\isamath{\int\,}}
\newcommand{\isasymointegral}{\isamath{\oint\,}}
\newcommand{\isasymclubsuit}{\isamath{\clubsuit}}
\newcommand{\isasymdiamondsuit}{\isamath{\diamondsuit}}
\newcommand{\isasymheartsuit}{\isamath{\heartsuit}}
\newcommand{\isasymspadesuit}{\isamath{\spadesuit}}
\newcommand{\isasymaleph}{\isamath{\aleph}}
\newcommand{\isasymemptyset}{\isamath{\emptyset}}
\newcommand{\isasymnabla}{\isamath{\nabla}}
\newcommand{\isasympartial}{\isamath{\partial}}
\newcommand{\isasymRe}{\isamath{\Re}}
\newcommand{\isasymIm}{\isamath{\Im}}
\newcommand{\isasymflat}{\isamath{\flat}}
\newcommand{\isasymnatural}{\isamath{\natural}}
\newcommand{\isasymsharp}{\isamath{\sharp}}
\newcommand{\isasymangle}{\isamath{\angle}}
\newcommand{\isasymcopyright}{\isatext{\normalfont\rmfamily\copyright}}
\newcommand{\isasymregistered}{\isatext{\normalfont\rmfamily\textregistered}}
\newcommand{\isasyminverse}{\isamath{{}^{-1}}}
\newcommand{\isasymonequarter}{\isatext{\normalfont\rmfamily\textonequarter}} %requires textcomp
\newcommand{\isasymonehalf}{\isatext{\normalfont\rmfamily\textonehalf}} %requires textcomp
\newcommand{\isasymthreequarters}{\isatext{\normalfont\rmfamily\textthreequarters}} %requires textcomp
\newcommand{\isasymordfeminine}{\isatext{\normalfont\rmfamily\textordfeminine}}
\newcommand{\isasymordmasculine}{\isatext{\normalfont\rmfamily\textordmasculine}}
\newcommand{\isasymsection}{\isatext{\normalfont\rmfamily\S}}
\newcommand{\isasymparagraph}{\isatext{\normalfont\rmfamily\P}}
\newcommand{\isasymexclamdown}{\isatext{\normalfont\rmfamily\textexclamdown}}
\newcommand{\isasymquestiondown}{\isatext{\normalfont\rmfamily\textquestiondown}}
\newcommand{\isasymeuro}{\isatext{\euro}} %requires eurosym
\newcommand{\isasympounds}{\isamath{\pounds}}
\newcommand{\isasymyen}{\isatext{\yen}} %requires amssymb
\newcommand{\isasymcent}{\isatext{\textcent}} %requires textcomp
\newcommand{\isasymcurrency}{\isatext{\textcurrency}} %requires textcomp
\newcommand{\isasymdegree}{\isatext{\normalfont\rmfamily\textdegree}} %requires textcomp
\newcommand{\isasymhyphen}{\isatext{\normalfont\rmfamily-}}
\newcommand{\isasymamalg}{\isamath{\amalg}}
\newcommand{\isasymmho}{\isamath{\mho}} %requires amssymb
\newcommand{\isasymlozenge}{\isamath{\lozenge}} %requires amssymb
\newcommand{\isasymwp}{\isamath{\wp}}
\newcommand{\isasymwrong}{\isamath{\wr}}
\newcommand{\isasymacute}{\isatext{\'\relax}}
\newcommand{\isasymindex}{\isatext{\i}}
\newcommand{\isasymdieresis}{\isatext{\"\relax}}
\newcommand{\isasymcedilla}{\isatext{\c\relax}}
\newcommand{\isasymhungarumlaut}{\isatext{\H\relax}}
\newcommand{\isasymsome}{\isamath{\epsilon\,}}
\newcommand{\isasymbind}{\isamath{\mathbin{>\!\!\!>\mkern-6.7mu=}}}
\newcommand{\isasymthen}{\isamath{\mathbin{>\!\!\!>}}}
%Z notation
\newcommand{\isaZhbar}[1]{\rlap{\raise.0001ex\hbox{\isamath{-}}}#1}
\newcommand{\isaZpvbar}[1]{\ooalign{\hfil\isamath{\mapstochar\mkern 5mu}\hfil\cr#1}}
\newcommand{\isaZfvbar}[1]{\ooalign{\hfil\isamath{\mapstochar\mkern 3mu\mapstochar\mkern 5mu}\hfil\cr#1}}
\newcommand{\isaZdarrow}[3]{\ooalign{\isamath{#1}\hfil\cr\isamath{\mkern#3mu\isamath{#2}}}}
\newcommand{\isasymZcomp}{\isamath{\fatsemi}} %requires stmaryrd
\newcommand{\isasymZinj}{\isamath{\rightarrowtail}} %requires amssymb
\newcommand{\isasymZpinj}{\isaZpvbar{\isamath{\rightarrowtail}}} %requires amssymb
\newcommand{\isasymZfinj}{\isaZfvbar{\isasymZinj}} %requires amssymb
\newcommand{\isasymZsurj}{\isaZdarrow{\rightarrow}{\rightarrow}{4}} %requires amssymb
\newcommand{\isasymZpsurj}{\isaZpvbar{\isasymZsurj}} %requires amssymb
\newcommand{\isasymZbij}{\isaZdarrow{\rightarrowtail}{\rightarrow}{5}} %requires amssymb
\newcommand{\isasymZpfun}{\isaZpvbar{\isamath{\rightarrow}}}
\newcommand{\isasymZffun}{\isaZfvbar{\isamath{\rightarrow}}}
\newcommand{\isasymZdres}{\isamath{\lhd}} %requires amssymb
\newcommand{\isasymZndres}{\isaZhbar{\isamath{\lhd}}} %requires amssymb
\newcommand{\isasymZrres}{\isamath{\rhd}} %requires amssymb
\newcommand{\isasymZnrres}{\isaZhbar{\isamath{\rhd}}} %requires amssymb
\newcommand{\isasymZspot}{\isamath{\bullet}}
\newcommand{\isasymZproject}{\isamath{\upharpoonright}} %requires amssymb
\newcommand{\isasymZsemi}{\isatext{\raise 0.66ex\hbox{\oalign{\hfil\isamath{\scriptscriptstyle\mathrm{o}}\hfil\cr\hfil\isamath{\scriptscriptstyle\mathrm{9}}\hfil}}}}
\newcommand{\isasymZtypecolon}{\isatext{\raise 0.6ex\hbox{\oalign{\hfil\isamath{\scriptscriptstyle\mathrm{o}}\hfil\cr\hfil\isamath{\scriptscriptstyle\mathrm{o}}\hfil}}}}
\newcommand{\isasymZhide}{\isamath{\backslash}}
\newcommand{\isasymZcat}{\isatext{\raise 0.8ex\hbox{\isamath{\mathchar\frown}}}}
\newcommand{\isasymZinbag}{\isatext{\ooalign{\isamath{\sqsubset\mkern-1mu}\cr\isamath{-\mkern-1mu}\cr}}}
\newcommand{\isasymhole}{\isatext{\normalfont\rmfamily\wasylozenge}} %requires wasysym
\newcommand{\isasymnewline}{\isatext{\fbox{$\hookleftarrow$}}}
\newcommand{\isasymcomment}{\isatext{\isastylecmt---}}
\newcommand{\isasymproof}{\isamath{\,\langle\mathit{proof}\rangle}}
\newcommand{\isasymopen}{\isatext{\guilsinglleft}}
\newcommand{\isasymclose}{\isatext{\guilsinglright}}
\newcommand{\isasymcheckmark}{\isatext{\ding{51}}} %requires pifont
\newcommand{\isasymcrossmark}{\isatext{\ding{55}}} %requires pifont
\newcommand{\isactrlmarker}{\isatext{\ding{48}}} %requires pifont
\newcommand{\isactrltry}{\isakeywordcontrol{try}}
\newcommand{\isactrlcan}{\isakeywordcontrol{can}}
\newcommand{\isactrlassert}{\isakeywordcontrol{assert}}
\newcommand{\isactrlcancel}{\isakeywordcontrol{cancel}}
\newcommand{\isactrlbinding}{\isakeywordcontrol{binding}}
\newcommand{\isactrlclass}{\isakeywordcontrol{class}}
\newcommand{\isactrlclassUNDERSCOREsyntax}{\isakeywordcontrol{class{\isacharunderscore}syntax}}
\newcommand{\isactrlcommandUNDERSCOREkeyword}{\isakeywordcontrol{command{\isacharunderscore}keyword}}
\newcommand{\isactrlconst}{\isakeywordcontrol{const}}
\newcommand{\isactrlconstUNDERSCOREabbrev}{\isakeywordcontrol{const{\isacharunderscore}abbrev}}
\newcommand{\isactrlconstUNDERSCOREname}{\isakeywordcontrol{const{\isacharunderscore}name}}
\newcommand{\isactrlconstUNDERSCOREsyntax}{\isakeywordcontrol{const{\isacharunderscore}syntax}}
\newcommand{\isactrlcontext}{\isakeywordcontrol{context}}
\newcommand{\isactrlcprop}{\isakeywordcontrol{cprop}}
\newcommand{\isactrlcterm}{\isakeywordcontrol{cterm}}
\newcommand{\isactrlctyp}{\isakeywordcontrol{ctyp}}
\newcommand{\isactrldir}{\isakeywordcontrol{dir}}
\newcommand{\isactrlfile}{\isakeywordcontrol{file}}
\newcommand{\isactrlhere}{\isakeywordcontrol{here}}
\newcommand{\isactrlinstantiate}{\isakeywordcontrol{instantiate}}
\newcommand{\isactrlkeyword}{\isakeywordcontrol{keyword}}
\newcommand{\isactrllatex}{\isakeywordcontrol{latex}}
\newcommand{\isactrllocale}{\isakeywordcontrol{locale}}
\newcommand{\isactrlmakeUNDERSCOREjudgment}{\isakeywordcontrol{make{\isacharunderscore}judgment}}
\newcommand{\isactrldestUNDERSCOREjudgment}{\isakeywordcontrol{dest{\isacharunderscore}judgment}}
\newcommand{\isactrlmakeUNDERSCOREstring}{\isakeywordcontrol{make{\isacharunderscore}string}}
\newcommand{\isactrlmasterUNDERSCOREdir}{\isakeywordcontrol{master{\isacharunderscore}dir}}
\newcommand{\isactrlmethod}{\isakeywordcontrol{method}}
\newcommand{\isactrlnamedUNDERSCOREtheorems}{\isakeywordcontrol{named{\isacharunderscore}theorems}}
\newcommand{\isactrlnonterminal}{\isakeywordcontrol{nonterminal}}
\newcommand{\isactrloracleUNDERSCOREname}{\isakeywordcontrol{oracle{\isacharunderscore}name}}
\newcommand{\isactrlpath}{\isakeywordcontrol{path}}
\newcommand{\isactrlpathUNDERSCOREbinding}{\isakeywordcontrol{path{\isacharunderscore}binding}}
\newcommand{\isactrlplugin}{\isakeywordcontrol{plugin}}
\newcommand{\isactrlprint}{\isakeywordcontrol{print}}
\newcommand{\isactrlprop}{\isakeywordcontrol{prop}}
\newcommand{\isactrlscala}{\isakeywordcontrol{scala}}
\newcommand{\isactrlscalaUNDERSCOREfunction}{\isakeywordcontrol{scala{\isacharunderscore}function}}
\newcommand{\isactrlscalaUNDERSCOREmethod}{\isakeywordcontrol{scala{\isacharunderscore}method}}
\newcommand{\isactrlscalaUNDERSCOREobject}{\isakeywordcontrol{scala{\isacharunderscore}object}}
\newcommand{\isactrlscalaUNDERSCOREtype}{\isakeywordcontrol{scala{\isacharunderscore}type}}
\newcommand{\isactrlsimproc}{\isakeywordcontrol{simproc}}
\newcommand{\isactrlsimprocUNDERSCOREsetup}{\isakeywordcontrol{simproc{\isacharunderscore}setup}}
\newcommand{\isactrlsort}{\isakeywordcontrol{sort}}
\newcommand{\isactrlsyntaxUNDERSCOREconst}{\isakeywordcontrol{syntax{\isacharunderscore}const}}
\newcommand{\isactrlsystemUNDERSCOREoption}{\isakeywordcontrol{system{\isacharunderscore}option}}
\newcommand{\isactrlterm}{\isakeywordcontrol{term}}
\newcommand{\isactrltheory}{\isakeywordcontrol{theory}}
\newcommand{\isactrltheoryUNDERSCOREcontext}{\isakeywordcontrol{theory{\isacharunderscore}context}}
\newcommand{\isactrltyp}{\isakeywordcontrol{typ}}
\newcommand{\isactrltypeUNDERSCOREabbrev}{\isakeywordcontrol{type{\isacharunderscore}abbrev}}
\newcommand{\isactrltypeUNDERSCOREname}{\isakeywordcontrol{type{\isacharunderscore}name}}
\newcommand{\isactrltypeUNDERSCOREsyntax}{\isakeywordcontrol{type{\isacharunderscore}syntax}}
\newcommand{\isactrlundefined}{\isakeywordcontrol{undefined}}
\newcommand{\isactrltvar}{\isakeywordcontrol{tvar}}
\newcommand{\isactrlvar}{\isakeywordcontrol{var}}
\newcommand{\isactrlverbatim}{\isakeywordcontrol{verbatim}}
\newcommand{\isactrlConst}{\isakeywordcontrol{Const}}
\newcommand{\isactrlConstUNDERSCORE}{\isakeywordcontrol{Const{\isacharunderscore}}}
\newcommand{\isactrlConstUNDERSCOREfn}{\isakeywordcontrol{Const{\isacharunderscore}fn}}
\newcommand{\isactrlType}{\isakeywordcontrol{Type}}
\newcommand{\isactrlTypeUNDERSCOREfn}{\isakeywordcontrol{Type{\isacharunderscore}fn}}
\newcommand{\isactrlcode}{\isakeywordcontrol{code}}
\newcommand{\isactrlcomputation}{\isakeywordcontrol{computation}}
\newcommand{\isactrlcomputationUNDERSCOREconv}{\isakeywordcontrol{computation{\isacharunderscore}conv}}
\newcommand{\isactrlcomputationUNDERSCOREcheck}{\isakeywordcontrol{computation{\isacharunderscore}check}}
\newcommand{\isactrlifUNDERSCORElinux}{\isakeywordcontrol{if{\isacharunderscore}linux}}
\newcommand{\isactrlifUNDERSCOREmacos}{\isakeywordcontrol{if{\isacharunderscore}macos}}
\newcommand{\isactrlifUNDERSCOREwindows}{\isakeywordcontrol{if{\isacharunderscore}windows}}
\newcommand{\isactrlifUNDERSCOREunix}{\isakeywordcontrol{if{\isacharunderscore}unix}}
\newcommand{\isactrlifUNDERSCOREnone}{\isakeywordcontrol{if{\isacharunderscore}none}}
\newcommand{\isactrlcite}{\isakeywordcontrol{cite}}
\newcommand{\isactrlnocite}{\isakeywordcontrol{nocite}}
\newcommand{\isactrlcitet}{\isakeywordcontrol{citet}}
\newcommand{\isactrlcitep}{\isakeywordcontrol{citep}}
\endinput
%:%file=~~/lib/texinputs/isabellesym.sty%:%

View File

@ -0,0 +1,20 @@
%plain TeX version of comment package -- much faster!
\let\isafmtname\fmtname\def\fmtname{plain}
\usepackage{comment}
\let\fmtname\isafmtname
\newcommand{\isakeeptag}[1]%
{\includecomment{isadelim#1}\includecomment{isatag#1}\csarg\def{isafold#1}{}}
\newcommand{\isadroptag}[1]%
{\excludecomment{isadelim#1}\excludecomment{isatag#1}\csarg\def{isafold#1}{}}
\newcommand{\isafoldtag}[1]%
{\includecomment{isadelim#1}\excludecomment{isatag#1}\csarg\def{isafold#1}{\isafold{#1}}}
\isakeeptag{ML}
\isakeeptag{document}
\isakeeptag{important}
\isadroptag{invisible}
\isakeeptag{proof}
\isakeeptag{theory}
\isakeeptag{unimportant}
\isakeeptag{visible}

View File

@ -0,0 +1,9 @@
%%
%% default hyperref setup (both for pdf and dvi output)
%%
\usepackage{color}
\definecolor{linkcolor}{rgb}{0,0,0.5}
\usepackage[colorlinks=true,linkcolor=linkcolor,citecolor=linkcolor,filecolor=linkcolor,urlcolor=linkcolor,pdfpagelabels]{hyperref}
\endinput
%:%file=~~/lib/texinputs/pdfsetup.sty%:%

File diff suppressed because it is too large Load Diff

62
output/document/root.tex Normal file
View File

@ -0,0 +1,62 @@
\documentclass[11pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage{isabelle,isabellesym}
% further packages required for unusual symbols (see also
% isabellesym.sty), use only when needed
%\usepackage{amssymb}
%for \<leadsto>, \<box>, \<diamond>, \<sqsupset>, \<mho>, \<Join>,
%\<lhd>, \<lesssim>, \<greatersim>, \<lessapprox>, \<greaterapprox>,
%\<triangleq>, \<yen>, \<lozenge>
%\usepackage{eurosym}
%for \<euro>
%\usepackage[only,bigsqcap,bigparallel,fatsemi,interleave,sslash]{stmaryrd}
%for \<Sqinter>, \<Parallel>, \<Zsemi>, \<Parallel>, \<sslash>
%\usepackage{eufrak}
%for \<AA> ... \<ZZ>, \<aa> ... \<zz> (also included in amssymb)
%\usepackage{textcomp}
%for \<onequarter>, \<onehalf>, \<threequarters>, \<degree>, \<cent>,
%\<currency>
% this should be the last package used
\usepackage{pdfsetup}
% urls in roman style, theory text in math-similar italics
\urlstyle{rm}
\isabellestyle{it}
% for uniform font size
%\renewcommand{\isastyle}{\isastyleminor}
\begin{document}
\title{Idempotent-Scenes}
\author{user}
\maketitle
\tableofcontents
% sane default for proof documents
\parindent 0pt\parskip 0.5ex
% generated text of all theories
\input{session}
% optional bibliography
%\bibliographystyle{abbrv}
%\bibliography{root}
\end{document}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End:
\endinput
%:%file=~/work/Idempotent_Scenes/document/root.tex%:%

View File

Binary file not shown.