removed obsolete exercise collection (is now in coursematerial)
authorkleing
Sat, 30 Apr 2005 00:53:56 +0200
changeset 15891 260090b54ef9
parent 15890 ff6787d730d5
child 15892 153541e29155
removed obsolete exercise collection (is now in coursematerial)
doc-src/Exercises/0304/IsaMakefile
doc-src/Exercises/0304/Makefile
doc-src/Exercises/0304/a1/ROOT.ML
doc-src/Exercises/0304/a1/a1.thy
doc-src/Exercises/0304/a1/generated/a1.tex
doc-src/Exercises/0304/a1/generated/session.tex
doc-src/Exercises/0304/a2/ROOT.ML
doc-src/Exercises/0304/a2/a2.thy
doc-src/Exercises/0304/a2/generated/a2.tex
doc-src/Exercises/0304/a2/generated/session.tex
doc-src/Exercises/0304/a3/ROOT.ML
doc-src/Exercises/0304/a3/a3.thy
doc-src/Exercises/0304/a3/generated/a3.tex
doc-src/Exercises/0304/a3/generated/session.tex
doc-src/Exercises/0304/a4/ROOT.ML
doc-src/Exercises/0304/a4/a4.thy
doc-src/Exercises/0304/a4/generated/a4.tex
doc-src/Exercises/0304/a4/generated/session.tex
doc-src/Exercises/0304/a5/ROOT.ML
doc-src/Exercises/0304/a5/a5.thy
doc-src/Exercises/0304/a5/generated/a5.tex
doc-src/Exercises/0304/a5/generated/session.tex
doc-src/Exercises/2000/IsaMakefile
doc-src/Exercises/2000/Makefile
doc-src/Exercises/2000/a1/Arithmetic.thy
doc-src/Exercises/2000/a1/Hanoi.thy
doc-src/Exercises/2000/a1/ROOT.ML
doc-src/Exercises/2000/a1/Snoc.thy
doc-src/Exercises/2000/a1/generated/Arithmetic.tex
doc-src/Exercises/2000/a1/generated/Hanoi.tex
doc-src/Exercises/2000/a1/generated/Snoc.tex
doc-src/Exercises/2000/a1/generated/session.tex
doc-src/Exercises/2001/IsaMakefile
doc-src/Exercises/2001/Makefile
doc-src/Exercises/2001/a1/Aufgabe1.thy
doc-src/Exercises/2001/a1/ROOT.ML
doc-src/Exercises/2001/a1/generated/Aufgabe1.tex
doc-src/Exercises/2001/a1/generated/session.tex
doc-src/Exercises/2001/a2/Aufgabe2.thy
doc-src/Exercises/2001/a2/ROOT.ML
doc-src/Exercises/2001/a2/generated/Aufgabe2.tex
doc-src/Exercises/2001/a2/generated/session.tex
doc-src/Exercises/2001/a3/ROOT.ML
doc-src/Exercises/2001/a3/Trie1.thy
doc-src/Exercises/2001/a3/Trie2.thy
doc-src/Exercises/2001/a3/Trie3.thy
doc-src/Exercises/2001/a3/generated/Trie1.tex
doc-src/Exercises/2001/a3/generated/Trie2.tex
doc-src/Exercises/2001/a3/generated/Trie3.tex
doc-src/Exercises/2001/a3/generated/session.tex
doc-src/Exercises/2001/a5/Aufgabe5.thy
doc-src/Exercises/2001/a5/ROOT.ML
doc-src/Exercises/2001/a5/generated/Aufgabe5.tex
doc-src/Exercises/2001/a5/generated/session.tex
doc-src/Exercises/2002/IsaMakefile
doc-src/Exercises/2002/Makefile
doc-src/Exercises/2002/a1/ROOT.ML
doc-src/Exercises/2002/a1/a1.thy
doc-src/Exercises/2002/a1/generated/a1.tex
doc-src/Exercises/2002/a1/generated/session.tex
doc-src/Exercises/2002/a2/ROOT.ML
doc-src/Exercises/2002/a2/a2.thy
doc-src/Exercises/2002/a2/generated/a2.tex
doc-src/Exercises/2002/a2/generated/session.tex
doc-src/Exercises/2002/a3/ROOT.ML
doc-src/Exercises/2002/a3/a3.thy
doc-src/Exercises/2002/a3/generated/a3.tex
doc-src/Exercises/2002/a3/generated/session.tex
doc-src/Exercises/2002/a5/ROOT.ML
doc-src/Exercises/2002/a5/a5.thy
doc-src/Exercises/2002/a5/generated/a5.tex
doc-src/Exercises/2002/a5/generated/session.tex
doc-src/Exercises/2002/a5/l2.thy
doc-src/Exercises/2002/a6/ROOT.ML
doc-src/Exercises/2002/a6/a6.thy
doc-src/Exercises/2002/a6/generated/a6.tex
doc-src/Exercises/2002/a6/generated/session.tex
doc-src/Exercises/2003/IsaMakefile
doc-src/Exercises/2003/Makefile
doc-src/Exercises/2003/a1/ROOT.ML
doc-src/Exercises/2003/a1/a1.thy
doc-src/Exercises/2003/a1/generated/a1.tex
doc-src/Exercises/2003/a1/generated/session.tex
doc-src/Exercises/2003/a2/ROOT.ML
doc-src/Exercises/2003/a2/a2.thy
doc-src/Exercises/2003/a2/generated/a2.tex
doc-src/Exercises/2003/a2/generated/session.tex
doc-src/Exercises/2003/a3/ROOT.ML
doc-src/Exercises/2003/a3/a3.thy
doc-src/Exercises/2003/a3/generated/a3.tex
doc-src/Exercises/2003/a3/generated/session.tex
doc-src/Exercises/2003/a5/ROOT.ML
doc-src/Exercises/2003/a5/a5.thy
doc-src/Exercises/2003/a5/generated/a5.tex
doc-src/Exercises/2003/a5/generated/session.tex
doc-src/Exercises/2003/a6/ROOT.ML
doc-src/Exercises/2003/a6/a6.thy
doc-src/Exercises/2003/a6/generated/a6.tex
doc-src/Exercises/2003/a6/generated/session.tex
doc-src/Exercises/Hanoi.eps
doc-src/Exercises/Hanoi.pdf
doc-src/Exercises/Makefile
doc-src/Exercises/exercises.bib
doc-src/Exercises/exercises.tex
doc-src/Exercises/isabelle.sty
doc-src/Exercises/isabellesym.sty
doc-src/Exercises/style.tex
--- a/doc-src/Exercises/0304/IsaMakefile	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-#
-# $Id$
-#
-# IsaMakefile for PSV 2003 / 2004
-#
-
-SESSIONS = a1 a2 a3 a4 a5
-
-## targets
-
-default: clean sessions
-sessions: $(SESSIONS)
-# all: sessions 
-
-
-## global settings
-
-
-SRC = $(ISABELLE_HOME)/src
-OUT = $(ISABELLE_OUTPUT)
-LOG = $(OUT)/log
-INFO = $(ISABELLE_BROWSER_INFO)
-USEDIR = $(ISATOOL) usedir -v true -i false -d false -D generated
-RSYNC = rsync --rsh ssh --rsync-path /usr/local/dist/bin/rsync
-WWW = www4.in.tum.de:/home/html/wbroy/html-data/lehre/praktika/psv
-
-
-# reomve old log files
-clean:
-	rm -f $(LOG)/HOL-a?.gz $(LOG)/HOL-l?.gz
-
-## provide style.tex
-
-style:
-	@for D in $(SESSIONS); do test -d $$D/document && { test -r $$D/document/style.tex || ln -s ../../style.tex $$D/document/style.tex; } done;
-
-
-## a1
-
-a1: a1/generated/session.tex
-
-a1/generated/session.tex: a1/ROOT.ML \
-  a1/*.thy
-	@$(USEDIR) HOL a1
-
-## a2
-
-a2: a2/generated/session.tex
-
-a2/generated/session.tex: a2/ROOT.ML \
-  a2/*.thy
-	@$(USEDIR) HOL a2
-
-## a3
-
-a3: a3/generated/session.tex
-
-a3/generated/session.tex: a3/ROOT.ML \
-  a3/*.thy
-	@$(USEDIR) HOL a3
-
-## a4
-
-a4: a4/generated/session.tex
-
-a4/generated/session.tex: a4/ROOT.ML \
-  a4/*.thy
-	@$(USEDIR) HOL a4
-
-## a5
-
-a5: a5/generated/session.tex
-
-a5/generated/session.tex: a5/ROOT.ML \
-  a5/*.thy
-	@$(USEDIR) HOL a5
-
--- a/doc-src/Exercises/0304/Makefile	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-#
-# $Id$
-#
-# IsaMakefile for PSV WS 2003/2004
-#
-
-SESSIONS = a1 a2 a3 a4 a5
-
-## targets
-
-default: sessions
-sessions: $(SESSIONS)
-
-
-## a1
-
-a1: a1/generated/session.tex
-
-a1/generated/session.tex: a1/ROOT.ML a1/*.thy
-	isatool make
-
-## a2
-
-a2: a2/generated/session.tex
-
-a2/generated/session.tex: a2/ROOT.ML a2/*.thy
-	isatool make
-
-## a3
-
-a3: a3/generated/session.tex
-
-a3/generated/session.tex: a3/ROOT.ML a3/*.thy
-	isatool make
-
-## a4
-
-a4: a4/generated/session.tex
-
-a4/generated/session.tex: a4/ROOT.ML a4/*.thy
-	isatool make
-
-## a5
-
-a5: a5/generated/session.tex
-
-a5/generated/session.tex: a5/ROOT.ML a5/*.thy
-	isatool make
-
--- a/doc-src/Exercises/0304/a1/ROOT.ML	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-  use_thy "a1";
--- a/doc-src/Exercises/0304/a1/a1.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,93 +0,0 @@
-
-(*<*) theory a1 = Main: (*>*)
-
-subsection {* List functions *}
-
-text{* Define a function @{text sum}, which computes the sum of
-elements of a list of natural numbers. *}
-
-(*<*) consts (*>*)
-  sum :: "nat list \<Rightarrow> nat"
-
-text{* Then, define a function @{text flatten} which flattens a list
-of lists by appending the member lists. *}
-
-(*<*) consts (*>*)
-  flatten :: "'a list list \<Rightarrow> 'a list"
-
-text{* Test your function by applying them to the following example lists: *}
-
-
-lemma "sum [2::nat, 4, 8] = x"
-(*<*) oops (*>*)
-
-lemma "flatten [[2::nat, 3], [4, 5], [7, 9]] = x"
-(*<*) oops (*>*)
-
-
-text{* Prove the following statements, or give a counterexample: *}
-
-
-lemma "length (flatten xs) = sum (map length xs)"
-(*<*) oops (*>*)
-
-lemma sum_append: "sum (xs @ ys) = sum xs + sum ys"
-(*<*) oops (*>*)
-
-lemma flatten_append: "flatten (xs @ ys) = flatten xs @ flatten ys"
-(*<*) oops (*>*)
-
-lemma "flatten (map rev (rev xs)) = rev (flatten xs)"
-(*<*) oops (*>*)
-
-lemma "flatten (rev (map rev xs)) = rev (flatten xs)"
-(*<*) oops (*>*)
-
-lemma "list_all (list_all P) xs = list_all P (flatten xs)"
-(*<*) oops (*>*)
-
-lemma "flatten (rev xs) = flatten xs"
-(*<*) oops (*>*)
-
-lemma "sum (rev xs) = sum xs"
-(*<*) oops (*>*)
-
-
-text{* Find a predicate @{text P} which satisfies *}
-
-lemma "list_all P xs \<longrightarrow> length xs \<le> sum xs"
-(*<*) oops (*>*)
-
-text{* Define, by means of primitive recursion, a function @{text
-exists} which checks whether an element satisfying a given property is
-contained in the list: *}
-
-
-(*<*) consts (*>*)
-  list_exists :: "('a \<Rightarrow> bool) \<Rightarrow> ('a list \<Rightarrow> bool)"
-
-text{* Test your function on the following examples: *}
-
-
-lemma "list_exists (\<lambda> n. n < 3) [4::nat, 3, 7] = b"
-(*<*) oops (*>*)
-
-lemma "list_exists (\<lambda> n. n < 4) [4::nat, 3, 7] = b"
-(*<*) oops (*>*)
-
-text{* Prove the following statements: *}
-
-lemma list_exists_append: 
-  "list_exists P (xs @ ys) = (list_exists P xs \<or> list_exists P ys)"
-(*<*) oops (*>*)
-
-lemma "list_exists (list_exists P) xs = list_exists P (flatten xs)"
-(*<*) oops (*>*)
-
-text{* You could have defined @{text list_exists} only with the aid of
-@{text list_all}. Do this now, i.e. define a function @{text
-list_exists2} and show that it is equivalent to @{text list_exists}. *}
-
-
-(*<*) end (*>*)
-
--- a/doc-src/Exercises/0304/a1/generated/a1.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,108 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{a{\isadigit{1}}}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{List functions%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Define a function \isa{sum}, which computes the sum of
-elements of a list of natural numbers.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\ \ sum\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ list\ {\isasymRightarrow}\ nat{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Then, define a function \isa{flatten} which flattens a list
-of lists by appending the member lists.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\ \ flatten\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ list\ list\ {\isasymRightarrow}\ {\isacharprime}a\ list{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Test your function by applying them to the following example lists:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isachardoublequote}sum\ {\isacharbrackleft}{\isadigit{2}}{\isacharcolon}{\isacharcolon}nat{\isacharcomma}\ {\isadigit{4}}{\isacharcomma}\ {\isadigit{8}}{\isacharbrackright}\ {\isacharequal}\ x{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}flatten\ {\isacharbrackleft}{\isacharbrackleft}{\isadigit{2}}{\isacharcolon}{\isacharcolon}nat{\isacharcomma}\ {\isadigit{3}}{\isacharbrackright}{\isacharcomma}\ {\isacharbrackleft}{\isadigit{4}}{\isacharcomma}\ {\isadigit{5}}{\isacharbrackright}{\isacharcomma}\ {\isacharbrackleft}{\isadigit{7}}{\isacharcomma}\ {\isadigit{9}}{\isacharbrackright}{\isacharbrackright}\ {\isacharequal}\ x{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Prove the following statements, or give a counterexample:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isachardoublequote}length\ {\isacharparenleft}flatten\ xs{\isacharparenright}\ {\isacharequal}\ sum\ {\isacharparenleft}map\ length\ xs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ sum{\isacharunderscore}append{\isacharcolon}\ {\isachardoublequote}sum\ {\isacharparenleft}xs\ {\isacharat}\ ys{\isacharparenright}\ {\isacharequal}\ sum\ xs\ {\isacharplus}\ sum\ ys{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ flatten{\isacharunderscore}append{\isacharcolon}\ {\isachardoublequote}flatten\ {\isacharparenleft}xs\ {\isacharat}\ ys{\isacharparenright}\ {\isacharequal}\ flatten\ xs\ {\isacharat}\ flatten\ ys{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}flatten\ {\isacharparenleft}map\ rev\ {\isacharparenleft}rev\ xs{\isacharparenright}{\isacharparenright}\ {\isacharequal}\ rev\ {\isacharparenleft}flatten\ xs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}flatten\ {\isacharparenleft}rev\ {\isacharparenleft}map\ rev\ xs{\isacharparenright}{\isacharparenright}\ {\isacharequal}\ rev\ {\isacharparenleft}flatten\ xs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}list{\isacharunderscore}all\ {\isacharparenleft}list{\isacharunderscore}all\ P{\isacharparenright}\ xs\ {\isacharequal}\ list{\isacharunderscore}all\ P\ {\isacharparenleft}flatten\ xs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}flatten\ {\isacharparenleft}rev\ xs{\isacharparenright}\ {\isacharequal}\ flatten\ xs{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}sum\ {\isacharparenleft}rev\ xs{\isacharparenright}\ {\isacharequal}\ sum\ xs{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Find a predicate \isa{P} which satisfies%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isachardoublequote}list{\isacharunderscore}all\ P\ xs\ {\isasymlongrightarrow}\ length\ xs\ {\isasymle}\ sum\ xs{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Define, by means of primitive recursion, a function \isa{exists} which checks whether an element satisfying a given property is
-contained in the list:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\ \ list{\isacharunderscore}exists\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}{\isacharprime}a\ {\isasymRightarrow}\ bool{\isacharparenright}\ {\isasymRightarrow}\ {\isacharparenleft}{\isacharprime}a\ list\ {\isasymRightarrow}\ bool{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Test your function on the following examples:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isachardoublequote}list{\isacharunderscore}exists\ {\isacharparenleft}{\isasymlambda}\ n{\isachardot}\ n\ {\isacharless}\ {\isadigit{3}}{\isacharparenright}\ {\isacharbrackleft}{\isadigit{4}}{\isacharcolon}{\isacharcolon}nat{\isacharcomma}\ {\isadigit{3}}{\isacharcomma}\ {\isadigit{7}}{\isacharbrackright}\ {\isacharequal}\ b{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}list{\isacharunderscore}exists\ {\isacharparenleft}{\isasymlambda}\ n{\isachardot}\ n\ {\isacharless}\ {\isadigit{4}}{\isacharparenright}\ {\isacharbrackleft}{\isadigit{4}}{\isacharcolon}{\isacharcolon}nat{\isacharcomma}\ {\isadigit{3}}{\isacharcomma}\ {\isadigit{7}}{\isacharbrackright}\ {\isacharequal}\ b{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Prove the following statements:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ list{\isacharunderscore}exists{\isacharunderscore}append{\isacharcolon}\ \isanewline
-\ \ {\isachardoublequote}list{\isacharunderscore}exists\ P\ {\isacharparenleft}xs\ {\isacharat}\ ys{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}list{\isacharunderscore}exists\ P\ xs\ {\isasymor}\ list{\isacharunderscore}exists\ P\ ys{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}list{\isacharunderscore}exists\ {\isacharparenleft}list{\isacharunderscore}exists\ P{\isacharparenright}\ xs\ {\isacharequal}\ list{\isacharunderscore}exists\ P\ {\isacharparenleft}flatten\ xs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-You could have defined \isa{list{\isacharunderscore}exists} only with the aid of
-\isa{list{\isacharunderscore}all}. Do this now, i.e. define a function \isa{list{\isacharunderscore}exists{\isadigit{2}}} and show that it is equivalent to \isa{list{\isacharunderscore}exists}.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isanewline
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/0304/a1/generated/session.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-\input{a1.tex}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/0304/a2/ROOT.ML	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-  use_thy "a2";
--- a/doc-src/Exercises/0304/a2/a2.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,129 +0,0 @@
-
-(*<*) theory a2 = Main: (*>*)
-
-subsection {* Folding Lists and Trees *}
-
-subsubsection {* Some more list functions *}
-
-text{* Recall the summation function *}
-
-(*<*) consts (*>*)
-  sum :: "nat list \<Rightarrow> nat"
-primrec
-  "sum [] = 0"
-  "sum (x # xs) = x + sum xs"
-
-
-text{* In the Isabelle library, you will find in theory
-\texttt{List.thy} the functions @{text foldr} and @{text foldl}, which
-allow you to define some list functions, among them @{text sum} and
-@{text length}. Show the following: *}
-
-
-lemma sum_foldr: "sum xs = foldr (op +) xs 0"
-(*<*) oops (*>*)
-
-lemma length_foldr: "length xs = foldr (\<lambda> x res. 1 + res) xs 0"
-(*<*) oops (*>*)
-
-text {* Repeated application of @{text foldr} and @{text map} has the
-disadvantage that a list is traversed several times. A single traversal is sufficient, as
-illustrated by the following example: *}
-
-lemma "sum (map (\<lambda> x. x + 3) xs) = foldr h xs b"
-(*<*) oops (*>*)
-
-text {* Find terms @{text h} and @{text b} which solve this
-equation. Generalize this result, i.e. show for appropriate @{text h}
-and @{text b}: *}
-
-
-lemma "foldr g (map f xs) a = foldr h xs b"
-(*<*) oops (*>*)
-
-text {* Hint: Isabelle can help you find the solution if you use the
-equalities arising during a proof attempt. *}
-
-text {* The following function @{text rev_acc} reverses a list in linear time: *}
-
-
-consts
-  rev_acc :: "['a list, 'a list] \<Rightarrow> 'a list"
-primrec
-  "rev_acc [] ys = ys"
-  "rev_acc (x#xs) ys = (rev_acc xs (x#ys))"
-
-text{* Show that @{text rev_acc} can be defined by means of @{text foldl}. *}
-
-lemma rev_acc_foldl: "rev_acc xs a = foldl (\<lambda> ys x. x # ys) a xs"
-(*<*) oops (*>*)
-
-text {* On the first exercise sheet, we have shown: *}
-
-lemma sum_append [simp]: "sum (xs @ ys) = sum xs + sum ys"
-  by (induct xs) auto
-
-text {* Prove a similar distributivity property for @{text foldr},
-i.e. something like @{text "foldr f (xs @ ys) a = f (foldr f xs a)
-(foldr f ys a)"}. However, you will have to strengthen the premisses
-by taking into account algebraic properties of @{text f} and @{text
-a}. *}
-
-
-lemma foldr_append: "foldr f (xs @ ys) a = f (foldr f xs a) (foldr f ys a)"
-(*<*) oops (*>*)
-
-text {* Now, define the function @{text prod}, which computes the product of all list elements: *}
-(*<*) consts (*>*)
-  prod :: "nat list \<Rightarrow> nat"
-
-text {* direcly with the aid of  a fold and prove the following: *}
-lemma "prod (xs @ ys) = prod xs * prod ys"
-(*<*) oops (*>*)
-
-
-subsubsection {* Functions on Trees *}
-
-text {* Consider the following type of binary trees: *}
-datatype 'a tree = Tip | Node "'a tree" 'a "'a tree"
-
-text {* Define functions which convert a tree into a list by traversing it in pre- resp. postorder: *}
-(*<*) consts (*>*)
-  preorder :: "'a tree \<Rightarrow> 'a list"
-  postorder :: "'a tree \<Rightarrow> 'a list"
-
-text {* You have certainly realized that computation of postorder traversal can be efficiently realized with an accumulator, in analogy to  @{text rev_acc}: *} 
-
-consts
-  postorder_acc :: "['a tree, 'a list] \<Rightarrow> 'a list"
-
-text {* Define this function and show: *}
-lemma "postorder_acc t xs = (postorder t) @ xs"
-(*<*) oops (*>*)
-
-
-text {* @{text postorder_acc} is the instance of a function
-@{text foldl_tree}, which is similar to @{text foldl}. *}
-
-consts
-  foldl_tree :: "('b => 'a => 'b) \<Rightarrow> 'b \<Rightarrow> 'a tree \<Rightarrow> 'b"
-
-text {* Show the following: *}
-
-lemma "\<forall> a. postorder_acc t a = foldl_tree (\<lambda> xs x. Cons x xs) a t"
-(*<*) oops (*>*)
-
-text {* Define a function @{text tree_sum} that computes the sum of
-the elements of a tree of natural numbers: *}
-
-consts
-  tree_sum :: "nat tree \<Rightarrow> nat"
-
-text {* and show that this function satisfies *}
-
-lemma "tree_sum t = sum (preorder t)"
-(*<*) oops (*>*)
-
-
-(*<*) end (*>*)
-
--- a/doc-src/Exercises/0304/a2/generated/a2.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,176 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{a{\isadigit{2}}}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{Folding Lists and Trees%
-}
-\isamarkuptrue%
-%
-\isamarkupsubsubsection{Some more list functions%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Recall the summation function%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\ \ sum\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ list\ {\isasymRightarrow}\ nat{\isachardoublequote}\isanewline
-\isamarkupfalse%
-\isacommand{primrec}\isanewline
-\ \ {\isachardoublequote}sum\ {\isacharbrackleft}{\isacharbrackright}\ {\isacharequal}\ {\isadigit{0}}{\isachardoublequote}\isanewline
-\ \ {\isachardoublequote}sum\ {\isacharparenleft}x\ {\isacharhash}\ xs{\isacharparenright}\ {\isacharequal}\ x\ {\isacharplus}\ sum\ xs{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-In the Isabelle library, you will find in theory
-\texttt{List.thy} the functions \isa{foldr} and \isa{foldl}, which
-allow you to define some list functions, among them \isa{sum} and
-\isa{length}. Show the following:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ sum{\isacharunderscore}foldr{\isacharcolon}\ {\isachardoublequote}sum\ xs\ {\isacharequal}\ foldr\ {\isacharparenleft}op\ {\isacharplus}{\isacharparenright}\ xs\ {\isadigit{0}}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ length{\isacharunderscore}foldr{\isacharcolon}\ {\isachardoublequote}length\ xs\ {\isacharequal}\ foldr\ {\isacharparenleft}{\isasymlambda}\ x\ res{\isachardot}\ {\isadigit{1}}\ {\isacharplus}\ res{\isacharparenright}\ xs\ {\isadigit{0}}{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Repeated application of \isa{foldr} and \isa{map} has the
-disadvantage that a list is traversed several times. A single traversal is sufficient, as
-illustrated by the following example:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isachardoublequote}sum\ {\isacharparenleft}map\ {\isacharparenleft}{\isasymlambda}\ x{\isachardot}\ x\ {\isacharplus}\ {\isadigit{3}}{\isacharparenright}\ xs{\isacharparenright}\ {\isacharequal}\ foldr\ h\ xs\ b{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Find terms \isa{h} and \isa{b} which solve this
-equation. Generalize this result, i.e. show for appropriate \isa{h}
-and \isa{b}:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isachardoublequote}foldr\ g\ {\isacharparenleft}map\ f\ xs{\isacharparenright}\ a\ {\isacharequal}\ foldr\ h\ xs\ b{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Hint: Isabelle can help you find the solution if you use the
-equalities arising during a proof attempt.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-The following function \isa{rev{\isacharunderscore}acc} reverses a list in linear time:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\isanewline
-\ \ rev{\isacharunderscore}acc\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharbrackleft}{\isacharprime}a\ list{\isacharcomma}\ {\isacharprime}a\ list{\isacharbrackright}\ {\isasymRightarrow}\ {\isacharprime}a\ list{\isachardoublequote}\isanewline
-\isamarkupfalse%
-\isacommand{primrec}\isanewline
-\ \ {\isachardoublequote}rev{\isacharunderscore}acc\ {\isacharbrackleft}{\isacharbrackright}\ ys\ {\isacharequal}\ ys{\isachardoublequote}\isanewline
-\ \ {\isachardoublequote}rev{\isacharunderscore}acc\ {\isacharparenleft}x{\isacharhash}xs{\isacharparenright}\ ys\ {\isacharequal}\ {\isacharparenleft}rev{\isacharunderscore}acc\ xs\ {\isacharparenleft}x{\isacharhash}ys{\isacharparenright}{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Show that \isa{rev{\isacharunderscore}acc} can be defined by means of \isa{foldl}.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ rev{\isacharunderscore}acc{\isacharunderscore}foldl{\isacharcolon}\ {\isachardoublequote}rev{\isacharunderscore}acc\ xs\ a\ {\isacharequal}\ foldl\ {\isacharparenleft}{\isasymlambda}\ ys\ x{\isachardot}\ x\ {\isacharhash}\ ys{\isacharparenright}\ a\ xs{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-On the first exercise sheet, we have shown:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ sum{\isacharunderscore}append\ {\isacharbrackleft}simp{\isacharbrackright}{\isacharcolon}\ {\isachardoublequote}sum\ {\isacharparenleft}xs\ {\isacharat}\ ys{\isacharparenright}\ {\isacharequal}\ sum\ xs\ {\isacharplus}\ sum\ ys{\isachardoublequote}\isanewline
-\ \ \isamarkupfalse%
-\isacommand{by}\ {\isacharparenleft}induct\ xs{\isacharparenright}\ auto\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Prove a similar distributivity property for \isa{foldr},
-i.e. something like \isa{foldr\ f\ {\isacharparenleft}xs\ {\isacharat}\ ys{\isacharparenright}\ a\ {\isacharequal}\ f\ {\isacharparenleft}foldr\ f\ xs\ a{\isacharparenright}\ {\isacharparenleft}foldr\ f\ ys\ a{\isacharparenright}}. However, you will have to strengthen the premisses
-by taking into account algebraic properties of \isa{f} and \isa{a}.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ foldr{\isacharunderscore}append{\isacharcolon}\ {\isachardoublequote}foldr\ f\ {\isacharparenleft}xs\ {\isacharat}\ ys{\isacharparenright}\ a\ {\isacharequal}\ f\ {\isacharparenleft}foldr\ f\ xs\ a{\isacharparenright}\ {\isacharparenleft}foldr\ f\ ys\ a{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Now, define the function \isa{prod}, which computes the product of all list elements:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\ \ prod\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ list\ {\isasymRightarrow}\ nat{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-direcly with the aid of  a fold and prove the following:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isachardoublequote}prod\ {\isacharparenleft}xs\ {\isacharat}\ ys{\isacharparenright}\ {\isacharequal}\ prod\ xs\ {\isacharasterisk}\ prod\ ys{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\isamarkupsubsubsection{Functions on Trees%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Consider the following type of binary trees:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{datatype}\ {\isacharprime}a\ tree\ {\isacharequal}\ Tip\ {\isacharbar}\ Node\ {\isachardoublequote}{\isacharprime}a\ tree{\isachardoublequote}\ {\isacharprime}a\ {\isachardoublequote}{\isacharprime}a\ tree{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Define functions which convert a tree into a list by traversing it in pre- resp. postorder:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\ \ preorder\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ tree\ {\isasymRightarrow}\ {\isacharprime}a\ list{\isachardoublequote}\isanewline
-\ \ postorder\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ tree\ {\isasymRightarrow}\ {\isacharprime}a\ list{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-You have certainly realized that computation of postorder traversal can be efficiently realized with an accumulator, in analogy to  \isa{rev{\isacharunderscore}acc}:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\isanewline
-\ \ postorder{\isacharunderscore}acc\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharbrackleft}{\isacharprime}a\ tree{\isacharcomma}\ {\isacharprime}a\ list{\isacharbrackright}\ {\isasymRightarrow}\ {\isacharprime}a\ list{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Define this function and show:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isachardoublequote}postorder{\isacharunderscore}acc\ t\ xs\ {\isacharequal}\ {\isacharparenleft}postorder\ t{\isacharparenright}\ {\isacharat}\ xs{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-\isa{postorder{\isacharunderscore}acc} is the instance of a function
-\isa{foldl{\isacharunderscore}tree}, which is similar to \isa{foldl}.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\isanewline
-\ \ foldl{\isacharunderscore}tree\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}{\isacharprime}b\ {\isacharequal}{\isachargreater}\ {\isacharprime}a\ {\isacharequal}{\isachargreater}\ {\isacharprime}b{\isacharparenright}\ {\isasymRightarrow}\ {\isacharprime}b\ {\isasymRightarrow}\ {\isacharprime}a\ tree\ {\isasymRightarrow}\ {\isacharprime}b{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Show the following:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isachardoublequote}{\isasymforall}\ a{\isachardot}\ postorder{\isacharunderscore}acc\ t\ a\ {\isacharequal}\ foldl{\isacharunderscore}tree\ {\isacharparenleft}{\isasymlambda}\ xs\ x{\isachardot}\ Cons\ x\ xs{\isacharparenright}\ a\ t{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Define a function \isa{tree{\isacharunderscore}sum} that computes the sum of
-the elements of a tree of natural numbers:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\isanewline
-\ \ tree{\isacharunderscore}sum\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ tree\ {\isasymRightarrow}\ nat{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-and show that this function satisfies%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isachardoublequote}tree{\isacharunderscore}sum\ t\ {\isacharequal}\ sum\ {\isacharparenleft}preorder\ t{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/0304/a2/generated/session.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-\input{a2.tex}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/0304/a3/ROOT.ML	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-  use_thy "a3";
--- a/doc-src/Exercises/0304/a3/a3.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +0,0 @@
-
-(*<*) theory a3 = Main: (*>*)
-
-subsection {* Natural deduction -- Propositional Logic \label{psv0304a3} *}
-
-text {* In this exercise, we will prove some lemmas of propositional
-logic with the aid of a calculus of natural deduction.
-
-For the proofs, you may only use
-
-\begin{itemize}
-\item the following lemmas: \\
-@{text "notI:"}~@{thm notI[of A,no_vars]},\\
-@{text "notE:"}~@{thm notE[of A B,no_vars]},\\
-@{text "conjI:"}~@{thm conjI[of A B,no_vars]},\\ 
-@{text "conjE:"}~@{thm conjE[of A B C,no_vars]},\\
-@{text "disjI1:"}~@{thm disjI1[of A B,no_vars]},\\
-@{text "disjI2:"}~@{thm disjI2[of A B,no_vars]},\\
-@{text "disjE:"}~@{thm disjE[of A B C,no_vars]},\\
-@{text "impI:"}~@{thm impI[of A B,no_vars]},\\
-@{text "impE:"}~@{thm impE[of A B C,no_vars]},\\
-@{text "mp:"}~@{thm mp[of A B,no_vars]}\\
-@{text "iffI:"}~@{thm iffI[of A B,no_vars]}, \\
-@{text "iffE:"}~@{thm iffE[of A B C,no_vars]}\\
-@{text "classical:"}~@{thm classical[of A,no_vars]}
-
-\item the proof methods @{term rule}, @{term erule} and @{term assumption}
-\end{itemize}
-*}
-
-lemma I: "A \<longrightarrow> A"
-(*<*) oops (*>*)
-
-lemma "A \<and> B \<longrightarrow> B \<and> A"
-(*<*) oops (*>*)
-
-lemma "(A \<and> B) \<longrightarrow> (A \<or> B)"
-(*<*) oops (*>*)
-
-lemma "((A \<or> B) \<or> C) \<longrightarrow> A \<or> (B \<or> C)"
-(*<*) oops (*>*)
-
-lemma K: "A \<longrightarrow> B \<longrightarrow> A"
-(*<*) oops (*>*)
-
-lemma "(A \<or> A) = (A \<and> A)"
-(*<*) oops (*>*)
-
-lemma S: "(A \<longrightarrow> B \<longrightarrow> C) \<longrightarrow> (A \<longrightarrow> B) \<longrightarrow> A \<longrightarrow> C"
-(*<*) oops (*>*)
-
-lemma "(A \<longrightarrow> B) \<longrightarrow> (B \<longrightarrow> C) \<longrightarrow> A \<longrightarrow> C"
-(*<*) oops (*>*)
-
-lemma "\<not> \<not> A \<longrightarrow> A"
-(*<*) oops (*>*)
-
-lemma "A \<longrightarrow> \<not> \<not> A"
-(*<*) oops (*>*)
-
-lemma "(\<not> A \<longrightarrow> B) \<longrightarrow> (\<not> B \<longrightarrow> A)"
-(*<*) oops (*>*)
-
-lemma "((A \<longrightarrow> B) \<longrightarrow> A) \<longrightarrow> A"
-(*<*) oops (*>*)
-
-lemma "A \<or> \<not> A"
-(*<*) oops (*>*)
-
-lemma "(\<not> (A \<and> B)) = (\<not> A \<or> \<not> B)"
-(*<*) oops (*>*)
-
-(*<*) end (*>*)
-
--- a/doc-src/Exercises/0304/a3/generated/a3.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{a{\isadigit{3}}}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{Natural deduction -- Propositional Logic \label{psv0304a3}%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-In this exercise, we will prove some lemmas of propositional
-logic with the aid of a calculus of natural deduction.
-
-For the proofs, you may only use
-
-\begin{itemize}
-\item the following lemmas: \\
-\isa{notI{\isacharcolon}}~\isa{{\isacharparenleft}A\ {\isasymLongrightarrow}\ False{\isacharparenright}\ {\isasymLongrightarrow}\ {\isasymnot}\ A},\\
-\isa{notE{\isacharcolon}}~\isa{{\isasymlbrakk}{\isasymnot}\ A{\isacharsemicolon}\ A{\isasymrbrakk}\ {\isasymLongrightarrow}\ B},\\
-\isa{conjI{\isacharcolon}}~\isa{{\isasymlbrakk}A{\isacharsemicolon}\ B{\isasymrbrakk}\ {\isasymLongrightarrow}\ A\ {\isasymand}\ B},\\ 
-\isa{conjE{\isacharcolon}}~\isa{{\isasymlbrakk}A\ {\isasymand}\ B{\isacharsemicolon}\ {\isasymlbrakk}A{\isacharsemicolon}\ B{\isasymrbrakk}\ {\isasymLongrightarrow}\ C{\isasymrbrakk}\ {\isasymLongrightarrow}\ C},\\
-\isa{disjI{\isadigit{1}}{\isacharcolon}}~\isa{A\ {\isasymLongrightarrow}\ A\ {\isasymor}\ B},\\
-\isa{disjI{\isadigit{2}}{\isacharcolon}}~\isa{A\ {\isasymLongrightarrow}\ B\ {\isasymor}\ A},\\
-\isa{disjE{\isacharcolon}}~\isa{{\isasymlbrakk}A\ {\isasymor}\ B{\isacharsemicolon}\ A\ {\isasymLongrightarrow}\ C{\isacharsemicolon}\ B\ {\isasymLongrightarrow}\ C{\isasymrbrakk}\ {\isasymLongrightarrow}\ C},\\
-\isa{impI{\isacharcolon}}~\isa{{\isacharparenleft}A\ {\isasymLongrightarrow}\ B{\isacharparenright}\ {\isasymLongrightarrow}\ A\ {\isasymlongrightarrow}\ B},\\
-\isa{impE{\isacharcolon}}~\isa{{\isasymlbrakk}A\ {\isasymlongrightarrow}\ B{\isacharsemicolon}\ A{\isacharsemicolon}\ B\ {\isasymLongrightarrow}\ C{\isasymrbrakk}\ {\isasymLongrightarrow}\ C},\\
-\isa{mp{\isacharcolon}}~\isa{{\isasymlbrakk}A\ {\isasymlongrightarrow}\ B{\isacharsemicolon}\ A{\isasymrbrakk}\ {\isasymLongrightarrow}\ B}\\
-\isa{iffI{\isacharcolon}}~\isa{{\isasymlbrakk}A\ {\isasymLongrightarrow}\ B{\isacharsemicolon}\ B\ {\isasymLongrightarrow}\ A{\isasymrbrakk}\ {\isasymLongrightarrow}\ A\ {\isacharequal}\ B}, \\
-\isa{iffE{\isacharcolon}}~\isa{{\isasymlbrakk}A\ {\isacharequal}\ B{\isacharsemicolon}\ {\isasymlbrakk}A\ {\isasymlongrightarrow}\ B{\isacharsemicolon}\ B\ {\isasymlongrightarrow}\ A{\isasymrbrakk}\ {\isasymLongrightarrow}\ C{\isasymrbrakk}\ {\isasymLongrightarrow}\ C}\\
-\isa{classical{\isacharcolon}}~\isa{{\isacharparenleft}{\isasymnot}\ A\ {\isasymLongrightarrow}\ A{\isacharparenright}\ {\isasymLongrightarrow}\ A}
-
-\item the proof methods \isa{rule}, \isa{erule} and \isa{assumption}
-\end{itemize}%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ I{\isacharcolon}\ {\isachardoublequote}A\ {\isasymlongrightarrow}\ A{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}A\ {\isasymand}\ B\ {\isasymlongrightarrow}\ B\ {\isasymand}\ A{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}{\isacharparenleft}A\ {\isasymand}\ B{\isacharparenright}\ {\isasymlongrightarrow}\ {\isacharparenleft}A\ {\isasymor}\ B{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}{\isacharparenleft}{\isacharparenleft}A\ {\isasymor}\ B{\isacharparenright}\ {\isasymor}\ C{\isacharparenright}\ {\isasymlongrightarrow}\ A\ {\isasymor}\ {\isacharparenleft}B\ {\isasymor}\ C{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ K{\isacharcolon}\ {\isachardoublequote}A\ {\isasymlongrightarrow}\ B\ {\isasymlongrightarrow}\ A{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}{\isacharparenleft}A\ {\isasymor}\ A{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}A\ {\isasymand}\ A{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ S{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}A\ {\isasymlongrightarrow}\ B\ {\isasymlongrightarrow}\ C{\isacharparenright}\ {\isasymlongrightarrow}\ {\isacharparenleft}A\ {\isasymlongrightarrow}\ B{\isacharparenright}\ {\isasymlongrightarrow}\ A\ {\isasymlongrightarrow}\ C{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}{\isacharparenleft}A\ {\isasymlongrightarrow}\ B{\isacharparenright}\ {\isasymlongrightarrow}\ {\isacharparenleft}B\ {\isasymlongrightarrow}\ C{\isacharparenright}\ {\isasymlongrightarrow}\ A\ {\isasymlongrightarrow}\ C{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}{\isasymnot}\ {\isasymnot}\ A\ {\isasymlongrightarrow}\ A{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}A\ {\isasymlongrightarrow}\ {\isasymnot}\ {\isasymnot}\ A{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}{\isacharparenleft}{\isasymnot}\ A\ {\isasymlongrightarrow}\ B{\isacharparenright}\ {\isasymlongrightarrow}\ {\isacharparenleft}{\isasymnot}\ B\ {\isasymlongrightarrow}\ A{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}{\isacharparenleft}{\isacharparenleft}A\ {\isasymlongrightarrow}\ B{\isacharparenright}\ {\isasymlongrightarrow}\ A{\isacharparenright}\ {\isasymlongrightarrow}\ A{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}A\ {\isasymor}\ {\isasymnot}\ A{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}{\isacharparenleft}{\isasymnot}\ {\isacharparenleft}A\ {\isasymand}\ B{\isacharparenright}{\isacharparenright}\ {\isacharequal} {\isacharparenleft}{\isasymnot}\ A\ {\isasymor}\ {\isasymnot}\ B{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/0304/a3/generated/session.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-\input{a3.tex}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/0304/a4/ROOT.ML	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-  use_thy "a4";
--- a/doc-src/Exercises/0304/a4/a4.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-
-(*<*) theory a4 = Main: (*>*)
-
-subsection {* Natural Deduction -- Predicate Logic; Sets as Lists *}
-
-
-subsubsection {* Predicate Logic Formulae *}
-
-text {*
-
-We are again talking about proofs in the calculus of Natural
-Deduction. In addition to the rules of section~\ref{psv0304a3}, you may now also use
-
-
-  @{text "exI:"}~@{thm exI[no_vars]}\\
-  @{text "exE:"}~@{thm exE[no_vars]}\\
-  @{text "allI:"}~@{thm allI[no_vars]}\\
-  @{text "allE:"}~@{thm allE[no_vars]}\\
-
-Give a proof of the following propositions or an argument why the formula is not valid:
-*}
-
-
-lemma "(\<exists>x. \<forall>y. P x y) \<longrightarrow> (\<forall>y. \<exists>x. P x y)"
-(*<*) oops (*>*)
-
-lemma "(\<forall>x. P x \<longrightarrow> Q) = ((\<exists>x. P x) \<longrightarrow> Q)"
-(*<*) oops (*>*)
-
-lemma "((\<forall> x. P x)  \<and> (\<forall> x. Q x)) = (\<forall> x. (P x \<and> Q x))"
-(*<*) oops (*>*)
-
-lemma "((\<forall> x. P x) \<or> (\<forall> x. Q x)) = (\<forall> x. (P x \<or> Q x))"
-(*<*) oops (*>*)
-
-lemma "((\<exists> x. P x) \<or> (\<exists> x. Q x)) = (\<exists> x. (P x \<or> Q x))"
-(*<*) oops (*>*)
-
-lemma "\<exists>x. (P x \<longrightarrow> (\<forall>x. P x))"
-(*<*) oops (*>*)
-
-
-subsubsection {* Sets as Lists *}
-
-text {* Finite sets can obviously be implemented by lists. In the
-following, you will be asked to implement the set operations union,
-intersection and difference and to show that these implementations are
-correct. Thus, for a function  *}
-
-(*<*) consts (*>*)
-  list_union :: "['a list, 'a list] \<Rightarrow> 'a list"
-
-text {* to be defined by you it has to be shown that *}
-
-lemma "set (list_union xs ys) = set xs \<union> set ys"
-(*<*) oops (*>*)
-
-
-text {* In addition, the functions should be space efficient in the
-sense that one obtains lists without duplicates (@{text "distinct"})
-whenever the parameters of the functions are duplicate-free. Thus, for
-example, *}
-
-
-lemma [rule_format]: 
-  "distinct xs \<longrightarrow> distinct ys \<longrightarrow> (distinct (list_union xs ys))"
-(*<*) oops (*>*)
-
-text {* \emph{Hint:} @{text "distinct"} is defined in @{text
-List.thy}. Also the function @{text mem} and the lemma @{text
-set_mem_eq} may be useful. *}
-
-
-subsubsection {* Quantification over Sets *}
-
-text {* Define a set @{text S} such that the following proposition holds: *}
-
-lemma "((\<forall> x \<in> A. P x) \<and> (\<forall> x \<in> B. P x)) \<longrightarrow> (\<forall> x \<in> S. P x)"
-(*<*) oops (*>*)
-
-
-text {* Define a predicate @{text P} such that *}
-
-lemma "\<forall> x \<in> A. P (f x) \<Longrightarrow>  \<forall> y \<in> f ` A. Q y"
-(*<*) oops (*>*)
-
-
-
-(*<*) end (*>*)
-
--- a/doc-src/Exercises/0304/a4/generated/a4.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,106 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{a{\isadigit{4}}}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{Natural Deduction -- Predicate Logic; Sets as Lists%
-}
-\isamarkuptrue%
-%
-\isamarkupsubsubsection{Predicate Logic Formulae%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-We are again talking about proofs in the calculus of Natural
-Deduction. In addition to the rules of section~\ref{psv0304a3}, you may now also use
-
-
-  \isa{exI{\isacharcolon}}~\isa{P\ x\ {\isasymLongrightarrow}\ {\isasymexists}x{\isachardot}\ P\ x}\\
-  \isa{exE{\isacharcolon}}~\isa{{\isasymlbrakk}{\isasymexists}x{\isachardot}\ P\ x{\isacharsemicolon}\ {\isasymAnd}x{\isachardot}\ P\ x\ {\isasymLongrightarrow}\ Q{\isasymrbrakk}\ {\isasymLongrightarrow}\ Q}\\
-  \isa{allI{\isacharcolon}}~\isa{{\isacharparenleft}{\isasymAnd}x{\isachardot}\ P\ x{\isacharparenright}\ {\isasymLongrightarrow}\ {\isasymforall}x{\isachardot}\ P\ x}\\
-  \isa{allE{\isacharcolon}}~\isa{{\isasymlbrakk}{\isasymforall}x{\isachardot}\ P\ x{\isacharsemicolon}\ P\ x\ {\isasymLongrightarrow}\ R{\isasymrbrakk}\ {\isasymLongrightarrow}\ R}\\
-
-Give a proof of the following propositions or an argument why the formula is not valid:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isachardoublequote}{\isacharparenleft}{\isasymexists}x{\isachardot}\ {\isasymforall}y{\isachardot}\ P\ x\ y{\isacharparenright}\ {\isasymlongrightarrow}\ {\isacharparenleft}{\isasymforall}y{\isachardot}\ {\isasymexists}x{\isachardot}\ P\ x\ y{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}{\isacharparenleft}{\isasymforall}x{\isachardot}\ P\ x\ {\isasymlongrightarrow}\ Q{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}{\isacharparenleft}{\isasymexists}x{\isachardot}\ P\ x{\isacharparenright}\ {\isasymlongrightarrow}\ Q{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}{\isacharparenleft}{\isacharparenleft}{\isasymforall}\ x{\isachardot}\ P\ x{\isacharparenright}\ \ {\isasymand}\ {\isacharparenleft}{\isasymforall}\ x{\isachardot}\ Q\ x{\isacharparenright}{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}{\isasymforall}\ x{\isachardot}\ {\isacharparenleft}P\ x\ {\isasymand}\ Q\ x{\isacharparenright}{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}{\isacharparenleft}{\isacharparenleft}{\isasymforall}\ x{\isachardot}\ P\ x{\isacharparenright}\ {\isasymor}\ {\isacharparenleft}{\isasymforall}\ x{\isachardot}\ Q\ x{\isacharparenright}{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}{\isasymforall}\ x{\isachardot}\ {\isacharparenleft}P\ x\ {\isasymor}\ Q\ x{\isacharparenright}{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}{\isacharparenleft}{\isacharparenleft}{\isasymexists}\ x{\isachardot}\ P\ x{\isacharparenright}\ {\isasymor}\ {\isacharparenleft}{\isasymexists}\ x{\isachardot}\ Q\ x{\isacharparenright}{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}{\isasymexists}\ x{\isachardot}\ {\isacharparenleft}P\ x\ {\isasymor}\ Q\ x{\isacharparenright}{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}{\isasymexists}x{\isachardot}\ {\isacharparenleft}P\ x\ {\isasymlongrightarrow}\ {\isacharparenleft}{\isasymforall}x{\isachardot}\ P\ x{\isacharparenright}{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\isamarkupsubsubsection{Sets as Lists%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Finite sets can obviously be implemented by lists. In the
-following, you will be asked to implement the set operations union,
-intersection and difference and to show that these implementations are
-correct. Thus, for a function%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\ \ list{\isacharunderscore}union\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharbrackleft}{\isacharprime}a\ list{\isacharcomma}\ {\isacharprime}a\ list{\isacharbrackright}\ {\isasymRightarrow}\ {\isacharprime}a\ list{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-to be defined by you it has to be shown that%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isachardoublequote}set\ {\isacharparenleft}list{\isacharunderscore}union\ xs\ ys{\isacharparenright}\ {\isacharequal}\ set\ xs\ {\isasymunion}\ set\ ys{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-In addition, the functions should be space efficient in the
-sense that one obtains lists without duplicates (\isa{distinct})
-whenever the parameters of the functions are duplicate-free. Thus, for
-example,%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isacharbrackleft}rule{\isacharunderscore}format{\isacharbrackright}{\isacharcolon}\ \isanewline
-\ \ {\isachardoublequote}distinct\ xs\ {\isasymlongrightarrow}\ distinct\ ys\ {\isasymlongrightarrow}\ {\isacharparenleft}distinct\ {\isacharparenleft}list{\isacharunderscore}union\ xs\ ys{\isacharparenright}{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-\emph{Hint:} \isa{distinct} is defined in \isa{List{\isachardot}thy}. Also the function \isa{mem} and the lemma \isa{set{\isacharunderscore}mem{\isacharunderscore}eq} may be useful.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\isamarkupsubsubsection{Quantification over Sets%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Define a set \isa{S} such that the following proposition holds:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isachardoublequote}{\isacharparenleft}{\isacharparenleft}{\isasymforall}\ x\ {\isasymin}\ A{\isachardot}\ P\ x{\isacharparenright}\ {\isasymand}\ {\isacharparenleft}{\isasymforall}\ x\ {\isasymin}\ B{\isachardot}\ P\ x{\isacharparenright}{\isacharparenright}\ {\isasymlongrightarrow}\ {\isacharparenleft}{\isasymforall}\ x\ {\isasymin}\ S{\isachardot}\ P\ x{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Define a predicate \isa{P} such that%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isachardoublequote}{\isasymforall}\ x\ {\isasymin}\ A{\isachardot}\ P\ {\isacharparenleft}f\ x{\isacharparenright}\ {\isasymLongrightarrow}\ \ {\isasymforall}\ y\ {\isasymin}\ f\ {\isacharbackquote}\ A{\isachardot}\ Q\ y{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isanewline
-\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/0304/a4/generated/session.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-\input{a4.tex}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/0304/a5/ROOT.ML	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-  use_thy "a5";
--- a/doc-src/Exercises/0304/a5/a5.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-
-(*<*) theory a5 = Main: (*>*)
-
-subsection {* The Euclidean Algorithm -- Inductively *}
-
-subsubsection {* Rules without Base Case *}
-
-text {* Show that the following
-*}
-
-consts evenempty :: "nat set"
-inductive evenempty
-  intros
-  Add2Ie: "n \<in> evenempty \<Longrightarrow> Suc(Suc n) \<in> evenempty"
-
-text {* defines the empty set: *}
-
-lemma evenempty_empty: "evenempty = {}"
-(*<*) oops (*>*)
-
-
-subsubsection {* The Euclidean Algorithm *}
-
-text {* Define inductively the set @{text gcd}, which characterizes
-the greatest common divisor of two natural numbers: *}
-
-(*<*)consts(*>*)
-  gcd :: "(nat \<times> nat \<times> nat) set"
-
-text {* Here, @{text "(a,b,g) \<in> gcd"} means that @{text g} is the gcd
-of @{text a} und @{text b}. The definition should closely follow the
-Euclidean algorithm.
-
-Reminder: The Euclidean algorithm repeatedly subtracts the smaller
-from the larger number, until one of the numbers is 0. Then, the other
-number is the gcd. *}
-
-text {* Now, compute the gcd of 15 and 10: *}
-lemma "(15, 10, ?g)  \<in> gcd"
-(*<*) oops (*>*)
-
-text {* How does your algorithm behave on special cases as the following?  *}
-lemma "(0, 0, ?g)  \<in> gcd"
-(*<*) oops (*>*)
-
-text {* Show that the gcd is really a divisor (for the proof, you need an appropriate lemma): *}
-
-lemma gcd_divides: "(a,b,g) \<in> gcd \<Longrightarrow> g dvd a \<and> g dvd b"
-(*<*) oops (*>*)
-
-text {* Show that the gcd is the greatest common divisor: *}
-
-lemma gcd_greatest [rule_format]: "(a,b,g) \<in> gcd \<Longrightarrow>
-  0 < a \<or> 0 < b \<longrightarrow> (\<forall> d. d dvd a \<longrightarrow> d dvd b \<longrightarrow> d \<le> g)"
-(*<*) oops (*>*)
-
-text {* Here as well, you will have to prove a suitable lemma. What is
-the precondition @{text "0 < a \<or> 0 < b"} good for?
-
-So far, we have only shown that @{text gcd} is correct, but your
-algorithm might not compute a result for all values @{text
-"a,b"}. Thus, show completeness of the algorithm: *}
-
-lemma gcd_defined: "\<forall> a b. \<exists> g. (a, b, g) \<in> gcd"
-(*<*) oops (*>*)
-
-text {* The following lemma, proved by course-of-value recursion over
-@{text n}, may be useful. Why does standard induction over natural
-numbers not work here?  *}
-
-lemma gcd_defined_aux [rule_format]: 
-  "\<forall> a b. (a + b) \<le> n \<longrightarrow> (\<exists> g. (a, b, g) \<in> gcd)"
-apply (induct rule: nat_less_induct)
-apply clarify
-
-(*<*) oops (*>*)
-
-text {* The idea is to show that @{text gcd} yields a result for all
-@{text "a, b"} whenever it is known that @{text gcd} yields a result
-for all @{text "a', b'"} whose sum is smaller than @{text "a + b"}.
-
-In order to prove this lemma, make case distinctions corresponding to
-the different clauses of the algorithm, and show how to reduce
-computation of @{text gcd} for @{text "a, b"} to computation of @{text
-gcd} for suitable smaller @{text "a', b'"}.
-
-*}
-
-
-(*<*) end (*>*)
-
--- a/doc-src/Exercises/0304/a5/generated/a5.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,124 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{a{\isadigit{5}}}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{The Euclidean Algorithm -- Inductively%
-}
-\isamarkuptrue%
-%
-\isamarkupsubsubsection{Rules without Base Case%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Show that the following%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ evenempty\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ set{\isachardoublequote}\isanewline
-\isamarkupfalse%
-\isacommand{inductive}\ evenempty\isanewline
-\ \ \isakeyword{intros}\isanewline
-\ \ Add{\isadigit{2}}Ie{\isacharcolon}\ {\isachardoublequote}n\ {\isasymin}\ evenempty\ {\isasymLongrightarrow}\ Suc{\isacharparenleft}Suc\ n{\isacharparenright}\ {\isasymin}\ evenempty{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-defines the empty set:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ evenempty{\isacharunderscore}empty{\isacharcolon}\ {\isachardoublequote}evenempty\ {\isacharequal}\ {\isacharbraceleft}{\isacharbraceright}{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\isamarkupsubsubsection{The Euclidean Algorithm%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Define inductively the set \isa{gcd}, which characterizes
-the greatest common divisor of two natural numbers:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\ \ gcd\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}nat\ {\isasymtimes}\ nat\ {\isasymtimes}\ nat{\isacharparenright}\ set{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Here, \isa{{\isacharparenleft}a{\isacharcomma}b{\isacharcomma}g{\isacharparenright}\ {\isasymin}\ gcd} means that \isa{g} is the gcd
-of \isa{a} und \isa{b}. The definition should closely follow the
-Euclidean algorithm.
-
-Reminder: The Euclidean algorithm repeatedly subtracts the smaller
-from the larger number, until one of the numbers is 0. Then, the other
-number is the gcd.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Now, compute the gcd of 15 and 10:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isachardoublequote}{\isacharparenleft}{\isadigit{1}}{\isadigit{5}}{\isacharcomma}\ {\isadigit{1}}{\isadigit{0}}{\isacharcomma}\ {\isacharquery}g{\isacharparenright}\ \ {\isasymin}\ gcd{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-How does your algorithm behave on special cases as the following?%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isachardoublequote}{\isacharparenleft}{\isadigit{0}}{\isacharcomma}\ {\isadigit{0}}{\isacharcomma}\ {\isacharquery}g{\isacharparenright}\ \ {\isasymin}\ gcd{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Show that the gcd is really a divisor (for the proof, you need an appropriate lemma):%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ gcd{\isacharunderscore}divides{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}a{\isacharcomma}b{\isacharcomma}g{\isacharparenright}\ {\isasymin}\ gcd\ {\isasymLongrightarrow}\ g\ dvd\ a\ {\isasymand}\ g\ dvd\ b{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Show that the gcd is the greatest common divisor:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ gcd{\isacharunderscore}greatest\ {\isacharbrackleft}rule{\isacharunderscore}format{\isacharbrackright}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}a{\isacharcomma}b{\isacharcomma}g{\isacharparenright}\ {\isasymin}\ gcd\ {\isasymLongrightarrow}\isanewline
-\ \ {\isadigit{0}}\ {\isacharless}\ a\ {\isasymor}\ {\isadigit{0}}\ {\isacharless}\ b\ {\isasymlongrightarrow}\ {\isacharparenleft}{\isasymforall}\ d{\isachardot}\ d\ dvd\ a\ {\isasymlongrightarrow}\ d\ dvd\ b\ {\isasymlongrightarrow}\ d\ {\isasymle}\ g{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Here as well, you will have to prove a suitable lemma. What is
-the precondition \isa{{\isadigit{0}}\ {\isacharless}\ a\ {\isasymor}\ {\isadigit{0}}\ {\isacharless}\ b} good for?
-
-So far, we have only shown that \isa{gcd} is correct, but your
-algorithm might not compute a result for all values \isa{a{\isacharcomma}b}. Thus, show completeness of the algorithm:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ gcd{\isacharunderscore}defined{\isacharcolon}\ {\isachardoublequote}{\isasymforall}\ a\ b{\isachardot}\ {\isasymexists}\ g{\isachardot}\ {\isacharparenleft}a{\isacharcomma}\ b{\isacharcomma}\ g{\isacharparenright}\ {\isasymin}\ gcd{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-The following lemma, proved by course-of-value recursion over
-\isa{n}, may be useful. Why does standard induction over natural
-numbers not work here?%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ gcd{\isacharunderscore}defined{\isacharunderscore}aux\ {\isacharbrackleft}rule{\isacharunderscore}format{\isacharbrackright}{\isacharcolon}\ \isanewline
-\ \ {\isachardoublequote}{\isasymforall}\ a\ b{\isachardot}\ {\isacharparenleft}a\ {\isacharplus}\ b{\isacharparenright}\ {\isasymle}\ n\ {\isasymlongrightarrow}\ {\isacharparenleft}{\isasymexists}\ g{\isachardot}\ {\isacharparenleft}a{\isacharcomma}\ b{\isacharcomma}\ g{\isacharparenright}\ {\isasymin}\ gcd{\isacharparenright}{\isachardoublequote}\isanewline
-\isamarkupfalse%
-\isacommand{apply}\ {\isacharparenleft}induct\ rule{\isacharcolon}\ nat{\isacharunderscore}less{\isacharunderscore}induct{\isacharparenright}\isanewline
-\isamarkupfalse%
-\isacommand{apply}\ clarify\isanewline
-\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-The idea is to show that \isa{gcd} yields a result for all
-\isa{a{\isacharcomma}\ b} whenever it is known that \isa{gcd} yields a result
-for all \isa{a{\isacharprime}{\isacharcomma}\ b{\isacharprime}} whose sum is smaller than \isa{a\ {\isacharplus}\ b}.
-
-In order to prove this lemma, make case distinctions corresponding to
-the different clauses of the algorithm, and show how to reduce
-computation of \isa{gcd} for \isa{a{\isacharcomma}\ b} to computation of \isa{gcd} for suitable smaller \isa{a{\isacharprime}{\isacharcomma}\ b{\isacharprime}}.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isanewline
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/0304/a5/generated/session.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-\input{a5.tex}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2000/IsaMakefile	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-#
-# $Id$
-#
-# IsaMakefile for PSV2000
-#
-
-SESSIONS = a1
-
-## targets
-
-default: clean sessions 
-sessions: $(SESSIONS)
-
-
-## global settings
-
-OUT = $(ISABELLE_OUTPUT)
-LOG = $(OUT)/log
-INFO = $(ISABELLE_BROWSER_INFO)
-USEDIR = $(ISATOOL) usedir -v true -i false -d false -D generated
-RSYNC = rsync --rsh ssh --rsync-path /usr/local/dist/bin/rsync
-
-
-clean:
-	rm -f $(LOG)/HOL-a?.gz $(LOG)/HOL-l?.gz
-
-## a1
-
-a1: a1/generated/session.tex
-
-a1/generated/session.tex: a1/ROOT.ML \
-  a1/*.thy 
-	@$(USEDIR) HOL a1
-
--- a/doc-src/Exercises/2000/Makefile	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-#
-# $Id$
-#
-# IsaMakefile for PSV2000
-#
-
-SESSIONS = a1
-
-## targets
-
-default: sessions 
-sessions: $(SESSIONS)
-
-
-## a1
-
-a1: a1/generated/session.tex
-
-a1/generated/session.tex: a1/ROOT.ML a1/*.thy 
-	isatool make
--- a/doc-src/Exercises/2000/a1/Arithmetic.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-(*<*)
-theory Arithmetic = Main:;
-(*>*)
-
-subsection  {* Arithmetic *}
-
-subsubsection {* Power *};
-
-text {* Define a primitive recursive function $pow~x~n$ that
-computes $x^n$ on natural numbers.  *};
-
-consts
-  pow :: "nat => nat => nat";
-
-text {*
-Prove the well known equation $x^{m \cdot n} = (x^m)^n$:
-*};
-
-theorem pow_mult: "pow x (m * n) = pow (pow x m) n";
-(*<*)oops(*>*)
-
-text {* Hint: prove a suitable lemma first.  If you need to appeal to
-associativity and commutativity of multiplication: the corresponding
-simplification rules are named @{text mult_ac}.  *}
-
-subsubsection {* Summation *}
-
-text {*
-Define a (primitive recursive) function $sum~ns$ that sums a list
-of natural numbers: $sum [n_1, \dots, n_k] = n_1 + \cdots + n_k$.
-*}
-
-consts
-  sum :: "nat list => nat";
-
-text {*
-Show that $sum$ is compatible with $rev$. You may need a lemma.
-*}
-
-theorem sum_rev: "sum (rev ns) = sum ns"
-(*<*)oops(*>*)
-
-text {*
-Define a function $Sum~f~k$ that sums $f$ from $0$
-up to $k-1$: $Sum~f~k = f~0 + \cdots + f(k - 1)$.
-*};
-
-consts
-  Sum :: "(nat => nat) => nat => nat";
-
-text {*
-Show the following equations for the pointwise summation of functions.
-Determine first what the expression @{text whatever} should be.
-*};
-
-theorem "Sum (%i. f i + g i) k = Sum f k + Sum g k";
-(*<*)oops(*>*)
-
-theorem "Sum f (k + l) = Sum f k + Sum whatever l";
-(*<*)oops(*>*)
-
-text {*
-What is the relationship between @{term sum} and @{text Sum}?
-Prove the following equation, suitably instantiated.
-*};
-
-theorem "Sum f k = sum whatever";
-(*<*)oops(*>*)
-
-text {*
-Hint: familiarize yourself with the predefined functions @{term map} and
-@{term"[i..j(]"} on lists in theory List.
-*}
-
-(*<*)
-end
-(*>*)
\ No newline at end of file
--- a/doc-src/Exercises/2000/a1/Hanoi.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-(*<*)
-theory Hanoi = Main:
-(*>*)
-subsection {* The towers of Hanoi \label{psv2000hanoi} *}
-
-text {*
-
-We are given 3 pegs $A$, $B$ and $C$, and $n$ disks with a hole, such
-that no two disks have the same diameter.  Initially all $n$ disks
-rest on peg $A$, ordered according to their size, with the largest one
-at the bottom. The aim is to transfer all $n$ disks from $A$ to $C$ by
-a sequence of single-disk moves such that we never place a larger disk
-on top of a smaller one. Peg $B$ may be used for intermediate storage.
-
-\begin{center}
-\includegraphics[width=0.8\textwidth]{Hanoi}
-\end{center}
-
-\medskip The pegs and moves can be modelled as follows:
-*};  
-
-datatype peg = A | B | C
-types move = "peg * peg"
-
-text {*
-Define a primitive recursive function
-*};
-
-consts
-  moves :: "nat => peg => peg => peg => move list";
-
-text {* such that @{term moves}$~n~a~b~c$ returns a list of (legal)
-moves that transfer $n$ disks from peg $a$ via $b$ to $c$.
-Show that this requires $2^n - 1$ moves:
-*}
-
-theorem "length (moves n a b c) = 2^n - 1"
-(*<*)oops(*>*)
-
-text {* Hint: You need to strengthen the theorem for the
-induction to go through. Beware: subtraction on natural numbers
-behaves oddly: $n - m = 0$ if $n \le m$. *}
-
-(*<*)
-end
-(*>*)
--- a/doc-src/Exercises/2000/a1/ROOT.ML	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-set quick_and_dirty;
-use_thy "Snoc";
-use_thy "Arithmetic";
-use_thy "Hanoi";
\ No newline at end of file
--- a/doc-src/Exercises/2000/a1/Snoc.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-(*<*)
-theory Snoc = Main:
-(*>*)
-subsection  {* Lists *}
-
-text {*
-Define a primitive recursive function @{text snoc} that appends an element
-at the \emph{right} end of a list. Do not use @{text"@"} itself.
-*}
-
-consts
-  snoc :: "'a list => 'a => 'a list"
-
-text {*
-Prove the following theorem:
-*}
-
-theorem rev_cons: "rev (x # xs) = snoc (rev xs) x"
-(*<*)oops(*>*)
-
-text {*
-Hint: you need to prove a suitable lemma first.
-*}
-
-(*<*)
-end
-(*>*)
--- a/doc-src/Exercises/2000/a1/generated/Arithmetic.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{Arithmetic}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{Arithmetic%
-}
-\isamarkuptrue%
-%
-\isamarkupsubsubsection{Power%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Define a primitive recursive function $pow~x~n$ that
-computes $x^n$ on natural numbers.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\isanewline
-\ \ pow\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ {\isacharequal}{\isachargreater}\ nat\ {\isacharequal}{\isachargreater}\ nat{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Prove the well known equation $x^{m \cdot n} = (x^m)^n$:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{theorem}\ pow{\isacharunderscore}mult{\isacharcolon}\ {\isachardoublequote}pow\ x\ {\isacharparenleft}m\ {\isacharasterisk}\ n{\isacharparenright}\ {\isacharequal}\ pow\ {\isacharparenleft}pow\ x\ m{\isacharparenright}\ n{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Hint: prove a suitable lemma first.  If you need to appeal to
-associativity and commutativity of multiplication: the corresponding
-simplification rules are named \isa{mult{\isacharunderscore}ac}.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\isamarkupsubsubsection{Summation%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Define a (primitive recursive) function $sum~ns$ that sums a list
-of natural numbers: $sum [n_1, \dots, n_k] = n_1 + \cdots + n_k$.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\isanewline
-\ \ sum\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ list\ {\isacharequal}{\isachargreater}\ nat{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Show that $sum$ is compatible with $rev$. You may need a lemma.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{theorem}\ sum{\isacharunderscore}rev{\isacharcolon}\ {\isachardoublequote}sum\ {\isacharparenleft}rev\ ns{\isacharparenright}\ {\isacharequal}\ sum\ ns{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Define a function $Sum~f~k$ that sums $f$ from $0$
-up to $k-1$: $Sum~f~k = f~0 + \cdots + f(k - 1)$.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\isanewline
-\ \ Sum\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}nat\ {\isacharequal}{\isachargreater}\ nat{\isacharparenright}\ {\isacharequal}{\isachargreater}\ nat\ {\isacharequal}{\isachargreater}\ nat{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Show the following equations for the pointwise summation of functions.
-Determine first what the expression \isa{whatever} should be.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{theorem}\ {\isachardoublequote}Sum\ {\isacharparenleft}{\isacharpercent}i{\isachardot}\ f\ i\ {\isacharplus}\ g\ i{\isacharparenright}\ k\ {\isacharequal}\ Sum\ f\ k\ {\isacharplus}\ Sum\ g\ k{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}Sum\ f\ {\isacharparenleft}k\ {\isacharplus}\ l{\isacharparenright}\ {\isacharequal}\ Sum\ f\ k\ {\isacharplus}\ Sum\ whatever\ l{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-What is the relationship between \isa{sum} and \isa{Sum}?
-Prove the following equation, suitably instantiated.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{theorem}\ {\isachardoublequote}Sum\ f\ k\ {\isacharequal}\ sum\ whatever{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Hint: familiarize yourself with the predefined functions \isa{map} and
-\isa{{\isacharbrackleft}i{\isachardot}{\isachardot}j{\isacharparenleft}{\isacharbrackright}} on lists in theory List.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2000/a1/generated/Hanoi.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{Hanoi}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{The towers of Hanoi \label{psv2000hanoi}%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-We are given 3 pegs $A$, $B$ and $C$, and $n$ disks with a hole, such
-that no two disks have the same diameter.  Initially all $n$ disks
-rest on peg $A$, ordered according to their size, with the largest one
-at the bottom. The aim is to transfer all $n$ disks from $A$ to $C$ by
-a sequence of single-disk moves such that we never place a larger disk
-on top of a smaller one. Peg $B$ may be used for intermediate storage.
-
-\begin{center}
-\includegraphics[width=0.8\textwidth]{Hanoi}
-\end{center}
-
-\medskip The pegs and moves can be modelled as follows:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{datatype}\ peg\ {\isacharequal}\ A\ {\isacharbar}\ B\ {\isacharbar}\ C\isanewline
-\isamarkupfalse%
-\isacommand{types}\ move\ {\isacharequal}\ {\isachardoublequote}peg\ {\isacharasterisk}\ peg{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Define a primitive recursive function%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\isanewline
-\ \ moves\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ {\isacharequal}{\isachargreater}\ peg\ {\isacharequal}{\isachargreater}\ peg\ {\isacharequal}{\isachargreater}\ peg\ {\isacharequal}{\isachargreater}\ move\ list{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-such that \isa{moves}$~n~a~b~c$ returns a list of (legal)
-moves that transfer $n$ disks from peg $a$ via $b$ to $c$.
-Show that this requires $2^n - 1$ moves:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{theorem}\ {\isachardoublequote}length\ {\isacharparenleft}moves\ n\ a\ b\ c{\isacharparenright}\ {\isacharequal}\ {\isadigit{2}}{\isacharcircum}n\ {\isacharminus}\ {\isadigit{1}}{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Hint: You need to strengthen the theorem for the
-induction to go through. Beware: subtraction on natural numbers
-behaves oddly: $n - m = 0$ if $n \le m$.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2000/a1/generated/Snoc.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{Snoc}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{Lists%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Define a primitive recursive function \isa{snoc} that appends an element
-at the \emph{right} end of a list. Do not use \isa{{\isacharat}} itself.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\isanewline
-\ \ snoc\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ list\ {\isacharequal}{\isachargreater}\ {\isacharprime}a\ {\isacharequal}{\isachargreater}\ {\isacharprime}a\ list{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Prove the following theorem:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{theorem}\ rev{\isacharunderscore}cons{\isacharcolon}\ {\isachardoublequote}rev\ {\isacharparenleft}x\ {\isacharhash}\ xs{\isacharparenright}\ {\isacharequal}\ snoc\ {\isacharparenleft}rev\ xs{\isacharparenright}\ x{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Hint: you need to prove a suitable lemma first.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2000/a1/generated/session.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-\input{Snoc.tex}
-
-\input{Arithmetic.tex}
-
-\input{Hanoi.tex}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2001/IsaMakefile	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-#
-# $Id$
-#
-# IsaMakefile for PSV2001
-#
-
-SESSIONS = a1 a2 a3 a5
-
-## targets
-
-default: clean sessions
-sessions: $(SESSIONS)
-# all: sessions 
-
-
-## global settings
-
-
-SRC = $(ISABELLE_HOME)/src
-OUT = $(ISABELLE_OUTPUT)
-LOG = $(OUT)/log
-INFO = $(ISABELLE_BROWSER_INFO)
-USEDIR = $(ISATOOL) usedir -v true -i false -d false -D generated
-RSYNC = rsync --rsh ssh --rsync-path /usr/local/dist/bin/rsync
-WWW = www4.in.tum.de:/home/html/wbroy/html-data/lehre/praktika/psv
-
-
-# reomve old log files
-clean:
-	rm -f $(LOG)/HOL-a?.gz $(LOG)/HOL-l?.gz
-
-## provide style.tex
-
-style:
-	@for D in $(SESSIONS); do test -d $$D/document && { test -r $$D/document/style.tex || ln -s ../../style.tex $$D/document/style.tex; } done;
-
-
-## a1
-
-a1: a1/generated/session.tex
-
-a1/generated/session.tex: a1/ROOT.ML \
-  a1/*.thy
-	@$(USEDIR) HOL a1
-
-## a2
-
-a2: a2/generated/session.tex
-
-a2/generated/session.tex: a2/ROOT.ML \
-  a2/*.thy
-	@$(USEDIR) HOL a2
-
-## a3
-
-a3: a3/generated/session.tex
-
-a3/generated/session.tex: a3/ROOT.ML \
-  a3/*.thy
-	@$(USEDIR) HOL a3
-
-## a5
-
-a5: a5/generated/session.tex
-
-a5/generated/session.tex: a5/ROOT.ML \
-  a5/*.thy
-	@$(USEDIR) HOL a5
-
--- a/doc-src/Exercises/2001/Makefile	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-#
-# $Id$
-#
-# IsaMakefile for PSV2001
-#
-
-SESSIONS = a1 a2 a3 a5
-
-## targets
-
-default: sessions
-sessions: $(SESSIONS)
-
-
-## a1
-
-a1: a1/generated/session.tex
-
-a1/generated/session.tex: a1/ROOT.ML a1/*.thy
-	isatool make
-
-## a2
-
-a2: a2/generated/session.tex
-
-a2/generated/session.tex: a2/ROOT.ML a2/*.thy
-	isatool make
-
-## a3
-
-a3: a3/generated/session.tex
-
-a3/generated/session.tex: a3/ROOT.ML a3/*.thy
-	isatool make
-
-## a5
-
-a5: a5/generated/session.tex
-
-a5/generated/session.tex: a5/ROOT.ML a5/*.thy
-	isatool make
-
--- a/doc-src/Exercises/2001/a1/Aufgabe1.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-(*<*)
-theory Aufgabe1 = Main:
-(*>*)
-
-subsection {* Lists *}
-
-text{*
-Define a function @{term replace}, such that @{term"replace x y zs"}
-yields @{term zs} with every occurrence of @{term x} replaced by @{term y}.
-*}
-
-consts replace :: "'a \<Rightarrow> 'a \<Rightarrow> 'a list \<Rightarrow> 'a list"
-
-text {*
-Prove or disprove (by counter example) the following theorems.
-You may have to prove some lemmas first.
-*};
-
-theorem "rev(replace x y zs) = replace x y (rev zs)"
-(*<*)oops(*>*)
-
-theorem "replace x y (replace u v zs) = replace u v (replace x y zs)"
-(*<*)oops(*>*)
-
-theorem "replace y z (replace x y zs) = replace x z zs"
-(*<*)oops(*>*)
-
-text{* Define two functions for removing elements from a list:
-@{term"del1 x xs"} deletes the first occurrence (from the left) of
-@{term x} in @{term xs}, @{term"delall x xs"} all of them.  *}
-
-consts del1   :: "'a \<Rightarrow> 'a list \<Rightarrow> 'a list"
-       delall :: "'a \<Rightarrow> 'a list \<Rightarrow> 'a list"
-
-
-text {*
-Prove or disprove (by counter example) the following theorems.
-*};
-
-theorem "del1 x (delall x xs) = delall x xs"
-(*<*)oops(*>*)
-
-theorem "delall x (delall x xs) = delall x xs"
-(*<*)oops(*>*)
-
-theorem "delall x (del1 x xs) = delall x xs"
-(*<*)oops(*>*)
-
-theorem "del1 x (del1 y zs) = del1 y (del1 x zs)"
-(*<*)oops(*>*)
-
-theorem "delall x (del1 y zs) = del1 y (delall x zs)"
-(*<*)oops(*>*)
-
-theorem "delall x (delall y zs) = delall y (delall x zs)"
-(*<*)oops(*>*)
-
-theorem "del1 y (replace x y xs) = del1 x xs"
-(*<*)oops(*>*)
-
-theorem "delall y (replace x y xs) = delall x xs"
-(*<*)oops(*>*)
-
-theorem "replace x y (delall x zs) = delall x zs"
-(*<*)oops(*>*)
-
-theorem "replace x y (delall z zs) = delall z (replace x y zs)"
-(*<*)oops(*>*)
-
-theorem "rev(del1 x xs) = del1 x (rev xs)"
-(*<*)oops(*>*)
-
-theorem "rev(delall x xs) = delall x (rev xs)"
-(*<*)oops(*>*)
-
-(*<*)
-end
-(*>*)
\ No newline at end of file
--- a/doc-src/Exercises/2001/a1/ROOT.ML	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-
-set quick_and_dirty;
-use_thy "Aufgabe1";
--- a/doc-src/Exercises/2001/a1/generated/Aufgabe1.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{Aufgabe{\isadigit{1}}}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{Lists%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Define a function \isa{replace}, such that \isa{replace\ x\ y\ zs}
-yields \isa{zs} with every occurrence of \isa{x} replaced by \isa{y}.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ replace\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ list\ {\isasymRightarrow}\ {\isacharprime}a\ list{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Prove or disprove (by counter example) the following theorems.
-You may have to prove some lemmas first.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{theorem}\ {\isachardoublequote}rev{\isacharparenleft}replace\ x\ y\ zs{\isacharparenright}\ {\isacharequal}\ replace\ x\ y\ {\isacharparenleft}rev\ zs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}replace\ x\ y\ {\isacharparenleft}replace\ u\ v\ zs{\isacharparenright}\ {\isacharequal}\ replace\ u\ v\ {\isacharparenleft}replace\ x\ y\ zs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}replace\ y\ z\ {\isacharparenleft}replace\ x\ y\ zs{\isacharparenright}\ {\isacharequal}\ replace\ x\ z\ zs{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Define two functions for removing elements from a list:
-\isa{del{\isadigit{1}}\ x\ xs} deletes the first occurrence (from the left) of
-\isa{x} in \isa{xs}, \isa{delall\ x\ xs} all of them.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ del{\isadigit{1}}\ \ \ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ list\ {\isasymRightarrow}\ {\isacharprime}a\ list{\isachardoublequote}\isanewline
-\ \ \ \ \ \ \ delall\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ list\ {\isasymRightarrow}\ {\isacharprime}a\ list{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Prove or disprove (by counter example) the following theorems.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{theorem}\ {\isachardoublequote}del{\isadigit{1}}\ x\ {\isacharparenleft}delall\ x\ xs{\isacharparenright}\ {\isacharequal}\ delall\ x\ xs{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}delall\ x\ {\isacharparenleft}delall\ x\ xs{\isacharparenright}\ {\isacharequal}\ delall\ x\ xs{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}delall\ x\ {\isacharparenleft}del{\isadigit{1}}\ x\ xs{\isacharparenright}\ {\isacharequal}\ delall\ x\ xs{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}del{\isadigit{1}}\ x\ {\isacharparenleft}del{\isadigit{1}}\ y\ zs{\isacharparenright}\ {\isacharequal}\ del{\isadigit{1}}\ y\ {\isacharparenleft}del{\isadigit{1}}\ x\ zs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}delall\ x\ {\isacharparenleft}del{\isadigit{1}}\ y\ zs{\isacharparenright}\ {\isacharequal}\ del{\isadigit{1}}\ y\ {\isacharparenleft}delall\ x\ zs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}delall\ x\ {\isacharparenleft}delall\ y\ zs{\isacharparenright}\ {\isacharequal}\ delall\ y\ {\isacharparenleft}delall\ x\ zs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}del{\isadigit{1}}\ y\ {\isacharparenleft}replace\ x\ y\ xs{\isacharparenright}\ {\isacharequal}\ del{\isadigit{1}}\ x\ xs{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}delall\ y\ {\isacharparenleft}replace\ x\ y\ xs{\isacharparenright}\ {\isacharequal}\ delall\ x\ xs{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}replace\ x\ y\ {\isacharparenleft}delall\ x\ zs{\isacharparenright}\ {\isacharequal}\ delall\ x\ zs{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}replace\ x\ y\ {\isacharparenleft}delall\ z\ zs{\isacharparenright}\ {\isacharequal}\ delall\ z\ {\isacharparenleft}replace\ x\ y\ zs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}rev{\isacharparenleft}del{\isadigit{1}}\ x\ xs{\isacharparenright}\ {\isacharequal}\ del{\isadigit{1}}\ x\ {\isacharparenleft}rev\ xs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}rev{\isacharparenleft}delall\ x\ xs{\isacharparenright}\ {\isacharequal}\ delall\ x\ {\isacharparenleft}rev\ xs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2001/a1/generated/session.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-\input{Aufgabe1.tex}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2001/a2/Aufgabe2.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-(*<*)
-theory Aufgabe2 = Main:
-(*>*)
-
-subsection {* Trees *}
-
-text{* In the sequel we work with skeletons of binary trees where
-neither the leaves (``tip'') nor the nodes contain any information: *}
-
-datatype tree = Tp | Nd tree tree
-
-text{* Define a function @{term tips} that counts the tips of a
-tree, and a function @{term height} that computes the height of a
-tree.
-
-Complete binary trees of a given height are generated as follows:
-*}
-
-consts cbt :: "nat \<Rightarrow> tree"
-primrec
-"cbt 0 = Tp"
-"cbt(Suc n) = Nd (cbt n) (cbt n)"
-
-text{*
-We will now focus on these complete binary trees.
-
-Instead of generating complete binary trees, we can also \emph{test}
-if a binary tree is complete. Define a function @{term "iscbt f"}
-(where @{term f} is a function on trees) that checks for completeness:
-@{term Tp} is complete and @{term"Nd l r"} ist complete iff @{term l} and
-@{term r} are complete and @{prop"f l = f r"}.
-
-We now have 3 functions on trees, namely @{term tips}, @{term height}
-und @{term size}. The latter is defined automatically --- look it up
-in the tutorial.  Thus we also have 3 kinds of completeness: complete
-wrt.\ @{term tips}, complete wrt.\ @{term height} and complete wrt.\
-@{term size}. Show that
-\begin{itemize}
-\item the 3 notions are the same (e.g.\ @{prop"iscbt tips t = iscbt size t"}),
-      and
-\item the 3 notions describe exactly the trees generated by @{term cbt}:
-the result of @{term cbt} is complete (in the sense of @{term iscbt},
-wrt.\ any function on trees), and if a tree is complete in the sense of
-@{term iscbt}, it is the result of @{term cbt} (applied to a suitable number
---- which one?)
-\end{itemize}
-Find a function @{term f} such that @{prop"iscbt f"} is different from
-@{term"iscbt size"}.
-
-Hints:
-\begin{itemize}
-\item Work out and prove suitable relationships between @{term tips},
-      @{term height} und @{term size}.
-
-\item If you need lemmas dealing only with the basic arithmetic operations
-(@{text"+"}, @{text"*"}, @{text"^"} etc), you can ``prove'' them
-with the command @{text sorry}, if neither @{text arith} nor you can
-find a proof. Not @{text"apply sorry"}, just @{text sorry}.
-
-\item
-You do not need to show that every notion is equal to every other
-notion.  It suffices to show that $A = C$ und $B = C$ --- $A = B$ is a
-trivial consequence. However, the difficulty of the proof will depend
-on which of the equivalences you prove.
-
-\item There is @{text"\<and>"} and @{text"\<longrightarrow>"}.
-\end{itemize}
-*}
-
-(*<*)
-end;
-(*>*)
--- a/doc-src/Exercises/2001/a2/ROOT.ML	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-
-set quick_and_dirty;
-use_thy "Aufgabe2";
-
--- a/doc-src/Exercises/2001/a2/generated/Aufgabe2.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{Aufgabe{\isadigit{2}}}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{Trees%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-In the sequel we work with skeletons of binary trees where
-neither the leaves (``tip'') nor the nodes contain any information:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{datatype}\ tree\ {\isacharequal}\ Tp\ {\isacharbar}\ Nd\ tree\ tree\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Define a function \isa{tips} that counts the tips of a
-tree, and a function \isa{height} that computes the height of a
-tree.
-
-Complete binary trees of a given height are generated as follows:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ cbt\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ {\isasymRightarrow}\ tree{\isachardoublequote}\isanewline
-\isamarkupfalse%
-\isacommand{primrec}\isanewline
-{\isachardoublequote}cbt\ {\isadigit{0}}\ {\isacharequal}\ Tp{\isachardoublequote}\isanewline
-{\isachardoublequote}cbt{\isacharparenleft}Suc\ n{\isacharparenright}\ {\isacharequal}\ Nd\ {\isacharparenleft}cbt\ n{\isacharparenright}\ {\isacharparenleft}cbt\ n{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-We will now focus on these complete binary trees.
-
-Instead of generating complete binary trees, we can also \emph{test}
-if a binary tree is complete. Define a function \isa{iscbt\ f}
-(where \isa{f} is a function on trees) that checks for completeness:
-\isa{Tp} is complete and \isa{Nd\ l\ r} ist complete iff \isa{l} and
-\isa{r} are complete and \isa{f\ l\ {\isacharequal}\ f\ r}.
-
-We now have 3 functions on trees, namely \isa{tips}, \isa{height}
-und \isa{size}. The latter is defined automatically --- look it up
-in the tutorial.  Thus we also have 3 kinds of completeness: complete
-wrt.\ \isa{tips}, complete wrt.\ \isa{height} and complete wrt.\
-\isa{size}. Show that
-\begin{itemize}
-\item the 3 notions are the same (e.g.\ \isa{iscbt\ tips\ t\ {\isacharequal}\ iscbt\ size\ t}),
-      and
-\item the 3 notions describe exactly the trees generated by \isa{cbt}:
-the result of \isa{cbt} is complete (in the sense of \isa{iscbt},
-wrt.\ any function on trees), and if a tree is complete in the sense of
-\isa{iscbt}, it is the result of \isa{cbt} (applied to a suitable number
---- which one?)
-\end{itemize}
-Find a function \isa{f} such that \isa{iscbt\ f} is different from
-\isa{iscbt\ size}.
-
-Hints:
-\begin{itemize}
-\item Work out and prove suitable relationships between \isa{tips},
-      \isa{height} und \isa{size}.
-
-\item If you need lemmas dealing only with the basic arithmetic operations
-(\isa{{\isacharplus}}, \isa{{\isacharasterisk}}, \isa{{\isacharcircum}} etc), you can ``prove'' them
-with the command \isa{sorry}, if neither \isa{arith} nor you can
-find a proof. Not \isa{apply\ sorry}, just \isa{sorry}.
-
-\item
-You do not need to show that every notion is equal to every other
-notion.  It suffices to show that $A = C$ und $B = C$ --- $A = B$ is a
-trivial consequence. However, the difficulty of the proof will depend
-on which of the equivalences you prove.
-
-\item There is \isa{{\isasymand}} and \isa{{\isasymlongrightarrow}}.
-\end{itemize}%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2001/a2/generated/session.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-\input{Aufgabe2.tex}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2001/a3/ROOT.ML	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-
-(* use "../settings.ML";*)
-set quick_and_dirty;
-use_thy "Trie1";
-use_thy "Trie2";
-use_thy "Trie3";
--- a/doc-src/Exercises/2001/a3/Trie1.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-(*<*)
-theory Trie1 = Main:
-(*>*)
-
-subsection {* Tries *}
-
-text {* Section~3.4.4 of \cite{isabelle-tutorial} is a case study
-about so-called \emph{tries}, a data structure for fast indexing with
-strings. Read that section.
-
-The data type of tries over the alphabet type @{typ 'a} und the value
-type @{typ 'v} is defined as follows: *}
-
-datatype ('a, 'v) trie = Trie  "'v option"  "('a * ('a,'v) trie) list";
-
-text {* A trie consists of an optional value and an association list
-that maps letters of the alphabet to subtrees. Type @{typ "'a option"} is
-defined in section~2.5.3 of \cite{isabelle-tutorial}.
-
-There are also two selector functions @{term value} and @{term alist}: *}
-
-consts value :: "('a, 'v) trie \<Rightarrow> 'v option"
-primrec "value (Trie ov al) = ov"; 
-
-consts alist :: "('a, 'v) trie \<Rightarrow> ('a * ('a,'v) trie) list";
-primrec "alist (Trie ov al) = al";
-
-text {* Furthermore there is a function @{term lookup} on tries
-defined with the help of the generic search function @{term assoc} on
-association lists: *}
-
-consts assoc ::  "('key * 'val)list \<Rightarrow> 'key \<Rightarrow> 'val option";
-primrec "assoc [] x = None"
-        "assoc (p#ps) x =
-           (let (a, b) = p in if a = x then Some b else assoc ps x)";
-
-consts lookup :: "('a, 'v) trie \<Rightarrow> 'a list \<Rightarrow> 'v option";
-primrec "lookup t [] = value t"
-        "lookup t (a#as) = (case assoc (alist t) a of
-                              None \<Rightarrow> None
-                            | Some at \<Rightarrow> lookup at as)";
-
-text {* Finally, @{term update} updates the value associated with some
-string with a new value, overwriting the old one: *}
-
-consts update :: "('a, 'v) trie \<Rightarrow> 'a list \<Rightarrow> 'v \<Rightarrow> ('a, 'v) trie";
-primrec
-  "update t []     v = Trie (Some v) (alist t)"
-  "update t (a#as) v =
-     (let tt = (case assoc (alist t) a of
-                  None \<Rightarrow> Trie None [] 
-                | Some at \<Rightarrow> at)
-      in Trie (value t) ((a, update tt as v) # alist t))";
-
-text {* The following theorem tells us that @{term update} behaves as
-expected: *}
-
-theorem "\<forall>t v bs. lookup (update t as v) bs =
-                    (if as = bs then Some v else lookup t bs)"
-(*<*)oops(*>*)
-
-text {* As a warming up exercise, define a function *}
-
-consts modify :: "('a, 'v) trie \<Rightarrow> 'a list \<Rightarrow> 'v option \<Rightarrow> ('a, 'v) trie"
-
-text{* for inserting as well as deleting elements from a trie. Show
-that @{term modify} satisfies a suitably modified version of the
-correctness theorem for @{term update}.  *}
-
-(*<*)
-end;
-(*>*)
--- a/doc-src/Exercises/2001/a3/Trie2.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-(*<*)
-theory Trie2 = Main:
-(*>*)
-
-text {* Die above definition of @{term update} has the disadvantage
-that it often creates junk: each association list it passes through is
-extended at the left end with a new (letter,value) pair without
-removing any old association of that letter which may already be
-present.  Logically, such cleaning up is unnecessary because @{term
-assoc} always searches the list from the left. However, it constitutes
-a space leak: the old associations cannot be garbage collected because
-physically they are still reachable. This problem can be solved by
-means of a function *}
-
-consts overwrite :: "'a \<Rightarrow> 'b \<Rightarrow> ('a * 'b) list \<Rightarrow> ('a * 'b) list"
-
-text {* that does not just add new pairs at the front but replaces old
-associations by new pairs if possible.
-
-Define @{term overwrite}, modify @{term modify} to employ @{term
-overwrite}, and show the same relationship between @{term modify} and
-@{term lookup} as before. *}
-
-(*<*)
-end;
-(*>*)
--- a/doc-src/Exercises/2001/a3/Trie3.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-(*<*)
-theory Trie3 = Main:
-(*>*)
-
-text {* Instead of association lists we can also use partial functions
-that map letters to subtrees. Partiality can be modelled with the help
-of type @{typ "'a option"}: if @{term f} is a function of type
-\mbox{@{typ "'a \<Rightarrow> 'b option"}}, set @{term "f a = Some b"}
-if @{term a} should be mapped to some @{term b} and set @{term "f a =
-None"} otherwise.  *}
-
-datatype ('a, 'v) trie = Trie  "'v option" "'a \<Rightarrow> ('a,'v) trie option";
-
-text{* Modify the definitions of @{term lookup} and @{term modify}
-accordingly and show the same correctness theorem as above. *}
-
-(*<*)
-end;
-(*>*)
--- a/doc-src/Exercises/2001/a3/generated/Trie1.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{Trie{\isadigit{1}}}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{Tries%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Section~3.4.4 of \cite{isabelle-tutorial} is a case study
-about so-called \emph{tries}, a data structure for fast indexing with
-strings. Read that section.
-
-The data type of tries over the alphabet type \isa{{\isacharprime}a} und the value
-type \isa{{\isacharprime}v} is defined as follows:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{datatype}\ {\isacharparenleft}{\isacharprime}a{\isacharcomma}\ {\isacharprime}v{\isacharparenright}\ trie\ {\isacharequal}\ Trie\ \ {\isachardoublequote}{\isacharprime}v\ option{\isachardoublequote}\ \ {\isachardoublequote}{\isacharparenleft}{\isacharprime}a\ {\isacharasterisk}\ {\isacharparenleft}{\isacharprime}a{\isacharcomma}{\isacharprime}v{\isacharparenright}\ trie{\isacharparenright}\ list{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-A trie consists of an optional value and an association list
-that maps letters of the alphabet to subtrees. Type \isa{{\isacharprime}a\ option} is
-defined in section~2.5.3 of \cite{isabelle-tutorial}.
-
-There are also two selector functions \isa{value} and \isa{alist}:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ value\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}{\isacharprime}a{\isacharcomma}\ {\isacharprime}v{\isacharparenright}\ trie\ {\isasymRightarrow}\ {\isacharprime}v\ option{\isachardoublequote}\isanewline
-\isamarkupfalse%
-\isacommand{primrec}\ {\isachardoublequote}value\ {\isacharparenleft}Trie\ ov\ al{\isacharparenright}\ {\isacharequal}\ ov{\isachardoublequote}\ \isanewline
-\isanewline
-\isamarkupfalse%
-\isacommand{consts}\ alist\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}{\isacharprime}a{\isacharcomma}\ {\isacharprime}v{\isacharparenright}\ trie\ {\isasymRightarrow}\ {\isacharparenleft}{\isacharprime}a\ {\isacharasterisk}\ {\isacharparenleft}{\isacharprime}a{\isacharcomma}{\isacharprime}v{\isacharparenright}\ trie{\isacharparenright}\ list{\isachardoublequote}\isanewline
-\isamarkupfalse%
-\isacommand{primrec}\ {\isachardoublequote}alist\ {\isacharparenleft}Trie\ ov\ al{\isacharparenright}\ {\isacharequal}\ al{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Furthermore there is a function \isa{lookup} on tries
-defined with the help of the generic search function \isa{assoc} on
-association lists:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ assoc\ {\isacharcolon}{\isacharcolon}\ \ {\isachardoublequote}{\isacharparenleft}{\isacharprime}key\ {\isacharasterisk}\ {\isacharprime}val{\isacharparenright}list\ {\isasymRightarrow}\ {\isacharprime}key\ {\isasymRightarrow}\ {\isacharprime}val\ option{\isachardoublequote}\isanewline
-\isamarkupfalse%
-\isacommand{primrec}\ {\isachardoublequote}assoc\ {\isacharbrackleft}{\isacharbrackright}\ x\ {\isacharequal}\ None{\isachardoublequote}\isanewline
-\ \ \ \ \ \ \ \ {\isachardoublequote}assoc\ {\isacharparenleft}p{\isacharhash}ps{\isacharparenright}\ x\ {\isacharequal}\isanewline
-\ \ \ \ \ \ \ \ \ \ \ {\isacharparenleft}let\ {\isacharparenleft}a{\isacharcomma}\ b{\isacharparenright}\ {\isacharequal}\ p\ in\ if\ a\ {\isacharequal}\ x\ then\ Some\ b\ else\ assoc\ ps\ x{\isacharparenright}{\isachardoublequote}\isanewline
-\isanewline
-\isamarkupfalse%
-\isacommand{consts}\ lookup\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}{\isacharprime}a{\isacharcomma}\ {\isacharprime}v{\isacharparenright}\ trie\ {\isasymRightarrow}\ {\isacharprime}a\ list\ {\isasymRightarrow}\ {\isacharprime}v\ option{\isachardoublequote}\isanewline
-\isamarkupfalse%
-\isacommand{primrec}\ {\isachardoublequote}lookup\ t\ {\isacharbrackleft}{\isacharbrackright}\ {\isacharequal}\ value\ t{\isachardoublequote}\isanewline
-\ \ \ \ \ \ \ \ {\isachardoublequote}lookup\ t\ {\isacharparenleft}a{\isacharhash}as{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}case\ assoc\ {\isacharparenleft}alist\ t{\isacharparenright}\ a\ of\isanewline
-\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ None\ {\isasymRightarrow}\ None\isanewline
-\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isacharbar}\ Some\ at\ {\isasymRightarrow}\ lookup\ at\ as{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Finally, \isa{update} updates the value associated with some
-string with a new value, overwriting the old one:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ update\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}{\isacharprime}a{\isacharcomma}\ {\isacharprime}v{\isacharparenright}\ trie\ {\isasymRightarrow}\ {\isacharprime}a\ list\ {\isasymRightarrow}\ {\isacharprime}v\ {\isasymRightarrow}\ {\isacharparenleft}{\isacharprime}a{\isacharcomma}\ {\isacharprime}v{\isacharparenright}\ trie{\isachardoublequote}\isanewline
-\isamarkupfalse%
-\isacommand{primrec}\isanewline
-\ \ {\isachardoublequote}update\ t\ {\isacharbrackleft}{\isacharbrackright}\ \ \ \ \ v\ {\isacharequal}\ Trie\ {\isacharparenleft}Some\ v{\isacharparenright}\ {\isacharparenleft}alist\ t{\isacharparenright}{\isachardoublequote}\isanewline
-\ \ {\isachardoublequote}update\ t\ {\isacharparenleft}a{\isacharhash}as{\isacharparenright}\ v\ {\isacharequal}\isanewline
-\ \ \ \ \ {\isacharparenleft}let\ tt\ {\isacharequal}\ {\isacharparenleft}case\ assoc\ {\isacharparenleft}alist\ t{\isacharparenright}\ a\ of\isanewline
-\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ None\ {\isasymRightarrow}\ Trie\ None\ {\isacharbrackleft}{\isacharbrackright}\ \isanewline
-\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isacharbar}\ Some\ at\ {\isasymRightarrow}\ at{\isacharparenright}\isanewline
-\ \ \ \ \ \ in\ Trie\ {\isacharparenleft}value\ t{\isacharparenright}\ {\isacharparenleft}{\isacharparenleft}a{\isacharcomma}\ update\ tt\ as\ v{\isacharparenright}\ {\isacharhash}\ alist\ t{\isacharparenright}{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-The following theorem tells us that \isa{update} behaves as
-expected:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{theorem}\ {\isachardoublequote}{\isasymforall}t\ v\ bs{\isachardot}\ lookup\ {\isacharparenleft}update\ t\ as\ v{\isacharparenright}\ bs\ {\isacharequal}\isanewline
-\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isacharparenleft}if\ as\ {\isacharequal}\ bs\ then\ Some\ v\ else\ lookup\ t\ bs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-As a warming up exercise, define a function%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ modify\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}{\isacharprime}a{\isacharcomma}\ {\isacharprime}v{\isacharparenright}\ trie\ {\isasymRightarrow}\ {\isacharprime}a\ list\ {\isasymRightarrow}\ {\isacharprime}v\ option\ {\isasymRightarrow}\ {\isacharparenleft}{\isacharprime}a{\isacharcomma}\ {\isacharprime}v{\isacharparenright}\ trie{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-for inserting as well as deleting elements from a trie. Show
-that \isa{modify} satisfies a suitably modified version of the
-correctness theorem for \isa{update}.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2001/a3/generated/Trie2.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{Trie{\isadigit{2}}}%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Die above definition of \isa{update} has the disadvantage
-that it often creates junk: each association list it passes through is
-extended at the left end with a new (letter,value) pair without
-removing any old association of that letter which may already be
-present.  Logically, such cleaning up is unnecessary because \isa{assoc} always searches the list from the left. However, it constitutes
-a space leak: the old associations cannot be garbage collected because
-physically they are still reachable. This problem can be solved by
-means of a function%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ overwrite\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}b\ {\isasymRightarrow}\ {\isacharparenleft}{\isacharprime}a\ {\isacharasterisk}\ {\isacharprime}b{\isacharparenright}\ list\ {\isasymRightarrow}\ {\isacharparenleft}{\isacharprime}a\ {\isacharasterisk}\ {\isacharprime}b{\isacharparenright}\ list{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-that does not just add new pairs at the front but replaces old
-associations by new pairs if possible.
-
-Define \isa{overwrite}, modify \isa{modify} to employ \isa{overwrite}, and show the same relationship between \isa{modify} and
-\isa{lookup} as before.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2001/a3/generated/Trie3.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{Trie{\isadigit{3}}}%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Instead of association lists we can also use partial functions
-that map letters to subtrees. Partiality can be modelled with the help
-of type \isa{{\isacharprime}a\ option}: if \isa{f} is a function of type
-\mbox{\isa{{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}b\ option}}, set \isa{f\ a\ {\isacharequal}\ Some\ b}
-if \isa{a} should be mapped to some \isa{b} and set \isa{f\ a\ {\isacharequal}\ None} otherwise.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{datatype}\ {\isacharparenleft}{\isacharprime}a{\isacharcomma}\ {\isacharprime}v{\isacharparenright}\ trie\ {\isacharequal}\ Trie\ \ {\isachardoublequote}{\isacharprime}v\ option{\isachardoublequote}\ {\isachardoublequote}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharparenleft}{\isacharprime}a{\isacharcomma}{\isacharprime}v{\isacharparenright}\ trie\ option{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Modify the definitions of \isa{lookup} and \isa{modify}
-accordingly and show the same correctness theorem as above.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2001/a3/generated/session.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-\input{Trie1.tex}
-
-\input{Trie2.tex}
-
-\input{Trie3.tex}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2001/a5/Aufgabe5.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-(*<*)
-theory Aufgabe5 = Main:
-(*>*)
-
-subsection {* Interval lists *}
-
-
-text {* Sets of natural numbers can be implemented as lists of
-intervals, where an interval is simply a pair of numbers. For example
-the set @{term "{2, 3, 5, 7, 8, 9::nat}"} can be represented by the
-list @{term "[(2, 3), (5, 5), (7::nat,9::nat)]"}. A typical application
-is the list of free blocks of dynamically allocated memory. *}
-
-subsubsection {* Definitions *} 
-
-text {* We introduce the type *}
-
-types intervals = "(nat*nat) list" 
-
-text {* This type contains all possible lists of pairs of natural
-numbers, even those that we may not recognize as meaningful
-representations of sets. Thus you should introduce an \emph{invariant} *}
-
-consts inv :: "intervals => bool"
-
-text {* that characterizes exactly those interval lists representing
-sets.  (The reason why we call this an invariant will become clear
-below.)  For efficiency reasons intervals should be sorted in
-ascending order, the lower bound of each interval should be less or
-equal the upper bound, and the intervals should be chosen as large as
-possible, i.e.\ no two adjecent intervals should overlap or even touch
-each other.  It turns out to be convenient to define @{term inv} in
-terms of a more general function *}
-
-consts inv2 :: "nat => intervals => bool"
-
-text {* such that the additional argument is a lower bound for the
-intervals in the list.
-
-To relate intervals back to sets define an \emph{abstraktion funktion}  *} 
-
-consts set_of :: "intervals => nat set"
-
-text {* that yields the set corresponding to an interval list (that
-satisfies the invariant).
-
-Finally, define two primitive recursive functions
-*}
-
-consts add :: "(nat*nat) => intervals => intervals"
-       rem :: "(nat*nat) => intervals => intervals"
-
-text {* for inserting and deleting an interval from an interval
-list. The result should again satisfies the invariant. Hence the name:
-@{text inv} is invariant under the application of the operations
-@{term add} and @{term rem} --- if @{text inv} holds for the input, it
-must also hold for the output.
-*}
-
-subsubsection {* Proving the invariant *}
-
-declare Let_def [simp]
-declare split_split [split]
-
-text {* Start off by proving the monotonicity of @{term inv2}: *}
-
-lemma inv2_monotone: "inv2 m ins \<Longrightarrow> n\<le>m \<Longrightarrow> inv2 n ins"
-(*<*)oops(*>*)
-
-text {*
-Now show that @{term add} and @{term rem} preserve the invariant:
-*}
-
-theorem inv_add: "\<lbrakk> i\<le>j; inv ins \<rbrakk> \<Longrightarrow> inv (add (i,j) ins)"
-(*<*)oops(*>*)
-
-theorem inv_rem: "\<lbrakk> i\<le>j; inv ins \<rbrakk> \<Longrightarrow> inv (rem (i,j) ins)"
-(*<*)oops(*>*)
-
-text {* Hint: you should first prove a more general statement
-(involving @{term inv2}). This will probably involve some advanced
-forms of induction discussed in section~9.3.1 of
-\cite{isabelle-tutorial}.  *}
-
-
-subsubsection {* Proving correctness of the implementation *}
-
-text {* Show the correctness of @{term add} and @{term rem} wrt.\
-their counterparts @{text"\<union>"} and @{text"-"} on sets: *}
-
-theorem set_of_add: 
-  "\<lbrakk> i\<le>j; inv ins \<rbrakk> \<Longrightarrow> set_of (add (i,j) ins) = set_of [(i,j)] \<union> set_of ins"
-(*<*)oops(*>*)
-
-theorem set_of_rem:
-  "\<lbrakk> i \<le> j; inv ins \<rbrakk> \<Longrightarrow> set_of (rem (i,j) ins) = set_of ins - set_of [(i,j)]"
-(*<*)oops(*>*)
-
-text {* Hints: in addition to the hints above, you may also find it
-useful to prove some relationship between @{term inv2} and @{term
-set_of} as a lemma.  *}
-
-subsubsection{* General hints *}
-
-text {* 
-\begin{itemize}
-
-\item You should be familiar both with simplification and predicate
-calculus reasoning. Automatic tactics like @{text blast} and @{text
-force} can simplify the proof.
-
-\item
-Equality of two sets can often be proved via the rule @{text set_ext}:
-@{thm[display] set_ext[of A B,no_vars]}
-
-\item 
-Potentially useful theorems for the simplification of sets include \\
-@{text "Un_Diff:"}~@{thm Un_Diff [no_vars]} \\
-@{text "Diff_triv:"}~@{thm Diff_triv [no_vars]}.
-
-\item 
-Theorems can be instantiated and simplified via @{text of} and
-@{text "[simplified]"} (see \cite{isabelle-tutorial}).
-\end{itemize}
-*}(*<*)
-end
-(*>*)
--- a/doc-src/Exercises/2001/a5/ROOT.ML	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-use_thy "Aufgabe5";
-
--- a/doc-src/Exercises/2001/a5/generated/Aufgabe5.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,165 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{Aufgabe{\isadigit{5}}}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{Interval lists%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Sets of natural numbers can be implemented as lists of
-intervals, where an interval is simply a pair of numbers. For example
-the set \isa{{\isacharbraceleft}{\isadigit{2}}{\isacharcomma}\ {\isadigit{3}}{\isacharcomma}\ {\isadigit{5}}{\isacharcomma}\ {\isadigit{7}}{\isacharcomma}\ {\isadigit{8}}{\isacharcomma}\ {\isadigit{9}}{\isacharbraceright}} can be represented by the
-list \isa{{\isacharbrackleft}{\isacharparenleft}{\isadigit{2}}{\isacharcomma}\ {\isadigit{3}}{\isacharparenright}{\isacharcomma}\ {\isacharparenleft}{\isadigit{5}}{\isacharcomma}\ {\isadigit{5}}{\isacharparenright}{\isacharcomma}\ {\isacharparenleft}{\isadigit{7}}{\isacharcomma}\ {\isadigit{9}}{\isacharparenright}{\isacharbrackright}}. A typical application
-is the list of free blocks of dynamically allocated memory.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\isamarkupsubsubsection{Definitions%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-We introduce the type%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{types}\ intervals\ {\isacharequal}\ {\isachardoublequote}{\isacharparenleft}nat{\isacharasterisk}nat{\isacharparenright}\ list{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-This type contains all possible lists of pairs of natural
-numbers, even those that we may not recognize as meaningful
-representations of sets. Thus you should introduce an \emph{invariant}%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ inv\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}intervals\ {\isacharequal}{\isachargreater}\ bool{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-that characterizes exactly those interval lists representing
-sets.  (The reason why we call this an invariant will become clear
-below.)  For efficiency reasons intervals should be sorted in
-ascending order, the lower bound of each interval should be less or
-equal the upper bound, and the intervals should be chosen as large as
-possible, i.e.\ no two adjecent intervals should overlap or even touch
-each other.  It turns out to be convenient to define \isa{Aufgabe{\isadigit{5}}{\isachardot}inv} in
-terms of a more general function%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ inv{\isadigit{2}}\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ {\isacharequal}{\isachargreater}\ intervals\ {\isacharequal}{\isachargreater}\ bool{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-such that the additional argument is a lower bound for the
-intervals in the list.
-
-To relate intervals back to sets define an \emph{abstraktion funktion}%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ set{\isacharunderscore}of\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}intervals\ {\isacharequal}{\isachargreater}\ nat\ set{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-that yields the set corresponding to an interval list (that
-satisfies the invariant).
-
-Finally, define two primitive recursive functions%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ add\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}nat{\isacharasterisk}nat{\isacharparenright}\ {\isacharequal}{\isachargreater}\ intervals\ {\isacharequal}{\isachargreater}\ intervals{\isachardoublequote}\isanewline
-\ \ \ \ \ \ \ rem\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}nat{\isacharasterisk}nat{\isacharparenright}\ {\isacharequal}{\isachargreater}\ intervals\ {\isacharequal}{\isachargreater}\ intervals{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-for inserting and deleting an interval from an interval
-list. The result should again satisfies the invariant. Hence the name:
-\isa{inv} is invariant under the application of the operations
-\isa{add} and \isa{rem} --- if \isa{inv} holds for the input, it
-must also hold for the output.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\isamarkupsubsubsection{Proving the invariant%
-}
-\isamarkuptrue%
-\isacommand{declare}\ Let{\isacharunderscore}def\ {\isacharbrackleft}simp{\isacharbrackright}\isanewline
-\isamarkupfalse%
-\isacommand{declare}\ split{\isacharunderscore}split\ {\isacharbrackleft}split{\isacharbrackright}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Start off by proving the monotonicity of \isa{inv{\isadigit{2}}}:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ inv{\isadigit{2}}{\isacharunderscore}monotone{\isacharcolon}\ {\isachardoublequote}inv{\isadigit{2}}\ m\ ins\ {\isasymLongrightarrow}\ n{\isasymle}m\ {\isasymLongrightarrow}\ inv{\isadigit{2}}\ n\ ins{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Now show that \isa{add} and \isa{rem} preserve the invariant:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{theorem}\ inv{\isacharunderscore}add{\isacharcolon}\ {\isachardoublequote}{\isasymlbrakk}\ i{\isasymle}j{\isacharsemicolon}\ inv\ ins\ {\isasymrbrakk}\ {\isasymLongrightarrow}\ inv\ {\isacharparenleft}add\ {\isacharparenleft}i{\isacharcomma}j{\isacharparenright}\ ins{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ inv{\isacharunderscore}rem{\isacharcolon}\ {\isachardoublequote}{\isasymlbrakk}\ i{\isasymle}j{\isacharsemicolon}\ inv\ ins\ {\isasymrbrakk}\ {\isasymLongrightarrow}\ inv\ {\isacharparenleft}rem\ {\isacharparenleft}i{\isacharcomma}j{\isacharparenright}\ ins{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Hint: you should first prove a more general statement
-(involving \isa{inv{\isadigit{2}}}). This will probably involve some advanced
-forms of induction discussed in section~9.3.1 of
-\cite{isabelle-tutorial}.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\isamarkupsubsubsection{Proving correctness of the implementation%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Show the correctness of \isa{add} and \isa{rem} wrt.\
-their counterparts \isa{{\isasymunion}} and \isa{{\isacharminus}} on sets:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{theorem}\ set{\isacharunderscore}of{\isacharunderscore}add{\isacharcolon}\ \isanewline
-\ \ {\isachardoublequote}{\isasymlbrakk}\ i{\isasymle}j{\isacharsemicolon}\ inv\ ins\ {\isasymrbrakk}\ {\isasymLongrightarrow}\ set{\isacharunderscore}of\ {\isacharparenleft}add\ {\isacharparenleft}i{\isacharcomma}j{\isacharparenright}\ ins{\isacharparenright}\ {\isacharequal}\ set{\isacharunderscore}of\ {\isacharbrackleft}{\isacharparenleft}i{\isacharcomma}j{\isacharparenright}{\isacharbrackright}\ {\isasymunion}\ set{\isacharunderscore}of\ ins{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ set{\isacharunderscore}of{\isacharunderscore}rem{\isacharcolon}\isanewline
-\ \ {\isachardoublequote}{\isasymlbrakk}\ i\ {\isasymle}\ j{\isacharsemicolon}\ inv\ ins\ {\isasymrbrakk}\ {\isasymLongrightarrow}\ set{\isacharunderscore}of\ {\isacharparenleft}rem\ {\isacharparenleft}i{\isacharcomma}j{\isacharparenright}\ ins{\isacharparenright}\ {\isacharequal}\ set{\isacharunderscore}of\ ins\ {\isacharminus}\ set{\isacharunderscore}of\ {\isacharbrackleft}{\isacharparenleft}i{\isacharcomma}j{\isacharparenright}{\isacharbrackright}{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Hints: in addition to the hints above, you may also find it
-useful to prove some relationship between \isa{inv{\isadigit{2}}} and \isa{set{\isacharunderscore}of} as a lemma.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\isamarkupsubsubsection{General hints%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-\begin{itemize}
-
-\item You should be familiar both with simplification and predicate
-calculus reasoning. Automatic tactics like \isa{blast} and \isa{force} can simplify the proof.
-
-\item
-Equality of two sets can often be proved via the rule \isa{set{\isacharunderscore}ext}:
-\begin{isabelle}%
-{\isacharparenleft}{\isasymAnd}x{\isachardot}\ {\isacharparenleft}x\ {\isasymin}\ A{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}x\ {\isasymin}\ B{\isacharparenright}{\isacharparenright}\ {\isasymLongrightarrow}\ A\ {\isacharequal}\ B%
-\end{isabelle}
-
-\item 
-Potentially useful theorems for the simplification of sets include \\
-\isa{Un{\isacharunderscore}Diff{\isacharcolon}}~\isa{A\ {\isasymunion}\ B\ {\isacharminus}\ C\ {\isacharequal}\ A\ {\isacharminus}\ C\ {\isasymunion}\ {\isacharparenleft}B\ {\isacharminus}\ C{\isacharparenright}} \\
-\isa{Diff{\isacharunderscore}triv{\isacharcolon}}~\isa{A\ {\isasyminter}\ B\ {\isacharequal}\ {\isacharbraceleft}{\isacharbraceright}\ {\isasymLongrightarrow}\ A\ {\isacharminus}\ B\ {\isacharequal}\ A}.
-
-\item 
-Theorems can be instantiated and simplified via \isa{of} and
-\isa{{\isacharbrackleft}simplified{\isacharbrackright}} (see \cite{isabelle-tutorial}).
-\end{itemize}%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2001/a5/generated/session.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-\input{Aufgabe5.tex}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2002/IsaMakefile	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-#
-# $Id$
-#
-# IsaMakefile for PSV2002
-#
-
-SESSIONS = a1 a2 a3 a5 a6
-
-## targets
-
-default: clean sessions
-sessions: $(SESSIONS)
-# all: sessions 
-
-
-## global settings
-
-
-SRC = $(ISABELLE_HOME)/src
-OUT = $(ISABELLE_OUTPUT)
-LOG = $(OUT)/log
-INFO = $(ISABELLE_BROWSER_INFO)
-USEDIR = $(ISATOOL) usedir -v true -i false -d false -D generated
-RSYNC = rsync --rsh ssh --rsync-path /usr/local/dist/bin/rsync
-WWW = www4.in.tum.de:/home/html/wbroy/html-data/lehre/praktika/psv
-
-
-# reomve old log files
-clean:
-	rm -f $(LOG)/HOL-a?.gz $(LOG)/HOL-l?.gz
-
-## provide style.tex
-
-style:
-	@for D in $(SESSIONS); do test -d $$D/document && { test -r $$D/document/style.tex || ln -s ../../style.tex $$D/document/style.tex; } done;
-
-
-## a1
-
-a1: a1/generated/session.tex
-
-a1/generated/session.tex: a1/ROOT.ML \
-  a1/*.thy
-	@$(USEDIR) HOL a1
-
-## a2
-
-a2: a2/generated/session.tex
-
-a2/generated/session.tex: a2/ROOT.ML \
-  a2/*.thy
-	@$(USEDIR) HOL a2
-
-## a3
-
-a3: a3/generated/session.tex
-
-a3/generated/session.tex: a3/ROOT.ML \
-  a3/*.thy
-	@$(USEDIR) HOL a3
-
-## a5
-
-a5: a5/generated/session.tex
-
-a5/generated/session.tex: a5/ROOT.ML \
-  a5/*.thy
-	@$(USEDIR) HOL a5
-
-## a6
-
-a6: a6/generated/session.tex
-
-a6/generated/session.tex: a6/ROOT.ML \
-  a6/*.thy
-	@$(USEDIR) HOL a6
--- a/doc-src/Exercises/2002/Makefile	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-#
-# $Id$
-#
-# IsaMakefile for PSV2002
-#
-
-SESSIONS = a1 a2 a3 a5 a6
-
-## targets
-
-default: sessions
-sessions: $(SESSIONS)
-
-
-## a1
-
-a1: a1/generated/session.tex
-
-a1/generated/session.tex: a1/ROOT.ML a1/*.thy
-	isatool make
-
-## a2
-
-a2: a2/generated/session.tex
-
-a2/generated/session.tex: a2/ROOT.ML a2/*.thy
-	isatool make
-
-## a3
-
-a3: a3/generated/session.tex
-
-a3/generated/session.tex: a3/ROOT.ML a3/*.thy
-	isatool make
-
-## a5
-
-a5: a5/generated/session.tex
-
-a5/generated/session.tex: a5/ROOT.ML a5/*.thy
-	isatool make
-
-## a6
-
-a6: a6/generated/session.tex
-
-a6/generated/session.tex: a6/ROOT.ML a6/*.thy
-	isatool make
--- a/doc-src/Exercises/2002/a1/ROOT.ML	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-  use_thy "a1";
--- a/doc-src/Exercises/2002/a1/a1.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +0,0 @@
-(*<*)
-theory a1 = Main:
-(*>*)
-subsection {* Lists *}
-
-text {* Define a universal and an existential quantifier on lists.
-Expression @{term "alls P xs"} should be true iff @{term "P x"} holds
-for every element @{term x} of @{term xs}, and @{term "exs P xs"}
-should be true iff @{term "P x"} holds for some element @{term x} of
-@{term xs}.
-*}
-consts 
-  alls :: "('a \<Rightarrow> bool) \<Rightarrow> 'a list \<Rightarrow> bool"
-  exs  :: "('a \<Rightarrow> bool) \<Rightarrow> 'a list \<Rightarrow> bool"
-
-text {*
-Prove or disprove (by counter example) the following theorems.
-You may have to prove some lemmas first.
-
-Use the @{text "[simp]"}-attribute only if the equation is truly a
-simplification and is necessary for some later proof.
-*}
-
-lemma "alls (\<lambda>x. P x \<and> Q x) xs = (alls P xs \<and> alls Q xs)"
-(*<*)oops(*>*)
-
-lemma "alls P (rev xs) = alls P xs"
-(*<*)oops(*>*)
-
-lemma "exs (\<lambda>x. P x \<and> Q x) xs = (exs P xs \<and> exs Q xs)"
-(*<*)oops(*>*)
-
-lemma "exs P (map f xs) = exs (P o f) xs"
-(*<*)oops(*>*)
-
-lemma "exs P (rev xs) = exs P xs"
-(*<*)oops(*>*)
-
-text {* Find a term @{text Z} such that the following equation holds: *}
-lemma "exs (\<lambda>x. P x \<or> Q x) xs = Z"
-(*<*)oops(*>*)
-
-text {* Express the existential via the universal quantifier ---
-@{text exs} should not occur on the right-hand side: *}
-lemma "exs P xs = Z"
-(*<*)oops(*>*)
-
-text {*
-Define a function @{term "is_in x xs"} that checks if @{term x} occurs in
-@{term xs}. Now express @{text is_in} via @{term exs}:
-*}
-lemma "is_in a xs = Z"
-(*<*)oops(*>*)
-
-text {* Define a function @{term "nodups xs"} that is true iff
-@{term xs} does not contain duplicates, and a function @{term "deldups
-xs"} that removes all duplicates. Note that @{term "deldups[x,y,x]"}
-(where @{term x} and @{term y} are distinct) can be either
-@{term "[x,y]"} or @{term "[y,x]"}.
-
-Prove or disprove (by counter example) the following theorems.
-*}
-lemma "length (deldups xs) <= length xs"
-(*<*)oops(*>*)
-
-lemma "nodups (deldups xs)"
-(*<*)oops(*>*)
-
-lemma "deldups (rev xs) = rev (deldups xs)"
-(*<*)oops(*>*)
-
-(*<*)
-end
-(*>*)
--- a/doc-src/Exercises/2002/a1/generated/a1.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{a{\isadigit{1}}}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{Lists%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Define a universal and an existential quantifier on lists.
-Expression \isa{alls\ P\ xs} should be true iff \isa{P\ x} holds
-for every element \isa{x} of \isa{xs}, and \isa{exs\ P\ xs}
-should be true iff \isa{P\ x} holds for some element \isa{x} of
-\isa{xs}.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ \isanewline
-\ \ alls\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}{\isacharprime}a\ {\isasymRightarrow}\ bool{\isacharparenright}\ {\isasymRightarrow}\ {\isacharprime}a\ list\ {\isasymRightarrow}\ bool{\isachardoublequote}\isanewline
-\ \ exs\ \ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}{\isacharprime}a\ {\isasymRightarrow}\ bool{\isacharparenright}\ {\isasymRightarrow}\ {\isacharprime}a\ list\ {\isasymRightarrow}\ bool{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Prove or disprove (by counter example) the following theorems.
-You may have to prove some lemmas first.
-
-Use the \isa{{\isacharbrackleft}simp{\isacharbrackright}}-attribute only if the equation is truly a
-simplification and is necessary for some later proof.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isachardoublequote}alls\ {\isacharparenleft}{\isasymlambda}x{\isachardot}\ P\ x\ {\isasymand}\ Q\ x{\isacharparenright}\ xs\ {\isacharequal}\ {\isacharparenleft}alls\ P\ xs\ {\isasymand}\ alls\ Q\ xs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}alls\ P\ {\isacharparenleft}rev\ xs{\isacharparenright}\ {\isacharequal}\ alls\ P\ xs{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}exs\ {\isacharparenleft}{\isasymlambda}x{\isachardot}\ P\ x\ {\isasymand}\ Q\ x{\isacharparenright}\ xs\ {\isacharequal}\ {\isacharparenleft}exs\ P\ xs\ {\isasymand}\ exs\ Q\ xs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}exs\ P\ {\isacharparenleft}map\ f\ xs{\isacharparenright}\ {\isacharequal}\ exs\ {\isacharparenleft}P\ o\ f{\isacharparenright}\ xs{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}exs\ P\ {\isacharparenleft}rev\ xs{\isacharparenright}\ {\isacharequal}\ exs\ P\ xs{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Find a term \isa{Z} such that the following equation holds:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isachardoublequote}exs\ {\isacharparenleft}{\isasymlambda}x{\isachardot}\ P\ x\ {\isasymor}\ Q\ x{\isacharparenright}\ xs\ {\isacharequal}\ Z{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Express the existential via the universal quantifier ---
-\isa{exs} should not occur on the right-hand side:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isachardoublequote}exs\ P\ xs\ {\isacharequal}\ Z{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Define a function \isa{is{\isacharunderscore}in\ x\ xs} that checks if \isa{x} occurs in
-\isa{xs}. Now express \isa{is{\isacharunderscore}in} via \isa{exs}:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isachardoublequote}is{\isacharunderscore}in\ a\ xs\ {\isacharequal}\ Z{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Define a function \isa{nodups\ xs} that is true iff
-\isa{xs} does not contain duplicates, and a function \isa{deldups\ xs} that removes all duplicates. Note that \isa{deldups\ {\isacharbrackleft}x{\isacharcomma}\ y{\isacharcomma}\ x{\isacharbrackright}}
-(where \isa{x} and \isa{y} are distinct) can be either
-\isa{{\isacharbrackleft}x{\isacharcomma}\ y{\isacharbrackright}} or \isa{{\isacharbrackleft}y{\isacharcomma}\ x{\isacharbrackright}}.
-
-Prove or disprove (by counter example) the following theorems.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isachardoublequote}length\ {\isacharparenleft}deldups\ xs{\isacharparenright}\ {\isacharless}{\isacharequal}\ length\ xs{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}nodups\ {\isacharparenleft}deldups\ xs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{lemma}\ {\isachardoublequote}deldups\ {\isacharparenleft}rev\ xs{\isacharparenright}\ {\isacharequal}\ rev\ {\isacharparenleft}deldups\ xs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2002/a1/generated/session.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-\input{a1.tex}
-
-%%% Local Variables: 
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2002/a2/ROOT.ML	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-use_thy "a2";
--- a/doc-src/Exercises/2002/a2/a2.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,113 +0,0 @@
-(*<*)
-theory a2 = Main:
-(*>*)
-subsection {* Sorting \label{psv2002a2} *}
-
-text{* For simplicity we sort natural numbers. *}
-
-subsubsection{* Sorting with lists*}
-
-text {*
-The task is to define insertion sort and prove its correctness.
-The following functions are required:
-*}
-
-consts 
-  insort :: "nat \<Rightarrow> nat list \<Rightarrow> nat list"
-  sort   :: "nat list \<Rightarrow> nat list"
-  le     :: "nat \<Rightarrow> nat list \<Rightarrow> bool"
-  sorted :: "nat list \<Rightarrow> bool"
-
-text {* In your definition, @{term "insort x xs"} should insert a
-number @{term x} into an already sorted list @{text xs}, and @{term
-"sort ys"} should build on @{text insort} to produce the sorted
-version of @{text ys}.
-
-To show that the resulting list is indeed sorted we need a predicate
-@{term sorted} that checks if each element in the list is less or equal
-to the following ones; @{term "le n xs"} should be true iff
-@{term n} is less or equal to all elements of @{text xs}.
-
-Start out by showing a monotonicity property of @{term le}.
-For technical reasons the lemma should be phrased as follows:
-*}
-lemma [simp]: "x \<le> y \<Longrightarrow> le y xs \<longrightarrow> le x xs"
-(*<*)oops(*>*)
-
-text {* Now show the following correctness theorem: *}
-theorem "sorted (sort xs)"
-(*<*)oops(*>*)
-
-text {* This theorem alone is too weak. It does not guarantee that the
-sorted list contains the same elements as the input. In the worst
-case, @{term sort} might always return @{term"[]"} --- surely an
-undesirable implementation of sorting.
-
-Define a function @{term "count xs x"} that counts how often @{term x}
-occurs in @{term xs}. Show that
-*}
-
-theorem "count (sort xs) x = count xs x"
-(*<*)oops(*>*)
-
-subsubsection {* Sorting with trees *}
-
-text {* Our second sorting algorithm uses trees. Thus you should first
-define a data type @{text bintree} of binary trees that are either
-empty or consist of a node carrying a natural number and two subtrees.
-
-Define a function @{text tsorted} that checks if a binary tree is
-sorted. It is convenien to employ two auxiliary functions @{text
-tge}/@{text tle} that test whether a number is
-greater-or-equal/less-or-equal to all elements of a tree.
-
-Finally define a function @{text tree_of} that turns a list into a
-sorted tree. It is helpful to base @{text tree_of} on a function
-@{term "ins n b"} that inserts a number @{term n} into a sorted tree
-@{term b}.
-
-Show
-*}
-theorem [simp]: "tsorted (tree_of xs)"
-(*<*)oops(*>*)
-
-text {* Again we have to show that no elements are lost (or added).
-As for lists, define a function @{term "tcount x b"} that counts the
-number of occurrences of the number @{term x} in the tree @{term b}.
-Show
-*}
-
-theorem "tcount (tree_of xs) x = count xs x"
-(*<*)oops(*>*)
-
-text {* Now we are ready to sort lists. We know how to produce an
-ordered tree from a list. Thus we merely need a function @{text
-list_of} that turns an (ordered) tree into an (ordered) list.
-Define this function and prove
-*}
-
-theorem "sorted (list_of (tree_of xs))"
-(*<*)oops(*>*)
-
-theorem "count (list_of (tree_of xs)) n = count xs n"    
-(*<*)oops(*>*)
-
-text {*
-Hints:
-\begin{itemize}
-\item
-Try to formulate all your lemmas as equations rather than implications
-because that often simplifies their proof.
-Make sure that the right-hand side is (in some sense)
-simpler than the left-hand side.
-\item
-Eventually you need to relate @{text sorted} and @{text tsorted}.
-This is facilitated by a function @{text ge} on lists (analogously to
-@{text tge} on trees) and the following lemma (that you will need to prove):
-@{term[display] "sorted (a@x#b) = (sorted a \<and> sorted b \<and> ge x a \<and> le x b)"}
-\end{itemize}
-*}
-
-(*<*)
-end
-(*>*)
\ No newline at end of file
--- a/doc-src/Exercises/2002/a2/generated/a2.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,137 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{a{\isadigit{2}}}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{Sorting \label{psv2002a2}%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-For simplicity we sort natural numbers.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\isamarkupsubsubsection{Sorting with lists%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-The task is to define insertion sort and prove its correctness.
-The following functions are required:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ \isanewline
-\ \ insort\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ {\isasymRightarrow}\ nat\ list\ {\isasymRightarrow}\ nat\ list{\isachardoublequote}\isanewline
-\ \ sort\ \ \ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ list\ {\isasymRightarrow}\ nat\ list{\isachardoublequote}\isanewline
-\ \ le\ \ \ \ \ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ {\isasymRightarrow}\ nat\ list\ {\isasymRightarrow}\ bool{\isachardoublequote}\isanewline
-\ \ sorted\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ list\ {\isasymRightarrow}\ bool{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-In your definition, \isa{insort\ x\ xs} should insert a
-number \isa{x} into an already sorted list \isa{xs}, and \isa{sort\ ys} should build on \isa{insort} to produce the sorted
-version of \isa{ys}.
-
-To show that the resulting list is indeed sorted we need a predicate
-\isa{sorted} that checks if each element in the list is less or equal
-to the following ones; \isa{le\ n\ xs} should be true iff
-\isa{n} is less or equal to all elements of \isa{xs}.
-
-Start out by showing a monotonicity property of \isa{le}.
-For technical reasons the lemma should be phrased as follows:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{lemma}\ {\isacharbrackleft}simp{\isacharbrackright}{\isacharcolon}\ {\isachardoublequote}x\ {\isasymle}\ y\ {\isasymLongrightarrow}\ le\ y\ xs\ {\isasymlongrightarrow}\ le\ x\ xs{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Now show the following correctness theorem:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{theorem}\ {\isachardoublequote}sorted\ {\isacharparenleft}sort\ xs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-This theorem alone is too weak. It does not guarantee that the
-sorted list contains the same elements as the input. In the worst
-case, \isa{sort} might always return \isa{{\isacharbrackleft}{\isacharbrackright}} --- surely an
-undesirable implementation of sorting.
-
-Define a function \isa{count\ xs\ x} that counts how often \isa{x}
-occurs in \isa{xs}. Show that%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{theorem}\ {\isachardoublequote}count\ {\isacharparenleft}sort\ xs{\isacharparenright}\ x\ {\isacharequal}\ count\ xs\ x{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\isamarkupsubsubsection{Sorting with trees%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Our second sorting algorithm uses trees. Thus you should first
-define a data type \isa{bintree} of binary trees that are either
-empty or consist of a node carrying a natural number and two subtrees.
-
-Define a function \isa{tsorted} that checks if a binary tree is
-sorted. It is convenien to employ two auxiliary functions \isa{tge}/\isa{tle} that test whether a number is
-greater-or-equal/less-or-equal to all elements of a tree.
-
-Finally define a function \isa{tree{\isacharunderscore}of} that turns a list into a
-sorted tree. It is helpful to base \isa{tree{\isacharunderscore}of} on a function
-\isa{ins\ n\ b} that inserts a number \isa{n} into a sorted tree
-\isa{b}.
-
-Show%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{theorem}\ {\isacharbrackleft}simp{\isacharbrackright}{\isacharcolon}\ {\isachardoublequote}tsorted\ {\isacharparenleft}tree{\isacharunderscore}of\ xs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Again we have to show that no elements are lost (or added).
-As for lists, define a function \isa{tcount\ x\ b} that counts the
-number of occurrences of the number \isa{x} in the tree \isa{b}.
-Show%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{theorem}\ {\isachardoublequote}tcount\ {\isacharparenleft}tree{\isacharunderscore}of\ xs{\isacharparenright}\ x\ {\isacharequal}\ count\ xs\ x{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Now we are ready to sort lists. We know how to produce an
-ordered tree from a list. Thus we merely need a function \isa{list{\isacharunderscore}of} that turns an (ordered) tree into an (ordered) list.
-Define this function and prove%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{theorem}\ {\isachardoublequote}sorted\ {\isacharparenleft}list{\isacharunderscore}of\ {\isacharparenleft}tree{\isacharunderscore}of\ xs{\isacharparenright}{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}count\ {\isacharparenleft}list{\isacharunderscore}of\ {\isacharparenleft}tree{\isacharunderscore}of\ xs{\isacharparenright}{\isacharparenright}\ n\ {\isacharequal}\ count\ xs\ n{\isachardoublequote}\ \ \ \ \isanewline
-\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Hints:
-\begin{itemize}
-\item
-Try to formulate all your lemmas as equations rather than implications
-because that often simplifies their proof.
-Make sure that the right-hand side is (in some sense)
-simpler than the left-hand side.
-\item
-Eventually you need to relate \isa{sorted} and \isa{tsorted}.
-This is facilitated by a function \isa{ge} on lists (analogously to
-\isa{tge} on trees) and the following lemma (that you will need to prove):
-\begin{isabelle}%
-sorted\ {\isacharparenleft}a\ {\isacharat}\ x\ {\isacharhash}\ b{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}sorted\ a\ {\isasymand}\ sorted\ b\ {\isasymand}\ ge\ x\ a\ {\isasymand}\ le\ x\ b{\isacharparenright}%
-\end{isabelle}
-\end{itemize}%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2002/a2/generated/session.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-\input{a2.tex}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2002/a3/ROOT.ML	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-  use_thy "a3";
--- a/doc-src/Exercises/2002/a3/a3.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-(*<*)
-theory a3 = Main:
-(*>*)
-
-subsection{* Compilation *}
-
-text {* This exercise deals with the compiler example in section~3.3
-of \cite{isabelle-tutorial}. The simple side effect free expressions
-are extended with side effects.
-\begin{enumerate}
-
-\item Read sections 3.3 and 8.2 of \cite{isabelle-tutorial}.  Study
-the section about @{text fun_upd} in theory @{text Fun} of HOL:
-@{text"fun_upd f x y"}, written @{text"f(x:=y)"}, is @{text f}
-updated at @{text x} with new value @{text y}.
-
-\item Extend data type @{text "('a, 'v) expr"} with a new alternative
-@{text "Assign x e"} that shall represent an assignment @{text "x =
-e"} of the value of the expression @{text e} to the variable @{text x}.
-The value of an assignment shall be the value of @{text e}.
-
-\item Modify the evaluation function @{text value} such that it can
-deal with assignments. Note that since the evaluation of an expression
-may now change the environment, it no longer suffices to return only
-the value from the evaluation of an expression.
-
-Define a function @{text "se_free :: expr \<Rightarrow> bool"} that
-identifies side effect free expressions. Show that @{text "se_free e"}
-implies that evaluation of @{text e} does not change the environment.
-
-\item Extend data type @{text "('a, 'v) instr"} with a new instruction
-@{text "Store x"} that stores the topmost element on the stack in
-address/variable @{text x}, without removing it from the stack.
-Update the machine semantics @{text exec} accordingly. You will face
-the same problem as in the extension of @{text value}.
-
-\item Modify the compiler @{text comp} and its correctness proof to
-accommodate the above changes.
-\end{enumerate}
-*}
-(*<*)
-end
-(*>*)
\ No newline at end of file
--- a/doc-src/Exercises/2002/a3/generated/a3.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{a{\isadigit{3}}}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{Compilation%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-This exercise deals with the compiler example in section~3.3
-of \cite{isabelle-tutorial}. The simple side effect free expressions
-are extended with side effects.
-\begin{enumerate}
-
-\item Read sections 3.3 and 8.2 of \cite{isabelle-tutorial}.  Study
-the section about \isa{fun{\isacharunderscore}upd} in theory \isa{Fun} of HOL:
-\isa{fun{\isacharunderscore}upd\ f\ x\ y}, written \isa{f{\isacharparenleft}x{\isacharcolon}{\isacharequal}y{\isacharparenright}}, is \isa{f}
-updated at \isa{x} with new value \isa{y}.
-
-\item Extend data type \isa{{\isacharparenleft}{\isacharprime}a{\isacharcomma}\ {\isacharprime}v{\isacharparenright}\ expr} with a new alternative
-\isa{Assign\ x\ e} that shall represent an assignment \isa{x\ {\isacharequal}\ e} of the value of the expression \isa{e} to the variable \isa{x}.
-The value of an assignment shall be the value of \isa{e}.
-
-\item Modify the evaluation function \isa{value} such that it can
-deal with assignments. Note that since the evaluation of an expression
-may now change the environment, it no longer suffices to return only
-the value from the evaluation of an expression.
-
-Define a function \isa{se{\isacharunderscore}free\ {\isacharcolon}{\isacharcolon}\ expr\ {\isasymRightarrow}\ bool} that
-identifies side effect free expressions. Show that \isa{se{\isacharunderscore}free\ e}
-implies that evaluation of \isa{e} does not change the environment.
-
-\item Extend data type \isa{{\isacharparenleft}{\isacharprime}a{\isacharcomma}\ {\isacharprime}v{\isacharparenright}\ instr} with a new instruction
-\isa{Store\ x} that stores the topmost element on the stack in
-address/variable \isa{x}, without removing it from the stack.
-Update the machine semantics \isa{exec} accordingly. You will face
-the same problem as in the extension of \isa{value}.
-
-\item Modify the compiler \isa{comp} and its correctness proof to
-accommodate the above changes.
-\end{enumerate}%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2002/a3/generated/session.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-\input{a3.tex}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2002/a5/ROOT.ML	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-use_thy "a5";
--- a/doc-src/Exercises/2002/a5/a5.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-(*<*)
-theory a5 = Main:
-(*>*)
-
-subsection {* Merge sort *}
-
-text {* Implement \emph{merge sort}: a list is sorted by splitting it
-into two lists, sorting them separately, and merging the results.
-
-With the help of @{text recdef} define two functions
-*}
-
-consts merge :: "nat list \<times> nat list \<Rightarrow> nat list"
-       msort :: "nat list \<Rightarrow> nat list"
-
-text {* and show *}
-
-theorem "sorted (msort xs)"
-(*<*)oops(*>*)
-
-theorem "count (msort xs) x = count xs x"
-(*<*)oops(*>*)
-
-text {* where @{term sorted} and @{term count} are defined as in
-section~\ref{psv2002a2}.
-
-Hints:
-\begin{itemize}
-\item For @{text recdef} see section~3.5 of \cite{isabelle-tutorial}.
-
-\item To split a list into two halves of almost equal length you can
-use the functions \mbox{@{text "n div 2"}}, @{term take} und @{term drop},
-where @{term "take n xs"} returns the first @{text n} elements of
-@{text xs} and @{text "drop n xs"} the remainder.
-
-\item Here are some potentially useful lemmas:\\
-  @{text "linorder_not_le:"} @{thm linorder_not_le [no_vars]}\\
-  @{text "order_less_le:"} @{thm order_less_le [no_vars]}\\
-  @{text "min_def:"} @{thm min_def [no_vars]}
-\end{itemize}
-*}
-
-(*<*)
-end 
-(*>*)
--- a/doc-src/Exercises/2002/a5/generated/a5.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{a{\isadigit{5}}}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{Merge sort%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Implement \emph{merge sort}: a list is sorted by splitting it
-into two lists, sorting them separately, and merging the results.
-
-With the help of \isa{recdef} define two functions%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ merge\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ list\ {\isasymtimes}\ nat\ list\ {\isasymRightarrow}\ nat\ list{\isachardoublequote}\isanewline
-\ \ \ \ \ \ \ msort\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ list\ {\isasymRightarrow}\ nat\ list{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-and show%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{theorem}\ {\isachardoublequote}sorted\ {\isacharparenleft}msort\ xs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}count\ {\isacharparenleft}msort\ xs{\isacharparenright}\ x\ {\isacharequal}\ count\ xs\ x{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-where \isa{sorted} and \isa{count} are defined as in
-section~\ref{psv2002a2}.
-
-Hints:
-\begin{itemize}
-\item For \isa{recdef} see section~3.5 of \cite{isabelle-tutorial}.
-
-\item To split a list into two halves of almost equal length you can
-use the functions \mbox{\isa{n\ div\ {\isadigit{2}}}}, \isa{take} und \isa{drop},
-where \isa{take\ n\ xs} returns the first \isa{n} elements of
-\isa{xs} and \isa{drop\ n\ xs} the remainder.
-
-\item Here are some potentially useful lemmas:\\
-  \isa{linorder{\isacharunderscore}not{\isacharunderscore}le{\isacharcolon}} \isa{{\isacharparenleft}{\isasymnot}\ x\ {\isasymle}\ y{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}y\ {\isacharless}\ x{\isacharparenright}}\\
-  \isa{order{\isacharunderscore}less{\isacharunderscore}le{\isacharcolon}} \isa{{\isacharparenleft}x\ {\isacharless}\ y{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}x\ {\isasymle}\ y\ {\isasymand}\ x\ {\isasymnoteq}\ y{\isacharparenright}}\\
-  \isa{min{\isacharunderscore}def{\isacharcolon}} \isa{min\ a\ b\ {\isasymequiv}\ if\ a\ {\isasymle}\ b\ then\ a\ else\ b}
-\end{itemize}%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2002/a5/generated/session.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-\input{a5.tex}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2002/a5/l2.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,307 +0,0 @@
-theory l2 = Main:
-
-text {*
-  \section*{Sortieren auf Listen}
-
-  Der erste Teil des Blattes beschäftigt sich mit einem
-  einfachen Sortieralgorithmus auf Listen von natürlichen Zahlen.
-  Ihre Aufgabe ist es, den Sortieralgorithmus in Isabelle zu
-  programmieren und zu zeigen, dass Ihre Implementierung korrekt ist.
-
-  Der Algorithmus lässt sich in folgende Funktionen zerlegen:
-*}
-consts 
-  insort :: "nat \<Rightarrow> nat list \<Rightarrow> nat list"
-  sort   :: "nat list \<Rightarrow> nat list"
-  le     :: "nat \<Rightarrow> nat list \<Rightarrow> bool"
-  sorted :: "nat list \<Rightarrow> bool"
-text {*
-  Hierbei soll @{term "insort x xs"} eine Zahl @{term x} in eine
-  sortierte Liste @{text xs} einfügen, und die Funktion @{term "sort ys"}
-  (aufbauend auf @{text insort}) die sortierte Version von @{text ys}
-  liefern.
-
-  Um zu zeigen, dass die resultierende Liste tatsächlich sortiert
-  ist, benötigen sie das Prädikat @{term "sorted xs"}, das überprüft
-  ob jedes Element der Liste kleiner ist als alle folgenden Elemente
-  der Liste. Die Funktion @{term "le n xs"} soll genau dann wahr sein,
-  wenn @{term n} kleiner oder gleich allen Elementen von @{text xs}
-  ist. 
-*}
-primrec
-  "le a [] = True"
-  "le a (x#xs) = (a <= x & le a xs)"
-
-primrec
-  "sorted [] = True"
-  "sorted (x#xs) = (le x xs & sorted xs)"
-
-primrec
-  "insort a [] = [a]"
-  "insort a (x#xs) = (if a <= x then a#x#xs else x # insort a xs)"
-
-primrec
-  "sort [] = []"
-  "sort (x#xs) = insort x (sort xs)"
-
-lemma "le 3 [7,10,3]" by auto
-
-lemma "\<not> le 3 [7,10,2]" by auto
-
-lemma "sorted [1,2,3,4]" by auto
-
-lemma "\<not> sorted [3,1,4,2]" by auto
-
-lemma "sort [3,1,4,2] = [1,2,3,4]" by auto
-
-text {*
-  Zeigen Sie zu Beginn folgendes Monotonie-Lemma über @{term le}. Die
-  Formulierung des Lemmas ist aus technischen Gründen (über die sie
-  später mehr erfahren werden) etwas ungewohnt:
-*} 
-lemma [simp]: "x \<le> y \<Longrightarrow> le y xs \<longrightarrow> le x xs"
-  apply (induct_tac xs)
-  apply auto
-  done
-
-lemma [simp]: 
-  "le x (insort a xs) = (x <= a & le x xs)"
-  apply (induct_tac xs)
-  apply auto
-  done
-
-lemma [simp]:
-  "sorted (insort a xs) = sorted xs"
-  apply (induct_tac xs)
-  apply auto
-  done
-
-theorem "sorted (sort xs)"
-  apply (induct_tac xs)
-  apply auto
-  done
-
-text  {*
-  Das Theorem sagt zwar aus, dass Ihr Algorithmus eine sortierte
-  Liste zurückgibt, es gibt Ihnen aber nicht die Sicherheit, dass die sortierte
-  Liste auch die gleichen Elemente wie das Original enthält. Formulieren Sie deswegen
-  eine Funktion @{term "count xs x"}, die zählt, wie oft die Zahl
-  @{term x} in @{term xs} vorkommt.  
-*}
-consts
-  count :: "nat list => nat => nat"
-primrec
-  "count [] y = 0"
-  "count (x#xs) y = (if x=y then Suc(count xs y) else count xs y)"
-
-lemma "count [2,3,1,3] 3 = 2" by auto
-
-lemma "count [2,3,1,3] 7 = 0" by auto
-
-lemma "count [2,3,1,3] 2 = 1" by auto
-
-lemma [simp]:
-  "count (insort x xs) y =
-  (if x=y then Suc (count xs y) else count xs y)"
-  apply (induct_tac xs)
-  apply auto
-  done
-
-theorem "count (sort xs) x = count xs x"
-  apply (induct_tac xs)
-  apply auto
-  done
-
-text {*
-  \section*{Sortieren mit Bäumen}
-
-  Der zweite Teil des Blattes beschäftigt sich mit einem
-  Sortieralgorithmus, der Bäume verwendet.
-  Definieren Sie dazu zuerst den Datentyp @{text bintree} der
-  Binärbäume. Für diese Aufgabe sind Binärbäume entweder leer, oder
-  bestehen aus einem
-  Knoten mit einer natürlichen Zahl und zwei Unterbäumen.  
-
-  Schreiben Sie dann eine Funktion @{text tsorted}, die feststellt, ob
-  ein Binärbaum geordnet ist. Sie werden dazu zwei Hilfsfunktionen
-  @{text tge} und @{text tle} benötigen, die überprüfen ob eine Zahl
-  grössergleich/kleinergleich als alle Elemente eines Baumes sind.
-
-  Formulieren Sie schliesslich eine Funktion @{text tree_of}, die zu einer
-  (unsortierten) Liste den geordneten Binärbaum zurückgibt. Stützen Sie
-  sich dabei auf eine Funktion @{term "ins n b"}, die eine Zahl @{term
-  n} in einen geordneten Binärbaum @{term b} einfügt.  
-*}
-
-datatype bintree = Empty | Node nat bintree bintree
-
-consts
-  tsorted :: "bintree \<Rightarrow> bool"
-  tge :: "nat \<Rightarrow> bintree \<Rightarrow> bool"
-  tle :: "nat \<Rightarrow> bintree \<Rightarrow> bool"
-  ins :: "nat \<Rightarrow> bintree \<Rightarrow> bintree"
-  tree_of :: "nat list \<Rightarrow> bintree"
-
-primrec
-  "tsorted Empty = True"
-  "tsorted (Node n t1 t2) = (tsorted t1 \<and> tsorted t2 \<and> tge n t1 \<and> tle n t2)"
-
-primrec
-  "tge x Empty = True"
-  "tge x (Node n t1 t2) = (n \<le> x \<and> tge x t1 \<and> tge x t2)"
-
-primrec
-  "tle x Empty = True"
-  "tle x (Node n t1 t2) = (x \<le> n \<and> tle x t1 \<and> tle x t2)"
-
-primrec
-  "ins x Empty = Node x Empty Empty"
-  "ins x (Node n t1 t2) = (if x \<le> n then Node n (ins x t1) t2 else Node n t1 (ins x t2))"
-
-primrec
-  "tree_of [] = Empty"
-  "tree_of (x#xs) = ins x (tree_of xs)"
-
-
-lemma "tge 5 (Node 3 (Node 2 Empty Empty) Empty)" by auto
-
-lemma "\<not> tge 5 (Node 3 Empty (Node 7 Empty Empty))" by auto
-
-lemma "\<not> tle 5 (Node 3 (Node 2 Empty Empty) Empty)" by auto
-
-lemma "\<not> tle 5 (Node 3 Empty (Node 7 Empty Empty))" by auto
-
-lemma "tle 3 (Node 3 Empty (Node 7 Empty Empty))" by auto
-
-lemma "tsorted (Node 3 Empty (Node 7 Empty Empty))" by auto
-
-lemma "tree_of [3,2] = Node 2 Empty (Node 3 Empty Empty)" by auto
-
-lemma [simp]:
-  "tge a (ins x t) = (x \<le> a \<and> tge a t)"
-  apply (induct_tac t)
-  apply auto
-  done
-
-lemma [simp]:
-  "tle a (ins x t) = (a \<le> x \<and> tle a t)"
-  apply (induct_tac t)
-  apply auto
-  done
-
-lemma [simp]:
-  "tsorted (ins x t) = tsorted t"
-  apply (induct_tac t)
-  apply auto
-  done
-
-theorem [simp]: "tsorted (tree_of xs)"
-  apply (induct_tac xs)
-  apply auto
-  done
-
-text {* 
-  Auch bei diesem Algorithmus müssen wir noch zeigen, dass keine
-  Elemente beim Sortieren verloren gehen (oder erfunden werden). Formulieren
-  Sie analog zu den Listen eine Funktion @{term "tcount x b"}, die zählt, wie
-  oft die Zahl @{term x} im Baum @{term b} vorkommt.
-*} 
-consts
-  tcount :: "bintree => nat => nat"
-primrec
-  "tcount Empty y = 0"
-  "tcount (Node x t1 t2) y = 
-  (if x=y 
-   then Suc (tcount t1 y + tcount t2 y) 
-   else tcount t1 y + tcount t2 y)"
-
-lemma [simp]:
-  "tcount (ins x t) y =
-  (if x=y then Suc (tcount t y) else tcount t y)"
-  apply(induct_tac t)
-  apply auto
-  done
-
-theorem "tcount (tree_of xs) x = count xs x"
-  apply (induct_tac xs)
-  apply auto
-  done
-
-text {*
-  Die eigentliche Aufgabe war es, Listen zu sortieren. Bis jetzt haben
-  wir lediglich einen Algorithmus, der Listen in geordnete Bäume
-  transformiert. Definieren Sie deswegen eine Funktion @{text
-  list_of}, die zu einen (geordneten) Baum eine (geordnete) Liste liefert. 
-*}
-
-consts
-  ge      :: "nat \<Rightarrow> nat list \<Rightarrow> bool"
-  list_of :: "bintree \<Rightarrow> nat list"
-
-primrec
-  "ge a [] = True"
-  "ge a (x#xs) = (x \<le> a \<and> ge a xs)"
-
-primrec
-  "list_of Empty = []"
-  "list_of (Node n t1 t2) = list_of t1 @ [n] @ list_of t2"
-
-
-lemma [simp]:
-  "le x (a@b) = (le x a \<and> le x b)"
-  apply (induct_tac a)
-  apply auto
-  done
-
-lemma [simp]:
-  "ge x (a@b) = (ge x a \<and> ge x b)"
-  apply (induct_tac a)
-  apply auto
-  done
-
-lemma [simp]:
-  "sorted (a@x#b) = (sorted a \<and> sorted b \<and> ge x a \<and> le x b)"
-  apply (induct_tac a)
-  apply auto
-  done
-
-lemma [simp]:
-  "ge n (list_of t) = tge n t"
-  apply (induct_tac t)
-  apply auto
-  done
-
-lemma [simp]:
-  "le n (list_of t) = tle n t"
-  apply (induct_tac t)
-  apply auto
-  done
-  
-lemma [simp]:
-  "sorted (list_of t) = tsorted t"
-  apply (induct_tac t)
-  apply auto
-  done
-
-theorem "sorted (list_of (tree_of xs))"
-  apply auto
-  done
-
-lemma count_append [simp]:
-  "count (a@b) n = count a n + count b n"
-  apply (induct a)
-  apply auto
-  done
-
-lemma [simp]:
-  "count (list_of b) n = tcount b n"
-  apply (induct b)
-  apply auto
-  done
-
-theorem "count (list_of (tree_of xs)) n = count xs n"    
-  apply (induct xs)
-  apply auto
-  done
-
-end
--- a/doc-src/Exercises/2002/a6/ROOT.ML	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-  use_thy "a6";
--- a/doc-src/Exercises/2002/a6/a6.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-(*<*)
-theory a6 = Main:
-(*>*)
-subsection {* The towers of Hanoi *}
-
-text{*
-In section \ref{psv2000hanoi} we introduced the towers of Hanoi and
-defined a function @{term moves} to generate the moves to solve the
-puzzle.  Now it is time to show that @{term moves} is correct. This
-means that
-\begin{itemize}
-\item when executing the list of moves, the result is indeed the
-intended one, i.e.\ all disks are moved from one peg to another, and
-\item all of the moves are legal, i.e.\ never place a larger disk
-on top of a smaller one.
-\end{itemize}
-Hint: this is a nontrivial undertaking. The complexity of your proofs
-will depend crucially on your choice of model and you may have to
-revise your model as you proceed with the proof.
-*}
-
-(*<*)
-end
-(*>*)
\ No newline at end of file
--- a/doc-src/Exercises/2002/a6/generated/a6.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{a{\isadigit{6}}}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{The towers of Hanoi%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-In section \ref{psv2000hanoi} we introduced the towers of Hanoi and
-defined a function \isa{moves} to generate the moves to solve the
-puzzle.  Now it is time to show that \isa{moves} is correct. This
-means that
-\begin{itemize}
-\item when executing the list of moves, the result is indeed the
-intended one, i.e.\ all disks are moved from one peg to another, and
-\item all of the moves are legal, i.e.\ never place a larger disk
-on top of a smaller one.
-\end{itemize}
-Hint: this is a nontrivial undertaking. The complexity of your proofs
-will depend crucially on your choice of model and you may have to
-revise your model as you proceed with the proof.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2002/a6/generated/session.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-\input{a6.tex}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2003/IsaMakefile	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-#
-# $Id$
-#
-# IsaMakefile for PSV2003
-#
-
-SESSIONS = a1 a2 a3 a5 a6
-
-## targets
-
-default: clean sessions
-sessions: $(SESSIONS)
-# all: sessions 
-
-
-## global settings
-
-
-SRC = $(ISABELLE_HOME)/src
-OUT = $(ISABELLE_OUTPUT)
-LOG = $(OUT)/log
-INFO = $(ISABELLE_BROWSER_INFO)
-USEDIR = $(ISATOOL) usedir -v true -i false -d false -D generated
-RSYNC = rsync --rsh ssh --rsync-path /usr/local/dist/bin/rsync
-WWW = www4.in.tum.de:/home/html/wbroy/html-data/lehre/praktika/psv
-
-
-# reomve old log files
-clean:
-	rm -f $(LOG)/HOL-a?.gz $(LOG)/HOL-l?.gz
-
-## provide style.tex
-
-style:
-	@for D in $(SESSIONS); do test -d $$D/document && { test -r $$D/document/style.tex || ln -s ../../style.tex $$D/document/style.tex; } done;
-
-
-## a1
-
-a1: a1/generated/session.tex
-
-a1/generated/session.tex: a1/ROOT.ML \
-  a1/*.thy
-	@$(USEDIR) HOL a1
-
-## a2
-
-a2: a2/generated/session.tex
-
-a2/generated/session.tex: a2/ROOT.ML \
-  a2/*.thy
-	@$(USEDIR) HOL a2
-
-## a3
-
-a3: a3/generated/session.tex
-
-a3/generated/session.tex: a3/ROOT.ML \
-  a3/*.thy
-	@$(USEDIR) HOL a3
-
-## a5
-
-a5: a5/generated/session.tex
-
-a5/generated/session.tex: a5/ROOT.ML \
-  a5/*.thy
-	@$(USEDIR) HOL a5
-
-## a6
-
- a6: a6/generated/session.tex
-
- a6/generated/session.tex: a6/ROOT.ML \
-   a6/*.thy
-	@$(USEDIR) HOL a6
--- a/doc-src/Exercises/2003/Makefile	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-#
-# $Id$
-#
-# IsaMakefile for PSV2003
-#
-
-SESSIONS = a1 a2 a3 a5
-
-## targets
-
-default: sessions
-sessions: $(SESSIONS)
-
-
-## a1
-
-a1: a1/generated/session.tex
-
-a1/generated/session.tex: a1/ROOT.ML a1/*.thy
-	isatool make
-
-## a2
-
-a2: a2/generated/session.tex
-
-a2/generated/session.tex: a2/ROOT.ML a2/*.thy
-	isatool make
-
-## a3
-
-a3: a3/generated/session.tex
-
-a3/generated/session.tex: a3/ROOT.ML a3/*.thy
-	isatool make
-
-## a5
-
-a5: a5/generated/session.tex
-
-a5/generated/session.tex: a5/ROOT.ML a5/*.thy
-	isatool make
-
-## a6
-
- a6: a6/generated/session.tex
-
- a6/generated/session.tex: a6/ROOT.ML a6/*.thy
-	isatool make
--- a/doc-src/Exercises/2003/a1/ROOT.ML	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-  use_thy "a1";
--- a/doc-src/Exercises/2003/a1/a1.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-(*<*)
-theory a1 = Main:
-(*>*)
-subsection {* Lists *}
-
-text{* 
-Define a function @{term occurs}, such that @{term"occurs x xs"} 
-is the number of occurrences of the element @{term x} in the list
-@{term xs}.
-*}
-
-(*<*) consts (*>*)
-  occurs :: "'a \<Rightarrow> 'a list \<Rightarrow> nat"
-
-text {*
-Prove or disprove (by counter example) the theorems that follow. You may have to prove some lemmas first.
-
-Use the @{text "[simp]"}-attribute only if the equation is truly a
-simplification and is necessary for some later proof.
-
-In the case of a non-theorem try to find a suitable assumption under which the theorem holds. *};
-
-theorem "occurs a (xs @ ys) = occurs a xs + occurs a ys "
-(*<*)oops(*>*)
-
-theorem "occurs a xs = occurs a (rev xs)"
-(*<*)oops(*>*)
-
-theorem "occurs a xs <= length xs"
-(*<*)oops(*>*)
-
-theorem "occurs a (replicate n a) = n"
-(*<*)oops(*>*)
-
-text{*
-Define a function @{term areAll}, such that @{term"areAll xs x"} is true iff all elements of @{term xs} are equal to @{term x}.
-*}
-(*<*) consts (*>*)
-  areAll :: "'a list \<Rightarrow> 'a \<Rightarrow> bool"
-
-theorem "areAll xs a \<longrightarrow> occurs a xs = length xs"
-(*<*)oops(*>*)
-
-theorem "occurs a xs = length xs \<longrightarrow> areAll xs a"
-(*<*)oops(*>*)
-
-text{*
-Define two functions to delete elements from a list:
-@{term"del1 x xs"} deletes the first (leftmost) occurrence of @{term x} from @{term xs}.
-@{term"delall x xs"} deletes all occurrences of @{term x} from @{term xs}.
-*}
-(*<*) consts (*>*)
-  delall :: "'a \<Rightarrow> 'a list \<Rightarrow> 'a list"
-  del1 :: "'a \<Rightarrow> 'a list \<Rightarrow> 'a list"
-
-theorem "occurs a (delall a xs) = 0"
-(*<*)oops(*>*) 
-theorem "Suc (occurs a (del1 a xs)) = occurs a xs"
-(*<*)oops(*>*)
-
-text{*
-Define a function @{term replace}, such that @{term"replace x y zs"} yields @{term zs} with every occurrence of @{term x} replaced by @{term y}.
-*}
-(*<*) consts (*>*)
-  replace :: "'a \<Rightarrow> 'a \<Rightarrow> 'a list \<Rightarrow> 'a list"
-
-theorem "occurs a xs = occurs b (replace a b xs)"
-(*<*)oops(*>*)
-
-text{* 
-With the help of @{term occurs}, define a function @{term remDups} that removes all duplicates from a list.*}
-(*<*) consts (*>*)
-  remDups :: "'a list \<Rightarrow> 'a list"
-text{* Use @{term occurs} to formulate and prove a lemma that expresses the fact that @{term remDups} never inserts a new element into a list.*}
-
-text{* Use @{term occurs} to formulate and prove a lemma that expresses the fact that @{term remDups} always returns a list without duplicates (i.e.\ the correctness of @{term remDups}).
-*}
-
-text{* 
-Now, with the help of @{term occurs} define a function @{term unique}, such that @{term"unique xs"} is true iff every element in @{term xs} occurs only once.
-*}
-(*<*) consts (*>*)
-  unique :: "'a list \<Rightarrow> bool"
-
-text{* 
-Formulate and prove the correctness of @{term remDups} with the help of @{term unique}.
-*}
-(*<*) end (*>*)
--- a/doc-src/Exercises/2003/a1/generated/a1.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{a{\isadigit{1}}}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{Lists%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Define a function \isa{occurs}, such that \isa{occurs\ x\ xs} 
-is the number of occurrences of the element \isa{x} in the list
-\isa{xs}.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\ \ occurs\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ list\ {\isasymRightarrow}\ nat{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Prove or disprove (by counter example) the theorems that follow. You may have to prove some lemmas first.
-
-Use the \isa{{\isacharbrackleft}simp{\isacharbrackright}}-attribute only if the equation is truly a
-simplification and is necessary for some later proof.
-
-In the case of a non-theorem try to find a suitable assumption under which the theorem holds.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{theorem}\ {\isachardoublequote}occurs\ a\ {\isacharparenleft}xs\ {\isacharat}\ ys{\isacharparenright}\ {\isacharequal}\ occurs\ a\ xs\ {\isacharplus}\ occurs\ a\ ys\ {\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}occurs\ a\ xs\ {\isacharequal}\ occurs\ a\ {\isacharparenleft}rev\ xs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}occurs\ a\ xs\ {\isacharless}{\isacharequal}\ length\ xs{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}occurs\ a\ {\isacharparenleft}replicate\ n\ a{\isacharparenright}\ {\isacharequal}\ n{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Define a function \isa{areAll}, such that \isa{areAll\ xs\ x} is true iff all elements of \isa{xs} are equal to \isa{x}.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\ \ areAll\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ list\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ bool{\isachardoublequote}\isanewline
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}areAll\ xs\ a\ {\isasymlongrightarrow}\ occurs\ a\ xs\ {\isacharequal}\ length\ xs{\isachardoublequote}\isamarkupfalse%
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}occurs\ a\ xs\ {\isacharequal}\ length\ xs\ {\isasymlongrightarrow}\ areAll\ xs\ a{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Define two functions to delete elements from a list:
-\isa{del{\isadigit{1}}\ x\ xs} deletes the first (leftmost) occurrence of \isa{x} from \isa{xs}.
-\isa{delall\ x\ xs} deletes all occurrences of \isa{x} from \isa{xs}.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\ \ delall\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ list\ {\isasymRightarrow}\ {\isacharprime}a\ list{\isachardoublequote}\isanewline
-\ \ del{\isadigit{1}}\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ list\ {\isasymRightarrow}\ {\isacharprime}a\ list{\isachardoublequote}\isanewline
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}occurs\ a\ {\isacharparenleft}delall\ a\ xs{\isacharparenright}\ {\isacharequal}\ {\isadigit{0}}{\isachardoublequote}\isamarkupfalse%
-\ \isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}Suc\ {\isacharparenleft}occurs\ a\ {\isacharparenleft}del{\isadigit{1}}\ a\ xs{\isacharparenright}{\isacharparenright}\ {\isacharequal}\ occurs\ a\ xs{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Define a function \isa{replace}, such that \isa{replace\ x\ y\ zs} yields \isa{zs} with every occurrence of \isa{x} replaced by \isa{y}.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\ \ replace\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a\ list\ {\isasymRightarrow}\ {\isacharprime}a\ list{\isachardoublequote}\isanewline
-\isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}occurs\ a\ xs\ {\isacharequal}\ occurs\ b\ {\isacharparenleft}replace\ a\ b\ xs{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-With the help of \isa{occurs}, define a function \isa{remDups} that removes all duplicates from a list.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\ \ remDups\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ list\ {\isasymRightarrow}\ {\isacharprime}a\ list{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Use \isa{occurs} to formulate and prove a lemma that expresses the fact that \isa{remDups} never inserts a new element into a list.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Use \isa{occurs} to formulate and prove a lemma that expresses the fact that \isa{remDups} always returns a list without duplicates (i.e.\ the correctness of \isa{remDups}).%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Now, with the help of \isa{occurs} define a function \isa{unique}, such that \isa{unique\ xs} is true iff every element in \isa{xs} occurs only once.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\ \ unique\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ list\ {\isasymRightarrow}\ bool{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Formulate and prove the correctness of \isa{remDups} with the help of \isa{unique}.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2003/a1/generated/session.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-\input{a1.tex}
-
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2003/a2/ROOT.ML	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-use_thy "a2";
--- a/doc-src/Exercises/2003/a2/a2.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-(*<*)
-theory a2 = Main:
-(*>*)
-
-subsection {* Trees *}
-
-
-
-text{* Define a datatype @{text"'a tree"} for binary trees. Both leaf
-and internal nodes store information.
-*};
-
-datatype 'a tree(*<*)= Tip "'a" | Node "'a" "'a tree" "'a tree"(*>*)
-
-text{*
-Define the functions @{term preOrder}, @{term postOrder}, and @{term
-inOrder} that traverse an @{text"'a tree"} in the respective order.
-*}
-
-(*<*)consts(*>*)
-  preOrder :: "'a tree \<Rightarrow> 'a list"
-  postOrder :: "'a tree \<Rightarrow> 'a list"
-  inOrder :: "'a tree \<Rightarrow> 'a list"
-
-text{*
-Define a function @{term mirror} that returns the mirror image of an @{text"'a tree"}.
-*}; 
-(*<*)consts(*>*)
-  mirror :: "'a tree \<Rightarrow> 'a tree"
-
-text{*
-Suppose that @{term xOrder} and @{term yOrder} are tree traversal
-functions chosen from @{term preOrder}, @{term postOrder}, and @{term
-inOrder}. Formulate and prove all valid properties of the form
-\mbox{@{text "xOrder (mirror xt) = rev (yOrder xt)"}}.
-*}
-
-text{*
-Define the functions @{term root}, @{term leftmost} and @{term
-rightmost}, that return the root, leftmost, and rightmost element
-respectively.
-*}
-(*<*)consts(*>*)
-  root :: "'a tree \<Rightarrow> 'a"
-  leftmost :: "'a tree \<Rightarrow> 'a"
-  rightmost :: "'a tree \<Rightarrow> 'a"
-
-text {*
-Prove or disprove (by counter example) the theorems that follow. You may have to prove some lemmas first.
-*};
-
-theorem "last(inOrder xt) = rightmost xt"
-(*<*)oops(*>*) 
-theorem "hd (inOrder xt) = leftmost xt "
-(*<*)oops(*>*) 
-theorem "hd(preOrder xt) = last(postOrder xt)"
-(*<*)oops(*>*) 
-theorem "hd(preOrder xt) = root xt"
-(*<*)oops(*>*) 
-theorem "hd(inOrder xt) = root xt "
-(*<*)oops(*>*) 
-theorem "last(postOrder xt) = root xt"
-(*<*)oops(*>*) 
-
-
-(*<*)end(*>*)
--- a/doc-src/Exercises/2003/a2/generated/a2.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{a{\isadigit{2}}}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{Trees%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Define a datatype \isa{{\isacharprime}a\ tree} for binary trees. Both leaf
-and internal nodes store information.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{datatype}\ {\isacharprime}a\ tree\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Define the functions \isa{preOrder}, \isa{postOrder}, and \isa{inOrder} that traverse an \isa{{\isacharprime}a\ tree} in the respective order.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\ \ preOrder\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ tree\ {\isasymRightarrow}\ {\isacharprime}a\ list{\isachardoublequote}\isanewline
-\ \ postOrder\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ tree\ {\isasymRightarrow}\ {\isacharprime}a\ list{\isachardoublequote}\isanewline
-\ \ inOrder\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ tree\ {\isasymRightarrow}\ {\isacharprime}a\ list{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Define a function \isa{mirror} that returns the mirror image of an \isa{{\isacharprime}a\ tree}.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\ \ mirror\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ tree\ {\isasymRightarrow}\ {\isacharprime}a\ tree{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Suppose that \isa{xOrder} and \isa{yOrder} are tree traversal
-functions chosen from \isa{preOrder}, \isa{postOrder}, and \isa{inOrder}. Formulate and prove all valid properties of the form
-\mbox{\isa{xOrder\ {\isacharparenleft}mirror\ xt{\isacharparenright}\ {\isacharequal}\ rev\ {\isacharparenleft}yOrder\ xt{\isacharparenright}}}.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Define the functions \isa{root}, \isa{leftmost} and \isa{rightmost}, that return the root, leftmost, and rightmost element
-respectively.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\ \ root\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ tree\ {\isasymRightarrow}\ {\isacharprime}a{\isachardoublequote}\isanewline
-\ \ leftmost\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ tree\ {\isasymRightarrow}\ {\isacharprime}a{\isachardoublequote}\isanewline
-\ \ rightmost\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharprime}a\ tree\ {\isasymRightarrow}\ {\isacharprime}a{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Prove or disprove (by counter example) the theorems that follow. You may have to prove some lemmas first.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{theorem}\ {\isachardoublequote}last{\isacharparenleft}inOrder\ xt{\isacharparenright}\ {\isacharequal}\ rightmost\ xt{\isachardoublequote}\isamarkupfalse%
-\ \isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}hd\ {\isacharparenleft}inOrder\ xt{\isacharparenright}\ {\isacharequal}\ leftmost\ xt\ {\isachardoublequote}\isamarkupfalse%
-\ \isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}hd{\isacharparenleft}preOrder\ xt{\isacharparenright}\ {\isacharequal}\ last{\isacharparenleft}postOrder\ xt{\isacharparenright}{\isachardoublequote}\isamarkupfalse%
-\ \isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}hd{\isacharparenleft}preOrder\ xt{\isacharparenright}\ {\isacharequal}\ root\ xt{\isachardoublequote}\isamarkupfalse%
-\ \isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}hd{\isacharparenleft}inOrder\ xt{\isacharparenright}\ {\isacharequal}\ root\ xt\ {\isachardoublequote}\isamarkupfalse%
-\ \isanewline
-\isamarkupfalse%
-\isacommand{theorem}\ {\isachardoublequote}last{\isacharparenleft}postOrder\ xt{\isacharparenright}\ {\isacharequal}\ root\ xt{\isachardoublequote}\isamarkupfalse%
-\ \isanewline
-\isanewline
-\isamarkupfalse%
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2003/a2/generated/session.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-\input{a2.tex}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2003/a3/ROOT.ML	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-  use_thy "a3";
--- a/doc-src/Exercises/2003/a3/a3.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-(*<*)
-theory a3 = Main:
-(*>*)
-
-subsection{* Computing with natural numbers - Magical Methods *}
-
-text{*
-A book about Vedic Mathematics describes three methods to make the calculation of squares of natural numbers easier:
-
-\begin{itemize}
-\item {\em MM1}: Numbers whose predecessors have squares that are known or can easily be calculated. For example:
-\\ Needed: $61^2$  
-\\ Given: $60^2 = 3600$
-\\ Observe: $61^2 = 3600 + 60 + 61 = 3721$
-
-\item {\em MM2}: Numbers greater than, but near 100. For example:
-\\ Needed: $102^2$
-\\ Let $h = 102 - 100 = 2$ , $h^2 = 4$
-\\ Observe: $102^2 = (102+h)$ shifted two places to the left $ + h^2 = 10404$
- 
-\item {\em MM3}: Numbers ending in $5$. For example:
-\\ Needed: $85^2$
-\\ Observe: $85^2 = (8 * 9)$ appended to $ 25 = 7225$
-\\ Needed: $995^2$
-\\ Observe: $995^2 = (99 * 100)$ appended to $ 25 = 990025 $
-\end{itemize}
-
-
-In this exercise we will show that these methods are not so magical after all!
-
-\begin{itemize}
-\item Based on {\em MM1} define a function @{term "sq"} that calculates the square of a natural number.
-\item Prove the correctness of @{term "sq"} (i.e.\ @{term "sq n = n * n"}).
-\item Formulate and prove the correctness of {\em MM2}.\\ Hints:
-  \begin{itemize}
-  \item Generalise {\em MM2} for an arbitrary constant (instead of $100$).
-  \item Universally quantify all variables other than the induction variable.
-\end{itemize}
-\item Formulate and prove the correctness of {\em MM3}.\\ Hints:
-  \begin{itemize}
-  \item Try to formulate the property `numbers ending in $5$' such that it is easy to get to the rest of the number.
-  \item Proving the binomial formula for $(a+b)^2$ can be of some help.
-  \end{itemize}
-\end{itemize}
-*}
-
-(*<*) end (*>*)
\ No newline at end of file
--- a/doc-src/Exercises/2003/a3/generated/a3.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{a{\isadigit{3}}}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{Computing with natural numbers - Magical Methods%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-A book about Vedic Mathematics describes three methods to make the calculation of squares of natural numbers easier:
-
-\begin{itemize}
-\item {\em MM1}: Numbers whose predecessors have squares that are known or can easily be calculated. For example:
-\\ Needed: $61^2$  
-\\ Given: $60^2 = 3600$
-\\ Observe: $61^2 = 3600 + 60 + 61 = 3721$
-
-\item {\em MM2}: Numbers greater than, but near 100. For example:
-\\ Needed: $102^2$
-\\ Let $h = 102 - 100 = 2$ , $h^2 = 4$
-\\ Observe: $102^2 = (102+h)$ shifted two places to the left $ + h^2 = 10404$
- 
-\item {\em MM3}: Numbers ending in $5$. For example:
-\\ Needed: $85^2$
-\\ Observe: $85^2 = (8 * 9)$ appended to $ 25 = 7225$
-\\ Needed: $995^2$
-\\ Observe: $995^2 = (99 * 100)$ appended to $ 25 = 990025 $
-\end{itemize}
-
-
-In this exercise we will show that these methods are not so magical after all!
-
-\begin{itemize}
-\item Based on {\em MM1} define a function \isa{sq} that calculates the square of a natural number.
-\item Prove the correctness of \isa{sq} (i.e.\ \isa{sq\ n\ {\isacharequal}\ n\ {\isacharasterisk}\ n}).
-\item Formulate and prove the correctness of {\em MM2}.\\ Hints:
-  \begin{itemize}
-  \item Generalise {\em MM2} for an arbitrary constant (instead of $100$).
-  \item Universally quantify all variables other than the induction variable.
-\end{itemize}
-\item Formulate and prove the correctness of {\em MM3}.\\ Hints:
-  \begin{itemize}
-  \item Try to formulate the property `numbers ending in $5$' such that it is easy to get to the rest of the number.
-  \item Proving the binomial formula for $(a+b)^2$ can be of some help.
-  \end{itemize}
-\end{itemize}%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2003/a3/generated/session.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-\input{a3.tex}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2003/a5/ROOT.ML	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-use_thy "a5";
--- a/doc-src/Exercises/2003/a5/a5.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-(*<*)
-theory a5 = Main:
-(*>*)
-
-subsection {*BIGNAT - Specification and Verification*};
-
-text{*
-Hardware platforms have a limit on the largest number they can represent. This is normally fixed by the bit lengths of registers and ALUs used. In order to be able to perform calculations that require arbitrarily large numbers, the provided arithmetic operations need to be extended in order for them to work on an abstract data type representing numbers of arbitrary size.
-
-In this exercise we will build and verify an implementation for BIGNAT, an abstract data type representing natural numbers of arbitrary size.
-*}
-
-text {*\subsubsection*{Representation}*}
-
-text{*
-A BIGNAT is represented as a list of natural numbers in a range supported by the target machine. In our case, this will be all natural numbers in the range [0, BASE-1]. (Note: natural numbers in Isabelle are of arbitrary size)
-*}
-
-types 
-  bigNat = "nat list"
-
-text{*
-Define a function @{term "valid"} that takes a value for BASE, and checks if the given BIGNAT is valid.
-*}
-
-consts valid :: "nat \<Rightarrow> bigNat \<Rightarrow> bool"
-
-text{*
-Define a function @{term "val"} that takes a BIGNAT and its corresponding BASE, and returns the natural number represented by it. *}
-
-consts val :: "nat \<Rightarrow> bigNat \<Rightarrow> nat"
-
-text {*\subsubsection*{Addition}*}
-
-text{*
-Define a function @{term "add"} that adds two BIGNATs with the same value for BASE. Make sure that your algorithm preserves the validity of the BIGNAT representation.
-*}
-
-consts add :: "nat \<Rightarrow> bigNat \<Rightarrow> bigNat \<Rightarrow> bigNat"
-
-text{*
-Using @{term "val"}, verify formally that your function @{term "add"} computes the sum of two BIGNATs correctly.*}
-
-text{*
-Using @{term "valid"}, verify formally that your function @{term "add"} preserves the validity of the BIGNAT representation.*}
-
-
-text {*
-\subsubsection*{Multiplication}*}
-
-text{*
-Define a function @{term "mult"} that multiplies two BIGNATs with the same value for BASE. You may use @{term "add"}, but not so often as to make the solution trivial. Make sure that your algorithm preserves the validity of the BIGNAT representation.
-*}
-consts mult :: "nat \<Rightarrow> bigNat \<Rightarrow> bigNat \<Rightarrow> bigNat"
-text{*
-Using @{term "val"}, verify formally that your function @{term "mult"} computes the product of two BIGNATs correctly.*}
-
-text{*
-Using @{term "valid"}, verify formally that your function @{term "mult"} preserves the validity of the BIGNAT representation.*}
-
-
-(*<*) end (*>*)
-
-
-
-
--- a/doc-src/Exercises/2003/a5/generated/a5.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{a{\isadigit{5}}}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{BIGNAT - Specification and Verification%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Hardware platforms have a limit on the largest number they can represent. This is normally fixed by the bit lengths of registers and ALUs used. In order to be able to perform calculations that require arbitrarily large numbers, the provided arithmetic operations need to be extended in order for them to work on an abstract data type representing numbers of arbitrary size.
-
-In this exercise we will build and verify an implementation for BIGNAT, an abstract data type representing natural numbers of arbitrary size.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-\subsubsection*{Representation}%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-A BIGNAT is represented as a list of natural numbers in a range supported by the target machine. In our case, this will be all natural numbers in the range [0, BASE-1]. (Note: natural numbers in Isabelle are of arbitrary size)%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{types}\ \isanewline
-\ \ bigNat\ {\isacharequal}\ {\isachardoublequote}nat\ list{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Define a function \isa{valid} that takes a value for BASE, and checks if the given BIGNAT is valid.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ valid\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ {\isasymRightarrow}\ bigNat\ {\isasymRightarrow}\ bool{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Define a function \isa{val} that takes a BIGNAT and its corresponding BASE, and returns the natural number represented by it.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ val\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ {\isasymRightarrow}\ bigNat\ {\isasymRightarrow}\ nat{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-\subsubsection*{Addition}%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Define a function \isa{add} that adds two BIGNATs with the same value for BASE. Make sure that your algorithm preserves the validity of the BIGNAT representation.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ add\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ {\isasymRightarrow}\ bigNat\ {\isasymRightarrow}\ bigNat\ {\isasymRightarrow}\ bigNat{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Using \isa{val}, verify formally that your function \isa{add} computes the sum of two BIGNATs correctly.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Using \isa{valid}, verify formally that your function \isa{add} preserves the validity of the BIGNAT representation.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-\subsubsection*{Multiplication}%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Define a function \isa{mult} that multiplies two BIGNATs with the same value for BASE. You may use \isa{add}, but not so often as to make the solution trivial. Make sure that your algorithm preserves the validity of the BIGNAT representation.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ mult\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ {\isasymRightarrow}\ bigNat\ {\isasymRightarrow}\ bigNat\ {\isasymRightarrow}\ bigNat{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Using \isa{val}, verify formally that your function \isa{mult} computes the product of two BIGNATs correctly.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Using \isa{valid}, verify formally that your function \isa{mult} preserves the validity of the BIGNAT representation.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isanewline
-\isanewline
-\isanewline
-\isanewline
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2003/a5/generated/session.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-\input{a5.tex}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2003/a6/ROOT.ML	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-  use_thy "a6";
--- a/doc-src/Exercises/2003/a6/a6.thy	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,116 +0,0 @@
-(*<*)
-theory a6 = Main:
-(*>*)
-
-
-subsection {* Optimising Compiler Verification *}
-
-text {*
-Section 3.3 of the Isabelle tutorial describes an expression compiler for a stack machine. In this exercise we will build and verify an optimising expression compiler for a register machine.
-*}
-
-text {*\subsubsection*{The Source Language: Expressions}*}
-
-text {*
-The arithmetic expressions we will work with consist of variables, constants, and an arbitrary binary operator @{text "oper"}.
-*}
-
-consts oper :: "nat \<Rightarrow> nat \<Rightarrow> nat";
-
-types var = string;
-
-datatype exp = 
-    Const nat 
-  | Var var
-  | Op exp exp
-;
-
-text {*
-The state in which an expression is evaluated is modelled by an {\em environment} function that maps variables to constants.
-*}
-
-types env = "var \<Rightarrow> nat";
-
-text {*
-Define a function @{text "value"} that evaluates an expression in a given environment.
-*}
-
-consts value :: "exp \<Rightarrow> env \<Rightarrow> nat";
-
-text {*\subsubsection*{The Register Machine}*}
-
-text {*
-As the name suggests, a register machine uses a collection of registers to store intermediate results. There exists a special register, called the accumulator, that serves as an implicit argument to each instruction. The rest of the registers make up the register file, and can be randomly accessed using an index. 
-*}
-
-types regIndex = nat;
-
-datatype cell = 
-    Acc
-  | Reg regIndex;
-
-
-text {*
-The state of the register machine is denoted by a function that maps storage cells to constants.
-*}
-
-types state = "cell \<Rightarrow> nat";
-
-text {*
-The instruction set for the register machine is defined as follows:
-*}
-
-datatype instr = 
-  LI nat        
-  -- "Load Immediate: loads a constant into the accumulator." 
-| LOAD regIndex 
-  -- "Loads the contents of a register into the accumulator."
-| STORE regIndex 
-  -- "Saves the contents of the accumulator in a register." 
-| OPER regIndex 
-  -- {* Performs the binary operation @{text "oper"}.*}
-    -- "The first argument is taken from a register."
-    -- "The second argument is taken from the accumulator." 
-    -- "The result of the computation is stored in the accumulator."
-;
-
-text {*
-A program is a list of such instructions. The result of running a program is a change of state of the register machine. Define a function @{text "exec"} that models this.
-*}
-
-consts exec :: "state \<Rightarrow> instr list \<Rightarrow> state"
-
-text {*\subsubsection*{Compilation}*}
-
-text {*
-The task now is to translate an expression into a sequence of instructions that computes it. At the end of execution, the result should be stored in the accumulator.
-
-Before execution, the values of each variable need to be stored somewhere in the register file. A {\it mapping} function maps variables to positions in the register file.
-*}
-
-types map = "var \<Rightarrow> regIndex";
-
-text {*
-Define a function @{text "cmp"} that compiles an expression into a sequence of instructions. The evaluation should proceed in a bottom-up depth-first manner.
-
-State and prove a theorem expressing the correctness of @{text "cmp"}.
-
-Hints:
-\begin{itemize}
-  \item The compilation function is dependent on the mapping function.
-  \item The compilation function needs some way of storing intermediate results. It should be clever enough to reuse registers it no longer needs.
-  \item It may be helpful to assume that at each recursive call, compilation is only allowed to use registers with indices greater than a given value to store intermediate results.
-\end{itemize}
-*}
-
-text {*\subsubsection*{Compiler Optimisation: Common Subexpressions}*}
-
-text {*
-In the previous section, the compiler @{text "cmp"} was allowed to evaluate a subexpression every time it occurred. In situations where arithmetic operations are costly, one may want to compute commonly occurring subexpressions only once.
-
-For example, to compute @{text "(a op b) op (a op b)"}, @{text "cmp"} was allowed three calls to @{text "oper"}, when only two were needed.
-
-Develop an optimised compiler @{text "optCmp"}, that evaluates every commonly occurring subexpression only once. Prove its correctness.
-*}
-
-(*<*) end (*>*)
\ No newline at end of file
--- a/doc-src/Exercises/2003/a6/generated/a6.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,158 +0,0 @@
-%
-\begin{isabellebody}%
-\def\isabellecontext{a{\isadigit{6}}}%
-\isamarkupfalse%
-%
-\isamarkupsubsection{Optimising Compiler Verification%
-}
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-Section 3.3 of the Isabelle tutorial describes an expression compiler for a stack machine. In this exercise we will build and verify an optimising expression compiler for a register machine.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-\subsubsection*{The Source Language: Expressions}%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-The arithmetic expressions we will work with consist of variables, constants, and an arbitrary binary operator \isa{oper}.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ oper\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}nat\ {\isasymRightarrow}\ nat\ {\isasymRightarrow}\ nat{\isachardoublequote}\isanewline
-\isanewline
-\isamarkupfalse%
-\isacommand{types}\ var\ {\isacharequal}\ string\isanewline
-\isanewline
-\isamarkupfalse%
-\isacommand{datatype}\ exp\ {\isacharequal}\ \isanewline
-\ \ \ \ Const\ nat\ \isanewline
-\ \ {\isacharbar}\ Var\ var\isanewline
-\ \ {\isacharbar}\ Op\ exp\ exp\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-The state in which an expression is evaluated is modelled by an {\em environment} function that maps variables to constants.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{types}\ env\ {\isacharequal}\ {\isachardoublequote}var\ {\isasymRightarrow}\ nat{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Define a function \isa{value} that evaluates an expression in a given environment.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ value\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}exp\ {\isasymRightarrow}\ env\ {\isasymRightarrow}\ nat{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-\subsubsection*{The Register Machine}%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-As the name suggests, a register machine uses a collection of registers to store intermediate results. There exists a special register, called the accumulator, that serves as an implicit argument to each instruction. The rest of the registers make up the register file, and can be randomly accessed using an index.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{types}\ regIndex\ {\isacharequal}\ nat\isanewline
-\isanewline
-\isamarkupfalse%
-\isacommand{datatype}\ cell\ {\isacharequal}\ \isanewline
-\ \ \ \ Acc\isanewline
-\ \ {\isacharbar}\ Reg\ regIndex\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-The state of the register machine is denoted by a function that maps storage cells to constants.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{types}\ state\ {\isacharequal}\ {\isachardoublequote}cell\ {\isasymRightarrow}\ nat{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-The instruction set for the register machine is defined as follows:%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{datatype}\ instr\ {\isacharequal}\ \isanewline
-\ \ LI\ nat\ \ \ \ \ \ \ \ \isanewline
-\ \ %
-\isamarkupcmt{Load Immediate: loads a constant into the accumulator.%
-}
-\ \isanewline
-{\isacharbar}\ LOAD\ regIndex\ \isanewline
-\ \ %
-\isamarkupcmt{Loads the contents of a register into the accumulator.%
-}
-\isanewline
-{\isacharbar}\ STORE\ regIndex\ \isanewline
-\ \ %
-\isamarkupcmt{Saves the contents of the accumulator in a register.%
-}
-\ \isanewline
-{\isacharbar}\ OPER\ regIndex\ \isanewline
-\ \ %
-\isamarkupcmt{Performs the binary operation \isa{oper}.%
-}
-\isanewline
-\ \ \ \ %
-\isamarkupcmt{The first argument is taken from a register.%
-}
-\isanewline
-\ \ \ \ %
-\isamarkupcmt{The second argument is taken from the accumulator.%
-}
-\ \isanewline
-\ \ \ \ %
-\isamarkupcmt{The result of the computation is stored in the accumulator.%
-}
-\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-A program is a list of such instructions. The result of running a program is a change of state of the register machine. Define a function \isa{exec} that models this.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{consts}\ exec\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}state\ {\isasymRightarrow}\ instr\ list\ {\isasymRightarrow}\ state{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-\subsubsection*{Compilation}%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-The task now is to translate an expression into a sequence of instructions that computes it. At the end of execution, the result should be stored in the accumulator.
-
-Before execution, the values of each variable need to be stored somewhere in the register file. A {\it mapping} function maps variables to positions in the register file.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isacommand{types}\ map\ {\isacharequal}\ {\isachardoublequote}var\ {\isasymRightarrow}\ regIndex{\isachardoublequote}\isamarkupfalse%
-%
-\begin{isamarkuptext}%
-Define a function \isa{cmp} that compiles an expression into a sequence of instructions. The evaluation should proceed in a bottom-up depth-first manner.
-
-State and prove a theorem expressing the correctness of \isa{cmp}.
-
-Hints:
-\begin{itemize}
-  \item The compilation function is dependent on the mapping function.
-  \item The compilation function needs some way of storing intermediate results. It should be clever enough to reuse registers it no longer needs.
-  \item It may be helpful to assume that at each recursive call, compilation is only allowed to use registers with indices greater than a given value to store intermediate results.
-\end{itemize}%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-\subsubsection*{Compiler Optimisation: Common Subexpressions}%
-\end{isamarkuptext}%
-\isamarkuptrue%
-%
-\begin{isamarkuptext}%
-In the previous section, the compiler \isa{cmp} was allowed to evaluate a subexpression every time it occurred. In situations where arithmetic operations are costly, one may want to compute commonly occurring subexpressions only once.
-
-For example, to compute \isa{{\isacharparenleft}a\ op\ b{\isacharparenright}\ op\ {\isacharparenleft}a\ op\ b{\isacharparenright}}, \isa{cmp} was allowed three calls to \isa{oper}, when only two were needed.
-
-Develop an optimised compiler \isa{optCmp}, that evaluates every commonly occurring subexpression only once. Prove its correctness.%
-\end{isamarkuptext}%
-\isamarkuptrue%
-\isamarkupfalse%
-\end{isabellebody}%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/2003/a6/generated/session.tex	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-\input{a6.tex}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "root"
-%%% End:
--- a/doc-src/Exercises/Hanoi.eps	Fri Apr 29 18:13:28 2005 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5389 +0,0 @@
-%!PS-Adobe-3.1 EPSF-3.0
-%%Title: Hanoi Kopie.eps
-%%Creator: Adobe Illustrator(R) X
-%%AI8_CreatorVersion: 10.0
%AI9_PrintingDataBegin
%%For: some
-%%CreationDate: 12/5/2002
-%%BoundingBox: 0 0 811 295
-%%HiResBoundingBox: 0 0 810.7642 294.5665
-%%CropBox: 0 0 810.7642 294.5665
-%%LanguageLevel: 2
-%%DocumentData: Clean7Bit
-%ADOBeginClientInjection: DocumentHeader "AI10"
-%ADOEndClientInjection: DocumentHeader "AI10"
-%%Pages: 1
-%%DocumentNeededResources: 
-%%DocumentSuppliedResources: procset Adobe_AGM_Image (1.0 0)
-%%+ procset Adobe_CoolType_Utility_MAKEOCF (1.13 0)
-%%+ procset Adobe_CoolType_Core (2.12 0)
-%%+ procset Adobe_AGM_Core (2.0 0)
-%%+ procset Adobe_AGM_Utils (1.0 0)
-%%DocumentFonts: 
-%%DocumentNeededFonts: 
-%%DocumentNeededFeatures: 
-%%DocumentSuppliedFeatures: 
-%%DocumentCustomColors: 
-%%CMYKCustomColor: 
-%%RGBCustomColor: 
-%%EndComments
-%%BeginDefaults
-%%ViewingOrientation: 1 0 0 1
-%%EndDefaults
-%%BeginProlog
-%ADOBeginClientInjection: DocumentProlog Start "AI10"
-%ADOEndClientInjection: DocumentProlog Start "AI10"
-%%BeginResource: procset Adobe_AGM_Utils 1.0 0
-%%Version: 1.0 0
-%%Copyright: Copyright (C) 2000-2000 Adobe Systems, Inc.  All Rights Reserved.
-systemdict /setpacking known
-{
-	currentpacking
-	true setpacking
-} if
-userdict /Adobe_AGM_Utils 60 dict dup begin put
-/bdf
-{
-	bind def
-} bind def
-/nd{
-	null def
-}bdf
-/xdf
-{
-	exch def
-}bdf
-/ldf 
-{
-	load def
-}bdf
-/ddf
-{
-	put
-}bdf	
-/xddf
-{
-	3 -1 roll put
-}bdf	
-/xpt
-{
-	exch put
-}bdf
-/ndf
-{ 
-	
-	exch dup where{
-		pop pop pop
-	}{
-		xdf
-	}ifelse
-}def
-/cdndf
-{
-	exch dup currentdict exch known{
-		pop pop
-	}{
-		exch def
-	}ifelse
-}def
-/bdict
-{
-	mark
-}bdf
-/edict
-{
-	counttomark 2 idiv dup dict begin {def} repeat pop currentdict end
-}def
-	
-/ps_level
-	/languagelevel where{
-		pop systemdict /languagelevel get exec
-	}{
-		1
-	}ifelse
-def
-/level2 
-	ps_level 2 ge
-def
-/level3 
-	ps_level 3 ge
-def
-/ps_version
-	{version cvr} stopped {
-		-1
-	}if
-def
-/makereadonlyarray
-{
-	/packedarray where{
-		pop packedarray
-	}{
-		array astore readonly
-	}ifelse
-}bdf
-/map_reserved_ink_name
-{
-	dup type /stringtype eq{
-		dup /Red eq{
-			pop (_Red_)
-		}{
-			dup /Green eq{
-				pop (_Green_)
-			}{
-				dup /Blue eq{
-					pop (_Blue_)
-				}{
-					dup /Cyan eq{
-						pop (_Cyan_)
-					}{
-						dup /Magenta eq{
-							pop (_Magenta_)
-						}{
-							dup /Yellow eq{
-								pop (_Yellow_)
-							}{
-								dup /Black eq{
-									pop (_Black_)
-								}{
-									dup () cvn eq{
-										pop (Process)
-									}if
-								}ifelse
-							}ifelse
-						}ifelse
-					}ifelse
-				}ifelse
-			}ifelse
-		}ifelse
-	}if
-}bdf
-/AGMUTIL_GSTATE 22 dict def
-/get_gstate
-{
-	AGMUTIL_GSTATE begin
-	/AGMUTIL_GSTATE_clr_spc currentcolorspace def
-	/AGMUTIL_GSTATE_clr_indx 0 def
-	/AGMUTIL_GSTATE_clr_comps 12 array def
-	mark currentcolor counttomark
-		{AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 3 -1 roll put
-		/AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 add def} repeat pop
-	/AGMUTIL_GSTATE_fnt rootfont def
-	/AGMUTIL_GSTATE_lw currentlinewidth def
-	/AGMUTIL_GSTATE_lc currentlinecap def
-	/AGMUTIL_GSTATE_lj currentlinejoin def
-	/AGMUTIL_GSTATE_ml currentmiterlimit def
-	currentdash /AGMUTIL_GSTATE_do xdf /AGMUTIL_GSTATE_da xdf
-	/AGMUTIL_GSTATE_sa currentstrokeadjust def
-	
-	/AGMUTIL_GSTATE_clr_rnd currentcolorrendering def
-	/AGMUTIL_GSTATE_op currentoverprint def
-	/AGMUTIL_GSTATE_bg currentblackgeneration cvlit def
-	/AGMUTIL_GSTATE_ucr currentundercolorremoval cvlit def
-	currentcolortransfer cvlit /AGMUTIL_GSTATE_gy_xfer xdf cvlit /AGMUTIL_GSTATE_b_xfer xdf
-		cvlit /AGMUTIL_GSTATE_g_xfer xdf cvlit /AGMUTIL_GSTATE_r_xfer xdf
-	/AGMUTIL_GSTATE_ht currenthalftone def
-	/AGMUTIL_GSTATE_flt currentflat def
-	end
-}def
-/set_gstate
-{
-	AGMUTIL_GSTATE begin
-	AGMUTIL_GSTATE_clr_spc setcolorspace
-	AGMUTIL_GSTATE_clr_indx {AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 1 sub get
-	/AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 sub def} repeat setcolor
-	AGMUTIL_GSTATE_fnt setfont
-	AGMUTIL_GSTATE_lw setlinewidth
-	AGMUTIL_GSTATE_lc setlinecap
-	AGMUTIL_GSTATE_lj setlinejoin
-	AGMUTIL_GSTATE_ml setmiterlimit
-	AGMUTIL_GSTATE_da AGMUTIL_GSTATE_do setdash
-	AGMUTIL_GSTATE_sa setstrokeadjust
-	
-	AGMUTIL_GSTATE_clr_rnd setcolorrendering
-	AGMUTIL_GSTATE_op setoverprint
-	AGMUTIL_GSTATE_bg cvx setblackgeneration
-	AGMUTIL_GSTATE_ucr cvx setundercolorremoval
-	AGMUTIL_GSTATE_r_xfer cvx AGMUTIL_GSTATE_g_xfer cvx AGMUTIL_GSTATE_b_xfer cvx
-		AGMUTIL_GSTATE_gy_xfer cvx setcolortransfer
-	
-	AGMUTIL_GSTATE_ht /HalftoneType get dup 9 eq exch 100 eq or
-		{
-		currenthalftone /HalftoneType get AGMUTIL_GSTATE_ht /HalftoneType get ne
-			{
-			  mark AGMUTIL_GSTATE_ht {sethalftone} stopped cleartomark
-			} if
-		}{
-		AGMUTIL_GSTATE_ht sethalftone
-		} ifelse
-	
-	AGMUTIL_GSTATE_flt setflat
-	end
-}def
-/AGMUTIL_str256 256 string def
-/AGMUTIL_src256 256 string def
-/AGMUTIL_dst64 64 string def
-/AGMUTIL_srcLen nd
-/AGMUTIL_ndx nd
-/rdline
-{
-	currentfile AGMUTIL_str256 readline pop
-} bdf
-/rdcmntline
-{
-	currentfile AGMUTIL_str256 readline pop
-	(%) anchorsearch {pop} if
-} bdf
-/filter_cmyk
-{	
-	dup type /filetype ne{
-		0 () /SubFileDecode filter
-	}if
-	[
-	exch
-	{
-		AGMUTIL_src256 readstring pop
-		dup length /AGMUTIL_srcLen exch def
-		/AGMUTIL_ndx 0 def
-		
-		AGMCORE_plate_ndx 4 AGMUTIL_srcLen 1 sub{
-			1 index exch get
-			AGMUTIL_dst64 AGMUTIL_ndx 3 -1 roll put
-			/AGMUTIL_ndx AGMUTIL_ndx 1 add def
-		}for
-		pop
-		AGMUTIL_dst64 0 AGMUTIL_ndx getinterval
-	}
-	bind
-	/exec cvx
-	] cvx
-} bdf
-/AGMUTIL_imagefile nd
-/AGMUTIL_imbuf nd
-/read_image_file
-{
-	AGMUTIL_imagefile 0 setfileposition
-	dup /DataSource {AGMUTIL_imagefile AGMUTIL_imbuf readstring pop} put
-	exch
-	load exec
-}def
-/write_image_file
-{
-	begin
-	{ (AGMUTIL_imagefile) (w+) file } stopped{
-		false
-	}{
-		Adobe_AGM_Utils/AGMUTIL_imagefile xddf 
-		Adobe_AGM_Utils/AGMUTIL_imbuf Width BitsPerComponent mul 7 add 8 idiv string ddf
-		1 1 Height { 
-			pop
-			DataSource dup type /filetype eq{
-				AGMUTIL_imbuf readstring pop
-			}{
-				exec
-			} ifelse
-			AGMUTIL_imagefile exch writestring
-		}for
-		true
-	}ifelse
-	end
-}def
-/close_image_file
-{
-	AGMUTIL_imagefile closefile (AGMUTIL_imagefile) deletefile
-}def
-/consumeimagedata
-{
-	begin
-	currentdict /MultipleDataSources known not
-		{/MultipleDataSources false def} if
-	MultipleDataSources
-		{
-		1 dict begin
-		/flushbuffer Width cvi string def
-		1 1 Height cvi
-			{
-			pop
-			0 1 DataSource length 1 sub
-				{
-				DataSource exch get
-				dup type dup 
-				/filetype eq
-					{
-					exch flushbuffer readstring pop pop
-					}if
-				/arraytype eq
-					{
-					exec pop
-					}if
-				}for
-			}for
-		end
-		}
-		{
-		/DataSource load type dup 
-		/filetype eq
-			{
-			1 dict begin
-			/flushbuffer Width Decode length 2 div mul cvi string def
-			1 1 Height { pop DataSource flushbuffer readstring pop pop} for
-			end
-			}if
-		/arraytype eq
-			{
-			1 1 Height { pop DataSource pop } for
-			}if
-		}ifelse
-	end
-}bdf
-/addprocs
-{
-     2{/exec load}repeat
-     3 1 roll
-     [ 5 1 roll ] bind cvx
-}def
-/modify_halftone_xfer
-{
-	currenthalftone dup length dict copy begin
-    currentdict 2 index known{
-    	1 index load dup length dict copy begin
-		currentdict/TransferFunction known{
-			/TransferFunction load
-		}{
-			currenttransfer
-		}ifelse
-	    addprocs /TransferFunction xdf 
-	    currentdict end def
-		currentdict end sethalftone
-	}{ 
-		currentdict/TransferFunction known{
-			/TransferFunction load 
-		}{
-			currenttransfer
-		}ifelse
-		addprocs /TransferFunction xdf
-		currentdict end sethalftone		
-		pop
-	}ifelse
-}def
-/doc_setup{
-	Adobe_AGM_Utils begin
-}bdf
-/doc_trailer{
-	currentdict Adobe_AGM_Utils eq{
-		end
-	}if
-}bdf
-systemdict /setpacking known
-{
-	setpacking
-} if
-%%EndResource
-%%BeginResource: procset Adobe_AGM_Core 2.0 0
-%%Version: 2.0 0
-%%Copyright: Copyright (C) 1997-1999 Adobe Systems, Inc.  All Rights Reserved.
-systemdict /setpacking known
-{
-	currentpacking
-	true setpacking
-} if
-userdict /Adobe_AGM_Core 205 dict dup begin put
-/nd{
-	null def
-}bind def
-/Adobe_AGM_Core_Id /Adobe_AGM_Core_2.0_0 def
-/AGMCORE_str256 256 string def
-/AGMCORE_src256 256 string def
-/AGMCORE_save nd
-/AGMCORE_graphicsave nd
-/AGMCORE_c 0 def
-/AGMCORE_m 0 def
-/AGMCORE_y 0 def
-/AGMCORE_k 0 def
-/AGMCORE_cmykbuf 4 array def
-/AGMCORE_screen [currentscreen] cvx def
-/AGMCORE_tmp 0 def
-/AGMCORE_&setgray nd
-/AGMCORE_&setcolor nd
-/AGMCORE_&setcolorspace nd
-/AGMCORE_&setcmykcolor nd
-/AGMCORE_cyan_plate nd
-/AGMCORE_magenta_plate nd
-/AGMCORE_yellow_plate nd
-/AGMCORE_black_plate nd
-/AGMCORE_plate_ndx nd
-/AGMCORE_get_ink_data nd
-/AGMCORE_is_cmyk_sep nd
-/AGMCORE_host_sep nd
-/AGMCORE_will_host_sep nd
-/AGMCORE_avoid_L2_sep_space nd
-/AGMCORE_distilling nd
-/AGMCORE_composite_job nd
-/AGMCORE_producing_seps nd
-/AGMCORE_ps_level -1 def
-/AGMCORE_ps_version -1 def
-/AGMCORE_environ_ok nd
-/AGMCORE_CSA_cache 0 dict def
-/AGMCORE_CSD_cache 0 dict def
-/AGMCORE_pattern_cache 0 dict def
-/AGMCORE_currentoverprint false def
-/AGMCORE_deltaX nd
-/AGMCORE_deltaY nd
-/AGMCORE_name nd
-/AGMCORE_sep_special nd
-/AGMCORE_err_strings 4 dict def
-/AGMCORE_cur_err nd
-/AGMCORE_ovp nd
-/AGMCORE_current_spot_alias false def
-/AGMCORE_inverting false def
-/AGMCORE_feature_dictCount nd
-/AGMCORE_feature_opCount nd
-/AGMCORE_feature_ctm nd
-/AGMCORE_ConvertToProcess false def
-/AGMCORE_Default_CTM matrix def
-/knockout_unitsq nd
-/AGMCORE_CRD_cache where{
-	pop
-}{
-	/AGMCORE_CRD_cache 0 dict def
-}ifelse
-/AGMCORE_key_known
-{
-	where{
-		/Adobe_AGM_Core_Id known
-	}{
-		false
-	}ifelse
-}ndf
-/flushinput
-{
-	save
-	/CompareBuffer 3 -1 roll def
-	/readbuffer 256 string def
-	mark
-	{
-	currentfile readbuffer {readline} stopped
-		{cleartomark mark}
-		{
-		not
-			{pop exit}
-		if
-		CompareBuffer eq
-			{exit}
-		if
-		}ifelse
-	}loop
-	cleartomark
-	restore
-}bdf
-/getspotfunction
-{
-	AGMCORE_screen exch pop exch pop
-	dup type /dicttype eq{
-		dup /HalftoneType get 1 eq{
-			/SpotFunction get
-		}{
-			dup /HalftoneType get 2 eq{
-				/GraySpotFunction get
-			}{ 
-				pop
-				{
-					abs exch abs 2 copy add 1 gt{
-						1 sub dup mul exch 1 sub dup mul add 1 sub
-					}{
-						dup mul exch dup mul add 1 exch sub
-					}ifelse
-				}bind
-			}ifelse
-		}ifelse
-	}if
-} def
-/clp_npth
-{
-	clip newpath
-} def
-/eoclp_npth
-{
-	eoclip newpath
-} def
-/stkpath_clp_npth
-{
-	strokepath clip newpath
-} def
-/stk_n_clp_npth
-{
-	gsave stroke grestore clip newpath
-} def
-/npth_clp
-{
-	newpath clip
-} def
-/graphic_setup
-{
-	/AGMCORE_graphicsave save def
-	concat
-	0 setgray
-	0 setlinecap
-	0 setlinejoin
-	1 setlinewidth
-	[] 0 setdash
-	10 setmiterlimit
-	newpath
-	false setoverprint
-	false setstrokeadjust
-	Adobe_AGM_Core/spot_alias get exec
-	/Adobe_AGM_Image where {
-		pop
-		Adobe_AGM_Image/spot_alias 2 copy known{
-			get exec
-		}{
-			pop pop
-		}ifelse
-	} if
-	100 dict begin
-	/showpage {} def
-	mark
-} def
-/graphic_cleanup
-{
-	cleartomark
-	end
-	AGMCORE_graphicsave restore
-} def
-/compose_error_msg
-{
-	grestoreall initgraphics	
-	/Helvetica findfont 10 scalefont setfont
-	
-	/AGMCORE_deltaY 100 def
-	/AGMCORE_deltaX 310 def
-			
-	clippath pathbbox newpath pop pop 36 add exch 36 add exch moveto
-	0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto
-	0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath
-	0 AGMCORE_&setgray
-	gsave 1 AGMCORE_&setgray fill grestore 
-	1 setlinewidth gsave stroke grestore
-		
-	currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto
-	
-	/AGMCORE_deltaY 12 def
-	/AGMCORE_tmp 0 def
-	AGMCORE_err_strings exch get
-		{
-		dup 32 eq
-			{
-			pop
-			AGMCORE_str256 0 AGMCORE_tmp getinterval
-			stringwidth pop currentpoint pop add AGMCORE_deltaX 28 add gt
-				{
-				currentpoint AGMCORE_deltaY sub exch pop
-				clippath pathbbox pop pop pop 44 add exch moveto
-				} if
-			AGMCORE_str256 0 AGMCORE_tmp getinterval show ( ) show
-			
-			0 1 AGMCORE_str256 length 1 sub
-				{
-				AGMCORE_str256 exch 0 put
-				}for
-			/AGMCORE_tmp 0 def
-			}
-			{
-				AGMCORE_str256 exch AGMCORE_tmp exch put
-				/AGMCORE_tmp AGMCORE_tmp 1 add def
-			} ifelse
-		} forall
-} bdf
-/doc_setup{
-	Adobe_AGM_Core begin
-	
-	/AGMCORE_will_host_separate xdf
-	/AGMCORE_ps_version xdf
-	/AGMCORE_ps_level xdf
-	
-	errordict /AGM_handleerror known not{
-		errordict /AGM_handleerror errordict /handleerror get put
-		errordict /handleerror {
-			Adobe_AGM_Core begin
-			$error /newerror get AGMCORE_cur_err null ne and{
-				$error /newerror false put
-				AGMCORE_cur_err compose_error_msg
-			}if
-			$error /newerror true put
-			end
-			errordict /AGM_handleerror get exec
-			} bind put
-		}if
-		
-	/AGMCORE_environ_ok 
-		ps_level AGMCORE_ps_level ge
-		ps_version AGMCORE_ps_version ge and 
-		AGMCORE_ps_level -1 eq or
-	def
-	
-	AGMCORE_environ_ok not
-		{/AGMCORE_cur_err /AGMCORE_bad_environ def} if
-	
-	/AGMCORE_&setgray systemdict/setgray get def
-	level2{
-		/AGMCORE_&setcolor systemdict/setcolor get def
-		/AGMCORE_&setcolorspace systemdict/setcolorspace get def
-	}if
-	/AGMCORE_distilling
-		/product where{
-			pop systemdict/setdistillerparams known product (Adobe PostScript Parser) ne and
-		}{
-			false
-		}ifelse
-	def
-	/AGMCORE_in_rip_sep
-		/AGMCORE_in_rip_sep where{
-			pop AGMCORE_in_rip_sep
-		}{
-			AGMCORE_distilling 
-			{
-				false
-			}{
-				userdict/Adobe_AGM_OnHost_Seps known{
-					false
-				}{
-					level2{
-						currentpagedevice/Separations 2 copy known{
-							get
-						}{
-							pop pop false
-						}ifelse
-					}{
-						false
-					}ifelse
-				}ifelse
-			}ifelse
-		}ifelse
-	def
-	level2 not{
-		/xput{
-			dup load dup length exch maxlength eq{
-				dup dup load dup
-				length dup 0 eq {pop 1} if 2 mul dict copy def
-			}if
-			load begin
-				def
- 			end
-		}def
-	}{
-		/xput{
-			load 3 1 roll put
-		}def
-	}ifelse
-	/AGMCORE_GSTATE AGMCORE_key_known not{
-		/AGMCORE_GSTATE 21 dict def
-		/AGMCORE_gstack 32 array def
-		/AGMCORE_gstackptr 0 def
-		/AGMCORE_gstacksaveptr 0 def
-		/AGMCORE_gstackframekeys 8 def
-											
-		/AGMCORE_&gsave /gsave ldf
-		/AGMCORE_&grestore /grestore ldf
-		/AGMCORE_&grestoreall /grestoreall ldf
-		/AGMCORE_&save /save ldf
-		/AGMCORE_gdictcopy {
-			begin
-			{ def } forall
-			end
-		}def
-		/AGMCORE_gput {
-			AGMCORE_gstack AGMCORE_gstackptr get
-			3 1 roll
-			put
-		}def
-		/AGMCORE_gget {
-			AGMCORE_gstack AGMCORE_gstackptr get
-			exch
-			get
-		}def
-		/gsave {
-			AGMCORE_&gsave
-			AGMCORE_gstack AGMCORE_gstackptr get
-			AGMCORE_gstackptr 1 add
-			dup 32 ge {limitcheck} if
-			Adobe_AGM_Core exch
-			/AGMCORE_gstackptr exch put
-			AGMCORE_gstack AGMCORE_gstackptr get
-			AGMCORE_gdictcopy
-		}def
-		/grestore {
-			AGMCORE_&grestore
-			AGMCORE_gstackptr 1 sub
-			dup AGMCORE_gstacksaveptr lt {1 add} if
-			Adobe_AGM_Core exch
-			/AGMCORE_gstackptr exch put
-		}def
-		/grestoreall {
-			AGMCORE_&grestoreall
-			Adobe_AGM_Core
-			/AGMCORE_gstackptr AGMCORE_gstacksaveptr put 
-		}def
-		/save {
-			AGMCORE_&save
-			AGMCORE_gstack AGMCORE_gstackptr get
-			AGMCORE_gstackptr 1 add
-			dup 32 ge {limitcheck} if
-			Adobe_AGM_Core begin
-				/AGMCORE_gstackptr exch def
-				/AGMCORE_gstacksaveptr AGMCORE_gstackptr def
-			end
-			AGMCORE_gstack AGMCORE_gstackptr get
-			AGMCORE_gdictcopy
-		}def
-		0 1 AGMCORE_gstack length 1 sub {
-				AGMCORE_gstack exch AGMCORE_gstackframekeys dict put
-		} for
-	}if
-	/currentcmykcolor [0 0 0 0] AGMCORE_gput
-	/currentstrokeadjust false AGMCORE_gput
-	/currentcolorspace [/DeviceGray] AGMCORE_gput
-	/sep_tint 0 AGMCORE_gput
-	/sep_colorspace_dict null AGMCORE_gput
-	/indexed_colorspace_dict null AGMCORE_gput
-	/currentcolor_intent () AGMCORE_gput
-	/customcolor_tint 1 AGMCORE_gput
-	end
-}def
-/page_setup
-{
-	/setcmykcolor where{
-		pop
-		Adobe_AGM_Core/AGMCORE_&setcmykcolor /setcmykcolor load put
-	}if
-	Adobe_AGM_Core begin
-	/setcmykcolor
-	{
-		4 copy AGMCORE_cmykbuf astore /currentcmykcolor exch AGMCORE_gput
-		1 sub 4 1 roll
-		3 {
-			3 index add neg dup 0 lt {
-				pop 0
-			} if
-			3 1 roll
-		} repeat
-		setrgbcolor pop
-	}ndf
-	/currentcmykcolor
-	{
-		/currentcmykcolor AGMCORE_gget aload pop
-	}ndf
-	/setoverprint
-	{
-		pop
-	}ndf
-	/currentoverprint
-	{
-		false
-	}ndf
-	/AGMCORE_deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt def
-	/AGMCORE_cyan_plate 1 0 0 0 test_cmyk_color_plate def
-	/AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def
-	/AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def
-	/AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def
-	/AGMCORE_plate_ndx 
-		AGMCORE_cyan_plate{ 
-			0
-		}{
-			AGMCORE_magenta_plate{
-				1
-			}{
-				AGMCORE_yellow_plate{
-					2
-				}{
-					AGMCORE_black_plate{
-						3
-					}{
-						4
-					}ifelse
-				}ifelse
-			}ifelse
-		}ifelse
-		def
-	/AGMCORE_composite_job
-		AGMCORE_cyan_plate AGMCORE_magenta_plate and AGMCORE_yellow_plate and AGMCORE_black_plate and def
-	
-	/AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def
-	
-	/AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def
-	
-	/AGM_preserve_spots 
-		/AGM_preserve_spots where{
-			pop AGM_preserve_spots
-		}{
-			AGMCORE_distilling AGMCORE_producing_seps or
-		}ifelse
-	def
-	/AGM_is_distiller_preserving_spotimages
-	{
-		currentdistillerparams/PreserveOverprintSettings known
-		{
-			currentdistillerparams/PreserveOverprintSettings get
-				{
-					currentdistillerparams/ColorConversionStrategy known
-					{
-						currentdistillerparams/ColorConversionStrategy get
-						/LeaveColorUnchanged eq
-					}{
-						true
-					}ifelse
-				}{
-					false
-				}ifelse
-		}{
-			false
-		}ifelse
-	}def
-	/convert_spot_to_process where {pop}{
-		/convert_spot_to_process
-		{
-			dup dup (None) eq exch (All) eq or
-				{
-				pop false
-				}{
-				AGMCORE_host_sep
-				{ 
-					gsave
-					1 0 0 0 setcmykcolor currentgray 1 exch sub
-					0 1 0 0 setcmykcolor currentgray 1 exch sub
-					0 0 1 0 setcmykcolor currentgray 1 exch sub
-					0 0 0 1 setcmykcolor currentgray 1 exch sub
-					add add add 0 eq
-					{
-						pop false
-					}{
-						false setoverprint
-						1 1 1 1 5 -1 roll findcmykcustomcolor 1 setcustomcolor
-						currentgray 0 eq
-					}ifelse
-					grestore
-				}{
-					AGMCORE_distilling
-					{
-						pop AGM_is_distiller_preserving_spotimages not
-					}{
-						Adobe_AGM_Core/AGMCORE_name xddf
-						false
-						currentpagedevice/OverrideSeparations known
-							{
-							currentpagedevice/OverrideSeparations get
-								{
-								/HqnSpots /ProcSet resourcestatus
-									{
-									pop pop pop true
-									}if
-								}if
-							}if					
-							{
-							AGMCORE_name /HqnSpots /ProcSet findresource /TestSpot get exec not
-							}{
-							gsave
-							[/Separation AGMCORE_name /DeviceGray {}]setcolorspace
-							false
-							currentpagedevice/SeparationColorNames 2 copy known
-							{
-								get
-								{ AGMCORE_name eq or}forall
-							not
-							}{
-								pop pop pop true
-							}ifelse
-							grestore
-						}ifelse
-					}ifelse
-				}ifelse
-			}ifelse
-		}def
-	}ifelse
-	/convert_to_process where {pop}{
-		/convert_to_process
-		{
-			dup length 0 eq
-				{
-				pop false
-				}{
-				AGMCORE_host_sep
-				{ 
-				true exch
-					{
-					convert_spot_to_process and
-					}
-				forall
-				}{
-				false exch
-					{
-					convert_spot_to_process or
-					}
-				forall
-				}ifelse
-			}ifelse
-		}def
-	}ifelse	
-	AGMCORE_host_sep AGMCORE_will_host_separate not and {
-		/AGMCORE_cur_err /AGMCORE_color_space_onhost_seps def
-		AGMCORE_color_space_onhost_seps
-	}if
-	/AGMCORE_avoid_L2_sep_space  
-		version cvr 2012 lt 
-		level2 and 
-		AGMCORE_producing_seps not and
-	def
-	/AGMCORE_is_cmyk_sep
-		AGMCORE_cyan_plate AGMCORE_magenta_plate or AGMCORE_yellow_plate or AGMCORE_black_plate or
-	def
-	/AGM_avoid_0_cmyk where{
-		pop AGM_avoid_0_cmyk
-	}{
-		AGM_preserve_spots 
-		userdict/Adobe_AGM_OnHost_Seps known 
-		userdict/Adobe_AGM_InRip_Seps known or
-		not and
-	}ifelse
-	{
-		/setcmykcolor[
-			{
-				4 copy add add add 0 eq currentoverprint and{
-					pop 0.0005
-				}if
-			}/exec cvx
-			/AGMCORE_&setcmykcolor load dup type/operatortype ne{
-				/exec cvx
-			}if
-		]cvx def
-	}if
-	AGMCORE_host_sep{
-		/AGMCORE_get_ink_data
-			AGMCORE_cyan_plate{
-				{pop pop pop}
-			}{
-			  	AGMCORE_magenta_plate{
-			  		{4 3 roll pop pop pop}
-			  	}{
-			  		AGMCORE_yellow_plate{
-			  			{4 2 roll pop pop pop}
-			  		}{
-			  			{4 1 roll pop pop pop}
-			  		}ifelse
-			  	}ifelse
-			}ifelse
-		def
-		/clip AGMCORE_key_known not{
-			Adobe_AGM_Core/AGMCORE_&clip /clip load put
-			/clip
-			{
-				current_spot_alias{
-					currentdict/InksUsed known{
-						[
-						InksUsed{
-							dup map_alias{
-								/Name get exch pop
-							}if
-						}forall
-						]
-						/InksUsed xdf
-					}if
-				}if
-				AGMCORE_&clip
-			}def
-		}if
-		/eoclip AGMCORE_key_known not{
-			Adobe_AGM_Core/AGMCORE_&eoclip /eoclip load put
-			/eoclip
-			{
-				current_spot_alias{
-					currentdict/InksUsed known{
-						[
-						InksUsed{
-							dup map_alias{
-								/Name get exch pop
-							}if
-						}forall
-						]
-						/InksUsed xdf
-					}if
-				}if
-				AGMCORE_&eoclip
-			}def
-		}if
-	}if
-	AGMCORE_in_rip_sep{
-		/setcustomcolor
-		{
-			exch aload pop
-			dup 7 1 roll inRip_spot_has_ink not	{ 
-				4 {4 index mul 4 1 roll}
-				repeat
-				/DeviceCMYK setcolorspace
-				6 -2 roll pop pop
-			}{ 
-				Adobe_AGM_Core begin
-					/AGMCORE_k xdf /AGMCORE_y xdf /AGMCORE_m xdf /AGMCORE_c xdf
-				end
-				[/Separation 4 -1 roll /DeviceCMYK
-				{dup AGMCORE_c mul exch dup AGMCORE_m mul exch dup AGMCORE_y mul exch AGMCORE_k mul}
-				]
-				setcolorspace
-			}ifelse
-			setcolor
-		}ndf
-		/setseparationgray
-		{
-			[/Separation (All) /DeviceGray {}] setcolorspace_opt
-			1 exch sub setcolor
-		}ndf
-	}{
-		/setseparationgray
-		{
-			AGMCORE_&setgray
-		}ndf
-	}ifelse
-	/findcmykcustomcolor
-	{
-		5 makereadonlyarray
-	}ndf
-	/setcustomcolor
-	{
-		exch aload pop pop
-		4 {4 index mul 4 1 roll} repeat
-		setcmykcolor pop
-	}ndf
-	
-	/has_color
-		/colorimage where{
-			AGMCORE_producing_seps{
-				pop true
-			}{
-				systemdict eq
-			}ifelse
-		}{
-			false
-		}ifelse
-	def
-	
-	/map_index
-	{
-		1 index mul exch getinterval {255 div} forall
-	}def
-	
-	level2{
-		/mo /moveto ldf
-		/li /lineto ldf
-		/cv /curveto ldf
-		/knockout_unitsq
-		{
-			1 setgray
-			0 0 1 1 rectfill
-		}def
-		/level2ScreenFreq{
-			begin
-			60
-			HalftoneType 1 eq{
-				pop Frequency
-			}if
-			HalftoneType 2 eq{
-				pop GrayFrequency
-			}if
-			HalftoneType 5 eq{
-				pop Default level2ScreenFreq
-			}if
-			 end
-		}def
-		/currentScreenFreq{
-			currenthalftone level2ScreenFreq
-		}def
-		level2 /setcolorspace AGMCORE_key_known not and{
-		
-			/AGMCORE_&&&setcolorspace /setcolorspace ldf
-			/AGMCORE_ReplaceMappedColor
-			{
-				dup type dup /arraytype eq exch /packedarraytype eq or
-				{
-					dup 0 get dup /Separation eq
-					{
-						pop
-						dup length array copy
-						dup dup 1 get
-						current_spot_alias
-						{
-							dup map_alias
-							{
-								begin
-								/sep_colorspace_dict currentdict AGMCORE_gput
-								pop pop	pop
-									
-								[ 
-									/Separation Name 
-									CSA map_csa
-									dup /MappedCSA xdf 
-									/sep_colorspace_proc load
-								]
-								dup Name
-								end
-							}if
-						}if
-						map_reserved_ink_name 1 exch put
-					}{
-						/DeviceN eq 
-						{
-							dup length array copy
-							dup dup 1 get [ 
-								exch {
-									current_spot_alias{
-										dup map_alias{
-											/Name get exch pop
-										}if
-									}if
-									map_reserved_ink_name
-								} forall 
-							] 1 exch put
-						}if
-					}ifelse
-				}if
-			}def
-			/setcolorspace
-			{
-				dup type dup /arraytype eq exch /packedarraytype eq or
-				{
-					dup 0 get /Indexed eq
-					{
-						AGMCORE_distilling
-						{
-							/PhotoshopDuotoneList where
-							{
-								pop false
-							}{
-								true
-							}ifelse
-						}{
-							true
-						}ifelse
-						{
-							aload pop 3 -1 roll
-							AGMCORE_ReplaceMappedColor
-							3 1 roll 4 array astore
-						}if
-					}{
-						AGMCORE_ReplaceMappedColor
-					}ifelse
-				}if
-				AGMCORE_&&&setcolorspace
-			}def
-		}if	
-	}{
-		
-		/adj
-		{
-			currentstrokeadjust{
-				transform
-				0.25 sub round 0.25 add exch
-				0.25 sub round 0.25 add exch
-				itransform
-			}if
-		}def
-		/mo{
-			adj moveto
-		}def
-		/li{
-			adj lineto
-		}def
-		/cv{
-			6 2 roll adj
-			6 2 roll adj
-			6 2 roll adj curveto
-		}def
-		/knockout_unitsq
-		{
-			1 setgray
-			8 8 1 [8 0 0 8 0 0] {<ffffffffffffffff>} image
-		}def
-		/currentstrokeadjust{
-			/currentstrokeadjust AGMCORE_gget
-		}def
-		/setstrokeadjust{
-			/currentstrokeadjust exch AGMCORE_gput
-		}def
-		/currentScreenFreq{
-			currentscreen pop pop
-		}def
-		/setcolorspace
-		{
-			/currentcolorspace exch AGMCORE_gput
-		} def
-		
-		/currentcolorspace
-		{
-			/currentcolorspace AGMCORE_gget
-		} def
-		
-		/n_color_components
-		{
-			dup type /arraytype eq{
-				0 get
-			}if
-			dup /DeviceGray eq{
-				pop 1
-			}{
-				/DeviceCMYK eq{
-					4
-				}{
-					3
-				}ifelse
-			}ifelse
-		} def
-		
-		/setcolor_devicecolor
-		{
-			dup type /arraytype eq{
-				0 get
-			}if
-			dup /DeviceGray eq{
-				pop setgray
-			}{
-				/DeviceCMYK eq{
-					setcmykcolor
-				}{
-					setrgbcolor
-				}ifelse
-			}ifelse
-		}def
-	
-		/setcolor
-		{
-			currentcolorspace 0 get
-			dup /DeviceGray ne{
-				dup /DeviceCMYK ne{
-					dup /DeviceRGB ne{
-						dup /Separation eq{
-							pop
-							currentcolorspace 3 get exec
-							currentcolorspace 2 get
-						}{
-							dup /Indexed eq{
-								pop
-								currentcolorspace 3 get dup type /stringtype eq{
-									currentcolorspace 1 get n_color_components
-									3 -1 roll map_index
-								}{
-									exec
-								}ifelse
-								currentcolorspace 1 get
-							}{
-								/AGMCORE_cur_err /AGMCORE_invalid_color_space def
-								AGMCORE_invalid_color_space
-							}ifelse
-						}ifelse
-					}if
-				}if
-			}if
-			setcolor_devicecolor
-		} def
-	}ifelse
-	
-	/sop /setoverprint ldf
-	/lw /setlinewidth ldf
-	/lc /setlinecap ldf
-	/lj /setlinejoin ldf
-	/ml /setmiterlimit ldf
-	/dsh /setdash ldf
-	/sadj /setstrokeadjust ldf
-	/gry /setgray ldf
-	/rgb /setrgbcolor ldf
-	/cmyk /setcmykcolor ldf
-	/sep /setsepcolor ldf
-	/idx /setindexedcolor ldf
-	/colr /setcolor ldf
-	/csacrd /set_csa_crd ldf
-	/sepcs /setsepcolorspace ldf
-	/idxcs /setindexedcolorspace ldf
-	/cp /closepath ldf
-	/clp /clp_npth ldf
-	/eclp /eoclp_npth ldf
-	/spclp /stkpath_clp_npth ldf
-	/f /fill ldf
-	/ef /eofill ldf
-	/s /stroke ldf
-	/sclp /stk_n_clp_npth ldf
-	/nclp /npth_clp ldf
-	/gset /graphic_setup ldf
-	/gcln /graphic_cleanup ldf
-	
-	currentdict{
-		dup xcheck 1 index type dup /arraytype eq exch /packedarraytype eq or and {
-			bind
-		}if
-		def
-	}forall
-}def
-/page_trailer
-{
-	end
-}def
-/doc_trailer{
-}def
-systemdict /findcolorrendering known{
-	/findcolorrendering systemdict /findcolorrendering get def
-}if
-systemdict /setcolorrendering known{
-	/setcolorrendering systemdict /setcolorrendering get def
-}if
-/test_cmyk_color_plate
-{
-	gsave
-	setcmykcolor currentgray 1 ne
-	grestore
-}def
-/inRip_spot_has_ink
-{
-	dup Adobe_AGM_Core/AGMCORE_name xddf
-	convert_spot_to_process not
-}def
-/current_ink
-{
-	dup length 0 eq{
-		pop true
-	}{
-		Adobe_AGM_Core/ink_result false put
-		{
-			dup /ProcessCyan eq{
-				AGMCORE_cyan_plate ink_result or Adobe_AGM_Core/ink_result xddf
-			}{
-				dup /ProcessMagenta eq{
-					AGMCORE_magenta_plate ink_result or Adobe_AGM_Core/ink_result xddf
-				}{
-					dup /ProcessYellow eq{
-						AGMCORE_yellow_plate ink_result or Adobe_AGM_Core/ink_result xddf
-					}{
-						dup /ProcessBlack eq{
-							AGMCORE_black_plate ink_result or Adobe_AGM_Core/ink_result xddf
-						}{
-							dup /sep_colorspace_dict AGMCORE_gget dup null eq{
-								pop false ink_result or Adobe_AGM_Core/ink_result xddf
-							}{
-								/Name get eq{
-									1 setsepcolor
-									currentgray 1 ne ink_result or Adobe_AGM_Core/ink_result xddf
-								}{
-									false ink_result or Adobe_AGM_Core/ink_result xddf
-								}ifelse
-							}ifelse
-						}ifelse
-					}ifelse
-				}ifelse
-			}ifelse
-			pop 
-		} forall
-		ink_result
-	}ifelse
-}def
-/map255_to_range
-{
-	1 index sub
-	3 -1 roll 255 div mul add
-}def
-/set_csa_crd
-{
-	/sep_colorspace_dict null AGMCORE_gput
-	begin
-		CSA map_csa setcolorspace_opt
-		set_crd
-	end
-}
-def
-/setsepcolor
-{ 
-	
-	/sep_colorspace_dict AGMCORE_gget begin
-		dup /sep_tint exch AGMCORE_gput
-		TintProc
-	end
-} def
-/sep_colorspace_proc
-{
-	Adobe_AGM_Core/AGMCORE_tmp xddf
-	/sep_colorspace_dict AGMCORE_gget begin
-	currentdict/Components known{
-		Components aload pop 
-		TintMethod/Lab eq{
-			2 {AGMCORE_tmp mul NComponents 1 roll} repeat
-			LMax sub AGMCORE_tmp mul LMax add  NComponents 1 roll
-		}{
-			TintMethod/Subtractive eq{
-				NComponents{
-					AGMCORE_tmp mul NComponents 1 roll
-				}repeat
-			}{
-				NComponents{
-					1 sub AGMCORE_tmp mul 1 add  NComponents 1 roll
-				} repeat
-			}ifelse
-		}ifelse
-	}{
-		ColorLookup AGMCORE_tmp ColorLookup length 1 sub mul round cvi get
-		aload pop
-	}ifelse
-	end
-} def
-/sep_colorspace_gray_proc
-{
-	Adobe_AGM_Core/AGMCORE_tmp xddf
-	/sep_colorspace_dict AGMCORE_gget begin
-	GrayLookup AGMCORE_tmp GrayLookup length 1 sub mul round cvi get
-	end
-} def
-/sep_proc_name
-{
-	dup 0 get 
-	dup /DeviceRGB eq exch /DeviceCMYK eq or level2 not and has_color not and{
-		pop [/DeviceGray]
-		/sep_colorspace_gray_proc
-	}{
-		/sep_colorspace_proc
-	}ifelse
-} def
-/setsepcolorspace
-{ 
-	
-	current_spot_alias{
-		dup begin
-			Name map_alias{
-				exch pop
-			}if
-		end
-	}if
-	dup /sep_colorspace_dict exch AGMCORE_gput
-	begin
-	/MappedCSA CSA map_csa def
-	Adobe_AGM_Core/AGMCORE_sep_special Name dup () eq exch (All) eq or ddf
-	
-	AGMCORE_avoid_L2_sep_space{
-		[/Indexed MappedCSA sep_proc_name 255 exch 
-			{ 255 div } /exec cvx 3 -1 roll [ 4 1 roll load /exec cvx ] cvx 
-		] setcolorspace_opt
-		/TintProc {
-			255 mul round cvi setcolor
-		}bdf
-	}{
-		MappedCSA 0 get /DeviceCMYK eq 
-		currentdict/Components known and 
-		AGMCORE_sep_special not and{
-			/TintProc [
-				Components aload pop Name findcmykcustomcolor 
-				/exch cvx /setcustomcolor cvx
-			] cvx bdf
-		}{
- 			AGMCORE_host_sep Name (All) eq and{
- 				/TintProc { 
-					1 exch sub setseparationgray 
-				}bdf
- 			}{
-				AGMCORE_in_rip_sep MappedCSA 0 get /DeviceCMYK eq and 
-				AGMCORE_host_sep or
-				Name () eq and{
-					/TintProc [
-						MappedCSA sep_proc_name exch 0 get /DeviceCMYK eq{
-							cvx /setcmykcolor cvx
-						}{
-							cvx /setgray cvx
-						}ifelse
-					] cvx bdf
-				}{
-					AGMCORE_producing_seps MappedCSA 0 get dup /DeviceCMYK eq exch /DeviceGray eq or and AGMCORE_sep_special not and{
-	 					/TintProc [
-							/dup cvx
-							MappedCSA sep_proc_name cvx exch
-							0 get /DeviceGray eq{
-								1 /exch cvx /sub cvx 0 0 0 4 -1 /roll cvx
-							}if
-							/Name cvx /findcmykcustomcolor cvx /exch cvx
-							
-							AGMCORE_host_sep{
-								AGMCORE_is_cmyk_sep
-							}{
-								Name inRip_spot_has_ink not
-							}ifelse
-							{
-		 						/pop cvx 1
-							}if
-							/setcustomcolor cvx
-						] cvx bdf
- 					}{ 
-						/TintProc /setcolor ldf
-						
-						[/Separation Name MappedCSA sep_proc_name load ] setcolorspace_opt
-					}ifelse
-				}ifelse
-			}ifelse
-		}ifelse
-	}ifelse
-	set_crd
-	setsepcolor
-	end
-} def
-/setindexedcolorspace
-{
-	dup /indexed_colorspace_dict exch AGMCORE_gput
-	begin
-		/MappedCSA CSA map_csa def
-		AGMCORE_host_sep level2 not and{
-			0 0 0 0 setcmykcolor
-		}{
-			[/Indexed MappedCSA 
-			level2 not has_color not and{
-				dup 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or{
-					pop [/DeviceGray]
-				}if
-				HiVal GrayLookup
-			}{
-				HiVal 
-				currentdict/RangeArray known{
-					{ 
-						/indexed_colorspace_dict AGMCORE_gget begin
-						Lookup exch 
-						dup HiVal gt{
-							pop HiVal
-						}if
-						NComponents mul NComponents getinterval {} forall
-						NComponents 1 sub -1 0{
-							RangeArray exch 2 mul 2 getinterval aload pop map255_to_range
-							NComponents 1 roll
-						}for
-						end
-					} bind
-				}{
-					Lookup
-				}ifelse
-			}ifelse
-			] setcolorspace_opt
-			
-			set_crd
-		}ifelse
-	end
-}def
-/setindexedcolor
-{
-	AGMCORE_host_sep{
-		/indexed_colorspace_dict AGMCORE_gget/Lookup get 4 3 -1 roll map_index setcmykcolor
-	}{
-		setcolor
-	}ifelse
-} def
-/ignoreimagedata
-{
-	currentoverprint not{
-		gsave 
-		dup begin
-		1 setgray
-		0 0 ImageMatrix itransform 
-		Width Height ImageMatrix idtransform rectfill 
-		end
-		grestore
-		}if
-	consumeimagedata
-}def
-/add_csa
-{
-	Adobe_AGM_Core begin
-			/AGMCORE_CSA_cache xput
-	end
-}def
-/map_csa
-{
-	dup type /nametype eq{
-		Adobe_AGM_Core/AGMCORE_CSA_cache get exch get
-	}if
-}def
-/add_csd
-{
-	Adobe_AGM_Core begin
-		/AGMCORE_CSD_cache xput
-	end
-}def
-/get_csd
-{
-	dup type /nametype eq{
-		Adobe_AGM_Core/AGMCORE_CSD_cache get exch get
-	}if
-}def
-/get_csd_by_name
-{
-	dup type dup /nametype eq exch /stringtype eq or{
-		Adobe_AGM_Core begin
-		/AGMCORE_CSD_Name xdf
-		AGMCORE_CSD_cache
-		{
-			dup /Name get AGMCORE_CSD_Name eq
-			{
-				exch pop exit
-			}{
-				pop
-			}ifelse
-			pop
-		}forall
-		end
-	}if
-}def
-/cachepattern_level2
-{
-	4 dict begin
-	/comparebuffer exch def
-	/holdbuffer exch def
-	/readbuffer 1024 string def
-	/LZWFilter holdbuffer /LZWEncode filter def
-	{
-		currentfile readbuffer readline not
-			{pop exit}
-		if
-		dup LZWFilter exch writestring
-		LZWFilter (\n) writestring
-		comparebuffer eq
-			{exit}
-		if
-	}loop
-	LZWFilter closefile
-	end
-}def
-/cachepattern_level3
-{
-	3 dict begin
-	/comparebuffer exch def
-	/readbuffer 1024 string def
-	/DoEOL false def
-	{ 
-		DoEOL
-			{
-			(\n)
-			/DoEOL false def
-			}
-			{
-			currentfile readbuffer readline not
-				{pop ()}
-				{
-				dup length 0 eq
-					{ pop(\n)}
-					{
-					dup comparebuffer eq
-						{pop ()}
-						{/DoEOL true def}
-					ifelse
-					}
-				ifelse
-				}
-			ifelse
-			}
-		ifelse
-	} /ReusableStreamDecode filter
-	end
-}def
-/add_pattern
-{
-	Adobe_AGM_Core begin
-		/AGMCORE_pattern_cache xput
-	end
-}def
-/get_pattern
-{
-	dup type /nametype eq{
-		Adobe_AGM_Core/AGMCORE_pattern_cache get exch get
-	}if
-}def
-/make_pattern
-{
-	dup matrix currentmatrix matrix concatmatrix 0 0 3 2 roll itransform
-	exch 3 index /XStep get 1 index exch 2 copy div cvi mul sub sub
-	exch 3 index /YStep get 1 index exch 2 copy div cvi mul sub sub
-	matrix translate exch matrix concatmatrix
-	makepattern
-}def
-/set_pattern
-{
-	dup /PatternType get 1 eq{
-		dup /PaintType get 1 eq{
-			false sop [/DeviceGray] setcolorspace 0 setgray
-		}if
-	}if
-	setpattern
-}def
-/setcolorspace_opt
-{
-	dup currentcolorspace eq{
-		pop
-	}{
-		setcolorspace
-	}ifelse
-}def
-/updatecolorrendering
-{
-	
-	currentcolorrendering/Intent known{
-		currentcolorrendering/Intent get
-	}{
-		null
-	}ifelse
-	
-	Intent ne{
-		false  
-		Intent
-		AGMCORE_CRD_cache {
-			exch pop 
-			begin
-				dup Intent eq{
-					currentdict setcolorrendering_opt
-					end 
-					exch pop true exch	
-					exit
-				}if
-			end
-		} forall
-		pop
-		not{
-			systemdict /findcolorrendering known{
-				Intent findcolorrendering pop
-				/ColorRendering findresource 
-				dup length dict copy
-				setcolorrendering_opt
-			}if
-		}if
-	}if
-} def
-/add_crd
-{
-	AGMCORE_CRD_cache 3 1 roll put
-}def
-/set_crd
-{
-	AGMCORE_host_sep not level2 and{
-		currentdict/CRD known{
-			AGMCORE_CRD_cache CRD get dup null ne{
-				setcolorrendering_opt
-			}{
-				pop
-			}ifelse
-		}{
-			currentdict/Intent known{
-				updatecolorrendering
-			}if
-		}ifelse
-	}if
-}def
-/setcolorrendering_opt
-{
-	dup currentcolorrendering eq{
-		pop
-	}{
-		begin
-			/Intent Intent def
-			currentdict
-		end
-		setcolorrendering
-	}ifelse
-}def
-/cdndf
-{
-	exch dup currentdict exch known{
-		pop pop
-	}{
-		exch def
-	}ifelse
-}def
-/cpaint_gcomp
-{
-	convert_to_process Adobe_AGM_Core/AGMCORE_ConvertToProcess xddf
-	Adobe_AGM_Core/AGMCORE_ConvertToProcess get not
-	{
-		(%end_cpaint_gcomp) flushinput
-	}if
-}def
-/cpaint_gsep
-{
-	Adobe_AGM_Core/AGMCORE_ConvertToProcess get
-	{	
-		(%end_cpaint_gsep) flushinput
-	}if
-}def
-/cpaint_gend
-{
-	newpath
-}def
-/AGMCORE_ctm_stack bdict
-	/push_ctm {
-		stack length size le{
-			stack dup length 2 mul array 
-			dup /stack exch def
-			copy pop
-		}if
-		stack size 3 -1 roll put
-		/size size 1 add def
-	}
-	/pop_ctm {
-		/size size 1 sub def
-		size 0 lt{ 
-			/size 0 def
-		}if
-		stack size get
-	}
-	/stack 1 array
-	/size 0 
-edict 
-def
-/save_ctm
-{
-	matrix currentmatrix AGMCORE_ctm_stack begin 
-		push_ctm 
-	end
-}def
-/restore_ctm
-{
-	AGMCORE_ctm_stack begin
-		pop_ctm 
-	end
-	setmatrix
-}def
-/path_rez
-{
-	dup 0 ne{
-		AGMCORE_deviceDPI exch div 
-		dup 1 lt{
-			pop 1
-		}if
-		setflat
-	}{
-		pop
-	}ifelse 	
-}def
-/rdcmntline {
-	currentfile AGMCORE_str256 readline pop
-	(%) anchorsearch {pop} if
-} def
-/set_spot_alias_ary
-{
-	/AGMCORE_SpotAliasAry where{
-		pop pop
-	}{
-		Adobe_AGM_Core/AGMCORE_SpotAliasAry xddf
-		true set_spot_alias
-	}ifelse
-}def
-/set_spot_alias
-{
-	/AGMCORE_SpotAliasAry where{
-		/AGMCORE_current_spot_alias 3 -1 roll put
-	}{
-		pop
-	}ifelse
-}def
-/current_spot_alias
-{
-	/AGMCORE_SpotAliasAry where{
-		/AGMCORE_current_spot_alias get
-	}{
-		false
-	}ifelse
-}def
-/map_alias
-{
-	/AGMCORE_SpotAliasAry where{
-		begin
-			/AGMCORE_name xdf
-			false	
-			AGMCORE_SpotAliasAry{
-				dup/Name get AGMCORE_name eq{
-					save exch
-					/Adobe_AGM_Core currentdict def
-					/CSD get get_csd
-					exch restore
-					exch pop true
-					exit
-				}{
-					pop
-				}ifelse
-			}forall
-		end
-	}{
-		pop false
-	}ifelse
-}bdf
-/spot_alias
-{
-	true set_spot_alias
-	
-	/AGMCORE_&setcustomcolor AGMCORE_key_known not {
-		Adobe_AGM_Core/AGMCORE_&setcustomcolor /setcustomcolor load put
-	} if
-	/customcolor_tint 1 AGMCORE_gput
-	
-	Adobe_AGM_Core begin
-	/setcustomcolor
-	{
-		
-		dup /customcolor_tint exch AGMCORE_gput
-		
-		current_spot_alias{
-			1 index 4 get map_alias{
-				mark 3 1 roll
-				setsepcolorspace
-				counttomark 0 ne{
-					setsepcolor
-				}if
-				pop
-				pop
-			}{
-				AGMCORE_&setcustomcolor
-			}ifelse
-		}{
-			AGMCORE_&setcustomcolor
-		}ifelse
-	}bdf
-	end
-}def
-/begin_feature
-{
-	Adobe_AGM_Core/AGMCORE_feature_dictCount countdictstack put
-	count Adobe_AGM_Core/AGMCORE_feature_opCount 3 -1 roll put
-	{Adobe_AGM_Core/AGMCORE_feature_ctm matrix currentmatrix put}if
-}def
-/end_feature
-{
-	2 dict begin
-	/spd /setpagedevice load def
-	/setpagedevice { get_gstate spd set_gstate } def
-	stopped{$error/newerror false put}if
-	end
-	count Adobe_AGM_Core/AGMCORE_feature_opCount get sub dup 0 gt{{pop}repeat}{pop}ifelse
-	countdictstack Adobe_AGM_Core/AGMCORE_feature_dictCount get sub dup 0 gt{{end}repeat}{pop}ifelse
-	{Adobe_AGM_Core/AGMCORE_feature_ctm get setmatrix}if
-}def
-/set_negative
-{
-	Adobe_AGM_Core begin
-	/AGMCORE_inverting exch def
-	level2{
-		currentpagedevice/NegativePrint known{
-			currentpagedevice/NegativePrint get Adobe_AGM_Core/AGMCORE_inverting get ne{
-				true begin_feature true{
-						bdict /NegativePrint Adobe_AGM_Core/AGMCORE_inverting get edict setpagedevice
-				}end_feature
-			}if
-			/AGMCORE_inverting false def
-		}if
-	}if
-	AGMCORE_inverting{
-		[{1 exch sub}/exec load dup currenttransfer exch]cvx bind settransfer
-		gsave newpath clippath 1 /setseparationgray where{pop setseparationgray}{setgray}ifelse 
-		fill grestore
-	}if
-	end
-}def
-/lw_save_restore_override {
-	/md where {
-		pop
-		md begin
-		/pmSVsetup{} def
-		/endp{}def
-		/pse{}def
-		/psb{}def
-		/orig_showpage where
-			{pop}
-			{/orig_showpage /showpage load def}
-		ifelse
-		/showpage {orig_showpage gR} def
-		end
-	}if
-}def
-/pscript_showpage_override {
-	/NTPSOct95 where
-	{
-		begin
-		showpage
-		save
-		/showpage /restore load def
-		/restore {exch pop}def
-		end
-	}if
-}def
-/driver_media_override
-{
-	/md where {
-		pop
-		md /initializepage known {
-			md /initializepage {} put
-		} if
-		md /rC known {
-			md /rC {4{pop}repeat} put
-		} if
-	}if
-	
-	Adobe_AGM_Core /AGMCORE_Default_CTM matrix currentmatrix put
-}def
-/driver_check_media_override
-{
-	Adobe_AGM_Core /AGMCORE_Default_CTM get matrix currentmatrix ne
-	{
-		Adobe_AGM_Core /AGMCORE_Default_CTM get setmatrix
-	}if
-}def
-AGMCORE_err_strings begin
-	/AGMCORE_bad_environ (Environment not satisfactory for this job. Ensure that the PPD is correct or that the PostScript level requested is supported by this printer. ) def
-	/AGMCORE_color_space_onhost_seps (This job contains colors that will not separate with on-host methods. ) def
-	/AGMCORE_invalid_color_space (This job contains an invalid color space. ) def
-end
-end
-systemdict /setpacking known
-{
-	setpacking
-} if
-%%EndResource
-%%BeginResource: procset Adobe_CoolType_Core 2.12 0
-%%Copyright: Copyright 1997-2001 Adobe Systems Incorporated.  All Rights Reserved.
-%%Version: 2.12 0
-userdict/Adobe_CoolType_Core 60 dict dup begin put/Level2? systemdict
-/languagelevel known dup{pop systemdict/languagelevel get 2 ge}if def Level2?
-not{/currentglobal false def/setglobal/pop load def/gcheck{pop false}bind def
-/currentpacking false def/setpacking/pop load def/SharedFontDirectory 0 dict
-def}if currentpacking true setpacking/@_SaveStackLevels{Adobe_CoolType_Data
-begin @opStackCountByLevel @opStackLevel 2 copy known not{2 copy 3 dict dup
-/args 7 index 5 add array put put get}{get dup/args get dup length 3 index lt{
-dup length 5 add array exch 1 index exch 0 exch putinterval 1 index exch/args
-exch put}{pop}ifelse}ifelse begin count 2 sub 1 index lt{pop count 1 sub}if
-dup/argCount exch def dup 0 gt{exch 1 index 2 add 1 roll args exch 0 exch
-getinterval astore pop}{pop}ifelse count 1 sub/restCount exch def end
-/@opStackLevel @opStackLevel 1 add def countdictstack 1 sub
-@dictStackCountByLevel exch @dictStackLevel exch put/@dictStackLevel
-@dictStackLevel 1 add def end}bind def/@_RestoreStackLevels{
-Adobe_CoolType_Data begin/@opStackLevel @opStackLevel 1 sub def
-@opStackCountByLevel @opStackLevel get begin count restCount sub dup 0 gt{{pop
-}repeat}{pop}ifelse args 0 argCount getinterval{}forall end/@dictStackLevel
-@dictStackLevel 1 sub def @dictStackCountByLevel @dictStackLevel get end
-countdictstack exch sub dup 0 gt{{end}repeat}{pop}ifelse}bind def
-/@_PopStackLevels{Adobe_CoolType_Data begin/@opStackLevel @opStackLevel 1 sub
-def/@dictStackLevel @dictStackLevel 1 sub def end}bind def/@Raise{exch cvx
-exch errordict exch get exec stop}bind def/@ReRaise{cvx $error/errorname get
-errordict exch get exec stop}bind def/@Stopped{0 @#Stopped}bind def/@#Stopped{
-@_SaveStackLevels stopped{@_RestoreStackLevels true}{@_PopStackLevels false}
-ifelse}bind def/@Arg{Adobe_CoolType_Data begin @opStackCountByLevel
-@opStackLevel 1 sub get/args get exch get end}bind def/doc_setup{
-Adobe_CoolType_Core begin/mov/moveto load def/nfnt/newencodedfont load def
-/mfnt/makefont load def/sfnt/setfont load def/ufnt/undefinefont load def/chp
-/charpath load def/awsh/awidthshow load def/wsh/widthshow load def/ash/ashow
-load def/sh/show load def end userdict/Adobe_CoolType_Data 6 dict dup begin
-/AddWidths? false def/CC 0 def/charcode 2 string def/@opStackCountByLevel 32
-dict def/@opStackLevel 0 def/@dictStackCountByLevel 32 dict def
-/@dictStackLevel 0 def end put}bind def/doc_trailer{currentdict
-Adobe_CoolType_Core eq{end}if}bind def/page_setup{Adobe_CoolType_Core begin}
-bind def/page_trailer{end}bind def/unload{systemdict/languagelevel known{
-systemdict/languagelevel get 2 ge{userdict/Adobe_CoolType_Core 2 copy known{
-undef}{pop pop}ifelse}if}if}bind def/ndf{1 index where{pop pop pop}{dup xcheck
-{bind}if def}ifelse}def/findfont dup systemdict begin userdict begin
-/globaldict where{/globaldict get begin}if dup where pop exch get/globaldict
-where{pop end}if end end def/systemfindfont/findfont load def/undefinefont{pop
-}ndf/copyfont{currentglobal 3 1 roll 1 index gcheck setglobal dup null eq{0}{
-dup length}ifelse 2 index length add 1 add dict begin exch{1 index/FID eq{pop
-pop}{def}ifelse}forall dup null eq{pop}{{def}forall}ifelse currentdict end
-exch setglobal}bind def/copyarray{currentglobal exch dup gcheck setglobal dup
-length array copy exch setglobal}bind def/newencodedfont{currentglobal{
-SharedFontDirectory 3 index known{SharedFontDirectory 3 index get
-/FontReferenced known}{false}ifelse}{FontDirectory 3 index known{FontDirectory
-3 index get/FontReferenced known}{SharedFontDirectory 3 index known{
-SharedFontDirectory 3 index get/FontReferenced known}{false}ifelse}ifelse}
-ifelse dup{3 index findfont/FontReferenced get 2 index findfont ne{pop false}
-if}if{pop 1 index findfont/Encoding get exch 0 1 255{2 copy get 3 index 3 1
-roll put}for pop pop pop}{findfont dup dup maxlength 2 add dict begin exch{1
-index/FID ne{def}{pop pop}ifelse}forall/FontReferenced exch def/Encoding exch
-dup length array copy def/FontName 1 index dup type/stringtype eq{cvn}if def
-currentdict end definefont pop}ifelse}bind def/SetSubstituteStrategy{
-$SubstituteFont begin dup type/dicttype ne{0 dict}if currentdict/$Strategies
-known{exch $Strategies exch 2 copy known{get 2 copy maxlength exch maxlength
-add dict begin{def}forall{def}forall currentdict dup/$Init known{dup/$Init get
-exec}if end/$Strategy exch def}{pop pop pop}ifelse}{pop pop}ifelse end}bind
-def/scff{$SubstituteFont begin dup type/stringtype eq{dup length exch}{null}
-ifelse/$sname exch def/$slen exch def end{findfont}@Stopped{dup length dup 21
-add string dup 4 3 roll 0 exch 128 string cvs putinterval exch 1 index exch
-(_was-malformed-so-was)putinterval cvn{findfont}@Stopped{pop/Courier findfont}
-if}if $SubstituteFont begin/$sname null def/$slen 0 def end}bind def
-/isWidthsOnlyFont{dup/WidthsOnly known{pop pop true}{dup/FDepVector known{
-/FDepVector get{isWidthsOnlyFont dup{exit}if}forall}{dup/FDArray known{
-/FDArray get{isWidthsOnlyFont dup{exit}if}forall}{pop}ifelse}ifelse}ifelse}
-bind def/?set{$SubstituteFont begin/$substituteFound false def/$fontname 4
-index def/$doSmartSub false def end 3 index findfont $SubstituteFont begin
-$substituteFound{false}{dup/FontName known{dup/FontName get $fontname eq 1
-index/DistillerFauxFont known not and/currentdistillerparams where{pop false 2
-index isWidthsOnlyFont not and}if}{false}ifelse}ifelse exch pop/$doSmartSub
-true def end{exch pop exch pop exch 2 dict dup/Found 3 index put exch findfont
-exch}{exch exec exch findfont 2 dict dup/Downloaded 6 5 roll put}ifelse dup
-/FontName 4 index put copyfont definefont pop}bind def/?str1 256 string def
-/?str2 256 string def/?add{1 index type/integertype eq{exch true 4 2}{false 3
-1}ifelse roll 1 index findfont dup/Widths known{Adobe_CoolType_Data/AddWidths?
-true put gsave dup 1000 scalefont setfont}if/Downloaded known{exec exch{exch
-?str2 cvs exch findfont/Downloaded get 1 dict begin/Downloaded 1 index def
-?str1 cvs length ?str1 1 index 1 add 3 index putinterval exch length 1 add 1
-index add ?str1 2 index(*)putinterval ?str1 0 2 index getinterval cvn findfont
-?str1 3 index(+)putinterval 2 dict dup/FontName ?str1 0 6 index getinterval
-cvn put dup/Downloaded Downloaded put end copyfont dup/FontName get exch
-definefont pop pop pop}{pop}ifelse}{pop exch{findfont dup/Found get dup length
-exch ?str1 cvs pop ?str1 1 index(+)putinterval ?str1 1 index 1 add 4 index
-?str2 cvs putinterval ?str1 exch 0 exch 5 4 roll ?str2 cvs length 1 add add
-getinterval cvn 1 dict exch 1 index exch/FontName exch put copyfont dup
-/FontName get exch definefont pop}{pop}ifelse}ifelse Adobe_CoolType_Data
-/AddWidths? get{grestore Adobe_CoolType_Data/AddWidths? false put}if}bind def
-/?sh{currentfont/Downloaded known{exch}if pop}bind def/?chp{currentfont
-/Downloaded known{pop}{false chp}ifelse}bind def/?mv{currentfont/Downloaded
-known{moveto pop pop}{pop pop moveto}ifelse}bind def setpacking userdict
-/$SubstituteFont 25 dict put 1 dict begin/SubstituteFont dup $error exch 2
-copy known{get}{pop pop{pop/Courier}bind}ifelse def/currentdistillerparams
-where dup{pop pop currentdistillerparams/CannotEmbedFontPolicy 2 copy known{
-get/Error eq}{pop pop false}ifelse}if not{countdictstack array dictstack 0 get
-begin userdict begin $SubstituteFont begin/$str 128 string def/$fontpat 128
-string def/$slen 0 def/$sname null def/$match false def/$fontname null def
-/$substituteFound false def/$doSmartSub true def/$depth 0 def/$fontname null
-def/$italicangle 26.5 def/$dstack null def/$Strategies 10 dict dup begin
-/$Type3Underprint{currentglobal exch false setglobal 11 dict begin/UseFont
-exch $WMode 0 ne{dup length dict copy dup/WMode $WMode put/UseFont exch
-definefont}if def/FontName $fontname dup type/stringtype eq{cvn}if def
-/FontType 3 def/FontMatrix[.001 0 0 .001 0 0]def/Encoding 256 array dup 0 1
-255{/.notdef put dup}for pop def/FontBBox[0 0 0 0]def/CCInfo 7 dict dup begin
-/cc null def/x 0 def/y 0 def end def/BuildChar{exch begin CCInfo begin 1
-string dup 0 3 index put exch pop/cc exch def UseFont 1000 scalefont setfont
-cc stringwidth/y exch def/x exch def x y setcharwidth $SubstituteFont
-/$Strategy get/$Underprint get exec 0 0 moveto cc show x y moveto end end}bind
-def currentdict end exch setglobal}bind def/$GetaTint 2 dict dup begin
-/$BuildFont{dup/WMode known{dup/WMode get}{0}ifelse/$WMode exch def $fontname
-exch dup/FontName known{dup/FontName get dup type/stringtype eq{cvn}if}{
-/unnamedfont}ifelse exch $deepcopyfont exch 1 index exch/FontBasedOn exch put
-dup/FontName $fontname dup type/stringtype eq{cvn}if put definefont}bind def
-/$Underprint{gsave x abs y abs gt{/y 1000 def}{/x -1000 def 500 120 translate}
-ifelse Level2?{[/Separation(All)/DeviceCMYK{0 0 0 1 pop}]setcolorspace}{0
-setgray}ifelse 10 setlinewidth x .8 mul[7 3]{y mul 8 div 120 sub x 10 div exch
-moveto 0 y 4 div neg rlineto dup 0 rlineto 0 y 4 div rlineto closepath gsave
-Level2?{.2 setcolor}{.8 setgray}ifelse fill grestore stroke}forall pop
-grestore}bind def end def/$Oblique 1 dict dup begin/$BuildFont{currentglobal
-exch dup gcheck setglobal null copyfont begin/FontBasedOn currentdict/FontName
-known{FontName dup type/stringtype eq{cvn}if}{/unnamedfont}ifelse def/FontName
-$fontname dup type/stringtype eq{cvn}if def/currentdistillerparams where{pop}{
-/FontInfo currentdict/FontInfo known{FontInfo null copyfont}{2 dict}ifelse dup
-begin/ItalicAngle $italicangle def/FontMatrix FontMatrix[1 0 ItalicAngle dup
-sin exch cos div 1 0 0]matrix concatmatrix readonly end 4 2 roll def def}
-ifelse FontName currentdict end definefont exch setglobal}bind def end def
-/$None 1 dict dup begin/$BuildFont{}bind def end def end def/$Oblique
-SetSubstituteStrategy/$findfontByEnum{dup type/stringtype eq{cvn}if dup
-/$fontname exch def $sname null eq{$str cvs dup length $slen sub $slen
-getinterval}{pop $sname}ifelse $fontpat dup 0(fonts/*)putinterval exch 7 exch
-putinterval/$match false def $SubstituteFont/$dstack countdictstack array
-dictstack put mark{$fontpat 0 $slen 7 add getinterval{/$match exch def exit}
-$str filenameforall}stopped{cleardictstack currentdict true $SubstituteFont
-/$dstack get{exch{1 index eq{pop false}{true}ifelse}{begin false}ifelse}forall
-pop}if cleartomark/$slen 0 def $match false ne{$match(fonts/)anchorsearch pop
-pop cvn}{/Courier}ifelse}bind def/$ROS 1 dict dup begin/Adobe 4 dict dup begin
-/Japan1[/Ryumin-Light/HeiseiMin-W3/GothicBBB-Medium/HeiseiKakuGo-W5
-/HeiseiMaruGo-W4/Jun101-Light]def/Korea1[/HYSMyeongJo-Medium/HYGoThic-Medium]
-def/GB1[/STSong-Light/STHeiti-Regular]def/CNS1[/MKai-Medium/MHei-Medium]def
-end def end def/$cmapname null def/$deepcopyfont{dup/FontType get 0 eq{1 dict
-dup/FontName/copied put copyfont begin/FDepVector FDepVector copyarray 0 1 2
-index length 1 sub{2 copy get $deepcopyfont dup/FontName/copied put/copied
-exch definefont 3 copy put pop pop}for def currentdict end}{$Strategies
-/$Type3Underprint get exec}ifelse}bind def/$buildfontname{length $str 1 index
-(-)putinterval 1 add $str 1 index $cmapname $fontpat cvs putinterval $cmapname
-length add $str exch 0 exch getinterval cvn}bind def/$findfontByROS{/$fontname
-exch def $ROS Registry 2 copy known{get Ordering 2 copy known{get}{pop pop[]}
-ifelse}{pop pop[]}ifelse false exch{dup/CIDFont resourcestatus{pop pop save 1
-index/CIDFont findresource dup/WidthsOnly known{dup/WidthsOnly get}{false}
-ifelse exch pop exch restore{pop}{exch pop true exit}ifelse}{pop}ifelse}forall
-{$str cvs $buildfontname}{false(*){save exch dup/CIDFont findresource dup
-/WidthsOnly known{dup/WidthsOnly get not}{true}ifelse exch/CIDSystemInfo get
-dup/Registry get Registry eq exch/Ordering get Ordering eq and and{exch
-restore exch pop true exit}{pop restore}ifelse}$str/CIDFont resourceforall{
-$buildfontname}{$fontname $findfontByEnum}ifelse}ifelse}bind def end end
-currentdict/$error known currentdict/languagelevel known and dup{pop $error
-/SubstituteFont known}if dup{$error}{Adobe_CoolType_Core}ifelse begin{
-/SubstituteFont/CMap/Category resourcestatus{pop pop{$SubstituteFont begin
-/$substituteFound true def dup length $slen gt $sname null ne or $slen 0 gt
-and{$sname null eq{dup $str cvs dup length $slen sub $slen getinterval cvn}{
-$sname}ifelse dup/CMap resourcestatus{pop pop dup/$cmapname exch def/CMap
-findresource/CIDSystemInfo get{def}forall $findfontByROS}{128 string cvs dup
-(-)search{3 1 roll search{3 1 roll pop{dup cvi}stopped{pop pop pop pop pop
-$findfontByEnum}{4 2 roll pop pop exch length exch 2 index length 2 index sub
-exch 1 sub -1 0{$str cvs dup length 4 index 0 4 index 4 3 roll add getinterval
-exch 1 index exch 3 index exch putinterval dup/CMap resourcestatus{pop pop 4 1
-roll pop pop pop dup/$cmapname exch def/CMap findresource/CIDSystemInfo get{
-def}forall $findfontByROS true exit}{pop}ifelse}for dup type/booleantype eq{
-pop}{pop pop $findfontByEnum}ifelse}ifelse}{pop pop pop $findfontByEnum}ifelse
-}{pop pop $findfontByEnum}ifelse}ifelse}{//SubstituteFont exec}ifelse/$slen 0
-def end}}{{$SubstituteFont begin/$substituteFound true def dup length $slen gt
-$sname null ne or $slen 0 gt and{$findfontByEnum}{//SubstituteFont exec}ifelse
-end}}ifelse bind readonly def Adobe_CoolType_Core/scfindfont/systemfindfont
-load put}{/scfindfont{$SubstituteFont begin dup systemfindfont dup/FontName
-known{dup/FontName get dup 3 index ne}{/noname true}ifelse dup{
-/$origfontnamefound 2 index def/$origfontname 4 index def/$substituteFound
-true def}if exch pop{$slen 0 gt $sname null ne 3 index length $slen gt or and{
-pop dup $findfontByEnum findfont dup maxlength 1 add dict begin{1 index/FID eq
-{pop pop}{def}ifelse}forall currentdict end definefont dup/FontName known{dup
-/FontName get}{null}ifelse $origfontnamefound ne{$origfontname $str cvs print
-( substitution revised, using )print dup/FontName known{dup/FontName get}{
-(unspecified font)}ifelse $str cvs print(.
-)print}if}{exch pop}ifelse}{exch pop}ifelse end}bind def}ifelse end end
-Adobe_CoolType_Core/findfont{$SubstituteFont begin $depth 0 eq{/$fontname 1
-index dup type/stringtype ne{$str cvs}if def/$substituteFound false def}if
-/$depth $depth 1 add def end scfindfont $SubstituteFont begin/$depth $depth 1
-sub def $substituteFound $depth 0 eq and $doSmartSub and{currentdict/$Strategy
-known{$Strategy/$BuildFont get exec}if}if end}bind put}if end end
-%%EndResource
-%%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.13 0
-%%Copyright: Copyright 1987-2001 Adobe Systems Incorporated.
-%%Version: 1.13 0
-systemdict/languagelevel known dup{currentglobal false setglobal}{false}ifelse
-exch userdict/Adobe_CoolType_Utility 2 copy known{2 copy get dup maxlength 25
-add dict copy}{25 dict}ifelse put Adobe_CoolType_Utility begin/ct_Level2? exch
-def/ct_Clone? 1183615869 internaldict dup/CCRun known not exch/eCCRun known
-not ct_Level2? and or def/ct_UseNativeCapability? systemdict/composefont known
-def/ct_MakeOCF 35 dict def/ct_Vars 25 dict def/ct_GlyphDirProcs 6 dict def
-/ct_BuildCharDict 15 dict dup begin/charcode 2 string def/dst_string 1500
-string def/nullstring()def/usewidths? true def end def ct_Level2?{setglobal}{
-pop}ifelse ct_GlyphDirProcs begin/GetGlyphDirectory{systemdict/languagelevel
-known{pop/CIDFont findresource/GlyphDirectory get}{1 index/CIDFont
-findresource/GlyphDirectory get dup type/dicttype eq{dup dup maxlength exch
-length sub 2 index lt{dup length 2 index add dict copy 2 index/CIDFont
-findresource/GlyphDirectory 2 index put}if}if exch pop exch pop}ifelse +}def/+
-{systemdict/languagelevel known{currentglobal false setglobal 3 dict begin/vm
-exch def}{1 dict begin}ifelse/$ exch def systemdict/languagelevel known{vm
-setglobal/gvm currentglobal def $ gcheck setglobal}if ?{$ begin}if}def/?{$
-type/dicttype eq}def/|{userdict/Adobe_CoolType_Data known{Adobe_CoolType_Data
-/AddWidths? known{currentdict Adobe_CoolType_Data begin begin AddWidths?{
-Adobe_CoolType_Data/CC 3 index put ?{def}{$ 3 1 roll put}ifelse CC charcode
-exch 1 index 0 2 index 256 idiv put 1 index exch 1 exch 256 mod put
-stringwidth 2 array astore currentfont/Widths get exch CC exch put}{?{def}{$ 3
-1 roll put}ifelse}ifelse end end}{?{def}{$ 3 1 roll put}ifelse}ifelse}{?{def}{
-$ 3 1 roll put}ifelse}ifelse}def/!{?{end}if systemdict/languagelevel known{gvm
-setglobal}if end}def/:{string currentfile exch readstring pop}executeonly def
-end ct_MakeOCF begin/ct_cHexEncoding[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09
-/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C
-/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F
-/c30/c31/c32/c33/c34/c35/c36/c37/c38/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42
-/c43/c44/c45/c46/c47/c48/c49/c4A/c4B/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55
-/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68
-/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B
-/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E
-/c8F/c90/c91/c92/c93/c94/c95/c96/c97/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1
-/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4
-/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7
-/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA
-/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED
-/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def
-/ct_CID_STR_SIZE 8000 def/ct_mkocfStr100 100 string def/ct_defaultFontMtx[.001
-0 0 .001 0 0]def/ct_1000Mtx[1000 0 0 1000 0 0]def/ct_raise{exch cvx exch
-errordict exch get exec stop}bind def/ct_reraise{cvx $error/errorname get
-(Error: )print dup(                    )cvs print errordict exch get exec stop
-}bind def/ct_cvnsi{1 index add 1 sub 1 exch 0 4 1 roll{2 index exch get exch 8
-bitshift add}for exch pop}bind def/ct_GetInterval{Adobe_CoolType_Utility
-/ct_BuildCharDict get begin/dst_index 0 def dup dst_string length gt{dup
-string/dst_string exch def}if 1 index ct_CID_STR_SIZE idiv/arrayIndex exch def
-2 index arrayIndex get 2 index arrayIndex ct_CID_STR_SIZE mul sub{dup 3 index
-add 2 index length le{2 index getinterval dst_string dst_index 2 index
-putinterval length dst_index add/dst_index exch def exit}{1 index length 1
-index sub dup 4 1 roll getinterval dst_string dst_index 2 index putinterval
-pop dup dst_index add/dst_index exch def sub/arrayIndex arrayIndex 1 add def 2
-index dup length arrayIndex gt{arrayIndex get}{pop exit}ifelse 0}ifelse}loop
-pop pop pop dst_string 0 dst_index getinterval end}bind def ct_Level2?{
-/ct_resourcestatus currentglobal mark true setglobal{/unknowninstancename
-/Category resourcestatus}stopped{cleartomark setglobal true}{cleartomark
-currentglobal not exch setglobal}ifelse{{mark 3 1 roll/Category findresource
-begin ct_Vars/vm currentglobal put({ResourceStatus} stopped)0()/SubFileDecode
-filter cvx exec{cleartomark false}{{3 2 roll pop true}{cleartomark false}
-ifelse}ifelse ct_Vars/vm get setglobal end}}{{resourcestatus}}ifelse bind def
-/CIDFont/Category ct_resourcestatus{pop pop}{currentglobal true setglobal
-/Generic/Category findresource dup length dict copy dup/InstanceType/dicttype
-put/CIDFont exch/Category defineresource pop setglobal}ifelse
-ct_UseNativeCapability?{/CIDInit/ProcSet findresource begin 12 dict begin
-begincmap/CIDSystemInfo 3 dict dup begin/Registry(Adobe)def/Ordering(Identity)
-def/Supplement 0 def end def/CMapName/Identity-H def/CMapVersion 1 def
-/CMapType 1 def 1 begincodespacerange<0000><ffff>endcodespacerange 1
-begincidrange<0000><ffff>0 endcidrange endcmap CMapName currentdict/CMap
-defineresource pop end end}if}{/ct_Category 2 dict begin/CIDFont 10 dict def
-/ProcSet 2 dict def currentdict end def/defineresource{ct_Category 1 index 2
-copy known{get dup dup maxlength exch length eq{dup length 10 add dict copy
-ct_Category 2 index 2 index put}if 3 index 3 index put pop exch pop}{pop pop
-/defineresource/undefined ct_raise}ifelse}bind def/findresource{ct_Category 1
-index 2 copy known{get 2 index 2 copy known{get 3 1 roll pop pop}{pop pop
-/findresource/undefinedresource ct_raise}ifelse}{pop pop/findresource
-/undefined ct_raise}ifelse}bind def/resourcestatus{ct_Category 1 index 2 copy
-known{get 2 index known exch pop exch pop{0 -1 true}{false}ifelse}{pop pop
-/findresource/undefined ct_raise}ifelse}bind def/ct_resourcestatus
-/resourcestatus load def}ifelse/ct_CIDInit 2 dict begin/ct_cidfont_stream_init
-{{dup(Binary)eq{pop null currentfile ct_Level2?{{cid_BYTE_COUNT()
-/SubFileDecode filter}stopped{pop pop pop}if}if/readstring load exit}if dup
-(Hex)eq{pop currentfile ct_Level2?{{null exch/ASCIIHexDecode filter/readstring
-}stopped{pop exch pop(>)exch/readhexstring}if}{(>)exch/readhexstring}ifelse
-load exit}if/StartData/typecheck ct_raise}loop cid_BYTE_COUNT ct_CID_STR_SIZE
-le{2 copy cid_BYTE_COUNT string exch exec pop 1 array dup 3 -1 roll 0 exch put
-}{cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi dup array exch 2 sub 0 exch 1
-exch{2 copy 5 index ct_CID_STR_SIZE string 6 index exec pop put pop}for 2
-index cid_BYTE_COUNT ct_CID_STR_SIZE mod string 3 index exec pop 1 index exch
-1 index length 1 sub exch put}ifelse cid_CIDFONT exch/GlyphData exch put 2
-index null eq{pop pop pop}{pop/readstring load 1 string exch{3 copy exec pop
-dup length 0 eq{pop pop pop pop pop true exit}if 4 index eq{pop pop pop pop
-false exit}if}loop pop}ifelse}bind def/StartData{mark{currentdict dup/FDArray
-get 0 get/FontMatrix get 0 get .001 eq{dup/CDevProc known not{/CDevProc
-1183615869 internaldict/stdCDevProc 2 copy known{get}{pop pop{pop pop pop pop
-pop 0 -1000 7 index 2 div 880}}ifelse def}if}{/CDevProc{pop pop pop pop pop 0
-1 cid_temp/cid_CIDFONT get/FDArray get 0 get/FontMatrix get 0 get div 7 index
-2 div 1 index .88 mul}def}ifelse/cid_temp 15 dict def cid_temp begin
-/cid_CIDFONT exch def 3 copy pop dup/cid_BYTE_COUNT exch def 0 gt{
-ct_cidfont_stream_init FDArray{/Private get dup/SubrMapOffset known{begin
-/Subrs SubrCount array def Subrs SubrMapOffset SubrCount SDBytes ct_Level2?{
-currentdict dup/SubrMapOffset undef dup/SubrCount undef/SDBytes undef}if end
-/cid_SD_BYTES exch def/cid_SUBR_COUNT exch def/cid_SUBR_MAP_OFFSET exch def
-/cid_SUBRS exch def cid_SUBR_COUNT 0 gt{GlyphData cid_SUBR_MAP_OFFSET
-cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi 0 1 cid_SUBR_COUNT 1 sub{
-exch 1 index 1 add cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add GlyphData exch
-cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi cid_SUBRS 4 2 roll
-GlyphData exch 4 index 1 index sub ct_GetInterval dup length string copy put}
-for pop}if}{pop}ifelse}forall}if cleartomark pop pop end CIDFontName
-currentdict/CIDFont defineresource pop end end}stopped{cleartomark/StartData
-ct_reraise}if}bind def currentdict end def/ct_saveCIDInit{/CIDInit/ProcSet
-ct_resourcestatus{true}{/CIDInitC/ProcSet ct_resourcestatus}ifelse{pop pop
-/CIDInit/ProcSet findresource ct_UseNativeCapability?{pop null}{/CIDInit
-ct_CIDInit/ProcSet defineresource pop}ifelse}{/CIDInit ct_CIDInit/ProcSet
-defineresource pop null}ifelse ct_Vars exch/ct_oldCIDInit exch put}bind def
-/ct_restoreCIDInit{ct_Vars/ct_oldCIDInit get dup null ne{/CIDInit exch/ProcSet
-defineresource pop}{pop}ifelse}bind def/ct_BuildCharSetUp{1 index begin
-CIDFont begin Adobe_CoolType_Utility/ct_BuildCharDict get begin/ct_dfCharCode
-exch def/ct_dfDict exch def CIDFirstByte ct_dfCharCode add dup CIDCount ge{pop
-0}if/cid exch def{GlyphDirectory cid 2 copy known{get}{pop pop nullstring}
-ifelse dup length FDBytes sub 0 gt{dup FDBytes 0 ne{0 FDBytes ct_cvnsi}{pop 0}
-ifelse/fdIndex exch def dup length FDBytes sub FDBytes exch getinterval
-/charstring exch def exit}{pop cid 0 eq{/charstring nullstring def exit}if/cid
-0 def}ifelse}loop}def/ct_SetCacheDevice{0 0 moveto dup stringwidth 3 -1 roll
-true charpath pathbbox 0 -1000 7 index 2 div 880 setcachedevice2 0 0 moveto}
-def/ct_CloneSetCacheProc{1 eq{stringwidth pop -2 div -880 0 -1000 setcharwidth
-moveto}{usewidths?{currentfont/Widths get cid 2 copy known{get exch pop aload
-pop}{pop pop stringwidth}ifelse}{stringwidth}ifelse setcharwidth 0 0 moveto}
-ifelse}def/ct_Type3ShowCharString{ct_FDDict fdIndex 2 copy known{get}{
-currentglobal 3 1 roll 1 index gcheck setglobal ct_Type1FontTemplate dup
-maxlength dict copy begin FDArray fdIndex get dup/FontMatrix 2 copy known{get}
-{pop pop ct_defaultFontMtx}ifelse/FontMatrix exch dup length array copy def
-/Private get/Private exch def/Widths rootfont/Widths get def/CharStrings 1
-dict dup/.notdef<d841272cf18f54fc13>dup length string copy put def currentdict
-end/ct_Type1Font exch definefont dup 5 1 roll put setglobal}ifelse dup
-/CharStrings get 1 index/Encoding get ct_dfCharCode get charstring put
-rootfont/WMode 2 copy known{get}{pop pop 0}ifelse exch 1000 scalefont setfont
-ct_str1 0 ct_dfCharCode put ct_str1 exch ct_dfSetCacheProc ct_SyntheticBold{
-currentpoint ct_str1 show newpath moveto ct_str1 true charpath ct_StrokeWidth
-setlinewidth stroke}{ct_str1 show}ifelse}def/ct_Type4ShowCharString{ct_dfDict
-ct_dfCharCode charstring FDArray fdIndex get dup/FontMatrix get dup
-ct_defaultFontMtx ct_matrixeq not{ct_1000Mtx matrix concatmatrix concat}{pop}
-ifelse/Private get Adobe_CoolType_Utility/ct_Level2? get not{ct_dfDict/Private
-3 -1 roll{put}1183615869 internaldict/superexec get exec}if 1183615869
-internaldict Adobe_CoolType_Utility/ct_Level2? get{1 index}{3 index/Private
-get mark 6 1 roll}ifelse dup/RunInt known{/RunInt get}{pop/CCRun}ifelse get
-exec Adobe_CoolType_Utility/ct_Level2? get not{cleartomark}if}bind def
-/ct_BuildCharIncremental{{Adobe_CoolType_Utility/ct_MakeOCF get begin
-ct_BuildCharSetUp ct_ShowCharString}stopped{stop}if end end end end}bind def
-/BaseFontNameStr(BF00)def/ct_Type1FontTemplate 14 dict begin/FontType 1 def
-/FontMatrix[.001 0 0 .001 0 0]def/FontBBox[-250 -250 1250 1250]def/Encoding
-ct_cHexEncoding def/PaintType 0 def currentdict end def/BaseFontTemplate 11
-dict begin/FontMatrix[.001 0 0 .001 0 0]def/FontBBox[-250 -250 1250 1250]def
-/Encoding ct_cHexEncoding def/BuildChar/ct_BuildCharIncremental load def
-ct_Clone?{/FontType 3 def/ct_ShowCharString/ct_Type3ShowCharString load def
-/ct_dfSetCacheProc/ct_CloneSetCacheProc load def/ct_SyntheticBold false def
-/ct_StrokeWidth 1 def}{/FontType 4 def/Private 1 dict dup/lenIV 4 put def
-/CharStrings 1 dict dup/.notdef<d841272cf18f54fc13>put def/PaintType 0 def
-/ct_ShowCharString/ct_Type4ShowCharString load def}ifelse/ct_str1 1 string def
-currentdict end def/BaseFontDictSize BaseFontTemplate length 5 add def
-/ct_matrixeq{true 0 1 5{dup 4 index exch get exch 3 index exch get eq and dup
-not{exit}if}for exch pop exch pop}bind def/ct_makeocf{15 dict begin exch/WMode
-exch def exch/FontName exch def/FontType 0 def/FMapType 2 def/FontMatrix
-matrix def/bfCount 1 index/CIDCount get 256 idiv 1 add dup 256 gt{pop 256}if
-def/Encoding 256 array 0 1 bfCount 1 sub{2 copy dup put pop}for bfCount 1 255{
-2 copy bfCount put pop}for def/FDepVector bfCount dup 256 lt{1 add}if array
-def BaseFontTemplate BaseFontDictSize dict copy begin/CIDFont exch def CIDFont
-/FontBBox known{CIDFont/FontBBox get/FontBBox exch def}if CIDFont/CDevProc
-known{CIDFont/CDevProc get/CDevProc exch def}if currentdict end
-BaseFontNameStr 3(0)putinterval 0 1 bfCount dup 256 eq{1 sub}if{FDepVector
-exch 2 index BaseFontDictSize dict copy begin dup/CIDFirstByte exch 256 mul
-def FontType 3 eq{/ct_FDDict 2 dict def}if currentdict end 1 index 16
-BaseFontNameStr 2 2 getinterval cvrs pop BaseFontNameStr exch definefont put}
-for ct_Clone?{/Widths 1 index/CIDFont get/GlyphDirectory get length dict def}
-if FontName currentdict end definefont ct_Clone?{gsave dup 1000 scalefont
-setfont ct_BuildCharDict begin/usewidths? false def currentfont/Widths get
-begin exch/CIDFont get/GlyphDirectory get{pop dup charcode exch 1 index 0 2
-index 256 idiv put 1 index exch 1 exch 256 mod put stringwidth 2 array astore
-def}forall end/usewidths? true def end grestore}{exch pop}ifelse}bind def
-/ct_ComposeFont{ct_UseNativeCapability?{2 index/CMap ct_resourcestatus{pop pop
-exch pop}{/CIDInit/ProcSet findresource begin 12 dict begin begincmap/CMapName
-3 index def/CMapVersion 1 def/CMapType 1 def exch/WMode exch def/CIDSystemInfo
-3 dict dup begin/Registry(Adobe)def/Ordering CMapName ct_mkocfStr100 cvs
-(Adobe-)search{pop pop(-)search{dup length string copy exch pop exch pop}{pop
-(Identity)}ifelse}{pop(Identity)}ifelse def/Supplement 0 def end def 1
-begincodespacerange<0000><ffff>endcodespacerange 1 begincidrange<0000><ffff>0
-endcidrange endcmap CMapName currentdict/CMap defineresource pop end end}
-ifelse composefont}{3 2 roll pop 0 get/CIDFont findresource ct_makeocf}ifelse}
-bind def/ct_MakeIdentity{ct_UseNativeCapability?{1 index/CMap
-ct_resourcestatus{pop pop}{/CIDInit/ProcSet findresource begin 12 dict begin
-begincmap/CMapName 2 index def/CMapVersion 1 def/CMapType 1 def/CIDSystemInfo
-3 dict dup begin/Registry(Adobe)def/Ordering CMapName ct_mkocfStr100 cvs
-(Adobe-)search{pop pop(-)search{dup length string copy exch pop exch pop}{pop
-(Identity)}ifelse}{pop(Identity)}ifelse def/Supplement 0 def end def 1
-begincodespacerange<0000><ffff>endcodespacerange 1 begincidrange<0000><ffff>0
-endcidrange endcmap CMapName currentdict/CMap defineresource pop end end}
-ifelse composefont}{exch pop 0 get/CIDFont findresource ct_makeocf}ifelse}bind
-def currentdict readonly pop end end
-%%EndResource
-Adobe_CoolType_Core begin /$Oblique SetSubstituteStrategy end
-%%BeginResource: procset Adobe_AGM_Image 1.0 0
-%%Version: 1.0 0
-%%Copyright: Copyright (C) 2000-2000 Adobe Systems, Inc.  All Rights Reserved.
-systemdict /setpacking known
-{
-	currentpacking
-	true setpacking
-} if
-userdict /Adobe_AGM_Image 65 dict dup begin put
-/Adobe_AGM_Image_Id /Adobe_AGM_Image_1.0_0 def
-/nd{
-	null def
-}bind def
-/AGMIMG_&image nd
-/AGMIMG_&colorimage nd
-%%don't initialize AGMIMG_&customcolorimage, it wrecks havoc in a nested environment
-%%AGMIMG_ccimage_exists not {/AGMIMG_&customcolorimage nd} if 
-/AGMIMG_&imagemask nd
-/AGMIMG_mbuf () def
-/AGMIMG_ybuf () def
-/AGMIMG_kbuf () def
-/AGMIMG_c 0 def
-/AGMIMG_m 0 def
-/AGMIMG_y 0 def
-/AGMIMG_k 0 def
-/AGMIMG_tmp nd
-/AGMIMG_imagestring0 nd
-/AGMIMG_imagestring1 nd
-/AGMIMG_imagestring2 nd
-/AGMIMG_imagestring3 nd
-/AGMIMG_imagestring4 nd
-/AGMIMG_imagestring5 nd
-/AGMIMG_cnt nd
-/AGMIMG_fsave nd
-/AGMIMG_colorAry nd
-/AGMIMG_override nd
-/AGMIMG_name nd
-/invert_image_samples nd
-/knockout_image_samples	nd
-/img nd
-/sepimg nd
-/idximg nd
-/doc_setup
-{ 
-	Adobe_AGM_Core begin
-	Adobe_AGM_Image begin
-	/AGMIMG_&image systemdict/image get def
-	/AGMIMG_&imagemask systemdict/imagemask get def
-	/colorimage where{
-		pop
-		/AGMIMG_&colorimage /colorimage ldf
-	}if
-	end
-	end
-}def
-/page_setup
-{
-	Adobe_AGM_Image begin
-	/AGMIMG_ccimage_exists {/customcolorimage where 
-		{
-			pop
-			/Adobe_AGM_OnHost_Seps where
-			{
-			pop false
-			}{
-			/Adobe_AGM_InRip_Seps where
-				{
-				pop false
-				}{
-					true
-				 }ifelse
-			 }ifelse
-			}{
-			false
-		}ifelse 
-	}bdf
-	level2{
-		/invert_image_samples
-		{
-			Adobe_AGM_Image/AGMIMG_tmp Decode length ddf
-			/Decode [ Decode 1 get Decode 0 get] def
-		}def
-		/knockout_image_samples
-		{
-			Operator/imagemask ne{
-				/Decode [1 1] def
-			}if
-		}def
-	}{	
-		/invert_image_samples
-		{
-			{1 exch sub} currenttransfer addprocs settransfer
-		}def
-		/knockout_image_samples
-		{
-			{ pop 1 } currenttransfer addprocs settransfer
-		}def
-	}ifelse
-	/img /imageormask ldf
-	/sepimg /sep_imageormask ldf
-	/idximg /indexed_imageormask ldf
-	currentdict{
-		dup xcheck 1 index type dup /arraytype eq exch /packedarraytype eq or and{
-			bind
-		}if
-		def
-	}forall
-}def
-/page_trailer
-{
-	end
-}def
-/doc_trailer
-{
-}def
-/imageormask_sys
-{
-	begin
-		save mark
-		level2{
-			currentdict
-			Operator /imagemask eq{
-				AGMIMG_&imagemask
-			}{
-				AGMIMG_&image
-			}ifelse
-		}{
-			Width Height
-			Operator /imagemask eq{
-				Decode 0 get 1 eq Decode 1 get 0 eq	and
-				ImageMatrix /DataSource load
-				AGMIMG_&imagemask
-			}{
-				BitsPerComponent ImageMatrix /DataSource load
-				AGMIMG_&image
-			}ifelse
-		}ifelse
-		cleartomark restore
-	end
-}def
-/overprint_plate
-{
-	currentoverprint{
-		0 get
-		dup /DeviceGray eq{
-			pop AGMCORE_black_plate not
-		}{
-			/DeviceCMYK eq{
-				AGMCORE_is_cmyk_sep not
-			}if
-		}ifelse
-	}{
-		false
-	}ifelse
-}def
-/imageormask
-{
-	begin
-		SkipImageProc not{
-			save mark
-			level2 AGMCORE_host_sep not and{
-				currentdict
-				Operator /imagemask eq{
-					imagemask
-				}{
-					AGMCORE_in_rip_sep currentoverprint and currentcolorspace 0 get /DeviceGray eq and{
-						[/Separation /Black /DeviceGray {}] setcolorspace
-						/Decode [ Decode 1 get Decode 0 get ] def
-					}if
-					image
-				}ifelse
-			}{
-				Width Height
-				Operator /imagemask eq{
-					Decode 0 get 1 eq Decode 1 get 0 eq	and
-					ImageMatrix /DataSource load
-					AGMCORE_host_sep{
-						currentgray 1 ne{
-							currentdict imageormask_sys
-						}{
-  	 						currentoverprint not{
-  			 					1 AGMCORE_&setgray
-  	 							knockout_image_samples
-  			 					currentdict imageormask_sys
-  			 				}{
-  			 					currentdict ignoreimagedata
-  			 				}ifelse
-				 		}ifelse
-					}{
-						imagemask
-					}ifelse
-				}{
-					BitsPerComponent ImageMatrix 
-					MultipleDataSources{
-						0 1 NComponents 1 sub{
-							DataSource exch get
-						}for
-					}{
-						/DataSource load
-					}ifelse
-					Operator /colorimage eq{
-						AGMCORE_host_sep{
-							MultipleDataSources level2 or NComponents 4 eq and{
-								MultipleDataSources{
-									4 {pop} repeat
-									/DataSource [
-										DataSource 0 get /exec cvx
-										DataSource 1 get /exec cvx
-										DataSource 2 get /exec cvx
-										DataSource 3 get /exec cvx
-										/AGMCORE_get_ink_data cvx
-									] cvx def
-								}{
-									/DataSource /DataSource load filter_cmyk 0 () /SubFileDecode filter def
-								}ifelse
-	
-								/Decode [ Decode 0 get Decode 1 get ] def
-								/MultipleDataSources false def
-								/NComponents 1 def
-								/Operator /image def
-								AGMCORE_is_cmyk_sep{
-									currentoverprint InksUsed current_ink not and{
-										currentdict consumeimagedata
-									}{
-										invert_image_samples
-						 				1 AGMCORE_&setgray
-										currentdict imageormask_sys
-									}ifelse
-								}{
-										currentdict ignoreimagedata
-								}ifelse
-							}{
-									
-								MultipleDataSources NComponents AGMIMG_&colorimage						
-							}ifelse
-						}{
-							true NComponents colorimage
-						}ifelse
-					}{
-						Operator /image eq{
-							AGMCORE_host_sep{
-								/DoImage true def
-								HostSepColorImage{
-									invert_image_samples
-								}{
-									AGMCORE_black_plate not{
-										/DoImage false def
-										currentdict ignoreimagedata
-					 				}if
-								}ifelse
-						 		1 AGMCORE_&setgray
-								DoImage
-									{currentdict imageormask_sys} if
-							}{
-								image
-							}ifelse
-						}{
-							Operator/knockout eq{
-								pop pop pop pop pop
-								currentoverprint InksUsed current_ink not and{
-								}{
-									currentcolorspace overprint_plate not{
-										knockout_unitsq
-									}if
-								}ifelse
-							}if
-						}ifelse
-					}ifelse
-				}ifelse
-			}ifelse
-			cleartomark restore
-		}if
-	end
-}def
-/sep_imageormask
-{
- 	/sep_colorspace_dict AGMCORE_gget begin
-	/MappedCSA CSA map_csa def
-	begin
-	SkipImageProc not{
-		save mark 
-	
-		AGMCORE_avoid_L2_sep_space{
-			/Decode [ Decode 0 get 255 mul Decode 1 get 255 mul ] def
-		}if
- 		AGMIMG_ccimage_exists 
-		MappedCSA 0 get /DeviceCMYK eq and
-		currentdict/Components known and 
-		Name () ne and 
-		Name (All) ne and 
-		Operator /image eq and
-		AGMCORE_producing_seps not and
-		level2 not and
-		{
-			Width Height BitsPerComponent ImageMatrix 
-			[
-			/DataSource load /exec cvx
-			{
-				0 1 2 index length 1 sub{
-					1 index exch
-					2 copy get 255 xor put
-				}for
-			} /exec cvx
-			] cvx bind
-			MappedCSA 0 get /DeviceCMYK eq{
-				Components aload pop
-			}{
-				0 0 0 Components aload pop 1 exch sub
-			}ifelse
-			Name findcmykcustomcolor
-			customcolorimage
-		}{
-			AGMCORE_producing_seps not{
-				level2{
-					AGMCORE_avoid_L2_sep_space not currentcolorspace 0 get /Separation ne and{
-						[/Separation Name MappedCSA sep_proc_name exch 0 get exch load ] setcolorspace_opt
-						/sep_tint AGMCORE_gget setcolor
-					}if
-					currentdict imageormask
-				}{ 
-					currentdict
-					Operator /imagemask eq{
-						imageormask
-					}{
-						sep_imageormask_lev1
-					}ifelse
-				}ifelse
- 			}{
-				AGMCORE_host_sep{
-					Operator/knockout eq{
-						currentoverprint InksUsed current_ink not and{
-						}{
-							currentdict/ImageMatrix get concat
-							knockout_unitsq
-						}ifelse
-					}{
-						currentgray 1 ne{
- 							AGMCORE_is_cmyk_sep Name (All) ne and{
- 								level2{
-	 								[ /Separation Name [/DeviceGray]
-	 								{ 
-	 									sep_colorspace_proc AGMCORE_get_ink_data
-										1 exch sub
-	 								} bind
-									] AGMCORE_&setcolorspace
-									/sep_tint AGMCORE_gget AGMCORE_&setcolor
- 									currentdict imageormask_sys
-	 							}{
-	 								currentdict
-									Operator /imagemask eq{
-										imageormask_sys
-									}{
-										sep_image_lev1_sep
-									}ifelse
-	 							}ifelse
- 							}{
- 								Operator/imagemask ne{
-									invert_image_samples
- 								}if
-		 						currentdict imageormask_sys
- 							}ifelse
- 						}{
-							currentdict consumeimagedata 
- 							currentoverprint not Name (All) eq or{
-								gsave 
-								knockout_unitsq
-								grestore
-		 					}if
- 						}ifelse
-		 			}ifelse
- 				}{
-					currentcolorspace 0 get /Separation ne{
-						[/Separation Name MappedCSA sep_proc_name exch 0 get exch load ] setcolorspace_opt
-						/sep_tint AGMCORE_gget setcolor
-					}if
-					currentoverprint 
-					MappedCSA 0 get /DeviceCMYK eq and 
-					Name inRip_spot_has_ink not and 
-					Name (All) ne and {
-						imageormask_l2_overprint
-					}{
-						currentdict imageormask
- 					}ifelse
-				}ifelse
-			}ifelse
-		}ifelse
-		cleartomark restore
-	}if
-	end
-	end
-}def
-/imageormask_l2_overprint
-{
-	
-	currentdict
-	currentcmykcolor add add add 0 eq{
-		currentdict consumeimagedata
-	}{
-		level3{ 			
-			
-			currentcmykcolor 
-			/AGMIMG_k xdf 
-			/AGMIMG_y xdf 
-			/AGMIMG_m xdf 
-			/AGMIMG_c xdf
-			Operator/imagemask eq{
-				[/DeviceN [
-				AGMIMG_c 0 ne {/Cyan} if
-				AGMIMG_m 0 ne {/Magenta} if
-				AGMIMG_y 0 ne {/Yellow} if
-				AGMIMG_k 0 ne {/Black} if
-				] /DeviceCMYK {}] setcolorspace
-				
-				AGMIMG_c 0 ne {AGMIMG_c} if
-				AGMIMG_m 0 ne {AGMIMG_m} if
-				AGMIMG_y 0 ne {AGMIMG_y} if
-				AGMIMG_k 0 ne {AGMIMG_k} if
-				setcolor			
-			}{	
-				/Decode [ Decode 0 get 255 mul Decode 1 get 255 mul ] def
-				[/Indexed 				
-					[
-						/DeviceN [
-							AGMIMG_c 0 ne {/Cyan} if
-							AGMIMG_m 0 ne {/Magenta} if
-							AGMIMG_y 0 ne {/Yellow} if
-							AGMIMG_k 0 ne {/Black} if
-						] 
-						/DeviceCMYK {
-							AGMIMG_k 0 eq {0} if
-							AGMIMG_y 0 eq {0 exch} if
-							AGMIMG_m 0 eq {0 3 1 roll} if
-							AGMIMG_c 0 eq {0 4 1 roll} if						
-						}
-					]
-					255
-					{
-						255 div 
-		
-						mark exch
-						dup	dup dup
-		
-						
-						AGMIMG_k 0 ne{
-							/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop		
-							counttomark 1 roll
-						}{
-							pop
-						}ifelse
-							
-						AGMIMG_y 0 ne{
-							/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop		
-							counttomark 1 roll
-						}{
-							pop
-						}ifelse
-		
-						AGMIMG_m 0 ne{
-							/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop		
-							counttomark 1 roll
-						}{
-							pop
-						}ifelse
-							
-						AGMIMG_c 0 ne{
-							/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop		
-							counttomark 1 roll
-						}{
-							pop
-						}ifelse
-						counttomark 1 add -1 roll pop
-					}
-				] setcolorspace
-			}ifelse
-			
-			imageormask_sys
-		}{
-	write_image_file{
-		currentcmykcolor
-		0 ne{
-			[/Separation /Black /DeviceGray {}] setcolorspace
-			gsave
-			/Black
-			[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 1 roll pop pop pop 1 exch sub} /exec cvx]
-			cvx modify_halftone_xfer
-			Operator currentdict read_image_file
-			grestore
-		}if
-		0 ne{
-			[/Separation /Yellow /DeviceGray {}] setcolorspace
-			gsave
-			/Yellow
-			[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 2 roll pop pop pop 1 exch sub} /exec cvx]
-			cvx modify_halftone_xfer
-			Operator currentdict read_image_file
-			grestore
-		}if
-		0 ne{
-			[/Separation /Magenta /DeviceGray {}] setcolorspace
-			gsave
-			/Magenta
-			[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 3 roll pop pop pop 1 exch sub} /exec cvx]
-			cvx modify_halftone_xfer
-			Operator currentdict read_image_file
-			grestore
-		}if
-		0 ne{
-			[/Separation /Cyan /DeviceGray {}] setcolorspace
-			gsave
-			/Cyan 
-			[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {pop pop pop 1 exch sub} /exec cvx]
-			cvx modify_halftone_xfer
-			Operator currentdict read_image_file
-			grestore
-		} if
-				close_image_file
-			}{
-				imageormask
-			}ifelse
-		}ifelse
-	}ifelse
-} def
-/indexed_imageormask
-{
-	begin
-		save mark 
-	
- 		currentdict
- 		AGMCORE_host_sep{
- 			
-			Operator/knockout eq{
-				/indexed_colorspace_dict AGMCORE_gget /CSA get map_csa overprint_plate not{
-					knockout_unitsq
-				}if
-			}{
-	 			AGMCORE_is_cmyk_sep{
-					Operator /imagemask eq{
-						imageormask_sys
-					}{
-						level2{
-							indexed_image_lev2_sep
-						}{
-							indexed_image_lev1_sep
-						}ifelse
-					}ifelse
-				}{
-					currentoverprint not{
-						knockout_image_samples
-		 				imageormask_sys
-		 			}{
-		 				currentdict consumeimagedata
-		 			}ifelse
-				}ifelse
-			}ifelse
- 		}{
-			level2{
-				imageormask
-			}{ 
-				Operator /imagemask eq{
-					imageormask
-				}{
-					indexed_imageormask_lev1
-				}ifelse
-			}ifelse
- 		}ifelse
-		cleartomark restore
-	end
-}def
-/indexed_image_lev2_sep
-{
-	/indexed_colorspace_dict AGMCORE_gget begin
-	begin
-		
-		currentcolorspace 
-		dup 1 /DeviceGray put
-		dup 3 [
-			currentcolorspace 3 get 
-			{
-				exch 4 mul 4 getinterval {} forall
-				AGMCORE_get_ink_data 255 div 1 exch sub
-			} /exec cvx
-		] cvx put
-		setcolorspace
-		
-		currentdict 
-		Operator /imagemask eq{
-			AGMIMG_&imagemask
-		}{
-			AGMIMG_&image
-		}ifelse
-			
-	end end
-}def
-/OPIimage
-{
-	dup type /dicttype ne{
-		10 dict begin
-			/DataSource xdf
-			/ImageMatrix xdf
-			/BitsPerComponent xdf
-			/Height xdf
-			/Width xdf
-			/ImageType 1 def
-			/Decode [0 1 def]
-			currentdict
-		end
-	}if
-	dup begin
-		/NComponents 1 cdndf
-		/MultipleDataSources false cdndf
-		/SkipImageProc {false} cdndf
-		/HostSepColorImage false cdndf
-		/Decode [
-				0 
-				currentcolorspace 0 get /Indexed eq{
-					2 BitsPerComponent exp 1 sub
-				}{
-					1
-				}ifelse
-		] cdndf
-		/Operator /image cdndf
-	end
-	/sep_colorspace_dict AGMCORE_gget null eq{
-		imageormask
-	}{
-		gsave
-		dup begin invert_image_samples end
-		sep_imageormask
-		grestore
-	}ifelse
-}def
-/spot_alias
-{
-	/mapto_sep_imageormask 
-	{
-		dup type /dicttype ne{
-			12 dict begin
-				/ImageType 1 def
-				/DataSource xdf
-				/ImageMatrix xdf
-				/BitsPerComponent xdf
-				/Height xdf
-				/Width xdf
-				/MultipleDataSources false def
-		}{
-			begin
-		}ifelse
-				/Decode [/customcolor_tint AGMCORE_gget 0] def
-				/Operator /image def
-				/HostSepColorImage false def
-				/InksUsed [] def
-				/SkipImageProc {false} def
-				currentdict 
-			end
-		sep_imageormask
-	}bdf
-	/customcolorimage
-	{
-		Adobe_AGM_Image/AGMIMG_colorAry xddf
-		/customcolor_tint AGMCORE_gget
-		bdict
-			/Name AGMIMG_colorAry 4 get
-			/CSA [ /DeviceCMYK ] 
-			/TintMethod /Subtractive
-			/TintProc null
-			/MappedCSA null
-			/NComponents 4 
-			/Components [ AGMIMG_colorAry aload pop pop ] 
-		edict
-		setsepcolorspace
-		mapto_sep_imageormask
-	}ndf
-	Adobe_AGM_Image/AGMIMG_&customcolorimage /customcolorimage load put
-	/customcolorimage
-	{
-		Adobe_AGM_Image/AGMIMG_override false put
-		dup 4 get map_alias{
-			/customcolor_tint AGMCORE_gget exch setsepcolorspace
-			pop
-			mapto_sep_imageormask
-		}{
-			AGMIMG_&customcolorimage
-		}ifelse			
-	}bdf
-}def
-level2 not{
-	/colorbuf
-	{
-		0 1 2 index length 1 sub{
-			dup 2 index exch get 
-			255 exch sub 
-			2 index 
-			3 1 roll 
-			put
-		}for
-	}def
-	/tint_image_to_color
-	{
-		begin
-			Width Height BitsPerComponent ImageMatrix 
-			/DataSource load
-		end
-		Adobe_AGM_Image begin
-			/AGMIMG_mbuf 0 string def
-			/AGMIMG_ybuf 0 string def
-			/AGMIMG_kbuf 0 string def
-			{
-				colorbuf dup length AGMIMG_mbuf length ne
-					{
-					dup length dup dup
-					/AGMIMG_mbuf exch string def
-					/AGMIMG_ybuf exch string def
-					/AGMIMG_kbuf exch string def
-					} if
-				dup AGMIMG_mbuf copy AGMIMG_ybuf copy AGMIMG_kbuf copy pop
-			}
-			addprocs
-			{AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf} true 4 colorimage	
-		end
-	} def			
-	/sep_imageormask_lev1
-	{
-		begin
-			MappedCSA 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or has_color not and{
-				
-				{
-					255 mul round cvi GrayLookup exch get
-				} currenttransfer addprocs settransfer
-				currentdict imageormask
-			}{
-				/sep_colorspace_dict AGMCORE_gget/Components known{
-					MappedCSA 0 get /DeviceCMYK eq{
-						Components aload pop
-					}{
-						0 0 0 Components aload pop 1 exch sub
-					}ifelse
-					
-					Adobe_AGM_Image/AGMIMG_k xddf 
-					Adobe_AGM_Image/AGMIMG_y xddf 
-					Adobe_AGM_Image/AGMIMG_m xddf 
-					Adobe_AGM_Image/AGMIMG_c xddf 
-						
-					AGMIMG_y 0.0 eq AGMIMG_m 0.0 eq and AGMIMG_c 0.0 eq and{
-						{AGMIMG_k mul 1 exch sub} currenttransfer addprocs settransfer
-						currentdict imageormask
-					}{ 
-						
-						currentcolortransfer
-						{AGMIMG_k mul 1 exch sub} exch addprocs 4 1 roll
-						{AGMIMG_y mul 1 exch sub} exch addprocs 4 1 roll
-						{AGMIMG_m mul 1 exch sub} exch addprocs 4 1 roll
-						{AGMIMG_c mul 1 exch sub} exch addprocs 4 1 roll
-						setcolortransfer
-						currentdict tint_image_to_color
-					}ifelse
-				}{
-					
-					MappedCSA 0 get /DeviceGray eq {
-						{255 mul round cvi ColorLookup exch get 0 get} currenttransfer addprocs settransfer
-						currentdict imageormask
-					}{
-						MappedCSA 0 get /DeviceCMYK eq {
-							currentcolortransfer
-							{255 mul round cvi ColorLookup exch get 3 get 1 exch sub} exch addprocs 4 1 roll
-							{255 mul round cvi ColorLookup exch get 2 get 1 exch sub} exch addprocs 4 1 roll
-							{255 mul round cvi ColorLookup exch get 1 get 1 exch sub} exch addprocs 4 1 roll
-							{255 mul round cvi ColorLookup exch get 0 get 1 exch sub} exch addprocs 4 1 roll
-							setcolortransfer 
-							currentdict tint_image_to_color
-						}{ 
-							currentcolortransfer
-							{pop 1} exch addprocs 4 1 roll
-							{255 mul round cvi ColorLookup exch get 2 get} exch addprocs 4 1 roll
-							{255 mul round cvi ColorLookup exch get 1 get} exch addprocs 4 1 roll
-							{255 mul round cvi ColorLookup exch get 0 get} exch addprocs 4 1 roll
-							setcolortransfer 
-							currentdict tint_image_to_color
-						}ifelse
-					}ifelse
-				}ifelse
-			}ifelse
-		end
-	}def
-	/sep_image_lev1_sep
-	{
-		begin
-			/sep_colorspace_dict AGMCORE_gget/Components known{
-				Components aload pop
-				
-				Adobe_AGM_Image/AGMIMG_k xddf 
-				Adobe_AGM_Image/AGMIMG_y xddf 
-				Adobe_AGM_Image/AGMIMG_m xddf 
-				Adobe_AGM_Image/AGMIMG_c xddf 
-					
-				{AGMIMG_c mul 1 exch sub}
-				{AGMIMG_m mul 1 exch sub}
-				{AGMIMG_y mul 1 exch sub}
-				{AGMIMG_k mul 1 exch sub}
-			}{ 
-				{255 mul round cvi ColorLookup exch get 0 get 1 exch sub}
-				{255 mul round cvi ColorLookup exch get 1 get 1 exch sub}
-				{255 mul round cvi ColorLookup exch get 2 get 1 exch sub}
-				{255 mul round cvi ColorLookup exch get 3 get 1 exch sub}
-			}ifelse
-			
-			AGMCORE_get_ink_data currenttransfer addprocs settransfer
-			
-			currentdict imageormask_sys
-				
-		end
-	}def
-	/indexed_imageormask_lev1
-	{
-		/indexed_colorspace_dict AGMCORE_gget begin
-		begin
-			currentdict
-			MappedCSA 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or has_color not and{
-				
-				{HiVal mul round cvi GrayLookup exch get HiVal div} currenttransfer addprocs settransfer
-				imageormask
-			}{
-				
-				MappedCSA 0 get /DeviceGray eq {
-					{HiVal mul round cvi Lookup exch get HiVal div} currenttransfer addprocs settransfer
-					imageormask
-				}{
-					MappedCSA 0 get /DeviceCMYK eq {
-						currentcolortransfer
-						{4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
-						{4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
-						{4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
-						{4 mul HiVal mul round cvi       Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
-						setcolortransfer 
-						tint_image_to_color
-					}{ 
-						currentcolortransfer
-						{pop 1} exch addprocs 4 1 roll
-						{3 mul HiVal mul round cvi 2 add Lookup exch get HiVal div} exch addprocs 4 1 roll
-						{3 mul HiVal mul round cvi 1 add Lookup exch get HiVal div} exch addprocs 4 1 roll
-						{3 mul HiVal mul round cvi 	   Lookup exch get HiVal div} exch addprocs 4 1 roll
-						setcolortransfer 
-						tint_image_to_color
-					}ifelse
-				}ifelse
-			}ifelse
-		end end
-	}def
-	/indexed_image_lev1_sep
-	{
-		/indexed_colorspace_dict AGMCORE_gget begin
-		begin
-			{4 mul HiVal mul round cvi       Lookup exch get HiVal div 1 exch sub}
-			{4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}
-			{4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}
-			{4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}
-			
-			AGMCORE_get_ink_data currenttransfer addprocs settransfer
-			
-			currentdict imageormask_sys
-				
-		end end
-	}def
-}if
-end
-systemdict /setpacking known
-{
-	setpacking
-} if
-%%EndResource
-%ADOBeginClientInjection: DocumentProlog End "AI10"
-%ADOEndClientInjection: DocumentProlog End "AI10"
-currentdict Adobe_AGM_Utils eq {end} if
-%%EndProlog
-%%BeginSetup
-%ADOBeginClientInjection: DocumentSetup Start "AI10"
-%ADOEndClientInjection: DocumentSetup Start "AI10"
-Adobe_AGM_Utils begin
-2 2010 true Adobe_AGM_Core/doc_setup get exec
-Adobe_CoolType_Core/doc_setup get exec
-Adobe_AGM_Image/doc_setup get exec
-%ADOBeginClientInjection: DocumentSetup End "AI10"
-%ADOEndClientInjection: DocumentSetup End "AI10"
-currentdict Adobe_AGM_Utils eq {end} if
-%%EndSetup
-%%Page: (Hanoi Kopie.eps) 1
-%%EndPageComments
-%%BeginPageSetup
-%ADOBeginClientInjection: PageSetup Start "AI10"
-%ADOEndClientInjection: PageSetup Start "AI10"
-Adobe_AGM_Utils begin
-Adobe_AGM_Core/page_setup get exec
-Adobe_CoolType_Core/page_setup get exec
-Adobe_AGM_Image/page_setup get exec
-%ADOBeginClientInjection: PageSetup End "AI10"
-%ADOEndClientInjection: PageSetup End "AI10"
-%%EndPageSetup
-Adobe_AGM_Core/AGMCORE_save save ddf
-1 -1 scale 0 -294.566 translate
-[1 0 0 1 0 0 ]  concat
-mark
-/0 
-[/DeviceGray] add_csa
-/CSA /0 
-/1 
-[/DeviceCMYK] add_csa
-/CSA /1 
-/2 
-[/DeviceRGB] add_csa
-/CSA /2 
-cleartomark
-800 path_rez
-% page clip
-gsave
-newpath
-gsave % PSGState
-0 0 mo
-0 294.566 li
-810.764 294.566 li
-810.764 0 li
-clp
-[1 0 0 1 0 0 ] concat
-%ADOBeginClientInjection: BeginPageContent "AI10"
-%ADOEndClientInjection: BeginPageContent "AI10"
-gsave % PSGState
-0 0 mo
-811 0 li
-811 295 li
-0 295 li
-0 0 li
-clp
-0 0 mo
-0 294.567 li
-810.764 294.567 li
-810.764 0 li
-false sop
-save_ctm
-gsave % PSGState
-clp
-gsave
-[1 0 0 -1 0 294.566 ] concat
-<<
-/CSA /2 
->>
-csacrd
-[810.764 0 0 294.567 0 -.000305176 ] concat
-Adobe_AGM_Core begin
-/AGMCORE_deltaX 72 AGMCORE_deviceDPI div 1.999 div 810.764 abs 0 abs add div def
-/AGMCORE_deltaY 72 AGMCORE_deviceDPI div 1.999 div 0 abs 294.567 abs add div def
-[1 AGMCORE_deltaX 2 mul add 0 0 1 AGMCORE_deltaY 2 mul add AGMCORE_deltaX neg AGMCORE_deltaY neg] concat
-end
-<<
-/Width 563 /Height 204 
-/BitsPerComponent 8 
-/Decode [0 1 0 1 0 1 ]
-/ImageMatrix [563 0 0 -204 0 204 ] 
-Adobe_AGM_Image/AGMIMG_imagestring0 563 string ddf
-Adobe_AGM_Image/AGMIMG_imagestring1 563 string ddf
-Adobe_AGM_Image/AGMIMG_imagestring2 563 string ddf
-/DataSource
-Adobe_AGM_Image/AGMIMG_cnt 0 put
-[
-{
-AGMIMG_cnt 0 eq{Adobe_AGM_Image/AGMIMG_fsave save put}if
-Adobe_AGM_Image/AGMIMG_cnt AGMIMG_cnt 1 add put
-Adobe_AGM_Utils/rdcmntline get /ASCII85Decode filter
-/RunLengthDecode filter
- AGMIMG_imagestring0 readstring pop
-}
-{
-Adobe_AGM_Utils/rdcmntline get /ASCII85Decode filter
-/RunLengthDecode filter
- AGMIMG_imagestring1 readstring pop
-}
-{
-Adobe_AGM_Utils/rdcmntline get /ASCII85Decode filter
-/RunLengthDecode filter
- AGMIMG_imagestring2 readstring pop
-AGMIMG_cnt
-10 gt{AGMIMG_fsave restore 
-Adobe_AGM_Image/AGMIMG_cnt 0 put
-}if
-}
-]
-/ImageType 1
-/NComponents 3 
-/Operator /colorimage
-/MultipleDataSources true 
-/HostSepColorImage false 
-/InksUsed [
-]
-/SkipImageProc {false}
->>
-%%BeginDataCountAtEnd: NoCount
-% 1
-img
-%K)^H&K)^H&b5Zt~>
-%NW0@ZpAOsdqZ$Tmqt^<hKE(E?s82irs7lKks7N,dgAh3Fs8W,erVuoks8;oss7cKlrVZ]p`W+*\J,~>
-%NW0@ZpAOsdqZ$Tmqt^<hKE(E?s82irs7lKks7N,dgAh3Fs8W,erVuoks8;oss7cKlrVZ]p`W+*\J,~>
-%K)^H&K)^H&b5Zt~>
-%NW0@ZpAOsdqZ$Tmqt^<hKE(E?s82irs7lKks7N,dgAh3Fs8W,erVuoks8;oss7cKlrVZ]p`W+*\J,~>
-%NW0@ZpAOsdqZ$Tmqt^<hKE(E?s82irs7lKks7N,dgAh3Fs8W,erVuoks8;oss7cKlrVZ]p`W+*\J,~>
-%K)^H&K)^H&b5Zt~>
-%OoPIYs69R`s8;iq!r)HhK)b6<s7Q?js7cKls8&PkhZ*WMs7uQls7H3gs7cKls7-'fs7jS5b5Zt~>
-%OoPIYs69R`s8;iq!r)HhK)b6<s7Q?js7cKls8&PkhZ*WMs7uQls7H3gs7cKls7-'fs7jS5b5Zt~>
-%K)^H&K)^H&b5Zt~>
-%OoPIYs69R`s8;iq!r)HhK)b6<s7Q?js7cKls8&PkhZ*WMs7uQls7H3gs7cKls7-'fs7jS5b5Zt~>
-%OoPIYs69R`s8;iq!r)HhK)b6<s7Q?js7cKls8&PkhZ*WMs7uQls7H3gs7cKls7-'fs7jS5b5Zt~>
-%K)^H&K)^H&b5Zt~>
-%O8fXcqtTsbrV-'ar:p'c!<%QMn,N@brV?KRT)[ICs5s:[s7cEjs7cQYs8W,qs8Bk8b5Zt~>
-%O8fXcqtTsbrV-'ar:p'c!<%QMn,N@brV?KRT)[ICs5s:[s7cEjs7cQYs8W,qs8Bk8b5Zt~>
-%K)^H&K)^H&b5Zt~>
-%O8fXcqtTsbrV-'ar:p'c!<%QMn,N@brV?KRT)[ICs5s:[s7cEjs7cQYs8W,qs8Bk8b5Zt~>
-%O8fXcqtTsbrV-'ar:p'c!<%QMn,N@brV?KRT)[ICs5s:[s7cEjs7cQYs8W,qs8Bk8b5Zt~>
-%K)^H&K)^H&b5Zt~>
-%O8o7FpA]aEli7"Yqu?]\UAs*Ms7?-fs7uWns82irs7cQcs8W,erVuop`W+*\J,~>
-%O8o7FpA]aEli7"Yqu?]\UAs*Ms7?-fs7uWns82irs7cQcs8W,erVuop`W+*\J,~>
-%K)^H&K)^H&b5Zt~>
-%O8o7FpA]aEli7"Yqu?]\UAs*Ms7?-fs7uWns82irs7cQcs8W,erVuop`W+*\J,~>
-%O8o7FpA]aEli7"Yqu?]\UAs*Ms7?-fs7uWns82irs7cQcs8W,erVuop`W+*\J,~>
-%M#RYWs7cQnqZ-MGs6fmerVlg!nGiOerr3&ss7`;ge,KaEs8VKds82?dp:C:Hs*t~>
-%OoPIVrVm/poD\aFh>dNO!;_?JmJm4Ss8W,gs8W,ms8)cpV#T6Ms7H?^rVuocs8W,7s,-ils8W,7s7lWm
-%_>h[XJ,~>
-%OoPIVrVm/poD\aFh>dNO!;_?JmJm4Ss8W,gs8W,ms8)cpV#T6Ms7H?^rVuocs8W,7s,-ils8W,7s7lWm
-%_>h[XJ,~>
-%M#RYLrr;`ms+::>rt#)#r:U*iq=FXUs7ZKis7rJjf)H6Ws7H?\rr2s$"9A/qo`2Z)b5Zt~>
-%OoPIVrVm/poD\aFh>dNO!;_?JmJm4Ss8W,gs8W,ms8)cpV#T6Ms7H?^rVuocs8W,7s,-ils8W,7s7lWm
-%_>h[XJ,~>
-%OoPIVrVm/poD\aFh>dNO!;_?JmJm4Ss8W,gs8W,ms8)cpV#T6Ms7H?^rVuocs8W,7s,-ils8W,7s7lWm
-%_>h[XJ,~>
-%M>meXs8Vclp%e[WKE(B>%1WIA!!E9/!"],*s8);]s4%&XoD\dj"o\/prrE*"s7O)*b5Zt~>
-%OoPIXs8W,bqu6`oqYL9iKE(E?s*XbFrsA]*rVuosV#T<Os8N&ss8;iks8W*&s*F_6s+(+Us7?3hs7jM3
-%b5Zt~>
-%OoPIXs8W,bqu6`oqYL9iKE(E?s*XbFrsA]*rVuosV#T<Os8N&ss8;iks8W*&s*F_6s+(+Us7?3hs7jM3
-%b5Zt~>
-%M>mSQqu;9Jn,Edm!!!-,!!*'"#4_]lrrE"ns472\n+m"`%0Q\2s7Q3u!X\Gr^&Q7TJ,~>
-%OoPIXs8W,bqu6`oqYL9iKE(E?s*XbFrsA]*rVuosV#T<Os8N&ss8;iks8W*&s*F_6s+(+Us7?3hs7jM3
-%b5Zt~>
-%OoPIXs8W,bqu6`oqYL9iKE(E?s*XbFrsA]*rVuosV#T<Os8N&ss8;iks8W*&s*F_6s+(+Us7?3hs7jM3
-%b5Zt~>
-%M>meUs8Mus#69AUn,Epks8N-#s8)cqoEYHrrr)Ygs4%&XlNZbVl2Ue[s75^\s7a5,b5Zt~>
-%O8o7ErVm)elMplP7!8QRKE(?=s%!*.s8W,srrA_lh#IE?rVuo4s*XkBqu?\?s7lWns7--hs8L";b5Zt~
-%>
-%O8o7ErVm)elMplP7!8QRKE(?=s%!*.s8W,srrA_lh#IE?rVuo4s*XkBqu?\?s7lWns7--hs8L";b5Zt~
-%>
-%L]7M7rr<$#K)b6<$NL/;j8\iKrr<N&o:l99rs80&!;QTes8VZgrrEPl]`6.SJ,~>
-%O8o7ErVm)elMplP7!8QRKE(?=s%!*.s8W,srrA_lh#IE?rVuo4s*XkBqu?\?s7lWns7--hs8L";b5Zt~
-%>
-%O8o7ErVm)elMplP7!8QRKE(?=s%!*.s8W,srrA_lh#IE?rVuo4s*XkBqu?\?s7lWns7--hs8L";b5Zt~
-%>
-%M>meNq>UNr!"&_oKE(E?&,u2$s7H?kqu??m"oSDrq5"&@rriB1s8W&arr3)^rr;Q$s2t@l~>
-%OoGp`o`+sgqss=Xs*K*EJqO,WKE(E?s8DtDrVuomrriB%s88\mh#IEQs8W,rs+13"s8W,ns8W,bs8W,p
-%rVuom_uImZJ,~>
-%OoGp`o`+sgqss=Xs*K*EJqO,WKE(E?s8DtDrVuomrriB%s88\mh#IEQs8W,rs+13"s8W,ns8W,bs8W,p
-%rVuom_uImZJ,~>
-%L]7MS!;d*'K)b<>#5nK/n,NFZrr3'%"Sq\as472\qZR!"pA"[Vqu$Kjp]('f^&Q7TJ,~>
-%OoGp`o`+sgqss=Xs*K*EJqO,WKE(E?s8DtDrVuomrriB%s88\mh#IEQs8W,rs+13"s8W,ns8W,bs8W,p
-%rVuom_uImZJ,~>
-%OoGp`o`+sgqss=Xs*K*EJqO,WKE(E?s8DtDrVuomrriB%s88\mh#IEQs8W,rs+13"s8W,ns8W,bs8W,p
-%rVuom_uImZJ,~>
-%OoGpiq>^Knqu?Zqq>UHo#loSWmJd7gp]'CTrr<-!rrD\ds472\!<2ZkrVufqq#C?nr:U*^^&Q7TJ,~>
-%OoPIYrVm/tpV+@qKm@ru!f$C@rVuosrVuoqs8A/]qu?]os6fjcs7u]ps8;mbs)\3ks+L@Ns7`>hhZ*WN
-%rVuors*k"HrVlims8W,trVQWps7=/.b5Zt~>
-%OoPIYrVm/tpV+@qKm@ru!f$C@rVuosrVuoqs8A/]qu?]os6fjcs7u]ps8;mbs)\3ks+L@Ns7`>hhZ*WN
-%rVuors*k"HrVlims8W,trVQWps7=/.b5Zt~>
-%O8fXcr;HZirVlits7?9o!:>F=n,EF`rr)m)!t>51qY^0hp&Flas472M!<3!*p@SCJs7lHis8VT$s2t@l
-%~>
-%OoPIYrVm/tpV+@qKm@ru!f$C@rVuosrVuoqs8A/]qu?]os6fjcs7u]ps8;mbs)\3ks+L@Ns7`>hhZ*WN
-%rVuors*k"HrVlims8W,trVQWps7=/.b5Zt~>
-%OoPIYrVm/tpV+@qKm@ru!f$C@rVuosrVuoqs8A/]qu?]os6fjcs7u]ps8;mbs)\3ks+L@Ns7`>hhZ*WN
-%rVuors*k"HrVlims8W,trVQWps7=/.b5Zt~>
-%OoGFWrr3?'s6'F^!!*'!!$$Ujmf*dj!!iZ0!!!<$s8VZis8Jhof)H6\rTWqRq>UEls8VfmpAaj"s2t@l
-%~>
-%OoPI[rVm/qoT"rdL3e/k!."PCs7QEerVuoqs8A/]s8W,us7Z?is7?9es7cQ-s$-OKs)%dcs*Xk8UArsI
-%s7?9gs+14Ms82cps.KD;s8W&qs7ZKk`W+*\J,~>
-%OoPI[rVm/qoT"rdL3e/k!."PCs7QEerVuoqs8A/]s8W,us7Z?is7?9es7cQ-s$-OKs)%dcs*Xk8UArsI
-%s7?9gs+14Ms82cps.KD;s8W&qs7ZKk`W+*\J,~>
-%O8f:ZqYC-j#5/<0i;Wc`!;(pDmf*Ck!qZHgrr30&!!iN'q>6uff)G^Or;R)ls8Vih#lso'pV$ULs*t~>
-%OoPI[rVm/qoT"rdL3e/k!."PCs7QEerVuoqs8A/]s8W,us7Z?is7?9es7cQ-s$-OKs)%dcs*Xk8UArsI
-%s7?9gs+14Ms82cps.KD;s8W&qs7ZKk`W+*\J,~>
-%OoPI[rVm/qoT"rdL3e/k!."PCs7QEerVuoqs8A/]s8W,us7Z?is7?9es7cQ-s$-OKs)%dcs*Xk8UArsI
-%s7?9gs+14Ms82cps.KD;s8W&qs7ZKk`W+*\J,~>
-%OT,R`q>^Kes5F%Ws8N(Ns6oslliR4`rr)?crr`<%s8Vnis472\#j^sZmJm4_qY($jlMpVW^&Q7TJ,~>
-%OoGpirV?9er;Zd^5\F_%8k/kOq>^Kos7$'^OoPC[s8;ois8W,lrVuons*"GBs8Duhs8Ds1s8&JihZ*WF
-%s8W,ks8W+Vs7lWas8W,os.02as8W,m^]2IVJ,~>
-%OoGpirV?9er;Zd^5\F_%8k/kOq>^Kos7$'^OoPC[s8;ois8W,lrVuons*"GBs8Duhs8Ds1s8&JihZ*WF
-%s8W,ks8W+Vs7lWas8W,os.02as8W,m^]2IVJ,~>
-%OoPIZrr3-#s8NB1r;Zg3!!%ZOmf*ass8W)us8;<b'*/(3o(o0^f)GpSs8;osrVZZp"9@ojq>S&,b5Zt~
-%>
-%OoGpirV?9er;Zd^5\F_%8k/kOq>^Kos7$'^OoPC[s8;ois8W,lrVuons*"GBs8Duhs8Ds1s8&JihZ*WF
-%s8W,ks8W+Vs7lWas8W,os.02as8W,m^]2IVJ,~>
-%OoGpirV?9er;Zd^5\F_%8k/kOq>^Kos7$'^OoPC[s8;ois8W,lrVuons*"GBs8Duhs8Ds1s8&JihZ*WF
-%s8W,ks8W+Vs7lWas8W,os.02as8W,m^]2IVJ,~>
-%O8fXbq=FX@rr<*,"pk80!!e/Vn,Ede([Utts7QEll2_']s472\$hF>^q"t!hs8)frs8)ce^&Q7TJ,~>
-%NW0@Qm?*NXH]!\?2uj3ap\4@RnF68LrVuors8/#[s8W,ls8W,ds8;oss6p!\s8N%Vs7?9js7--:s).l:
-%s7W8ggAh3Os7H>2s-!D)s+13&s/Z2"s8Muss7u]g`W+*\J,~>
-%NW0@Qm?*NXH]!\?2uj3ap\4@RnF68LrVuors8/#[s8W,ls8W,ds8;oss6p!\s8N%Vs7?9js7--:s).l:
-%s7W8ggAh3Os7H>2s-!D)s+13&s/Z2"s8Muss7u]g`W+*\J,~>
-%OoGpfs7u]pr!!0$s7lWm!!E9)KE(B>!!*#u!<2ut"q17us7cQiV#T$G%JUD5!!rc.!WW6#p&Fm#s2t@l
-%~>
-%NW0@Qm?*NXH]!\?2uj3ap\4@RnF68LrVuors8/#[s8W,ls8W,ds8;oss6p!\s8N%Vs7?9js7--:s).l:
-%s7W8ggAh3Os7H>2s-!D)s+13&s/Z2"s8Muss7u]g`W+*\J,~>
-%NW0@Qm?*NXH]!\?2uj3ap\4@RnF68LrVuors8/#[s8W,ls8W,ds8;oss6p!\s8N%Vs7?9js7--:s).l:
-%s7W8ggAh3Os7H>2s-!D)s+13&s/Z2"s8Muss7u]g`W+*\J,~>
-%OoGaaoDegiqZ$]tm/I"c!!EN.s7H?krVuPJs7cNuqY:*hs8E!$q#L["s82Khs7)laK)a!nJ,~>
-%OoGpap&G'`o)Jdjs7GrFO8o7\qu?]is7qZSs8W,ls8Muss6K^bs6osur;cj%rrN.Ps8W,iUAs*Ms82ii
-%s8N&us7#pcs7lWos8N&mrVuoh_uImZJ,~>
-%OoGpap&G'`o)Jdjs7GrFO8o7\qu?]is7qZSs8W,ls8Muss6K^bs6osur;cj%rrN.Ps8W,iUAs*Ms82ii
-%s8N&us7#pcs7lWos8N&mrVuoh_uImZJ,~>
-%OoGLXs6'C]#QOl$s8VT])up6Erpfgas7--^MuWJM"Sr#rn.YQs"r6D&s7uHZU]5rGb5Zt~>
-%OoGpap&G'`o)Jdjs7GrFO8o7\qu?]is7qZSs8W,ls8Muss6K^bs6osur;cj%rrN.Ps8W,iUAs*Ms82ii
-%s8N&us7#pcs7lWos8N&mrVuoh_uImZJ,~>
-%OoGpap&G'`o)Jdjs7GrFO8o7\qu?]is7qZSs8W,ls8Muss6K^bs6osur;cj%rrN.Ps8W,iUAs*Ms82ii
-%s8N&us7#pcs7lWos8N&mrVuoh_uImZJ,~>
-%NrKLZ"9ec+rr;Bc!WW3*!!*Q/s7?9TMZ<GN#58)rqYpN^q#:T^s7ZKes8Vqks+:9ns*t~>
-%O8fXKj+`;SQMC7RrI03T"HA1ldF%jks82imOoP=Ys7?9fqu?]hs8W,trVuo\s8Duts7N2fh#IEPqu?]o
-%s8W,qs763is6TR]s89k9b5Zt~>
-%O8fXKj+`;SQMC7RrI03T"HA1ldF%jks82imOoP=Ys7?9fqu?]hs8W,trVuo\s8Duts7N2fh#IEPqu?]o
-%s8W,qs763is6TR]s89k9b5Zt~>
-%OoGLPs82fq!;QNm!9sL_#ljqmrr<#ms6>OBp\t6brVlrrqZ$Bh#QO`#s8;osrhTRGs2t@l~>
-%O8fXKj+`;SQMC7RrI03T"HA1ldF%jks82imOoP=Ys7?9fqu?]hs8W,trVuo\s8Duts7N2fh#IEPqu?]o
-%s8W,qs763is6TR]s89k9b5Zt~>
-%O8fXKj+`;SQMC7RrI03T"HA1ldF%jks82imOoP=Ys7?9fqu?]hs8W,trVuo\s8Duts7N2fh#IEPqu?]o
-%s8W,qs763is6TR]s89k9b5Zt~>
-%OT,dVs7lKis8W#js8VclquH?frr_ohr:u6MpAY3iq==Ob!<2fo!V>g[rrMrfU]5rGb5Zt~>
-%M?!VLrVllm!;QHks7QEgNW9%Ys82irs8;orrVuoos8W,ns8Dums8Duts8N&qUAs*Ms82cps8;ors7H'c
-%s8N&ds7QEls7aM4b5Zt~>
-%M?!VLrVllm!;QHks7QEgNW9%Ys82irs8;orrVuoos8W,ns8Dums8Duts8N&qUAs*Ms82cps8;ors7H'c
-%s8N&ds7QEls7aM4b5Zt~>
-%OoGgap](9ks7-*gs829arr`;qs7lTn!VZDKs7cNuqt'jfqu?Nmq>CNts826as7iAhK)a!nJ,~>
-%M?!VLrVllm!;QHks7QEgNW9%Ys82irs8;orrVuoos8W,ns8Dums8Duts8N&qUAs*Ms82cps8;ors7H'c
-%s8N&ds7QEls7aM4b5Zt~>
-%M?!VLrVllm!;QHks7QEgNW9%Ys82irs8;orrVuoos8W,ns8Dums8Duts8N&qUAs*Ms82cps8;ors7H'c
-%s8N&ds7QEls7aM4b5Zt~>
-%OoGpjs7?$cs763ds8VfmrUgHqqZ$<ds7?9hMuWMN"8_lnqY'pjmf34arrDtls+:9ns*t~>
-%OoPISs8W,ks8Mus!rVur#ljo's8VojqYL0js8;oqPQ1U]s8N&us8Dunp](9is8W,rs8DusUArsIs7QEk
-%qu?]ns8W,is8W,prVuok_uImZJ,~>
-%OoPISs8W,ks8Mus!rVur#ljo's8VojqYL0js8;oqPQ1U]s8N&us8Dunp](9is8W,rs8DusUArsIs7QEk
-%qu?]ns8W,is8W,prVuok_uImZJ,~>
-%OoGpgs8)clq#C9gqu?]qo`#-ps6BXVrqM?Mp\tKqs7lWjqu?WjrrW0!pAP!krM9IFs2t@l~>
-%OoPISs8W,ks8Mus!rVur#ljo's8VojqYL0js8;oqPQ1U]s8N&us8Dunp](9is8W,rs8DusUArsIs7QEk
-%qu?]ns8W,is8W,prVuok_uImZJ,~>
-%OoPISs8W,ks8Mus!rVur#ljo's8VojqYL0js8;oqPQ1U]s8N&us8Dunp](9is8W,rs8DusUArsIs7QEk
-%qu?]ns8W,is8W,prVuok_uImZJ,~>
-%OoGpds8Duks7cQnp](9dqYpQoKE(]G(]FC5s82KhpA=mirVu]ms82Wks8MiorM9JDrr`/ts7cKl!W;Wi
-%rrDW&s2t@l~>
-%OoPI[q>^Kmrr7TMp](9is7H9is82irs8;orrVuioV#T6Ms8;cos76'es8;ohs8W,hs8W,us89k9b5Zt~
-%>
-%OoPI[q>^Kmrr7TMp](9is7H9is82irs8;orrVuioV#T6Ms8;cos76'es8;ohs8W,hs8W,us89k9b5Zt~
-%>
-%O8f:TnF6DV!WMimrrDippk/V?rsJZ'q#C3js82iqq>:0po_SUarM0DCrsnDqs8Dlfp\=^dqX+=_pV$UL
-%s*t~>
-%OoPI[q>^Kmrr7TMp](9is7H9is82irs8;orrVuioV#T6Ms8;cos76'es8;ohs8W,hs8W,us89k9b5Zt~
-%>
-%OoPI[q>^Kmrr7TMp](9is7H9is82irs8;orrVuioV#T6Ms8;cos76'es8;ohs8W,hs8W,us89k9b5Zt~
-%>
-%OoGIUmf*4mnFchPs8VNeo_3t;p\t9inbrIhh#I6KrsA2aj8]/Xs8VooV#T$G%I@+T!!!')&-)t?!"Q0D
-%s2t@l~>
-%OoGp8ba"I.^UUeVY*YLNq>Z'Hqu?]lrVuoqs4dR=s02O;s0M`js2G$5s8Jbmf`2!>s.THSs$?ZKs"aTs
-%s'PforVuoq_uImZJ,~>
-%OoGp8ba"I.^UUeVY*YLNq>Z'Hqu?]lrVuoqs4dR=s02O;s0M`js2G$5s8Jbmf`2!>s.THSs$?ZKs"aTs
-%s'PforVuoq_uImZJ,~>
-%OoGpg8IuhgI=Q`o3\qEBs8N)bKE(WE(&I^9[2<7[H$FU_EB,[Wo)J7Xs8W%ns4.,Z6:`\PLjO&lIp<0Y
-%YlF@/s2t@l~>
-%OoGp8ba"I.^UUeVY*YLNq>Z'Hqu?]lrVuoqs4dR=s02O;s0M`js2G$5s8Jbmf`2!>s.THSs$?ZKs"aTs
-%s'PforVuoq_uImZJ,~>
-%OoGp8ba"I.^UUeVY*YLNq>Z'Hqu?]lrVuoqs4dR=s02O;s0M`js2G$5s8Jbmf`2!>s.THSs$?ZKs"aTs
-%s'PforVuoq_uImZJ,~>
-%OT,YO)((;iJ:W;73WT0ZK)bTF(]FC3s1?&H=CH`3KS=\!*%pm`q"t*gr1sACrsgkV,^+]jML9_X"TuC:
-%qRupOs*t~>
-%OoGo^SKfA6L3@`I?RR>no)8XgKE(uOs8Duts7u]mrVuo,s#C%!s+LE%s#'hGs8&DghZ*WKs7uWns.oZN
-%s)S-ms+(,-s'u$-s8;og_uImZJ,~>
-%OoGo^SKfA6L3@`I?RR>no)8XgKE(uOs8Duts7u]mrVuo,s#C%!s+LE%s#'hGs8&DghZ*WKs7uWns.oZN
-%s)S-ms+(,-s'u$-s8;og_uImZJ,~>
-%OoGph4X(bjI"Zcj4uNE<s7q9HpAYBns7aFA!*rb,Hj"nG+Wj\]rrD\ds472Zr&7A"IX$!^Lk/n5!4BH=
-%b5Zt~>
-%OoGo^SKfA6L3@`I?RR>no)8XgKE(uOs8Duts7u]mrVuo,s#C%!s+LE%s#'hGs8&DghZ*WKs7uWns.oZN
-%s)S-ms+(,-s'u$-s8;og_uImZJ,~>
-%OoGo^SKfA6L3@`I?RR>no)8XgKE(uOs8Duts7u]mrVuo,s#C%!s+LE%s#'hGs8&DghZ*WKs7uWns.oZN
-%s)S-ms+(,-s'u$-s8;og_uImZJ,~>
-%OoGpf5:n++K84c#5sbSNs7CpCpAYm&s7O.>"(b_hJ:<!%,:PtLmJ$PYqkO2ArshUe*J9)uJTuZS!"6X>
-%rk8?Ss*t~>
-%OoPHUrt#-fs*OcOrso&.K)blNs8)Kis0VeTs(D@Xs+:7fs.02is8JbmgAh3Hs8W+cs!@\qs+LDus!RhL
-%s7cQg^]2IVJ,~>
-%OoPHUrt#-fs*OcOrso&.K)blNs8)Kis0VeTs(D@Xs+:7fs.02is8JbmgAh3Hs8W+cs!@\qs+LDus!RhL
-%s7cQg^]2IVJ,~>
-%OT,bI*[Q5bJ:2u)7KEJds+::Drso#-YJL9F>(_EVI=`=[62pldr;ZZfV#T$G%f&se)hN]mI=?r[!!0h/
-%]`6.SJ,~>
-%OoPHUrt#-fs*OcOrso&.K)blNs8)Kis0VeTs(D@Xs+:7fs.02is8JbmgAh3Hs8W+cs!@\qs+LDus!RhL
-%s7cQg^]2IVJ,~>
-%OoPHUrt#-fs*OcOrso&.K)blNs8)Kis0VeTs(D@Xs+:7fs.02is8JbmgAh3Hs8W+cs!@\qs+LDus!RhL
-%s7cQg^]2IVJ,~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHUruM,ts+:8`ru(h9K)bfLrVlcqs8;o/s#9sps*ap+ru;!9s8W,ls8AbnhZ*WQs8N&ms8W+ms"sb;
-%s*Xits"OIcs8W,srVuol`W+*\J,~>
-%OoPHUruM,ts+:8`ru(h9K)bfLrVlcqs8;o/s#9sps*ap+ru;!9s8W,ls8AbnhZ*WQs8N&ms8W+ms"sb;
-%s*Xits"OIcs8W,srVuol`W+*\J,~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHUruM,ts+:8`ru(h9K)bfLrVlcqs8;o/s#9sps*ap+ru;!9s8W,ls8AbnhZ*WQs8N&ms8W+ms"sb;
-%s*Xits"OIcs8W,srVuol`W+*\J,~>
-%OoPHUruM,ts+:8`ru(h9K)bfLrVlcqs8;o/s#9sps*ap+ru;!9s8W,ls8AbnhZ*WQs8N&ms8W+ms"sb;
-%s*Xits"OIcs8W,srVuol`W+*\J,~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHHru_2`#%(^X*W,a0!;V9IrVuoos7lQms8N&1s"FCis*F^!ruM-9s8W,nUAs*Ms7Q9hs-Na:s+C>j
-%s+C>!s&oC#s7lWj_>h[XJ,~>
-%OoPHHru_2`#%(^X*W,a0!;V9IrVuoos7lQms8N&1s"FCis*F^!ruM-9s8W,nUAs*Ms7Q9hs-Na:s+C>j
-%s+C>!s&oC#s7lWj_>h[XJ,~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHHru_2`#%(^X*W,a0!;V9IrVuoos7lQms8N&1s"FCis*F^!ruM-9s8W,nUAs*Ms7Q9hs-Na:s+C>j
-%s+C>!s&oC#s7lWj_>h[XJ,~>
-%OoPHHru_2`#%(^X*W,a0!;V9IrVuoos7lQms8N&1s"FCis*F^!ruM-9s8W,nUAs*Ms7Q9hs-Na:s+C>j
-%s+C>!s&oC#s7lWj_>h[XJ,~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHRs!@\ks+12ZruqCAK)bfLrVQWps8Duts1\L\s).jbs*Xhis.5h^f)Pc9s"OJ(s+(,qs!RhRqu?]k
-%_uImZJ,~>
-%OoPHRs!@\ks+12ZruqCAK)bfLrVQWps8Duts1\L\s).jbs*Xhis.5h^f)Pc9s"OJ(s+(,qs!RhRqu?]k
-%_uImZJ,~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHRs!@\ks+12ZruqCAK)bfLrVQWps8Duts1\L\s).jbs*Xhis.5h^f)Pc9s"OJ(s+(,qs!RhRqu?]k
-%_uImZJ,~>
-%OoPHRs!@\ks+12ZruqCAK)bfLrVQWps8Duts1\L\s).jbs*Xhis.5h^f)Pc9s"OJ(s+(,qs!RhRqu?]k
-%_uImZJ,~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoGobTc4quI#!J^>S.SJs7ZNfKE(uOs8Dips7ZKms2G!is)J'ls*F\ms-iods7iDih#IEQs8;oss.fTU
-%s*=Qms#9sds7cQls8W,s_uImZJ,~>
-%OoGobTc4quI#!J^>S.SJs7ZNfKE(uOs8Dips7ZKms2G!is)J'ls*F\ms-iods7iDih#IEQs8;oss.fTU
-%s*=Qms#9sds7cQls8W,s_uImZJ,~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoGobTc4quI#!J^>S.SJs7ZNfKE(uOs8Dips7ZKms2G!is)J'ls*F\ms-iods7iDih#IEQs8;oss.fTU
-%s*=Qms#9sds7cQls8W,s_uImZJ,~>
-%OoGobTc4quI#!J^>S.SJs7ZNfKE(uOs8Dips7ZKms2G!is)J'ls*F\ms-iods7iDih#IEQs8;oss.fTU
-%s*=Qms#9sds7cQls8W,s_uImZJ,~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoGpj4!Yr#H\-Zs3'@9As8IWMpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=
-%]Dp%RJ,~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%OoPHPs!%Jls+12WruD%<K)blNs8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCY
-%s8Dors8Bk8b5Zt~>
-%WW+=Ds7cQnp\Y!jrr2ipr;Q`nrr<#sq>^KM0Gu<lH$Fsp5r\kfrr3c6r;Zfmq>^Kls8Dutp](9gs8;`k
-%rr/>cpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=]Dp%RJ,~>
-%YQ+S#s8;ogs8W,ms7cQequ7H-q=aO]rr<"TM&-tVI=QiK<[B'QjT#/Xs7ZKms82cps82irs8;oss7u]o
-%s8W,uU&Y/ms8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~
-%>
-%YQ+S#s8;ogs8W,ms7cQequ7H-q=aO]rr<"TM&-tVI=QiK<[B'QjT#/Xs7ZKms82cps82irs8;oss7u]o
-%s8W,uU&Y/ms8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~
-%>
-%WW*)!s82Bdrr`/us8Drs"oS?!rUp'ert"tQ3Y`?[NJ;h93ACr]s8N2qs8W)trs8Suo)Jahs8W&ps8W%d
-%s7ZI'rVuo3[fouAJ:N3!Ij61*rr3)us8W(os4.,X5tE,LIXcm"HXHgT\\%mas*t~>
-%YQ+S#s8;ogs8W,ms7cQequ7H-q=aO]rr<"TM&-tVI=QiK<[B'QjT#/Xs7ZKms82cps82irs8;oss7u]o
-%s8W,uU&Y/ms8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~
-%>
-%YQ+S#s8;ogs8W,ms7cQequ7H-q=aO]rr<"TM&-tVI=QiK<[B'QjT#/Xs7ZKms82cps82irs8;oss7u]o
-%s8W,uU&Y/ms8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~
-%>
-%W;cklrr4/.nc/OeoDeL`p\*XTH;?C>#QPP=/h29pH@g0#5QD2o#n\:A9QmJ]hY$pKp@&"\rVZ]orVlrs
-%rVi;dpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=]Dp%RJ,~>
-%XoJFus8W,rs7lKk*:N@/]SqeZ@lujh('"=D%3?RFL4Y"gAHi>O&dJaK*?@U=EcS7_e'n3os8;olrVuor
-%s8W,tU&Y/ms8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~
-%>
-%XoJFus8W,rs7lKk*:N@/]SqeZ@lujh('"=D%3?RFL4Y"gAHi>O&dJaK*?@U=EcS7_e'n3os8;olrVuor
-%s8W,tU&Y/ms8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~
-%>
-%W;dD)s7ZHls7cQno\Z-j0E;:U!<*!-!WW3N+F\`dIY'mW"o\K=$3^D0#64faG`1P\rq$*grql]prVccr
-%r1!`[rt#).s1YrG>?uc0JUN"m,=DJ1"8r3!rhTSErsV1a+G"ukJ:`,U!!9^Cs2t@l~>
-%XoJFus8W,rs7lKk*:N@/]SqeZ@lujh('"=D%3?RFL4Y"gAHi>O&dJaK*?@U=EcS7_e'n3os8;olrVuor
-%s8W,tU&Y/ms8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~
-%>
-%XoJFus8W,rs7lKk*:N@/]SqeZ@lujh('"=D%3?RFL4Y"gAHi>O&dJaK*?@U=EcS7_e'n3os8;olrVuor
-%s8W,tU&Y/ms8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~
-%>
-%W;d>#qZ$*arr;Wjp=GO`1]@@U!<r]+!"KYS*u9QcK7A_40E;(V!"/c4!!!$""@%Qedf'1F!;$3i"oeAs
-%s8Vqbs7ZI'rVuo3[fouAJ:N3!Ij61*rr3)us8W(os4.,X5tE,LIXcm"HXHgT\\%mas*t~>
-%Z2ak&s8W,nrVuols8W,_s4dRDs%35%r;ciur;[6a2M$F%F^ef.-ia5J!W`c@r;cj@s).kVs47)Is8N&u
-%qu3;hs8W,tp](9*s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor_uImZJ,~>
-%Z2ak&s8W,nrVuols8W,_s4dRDs%35%r;ciur;[6a2M$F%F^ef.-ia5J!W`c@r;cj@s).kVs47)Is8N&u
-%qu3;hs8W,tp](9*s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor_uImZJ,~>
-%VuI;+s8DlqpYj;6*<6ES":kV6!"f>>%0-DS-AH_oJq5jK%0-D6&.&C<!!iW+!"'&59;]bss7lTn"TA?"
-%s7r/apAY[%s8TgB"^>8_J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=]Dp%RJ,~>
-%Z2ak&s8W,nrVuols8W,_s4dRDs%35%r;ciur;[6a2M$F%F^ef.-ia5J!W`c@r;cj@s).kVs47)Is8N&u
-%qu3;hs8W,tp](9*s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor_uImZJ,~>
-%Z2ak&s8W,nrVuols8W,_s4dRDs%35%r;ciur;[6a2M$F%F^ef.-ia5J!W`c@r;cj@s).kVs47)Is8N&u
-%qu3;hs8W,tp](9*s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor_uImZJ,~>
-%WW*;(s8VHcqu(gA#Q=]'!rN$/"UP;3!"05V*IrHkG_It8r;Ziu#6"T(!<WE&!"B8=!+Y9nnG`IfrVuoq
-%S,`3^&,lP.^:+8M?%@HVI=EId6iR)fr;ZfrV#T!F$pdE,JUW*!JpUl*!kGrCb5Zt~>
-%Z2ak$s8W,mqu?]6s)\2GrrN&urrW3'r;[</!Z)Z!HA.&R<[T6p!!E9)r;cj.rri9#s!n&^s7cQns7Z9g
-%s8/Sks8W,tp](9*s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor_uImZJ,~>
-%Z2ak$s8W,mqu?]6s)\2GrrN&urrW3'r;[</!Z)Z!HA.&R<[T6p!!E9)r;cj.rri9#s!n&^s7cQns7Z9g
-%s8/Sks8W,tp](9*s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor_uImZJ,~>
-%W;e12s8V752uisZ!!io3!!<9'!Wi?%!=Af2+X)8\O*Q477fWVk$PimG!<`B&"TeZ(%0-A>!%Q+EoDejf
-%rgEf[rt#).s1YrG>?uc0JUN"m,=DJ1"8r3!rhTSErsV1a+G"ukJ:`,U!!9^Cs2t@l~>
-%Z2ak$s8W,mqu?]6s)\2GrrN&urrW3'r;[</!Z)Z!HA.&R<[T6p!!E9)r;cj.rri9#s!n&^s7cQns7Z9g
-%s8/Sks8W,tp](9*s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor_uImZJ,~>
-%Z2ak$s8W,mqu?]6s)\2GrrN&urrW3'r;[</!Z)Z!HA.&R<[T6p!!E9)r;cj.rri9#s!n&^s7cQns7Z9g
-%s8/Sks8W,tp](9*s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor_uImZJ,~>
-%WW*2!rVuoa3&g:+#n7t&JUN$#JN#gm!!!6(!Vl^+!WW9%"TU'i_Z0E2rVuooS,`3^&,lP.^:+8M?%@HV
-%I=EId6iR)fr;ZfrV#T!F$pdE,JUW*!JpUl*!kGrCb5Zt~>
-%XoJFps8W,ms8)b#rt+i'rri?1r>GWjs,$bTrtt_8('"dQ!!!'%#mghA"U+l+6:.r^s8VcbrVuoss8W,u
-%U]:Aos8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~>
-%XoJFps8W,ms8)b#rt+i'rri?1r>GWjs,$bTrtt_8('"dQ!!!'%#mghA"U+l+6:.r^s8VcbrVuoss8W,u
-%U]:Aos8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~>
-%VuHnii_og`mf3e**%$2aH[C6(5R.Al#5/$&!WWT.!(''!qYpKprL3c[rt#).s1YrG>?uc0JUN"m,=DJ1
-%"8r3!rhTSErsV1a+G"ukJ:`,U!!9^Cs2t@l~>
-%XoJFps8W,ms8)b#rt+i'rri?1r>GWjs,$bTrtt_8('"dQ!!!'%#mghA"U+l+6:.r^s8VcbrVuoss8W,u
-%U]:Aos8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~>
-%XoJFps8W,ms8)b#rt+i'rri?1r>GWjs,$bTrtt_8('"dQ!!!'%#mghA"U+l+6:.r^s8VcbrVuoss8W,u
-%U]:Aos8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~>
-%VuHeg`;T`:!q?6t"V2\,J:`8uHTEq]!!!<*!VcWt!<N6&"9&9(NrShQrV;o^pAY[%s8TgB"^>8_J:W,u
-%,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=]Dp%RJ,~>
-%YQ+Rss8W,ks2k9MqZ-Wtrri?(rrMus$m$I9H>RM5BdbA5"T\T(pAk4%rrE'/s$ct^s8;oss8Duls88Sj
-%s8W,tp](9*s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor_uImZJ,~>
-%YQ+Rss8W,ks2k9MqZ-Wtrri?(rrMus$m$I9H>RM5BdbA5"T\T(pAk4%rrE'/s$ct^s8;oss8Duls88Sj
-%s8W,tp](9*s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor_uImZJ,~>
-%WW*2$o`'^I!=J8q%0dY"EI34hInMj0!<</p!"&f6!!!0/!sW!0oU#UOrt#).s1YrG>?uc0JUN"m,=DJ1
-%"8r3!rhTSErsV1a+G"ukJ:`,U!!9^Cs2t@l~>
-%YQ+Rss8W,ks2k9MqZ-Wtrri?(rrMus$m$I9H>RM5BdbA5"T\T(pAk4%rrE'/s$ct^s8;oss8Duls88Sj
-%s8W,tp](9*s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor_uImZJ,~>
-%YQ+Rss8W,ks2k9MqZ-Wtrri?(rrMus$m$I9H>RM5BdbA5"T\T(pAk4%rrE'/s$ct^s8;oss8Duls88Sj
-%s8W,tp](9*s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor_uImZJ,~>
-%W;d%ns"jfX"n2Kq"pkM7&-M_.!!N?*pAbF)#ljr2!!4,;rrD_]s7ZI'rVuo3[fouAJ:N3!Ij61*rr3)u
-%s8W(os4.,X5tE,LIXcm"HXHgT\\%mas*t~>
-%YQ+Y%rVuors-irfrrMoqr;uirrso&DrrE'*r;Zg&":"o,#RLA5rrE'(r;cj%s8;cos8DupU&Y/ms8D]l
-%s1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~>
-%YQ+Y%rVuors-irfrrMoqr;uirrso&DrrE'*r;Zg&":"o,#RLA5rrE'(r;cj%s8;cos8DupU&Y/ms8D]l
-%s1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~>
-%VZ-W0rVup&m/RIo!!!0'!seu2!!)co%g;t6!rr<)!!!'!s7uKjr1!`[rt#).s1YrG>?uc0JUN"m,=DJ1
-%"8r3!rhTSErsV1a+G"ukJ:`,U!!9^Cs2t@l~>
-%YQ+Y%rVuors-irfrrMoqr;uirrso&DrrE'*r;Zg&":"o,#RLA5rrE'(r;cj%s8;cos8DupU&Y/ms8D]l
-%s1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~>
-%YQ+Y%rVuors-irfrrMoqr;uirrso&DrrE'*r;Zg&":"o,#RLA5rrE'(r;cj%s8;cos8DupU&Y/ms8D]l
-%s1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~>
-%WW*5!s8O,C"onu!!!*0'rW**&"on`&!!!2u!<3<&!!`f4!Yk\6p\C6WpAY[%s8TgB"^>8_J:W,u,9oST
-%rr`3!s8Jhoec-%D80EJ4It3,t?iU8=]Dp%RJ,~>
-%Z2ajsrVuofs8W+Srs/Q*rrE'#r<3-&rrN&urri3!"q;"A!!WW-q>gO#r;cj"r;cfrs7H9is8DupU]:Ao
-%s8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~>
-%Z2ajsrVuofs8W+Srs/Q*rrE'#r<3-&rrN&urri3!"q;"A!!WW-q>gO#r;cj"r;cfrs7H9is8DupU]:Ao
-%s8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~>
-%W;cttru;10!!NB)!!3-$rW!**!!*<,!;?I'$NL>9!!<3$,lRQ=s7uM\s7ZI'rVuo3[fouAJ:N3!Ij61*
-%rr3)us8W(os4.,X5tE,LIXcm"HXHgT\\%mas*t~>
-%Z2ajsrVuofs8W+Srs/Q*rrE'#r<3-&rrN&urri3!"q;"A!!WW-q>gO#r;cj"r;cfrs7H9is8DupU]:Ao
-%s8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~>
-%Z2ajsrVuofs8W+Srs/Q*rrE'#r<3-&rrN&urri3!"q;"A!!WW-q>gO#r;cj"r;cfrs7H9is8DupU]:Ao
-%s8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~>
-%WW*,!s8P+fp](<q!r`0#"9n5orW!K3!!!3)!"&]6!WWQ2!!k1SrVllsS,`3^&,lP.^:+8M?%@HVI=EId
-%6iR)fr;ZfrV#T!F$pdE,JUW*!JpUl*!kGrCb5Zt~>
-%Z2ajqrVuojs8W+grt=c#rrMoq"9AN,"U>YF"U+u1!!!6/!!!-)!!!N?*?G+Ys7uQls88Yls8W,tp](9*
-%s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor_uImZJ,~>
-%Z2ajqrVuojs8W+grt=c#rrMoq"9AN,"U>YF"U+u1!!!6/!!!-)!!!N?*?G+Ys7uQls88Yls8W,tp](9*
-%s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor_uImZJ,~>
-%W;dG*njFf)&Hi(8!WW3)"98c2qu?]unc/al#6b/,!"K,3#64`/!!">a3<&sXrgEf[rt#).s1YrG>?uc0
-%JUN"m,=DJ1"8r3!rhTSErsV1a+G"ukJ:`,U!!9^Cs2t@l~>
-%Z2ajqrVuojs8W+grt=c#rrMoq"9AN,"U>YF"U+u1!!!6/!!!-)!!!N?*?G+Ys7uQls88Yls8W,tp](9*
-%s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor_uImZJ,~>
-%Z2ajqrVuojs8W+grt=c#rrMoq"9AN,"U>YF"U+u1!!!6/!!!-)!!!N?*?G+Ys7uQls88Yls8W,tp](9*
-%s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor_uImZJ,~>
-%WW*2!rr5kD!#"o(!<E;l!;um.!s&B%"ooG>%LiC>,;;Ocrr/>cpAY[%s8TgB"^>8_J:W,u,9oSTrr`3!
-%s8Jhoec-%D80EJ4It3,t?iU8=]Dp%RJ,~>
-%X8i4ns8W+is"aU$rrW3#rrN-+rrr?$rrr9"rrW3$quHWprrN-2rrE'"rso&bs$m%_rVuoms7--dU&Y/m
-%s8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~>
-%X8i4ns8W+is"aU$rrW3#rrN-+rrr?$rrr9"rrW3$quHWprrN-2rrE'"rso&bs$m%_rVuoms7--dU&Y/m
-%s8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~>
-%W;d;'ogMW?N[G27!!a#9rW!*'"TeZ*!V$-o!!36*"9S]'!!!i7!!S<L5"bkRrr2utS,`3^&,lP.^:+8M
-%?%@HVI=EId6iR)fr;ZfrV#T!F$pdE,JUW*!JpUl*!kGrCb5Zt~>
-%X8i4ns8W+is"aU$rrW3#rrN-+rrr?$rrr9"rrW3$quHWprrN-2rrE'"rso&bs$m%_rVuoms7--dU&Y/m
-%s8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~>
-%X8i4ns8W+is"aU$rrW3#rrN-+rrr?$rrr9"rrW3$quHWprrN-2rrE'"rso&bs$m%_rVuoms7--dU&Y/m
-%s8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~>
-%WW*>!s8P\YqZ#8f:*0B7"9\u6#R:8.!<EAp!;ca+!sJZ1!ru(eao=aq9)\bgrrDtds7ZI'rVuo3[fouA
-%J:N3!Ij61*rr3)us8W(os4.,X5tE,LIXcm"HXHgT\\%mas*t~>
-%Z2ajus7Q?js7cPrs/Z1ns1//3r;cj!rs\i+rrW3&r<<3(rrW0""98T/!<N-!rt>?Ys1/06s%i[]s8W,o
-%s8Muss7<#cs8W,tp](9*s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor_uImZ
-%J,~>
-%Z2ajus7Q?js7cPrs/Z1ns1//3r;cj!rs\i+rrW3&r<<3(rrW0""98T/!<N-!rt>?Ys1/06s%i[]s8W,o
-%s8Muss7<#cs8W,tp](9*s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor_uImZ
-%J,~>
-%W;d>*pcUb>s7u?fenH!/#lFZ)!WW3$nc/jo#7:b@"9e](#uAA8s6fnJ5tLqQrrN,sS,`3^&,lP.^:+8M
-%?%@HVI=EId6iR)fr;ZfrV#T!F$pdE,JUW*!JpUl*!kGrCb5Zt~>
-%Z2ajus7Q?js7cPrs/Z1ns1//3r;cj!rs\i+rrW3&r<<3(rrW0""98T/!<N-!rt>?Ys1/06s%i[]s8W,o
-%s8Muss7<#cs8W,tp](9*s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor_uImZ
-%J,~>
-%Z2ajus7Q?js7cPrs/Z1ns1//3r;cj!rs\i+rrW3&r<<3(rrW0""98T/!<N-!rt>?Ys1/06s%i[]s8W,o
-%s8Muss7<#cs8W,tp](9*s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor_uImZ
-%J,~>
-%WW*1nrr5YWp\"Oc$eA_t#RUPE!!!'-"7Q<h!!!'!!"TMA>Jg+6m/KRC8GrMfrVi8cpAY[%s8TgB"^>8_
-%J:W,u,9oSTrr`3!s8Jhoec-%D80EJ4It3,t?iU8=]Dp%RJ,~>
-%YQ+Y%rVuolrLEocs7ZK:s-!Caruq=@rrrE'pAb6s!sg"T!!!QA2)S]HPa(k6s8SUZ4[&`@s8W#pq"XOT
-%s8VrlU]:Aos8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~
-%>
-%YQ+Y%rVuolrLEocs7ZK:s-!Caruq=@rrrE'pAb6s!sg"T!!!QA2)S]HPa(k6s8SUZ4[&`@s8W#pq"XOT
-%s8VrlU]:Aos8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~
-%>
-%VuIM+3)9>MrV-3fs8Vep@pCJ`!!*'"#4_a1!"/c-.S+!@k3i$Es7u]p4%2d?s8W#rRfE*]&,lP.^:+8M
-%?%@HVI=EId6iR)fr;ZfrV#T!F$pdE,JUW*!JpUl*!kGrCb5Zt~>
-%YQ+Y%rVuolrLEocs7ZK:s-!Caruq=@rrrE'pAb6s!sg"T!!!QA2)S]HPa(k6s8SUZ4[&`@s8W#pq"XOT
-%s8VrlU]:Aos8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~
-%>
-%YQ+Y%rVuolrLEocs7ZK:s-!Caruq=@rrrE'pAb6s!sg"T!!!QA2)S]HPa(k6s8SUZ4[&`@s8W#pq"XOT
-%s8VrlU]:Aos8D]ls1A:bs)A!ds+:7os.]Pns8JbmgAh3Ns8W+js"j\,s*aous"FCYs8Dors8Bk8b5Zt~
-%>
-%Yl>41s8;Wkp](*eqFF$Ps8;]m(AmjhaeXZ7E^iDa84PNP!&Hu45u)6B"E_5sht6pJ"T/2us8;lr%RWER
-%q>^Kls8Vops7uKgU&Xid&,lP.^:+8M?%@HVI=EId6iR)fr;ZfrV#T!F$pdE,JUW*!JpUl*!kGrCb5Zt~
-%>
-%Z2ak's8W,ks7u]ps/#afqu7T3qtTs\p[%7qe%<5lWhlPaT:;=ASu&9eYI+_Fo^q;.oCN"^qYL0js/#`_
-%s8W,os8)cqs7;l_s8W,tp](9*s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor
-%_uImZJ,~>
-%Z2ak's8W,ks7u]ps/#afqu7T3qtTs\p[%7qe%<5lWhlPaT:;=ASu&9eYI+_Fo^q;.oCN"^qYL0js/#`_
-%s8W,os8)cqs7;l_s8W,tp](9*s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor
-%_uImZJ,~>
-%Z2Xk#p&4mjqYgEq6pp_>rrE#nrs8Moq#CBgqZ$R(s7,dYrr<#tr;Q`rr;Q^&6V^8Or;ZWnp\k$i!W;bg
-%s7ZI'rVuo3[fouAJ:N3!Ij61*rr3)us8W(os4.,X5tE,LIXcm"HXHgT\\%mas*t~>
-%Z2ak's8W,ks7u]ps/#afqu7T3qtTs\p[%7qe%<5lWhlPaT:;=ASu&9eYI+_Fo^q;.oCN"^qYL0js/#`_
-%s8W,os8)cqs7;l_s8W,tp](9*s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor
-%_uImZJ,~>
-%Z2ak's8W,ks7u]ps/#afqu7T3qtTs\p[%7qe%<5lWhlPaT:;=ASu&9eYI+_Fo^q;.oCN"^qYL0js/#`_
-%s8W,os8)cqs7;l_s8W,tp](9*s"OIls*ap!ruqE:s8W,uUArsIs8;oss.96Hs+:9!s+12's'Ga(rVuor
-%_uImZJ,~>