merged
authorhuffman
Sat, 06 Nov 2010 10:01:00 -0700
changeset 40437 6354e21e61fa
parent 40436 adb22dbb5242 (current diff)
parent 40410 8adcdd2c5805 (diff)
child 40438 61176a1f9cd3
merged
Admin/Mercurial/misc.diff
src/HOL/Library/Quicksort.thy
--- a/Admin/Mercurial/hgwebdir.cgi	Fri Nov 05 15:15:28 2010 -0700
+++ b/Admin/Mercurial/hgwebdir.cgi	Sat Nov 06 10:01:00 2010 -0700
@@ -4,7 +4,12 @@
 
 # adjust python path if not a system-wide install:
 import sys
-sys.path.insert(0, "/home/isabelle-repository/repos/mercurial-www4/lib64/python2.5/site-packages")
+# using the hg installation provided by the system (AK, 3.3.2010)
+#sys.path.insert(0, "/home/isabelle-repository/repos/mercurial-www4/lib64/python2.5/site-packages")
+#sys.path.insert(0, "/usr/lib64/python2.5/site-packages")
+#sys.path.insert(0, "/home/isabelle-repository/repos/mercurial-1.3.1/lib64")
+#sys.path.insert(0, "/home/isabelle-repository/repos/testtool")
+
 
 # enable importing on demand to reduce startup time
 from mercurial import demandimport; demandimport.enable()
@@ -20,6 +25,7 @@
 #
 import os
 os.environ["HGENCODING"] = "UTF-8"
+os.environ["HGRCPATH"] = "/home/isabelle-repository/repos/hgrc"
 
 from mercurial.hgweb.hgwebdir_mod import hgwebdir
 import mercurial.hgweb.wsgicgi as wsgicgi
--- a/Admin/Mercurial/isabelle-style.diff	Fri Nov 05 15:15:28 2010 -0700
+++ b/Admin/Mercurial/isabelle-style.diff	Sat Nov 06 10:01:00 2010 -0700
@@ -1,56 +1,73 @@
-diff -u gitweb/changelogentry.tmpl isabelle/changelogentry.tmpl
---- gitweb/changelogentry.tmpl	2010-02-01 16:34:34.000000000 +0100
-+++ isabelle/changelogentry.tmpl	2010-03-03 15:12:12.000000000 +0100
-@@ -1,14 +1,12 @@
- <div>
--<a class="title" href="{url}rev/{node|short}{sessionvars%urlparameter}"><span class="age">{date|age}</span>{desc|strip|firstline|escape|nonempty}<span class="logtags"> {inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></a>
--</div>
--<div class="title_text">
--<div class="log_link">
--<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a><br/>
--</div>
--<i>{author|obfuscate} [{date|rfc822date}] rev {rev}</i><br/>
-+<a class="title" href="{url}rev/{node|short}{sessionvars%urlparameter}"><span class="age">{date|age}</span>
-+{author|obfuscate} [{date|rfc822date}] rev {rev}<span class="logtags"> {inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></a>
- </div>
- <div class="log_body">
- {desc|strip|escape|addbreaks|nonempty}
- <br/>
-+<div class="files">
-+{files}
-+</div>
- <br/>
- </div>
-diff -u gitweb/map isabelle/map
---- gitweb/map	2010-02-01 16:34:34.000000000 +0100
-+++ isabelle/map	2010-04-29 23:43:54.000000000 +0200
-@@ -78,7 +78,7 @@
-   <tr style="font-family:monospace" class="parity{parity}">
-     <td class="linenr" style="text-align: right;">
-       <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}"
--         title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
-+         title="{node|short}: {desc|escape}">{author|user}@{rev}</a>
-     </td>
-     <td><pre><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a></pre></td>
-     <td><pre>{line|escape}</pre></td>
-@@ -206,9 +206,10 @@
-   <tr class="parity{parity}">
-     <td class="age"><i>{date|age}</i></td>
-     <td><i>{author|person}</i></td>
-+    <td><i>{date|shortdate}</i></td>
-     <td>
-       <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">
--        <b>{desc|strip|firstline|escape|nonempty}</b>
-+        <b>{desc|strip|escape|nonempty}</b>
-         <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span>
-       </a>
-     </td>
-@@ -225,6 +226,7 @@
-         <b>{desc|strip|firstline|escape|nonempty}</b>
-       </a>
-     </td>
-+    <td><i>{author|person}</i></td>
-     <td class="link">
-       <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a>&nbsp;|&nbsp;<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>&nbsp;|&nbsp;<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> {rename%filelogrename}</td>
-     </tr>'
-Only in isabelle/: map~
+diff -r gitweb/changelogentry.tmpl isabelle/changelogentry.tmpl
+2,8c2,3
+< <a class="title" href="{url}rev/{node|short}{sessionvars%urlparameter}"><span class="age">{date|age} ago</span>{desc|strip|firstline|escape|nonempty}<span class="logtags"> {inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></a>
+< </div>
+< <div class="title_text">
+< <div class="log_link">
+< <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a><br/>
+< </div>
+< <i>{author|obfuscate} [{date|rfc822date}] rev {rev}</i><br/>
+---
+> <a class="title" href="{url}rev/{node|short}{sessionvars%urlparameter}"><span class="age">{date|age}</span>
+> {author|obfuscate} [{date|rfc822date}] rev {rev}<span class="logtags"> {inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></a>
+12a8,10
+> <div class="files">
+> {files}
+> </div>
+diff -r gitweb/changeset.tmpl isabelle/changeset.tmpl
+32c32
+< <tr><td></td><td>{date|date} ({date|age} ago)</td></tr>
+---
+> <tr><td></td><td>{date|date} ({date|age})</td></tr>
+diff -r gitweb/fileannotate.tmpl isabelle/fileannotate.tmpl
+39c39
+<  <td>{date|date} ({date|age} ago)</td></tr>
+---
+>  <td>{date|date} ({date|age})</td></tr>
+diff -r gitweb/filerevision.tmpl isabelle/filerevision.tmpl
+39c39
+<  <td>{date|date} ({date|age} ago)</td></tr>
+---
+>  <td>{date|date} ({date|age})</td></tr>
+diff -r gitweb/graph.tmpl isabelle/graph.tmpl
+66c66
+< revlink += '<span class="info">_DATE ago, by _USER</span></li>';
+---
+> revlink += '<span class="info">_DATE, by _USER</span></li>';
+diff -r gitweb/map isabelle/map
+81c81
+<          title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
+---
+>          title="{node|short}: {desc|escape}">{author|user}@{rev}</a>
+153c153
+<     <td class="age"><i>{date|age} ago</i></td>
+---
+>     <td class="age"><i>{date|age}</i></td>
+164c164
+<     <td class="age"><i>{date|age} ago</i></td>
+---
+>     <td class="age"><i>{date|age}</i></td>
+207c207
+<     <td class="age"><i>{date|age} ago</i></td>
+---
+>     <td class="age"><i>{date|age}</i></td>
+208a209
+>     <td><i>{date|shortdate}</i></td>
+211c212
+<         <b>{desc|strip|firstline|escape|nonempty}</b>
+---
+>         <b>{desc|strip|escape|nonempty}</b>
+222c223,225
+<     <td class="age"><i>{date|age} ago</i></td>
+---
+>     <td class="age"><i>{date|age}</i></td>
+>     <td><i>{author|person}</i></td>
+>     <td><i>{date|shortdate}</i></td>
+225c228
+<         <b>{desc|strip|firstline|escape|nonempty}</b>
+---
+>         <b>{desc|strip|escape|nonempty}</b>
+241c244
+<     <td class="age">{lastchange|age} ago</td>
+---
+>     <td class="age">{lastchange|age}</td>
--- a/Admin/Mercurial/misc.diff	Fri Nov 05 15:15:28 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-diff -r hgweb/webcommands.py hgweb/webcommands.py
-653c653
-<         desc = templatefilters.firstline(ctx.description())
----
->         desc = ctx.description()
-diff -r templates/atom/changelogentry.tmpl templates/atom/changelogentry.tmpl
-2c2
-<   <title>#desc|strip|firstline|strip|escape#</title>
----
->   <title>#desc|strip|escape#</title>
-diff -r templates/rss/changelogentry.tmpl templates/rss/changelogentry.tmpl
-2c2
-<     <title>#desc|strip|firstline|strip|escape#</title>
----
->     <title>#desc|strip|escape#</title>
-diff -r templates/rss/filelogentry.tmpl templates/rss/filelogentry.tmpl
-2c2
-<     <title>#desc|strip|firstline|strip|escape#</title>
----
->     <title>#desc|strip|escape#</title>
--- a/CONTRIBUTORS	Fri Nov 05 15:15:28 2010 -0700
+++ b/CONTRIBUTORS	Sat Nov 06 10:01:00 2010 -0700
@@ -6,6 +6,9 @@
 Contributions to this Isabelle version
 --------------------------------------
 
+* October 2010: Bogdan Grechuk, University of Edinburgh
+  Extended convex analysis in Multivariate Analysis.
+
 * October 2010: Dmitriy Traytel, TUM
   Coercive subtyping via subtype constraints.
 
--- a/NEWS	Fri Nov 05 15:15:28 2010 -0700
+++ b/NEWS	Sat Nov 06 10:01:00 2010 -0700
@@ -6,6 +6,13 @@
 
 *** General ***
 
+* System settings: ISABELLE_HOME_USER now includes ISABELLE_IDENTIFIER
+(and thus refers to something like $HOME/.isabelle/IsabelleXXXX),
+while the default heap location within that directory lacks that extra
+suffix.  This isolates multiple Isabelle installations from each
+other, avoiding problems with old settings in new versions.
+INCOMPATIBILITY, need to copy/upgrade old user settings manually.
+
 * Significantly improved Isabelle/Isar implementation manual.
 
 * Explicit treatment of UTF8 sequences as Isabelle symbols, such that
@@ -82,6 +89,8 @@
 
 *** HOL ***
 
+* Theory Multiset provides stable quicksort implementation of sort_key.
+
 * Quickcheck now has a configurable time limit which is set to 30 seconds
 by default. This can be changed by adding [timeout = n] to the quickcheck
 command. The time limit for auto quickcheck is still set independently,
@@ -325,6 +334,14 @@
   - Renamed options:
     sledgehammer [atps = ...] ~> sledgehammer [provers = ...]
     sledgehammer [atp = ...] ~> sledgehammer [prover = ...]
+    sledgehammer [timeout = 77 s] ~> sledgehammer [timeout = 77]
+    (and "ms" and "min" are no longer supported)
+    INCOMPATIBILITY.
+
+* Nitpick:
+  - Renamed options:
+    nitpick [timeout = 77 s] ~> nitpick [timeout = 77]
+    nitpick [tac_timeout = 777 ms] ~> nitpick [tac_timeout = 0.777]
     INCOMPATIBILITY.
 
 * Changed SMT configuration options:
@@ -337,6 +354,9 @@
     yices_options
     smt_datatypes
 
+* Removed [split_format ... and ... and ...] version of
+[split_format].  Potential INCOMPATIBILITY.
+
 *** FOL ***
 
 * All constant names are now qualified.  INCOMPATIBILITY.
@@ -349,6 +369,10 @@
 
 *** ML ***
 
+* Discontinued obsolete function sys_error and exception SYS_ERROR.
+See implementation manual for further details on exceptions in
+Isabelle/ML.
+
 * Antiquotation @{assert} inlines a function bool -> unit that raises
 Fail if the argument is false.  Due to inlining the source position of
 failed assertions is included in the error output.
--- a/doc-src/Codegen/Thy/Adaptation.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/doc-src/Codegen/Thy/Adaptation.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -2,7 +2,8 @@
 imports Setup
 begin
 
-setup %invisible {* Code_Target.extend_target ("\<SML>", ("SML", K I)) *}
+setup %invisible {* Code_Target.extend_target ("\<SML>", ("SML", K I))
+  #> Code_Target.extend_target ("\<SMLdummy>", ("Haskell", K I)) *}
 
 section {* Adaptation to target languages \label{sec:adaptation} *}
 
@@ -235,7 +236,7 @@
   @{command_def "code_reserved"} command:
 *}
 
-code_reserved %quote "\<SML>" bool true false andalso
+code_reserved %quote "\<SMLdummy>" bool true false andalso
 
 text {*
   \noindent Next, we try to map HOL pairs to SML pairs, using the
--- a/doc-src/Codegen/Thy/Evaluation.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/doc-src/Codegen/Thy/Evaluation.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -18,7 +18,7 @@
 subsection {* Evaluation techniques *}
 
 text {*
-  The existing infrastructure provides a rich palett of evaluation
+  The existing infrastructure provides a rich palette of evaluation
   techniques, each comprising different aspects:
 
   \begin{description}
@@ -135,7 +135,7 @@
       "t'"}.
 
     \item Evaluation of @{term t} terminates which en exception
-      indicating a pattern match failure or a not-implemented
+      indicating a pattern match failure or a non-implemented
       function.  As sketched in \secref{sec:partiality}, this can be
       interpreted as partiality.
      
@@ -148,8 +148,8 @@
   Exceptions of the third kind are propagated to the user.
 
   By default return values of plain evaluation are optional, yielding
-  @{text "SOME t'"} in the first case, @{text "NONE"} and in the
-  second propagating the exception in the third case.  A strict
+  @{text "SOME t'"} in the first case, @{text "NONE"} in the
+  second, and propagating the exception in the third case.  A strict
   variant of plain evaluation either yields @{text "t'"} or propagates
   any exception, a liberal variant caputures any exception in a result
   of type @{text "Exn.result"}.
--- a/doc-src/Codegen/Thy/Further.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/doc-src/Codegen/Thy/Further.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -124,7 +124,8 @@
   specific application, you should consider \emph{Imperative
   Functional Programming with Isabelle/HOL}
   \cite{bulwahn-et-al:2008:imperative}; the framework described there
-  is available in session @{text Imperative_HOL}.
+  is available in session @{text Imperative_HOL}, together with a short
+  primer document.
 *}
 
 
--- a/doc-src/Codegen/Thy/Refinement.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/doc-src/Codegen/Thy/Refinement.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -17,7 +17,7 @@
 
 text {*
   Program refinement works by choosing appropriate code equations
-  explicitly (cf.~\label{sec:equations}); as example, we use Fibonacci
+  explicitly (cf.~\secref{sec:equations}); as example, we use Fibonacci
   numbers:
 *}
 
--- a/doc-src/Codegen/Thy/document/Adaptation.tex	Fri Nov 05 15:15:28 2010 -0700
+++ b/doc-src/Codegen/Thy/document/Adaptation.tex	Sat Nov 06 10:01:00 2010 -0700
@@ -26,7 +26,8 @@
 %
 \isataginvisible
 \isacommand{setup}\isamarkupfalse%
-\ {\isacharverbatimopen}\ Code{\isacharunderscore}Target{\isachardot}extend{\isacharunderscore}target\ {\isacharparenleft}{\isachardoublequote}{\isasymSML}{\isachardoublequote}{\isacharcomma}\ {\isacharparenleft}{\isachardoublequote}SML{\isachardoublequote}{\isacharcomma}\ K\ I{\isacharparenright}{\isacharparenright}\ {\isacharverbatimclose}%
+\ {\isacharverbatimopen}\ Code{\isacharunderscore}Target{\isachardot}extend{\isacharunderscore}target\ {\isacharparenleft}{\isachardoublequote}{\isasymSML}{\isachardoublequote}{\isacharcomma}\ {\isacharparenleft}{\isachardoublequote}SML{\isachardoublequote}{\isacharcomma}\ K\ I{\isacharparenright}{\isacharparenright}\isanewline
+\ \ {\isacharhash}{\isachargreater}\ Code{\isacharunderscore}Target{\isachardot}extend{\isacharunderscore}target\ {\isacharparenleft}{\isachardoublequote}{\isasymSMLdummy}{\isachardoublequote}{\isacharcomma}\ {\isacharparenleft}{\isachardoublequote}Haskell{\isachardoublequote}{\isacharcomma}\ K\ I{\isacharparenright}{\isacharparenright}\ {\isacharverbatimclose}%
 \endisataginvisible
 {\isafoldinvisible}%
 %
@@ -420,7 +421,7 @@
 %
 \isatagquote
 \isacommand{code{\isacharunderscore}reserved}\isamarkupfalse%
-\ {\isachardoublequoteopen}{\isasymSML}{\isachardoublequoteclose}\ bool\ true\ false\ andalso%
+\ {\isachardoublequoteopen}{\isasymSMLdummy}{\isachardoublequoteclose}\ bool\ true\ false\ andalso%
 \endisatagquote
 {\isafoldquote}%
 %
--- a/doc-src/Codegen/Thy/document/Evaluation.tex	Fri Nov 05 15:15:28 2010 -0700
+++ b/doc-src/Codegen/Thy/document/Evaluation.tex	Sat Nov 06 10:01:00 2010 -0700
@@ -38,7 +38,7 @@
 \isamarkuptrue%
 %
 \begin{isamarkuptext}%
-The existing infrastructure provides a rich palett of evaluation
+The existing infrastructure provides a rich palette of evaluation
   techniques, each comprising different aspects:
 
   \begin{description}
@@ -188,7 +188,7 @@
     \item Evaluation of \isa{t} terminates with a result \isa{t{\isacharprime}}.
 
     \item Evaluation of \isa{t} terminates which en exception
-      indicating a pattern match failure or a not-implemented
+      indicating a pattern match failure or a non-implemented
       function.  As sketched in \secref{sec:partiality}, this can be
       interpreted as partiality.
      
@@ -200,8 +200,8 @@
   Exceptions of the third kind are propagated to the user.
 
   By default return values of plain evaluation are optional, yielding
-  \isa{SOME\ t{\isacharprime}} in the first case, \isa{NONE} and in the
-  second propagating the exception in the third case.  A strict
+  \isa{SOME\ t{\isacharprime}} in the first case, \isa{NONE} in the
+  second, and propagating the exception in the third case.  A strict
   variant of plain evaluation either yields \isa{t{\isacharprime}} or propagates
   any exception, a liberal variant caputures any exception in a result
   of type \isa{Exn{\isachardot}result}.
--- a/doc-src/Codegen/Thy/document/Further.tex	Fri Nov 05 15:15:28 2010 -0700
+++ b/doc-src/Codegen/Thy/document/Further.tex	Sat Nov 06 10:01:00 2010 -0700
@@ -240,7 +240,8 @@
   specific application, you should consider \emph{Imperative
   Functional Programming with Isabelle/HOL}
   \cite{bulwahn-et-al:2008:imperative}; the framework described there
-  is available in session \isa{Imperative{\isacharunderscore}HOL}.%
+  is available in session \isa{Imperative{\isacharunderscore}HOL}, together with a short
+  primer document.%
 \end{isamarkuptext}%
 \isamarkuptrue%
 %
--- a/doc-src/Codegen/Thy/document/Refinement.tex	Fri Nov 05 15:15:28 2010 -0700
+++ b/doc-src/Codegen/Thy/document/Refinement.tex	Sat Nov 06 10:01:00 2010 -0700
@@ -37,7 +37,7 @@
 %
 \begin{isamarkuptext}%
 Program refinement works by choosing appropriate code equations
-  explicitly (cf.~\label{sec:equations}); as example, we use Fibonacci
+  explicitly (cf.~\secref{sec:equations}); as example, we use Fibonacci
   numbers:%
 \end{isamarkuptext}%
 \isamarkuptrue%
--- a/doc-src/Codegen/style.sty	Fri Nov 05 15:15:28 2010 -0700
+++ b/doc-src/Codegen/style.sty	Sat Nov 06 10:01:00 2010 -0700
@@ -45,6 +45,7 @@
 
 %% a trick
 \newcommand{\isasymSML}{SML}
+\newcommand{\isasymSMLdummy}{SML}
 
 %% presentation
 \setcounter{secnumdepth}{2} \setcounter{tocdepth}{2}
--- a/doc-src/IsarRef/Thy/HOL_Specific.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/doc-src/IsarRef/Thy/HOL_Specific.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -72,22 +72,18 @@
   \end{matharray}
 
   \begin{rail}
-    'split_format' ((( name * ) + 'and') | ('(' 'complete' ')'))
+    'split_format' '(' 'complete' ')'
     ;
   \end{rail}
 
   \begin{description}
   
-  \item @{attribute (HOL) split_format}~@{text "p\<^sub>1 \<dots> p\<^sub>m \<AND> \<dots>
-  \<AND> q\<^sub>1 \<dots> q\<^sub>n"} puts expressions of low-level tuple types into
-  canonical form as specified by the arguments given; the @{text i}-th
-  collection of arguments refers to occurrences in premise @{text i}
-  of the rule.  The ``@{text "(complete)"}'' option causes \emph{all}
+  \item @{attribute (HOL) split_format}\ @{text "(complete)"} causes
   arguments in function applications to be represented canonically
   according to their tuple type structure.
 
-  Note that these operations tend to invent funny names for new local
-  parameters to be introduced.
+  Note that this operation tends to invent funny names for new local
+  parameters introduced.
 
   \end{description}
 *}
--- a/doc-src/IsarRef/Thy/document/HOL_Specific.tex	Fri Nov 05 15:15:28 2010 -0700
+++ b/doc-src/IsarRef/Thy/document/HOL_Specific.tex	Sat Nov 06 10:01:00 2010 -0700
@@ -93,21 +93,18 @@
   \end{matharray}
 
   \begin{rail}
-    'split_format' ((( name * ) + 'and') | ('(' 'complete' ')'))
+    'split_format' '(' 'complete' ')'
     ;
   \end{rail}
 
   \begin{description}
   
-  \item \hyperlink{attribute.HOL.split-format}{\mbox{\isa{split{\isacharunderscore}format}}}~\isa{{\isachardoublequote}p\isactrlsub {\isadigit{1}}\ {\isasymdots}\ p\isactrlsub m\ {\isasymAND}\ {\isasymdots}\ {\isasymAND}\ q\isactrlsub {\isadigit{1}}\ {\isasymdots}\ q\isactrlsub n{\isachardoublequote}} puts expressions of low-level tuple types into
-  canonical form as specified by the arguments given; the \isa{i}-th
-  collection of arguments refers to occurrences in premise \isa{i}
-  of the rule.  The ``\isa{{\isachardoublequote}{\isacharparenleft}complete{\isacharparenright}{\isachardoublequote}}'' option causes \emph{all}
+  \item \hyperlink{attribute.HOL.split-format}{\mbox{\isa{split{\isacharunderscore}format}}}\ \isa{{\isachardoublequote}{\isacharparenleft}complete{\isacharparenright}{\isachardoublequote}} causes
   arguments in function applications to be represented canonically
   according to their tuple type structure.
 
-  Note that these operations tend to invent funny names for new local
-  parameters to be introduced.
+  Note that this operation tends to invent funny names for new local
+  parameters introduced.
 
   \end{description}%
 \end{isamarkuptext}%
--- a/doc-src/Nitpick/nitpick.tex	Fri Nov 05 15:15:28 2010 -0700
+++ b/doc-src/Nitpick/nitpick.tex	Sat Nov 06 10:01:00 2010 -0700
@@ -261,7 +261,7 @@
 \hbox{}\qquad Free variables: \nopagebreak \\
 \hbox{}\qquad\qquad $P = \{a_2,\, a_3\}$ \\
 \hbox{}\qquad\qquad $x = a_3$ \\[2\smallskipamount]
-Total time: 768 ms.
+Total time: 0.76 s.
 \postw
 
 Nitpick found a counterexample in which $'a$ has cardinality 3. (For
@@ -797,7 +797,7 @@
 Nitpick found a potential counterexample for \textit{card nat}~= 50: \\[2\smallskipamount]
 \hbox{}\qquad Empty assignment \\[2\smallskipamount]
 Nitpick could not find a better counterexample. It checked 0 of 1 scope. \\[2\smallskipamount]
-Total time: 1439 ms.
+Total time: 1.43 s.
 \postw
 
 No genuine counterexample is possible because Nitpick cannot rule out the
@@ -850,7 +850,7 @@
 & 2 := \{0, 2, 4, 6, 8, 1^\Q, 3^\Q, 5^\Q, 7^\Q, 9^\Q\}, \\[-2pt]
 & 1 := \{0, 2, 4, 1^\Q, 3^\Q, 5^\Q, 6^\Q, 7^\Q, 8^\Q, 9^\Q\}, \\[-2pt]
 & 0 := \{0, 2, 1^\Q, 3^\Q, 4^\Q, 5^\Q, 6^\Q, 7^\Q, 8^\Q, 9^\Q\})\end{aligned}$ \\[2\smallskipamount]
-Total time: 2420 ms.
+Total time: 2.42 s.
 \postw
 
 Nitpick's output is very instructive. First, it tells us that the predicate is
@@ -1012,7 +1012,7 @@
 \hbox{}\qquad\qquad $\textit{b} = a_2$ \\
 \hbox{}\qquad\qquad $\textit{xs} = \textsl{THE}~\omega.\; \omega = \textit{LCons}~a_1~\omega$ \\
 \hbox{}\qquad\qquad $\textit{ys} = \textit{LCons}~a_2~(\textsl{THE}~\omega.\; \omega = \textit{LCons}~a_1~\omega)$ \\[2\smallskipamount]
-Total time: 1027 ms.
+Total time: 1.02 s.
 \postw
 
 The lazy list $\textit{xs}$ is simply $[a_1, a_1, a_1, \ldots]$, whereas
@@ -1160,7 +1160,7 @@
   4 := \textit{Var}~0,\>
   5 := \textit{Var}~0)\end{aligned}$ \\
 \hbox{}\qquad\qquad $t = \textit{Lam}~(\textit{Lam}~(\textit{Var}~1))$ \\[2\smallskipamount]
-Total time: $3560$ ms.
+Total time: 3.56 s.
 \postw
 
 Using \textit{eval}, we find out that $\textit{subst}~\sigma~t =
@@ -1255,7 +1255,7 @@
 \hbox{}\qquad Free variables: \nopagebreak \\
 \hbox{}\qquad\qquad $\textit{xs} = [a_1, a_2]$ \\
 \hbox{}\qquad\qquad $\textit{ys} = [b_1, b_1]$ \\[2\smallskipamount]
-Total time: 1636 ms.
+Total time: 1.63 s.
 \postw
 
 In theory, it should be sufficient to test a single scope:
@@ -1849,7 +1849,7 @@
 using \textbf{nitpick\_\allowbreak params}. For example:
 
 \prew
-\textbf{nitpick\_params} [\textit{verbose}, \,\textit{timeout} = 60$\,s$]
+\textbf{nitpick\_params} [\textit{verbose}, \,\textit{timeout} = 60]
 \postw
 
 The options are categorized as follows:\ mode of operation
@@ -1887,10 +1887,10 @@
 \item[$\bullet$] \qtybf{int\_or\_smart\/}: An integer or \textit{smart}.
 \item[$\bullet$] \qtybf{int\_range}: An integer (e.g., 3) or a range
 of nonnegative integers (e.g., $1$--$4$). The range symbol `--' can be entered as \texttt{-} (hyphen) or \texttt{\char`\\\char`\<midarrow\char`\>}.
-
 \item[$\bullet$] \qtybf{int\_seq}: A comma-separated sequence of ranges of integers (e.g.,~1{,}3{,}\allowbreak6--8).
-\item[$\bullet$] \qtybf{time}: An integer followed by $\textit{min}$ (minutes), $s$ (seconds), or \textit{ms}
-(milliseconds), or the keyword \textit{none} ($\infty$ years).
+\item[$\bullet$] \qtybf{float\_or\_none}: An integer (e.g., 60) or floating-point number
+(e.g., 0.5) expressing a number of seconds, or the keyword \textit{none}
+($\infty$ seconds).
 \item[$\bullet$] \qtybf{const\/}: The name of a HOL constant.
 \item[$\bullet$] \qtybf{term}: A HOL term (e.g., ``$f~x$'').
 \item[$\bullet$] \qtybf{term\_list\/}: A space-separated list of HOL terms (e.g.,
@@ -1966,7 +1966,7 @@
 {\small See also \textit{box} (\S\ref{scope-of-search}) and \textit{mono}
 (\S\ref{scope-of-search}).}
 
-\opdefault{card}{int\_seq}{$\mathbf{1}$--$\mathbf{10}$}
+\opdefault{card}{int\_seq}{\upshape 1--10}
 Specifies the default sequence of cardinalities to use. This can be overridden
 on a per-type basis using the \textit{card}~\qty{type} option described above.
 
@@ -2014,7 +2014,7 @@
 {\small See also \textit{bits} (\S\ref{scope-of-search}) and
 \textit{show\_datatypes} (\S\ref{output-format}).}
 
-\opdefault{bits}{int\_seq}{$\mathbf{1},\mathbf{2},\mathbf{3},\mathbf{4},\mathbf{6},\mathbf{8},\mathbf{10},\mathbf{12},\mathbf{14},\mathbf{16}$}
+\opdefault{bits}{int\_seq}{\upshape 1,2,3,4,6,8,10,12,14,16}
 Specifies the number of bits to use to represent natural numbers and integers in
 binary, excluding the sign bit. The minimum is 1 and the maximum is 31.
 
@@ -2064,12 +2064,12 @@
 {\small See also \textit{wf} (\S\ref{scope-of-search}) and
 \textit{star\_linear\_preds} (\S\ref{optimizations}).}
 
-\opdefault{iter}{int\_seq}{$\mathbf{0{,}1{,}2{,}4{,}8{,}12{,}16{,}20{,}24{,}28}$}
+\opdefault{iter}{int\_seq}{\upshape 0{,}1{,}2{,}4{,}8{,}12{,}16{,}20{,}24{,}28}
 Specifies the sequence of iteration counts to use when unrolling (co)in\-duc\-tive
 predicates. This can be overridden on a per-predicate basis using the
 \textit{iter} \qty{const} option above.
 
-\opdefault{bisim\_depth}{int\_seq}{$\mathbf{9}$}
+\opdefault{bisim\_depth}{int\_seq}{\upshape 9}
 Specifies the sequence of iteration counts to use when unrolling the
 bisimilarity predicate generated by Nitpick for coinductive datatypes. A value
 of $-1$ means that no predicate is generated, in which case Nitpick performs an
@@ -2214,7 +2214,7 @@
 \opnodefault{show\_all}{bool}
 Abbreviation for \textit{show\_datatypes} and \textit{show\_consts}.
 
-\opdefault{max\_potential}{int}{$\mathbf{1}$}
+\opdefault{max\_potential}{int}{\upshape 1}
 Specifies the maximum number of potential counterexamples to display. Setting
 this option to 0 speeds up the search for a genuine counterexample. This option
 is implicitly set to 0 for automatic runs. If you set this option to a value
@@ -2226,7 +2226,7 @@
 {\small See also \textit{check\_potential} (\S\ref{authentication}) and
 \textit{sat\_solver} (\S\ref{optimizations}).}
 
-\opdefault{max\_genuine}{int}{$\mathbf{1}$}
+\opdefault{max\_genuine}{int}{\upshape 1}
 Specifies the maximum number of genuine counterexamples to display. If you set
 this option to a value greater than 1, you will need an incremental SAT solver,
 such as \textit{MiniSat\_JNI} (recommended) and \textit{SAT4J}. Be aware that
@@ -2267,7 +2267,7 @@
 arguments that are not accounted for are left alone, as if the specification had
 been $1,\ldots,1,n_1,\ldots,n_k$.
 
-\opdefault{format}{int\_seq}{$\mathbf{1}$}
+\opdefault{format}{int\_seq}{\upshape 1}
 Specifies the default format to use. Irrespective of the default format, the
 extra arguments to a Skolem constant corresponding to the outer bound variables
 are kept separated from the remaining arguments, the \textbf{for} arguments of
@@ -2484,19 +2484,19 @@
 Unless you are tracking down a bug in Nitpick or distrust the peephole
 optimizer, you should leave this option enabled.
 
-\opdefault{datatype\_sym\_break}{int}{5}
+\opdefault{datatype\_sym\_break}{int}{\upshape 5}
 Specifies an upper bound on the number of datatypes for which Nitpick generates
 symmetry breaking predicates. Symmetry breaking can speed up the SAT solver
 considerably, especially for unsatisfiable problems, but too much of it can slow
 it down.
 
-\opdefault{kodkod\_sym\_break}{int}{15}
+\opdefault{kodkod\_sym\_break}{int}{\upshape 15}
 Specifies an upper bound on the number of relations for which Kodkod generates
 symmetry breaking predicates. Symmetry breaking can speed up the SAT solver
 considerably, especially for unsatisfiable problems, but too much of it can slow
 it down.
 
-\opdefault{max\_threads}{int}{0}
+\opdefault{max\_threads}{int}{\upshape 0}
 Specifies the maximum number of threads to use in Kodkod. If this option is set
 to 0, Kodkod will compute an appropriate value based on the number of processor
 cores available. The option is implicitly set to 1 for automatic runs.
@@ -2510,8 +2510,8 @@
 \label{timeouts}
 
 \begin{enum}
-\opdefault{timeout}{time}{$\mathbf{30}$ s}
-Specifies the maximum amount of time that the \textbf{nitpick} command should
+\opdefault{timeout}{float\_or\_none}{\upshape 30}
+Specifies the maximum number of seconds that the \textbf{nitpick} command should
 spend looking for a counterexample. Nitpick tries to honor this constraint as
 well as it can but offers no guarantees. For automatic runs,
 \textit{timeout} is ignored; instead, Auto Quickcheck and Auto Nitpick share
@@ -2521,8 +2521,8 @@
 \nopagebreak
 {\small See also \textit{max\_threads} (\S\ref{optimizations}).}
 
-\opdefault{tac\_timeout}{time}{$\mathbf{500}$\,ms}
-Specifies the maximum amount of time that the \textit{auto} tactic should use
+\opdefault{tac\_timeout}{float\_or\_none}{\upshape 0.5}
+Specifies the maximum number of seconds that the \textit{auto} tactic should use
 when checking a counterexample, and similarly that \textit{lexicographic\_order}
 and \textit{size\_change} should use when checking whether a (co)in\-duc\-tive
 predicate is well-founded. Nitpick tries to honor this constraint as well as it
@@ -2863,7 +2863,7 @@
 which can become invalid if you change the definition of an inductive predicate
 that is registered in the cache. To clear the cache,
 run Nitpick with the \textit{tac\_timeout} option set to a new value (e.g.,
-501$\,\textit{ms}$).
+$0.51$).
 
 \item[$\bullet$] Nitpick produces spurious counterexamples when invoked after a
 \textbf{guess} command in a structured proof.
--- a/doc-src/Sledgehammer/sledgehammer.tex	Fri Nov 05 15:15:28 2010 -0700
+++ b/doc-src/Sledgehammer/sledgehammer.tex	Sat Nov 06 10:01:00 2010 -0700
@@ -377,10 +377,12 @@
 \item[$\bullet$] \qtybf{bool\_or\_smart\/}: \textit{true}, \textit{false}, or
 \textit{smart}.
 \item[$\bullet$] \qtybf{int\/}: An integer.
+\item[$\bullet$] \qtybf{float\_pair\/}: A pair of floating-point numbers
+(e.g., 0.6 0.95).
 \item[$\bullet$] \qtybf{int\_or\_smart\/}: An integer or \textit{smart}.
-\item[$\bullet$] \qtybf{time}: An integer followed by $\textit{min}$ (minutes),
-$s$ (seconds), or \textit{ms}
-(milliseconds), or the keyword \textit{none} ($\infty$ years).
+\item[$\bullet$] \qtybf{float\_or\_none\/}: An integer (e.g., 60) or
+floating-point number (e.g., 0.5) expressing a number of seconds, or the keyword
+\textit{none} ($\infty$ seconds).
 \end{enum}
 
 Default values are indicated in square brackets. Boolean options have a negated
@@ -457,8 +459,8 @@
 \opnodefault{atp}{string}
 Legacy alias for \textit{provers}.
 
-\opdefault{timeout}{time}{$\mathbf{30}$ s}
-Specifies the maximum amount of time that the automatic provers should spend
+\opdefault{timeout}{float\_or\_none}{\upshape 30}
+Specifies the maximum number of seconds that the automatic provers should spend
 searching for a proof. For historical reasons, the default value of this option
 can be overridden using the option ``Sledgehammer: Time Limit'' from the
 ``Isabelle'' menu in Proof General.
@@ -503,15 +505,15 @@
 \label{relevance-filter}
 
 \begin{enum}
-\opdefault{relevance\_thresholds}{int\_pair}{45~85}
+\opdefault{relevance\_thresholds}{float\_pair}{\upshape 0.45~0.85}
 Specifies the thresholds above which facts are considered relevant by the
 relevance filter. The first threshold is used for the first iteration of the
 relevance filter and the second threshold is used for the last iteration (if it
 is reached). The effective threshold is quadratically interpolated for the other
-iterations. Each threshold ranges from 0 to 100, where 0 means that all theorems
-are relevant and 100 only theorems that refer to previously seen constants.
+iterations. Each threshold ranges from 0 to 1, where 0 means that all theorems
+are relevant and 1 only theorems that refer to previously seen constants.
 
-\opdefault{max\_relevant}{int\_or\_smart}{\textit{smart}}
+\opsmart{max\_relevant}{int\_or\_smart}
 Specifies the maximum number of facts that may be returned by the relevance
 filter. If the option is set to \textit{smart}, it is set to a value that was
 empirically found to be appropriate for the prover. A typical value would be
@@ -540,7 +542,7 @@
 fails; however, they are usually faster and sometimes more robust than
 \textit{metis} proofs.
 
-\opdefault{isar\_shrink\_factor}{int}{1}
+\opdefault{isar\_shrink\_factor}{int}{\upshape 1}
 Specifies the granularity of the Isar proof. A value of $n$ indicates that each
 Isar proof step should correspond to a group of up to $n$ consecutive proof
 steps in the ATP proof.
--- a/doc-src/System/Thy/Basics.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/doc-src/System/Thy/Basics.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -95,7 +95,8 @@
   \item The file @{verbatim "$ISABELLE_HOME_USER/etc/settings"} (if it
   exists) is run in the same way as the site default settings. Note
   that the variable @{setting ISABELLE_HOME_USER} has already been set
-  before --- usually to @{verbatim "~/.isabelle"}.
+  before --- usually to something like @{verbatim
+  "$HOME/.isabelle/IsabelleXXXX"}.
   
   Thus individual users may override the site-wide defaults.  See also
   file @{"file" "$ISABELLE_HOME/etc/user-settings.sample"} in the
@@ -156,11 +157,12 @@
   
   \item[@{setting_def ISABELLE_HOME_USER}] is the user-specific
   counterpart of @{setting ISABELLE_HOME}. The default value is
-  @{verbatim "~/.isabelle"}, under rare circumstances this may be
-  changed in the global setting file.  Typically, the @{setting
-  ISABELLE_HOME_USER} directory mimics @{setting ISABELLE_HOME} to
-  some extend. In particular, site-wide defaults may be overridden by
-  a private @{verbatim "$ISABELLE_HOME_USER/etc/settings"}.
+  relative to @{verbatim "$HOME/.isabelle"}, under rare circumstances
+  this may be changed in the global setting file.  Typically, the
+  @{setting ISABELLE_HOME_USER} directory mimics @{setting
+  ISABELLE_HOME} to some extend. In particular, site-wide defaults may
+  be overridden by a private @{verbatim
+  "$ISABELLE_HOME_USER/etc/settings"}.
   
   \item[@{setting_def ISABELLE_PLATFORM}@{text "\<^sup>*"}] is automatically
   set to a symbolic identifier for the underlying hardware and
--- a/doc-src/System/Thy/Presentation.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/doc-src/System/Thy/Presentation.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -88,10 +88,11 @@
 \end{ttbox}
 
   and then change into the @{"file" "~~/src/FOL"} directory and run
-  @{verbatim isabelle} @{tool make}, or even @{verbatim isabelle} @{tool
-  make}~@{verbatim all}.  The presentation output will appear in
-  @{verbatim "ISABELLE_BROWSER_INFO/FOL"}, which usually refers to
-  @{verbatim "~/.isabelle/browser_info/FOL"}.  Note that option
+  @{verbatim isabelle} @{tool make}, or even @{verbatim isabelle}
+  @{tool make}~@{verbatim all}.  The presentation output will appear
+  in @{verbatim "ISABELLE_BROWSER_INFO/FOL"}, which usually refers to
+  something like @{verbatim
+  "~/.isabelle/IsabelleXXXX/browser_info/FOL"}.  Note that option
   @{verbatim "-v true"} will make the internal runs of @{tool usedir}
   more explicit about such details.
 
@@ -768,7 +769,7 @@
   This enables users to inspect {\LaTeX} runs in further detail, e.g.\
   like this:
 \begin{ttbox}
-  cd ~/.isabelle/browser_info/HOL/Test/document
+  cd ~/.isabelle/IsabelleXXXX/browser_info/HOL/Test/document
   isabelle latex -o pdf
 \end{ttbox}
 *}
--- a/doc-src/System/Thy/document/Basics.tex	Fri Nov 05 15:15:28 2010 -0700
+++ b/doc-src/System/Thy/document/Basics.tex	Sat Nov 06 10:01:00 2010 -0700
@@ -114,7 +114,7 @@
   \item The file \verb|$ISABELLE_HOME_USER/etc/settings| (if it
   exists) is run in the same way as the site default settings. Note
   that the variable \hyperlink{setting.ISABELLE-HOME-USER}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}HOME{\isacharunderscore}USER}}}} has already been set
-  before --- usually to \verb|~/.isabelle|.
+  before --- usually to something like \verb|$HOME/.isabelle/IsabelleXXXX|.
   
   Thus individual users may override the site-wide defaults.  See also
   file \hyperlink{file.$ISABELLE-HOME/etc/user-settings.sample}{\mbox{\isa{\isatt{{\isachardollar}ISABELLE{\isacharunderscore}HOME{\isacharslash}etc{\isacharslash}user{\isacharminus}settings{\isachardot}sample}}}} in the
@@ -175,10 +175,10 @@
   
   \item[\indexdef{}{setting}{ISABELLE\_HOME\_USER}\hypertarget{setting.ISABELLE-HOME-USER}{\hyperlink{setting.ISABELLE-HOME-USER}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}HOME{\isacharunderscore}USER}}}}}] is the user-specific
   counterpart of \hyperlink{setting.ISABELLE-HOME}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}HOME}}}}. The default value is
-  \verb|~/.isabelle|, under rare circumstances this may be
-  changed in the global setting file.  Typically, the \hyperlink{setting.ISABELLE-HOME-USER}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}HOME{\isacharunderscore}USER}}}} directory mimics \hyperlink{setting.ISABELLE-HOME}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}HOME}}}} to
-  some extend. In particular, site-wide defaults may be overridden by
-  a private \verb|$ISABELLE_HOME_USER/etc/settings|.
+  relative to \verb|$HOME/.isabelle|, under rare circumstances
+  this may be changed in the global setting file.  Typically, the
+  \hyperlink{setting.ISABELLE-HOME-USER}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}HOME{\isacharunderscore}USER}}}} directory mimics \hyperlink{setting.ISABELLE-HOME}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}HOME}}}} to some extend. In particular, site-wide defaults may
+  be overridden by a private \verb|$ISABELLE_HOME_USER/etc/settings|.
   
   \item[\indexdef{}{setting}{ISABELLE\_PLATFORM}\hypertarget{setting.ISABELLE-PLATFORM}{\hyperlink{setting.ISABELLE-PLATFORM}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}PLATFORM}}}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}}] is automatically
   set to a symbolic identifier for the underlying hardware and
--- a/doc-src/System/Thy/document/Presentation.tex	Fri Nov 05 15:15:28 2010 -0700
+++ b/doc-src/System/Thy/document/Presentation.tex	Sat Nov 06 10:01:00 2010 -0700
@@ -104,9 +104,10 @@
 \end{ttbox}
 
   and then change into the \hyperlink{file.~~/src/FOL}{\mbox{\isa{\isatt{{\isachartilde}{\isachartilde}{\isacharslash}src{\isacharslash}FOL}}}} directory and run
-  \verb|isabelle| \hyperlink{tool.make}{\mbox{\isa{\isatt{make}}}}, or even \verb|isabelle| \hyperlink{tool.make}{\mbox{\isa{\isatt{make}}}}~\verb|all|.  The presentation output will appear in
-  \verb|ISABELLE_BROWSER_INFO/FOL|, which usually refers to
-  \verb|~/.isabelle/browser_info/FOL|.  Note that option
+  \verb|isabelle| \hyperlink{tool.make}{\mbox{\isa{\isatt{make}}}}, or even \verb|isabelle|
+  \hyperlink{tool.make}{\mbox{\isa{\isatt{make}}}}~\verb|all|.  The presentation output will appear
+  in \verb|ISABELLE_BROWSER_INFO/FOL|, which usually refers to
+  something like \verb|~/.isabelle/IsabelleXXXX/browser_info/FOL|.  Note that option
   \verb|-v true| will make the internal runs of \hyperlink{tool.usedir}{\mbox{\isa{\isatt{usedir}}}}
   more explicit about such details.
 
@@ -776,7 +777,7 @@
   This enables users to inspect {\LaTeX} runs in further detail, e.g.\
   like this:
 \begin{ttbox}
-  cd ~/.isabelle/browser_info/HOL/Test/document
+  cd ~/.isabelle/IsabelleXXXX/browser_info/HOL/Test/document
   isabelle latex -o pdf
 \end{ttbox}%
 \end{isamarkuptext}%
--- a/etc/isar-keywords.el	Fri Nov 05 15:15:28 2010 -0700
+++ b/etc/isar-keywords.el	Sat Nov 06 10:01:00 2010 -0700
@@ -129,7 +129,6 @@
     "locale"
     "method_setup"
     "moreover"
-    "new_domain"
     "next"
     "nitpick"
     "nitpick_params"
@@ -311,6 +310,7 @@
     "shows"
     "structure"
     "unchecked"
+    "unsafe"
     "uses"
     "where"))
 
@@ -478,7 +478,6 @@
     "local_setup"
     "locale"
     "method_setup"
-    "new_domain"
     "nitpick_params"
     "no_notation"
     "no_syntax"
--- a/etc/settings	Fri Nov 05 15:15:28 2010 -0700
+++ b/etc/settings	Sat Nov 06 10:01:00 2010 -0700
@@ -103,7 +103,7 @@
 ###
 
 # The place for user configuration, heap files, etc.
-ISABELLE_HOME_USER=~/.isabelle
+ISABELLE_HOME_USER="$HOME/.isabelle/$ISABELLE_IDENTIFIER"
 
 # Where to look for isabelle tools (multiple dirs separated by ':').
 ISABELLE_TOOLS="$ISABELLE_HOME/lib/Tools"
@@ -112,10 +112,10 @@
 ISABELLE_TMP_PREFIX="/tmp/isabelle-$USER"
 
 # Heap input locations. ML system identifier is included in lookup.
-ISABELLE_PATH="$ISABELLE_HOME_USER/heaps/$ISABELLE_IDENTIFIER:$ISABELLE_HOME/heaps"
+ISABELLE_PATH="$ISABELLE_HOME_USER/heaps:$ISABELLE_HOME/heaps"
 
 # Heap output location. ML system identifier is appended automatically later on.
-ISABELLE_OUTPUT="$ISABELLE_HOME_USER/heaps/$ISABELLE_IDENTIFIER"
+ISABELLE_OUTPUT="$ISABELLE_HOME_USER/heaps"
 ISABELLE_BROWSER_INFO="$ISABELLE_HOME_USER/browser_info"
 
 # Site settings check -- just to make it a little bit harder to copy this file verbatim!
--- a/lib/scripts/feeder	Fri Nov 05 15:15:28 2010 -0700
+++ b/lib/scripts/feeder	Sat Nov 06 10:01:00 2010 -0700
@@ -16,7 +16,7 @@
   echo "Usage: $PRG [OPTIONS]"
   echo
   echo "  Options are:"
-  echo "    -h TEXT      head text"
+  echo "    -h TEXT      head text (encoded as utf8)"
   echo "    -p           emit my pid"
   echo "    -q           do not pipe stdin"
   echo "    -t TEXT      tail text"
--- a/lib/scripts/feeder.pl	Fri Nov 05 15:15:28 2010 -0700
+++ b/lib/scripts/feeder.pl	Sat Nov 06 10:01:00 2010 -0700
@@ -24,7 +24,11 @@
 
 $emitpid && (print $$, "\n");
 
-$head && (print "$head", "\n");
+if ($head) {
+  utf8::encode($head);
+  $head =~ s/([\x80-\xff])/\\${\(ord($1))}/g;
+  print $head, "\n";
+}
 
 if (!$quit) {
   while (<STDIN>) {
--- a/src/HOL/Bali/Eval.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Bali/Eval.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -745,7 +745,7 @@
 *)
 
 ML {*
-bind_thm ("eval_induct_", rearrange_prems 
+bind_thm ("eval_induct", rearrange_prems 
 [0,1,2,8,4,30,31,27,15,16,
  17,18,19,20,21,3,5,25,26,23,6,
  7,11,9,13,14,12,22,10,28,
@@ -753,11 +753,6 @@
 *}
 
 
-lemmas eval_induct = eval_induct_ [split_format and and and and and and and and
-   and and and and and and s1 (* Acc *) and and s2 (* Comp *) and and and and 
-   and and 
-   s2 (* Fin *) and and s2 (* NewC *)] 
-
 declare split_if     [split del] split_if_asm     [split del] 
         option.split [split del] option.split_asm [split del]
 inductive_cases halloc_elim_cases: 
--- a/src/HOL/Boogie/Examples/Boogie_Dijkstra.certs	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Boogie/Examples/Boogie_Dijkstra.certs	Sat Nov 06 10:01:00 2010 -0700
@@ -1,4 +1,4 @@
-a959f1dced399224414912ad7379705a61749faa 6889 0
+6752602a8162146a4b4b0b817f42d730f1852d5d 6889 0
 #2 := false
 decl f11 :: (-> S5 S2 S1)
 decl ?v1!7 :: (-> S2 S2)
--- a/src/HOL/Boogie/Examples/Boogie_Max.certs	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Boogie/Examples/Boogie_Max.certs	Sat Nov 06 10:01:00 2010 -0700
@@ -1,4 +1,4 @@
-16ee32e23503be38842c16c90807e66120a960ee 2224 0
+dea36391893064c022de7bc923e15ef446cb4303 2224 0
 #2 := false
 #8 := 0::int
 decl f5 :: (-> int int)
--- a/src/HOL/Boogie/Examples/VCC_Max.certs	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Boogie/Examples/VCC_Max.certs	Sat Nov 06 10:01:00 2010 -0700
@@ -1,4 +1,4 @@
-5815fb85125ba62bb3b4a150604c8978e5a08a22 7862 0
+9e8f6c5e5fd53eee967069dced75f48858a605e7 7862 0
 #2 := false
 decl f111 :: (-> S4 S5 int)
 decl f67 :: (-> S5 int S3 S5)
--- a/src/HOL/Decision_Procs/ferrante_rackoff.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Decision_Procs/ferrante_rackoff.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -138,7 +138,7 @@
                       else if member (op =) [Lt, Le, Eq] c then Thm.dest_arg
                       else if member (op =) [Gt, Ge] c then Thm.dest_arg1
                       else if c = NEq then (Thm.dest_arg o Thm.dest_arg)
-                      else sys_error "decomp_mpinf: Impossible case!!") fm
+                      else raise Fail "decomp_mpinf: Impossible case!!") fm
              val [mi_th, pi_th, nmi_th, npi_th, ld_th] =
                if c = Nox then map (instantiate' [] [SOME fm])
                                     [minf_P, pinf_P, nmi_P, npi_P, ld_P]
--- a/src/HOL/Groups.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Groups.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -284,6 +284,7 @@
   finally show ?thesis .
 qed
 
+
 lemmas equals_zero_I = minus_unique (* legacy name *)
 
 lemma minus_zero [simp]: "- 0 = 0"
@@ -305,6 +306,20 @@
   finally show ?thesis .
 qed
 
+subclass cancel_semigroup_add
+proof
+  fix a b c :: 'a
+  assume "a + b = a + c"
+  then have "- a + a + b = - a + a + c"
+    unfolding add_assoc by simp
+  then show "b = c" by simp
+next
+  fix a b c :: 'a
+  assume "b + a = c + a"
+  then have "b + a + - a = c + a  + - a" by simp
+  then show "b = c" unfolding add_assoc by simp
+qed
+
 lemma minus_add_cancel: "- a + (a + b) = b"
 by (simp add: add_assoc [symmetric])
 
--- a/src/HOL/Imperative_HOL/Array.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Imperative_HOL/Array.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -134,9 +134,13 @@
   by (auto simp add: update_def set_set_swap list_update_swap)
 
 lemma get_alloc:
-  "get (snd (alloc ls' h)) (fst (alloc ls h)) = ls'"
+  "get (snd (alloc xs h)) (fst (alloc ys h)) = xs"
   by (simp add: Let_def split_def alloc_def)
 
+lemma length_alloc:
+  "length (snd (alloc (xs :: 'a::heap list) h)) (fst (alloc (ys :: 'a list) h)) = List.length xs"
+  by (simp add: Array.length_def get_alloc)
+
 lemma set:
   "set (fst (alloc ls h))
      new_ls (snd (alloc ls h))
--- a/src/HOL/Imperative_HOL/Overview.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Imperative_HOL/Overview.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -31,7 +31,7 @@
   realisation has changed since, due to both extensions and
   refinements.  Therefore this overview wants to present the framework
   \qt{as it is} by now.  It focusses on the user-view, less on matters
-  of constructions.  For details study of the theory sources is
+  of construction.  For details study of the theory sources is
   encouraged.
 *}
 
@@ -41,7 +41,8 @@
 text {*
   Heaps (@{type heap}) can be populated by values of class @{class
   heap}; HOL's default types are already instantiated to class @{class
-  heap}.
+  heap}.  Class @{class heap} is a subclass of @{class countable};  see
+  theory @{text Countable} for ways to instantiate types as @{class countable}.
 
   The heap is wrapped up in a monad @{typ "'a Heap"} by means of the
   following specification:
@@ -100,7 +101,7 @@
 
   provides a simple relational calculus.  Primitive rules are @{text
   crelI} and @{text crelE}, rules appropriate for reasoning about
-  imperative operation are available in the @{text crel_intros} and
+  imperative operations are available in the @{text crel_intros} and
   @{text crel_elims} fact collections.
 
   Often non-failure of imperative computations does not depend
--- a/src/HOL/IsaMakefile	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/IsaMakefile	Sat Nov 06 10:01:00 2010 -0700
@@ -172,6 +172,7 @@
   Sum_Type.thy \
   Tools/abel_cancel.ML \
   Tools/arith_data.ML \
+  Tools/async_manager.ML \
   Tools/cnf_funcs.ML \
   Tools/Datatype/datatype_abs_proofs.ML \
   Tools/Datatype/datatype_aux.ML \
@@ -277,7 +278,6 @@
   $(SRC)/Provers/Arith/cancel_numerals.ML \
   $(SRC)/Provers/Arith/combine_numerals.ML \
   $(SRC)/Provers/Arith/extract_common_term.ML \
-  Tools/async_manager.ML \
   Tools/ATP/atp_problem.ML \
   Tools/ATP/atp_proof.ML \
   Tools/ATP/atp_systems.ML \
@@ -431,7 +431,7 @@
   Library/Polynomial.thy Library/Predicate_Compile_Quickcheck.thy	\
   Library/Preorder.thy Library/Product_Vector.thy			\
   Library/Product_ord.thy Library/Product_plus.thy			\
-  Library/Quickcheck_Types.thy Library/Quicksort.thy			\
+  Library/Quickcheck_Types.thy						\
   Library/Quotient_List.thy Library/Quotient_Option.thy			\
   Library/Quotient_Product.thy Library/Quotient_Sum.thy			\
   Library/Quotient_Syntax.thy Library/Quotient_Type.thy			\
@@ -1023,13 +1023,14 @@
   ex/Meson_Test.thy ex/MonoidGroup.thy ex/Multiquote.thy ex/NatSum.thy	\
   ex/Normalization_by_Evaluation.thy ex/Numeral.thy ex/PER.thy		\
   ex/PresburgerEx.thy ex/Primrec.thy ex/Quickcheck_Examples.thy		\
-  ex/Quickcheck_Lattice_Examples.thy ex/ROOT.ML ex/Recdefs.thy		\
-  ex/Records.thy ex/ReflectionEx.thy ex/Refute_Examples.thy		\
-  ex/SAT_Examples.thy ex/SVC_Oracle.thy ex/Serbian.thy ex/Sqrt.thy	\
-  ex/Sqrt_Script.thy ex/Sudoku.thy ex/Tarski.thy ex/Termination.thy	\
-  ex/Transfer_Ex.thy ex/Tree23.thy ex/Unification.thy			\
-  ex/While_Combinator_Example.thy ex/document/root.bib			\
-  ex/document/root.tex ex/set.thy ex/svc_funcs.ML ex/svc_test.thy
+  ex/Quickcheck_Lattice_Examples.thy ex/Quicksort.thy ex/ROOT.ML	\
+  ex/Recdefs.thy ex/Records.thy ex/ReflectionEx.thy			\
+  ex/Refute_Examples.thy ex/SAT_Examples.thy ex/SVC_Oracle.thy		\
+  ex/Serbian.thy ex/Sqrt.thy ex/Sqrt_Script.thy ex/Sudoku.thy		\
+  ex/Tarski.thy ex/Termination.thy ex/Transfer_Ex.thy ex/Tree23.thy	\
+  ex/Unification.thy ex/While_Combinator_Example.thy			\
+  ex/document/root.bib ex/document/root.tex ex/set.thy ex/svc_funcs.ML	\
+  ex/svc_test.thy
 	@$(ISABELLE_TOOL) usedir $(OUT)/HOL ex
 
 
--- a/src/HOL/Library/Eval_Witness.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Library/Eval_Witness.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -63,7 +63,7 @@
   fun dest_exs  0 t = t
     | dest_exs n (Const (@{const_name Ex}, _) $ Abs (v,T,b)) = 
       Abs (v, check_type T, dest_exs (n - 1) b)
-    | dest_exs _ _ = sys_error "dest_exs";
+    | dest_exs _ _ = raise Fail "dest_exs";
   val t = dest_exs (length ws) (HOLogic.dest_Trueprop goal);
 in
   if Code_Runtime.dynamic_value_strict (Eval_Method.get, Eval_Method.put, "Eval_Method.put") thy NONE (K I) t ws
--- a/src/HOL/Library/Library.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Library/Library.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -45,7 +45,6 @@
   Polynomial
   Preorder
   Product_Vector
-  Quicksort
   Quotient_List
   Quotient_Option
   Quotient_Product
--- a/src/HOL/Library/Multiset.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Library/Multiset.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -901,30 +901,27 @@
 next
   fix l
   assume "l \<in> set ?rhs"
-  have *: "\<And>x P. P (f x) \<and> f l = f x \<longleftrightarrow> P (f l) \<and> f l = f x" by auto
-  have **: "\<And>x. f l = f x \<longleftrightarrow> f x = f l" by auto
+  let ?pivot = "f (xs ! (length xs div 2))"
+  have *: "\<And>x. f l = f x \<longleftrightarrow> f x = f l" by auto
   have "[x \<leftarrow> sort_key f xs . f x = f l] = [x \<leftarrow> xs. f x = f l]"
     unfolding filter_sort by (rule properties_for_sort_key) (auto intro: sorted_map_same)
-  with ** have [simp]: "[x \<leftarrow> sort_key f xs . f l = f x] = [x \<leftarrow> xs. f l = f x]" by simp
-  let ?pivot = "f (xs ! (length xs div 2))"
+  with * have **: "[x \<leftarrow> sort_key f xs . f l = f x] = [x \<leftarrow> xs. f l = f x]" by simp
+  have "\<And>x P. P (f x) ?pivot \<and> f l = f x \<longleftrightarrow> P (f l) ?pivot \<and> f l = f x" by auto
+  then have "\<And>P. [x \<leftarrow> sort_key f xs . P (f x) ?pivot \<and> f l = f x] =
+    [x \<leftarrow> sort_key f xs. P (f l) ?pivot \<and> f l = f x]" by simp
+  note *** = this [of "op <"] this [of "op >"] this [of "op ="]
   show "[x \<leftarrow> ?rhs. f l = f x] = [x \<leftarrow> ?lhs. f l = f x]"
   proof (cases "f l" ?pivot rule: linorder_cases)
     case less then moreover have "f l \<noteq> ?pivot" and "\<not> f l > ?pivot" by auto
     ultimately show ?thesis
-      apply (auto simp add: filter_sort [symmetric])
-      apply (subst *) apply simp
-      apply (subst *) apply simp
-      done
+      by (simp add: filter_sort [symmetric] ** ***)
   next
     case equal then show ?thesis
-      by (auto simp add: ** less_le)
+      by (simp add: * less_le)
   next
     case greater then moreover have "f l \<noteq> ?pivot" and "\<not> f l < ?pivot" by auto
     ultimately show ?thesis
-      apply (auto simp add: filter_sort [symmetric])
-      apply (subst *) apply simp
-      apply (subst *) apply simp
-      done
+      by (simp add: filter_sort [symmetric] ** ***)
   qed
 qed
 
@@ -934,8 +931,48 @@
     @ sort [x\<leftarrow>xs. x > xs ! (length xs div 2)]" (is "sort ?lhs = ?rhs")
   using sort_key_by_quicksort [of "\<lambda>x. x", symmetric] by simp
 
+text {* A stable parametrized quicksort *}
+
+definition part :: "('b \<Rightarrow> 'a) \<Rightarrow> 'a \<Rightarrow> 'b list \<Rightarrow> 'b list \<times> 'b list \<times> 'b list" where
+  "part f pivot xs = ([x \<leftarrow> xs. f x < pivot], [x \<leftarrow> xs. f x = pivot], [x \<leftarrow> xs. pivot < f x])"
+
+lemma part_code [code]:
+  "part f pivot [] = ([], [], [])"
+  "part f pivot (x # xs) = (let (lts, eqs, gts) = part f pivot xs; x' = f x in
+     if x' < pivot then (x # lts, eqs, gts)
+     else if x' > pivot then (lts, eqs, x # gts)
+     else (lts, x # eqs, gts))"
+  by (auto simp add: part_def Let_def split_def)
+
+lemma sort_key_by_quicksort_code [code]:
+  "sort_key f xs = (case xs of [] \<Rightarrow> []
+    | [x] \<Rightarrow> xs
+    | [x, y] \<Rightarrow> (if f x \<le> f y then xs else [y, x])
+    | _ \<Rightarrow> (let (lts, eqs, gts) = part f (f (xs ! (length xs div 2))) xs
+       in sort_key f lts @ eqs @ sort_key f gts))"
+proof (cases xs)
+  case Nil then show ?thesis by simp
+next
+  case (Cons _ ys) note hyps = Cons show ?thesis proof (cases ys)
+    case Nil with hyps show ?thesis by simp
+  next
+    case (Cons _ zs) note hyps = hyps Cons show ?thesis proof (cases zs)
+      case Nil with hyps show ?thesis by auto
+    next
+      case Cons 
+      from sort_key_by_quicksort [of f xs]
+      have "sort_key f xs = (let (lts, eqs, gts) = part f (f (xs ! (length xs div 2))) xs
+        in sort_key f lts @ eqs @ sort_key f gts)"
+      by (simp only: split_def Let_def part_def fst_conv snd_conv)
+      with hyps Cons show ?thesis by (simp only: list.cases)
+    qed
+  qed
+qed
+
 end
 
+hide_const (open) part
+
 lemma multiset_of_remdups_le: "multiset_of (remdups xs) \<le> multiset_of xs"
   by (induct xs) (auto intro: order_trans)
 
--- a/src/HOL/Library/Quicksort.thy	Fri Nov 05 15:15:28 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-(*  Author:     Tobias Nipkow
-    Copyright   1994 TU Muenchen
-*)
-
-header {* Quicksort *}
-
-theory Quicksort
-imports Main Multiset
-begin
-
-context linorder
-begin
-
-fun quicksort :: "'a list \<Rightarrow> 'a list" where
-  "quicksort []     = []"
-| "quicksort (x#xs) = quicksort [y\<leftarrow>xs. \<not> x\<le>y] @ [x] @ quicksort [y\<leftarrow>xs. x\<le>y]"
-
-lemma [code]:
-  "quicksort []     = []"
-  "quicksort (x#xs) = quicksort [y\<leftarrow>xs. y<x] @ [x] @ quicksort [y\<leftarrow>xs. x\<le>y]"
-  by (simp_all add: not_le)
-
-lemma quicksort_permutes [simp]:
-  "multiset_of (quicksort xs) = multiset_of xs"
-  by (induct xs rule: quicksort.induct) (simp_all add: ac_simps)
-
-lemma set_quicksort [simp]: "set (quicksort xs) = set xs"
-  by (simp add: set_count_greater_0)
-
-lemma sorted_quicksort: "sorted (quicksort xs)"
-  by (induct xs rule: quicksort.induct) (auto simp add: sorted_Cons sorted_append not_le less_imp_le)
-
-theorem quicksort_sort [code_unfold]:
-  "sort = quicksort"
-  by (rule ext, rule properties_for_sort) (fact quicksort_permutes sorted_quicksort)+
-
-end
-
-end
--- a/src/HOL/Library/State_Monad.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Library/State_Monad.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -2,7 +2,7 @@
     Author:     Florian Haftmann, TU Muenchen
 *)
 
-header {* Combinator syntax for generic, open state monads (single threaded monads) *}
+header {* Combinator syntax for generic, open state monads (single-threaded monads) *}
 
 theory State_Monad
 imports Main Monad_Syntax
@@ -11,19 +11,18 @@
 subsection {* Motivation *}
 
 text {*
-  The logic HOL has no notion of constructor classes, so
-  it is not possible to model monads the Haskell way
-  in full genericity in Isabelle/HOL.
+  The logic HOL has no notion of constructor classes, so it is not
+  possible to model monads the Haskell way in full genericity in
+  Isabelle/HOL.
   
-  However, this theory provides substantial support for
-  a very common class of monads: \emph{state monads}
-  (or \emph{single-threaded monads}, since a state
-  is transformed single-threaded).
+  However, this theory provides substantial support for a very common
+  class of monads: \emph{state monads} (or \emph{single-threaded
+  monads}, since a state is transformed single-threadedly).
 
   To enter from the Haskell world,
-  \url{http://www.engr.mun.ca/~theo/Misc/haskell_and_monads.htm}
-  makes a good motivating start.  Here we just sketch briefly
-  how those monads enter the game of Isabelle/HOL.
+  \url{http://www.engr.mun.ca/~theo/Misc/haskell_and_monads.htm} makes
+  a good motivating start.  Here we just sketch briefly how those
+  monads enter the game of Isabelle/HOL.
 *}
 
 subsection {* State transformations and combinators *}
@@ -32,64 +31,66 @@
   We classify functions operating on states into two categories:
 
   \begin{description}
-    \item[transformations]
-      with type signature @{text "\<sigma> \<Rightarrow> \<sigma>'"},
+
+    \item[transformations] with type signature @{text "\<sigma> \<Rightarrow> \<sigma>'"},
       transforming a state.
-    \item[``yielding'' transformations]
-      with type signature @{text "\<sigma> \<Rightarrow> \<alpha> \<times> \<sigma>'"},
-      ``yielding'' a side result while transforming a state.
-    \item[queries]
-      with type signature @{text "\<sigma> \<Rightarrow> \<alpha>"},
-      computing a result dependent on a state.
+
+    \item[``yielding'' transformations] with type signature @{text "\<sigma>
+      \<Rightarrow> \<alpha> \<times> \<sigma>'"}, ``yielding'' a side result while transforming a
+      state.
+
+    \item[queries] with type signature @{text "\<sigma> \<Rightarrow> \<alpha>"}, computing a
+      result dependent on a state.
+
   \end{description}
 
-  By convention we write @{text "\<sigma>"} for types representing states
-  and @{text "\<alpha>"}, @{text "\<beta>"}, @{text "\<gamma>"}, @{text "\<dots>"}
-  for types representing side results.  Type changes due
-  to transformations are not excluded in our scenario.
+  By convention we write @{text "\<sigma>"} for types representing states and
+  @{text "\<alpha>"}, @{text "\<beta>"}, @{text "\<gamma>"}, @{text "\<dots>"} for types
+  representing side results.  Type changes due to transformations are
+  not excluded in our scenario.
 
-  We aim to assert that values of any state type @{text "\<sigma>"}
-  are used in a single-threaded way: after application
-  of a transformation on a value of type @{text "\<sigma>"}, the
-  former value should not be used again.  To achieve this,
-  we use a set of monad combinators:
+  We aim to assert that values of any state type @{text "\<sigma>"} are used
+  in a single-threaded way: after application of a transformation on a
+  value of type @{text "\<sigma>"}, the former value should not be used
+  again.  To achieve this, we use a set of monad combinators:
 *}
 
 notation fcomp (infixl "\<circ>>" 60)
 notation scomp (infixl "\<circ>\<rightarrow>" 60)
 
-abbreviation (input)
-  "return \<equiv> Pair"
-
 text {*
-  Given two transformations @{term f} and @{term g}, they
-  may be directly composed using the @{term "op \<circ>>"} combinator,
-  forming a forward composition: @{prop "(f \<circ>> g) s = f (g s)"}.
+  Given two transformations @{term f} and @{term g}, they may be
+  directly composed using the @{term "op \<circ>>"} combinator, forming a
+  forward composition: @{prop "(f \<circ>> g) s = f (g s)"}.
 
   After any yielding transformation, we bind the side result
-  immediately using a lambda abstraction.  This 
-  is the purpose of the @{term "op \<circ>\<rightarrow>"} combinator:
-  @{prop "(f \<circ>\<rightarrow> (\<lambda>x. g)) s = (let (x, s') = f s in g s')"}.
+  immediately using a lambda abstraction.  This is the purpose of the
+  @{term "op \<circ>\<rightarrow>"} combinator: @{prop "(f \<circ>\<rightarrow> (\<lambda>x. g)) s = (let (x, s')
+  = f s in g s')"}.
 
   For queries, the existing @{term "Let"} is appropriate.
 
-  Naturally, a computation may yield a side result by pairing
-  it to the state from the left;  we introduce the
-  suggestive abbreviation @{term return} for this purpose.
+  Naturally, a computation may yield a side result by pairing it to
+  the state from the left; we introduce the suggestive abbreviation
+  @{term return} for this purpose.
 
-  The most crucial distinction to Haskell is that we do
-  not need to introduce distinguished type constructors
-  for different kinds of state.  This has two consequences:
+  The most crucial distinction to Haskell is that we do not need to
+  introduce distinguished type constructors for different kinds of
+  state.  This has two consequences:
+
   \begin{itemize}
-    \item The monad model does not state anything about
-       the kind of state; the model for the state is
-       completely orthogonal and may be
-       specified completely independently.
-    \item There is no distinguished type constructor
-       encapsulating away the state transformation, i.e.~transformations
-       may be applied directly without using any lifting
-       or providing and dropping units (``open monad'').
+
+    \item The monad model does not state anything about the kind of
+       state; the model for the state is completely orthogonal and may
+       be specified completely independently.
+
+    \item There is no distinguished type constructor encapsulating
+       away the state transformation, i.e.~transformations may be
+       applied directly without using any lifting or providing and
+       dropping units (``open monad'').
+
     \item The type of states may change due to a transformation.
+
   \end{itemize}
 *}
 
@@ -97,8 +98,8 @@
 subsection {* Monad laws *}
 
 text {*
-  The common monadic laws hold and may also be used
-  as normalization rules for monadic expressions:
+  The common monadic laws hold and may also be used as normalization
+  rules for monadic expressions:
 *}
 
 lemmas monad_simp = Pair_scomp scomp_Pair id_fcomp fcomp_id
@@ -145,7 +146,7 @@
   "_sdo_block (_sdo_final e)" => "e"
 
 text {*
-  For an example, see HOL/Extraction/Higman.thy.
+  For an example, see @{text "HOL/Proofs/Extraction/Higman.thy"}.
 *}
 
 end
--- a/src/HOL/List.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/List.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -1298,6 +1298,15 @@
 lemma rev_concat: "rev (concat xs) = concat (map rev (rev xs))"
 by (induct xs) auto
 
+lemma concat_eq_concat_iff: "\<forall>(x, y) \<in> set (zip xs ys). length x = length y ==> length xs = length ys ==> (concat xs = concat ys) = (xs = ys)"
+proof (induct xs arbitrary: ys)
+  case (Cons x xs ys)
+  thus ?case by (cases ys) auto
+qed (auto)
+
+lemma concat_injective: "concat xs = concat ys ==> length xs = length ys ==> \<forall>(x, y) \<in> set (zip xs ys). length x = length y ==> xs = ys"
+by (simp add: concat_eq_concat_iff)
+
 
 subsubsection {* @{text nth} *}
 
--- a/src/HOL/Matrix/Compute_Oracle/compute.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Matrix/Compute_Oracle/compute.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -115,7 +115,7 @@
     fun type_of (Free (_, ty)) = ty
       | type_of (Const (_, ty)) = ty
       | type_of (Var (_, ty)) = ty
-      | type_of _ = sys_error "infer_types: type_of error"
+      | type_of _ = raise Fail "infer_types: type_of error"
 in
 fun infer_types naming encoding =
     let
@@ -132,7 +132,7 @@
                 val (adom, arange) =
                     case aty of
                         Type ("fun", [dom, range]) => (dom, range)
-                      | _ => sys_error "infer_types: function type expected"
+                      | _ => raise Fail "infer_types: function type expected"
                 val (b, bty) = infer_types level bounds (SOME adom) b
             in
                 (a $ b, arange)
@@ -143,7 +143,8 @@
             in
                 (Abs (naming level, dom, m), ty)
             end
-          | infer_types _ _ NONE (AbstractMachine.Abs m) = sys_error "infer_types: cannot infer type of abstraction"
+          | infer_types _ _ NONE (AbstractMachine.Abs m) =
+              raise Fail "infer_types: cannot infer type of abstraction"
 
         fun infer ty term =
             let
--- a/src/HOL/Mirabelle/Tools/mirabelle_sledgehammer.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Mirabelle/Tools/mirabelle_sledgehammer.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -349,17 +349,17 @@
                  #> Config.put Sledgehammer.measure_run_time true)
     val params as {full_types, relevance_thresholds, max_relevant, ...} =
       Sledgehammer_Isar.default_params ctxt
-          [("timeout", Int.toString timeout ^ " s")]
+          [("timeout", Int.toString timeout)]
     val default_max_relevant =
       Sledgehammer.default_max_relevant_for_prover thy prover_name
-    val irrelevant_consts =
-      Sledgehammer.irrelevant_consts_for_prover prover_name
+    val is_built_in_const =
+      Sledgehammer.is_built_in_const_for_prover ctxt prover_name
     val relevance_fudge = Sledgehammer.relevance_fudge_for_prover prover_name
     val relevance_override = {add = [], del = [], only = false}
     val (_, hyp_ts, concl_t) = Sledgehammer_Util.strip_subgoal goal i
     val facts =
       Sledgehammer_Filter.relevant_facts ctxt full_types relevance_thresholds
-          (the_default default_max_relevant max_relevant) irrelevant_consts
+          (the_default default_max_relevant max_relevant) is_built_in_const
           relevance_fudge relevance_override chained_ths hyp_ts concl_t
     val problem =
       {state = st', goal = goal, subgoal = i,
@@ -369,10 +369,11 @@
       (case hard_timeout of
         NONE => I
       | SOME secs => TimeLimit.timeLimit (Time.fromSeconds secs))
-    val ({outcome, message, used_facts, run_time_in_msecs = SOME time_prover, ...}
+    val ({outcome, message, used_facts, run_time_in_msecs, ...}
          : Sledgehammer.prover_result,
         time_isa) = time_limit (Mirabelle.cpu_time
                       (prover params (K ""))) problem
+    val time_prover = run_time_in_msecs |> the_default ~1
   in
     case outcome of
       NONE => (message, SH_OK (time_isa, time_prover, used_facts))
@@ -446,7 +447,7 @@
       |> Option.map (fst o read_int o explode)
       |> the_default 5
     val params = Sledgehammer_Isar.default_params ctxt
-      [("provers", prover_name), ("timeout", Int.toString timeout ^ " s")]
+      [("provers", prover_name), ("timeout", Int.toString timeout)]
     val minimize =
       Sledgehammer_Minimize.minimize_facts params 1
                                            (Sledgehammer_Util.subgoal_count st)
--- a/src/HOL/Mirabelle/Tools/mirabelle_sledgehammer_filter.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Mirabelle/Tools/mirabelle_sledgehammer_filter.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -111,8 +111,8 @@
                       |> the_default default_prover
          val default_max_relevant =
            Sledgehammer.default_max_relevant_for_prover thy prover
-         val irrelevant_consts =
-           Sledgehammer.irrelevant_consts_for_prover prover
+        val is_built_in_const =
+          Sledgehammer.is_built_in_const_for_prover ctxt default_prover
          val relevance_fudge =
            extract_relevance_fudge args
                (Sledgehammer.relevance_fudge_for_prover prover)
@@ -124,9 +124,8 @@
          val facts =
            Sledgehammer_Filter.relevant_facts ctxt full_types
                relevance_thresholds
-               (the_default default_max_relevant max_relevant)
-               irrelevant_consts relevance_fudge relevance_override facts hyp_ts
-               concl_t
+               (the_default default_max_relevant max_relevant) is_built_in_const
+               relevance_fudge relevance_override facts hyp_ts concl_t
            |> map (fst o fst)
          val (found_facts, lost_facts) =
            List.concat proofs |> sort_distinct string_ord
--- a/src/HOL/Multivariate_Analysis/Convex_Euclidean_Space.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Multivariate_Analysis/Convex_Euclidean_Space.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -13,9 +13,307 @@
 (* To be moved elsewhere                                                     *)
 (* ------------------------------------------------------------------------- *)
 
+lemma linear_scaleR: "linear (%(x :: 'n::euclidean_space). scaleR c x)"
+  by (metis linear_conv_bounded_linear scaleR.bounded_linear_right)
+
+lemma injective_scaleR: 
+assumes "(c :: real) ~= 0"
+shows "inj (%(x :: 'n::euclidean_space). scaleR c x)"
+by (metis assms datatype_injI injI real_vector.scale_cancel_left)
+
+lemma linear_add_cmul:
+fixes f :: "('m::euclidean_space) => ('n::euclidean_space)" 
+assumes "linear f"
+shows "f(a *\<^sub>R x + b *\<^sub>R y) = a *\<^sub>R f x +  b *\<^sub>R f y"
+using linear_add[of f] linear_cmul[of f] assms by (simp) 
+
+lemma mem_convex_2:
+  assumes "convex S" "x : S" "y : S" "u>=0" "v>=0" "u+v=1"
+  shows "(u *\<^sub>R x + v *\<^sub>R y) : S"
+  using assms convex_def[of S] by auto
+
+lemma mem_convex_alt:
+  assumes "convex S" "x : S" "y : S" "u>=0" "v>=0" "u+v>0"
+  shows "((u/(u+v)) *\<^sub>R x + (v/(u+v)) *\<^sub>R y) : S"
+apply (subst mem_convex_2) 
+using assms apply (auto simp add: algebra_simps zero_le_divide_iff)
+using add_divide_distrib[of u v "u+v"] by auto
+
+lemma card_ge1: assumes "d ~= {}" "finite d" shows "card d >= 1"
+by (metis Suc_eq_plus1 assms(1) assms(2) card_eq_0_iff fact_ge_one_nat fact_num_eq_if_nat one_le_mult_iff plus_nat.add_0)
+
+lemma inj_on_image_mem_iff: "inj_on f B ==> (A <= B) ==> (f a : f`A) ==> (a : B) ==> (a : A)" 
+by (blast dest: inj_onD)
+
+lemma independent_injective_on_span_image:
+  assumes iS: "independent (S::(_::euclidean_space) set)" 
+     and lf: "linear f" and fi: "inj_on f (span S)"
+  shows "independent (f ` S)"
+proof-
+  {fix a assume a: "a : S" "f a : span (f ` S - {f a})"
+    have eq: "f ` S - {f a} = f ` (S - {a})" using fi a span_inc
+      by (auto simp add: inj_on_def)
+    from a have "f a : f ` span (S -{a})"
+      unfolding eq span_linear_image[OF lf, of "S - {a}"]  by blast
+    moreover have "span (S -{a}) <= span S" using span_mono[of "S-{a}" S] by auto
+    ultimately have "a : span (S -{a})" using fi a span_inc by (auto simp add: inj_on_def)
+    with a(1) iS  have False by (simp add: dependent_def) }
+  then show ?thesis unfolding dependent_def by blast
+qed
+
+lemma dim_image_eq:
+fixes f :: "'n::euclidean_space => 'm::euclidean_space"
+assumes lf: "linear f" and fi: "inj_on f (span S)" 
+shows "dim (f ` S) = dim (S:: ('n::euclidean_space) set)"
+proof-
+obtain B where B_def: "B<=S & independent B & S <= span B & card B = dim S" 
+  using basis_exists[of S] by auto
+hence "span S = span B" using span_mono[of B S] span_mono[of S "span B"] span_span[of B] by auto
+hence "independent (f ` B)" using independent_injective_on_span_image[of B f] B_def assms by auto
+moreover have "card (f ` B) = card B" using assms card_image[of f B] subset_inj_on[of f "span S" B] 
+   B_def span_inc by auto
+moreover have "(f ` B) <= (f ` S)" using B_def by auto
+ultimately have "dim (f ` S) >= dim S" 
+  using independent_card_le_dim[of "f ` B" "f ` S"] B_def by auto
+from this show ?thesis using dim_image_le[of f S] assms by auto
+qed
+
+lemma linear_injective_on_subspace_0:
+fixes f :: "('m::euclidean_space) => ('n::euclidean_space)"
+assumes lf: "linear f" and "subspace S"
+  shows "inj_on f S <-> (!x : S. f x = 0 --> x = 0)"
+proof-
+  have "inj_on f S <-> (!x : S. !y : S. f x = f y --> x = y)" by (simp add: inj_on_def)
+  also have "... <-> (!x : S. !y : S. f x - f y = 0 --> x - y = 0)" by simp
+  also have "... <-> (!x : S. !y : S. f (x - y) = 0 --> x - y = 0)"
+    by (simp add: linear_sub[OF lf])
+  also have "... <-> (! x : S. f x = 0 --> x = 0)" 
+    using `subspace S` subspace_def[of S] subspace_sub[of S] by auto
+  finally show ?thesis .
+qed
+
+lemma subspace_Inter: "(!s : f. subspace s) ==> subspace (Inter f)"
+  unfolding subspace_def by auto 
+
+lemma span_eq[simp]: "(span s = s) <-> subspace s"
+proof-
+  { fix f assume "f <= subspace"
+    hence "subspace (Inter f)" using subspace_Inter[of f] unfolding subset_eq mem_def by auto  }
+  thus ?thesis using hull_eq[unfolded mem_def, of subspace s] span_def by auto
+qed
+
+lemma basis_inj_on: "d \<subseteq> {..<DIM('n)} \<Longrightarrow> inj_on (basis :: nat => 'n::euclidean_space) d"
+  by(auto simp add: inj_on_def euclidean_eq[where 'a='n])
+  
+lemma finite_substdbasis: "finite {basis i ::'n::euclidean_space |i. i : (d:: nat set)}" (is "finite ?S")
+proof-
+  have eq: "?S = basis ` d" by blast
+  show ?thesis unfolding eq apply(rule finite_subset[OF _ range_basis_finite]) by auto
+qed
+
+lemma card_substdbasis: assumes "d \<subseteq> {..<DIM('n::euclidean_space)}"
+  shows "card {basis i ::'n::euclidean_space | i. i : d} = card d" (is "card ?S = _")
+proof-
+  have eq: "?S = basis ` d" by blast
+  show ?thesis unfolding eq using card_image[OF basis_inj_on[of d]] assms by auto
+qed
+
+lemma substdbasis_expansion_unique: assumes "d\<subseteq>{..<DIM('a::euclidean_space)}"
+  shows "setsum (%i. f i *\<^sub>R basis i) d = (x::'a::euclidean_space)
+      <-> (!i<DIM('a). (i:d --> f i = x$$i) & (i ~: d --> x $$ i = 0))"
+proof- have *:"\<And>x a b P. x * (if P then a else b) = (if P then x*a else x*b)" by auto
+  have **:"finite d" apply(rule finite_subset[OF assms]) by fastsimp
+  have ***:"\<And>i. (setsum (%i. f i *\<^sub>R ((basis i)::'a)) d) $$ i = (\<Sum>x\<in>d. if x = i then f x else 0)"
+    unfolding euclidean_component.setsum euclidean_scaleR basis_component *
+    apply(rule setsum_cong2) using assms by auto
+  show ?thesis unfolding euclidean_eq[where 'a='a] *** setsum_delta[OF **] using assms by auto
+qed
+
+lemma independent_substdbasis: assumes "d\<subseteq>{..<DIM('a::euclidean_space)}"
+  shows "independent {basis i ::'a::euclidean_space |i. i : (d :: nat set)}" (is "independent ?A")
+proof -
+  have *: "{basis i |i. i < DIM('a)} = basis ` {..<DIM('a)}" by auto
+  show ?thesis
+    apply(intro independent_mono[of "{basis i ::'a |i. i : {..<DIM('a::euclidean_space)}}" "?A"] )
+    using independent_basis[where 'a='a] assms by (auto simp: *)
+qed
+
+lemma dim_cball: 
+assumes "0<e"
+shows "dim (cball (0 :: 'n::euclidean_space) e) = DIM('n)"
+proof-
+{ fix x :: "'n::euclidean_space" def y == "(e/norm x) *\<^sub>R x"
+  hence "y : cball 0 e" using cball_def dist_norm[of 0 y] assms by auto
+  moreover have "x = (norm x/e) *\<^sub>R y" using y_def assms by simp
+  moreover hence "x = (norm x/e) *\<^sub>R y"  by auto
+  ultimately have "x : span (cball 0 e)"
+     using span_mul[of y "cball 0 e" "norm x/e"] span_inc[of "cball 0 e"] by auto
+} hence "span (cball 0 e) = (UNIV :: ('n::euclidean_space) set)" by auto 
+from this show ?thesis using dim_span[of "cball (0 :: 'n::euclidean_space) e"] by (auto simp add: dim_UNIV)
+qed
+
+lemma indep_card_eq_dim_span:
+fixes B :: "('n::euclidean_space) set"
+assumes "independent B"
+shows "finite B & card B = dim (span B)" 
+  using assms basis_card_eq_dim[of B "span B"] span_inc by auto
+
+lemma setsum_not_0: "setsum f A ~= 0 ==> EX a:A. f a ~= 0"
+  apply(rule ccontr) by auto
+
+lemma translate_inj_on: 
+fixes A :: "('n::euclidean_space) set"
+shows "inj_on (%x. a+x) A" unfolding inj_on_def by auto
+
+lemma translation_assoc:
+  fixes a b :: "'a::ab_group_add"
+  shows "(\<lambda>x. b+x) ` ((\<lambda>x. a+x) ` S) = (\<lambda>x. (a+b)+x) ` S" by auto
+
+lemma translation_invert:
+  fixes a :: "'a::ab_group_add"
+  assumes "(\<lambda>x. a+x) ` A = (\<lambda>x. a+x) ` B"
+  shows "A=B"
+proof-
+  have "(%x. -a+x) ` ((%x. a+x) ` A) = (%x. -a+x) ` ((%x. a+x) ` B)" using assms by auto
+  from this show ?thesis using translation_assoc[of "-a" a A] translation_assoc[of "-a" a B] by auto 
+qed
+
+lemma translation_galois:
+  fixes a :: "'a::ab_group_add"
+  shows "T=((\<lambda>x. a+x) ` S) <-> S=((\<lambda>x. (-a)+x) ` T)"
+  using translation_assoc[of "-a" a S] apply auto
+  using translation_assoc[of a "-a" T] by auto
+
+lemma translation_inverse_subset:
+  assumes "((%x. -a+x) ` V) <= (S :: 'n::ab_group_add set)" 
+  shows "V <= ((%x. a+x) ` S)"
+proof-
+{ fix x assume "x:V" hence "x-a : S" using assms by auto 
+  hence "x : {a + v |v. v : S}" apply auto apply (rule exI[of _ "x-a"]) apply simp done 
+  hence "x : ((%x. a+x) ` S)" by auto }
+  from this show ?thesis by auto
+qed
+
 lemma basis_0[simp]:"(basis i::'a::euclidean_space) = 0 \<longleftrightarrow> i\<ge>DIM('a)"
   using norm_basis[of i, where 'a='a] unfolding norm_eq_zero[where 'a='a,THEN sym] by auto
 
+lemma basis_to_basis_subspace_isomorphism:
+  assumes s: "subspace (S:: ('n::euclidean_space) set)"
+  and t: "subspace (T :: ('m::euclidean_space) set)"
+  and d: "dim S = dim T"
+  and B: "B <= S" "independent B" "S <= span B" "card B = dim S"
+  and C: "C <= T" "independent C" "T <= span C" "card C = dim T"
+  shows "EX f. linear f & f ` B = C & f ` S = T & inj_on f S"
+proof-
+(* Proof is a modified copy of the proof of similar lemma subspace_isomorphism
+*)
+  from B independent_bound have fB: "finite B" by blast
+  from C independent_bound have fC: "finite C" by blast
+  from B(4) C(4) card_le_inj[of B C] d obtain f where
+    f: "f ` B \<subseteq> C" "inj_on f B" using `finite B` `finite C` by auto
+  from linear_independent_extend[OF B(2)] obtain g where
+    g: "linear g" "\<forall>x\<in> B. g x = f x" by blast
+  from inj_on_iff_eq_card[OF fB, of f] f(2)
+  have "card (f ` B) = card B" by simp
+  with B(4) C(4) have ceq: "card (f ` B) = card C" using d
+    by simp
+  have "g ` B = f ` B" using g(2)
+    by (auto simp add: image_iff)
+  also have "\<dots> = C" using card_subset_eq[OF fC f(1) ceq] .
+  finally have gBC: "g ` B = C" .
+  have gi: "inj_on g B" using f(2) g(2)
+    by (auto simp add: inj_on_def)
+  note g0 = linear_indep_image_lemma[OF g(1) fB, unfolded gBC, OF C(2) gi]
+  {fix x y assume x: "x \<in> S" and y: "y \<in> S" and gxy:"g x = g y"
+    from B(3) x y have x': "x \<in> span B" and y': "y \<in> span B" by blast+
+    from gxy have th0: "g (x - y) = 0" by (simp add: linear_sub[OF g(1)])
+    have th1: "x - y \<in> span B" using x' y' by (metis span_sub)
+    have "x=y" using g0[OF th1 th0] by simp }
+  then have giS: "inj_on g S"
+    unfolding inj_on_def by blast
+  from span_subspace[OF B(1,3) s]
+  have "g ` S = span (g ` B)" by (simp add: span_linear_image[OF g(1)])
+  also have "\<dots> = span C" unfolding gBC ..
+  also have "\<dots> = T" using span_subspace[OF C(1,3) t] .
+  finally have gS: "g ` S = T" .
+  from g(1) gS giS gBC show ?thesis by blast
+qed
+
+lemma closure_linear_image:
+fixes f :: "('m::euclidean_space) => ('n::euclidean_space)"
+assumes "linear f"
+shows "f ` (closure S) <= closure (f ` S)"
+using image_closure_subset[of S f "closure (f ` S)"] assms linear_conv_bounded_linear[of f] 
+linear_continuous_on[of f "closure S"] closed_closure[of "f ` S"] closure_subset[of "f ` S"] by auto
+
+lemma closure_injective_linear_image:
+fixes f :: "('n::euclidean_space) => ('n::euclidean_space)"
+assumes "linear f" "inj f"
+shows "f ` (closure S) = closure (f ` S)"
+proof-
+obtain f' where f'_def: "linear f' & f o f' = id & f' o f = id" 
+   using assms linear_injective_isomorphism[of f] isomorphism_expand by auto
+hence "f' ` closure (f ` S) <= closure (S)"
+   using closure_linear_image[of f' "f ` S"] image_compose[of f' f] by auto
+hence "f ` f' ` closure (f ` S) <= f ` closure (S)" by auto
+hence "closure (f ` S) <= f ` closure (S)" using image_compose[of f f' "closure (f ` S)"] f'_def by auto
+from this show ?thesis using closure_linear_image[of f S] assms by auto 
+qed
+
+lemma closure_direct_sum:
+fixes S :: "('n::euclidean_space) set"
+fixes T :: "('m::euclidean_space) set"
+shows "closure (S <*> T) = closure S <*> closure T"
+proof-
+{ fix x assume "x : closure S <*> closure T"
+  from this obtain xs xt where xst_def: "xs : closure S & xt : closure T & (xs,xt) = x" by auto
+  { fix ee assume ee_def: "(ee :: real) > 0"
+    def e == "ee/2" hence e_def: "(e :: real)>0 & 2*e=ee" using ee_def by auto
+    from this obtain e where e_def: "(e :: real)>0 & 2*e=ee" by auto
+    obtain ys where ys_def: "ys : S & (dist ys xs < e)"
+      using e_def xst_def closure_approachable[of xs S] by auto
+    obtain yt where yt_def: "yt : T & (dist yt xt < e)"
+      using e_def xst_def closure_approachable[of xt T] by auto
+    from ys_def yt_def have "dist (ys,yt) (xs,xt) < sqrt (2*e^2)" 
+      unfolding dist_norm apply (auto simp add: norm_Pair) 
+      using mult_strict_mono'[of "norm (ys - xs)" e "norm (ys - xs)" e] e_def
+      mult_strict_mono'[of "norm (yt - xt)" e "norm (yt - xt)" e] by (simp add: power2_eq_square)
+    hence "((ys,yt) : S <*> T) & (dist (ys,yt) x < 2*e)"
+      using e_def sqrt_add_le_add_sqrt[of "e^2" "e^2"] xst_def ys_def yt_def by auto
+    hence "EX y: S <*> T. dist y x < ee" using e_def by auto
+  } hence "x : closure (S <*> T)" using closure_approachable[of x "S <*> T"] by auto
+}
+hence "closure (S <*> T) >= closure S <*> closure T" by auto
+moreover have "closed (closure S <*> closure T)" using closed_Times by auto
+ultimately show ?thesis using closure_minimal[of "S <*> T" "closure S <*> closure T"]
+  closure_subset[of S] closure_subset[of T] by auto
+qed
+
+lemma closure_scaleR: 
+fixes S :: "('n::euclidean_space) set"
+shows "(op *\<^sub>R c) ` (closure S) = closure ((op *\<^sub>R c) ` S)"
+proof-
+{ assume "c ~= 0" hence ?thesis using closure_injective_linear_image[of "(op *\<^sub>R c)" S]
+      linear_scaleR injective_scaleR by auto 
+}
+moreover
+{ assume zero: "c=0 & S ~= {}"
+  hence "closure S ~= {}" using closure_subset by auto
+  hence "op *\<^sub>R c ` (closure S) = {0}" using zero by auto
+  moreover have "op *\<^sub>R 0 ` S = {0}" using zero by auto
+  ultimately have ?thesis using zero by auto
+}
+moreover
+{ assume "S={}" hence ?thesis by auto }
+ultimately show ?thesis by blast
+qed
+
+lemma fst_linear: "linear fst" unfolding linear_def by (simp add: algebra_simps)
+
+lemma snd_linear: "linear snd" unfolding linear_def by (simp add: algebra_simps)
+
+lemma fst_snd_linear: "linear (%z. fst z + snd z)" unfolding linear_def by (simp add: algebra_simps)
+
 lemma scaleR_2:
   fixes x :: "'a::real_vector"
   shows "scaleR 2 x = x + x"
@@ -272,6 +570,30 @@
     apply(rule_tac x=u in exI) by(auto intro!: exI)
 qed
 
+lemma mem_affine:
+  assumes "affine S" "x : S" "y : S" "u+v=1"
+  shows "(u *\<^sub>R x + v *\<^sub>R y) : S"
+  using assms affine_def[of S] by auto
+
+lemma mem_affine_3:
+  assumes "affine S" "x : S" "y : S" "z : S" "u+v+w=1"
+  shows "(u *\<^sub>R x + v *\<^sub>R y + w *\<^sub>R z) : S"
+proof-
+have "(u *\<^sub>R x + v *\<^sub>R y + w *\<^sub>R z) : affine hull {x, y, z}"
+  using affine_hull_3[of x y z] assms by auto
+moreover have " affine hull {x, y, z} <= affine hull S" 
+  using hull_mono[of "{x, y, z}" "S"] assms by auto
+moreover have "affine hull S = S" 
+  using assms affine_hull_eq[of S] by auto
+ultimately show ?thesis by auto 
+qed
+
+lemma mem_affine_3_minus:
+  assumes "affine S" "x : S" "y : S" "z : S"
+  shows "x + v *\<^sub>R (y-z) : S"
+using mem_affine_3[of S x y z 1 v "-v"] assms by (simp add: algebra_simps)
+
+
 subsection {* Some relations between affine hull and subspaces. *}
 
 lemma affine_hull_insert_subset_span:
@@ -318,6 +640,163 @@
   shows "affine hull s = {a + v | v. v \<in> span {x - a | x. x \<in> s - {a}}}"
   using affine_hull_insert_span[of a "s - {a}", unfolded insert_Diff[OF assms]] by auto
 
+subsection{* Parallel Affine Sets *}
+
+definition affine_parallel :: "'a::real_vector set => 'a::real_vector set => bool"
+where "affine_parallel S T = (? a. T = ((%x. a + x) ` S))"
+
+lemma affine_parallel_expl_aux:
+   fixes S T :: "'a::real_vector set"
+   assumes "!x. (x : S <-> (a+x) : T)" 
+   shows "T = ((%x. a + x) ` S)"
+proof-
+{ fix x assume "x : T" hence "(-a)+x : S" using assms by auto
+  hence " x : ((%x. a + x) ` S)" using imageI[of "-a+x" S "(%x. a+x)"] by auto}
+moreover have "T >= ((%x. a + x) ` S)" using assms by auto 
+ultimately show ?thesis by auto
+qed
+
+lemma affine_parallel_expl: 
+   "affine_parallel S T = (? a. !x. (x : S <-> (a+x) : T))" 
+   unfolding affine_parallel_def using affine_parallel_expl_aux[of S _ T] by auto
+
+lemma affine_parallel_reflex: "affine_parallel S S" unfolding affine_parallel_def apply (rule exI[of _ "0"]) by auto
+
+lemma affine_parallel_commut:
+assumes "affine_parallel A B" shows "affine_parallel B A" 
+proof-
+from assms obtain a where "B=((%x. a + x) ` A)" unfolding affine_parallel_def by auto 
+from this show ?thesis using translation_galois[of B a A] unfolding affine_parallel_def by auto
+qed
+
+lemma affine_parallel_assoc:
+assumes "affine_parallel A B" "affine_parallel B C"
+shows "affine_parallel A C" 
+proof-
+from assms obtain ab where "B=((%x. ab + x) ` A)" unfolding affine_parallel_def by auto 
+moreover 
+from assms obtain bc where "C=((%x. bc + x) ` B)" unfolding affine_parallel_def by auto
+ultimately show ?thesis using translation_assoc[of bc ab A] unfolding affine_parallel_def by auto 
+qed
+
+lemma affine_translation_aux:
+  fixes a :: "'a::real_vector"
+  assumes "affine ((%x. a + x) ` S)" shows "affine S"
+proof-
+{ fix x y u v
+  assume xy: "x : S" "y : S" "(u :: real)+v=1"
+  hence "(a+x):((%x. a + x) ` S)" "(a+y):((%x. a + x) ` S)" by auto
+  hence h1: "u *\<^sub>R  (a+x) + v *\<^sub>R (a+y) : ((%x. a + x) ` S)" using xy assms unfolding affine_def by auto
+  have "u *\<^sub>R (a+x) + v *\<^sub>R (a+y) = (u+v) *\<^sub>R a + (u *\<^sub>R x + v *\<^sub>R y)" by (simp add:algebra_simps)
+  also have "...= a + (u *\<^sub>R x + v *\<^sub>R y)" using `u+v=1` by auto
+  ultimately have "a + (u *\<^sub>R x + v *\<^sub>R y) : ((%x. a + x) ` S)" using h1 by auto
+  hence "u *\<^sub>R x + v *\<^sub>R y : S" by auto
+} from this show ?thesis unfolding affine_def by auto
+qed
+
+lemma affine_translation:
+  fixes a :: "'a::real_vector"
+  shows "affine S <-> affine ((%x. a + x) ` S)"
+proof-
+have "affine S ==> affine ((%x. a + x) ` S)" using affine_translation_aux[of "-a" "((%x. a + x) ` S)"]  using translation_assoc[of "-a" a S] by auto
+from this show ?thesis using affine_translation_aux by auto
+qed
+
+lemma parallel_is_affine:
+fixes S T :: "'a::real_vector set"
+assumes "affine S" "affine_parallel S T"
+shows "affine T"
+proof-
+  from assms obtain a where "T=((%x. a + x) ` S)" unfolding affine_parallel_def by auto 
+  from this show ?thesis using affine_translation assms by auto
+qed
+
+lemma subspace_imp_affine:
+  fixes s :: "(_::euclidean_space) set" shows "subspace s \<Longrightarrow> affine s"
+  unfolding subspace_def affine_def by auto
+
+subsection{* Subspace Parallel to an Affine Set *}
+
+lemma subspace_affine:
+  fixes S :: "('n::euclidean_space) set"
+  shows "subspace S <-> (affine S & 0 : S)"
+proof-
+have h0: "subspace S ==> (affine S & 0 : S)" using subspace_imp_affine[of S] subspace_0 by auto
+{ assume assm: "affine S & 0 : S"
+  { fix c :: real 
+    fix x assume x_def: "x : S"
+    have "c *\<^sub>R x = (1-c) *\<^sub>R 0 + c *\<^sub>R x" by auto
+    moreover have "(1-c) *\<^sub>R 0 + c *\<^sub>R x : S" using affine_alt[of S] assm x_def by auto
+    ultimately have "c *\<^sub>R x : S" by auto
+  } hence h1: "!c. !x : S. c *\<^sub>R x : S" by auto
+  { fix x y assume xy_def: "x : S" "y : S"
+    def u == "(1 :: real)/2"
+    have "(1/2) *\<^sub>R (x+y) = (1/2) *\<^sub>R (x+y)" by auto
+    moreover have "(1/2) *\<^sub>R (x+y)=(1/2) *\<^sub>R x + (1-(1/2)) *\<^sub>R y" by (simp add: algebra_simps)
+    moreover have "(1-u) *\<^sub>R x + u *\<^sub>R y : S" using affine_alt[of S] assm xy_def by auto
+    ultimately have "(1/2) *\<^sub>R (x+y) : S" using u_def by auto
+    moreover have "(x+y) = 2 *\<^sub>R ((1/2) *\<^sub>R (x+y))" by auto
+    ultimately have "(x+y) : S" using h1[rule_format, of "(1/2) *\<^sub>R (x+y)" "2"] by auto
+  } hence "!x : S. !y : S. (x+y) : S" by auto 
+  hence "subspace S" using h1 assm unfolding subspace_def by auto
+} from this show ?thesis using h0 by metis
+qed
+
+lemma affine_diffs_subspace:
+  fixes S :: "('n::euclidean_space) set"
+  assumes "affine S" "a : S"
+  shows "subspace ((%x. (-a)+x) ` S)"
+proof-
+have "affine ((%x. (-a)+x) ` S)" using  affine_translation assms by auto  
+moreover have "0 : ((%x. (-a)+x) ` S)" using assms exI[of "(%x. x:S & -a+x=0)" a] by auto
+ultimately show ?thesis using subspace_affine by auto 
+qed
+
+lemma parallel_subspace_explicit:
+fixes a :: "'n::euclidean_space"
+assumes "affine S" "a : S"
+assumes "L == {y. ? x : S. (-a)+x=y}" 
+shows "subspace L & affine_parallel S L" 
+proof-
+have par: "affine_parallel S L" unfolding affine_parallel_def using assms by auto
+hence "affine L" using assms parallel_is_affine by auto  
+moreover have "0 : L" using assms apply auto using exI[of "(%x. x:S & -a+x=0)" a] by auto
+ultimately show ?thesis using subspace_affine par by auto 
+qed
+
+lemma parallel_subspace_aux:
+fixes A B :: "('n::euclidean_space) set"
+assumes "subspace A" "subspace B" "affine_parallel A B"
+shows "A>=B"
+proof-
+from assms obtain a where a_def: "!x. (x : A <-> (a+x) : B)" using affine_parallel_expl[of A B] by auto
+hence "-a : A" using assms subspace_0[of B] by auto
+hence "a : A" using assms subspace_neg[of A "-a"] by auto
+from this show ?thesis using assms a_def unfolding subspace_def by auto
+qed
+
+lemma parallel_subspace:
+fixes A B :: "('n::euclidean_space) set"
+assumes "subspace A" "subspace B" "affine_parallel A B"
+shows "A=B"
+proof-
+have "A>=B" using assms parallel_subspace_aux by auto
+moreover have "A<=B" using assms parallel_subspace_aux[of B A] affine_parallel_commut by auto
+ultimately show ?thesis by auto  
+qed
+
+lemma affine_parallel_subspace:
+fixes S :: "('n::euclidean_space) set"
+assumes "affine S" "S ~= {}"
+shows "?!L. subspace L & affine_parallel S L" 
+proof-
+have ex: "? L. subspace L & affine_parallel S L" using assms  parallel_subspace_explicit by auto 
+{ fix L1 L2 assume ass: "subspace L1 & affine_parallel S L1" "subspace L2 & affine_parallel S L2"
+  hence "affine_parallel L1 L2" using affine_parallel_commut[of S L1] affine_parallel_assoc[of L1 S L2] by auto
+  hence "L1=L2" using ass parallel_subspace by auto
+} from this show ?thesis using ex by auto
+qed
+
 subsection {* Cones. *}
 
 definition
@@ -343,6 +822,116 @@
   apply(rule hull_eq[unfolded mem_def])
   using cone_Inter unfolding subset_eq by (auto simp add: mem_def)
 
+lemma mem_cone:
+  assumes "cone S" "x : S" "c>=0"
+  shows "c *\<^sub>R x : S"
+  using assms cone_def[of S] by auto
+
+lemma cone_contains_0:
+fixes S :: "('m::euclidean_space) set"
+assumes "cone S"
+shows "(S ~= {}) <-> (0 : S)"
+proof-
+{ assume "S ~= {}" from this obtain a where "a:S" by auto
+  hence "0 : S" using assms mem_cone[of S a 0] by auto
+} from this show ?thesis by auto
+qed
+
+lemma cone_0:
+shows "cone {(0 :: 'm::euclidean_space)}"
+unfolding cone_def by auto
+
+lemma cone_Union[intro]: "(!s:f. cone s) --> (cone (Union f))"
+  unfolding cone_def by blast
+
+lemma cone_iff:
+fixes S :: "('m::euclidean_space) set"
+assumes "S ~= {}"
+shows "cone S <-> 0:S & (!c. c>0 --> ((op *\<^sub>R c) ` S) = S)"
+proof-
+{ assume "cone S"
+  { fix c assume "(c :: real)>0"
+    { fix x assume "x : S" hence "x : (op *\<^sub>R c) ` S" unfolding image_def
+        using `cone S` `c>0` mem_cone[of S x "1/c"]
+        exI[of "(%t. t:S & x = c *\<^sub>R t)" "(1 / c) *\<^sub>R x"] by auto
+    }
+    moreover
+    { fix x assume "x : (op *\<^sub>R c) ` S"
+      (*from this obtain t where "t:S & x = c *\<^sub>R t" by auto*)
+      hence "x:S" using `cone S` `c>0` unfolding cone_def image_def `c>0` by auto
+    }
+    ultimately have "((op *\<^sub>R c) ` S) = S" by auto
+  } hence "0:S & (!c. c>0 --> ((op *\<^sub>R c) ` S) = S)" using `cone S` cone_contains_0[of S] assms by auto
+}
+moreover
+{ assume a: "0:S & (!c. c>0 --> ((op *\<^sub>R c) ` S) = S)"
+  { fix x assume "x:S"
+    fix c1 assume "(c1 :: real)>=0"
+    hence "(c1=0) | (c1>0)" by auto
+    hence "c1 *\<^sub>R x : S" using a `x:S` by auto
+  }
+ hence "cone S" unfolding cone_def by auto
+} ultimately show ?thesis by blast
+qed
+
+lemma cone_hull_empty:
+"cone hull {} = {}"
+by (metis cone_empty cone_hull_eq)
+
+lemma cone_hull_empty_iff:
+fixes S :: "('m::euclidean_space) set"
+shows "(S = {}) <-> (cone hull S = {})"
+by (metis bot_least cone_hull_empty hull_subset xtrans(5))
+
+lemma cone_hull_contains_0: 
+fixes S :: "('m::euclidean_space) set"
+shows "(S ~= {}) <-> (0 : cone hull S)"
+using cone_cone_hull[of S] cone_contains_0[of "cone hull S"] cone_hull_empty_iff[of S] by auto
+
+lemma mem_cone_hull:
+  assumes "x : S" "c>=0"
+  shows "c *\<^sub>R x : cone hull S"
+by (metis assms cone_cone_hull hull_inc mem_cone mem_def)
+
+lemma cone_hull_expl:
+fixes S :: "('m::euclidean_space) set"
+shows "cone hull S = {c *\<^sub>R x | c x. c>=0 & x : S}" (is "?lhs = ?rhs")
+proof-
+{ fix x assume "x : ?rhs"
+  from this obtain cx xx where x_def: "x= cx *\<^sub>R xx & (cx :: real)>=0 & xx : S" by auto
+  fix c assume c_def: "(c :: real)>=0"
+  hence "c *\<^sub>R x = (c*cx) *\<^sub>R xx" using x_def by (simp add: algebra_simps)
+  moreover have "(c*cx) >= 0" using c_def x_def using mult_nonneg_nonneg by auto
+  ultimately have "c *\<^sub>R x : ?rhs" using x_def by auto
+} hence "cone ?rhs" unfolding cone_def by auto
+  hence "?rhs : cone" unfolding mem_def by auto
+{ fix x assume "x : S" hence "1 *\<^sub>R x : ?rhs" apply auto apply(rule_tac x="1" in exI) by auto
+  hence "x : ?rhs" by auto
+} hence "S <= ?rhs" by auto
+hence "?lhs <= ?rhs" using `?rhs : cone` hull_minimal[of S "?rhs" "cone"] by auto
+moreover
+{ fix x assume "x : ?rhs"
+  from this obtain cx xx where x_def: "x= cx *\<^sub>R xx & (cx :: real)>=0 & xx : S" by auto
+  hence "xx : cone hull S" using hull_subset[of S] by auto
+  hence "x : ?lhs" using x_def cone_cone_hull[of S] cone_def[of "cone hull S"] by auto
+} ultimately show ?thesis by auto
+qed
+
+lemma cone_closure:
+fixes S :: "('m::euclidean_space) set"
+assumes "cone S"
+shows "cone (closure S)"
+proof-
+{ assume "S = {}" hence ?thesis by auto }
+moreover
+{ assume "S ~= {}" hence "0:S & (!c. c>0 --> op *\<^sub>R c ` S = S)" using cone_iff[of S] assms by auto
+  hence "0:(closure S) & (!c. c>0 --> op *\<^sub>R c ` (closure S) = (closure S))"
+     using closure_subset by (auto simp add: closure_scaleR)
+  hence ?thesis using cone_iff[of "closure S"] by auto
+}
+ultimately show ?thesis by blast
+qed
+
 subsection {* Affine dependence and consequential theorems (from Lars Schewe). *}
 
 definition
@@ -514,6 +1103,28 @@
   shows "finite s \<Longrightarrow> bounded(convex hull s)"
   using bounded_convex_hull finite_imp_bounded by auto
 
+subsection {* Convex hull is "preserved" by a linear function. *}
+
+lemma convex_hull_linear_image:
+  assumes "bounded_linear f"
+  shows "f ` (convex hull s) = convex hull (f ` s)"
+  apply rule unfolding subset_eq ball_simps apply(rule_tac[!] hull_induct, rule hull_inc) prefer 3  
+  apply(erule imageE)apply(rule_tac x=xa in image_eqI) apply assumption
+  apply(rule hull_subset[unfolded subset_eq, rule_format]) apply assumption
+proof-
+  interpret f: bounded_linear f by fact
+  show "convex {x. f x \<in> convex hull f ` s}" 
+  unfolding convex_def by(auto simp add: f.scaleR f.add convex_convex_hull[unfolded convex_def, rule_format]) next
+  interpret f: bounded_linear f by fact
+  show "convex {x. x \<in> f ` (convex hull s)}" using  convex_convex_hull[unfolded convex_def, of s] 
+    unfolding convex_def by (auto simp add: f.scaleR [symmetric] f.add [symmetric])
+qed auto
+
+lemma in_convex_hull_linear_image:
+  assumes "bounded_linear f" "x \<in> convex hull s"
+  shows "(f x) \<in> convex hull (f ` s)"
+using convex_hull_linear_image[OF assms(1)] assms(2) by auto
+
 subsection {* Stepping theorems for convex hulls of finite sets. *}
 
 lemma convex_hull_empty[simp]: "convex hull {} = {}"
@@ -775,10 +1386,6 @@
 text {* TODO: Generalize linear algebra concepts defined in @{text
 Euclidean_Space.thy} so that we can generalize these lemmas. *}
 
-lemma subspace_imp_affine:
-  fixes s :: "(_::euclidean_space) set" shows "subspace s \<Longrightarrow> affine s"
-  unfolding subspace_def affine_def by auto
-
 lemma affine_imp_convex: "affine s \<Longrightarrow> convex s"
   unfolding affine_def convex_def by auto
 
@@ -952,6 +1559,979 @@
   thus "x \<in> convex hull p" using hull_mono[OF `s\<subseteq>p`] by auto
 qed
 
+
+subsection {* Some Properties of Affine Dependent Sets *}
+
+lemma affine_independent_empty: "~(affine_dependent {})"
+  by (simp add: affine_dependent_def)
+
+lemma affine_independent_sing:
+fixes a :: "'n::euclidean_space" 
+shows "~(affine_dependent {a})"
+ by (simp add: affine_dependent_def)
+
+lemma affine_hull_translation:
+"affine hull ((%x. a + x) `  S) = (%x. a + x) ` (affine hull S)"
+proof-
+have "affine ((%x. a + x) ` (affine hull S))" using affine_translation affine_affine_hull by auto
+moreover have "(%x. a + x) `  S <= (%x. a + x) ` (affine hull S)" using hull_subset[of S] by auto
+ultimately have h1: "affine hull ((%x. a + x) `  S) <= (%x. a + x) ` (affine hull S)" by (metis hull_minimal mem_def)
+have "affine((%x. -a + x) ` (affine hull ((%x. a + x) `  S)))"  using affine_translation affine_affine_hull by auto
+moreover have "(%x. -a + x) ` (%x. a + x) `  S <= (%x. -a + x) ` (affine hull ((%x. a + x) `  S))" using hull_subset[of "(%x. a + x) `  S"] by auto 
+moreover have "S=(%x. -a + x) ` (%x. a + x) `  S" using  translation_assoc[of "-a" a] by auto
+ultimately have "(%x. -a + x) ` (affine hull ((%x. a + x) `  S)) >= (affine hull S)" by (metis hull_minimal mem_def)
+hence "affine hull ((%x. a + x) `  S) >= (%x. a + x) ` (affine hull S)" by auto
+from this show ?thesis using h1 by auto
+qed
+
+lemma affine_dependent_translation:
+  assumes "affine_dependent S"
+  shows "affine_dependent ((%x. a + x) ` S)"
+proof-
+obtain x where x_def: "x : S & x : affine hull (S - {x})" using assms affine_dependent_def by auto
+have "op + a ` (S - {x}) = op + a ` S - {a + x}" by auto
+hence "a+x : affine hull ((%x. a + x) ` S - {a+x})" using  affine_hull_translation[of a "S-{x}"] x_def by auto
+moreover have "a+x : (%x. a + x) ` S" using x_def by auto  
+ultimately show ?thesis unfolding affine_dependent_def by auto 
+qed
+
+lemma affine_dependent_translation_eq:
+  "affine_dependent S <-> affine_dependent ((%x. a + x) ` S)"
+proof-
+{ assume "affine_dependent ((%x. a + x) ` S)" 
+  hence "affine_dependent S" using affine_dependent_translation[of "((%x. a + x) ` S)" "-a"] translation_assoc[of "-a" a] by auto  
+} from this show ?thesis using affine_dependent_translation by auto
+qed
+
+lemma affine_hull_0_dependent:
+  fixes S ::  "('n::euclidean_space) set"
+  assumes "0 : affine hull S"
+  shows "dependent S"
+proof-
+obtain s u where s_u_def: "finite s & s ~= {} & s <= S & setsum u s = 1 & (SUM v:s. u v *\<^sub>R v) = 0" using assms affine_hull_explicit[of S] by auto
+hence "EX v:s. u v ~= 0" using setsum_not_0[of "u" "s"] by auto 
+hence "finite s & s <= S & (EX v:s. u v ~= 0 & (SUM v:s. u v *\<^sub>R v) = 0)" using s_u_def by auto
+from this show ?thesis unfolding dependent_explicit[of S] by auto
+qed
+
+lemma affine_dependent_imp_dependent2:
+  fixes S :: "('n::euclidean_space) set" 
+  assumes "affine_dependent (insert 0 S)"
+  shows "dependent S"
+proof-
+obtain x where x_def: "x:insert 0 S & x : affine hull (insert 0 S - {x})" using affine_dependent_def[of "(insert 0 S)"] assms by blast
+hence "x : span (insert 0 S - {x})" using affine_hull_subset_span by auto
+moreover have "span (insert 0 S - {x}) = span (S - {x})" using insert_Diff_if[of "0" S "{x}"] span_insert_0[of "S-{x}"] by auto
+ultimately have "x : span (S - {x})" by auto
+hence "(x~=0) ==> dependent S" using x_def dependent_def by auto
+moreover
+{ assume "x=0" hence "0 : affine hull S" using x_def hull_mono[of "S - {0}" S] by auto
+               hence "dependent S" using affine_hull_0_dependent by auto  
+} ultimately show ?thesis by auto
+qed
+
+lemma affine_dependent_iff_dependent:
+  fixes S :: "('n::euclidean_space) set" 
+  assumes "a ~: S"
+  shows "affine_dependent (insert a S) <-> dependent ((%x. -a + x) ` S)" 
+proof-
+have "(op + (- a) ` S)={x - a| x . x : S}" by auto
+from this show ?thesis using affine_dependent_translation_eq[of "(insert a S)" "-a"] 
+      affine_dependent_imp_dependent2 assms 
+      dependent_imp_affine_dependent[of a S] by auto
+qed
+
+lemma affine_dependent_iff_dependent2:
+  fixes S :: "('n::euclidean_space) set" 
+  assumes "a : S"
+  shows "affine_dependent S <-> dependent ((%x. -a + x) ` (S-{a}))"
+proof-
+have "insert a (S - {a})=S" using assms by auto
+from this show ?thesis using assms affine_dependent_iff_dependent[of a "S-{a}"] by auto 
+qed
+
+lemma affine_hull_insert_span_gen:
+  fixes a :: "_::euclidean_space"
+  shows "affine hull (insert a s) = (%x. a+x) ` span ((%x. -a+x) ` s)" 
+proof-
+have h1: "{x - a |x. x : s}=((%x. -a+x) ` s)" by auto
+{ assume "a ~: s" hence ?thesis using affine_hull_insert_span[of a s] h1 by auto}  
+moreover
+{ assume a1: "a : s"
+  have "EX x. x:s & -a+x=0" apply (rule exI[of _ a]) using a1 by auto
+  hence "insert 0 ((%x. -a+x) ` (s - {a}))=(%x. -a+x) ` s" by auto
+  hence "span ((%x. -a+x) ` (s - {a}))=span ((%x. -a+x) ` s)" 
+    using span_insert_0[of "op + (- a) ` (s - {a})"] by auto
+  moreover have "{x - a |x. x : (s - {a})}=((%x. -a+x) ` (s - {a}))" by auto 
+  moreover have "insert a (s - {a})=(insert a s)" using assms by auto
+  ultimately have ?thesis using assms affine_hull_insert_span[of "a" "s-{a}"] by auto
+} 
+ultimately show ?thesis by auto  
+qed
+
+lemma affine_hull_span2:
+  fixes a :: "_::euclidean_space"
+  assumes "a : s"
+  shows "affine hull s = (%x. a+x) ` span ((%x. -a+x) ` (s-{a}))"
+  using affine_hull_insert_span_gen[of a "s - {a}", unfolded insert_Diff[OF assms]] by auto
+
+lemma affine_hull_span_gen:
+  fixes a :: "_::euclidean_space"
+  assumes "a : affine hull s"
+  shows "affine hull s = (%x. a+x) ` span ((%x. -a+x) ` s)"
+proof-
+have "affine hull (insert a s) = affine hull s" using hull_redundant[of a affine s] assms by auto
+from this show ?thesis using affine_hull_insert_span_gen[of a "s"] by auto
+qed
+
+lemma affine_hull_span_0:
+  assumes "(0 :: _::euclidean_space) : affine hull S"
+  shows "affine hull S = span S"
+using affine_hull_span_gen[of "0" S] assms by auto
+
+
+lemma extend_to_affine_basis:
+fixes S V :: "('n::euclidean_space) set"
+assumes "~(affine_dependent S)" "S <= V" "S~={}"
+shows "? T. ~(affine_dependent T) & S<=T & T<=V & affine hull T = affine hull V"
+proof-
+obtain a where a_def: "a : S" using assms by auto
+hence h0: "independent  ((%x. -a + x) ` (S-{a}))" using affine_dependent_iff_dependent2 assms by auto
+from this obtain B 
+   where B_def: "(%x. -a+x) ` (S - {a}) <= B & B <= (%x. -a+x) ` V & independent B & (%x. -a+x) ` V <= span B" 
+   using maximal_independent_subset_extend[of "(%x. -a+x) ` (S-{a})" "(%x. -a + x) ` V"] assms by blast
+def T == "(%x. a+x) ` (insert 0 B)" hence "T=insert a ((%x. a+x) ` B)" by auto
+hence "affine hull T = (%x. a+x) ` span B" using affine_hull_insert_span_gen[of a "((%x. a+x) ` B)"] translation_assoc[of "-a" a B] by auto
+hence "V <= affine hull T" using B_def assms translation_inverse_subset[of a V "span B"] by auto
+moreover have "T<=V" using T_def B_def a_def assms by auto
+ultimately have "affine hull T = affine hull V" 
+    by (metis Int_absorb1 Int_absorb2 Int_commute Int_lower2 assms hull_hull hull_mono) 
+moreover have "S<=T" using T_def B_def translation_inverse_subset[of a "S-{a}" B] by auto
+moreover have "~(affine_dependent T)" using T_def affine_dependent_translation_eq[of "insert 0 B"] affine_dependent_imp_dependent2 B_def by auto
+ultimately show ?thesis using `T<=V` by auto
+qed
+
+lemma affine_basis_exists: 
+fixes V :: "('n::euclidean_space) set"
+shows "? B. B <= V & ~(affine_dependent B) & affine hull V = affine hull B"
+proof-
+{ assume empt: "V={}" have "? B. B <= V & ~(affine_dependent B) & (affine hull V=affine hull B)" using empt affine_independent_empty by auto
+}
+moreover
+{ assume nonempt: "V~={}" obtain x where "x:V" using nonempt by auto
+  hence "? B. B <= V & ~(affine_dependent B) & (affine hull V=affine hull B)"
+  using affine_dependent_def[of "{x}"] extend_to_affine_basis[of "{x}:: ('n::euclidean_space) set" V] by auto
+}
+ultimately show ?thesis by auto
+qed
+
+subsection {* Affine Dimension of a Set *}
+
+definition "aff_dim V = (SOME d :: int. ? B. (affine hull B=affine hull V) & ~(affine_dependent B) & (of_nat(card B) = d+1))"
+
+lemma aff_dim_basis_exists:
+  fixes V :: "('n::euclidean_space) set" 
+  shows "? B. (affine hull B=affine hull V) & ~(affine_dependent B) & (of_nat(card B) = aff_dim V+1)"
+proof-
+obtain B where B_def: "~(affine_dependent B) & (affine hull B=affine hull V)" using affine_basis_exists[of V] by auto
+from this show ?thesis unfolding aff_dim_def some_eq_ex[of "%d. ? (B :: ('n::euclidean_space) set). (affine hull B=affine hull V) & ~(affine_dependent B) & (of_nat(card B) = d+1)"] apply auto apply (rule exI[of _ "int (card B)-(1 :: int)"]) apply (rule exI[of _ "B"]) by auto
+qed
+
+lemma affine_hull_nonempty: "(S ~= {}) <-> affine hull S ~= {}"
+proof-
+fix S have "(S = {}) ==> affine hull S = {}"using affine_hull_empty by auto 
+moreover have "affine hull S = {} ==> S = {}" unfolding hull_def by auto
+ultimately show "(S ~= {}) <-> affine hull S ~= {}" by blast
+qed
+
+lemma aff_dim_parallel_subspace_aux:
+fixes B :: "('n::euclidean_space) set"
+assumes "~(affine_dependent B)" "a:B"
+shows "finite B & ((card B) - 1 = dim (span ((%x. -a+x) ` (B-{a}))))" 
+proof-
+have "independent ((%x. -a + x) ` (B-{a}))" using affine_dependent_iff_dependent2 assms by auto
+hence fin: "dim (span ((%x. -a+x) ` (B-{a}))) = card ((%x. -a + x) ` (B-{a}))" "finite ((%x. -a + x) ` (B - {a}))"  using indep_card_eq_dim_span[of "(%x. -a+x) ` (B-{a})"] by auto
+{ assume emp: "(%x. -a + x) ` (B - {a}) = {}" 
+  have "B=insert a ((%x. a + x) ` (%x. -a + x) ` (B - {a}))" using translation_assoc[of "a" "-a" "(B - {a})"] assms by auto
+  hence "B={a}" using emp by auto
+  hence ?thesis using assms fin by auto  
+}
+moreover
+{ assume "(%x. -a + x) ` (B - {a}) ~= {}"
+  hence "card ((%x. -a + x) ` (B - {a}))>0" using fin by auto
+  moreover have h1: "card ((%x. -a + x) ` (B-{a})) = card (B-{a})"  
+     apply (rule card_image) using translate_inj_on by auto
+  ultimately have "card (B-{a})>0" by auto
+  hence "finite(B-{a})" using card_gt_0_iff[of "(B - {a})"] by auto
+  moreover hence "(card (B-{a})= (card B) - 1)" using card_Diff_singleton assms by auto
+  ultimately have ?thesis using fin h1 by auto
+} ultimately show ?thesis by auto
+qed
+
+lemma aff_dim_parallel_subspace:
+fixes V L :: "('n::euclidean_space) set"
+assumes "V ~= {}"
+assumes "subspace L" "affine_parallel (affine hull V) L"
+shows "aff_dim V=int(dim L)"
+proof-
+obtain B where B_def: "affine hull B = affine hull V & ~ affine_dependent B & int (card B) = aff_dim V + 1" using aff_dim_basis_exists by auto
+hence "B~={}" using assms B_def  affine_hull_nonempty[of V] affine_hull_nonempty[of B] by auto 
+from this obtain a where a_def: "a : B" by auto
+def Lb == "span ((%x. -a+x) ` (B-{a}))"
+  moreover have "affine_parallel (affine hull B) Lb"
+     using Lb_def B_def assms affine_hull_span2[of a B] a_def  affine_parallel_commut[of "Lb" "(affine hull B)"] unfolding affine_parallel_def by auto
+  moreover have "subspace Lb" using Lb_def subspace_span by auto
+  moreover have "affine hull B ~= {}" using assms B_def affine_hull_nonempty[of V] by auto
+  ultimately have "L=Lb" using assms affine_parallel_subspace[of "affine hull B"] affine_affine_hull[of B] B_def by auto 
+  hence "dim L=dim Lb" by auto 
+  moreover have "(card B) - 1 = dim Lb" "finite B" using Lb_def aff_dim_parallel_subspace_aux a_def B_def by auto
+(*  hence "card B=dim Lb+1" using `B~={}` card_gt_0_iff[of B] by auto *)
+  ultimately show ?thesis using B_def `B~={}` card_gt_0_iff[of B] by auto
+qed
+
+lemma aff_independent_finite:
+fixes B :: "('n::euclidean_space) set"
+assumes "~(affine_dependent B)"
+shows "finite B"
+proof-
+{ assume "B~={}" from this obtain a where "a:B" by auto 
+  hence ?thesis using aff_dim_parallel_subspace_aux assms by auto 
+} from this show ?thesis by auto
+qed
+
+lemma independent_finite:
+fixes B :: "('n::euclidean_space) set"
+assumes "independent B" 
+shows "finite B"
+using affine_dependent_imp_dependent[of B] aff_independent_finite[of B] assms by auto
+
+lemma subspace_dim_equal:
+assumes "subspace (S :: ('n::euclidean_space) set)" "subspace T" "S <= T" "dim S >= dim T"
+shows "S=T"
+proof- 
+obtain B where B_def: "B <= S & independent B & S <= span B & (card B = dim S)" using basis_exists[of S] by auto
+hence "span B <= S" using span_mono[of B S] span_eq[of S] assms by metis 
+hence "span B = S" using B_def by auto
+have "dim S = dim T" using assms dim_subset[of S T] by auto
+hence "T <= span B" using card_eq_dim[of B T] B_def independent_finite assms by auto
+from this show ?thesis using assms `span B=S` by auto
+qed
+
+lemma span_substd_basis:  assumes "d\<subseteq>{..<DIM('a::euclidean_space)}"
+  shows "(span {basis i | i. i : d}) = {x::'a::euclidean_space. (!i<DIM('a). i ~: d --> x$$i = 0)}"
+  (is "span ?A = ?B")
+proof-
+have "?A <= ?B" by auto
+moreover have s: "subspace ?B" using subspace_substandard[of "%i. i ~: d"] .
+ultimately have "span ?A <= ?B" using span_mono[of "?A" "?B"] span_eq[of "?B"] by blast
+moreover have "card d <= dim (span ?A)" using independent_card_le_dim[of "?A" "span ?A"] 
+   independent_substdbasis[OF assms] card_substdbasis[OF assms] span_inc[of "?A"] by auto
+moreover hence "dim ?B <= dim (span ?A)" using dim_substandard[OF assms] by auto
+ultimately show ?thesis using s subspace_dim_equal[of "span ?A" "?B"] 
+  subspace_span[of "?A"] by auto
+qed
+
+lemma basis_to_substdbasis_subspace_isomorphism:
+fixes B :: "('a::euclidean_space) set" 
+assumes "independent B"
+shows "EX f d. card d = card B & linear f & f ` B = {basis i::'a |i. i : (d :: nat set)} & 
+       f ` span B = {x. ALL i<DIM('a). i ~: d --> x $$ i = (0::real)} &  inj_on f (span B) \<and> d\<subseteq>{..<DIM('a)}" 
+proof-
+  have B:"card B=dim B" using dim_unique[of B B "card B"] assms span_inc[of B] by auto
+  def d \<equiv> "{..<dim B}" have t:"card d = dim B" unfolding d_def by auto
+  have "dim B <= DIM('a)" using dim_subset_UNIV[of B] by auto
+  hence d:"d\<subseteq>{..<DIM('a)}" unfolding d_def by auto
+  let ?t = "{x::'a::euclidean_space. !i<DIM('a). i ~: d --> x$$i = 0}"
+  have "EX f. linear f & f ` B = {basis i |i. i : d} &
+    f ` span B = ?t & inj_on f (span B)"
+    apply (rule basis_to_basis_subspace_isomorphism[of "span B" ?t B "{basis i |i. i : d}"])
+    apply(rule subspace_span) apply(rule subspace_substandard) defer
+    apply(rule span_inc) apply(rule assms) defer unfolding dim_span[of B] apply(rule B)
+    unfolding span_substd_basis[OF d,THEN sym] card_substdbasis[OF d] apply(rule span_inc)
+    apply(rule independent_substdbasis[OF d]) apply(rule,assumption)
+    unfolding t[THEN sym] span_substd_basis[OF d] dim_substandard[OF d] by auto
+  from this t `card B=dim B` show ?thesis using d by auto 
+qed
+
+lemma aff_dim_empty:
+fixes S :: "('n::euclidean_space) set" 
+shows "S = {} <-> aff_dim S = -1"
+proof-
+obtain B where "affine hull B = affine hull S & ~ affine_dependent B & int (card B) = aff_dim S + 1" using aff_dim_basis_exists by auto
+moreover hence "S={} <-> B={}" using affine_hull_nonempty[of B] affine_hull_nonempty[of S] by auto
+ultimately show ?thesis using aff_independent_finite[of B] card_gt_0_iff[of B] by auto
+qed
+
+lemma aff_dim_affine_hull:
+fixes S :: "('n::euclidean_space) set"
+shows "aff_dim (affine hull S)=aff_dim S" 
+unfolding aff_dim_def using hull_hull[of _ S] by auto 
+
+lemma aff_dim_affine_hull2:
+fixes S T :: "('n::euclidean_space) set"
+assumes "affine hull S=affine hull T"
+shows "aff_dim S=aff_dim T" unfolding aff_dim_def using assms by auto
+
+lemma aff_dim_unique: 
+fixes B V :: "('n::euclidean_space) set" 
+assumes "(affine hull B=affine hull V) & ~(affine_dependent B)"
+shows "of_nat(card B) = aff_dim V+1"
+proof-
+{ assume "B={}" hence "V={}" using affine_hull_nonempty[of V] affine_hull_nonempty[of B] assms by auto
+  hence "aff_dim V = (-1::int)"  using aff_dim_empty by auto  
+  hence ?thesis using `B={}` by auto
+}
+moreover
+{ assume "B~={}" from this obtain a where a_def: "a:B" by auto 
+  def Lb == "span ((%x. -a+x) ` (B-{a}))"
+  have "affine_parallel (affine hull B) Lb"
+     using Lb_def affine_hull_span2[of a B] a_def  affine_parallel_commut[of "Lb" "(affine hull B)"] 
+     unfolding affine_parallel_def by auto
+  moreover have "subspace Lb" using Lb_def subspace_span by auto
+  ultimately have "aff_dim B=int(dim Lb)" using aff_dim_parallel_subspace[of B Lb] `B~={}` by auto 
+  moreover have "(card B) - 1 = dim Lb" "finite B" using Lb_def aff_dim_parallel_subspace_aux a_def assms by auto
+  ultimately have "(of_nat(card B) = aff_dim B+1)" using  `B~={}` card_gt_0_iff[of B] by auto
+  hence ?thesis using aff_dim_affine_hull2 assms by auto
+} ultimately show ?thesis by blast
+qed
+
+lemma aff_dim_affine_independent: 
+fixes B :: "('n::euclidean_space) set" 
+assumes "~(affine_dependent B)"
+shows "of_nat(card B) = aff_dim B+1"
+  using aff_dim_unique[of B B] assms by auto
+
+lemma aff_dim_sing: 
+fixes a :: "'n::euclidean_space" 
+shows "aff_dim {a}=0"
+  using aff_dim_affine_independent[of "{a}"] affine_independent_sing by auto
+
+lemma aff_dim_inner_basis_exists:
+  fixes V :: "('n::euclidean_space) set" 
+  shows "? B. B<=V & (affine hull B=affine hull V) & ~(affine_dependent B) & (of_nat(card B) = aff_dim V+1)"
+proof-
+obtain B where B_def: "~(affine_dependent B) & B<=V & (affine hull B=affine hull V)" using affine_basis_exists[of V] by auto
+moreover hence "of_nat(card B) = aff_dim V+1" using aff_dim_unique by auto
+ultimately show ?thesis by auto
+qed
+
+lemma aff_dim_le_card:
+fixes V :: "('n::euclidean_space) set" 
+assumes "finite V"
+shows "aff_dim V <= of_nat(card V) - 1"
+ proof-
+ obtain B where B_def: "B<=V & (of_nat(card B) = aff_dim V+1)" using aff_dim_inner_basis_exists[of V] by auto 
+ moreover hence "card B <= card V" using assms card_mono by auto
+ ultimately show ?thesis by auto
+qed
+
+lemma aff_dim_parallel_eq:
+fixes S T :: "('n::euclidean_space) set"
+assumes "affine_parallel (affine hull S) (affine hull T)"
+shows "aff_dim S=aff_dim T"
+proof-
+{ assume "T~={}" "S~={}" 
+  from this obtain L where L_def: "subspace L & affine_parallel (affine hull T) L" 
+       using affine_parallel_subspace[of "affine hull T"] affine_affine_hull[of T] affine_hull_nonempty by auto
+  hence "aff_dim T = int(dim L)" using aff_dim_parallel_subspace `T~={}` by auto
+  moreover have "subspace L & affine_parallel (affine hull S) L" 
+     using L_def affine_parallel_assoc[of "affine hull S" "affine hull T" L] assms by auto
+  moreover hence "aff_dim S = int(dim L)" using aff_dim_parallel_subspace `S~={}` by auto 
+  ultimately have ?thesis by auto
+}
+moreover
+{ assume "S={}" hence "S={} & T={}" using assms affine_hull_nonempty unfolding affine_parallel_def by auto
+  hence ?thesis using aff_dim_empty by auto
+}
+moreover
+{ assume "T={}" hence "S={} & T={}" using assms affine_hull_nonempty unfolding affine_parallel_def by auto
+  hence ?thesis using aff_dim_empty by auto
+}
+ultimately show ?thesis by blast
+qed
+
+lemma aff_dim_translation_eq:
+fixes a :: "'n::euclidean_space"
+shows "aff_dim ((%x. a + x) ` S)=aff_dim S" 
+proof-
+have "affine_parallel (affine hull S) (affine hull ((%x. a + x) ` S))" unfolding affine_parallel_def apply (rule exI[of _ "a"]) using affine_hull_translation[of a S] by auto
+from this show ?thesis using  aff_dim_parallel_eq[of S "(%x. a + x) ` S"] by auto 
+qed
+
+lemma aff_dim_affine:
+fixes S L :: "('n::euclidean_space) set"
+assumes "S ~= {}" "affine S"
+assumes "subspace L" "affine_parallel S L"
+shows "aff_dim S=int(dim L)" 
+proof-
+have 1: "(affine hull S) = S" using assms affine_hull_eq[of S] by auto 
+hence "affine_parallel (affine hull S) L" using assms by (simp add:1)
+from this show ?thesis using assms aff_dim_parallel_subspace[of S L] by blast 
+qed
+
+lemma dim_affine_hull:
+fixes S :: "('n::euclidean_space) set"
+shows "dim (affine hull S)=dim S"
+proof-
+have "dim (affine hull S)>=dim S" using dim_subset by auto
+moreover have "dim(span S) >= dim (affine hull S)" using dim_subset affine_hull_subset_span by auto
+moreover have "dim(span S)=dim S" using dim_span by auto
+ultimately show ?thesis by auto
+qed
+
+lemma aff_dim_subspace:
+fixes S :: "('n::euclidean_space) set"
+assumes "S ~= {}" "subspace S"
+shows "aff_dim S=int(dim S)" using aff_dim_affine[of S S] assms subspace_imp_affine[of S] affine_parallel_reflex[of S] by auto 
+
+lemma aff_dim_zero:
+fixes S :: "('n::euclidean_space) set"
+assumes "0 : affine hull S"
+shows "aff_dim S=int(dim S)"
+proof-
+have "subspace(affine hull S)" using subspace_affine[of "affine hull S"] affine_affine_hull assms by auto
+hence "aff_dim (affine hull S) =int(dim (affine hull S))" using assms aff_dim_subspace[of "affine hull S"] by auto  
+from this show ?thesis using aff_dim_affine_hull[of S] dim_affine_hull[of S] by auto
+qed
+
+lemma aff_dim_univ: "aff_dim (UNIV :: ('n::euclidean_space) set) = int(DIM('n))"
+  using aff_dim_subspace[of "(UNIV :: ('n::euclidean_space) set)"]
+    dim_UNIV[where 'a="'n::euclidean_space"] by auto
+
+lemma aff_dim_geq:
+  fixes V :: "('n::euclidean_space) set"
+  shows "aff_dim V >= -1"
+proof-
+obtain B where B_def: "affine hull B = affine hull V & ~ affine_dependent B & int (card B) = aff_dim V + 1" using aff_dim_basis_exists by auto
+from this show ?thesis by auto
+qed
+
+lemma independent_card_le_aff_dim: 
+  assumes "(B::('n::euclidean_space) set) <= V"
+  assumes "~(affine_dependent B)" 
+  shows "int(card B) <= aff_dim V+1"
+proof-
+{ assume "B~={}" 
+  from this obtain T where T_def: "~(affine_dependent T) & B<=T & T<=V & affine hull T = affine hull V" 
+  using assms extend_to_affine_basis[of B V] by auto
+  hence "of_nat(card T) = aff_dim V+1" using aff_dim_unique by auto
+  hence ?thesis using T_def card_mono[of T B] aff_independent_finite[of T] by auto
+}
+moreover
+{ assume "B={}"
+  moreover have "-1<= aff_dim V" using aff_dim_geq by auto
+  ultimately have ?thesis by auto
+}  ultimately show ?thesis by blast
+qed
+
+lemma aff_dim_subset:
+  fixes S T :: "('n::euclidean_space) set"
+  assumes "S <= T"
+  shows "aff_dim S <= aff_dim T"
+proof-
+obtain B where B_def: "~(affine_dependent B) & B<=S & (affine hull B=affine hull S) & of_nat(card B) = aff_dim S+1" using aff_dim_inner_basis_exists[of S] by auto
+moreover hence "int (card B) <= aff_dim T + 1" using assms independent_card_le_aff_dim[of B T] by auto
+ultimately show ?thesis by auto
+qed
+
+lemma aff_dim_subset_univ:
+fixes S :: "('n::euclidean_space) set"
+shows "aff_dim S <= int(DIM('n))"
+proof - 
+  have "aff_dim (UNIV :: ('n::euclidean_space) set) = int(DIM('n))" using aff_dim_univ by auto
+  from this show "aff_dim (S:: ('n::euclidean_space) set) <= int(DIM('n))" using assms aff_dim_subset[of S "(UNIV :: ('n::euclidean_space) set)"] subset_UNIV by auto
+qed
+
+lemma affine_dim_equal:
+assumes "affine (S :: ('n::euclidean_space) set)" "affine T" "S ~= {}" "S <= T" "aff_dim S = aff_dim T"
+shows "S=T"
+proof-
+obtain a where "a : S" using assms by auto 
+hence "a : T" using assms by auto
+def LS == "{y. ? x : S. (-a)+x=y}"
+hence ls: "subspace LS & affine_parallel S LS" using assms parallel_subspace_explicit[of S a LS] `a : S` by auto 
+hence h1: "int(dim LS) = aff_dim S" using assms aff_dim_affine[of S LS] by auto
+have "T ~= {}" using assms by auto
+def LT == "{y. ? x : T. (-a)+x=y}" 
+hence lt: "subspace LT & affine_parallel T LT" using assms parallel_subspace_explicit[of T a LT] `a : T` by auto
+hence "int(dim LT) = aff_dim T" using assms aff_dim_affine[of T LT] `T ~= {}` by auto 
+hence "dim LS = dim LT" using h1 assms by auto
+moreover have "LS <= LT" using LS_def LT_def assms by auto
+ultimately have "LS=LT" using subspace_dim_equal[of LS LT] ls lt by auto
+moreover have "S = {x. ? y : LS. a+y=x}" using LS_def by auto 
+moreover have "T = {x. ? y : LT. a+y=x}" using LT_def by auto
+ultimately show ?thesis by auto 
+qed
+
+lemma affine_hull_univ:
+fixes S :: "('n::euclidean_space) set"
+assumes "aff_dim S = int(DIM('n))"
+shows "affine hull S = (UNIV :: ('n::euclidean_space) set)"
+proof-
+have "S ~= {}" using assms aff_dim_empty[of S] by auto
+have h0: "S <= affine hull S" using hull_subset[of S _] by auto
+have h1: "aff_dim (UNIV :: ('n::euclidean_space) set) = aff_dim S" using aff_dim_univ assms by auto
+hence h2: "aff_dim (affine hull S) <= aff_dim (UNIV :: ('n::euclidean_space) set)" using aff_dim_subset_univ[of "affine hull S"] assms h0 by auto  
+have h3: "aff_dim S <= aff_dim (affine hull S)" using h0 aff_dim_subset[of S "affine hull S"] assms by auto
+hence h4: "aff_dim (affine hull S) = aff_dim (UNIV :: ('n::euclidean_space) set)" using h0 h1 h2 by auto
+from this show ?thesis using affine_dim_equal[of "affine hull S" "(UNIV :: ('n::euclidean_space) set)"] affine_affine_hull[of S] affine_UNIV assms h4 h0 `S ~= {}` by auto
+qed
+
+lemma aff_dim_convex_hull:
+fixes S :: "('n::euclidean_space) set"
+shows "aff_dim (convex hull S)=aff_dim S"
+  using aff_dim_affine_hull[of S] convex_hull_subset_affine_hull[of S] 
+  hull_subset[of S "convex"] aff_dim_subset[of S "convex hull S"] 
+  aff_dim_subset[of "convex hull S" "affine hull S"] by auto
+
+lemma aff_dim_cball:
+fixes a :: "'n::euclidean_space" 
+assumes "0<e"
+shows "aff_dim (cball a e) = int (DIM('n))"
+proof-
+have "(%x. a + x) ` (cball 0 e)<=cball a e" unfolding cball_def dist_norm by auto
+hence "aff_dim (cball (0 :: 'n::euclidean_space) e) <= aff_dim (cball a e)"
+  using aff_dim_translation_eq[of a "cball 0 e"] 
+        aff_dim_subset[of "op + a ` cball 0 e" "cball a e"] by auto
+moreover have "aff_dim (cball (0 :: 'n::euclidean_space) e) = int (DIM('n))" 
+   using hull_inc[of "(0 :: 'n::euclidean_space)" "cball 0 e"] centre_in_cball[of "(0 :: 'n::euclidean_space)"] assms 
+   by (simp add: dim_cball[of e] aff_dim_zero[of "cball 0 e"])
+ultimately show ?thesis using aff_dim_subset_univ[of "cball a e"] by auto 
+qed
+
+lemma aff_dim_open:
+fixes S :: "('n::euclidean_space) set"
+assumes "open S" "S ~= {}"
+shows "aff_dim S = int (DIM('n))"
+proof-
+obtain x where "x:S" using assms by auto
+from this obtain e where e_def: "e>0 & cball x e <= S" using open_contains_cball[of S] assms by auto
+from this have "aff_dim (cball x e) <= aff_dim S" using aff_dim_subset by auto
+from this show ?thesis using aff_dim_cball[of e x] aff_dim_subset_univ[of S] e_def by auto     
+qed
+
+lemma low_dim_interior:
+fixes S :: "('n::euclidean_space) set"
+assumes "~(aff_dim S = int (DIM('n)))"
+shows "interior S = {}"
+proof-
+have "aff_dim(interior S) <= aff_dim S" 
+   using interior_subset aff_dim_subset[of "interior S" S] by auto 
+from this show ?thesis using aff_dim_open[of "interior S"] aff_dim_subset_univ[of S] assms by auto   
+qed
+
+subsection{* Relative Interior of a Set *}
+
+definition "rel_interior S = {x. ? T. openin (subtopology euclidean (affine hull S)) T & x : T & T <= S}"
+
+lemma rel_interior: "rel_interior S = {x : S. ? T. open T & x : T & (T Int (affine hull S)) <= S}"
+  unfolding rel_interior_def[of S] openin_open[of "affine hull S"] apply auto
+proof-
+fix x T assume a: "x:S" "open T" "x : T" "(T Int (affine hull S)) <= S"
+hence h1: "x : T Int affine hull S" using hull_inc by auto
+show "EX Tb. (EX Ta. open Ta & Tb = affine hull S Int Ta) & x : Tb & Tb <= S"
+apply (rule_tac x="T Int (affine hull S)" in exI)
+using a h1 by auto
+qed
+
+lemma mem_rel_interior: 
+     "x : rel_interior S <-> (? T. open T & x : (T Int S) & (T Int (affine hull S)) <= S)" 
+     by (auto simp add: rel_interior)
+
+lemma mem_rel_interior_ball: "x : rel_interior S <-> x : S & (? e. 0 < e & ((ball x e) Int (affine hull S)) <= S)"
+  apply (simp add: rel_interior, safe)
+  apply (force simp add: open_contains_ball)
+  apply (rule_tac x="ball x e" in exI)
+  apply (simp add: open_ball centre_in_ball)
+  done
+
+lemma rel_interior_ball: 
+      "rel_interior S = {x : S. ? e. e>0 & ((ball x e) Int (affine hull S)) <= S}" 
+      using mem_rel_interior_ball [of _ S] by auto 
+
+lemma mem_rel_interior_cball: "x : rel_interior S <-> x : S & (? e. 0 < e & ((cball x e) Int (affine hull S)) <= S)"
+  apply (simp add: rel_interior, safe) 
+  apply (force simp add: open_contains_cball)
+  apply (rule_tac x="ball x e" in exI)
+  apply (simp add: open_ball centre_in_ball subset_trans [OF ball_subset_cball])
+  apply auto
+  done
+
+lemma rel_interior_cball: "rel_interior S = {x : S. ? e. e>0 & ((cball x e) Int (affine hull S)) <= S}"       using mem_rel_interior_cball [of _ S] by auto
+
+lemma rel_interior_empty: "rel_interior {} = {}" 
+   by (auto simp add: rel_interior_def) 
+
+lemma affine_hull_sing: "affine hull {a :: 'n::euclidean_space} = {a}"
+by (metis affine_hull_eq affine_sing)
+
+lemma rel_interior_sing: "rel_interior {a :: 'n::euclidean_space} = {a}"
+   unfolding rel_interior_ball affine_hull_sing apply auto
+   apply(rule_tac x="1 :: real" in exI) apply simp
+   done
+
+lemma subset_rel_interior:
+fixes S T :: "('n::euclidean_space) set"
+assumes "S<=T" "affine hull S=affine hull T"
+shows "rel_interior S <= rel_interior T"
+  using assms by (auto simp add: rel_interior_def)  
+
+lemma rel_interior_subset: "rel_interior S <= S" 
+   by (auto simp add: rel_interior_def)
+
+lemma rel_interior_subset_closure: "rel_interior S <= closure S" 
+   using rel_interior_subset by (auto simp add: closure_def) 
+
+lemma interior_subset_rel_interior: "interior S <= rel_interior S" 
+   by (auto simp add: rel_interior interior_def)
+
+lemma interior_rel_interior:
+fixes S :: "('n::euclidean_space) set"
+assumes "aff_dim S = int(DIM('n))"
+shows "rel_interior S = interior S"
+proof -
+have "affine hull S = UNIV" using assms affine_hull_univ[of S] by auto 
+from this show ?thesis unfolding rel_interior interior_def by auto
+qed
+
+lemma rel_interior_open:
+fixes S :: "('n::euclidean_space) set"
+assumes "open S"
+shows "rel_interior S = S"
+by (metis assms interior_eq interior_subset_rel_interior rel_interior_subset set_eq_subset)
+
+lemma interior_rel_interior_gen:
+fixes S :: "('n::euclidean_space) set"
+shows "interior S = (if aff_dim S = int(DIM('n)) then rel_interior S else {})"
+by (metis interior_rel_interior low_dim_interior)
+
+lemma rel_interior_univ: 
+fixes S :: "('n::euclidean_space) set"
+shows "rel_interior (affine hull S) = affine hull S"
+proof-
+have h1: "rel_interior (affine hull S) <= affine hull S" using rel_interior_subset by auto 
+{ fix x assume x_def: "x : affine hull S"
+  obtain e :: real where "e=1" by auto
+  hence "e>0 & ball x e Int affine hull (affine hull S) <= affine hull S" using hull_hull[of _ S] by auto
+  hence "x : rel_interior (affine hull S)" using x_def rel_interior_ball[of "affine hull S"] by auto
+} from this show ?thesis using h1 by auto 
+qed
+
+lemma rel_interior_univ2: "rel_interior (UNIV :: ('n::euclidean_space) set) = UNIV"
+by (metis open_UNIV rel_interior_open)
+
+lemma rel_interior_convex_shrink:
+  fixes S :: "('a::euclidean_space) set"
+  assumes "convex S" "c : rel_interior S" "x : S" "0 < e" "e <= 1"
+  shows "x - e *\<^sub>R (x - c) : rel_interior S"
+proof- 
+(* Proof is a modified copy of the proof of similar lemma mem_interior_convex_shrink 
+*)
+obtain d where "d>0" and d:"ball c d Int affine hull S <= S" 
+  using assms(2) unfolding  mem_rel_interior_ball by auto
+{   fix y assume as:"dist (x - e *\<^sub>R (x - c)) y < e * d & y : affine hull S"
+    have *:"y = (1 - (1 - e)) *\<^sub>R ((1 / e) *\<^sub>R y - ((1 - e) / e) *\<^sub>R x) + (1 - e) *\<^sub>R x" using `e>0` by (auto simp add: scaleR_left_diff_distrib scaleR_right_diff_distrib)
+    have "x : affine hull S" using assms hull_subset[of S] by auto
+    moreover have "1 / e + - ((1 - e) / e) = 1" 
+       using `e>0` mult_left.diff[of "1" "(1-e)" "1/e"] by auto
+    ultimately have **: "(1 / e) *\<^sub>R y - ((1 - e) / e) *\<^sub>R x : affine hull S"
+        using as affine_affine_hull[of S] mem_affine[of "affine hull S" y x "(1 / e)" "-((1 - e) / e)"] by (simp add: algebra_simps)     
+    have "dist c ((1 / e) *\<^sub>R y - ((1 - e) / e) *\<^sub>R x) = abs(1/e) * norm (e *\<^sub>R c - y + (1 - e) *\<^sub>R x)"
+      unfolding dist_norm unfolding norm_scaleR[THEN sym] apply(rule arg_cong[where f=norm]) using `e>0`
+      by(auto simp add:euclidean_eq[where 'a='a] field_simps) 
+    also have "... = abs(1/e) * norm (x - e *\<^sub>R (x - c) - y)" by(auto intro!:arg_cong[where f=norm] simp add: algebra_simps)
+    also have "... < d" using as[unfolded dist_norm] and `e>0`
+      by(auto simp add:pos_divide_less_eq[OF `e>0`] real_mult_commute)
+    finally have "y : S" apply(subst *) 
+apply(rule assms(1)[unfolded convex_alt,rule_format])
+      apply(rule d[unfolded subset_eq,rule_format]) unfolding mem_ball using assms(3-5) ** by auto
+} hence "ball (x - e *\<^sub>R (x - c)) (e*d) Int affine hull S <= S" by auto
+moreover have "0 < e*d" using `0<e` `0<d` using real_mult_order by auto
+moreover have "c : S" using assms rel_interior_subset by auto
+moreover hence "x - e *\<^sub>R (x - c) : S"
+   using mem_convex[of S x c e] apply (simp add: algebra_simps) using assms by auto
+ultimately show ?thesis 
+  using mem_rel_interior_ball[of "x - e *\<^sub>R (x - c)" S] `e>0` by auto
+qed
+
+lemma interior_real_semiline:
+fixes a :: real
+shows "interior {a..} = {a<..}"
+proof-
+{ fix y assume "a<y" hence "y : interior {a..}"
+  apply (simp add: mem_interior) apply (rule_tac x="(y-a)" in exI) apply (auto simp add: dist_norm) 
+  done }
+moreover
+{ fix y assume "y : interior {a..}" (*hence "a<=y" using interior_subset by auto*)
+  from this obtain e where e_def: "e>0 & cball y e \<subseteq> {a..}" 
+     using mem_interior_cball[of y "{a..}"] by auto
+  moreover hence "y-e : cball y e" by (auto simp add: cball_def dist_norm) 
+  ultimately have "a<=y-e" by auto
+  hence "a<y" using e_def by auto
+} ultimately show ?thesis by auto
+qed
+
+lemma rel_interior_real_interval:
+  fixes a b :: real assumes "a < b" shows "rel_interior {a..b} = {a<..<b}"
+proof-
+  have "{a<..<b} \<noteq> {}" using assms unfolding set_eq_iff by (auto intro!: exI[of _ "(a + b) / 2"])
+  then show ?thesis
+    using interior_rel_interior_gen[of "{a..b}", symmetric]
+    by (simp split: split_if_asm add: interior_closed_interval)
+qed
+
+lemma rel_interior_real_semiline:
+  fixes a :: real shows "rel_interior {a..} = {a<..}"
+proof-
+  have *: "{a<..} \<noteq> {}" unfolding set_eq_iff by (auto intro!: exI[of _ "a + 1"])
+  then show ?thesis using interior_real_semiline
+     interior_rel_interior_gen[of "{a..}"]
+     by (auto split: split_if_asm)
+qed
+
+subsection "Relative open"
+
+definition "rel_open S <-> (rel_interior S) = S"
+
+lemma rel_open: "rel_open S <-> openin (subtopology euclidean (affine hull S)) S"
+ unfolding rel_open_def rel_interior_def apply auto
+ using openin_subopen[of "subtopology euclidean (affine hull S)" S] by auto
+
+lemma opein_rel_interior: 
+  "openin (subtopology euclidean (affine hull S)) (rel_interior S)"
+  apply (simp add: rel_interior_def)
+  apply (subst openin_subopen) by blast
+
+lemma affine_rel_open: 
+  fixes S :: "('n::euclidean_space) set"
+  assumes "affine S" shows "rel_open S" 
+  unfolding rel_open_def using assms rel_interior_univ[of S] affine_hull_eq[of S] by metis
+
+lemma affine_closed: 
+  fixes S :: "('n::euclidean_space) set"
+  assumes "affine S" shows "closed S"
+proof-
+{ assume "S ~= {}"
+  from this obtain L where L_def: "subspace L & affine_parallel S L"
+     using assms affine_parallel_subspace[of S] by auto
+  from this obtain "a" where a_def: "S=(op + a ` L)" 
+     using affine_parallel_def[of L S] affine_parallel_commut by auto 
+  have "closed L" using L_def closed_subspace by auto
+  hence "closed S" using closed_translation a_def by auto
+} from this show ?thesis by auto
+qed
+
+lemma closure_affine_hull:
+  fixes S :: "('n::euclidean_space) set"
+  shows "closure S <= affine hull S"
+proof-
+have "closure S <= closure (affine hull S)" using subset_closure by auto
+moreover have "closure (affine hull S) = affine hull S" 
+   using affine_affine_hull affine_closed[of "affine hull S"] closure_eq by auto
+ultimately show ?thesis by auto  
+qed
+
+lemma closure_same_affine_hull:
+  fixes S :: "('n::euclidean_space) set"
+  shows "affine hull (closure S) = affine hull S"
+proof-
+have "affine hull (closure S) <= affine hull S"
+   using hull_mono[of "closure S" "affine hull S" "affine"] closure_affine_hull[of S] hull_hull[of "affine" S] by auto
+moreover have "affine hull (closure S) >= affine hull S"  
+   using hull_mono[of "S" "closure S" "affine"] closure_subset by auto
+ultimately show ?thesis by auto  
+qed
+
+lemma closure_aff_dim: 
+  fixes S :: "('n::euclidean_space) set"
+  shows "aff_dim (closure S) = aff_dim S"
+proof-
+have "aff_dim S <= aff_dim (closure S)" using aff_dim_subset closure_subset by auto
+moreover have "aff_dim (closure S) <= aff_dim (affine hull S)" 
+  using aff_dim_subset closure_affine_hull by auto
+moreover have "aff_dim (affine hull S) = aff_dim S" using aff_dim_affine_hull by auto
+ultimately show ?thesis by auto
+qed
+
+lemma rel_interior_closure_convex_shrink:
+  fixes S :: "(_::euclidean_space) set"
+  assumes "convex S" "c : rel_interior S" "x : closure S" "0 < e" "e <= 1"
+  shows "x - e *\<^sub>R (x - c) : rel_interior S"
+proof- 
+(* Proof is a modified copy of the proof of similar lemma mem_interior_closure_convex_shrink
+*)
+obtain d where "d>0" and d:"ball c d Int affine hull S <= S" 
+  using assms(2) unfolding mem_rel_interior_ball by auto
+have "EX y : S. norm (y - x) * (1 - e) < e * d" proof(cases "x : S")
+    case True thus ?thesis using `e>0` `d>0` by(rule_tac bexI[where x=x], auto intro!: mult_pos_pos) next
+    case False hence x:"x islimpt S" using assms(3)[unfolded closure_def] by auto
+    show ?thesis proof(cases "e=1")
+      case True obtain y where "y : S" "y ~= x" "dist y x < 1"
+        using x[unfolded islimpt_approachable,THEN spec[where x=1]] by auto
+      thus ?thesis apply(rule_tac x=y in bexI) unfolding True using `d>0` by auto next
+      case False hence "0 < e * d / (1 - e)" and *:"1 - e > 0"
+        using `e<=1` `e>0` `d>0` by(auto intro!:mult_pos_pos divide_pos_pos)
+      then obtain y where "y : S" "y ~= x" "dist y x < e * d / (1 - e)"
+        using x[unfolded islimpt_approachable,THEN spec[where x="e*d / (1 - e)"]] by auto
+      thus ?thesis apply(rule_tac x=y in bexI) unfolding dist_norm using pos_less_divide_eq[OF *] by auto qed qed
+  then obtain y where "y : S" and y:"norm (y - x) * (1 - e) < e * d" by auto
+  def z == "c + ((1 - e) / e) *\<^sub>R (x - y)"
+  have *:"x - e *\<^sub>R (x - c) = y - e *\<^sub>R (y - z)" unfolding z_def using `e>0` by (auto simp add: scaleR_right_diff_distrib scaleR_right_distrib scaleR_left_diff_distrib)
+  have zball: "z\<in>ball c d"
+    using mem_ball z_def dist_norm[of c] using y and assms(4,5) by (auto simp add:field_simps norm_minus_commute)
+  have "x : affine hull S" using closure_affine_hull assms by auto
+  moreover have "y : affine hull S" using `y : S` hull_subset[of S] by auto
+  moreover have "c : affine hull S" using assms rel_interior_subset hull_subset[of S] by auto
+  ultimately have "z : affine hull S" 
+    using z_def affine_affine_hull[of S] 
+          mem_affine_3_minus [of "affine hull S" c x y "(1 - e) / e"] 
+          assms by (auto simp add: field_simps)
+  hence "z : S" using d zball by auto
+  obtain d1 where "d1>0" and d1:"ball z d1 <= ball c d"
+    using zball open_ball[of c d] openE[of "ball c d" z] by auto
+  hence "(ball z d1) Int (affine hull S) <= (ball c d) Int (affine hull S)" by auto
+  hence "(ball z d1) Int (affine hull S) <= S" using d by auto 
+  hence "z : rel_interior S" using mem_rel_interior_ball using `d1>0` `z : S` by auto
+  hence "y - e *\<^sub>R (y - z) : rel_interior S" using rel_interior_convex_shrink[of S z y e] assms`y : S` by auto
+  thus ?thesis using * by auto 
+qed
+
+subsection{* Relative interior preserves under linear transformations *}
+
+lemma rel_interior_translation_aux:
+fixes a :: "'n::euclidean_space"
+shows "((%x. a + x) ` rel_interior S) <= rel_interior ((%x. a + x) ` S)"
+proof-
+{ fix x assume x_def: "x : rel_interior S"
+  from this obtain T where T_def: "open T & x : (T Int S) & (T Int (affine hull S)) <= S" using mem_rel_interior[of x S] by auto 
+  from this have "open ((%x. a + x) ` T)" and 
+    "(a + x) : (((%x. a + x) ` T) Int ((%x. a + x) ` S))" and 
+    "(((%x. a + x) ` T) Int (affine hull ((%x. a + x) ` S))) <= ((%x. a + x) ` S)" 
+    using affine_hull_translation[of a S] open_translation[of T a] x_def by auto 
+  from this have "(a+x) : rel_interior ((%x. a + x) ` S)" 
+    using mem_rel_interior[of "a+x" "((%x. a + x) ` S)"] by auto 
+} from this show ?thesis by auto 
+qed
+
+lemma rel_interior_translation:
+fixes a :: "'n::euclidean_space"
+shows "rel_interior ((%x. a + x) ` S) = ((%x. a + x) ` rel_interior S)"
+proof-
+have "(%x. (-a) + x) ` rel_interior ((%x. a + x) ` S) <= rel_interior S" 
+   using rel_interior_translation_aux[of "-a" "(%x. a + x) ` S"] 
+         translation_assoc[of "-a" "a"] by auto
+hence "((%x. a + x) ` rel_interior S) >= rel_interior ((%x. a + x) ` S)" 
+   using translation_inverse_subset[of a "rel_interior (op + a ` S)" "rel_interior S"] 
+   by auto
+from this show ?thesis using  rel_interior_translation_aux[of a S] by auto 
+qed
+
+
+lemma affine_hull_linear_image:
+assumes "bounded_linear f"
+shows "f ` (affine hull s) = affine hull f ` s"
+(* Proof is a modified copy of the proof of similar lemma convex_hull_linear_image
+*)
+  apply rule unfolding subset_eq ball_simps apply(rule_tac[!] hull_induct, rule hull_inc) prefer 3  
+  apply(erule imageE)apply(rule_tac x=xa in image_eqI) apply assumption
+  apply(rule hull_subset[unfolded subset_eq, rule_format]) apply assumption
+proof-
+  interpret f: bounded_linear f by fact
+  show "affine {x. f x : affine hull f ` s}" 
+  unfolding affine_def by(auto simp add: f.scaleR f.add affine_affine_hull[unfolded affine_def, rule_format]) next
+  interpret f: bounded_linear f by fact
+  show "affine {x. x : f ` (affine hull s)}" using affine_affine_hull[unfolded affine_def, of s] 
+    unfolding affine_def by (auto simp add: f.scaleR [symmetric] f.add [symmetric])
+qed auto
+
+
+lemma rel_interior_injective_on_span_linear_image:
+fixes f :: "('m::euclidean_space) => ('n::euclidean_space)"
+fixes S :: "('m::euclidean_space) set"
+assumes "bounded_linear f" and "inj_on f (span S)"
+shows "rel_interior (f ` S) = f ` (rel_interior S)"
+proof-
+{ fix z assume z_def: "z : rel_interior (f ` S)"
+  have "z : f ` S" using z_def rel_interior_subset[of "f ` S"] by auto
+  from this obtain x where x_def: "x : S & (f x = z)" by auto
+  obtain e2 where e2_def: "e2>0 & cball z e2 Int affine hull (f ` S) <= (f ` S)" 
+    using z_def rel_interior_cball[of "f ` S"] by auto
+  obtain K where K_def: "K>0 & (! x. norm (f x) <= norm x * K)" 
+   using assms RealVector.bounded_linear.pos_bounded[of f] by auto
+  def e1 == "1/K" hence e1_def: "e1>0 & (! x. e1 * norm (f x) <= norm x)" 
+   using K_def pos_le_divide_eq[of e1] by auto
+  def e == "e1 * e2" hence "e>0" using e1_def e2_def real_mult_order by auto 
+  { fix y assume y_def: "y : cball x e Int affine hull S"
+    from this have h1: "f y : affine hull (f ` S)" 
+      using affine_hull_linear_image[of f S] assms by auto 
+    from y_def have "norm (x-y)<=e1 * e2" 
+      using cball_def[of x e] dist_norm[of x y] e_def by auto
+    moreover have "(f x)-(f y)=f (x-y)"
+       using assms linear_sub[of f x y] linear_conv_bounded_linear[of f] by auto
+    moreover have "e1 * norm (f (x-y)) <= norm (x-y)" using e1_def by auto
+    ultimately have "e1 * norm ((f x)-(f y)) <= e1 * e2" by auto
+    hence "(f y) : (cball z e2)" 
+      using cball_def[of "f x" e2] dist_norm[of "f x" "f y"] e1_def x_def by auto
+    hence "f y : (f ` S)" using y_def e2_def h1 by auto
+    hence "y : S" using assms y_def hull_subset[of S] affine_hull_subset_span 
+         inj_on_image_mem_iff[of f "span S" S y] by auto
+  } 
+  hence "z : f ` (rel_interior S)" using mem_rel_interior_cball[of x S] `e>0` x_def by auto
+} 
+moreover
+{ fix x assume x_def: "x : rel_interior S"
+  from this obtain e2 where e2_def: "e2>0 & cball x e2 Int affine hull S <= S" 
+    using rel_interior_cball[of S] by auto
+  have "x : S" using x_def rel_interior_subset by auto
+  hence *: "f x : f ` S" by auto
+  have "! x:span S. f x = 0 --> x = 0" 
+    using assms subspace_span linear_conv_bounded_linear[of f] 
+          linear_injective_on_subspace_0[of f "span S"] by auto
+  from this obtain e1 where e1_def: "e1>0 & (! x : span S. e1 * norm x <= norm (f x))" 
+   using assms injective_imp_isometric[of "span S" f] 
+         subspace_span[of S] closed_subspace[of "span S"] by auto
+  def e == "e1 * e2" hence "e>0" using e1_def e2_def real_mult_order by auto 
+  { fix y assume y_def: "y : cball (f x) e Int affine hull (f ` S)"
+    from this have "y : f ` (affine hull S)" using affine_hull_linear_image[of f S] assms by auto 
+    from this obtain xy where xy_def: "xy : affine hull S & (f xy = y)" by auto
+    from this y_def have "norm ((f x)-(f xy))<=e1 * e2" 
+      using cball_def[of "f x" e] dist_norm[of "f x" y] e_def by auto
+    moreover have "(f x)-(f xy)=f (x-xy)"
+       using assms linear_sub[of f x xy] linear_conv_bounded_linear[of f] by auto
+    moreover have "x-xy : span S" 
+       using subspace_sub[of "span S" x xy] subspace_span `x : S` xy_def 
+             affine_hull_subset_span[of S] span_inc by auto
+    moreover hence "e1 * norm (x-xy) <= norm (f (x-xy))" using e1_def by auto
+    ultimately have "e1 * norm (x-xy) <= e1 * e2" by auto
+    hence "xy : (cball x e2)"  using cball_def[of x e2] dist_norm[of x xy] e1_def by auto
+    hence "y : (f ` S)" using xy_def e2_def by auto
+  } 
+  hence "(f x) : rel_interior (f ` S)" 
+     using mem_rel_interior_cball[of "(f x)" "(f ` S)"] * `e>0` by auto
+} 
+ultimately show ?thesis by auto
+qed
+
+lemma rel_interior_injective_linear_image:
+fixes f :: "('m::euclidean_space) => ('n::euclidean_space)"
+assumes "bounded_linear f" and "inj f"
+shows "rel_interior (f ` S) = f ` (rel_interior S)"
+using assms rel_interior_injective_on_span_linear_image[of f S] 
+      subset_inj_on[of f "UNIV" "span S"] by auto
+
+subsection{* Some Properties of subset of standard basis *}
+
+lemma affine_hull_substd_basis: assumes "d\<subseteq>{..<DIM('a::euclidean_space)}"
+  shows "affine hull (insert 0 {basis i | i. i : d}) =
+  {x::'a::euclidean_space. (!i<DIM('a). i ~: d --> x$$i = 0)}"
+ (is "affine hull (insert 0 ?A) = ?B")
+proof- have *:"\<And>A. op + (0\<Colon>'a) ` A = A" "\<And>A. op + (- (0\<Colon>'a)) ` A = A" by auto
+  show ?thesis unfolding affine_hull_insert_span_gen span_substd_basis[OF assms,THEN sym] * ..
+qed
+
+lemma affine_hull_convex_hull: "affine hull (convex hull S) = affine hull S"
+by (metis Int_absorb1 Int_absorb2 convex_hull_subset_affine_hull hull_hull hull_mono hull_subset)
+
 subsection {* Openness and compactness are preserved by convex hull operation. *}
 
 lemma open_convex_hull[intro]:
@@ -1525,6 +3105,61 @@
   "convex hull ((\<lambda>x. a + c *\<^sub>R x) ` s) = (\<lambda>x. a + c *\<^sub>R x) ` (convex hull s)"
 by(simp only: image_image[THEN sym] convex_hull_scaling convex_hull_translation)
 
+subsection {* Convexity of cone hulls *}
+
+lemma convex_cone_hull:
+fixes S :: "('m::euclidean_space) set"
+assumes "convex S"
+shows "convex (cone hull S)"
+proof-
+{ fix x y assume xy_def: "x : cone hull S & y : cone hull S"
+  hence "S ~= {}" using cone_hull_empty_iff[of S] by auto
+  fix u v assume uv_def: "u>=0 & v>=0 & (u :: real)+v=1"
+  hence *: "u *\<^sub>R x : cone hull S & v *\<^sub>R y : cone hull S"
+     using cone_cone_hull[of S] xy_def cone_def[of "cone hull S"] by auto
+  from * obtain cx xx where x_def: "u *\<^sub>R x = cx *\<^sub>R xx & (cx :: real)>=0 & xx : S"
+     using cone_hull_expl[of S] by auto
+  from * obtain cy yy where y_def: "v *\<^sub>R y = cy *\<^sub>R yy & (cy :: real)>=0 & yy : S"
+     using cone_hull_expl[of S] by auto
+  { assume "cx+cy<=0" hence "u *\<^sub>R x=0 & v *\<^sub>R y=0" using x_def y_def by auto
+    hence "u *\<^sub>R x+ v *\<^sub>R y = 0" by auto
+    hence "u *\<^sub>R x+ v *\<^sub>R y : cone hull S" using cone_hull_contains_0[of S] `S ~= {}` by auto
+  }
+  moreover
+  { assume "cx+cy>0"
+    hence "(cx/(cx+cy)) *\<^sub>R xx + (cy/(cx+cy)) *\<^sub>R yy : S"
+      using assms mem_convex_alt[of S xx yy cx cy] x_def y_def by auto
+    hence "cx *\<^sub>R xx + cy *\<^sub>R yy : cone hull S"
+      using mem_cone_hull[of "(cx/(cx+cy)) *\<^sub>R xx + (cy/(cx+cy)) *\<^sub>R yy" S "cx+cy"]
+      `cx+cy>0` by (auto simp add: scaleR_right_distrib)
+    hence "u *\<^sub>R x+ v *\<^sub>R y : cone hull S" using x_def y_def by auto
+  }
+  moreover have "(cx+cy<=0) | (cx+cy>0)" by auto
+  ultimately have "u *\<^sub>R x+ v *\<^sub>R y : cone hull S" by blast
+} from this show ?thesis unfolding convex_def by auto
+qed
+
+lemma cone_convex_hull:
+fixes S :: "('m::euclidean_space) set"
+assumes "cone S"
+shows "cone (convex hull S)"
+proof-
+{ assume "S = {}" hence ?thesis by auto }
+moreover
+{ assume "S ~= {}" hence *: "0:S & (!c. c>0 --> op *\<^sub>R c ` S = S)" using cone_iff[of S] assms by auto
+  { fix c assume "(c :: real)>0"
+    hence "op *\<^sub>R c ` (convex hull S) = convex hull (op *\<^sub>R c ` S)"
+       using convex_hull_scaling[of _ S] by auto
+    also have "...=convex hull S" using * `c>0` by auto
+    finally have "op *\<^sub>R c ` (convex hull S) = convex hull S" by auto
+  }
+  hence "0 : convex hull S & (!c. c>0 --> (op *\<^sub>R c ` (convex hull S)) = (convex hull S))"
+     using * hull_subset[of S convex] by auto
+  hence ?thesis using `S ~= {}` cone_iff[of "convex hull S"] by auto
+}
+ultimately show ?thesis by blast
+qed
+
 subsection {* Convex set as intersection of halfspaces. *}
 
 lemma convex_halfspace_intersection:
@@ -1653,28 +3288,6 @@
   shows "\<Inter> f \<noteq>{}"
   apply(rule helly_induct) using assms by auto
 
-subsection {* Convex hull is "preserved" by a linear function. *}
-
-lemma convex_hull_linear_image:
-  assumes "bounded_linear f"
-  shows "f ` (convex hull s) = convex hull (f ` s)"
-  apply rule unfolding subset_eq ball_simps apply(rule_tac[!] hull_induct, rule hull_inc) prefer 3  
-  apply(erule imageE)apply(rule_tac x=xa in image_eqI) apply assumption
-  apply(rule hull_subset[unfolded subset_eq, rule_format]) apply assumption
-proof-
-  interpret f: bounded_linear f by fact
-  show "convex {x. f x \<in> convex hull f ` s}" 
-  unfolding convex_def by(auto simp add: f.scaleR f.add convex_convex_hull[unfolded convex_def, rule_format]) next
-  interpret f: bounded_linear f by fact
-  show "convex {x. x \<in> f ` (convex hull s)}" using  convex_convex_hull[unfolded convex_def, of s] 
-    unfolding convex_def by (auto simp add: f.scaleR [symmetric] f.add [symmetric])
-qed auto
-
-lemma in_convex_hull_linear_image:
-  assumes "bounded_linear f" "x \<in> convex hull s"
-  shows "(f x) \<in> convex hull (f ` s)"
-using convex_hull_linear_image[OF assms(1)] assms(2) by auto
-
 subsection {* Homeomorphism of all convex compact sets with nonempty interior. *}
 
 lemma compact_frontier_line_lemma:
@@ -2459,43 +4072,49 @@
   apply(rule_tac x=u in exI) defer apply(rule_tac x="\<lambda>x. if x = 0 then 1 - setsum u s else u x" in exI) using assms(2)
   unfolding if_smult and setsum_delta_notmem[OF assms(2)] by auto
 
+lemma substd_simplex: assumes "d\<subseteq>{..<DIM('a::euclidean_space)}"
+  shows "convex hull (insert 0 { basis i | i. i : d}) =
+        {x::'a::euclidean_space . (!i<DIM('a). 0 <= x$$i) & setsum (%i. x$$i) d <= 1 &
+  (!i<DIM('a). i ~: d --> x$$i = 0)}" 
+  (is "convex hull (insert 0 ?p) = ?s")
+(* Proof is a modified copy of the proof of similar lemma std_simplex in Convex_Euclidean_Space.thy *)
+proof- let ?D = d (*"{..<DIM('a::euclidean_space)}"*)
+  have "0 ~: ?p" using assms by (auto simp: image_def)
+  have "{(basis i)::'n::euclidean_space |i. i \<in> ?D} = basis ` ?D" by auto
+  note sumbas = this setsum_reindex[OF basis_inj_on[of d], unfolded o_def, OF assms]
+  show ?thesis unfolding simplex[OF finite_substdbasis `0 ~: ?p`] 
+    apply(rule set_eqI) unfolding mem_Collect_eq apply rule
+    apply(erule exE, (erule conjE)+) apply(erule_tac[2] conjE)+ proof-
+    fix x::"'a::euclidean_space" and u assume as: "\<forall>x\<in>{basis i |i. i \<in>?D}. 0 \<le> u x"
+      "setsum u {basis i |i. i \<in> ?D} \<le> 1" "(\<Sum>x\<in>{basis i |i. i \<in>?D}. u x *\<^sub>R x) = x"
+    have *:"\<forall>i<DIM('a). i:d --> u (basis i) = x$$i" and "(!i<DIM('a). i ~: d --> x $$ i = 0)" using as(3) 
+      unfolding sumbas unfolding substdbasis_expansion_unique[OF assms] by auto
+    hence **:"setsum u {basis i |i. i \<in> ?D} = setsum (op $$ x) ?D" unfolding sumbas 
+      apply-apply(rule setsum_cong2) using assms by auto
+    have " (\<forall>i<DIM('a). 0 \<le> x$$i) \<and> setsum (op $$ x) ?D \<le> 1" 
+      apply - proof(rule,rule,rule)
+      fix i assume i:"i<DIM('a)" have "i : d ==> 0 \<le> x$$i" unfolding *[rule_format,OF i,THEN sym] 
+         apply(rule_tac as(1)[rule_format]) by auto
+      moreover have "i ~: d ==> 0 \<le> x$$i" 
+        using `(!i<DIM('a). i ~: d --> x $$ i = 0)`[rule_format, OF i] by auto
+      ultimately show "0 \<le> x$$i" by auto
+    qed(insert as(2)[unfolded **], auto)
+    from this show " (\<forall>i<DIM('a). 0 \<le> x$$i) \<and> setsum (op $$ x) ?D \<le> 1 & (!i<DIM('a). i ~: d --> x $$ i = 0)" 
+      using `(!i<DIM('a). i ~: d --> x $$ i = 0)` by auto
+  next fix x::"'a::euclidean_space" assume as:"\<forall>i<DIM('a). 0 \<le> x $$ i" "setsum (op $$ x) ?D \<le> 1"
+      "(!i<DIM('a). i ~: d --> x $$ i = 0)"
+    show "\<exists>u. (\<forall>x\<in>{basis i |i. i \<in> ?D}. 0 \<le> u x) \<and>
+      setsum u {basis i |i. i \<in> ?D} \<le> 1 \<and> (\<Sum>x\<in>{basis i |i. i \<in> ?D}. u x *\<^sub>R x) = x"
+      apply(rule_tac x="\<lambda>y. inner y x" in exI) apply(rule,rule) unfolding mem_Collect_eq apply(erule exE)
+      using as(1) apply(erule_tac x=i in allE) unfolding sumbas apply safe unfolding not_less basis_zero
+      unfolding substdbasis_expansion_unique[OF assms] euclidean_component_def[THEN sym]
+      using as(2,3) by(auto simp add:dot_basis not_less  basis_zero) 
+  qed qed
+
 lemma std_simplex:
   "convex hull (insert 0 { basis i | i. i<DIM('a)}) =
         {x::'a::euclidean_space . (\<forall>i<DIM('a). 0 \<le> x$$i) \<and> setsum (\<lambda>i. x$$i) {..<DIM('a)} \<le> 1 }"
-  (is "convex hull (insert 0 ?p) = ?s")
-proof- let ?D = "{..<DIM('a)}"
-  have *:"finite ?p" "0\<notin>?p" by auto
-  have "{(basis i)::'a |i. i<DIM('a)} = basis ` ?D" by auto
-  note sumbas = this  setsum_reindex[OF basis_inj, unfolded o_def]
-  show ?thesis unfolding simplex[OF *] apply(rule set_eqI) unfolding mem_Collect_eq apply rule
-    apply(erule exE, (erule conjE)+) apply(erule_tac[2] conjE)+ proof-
-    fix x::"'a" and u assume as: "\<forall>x\<in>{basis i |i. i<DIM('a)}. 0 \<le> u x"
-      "setsum u {basis i |i. i<DIM('a)} \<le> 1" "(\<Sum>x\<in>{basis i |i. i<DIM('a)}. u x *\<^sub>R x) = x"
-    have *:"\<forall>i<DIM('a). u (basis i) = x$$i" 
-    proof safe case goal1
-      have "x$$i = (\<Sum>j<DIM('a). (if j = i then u (basis j) else 0))"
-        unfolding as(3)[THEN sym] euclidean_component.setsum unfolding  sumbas
-        apply(rule setsum_cong2) by(auto simp add: basis_component)
-      also have "... = u (basis i)" apply(subst setsum_delta) using goal1 by auto
-      finally show ?case by auto
-    qed
-    hence **:"setsum u {basis i |i. i<DIM('a)} = setsum (op $$ x) ?D" unfolding sumbas 
-      apply-apply(rule setsum_cong2) by auto
-    show "(\<forall>i<DIM('a). 0 \<le> x $$ i) \<and> setsum (op $$ x) ?D \<le> 1" apply - proof(rule,rule,rule)
-      fix i assume i:"i<DIM('a)" show "0 \<le> x$$i"  unfolding *[rule_format,OF i,THEN sym]
-        apply(rule_tac as(1)[rule_format]) using i by auto
-    qed(insert as(2)[unfolded **], auto)
-  next fix x::"'a" assume as:"\<forall>i<DIM('a). 0 \<le> x $$ i" "setsum (op $$ x) ?D \<le> 1"
-    show "\<exists>u. (\<forall>x\<in>{basis i |i. i<DIM('a)}. 0 \<le> u x) \<and>
-      setsum u {basis i |i. i<DIM('a)} \<le> 1 \<and> (\<Sum>x\<in>{basis i |i. i<DIM('a)}. u x *\<^sub>R x) = x"
-      apply(rule_tac x="\<lambda>y. inner y x" in exI) apply safe using as(1)
-      proof- show "(\<Sum>y\<in>{basis i |i. i < DIM('a)}. y \<bullet> x) \<le> 1" unfolding sumbas
-          using as(2) unfolding euclidean_component_def[THEN sym] .
-        show "(\<Sum>xa\<in>{basis i |i. i < DIM('a)}. (xa \<bullet> x) *\<^sub>R xa) = x" unfolding sumbas
-          apply(subst (7) euclidean_representation) apply(rule setsum_cong2)
-          unfolding euclidean_component_def by auto
-      qed (auto simp add:euclidean_component_def)
-    qed qed
+  using substd_simplex[of "{..<DIM('a)}"] by auto
 
 lemma interior_std_simplex:
   "interior (convex hull (insert 0 { basis i| i. i<DIM('a)})) =
@@ -2552,4 +4171,1252 @@
     also have "\<dots> < 1" unfolding setsum_constant card_enum real_eq_of_nat divide_inverse[THEN sym] by (auto simp add:field_simps)
     finally show "setsum (op $$ ?a) ?D < 1" by auto qed qed
 
+lemma rel_interior_substd_simplex: assumes "d\<subseteq>{..<DIM('a::euclidean_space)}"
+  shows "rel_interior (convex hull (insert 0 { basis i| i. i : d})) =
+  {x::'a::euclidean_space. (\<forall>i\<in>d. 0 < x$$i) & setsum (%i. x$$i) d < 1 & (!i<DIM('a). i ~: d --> x$$i = 0)}"
+  (is "rel_interior (convex hull (insert 0 ?p)) = ?s")
+(* Proof is a modified copy of the proof of similar lemma interior_std_simplex in Convex_Euclidean_Space.thy *)
+proof-
+have "finite d" apply(rule finite_subset) using assms by auto
+{ assume "d={}" hence ?thesis using rel_interior_sing using euclidean_eq[of _ 0] by auto }
+moreover
+{ assume "d~={}"
+have h0: "affine hull (convex hull (insert 0 ?p))={x::'a::euclidean_space. (!i<DIM('a). i ~: d --> x$$i = 0)}" 
+   using affine_hull_convex_hull affine_hull_substd_basis assms by auto 
+have aux: "!x::'n::euclidean_space. !i. ((! i:d. 0 <= x$$i) & (!i. i ~: d --> x$$i = 0))--> 0 <= x$$i" by auto
+{ fix x::"'a::euclidean_space" assume x_def: "x : rel_interior (convex hull (insert 0 ?p))"
+  from this obtain e where e0: "e>0" and 
+       "ball x e Int {xa. (!i<DIM('a). i ~: d --> xa$$i = 0)} <= convex hull (insert 0 ?p)" 
+       using mem_rel_interior_ball[of x "convex hull (insert 0 ?p)"] h0 by auto   
+  hence as: "ALL xa. (dist x xa < e & (!i<DIM('a). i ~: d --> xa$$i = 0)) -->
+    (!i : d. 0 <= xa $$ i) & setsum (op $$ xa) d <= 1"
+    unfolding ball_def unfolding substd_simplex[OF assms] using assms by auto
+  have x0: "(!i<DIM('a). i ~: d --> x$$i = 0)" 
+    using x_def rel_interior_subset  substd_simplex[OF assms] by auto
+  have "(!i : d. 0 < x $$ i) & setsum (op $$ x) d < 1 & (!i<DIM('a). i ~: d --> x$$i = 0)" apply(rule,rule) 
+  proof-
+    fix i::nat assume "i:d" 
+    hence "\<forall>ia\<in>d. 0 \<le> (x - (e / 2) *\<^sub>R basis i) $$ ia" apply-apply(rule as[rule_format,THEN conjunct1])
+      unfolding dist_norm using assms `e>0` x0 by auto
+    thus "0 < x $$ i" apply(erule_tac x=i in ballE) using `e>0` `i\<in>d` assms by auto
+  next obtain a where a:"a:d" using `d ~= {}` by auto
+    have **:"dist x (x + (e / 2) *\<^sub>R basis a) < e"
+      using  `e>0` and Euclidean_Space.norm_basis[of a]
+      unfolding dist_norm by auto
+    have "\<And>i. (x + (e / 2) *\<^sub>R basis a) $$ i = x$$i + (if i = a then e/2 else 0)"
+      unfolding euclidean_simps using a assms by auto
+    hence *:"setsum (op $$ (x + (e / 2) *\<^sub>R basis a)) d =
+      setsum (\<lambda>i. x$$i + (if a = i then e/2 else 0)) d" by(rule_tac setsum_cong, auto)
+    have h1: "(ALL i<DIM('a). i ~: d --> (x + (e / 2) *\<^sub>R basis a) $$ i = 0)"
+      using as[THEN spec[where x="x + (e / 2) *\<^sub>R basis a"]] `a:d` using x0
+      by(auto simp add: norm_basis elim:allE[where x=a]) 
+    have "setsum (op $$ x) d < setsum (op $$ (x + (e / 2) *\<^sub>R basis a)) d" unfolding * setsum_addf
+      using `0<e` `a:d` using `finite d` by(auto simp add: setsum_delta')
+    also have "\<dots> \<le> 1" using ** h1 as[rule_format, of "x + (e / 2) *\<^sub>R basis a"] by auto
+    finally show "setsum (op $$ x) d < 1 & (!i<DIM('a). i ~: d --> x$$i = 0)" using x0 by auto 
+  qed
+}
+moreover
+{
+  fix x::"'a::euclidean_space" assume as: "x : ?s"
+  have "!i. ((0<x$$i) | (0=x$$i) --> 0<=x$$i)" by auto
+  moreover have "!i. (i:d) | (i ~: d)" by auto
+  ultimately 
+  have "!i. ( (ALL i:d. 0 < x$$i) & (ALL i. i ~: d --> x$$i = 0) ) --> 0 <= x$$i" by metis
+  hence h2: "x : convex hull (insert 0 ?p)" using as assms 
+    unfolding substd_simplex[OF assms] by fastsimp 
+  obtain a where a:"a:d" using `d ~= {}` by auto
+  let ?d = "(1 - setsum (op $$ x) d) / real (card d)"
+  have "card d >= 1" using `d ~={}` card_ge1[of d] using `finite d` by auto
+  have "Min ((op $$ x) ` d) > 0" apply(rule Min_grI) using as `card d >= 1` `finite d` by auto
+  moreover have "?d > 0" apply(rule divide_pos_pos) using as using `card d >= 1` by(auto simp add: Suc_le_eq)
+  ultimately have h3: "min (Min ((op $$ x) ` d)) ?d > 0" by auto
+
+  have "x : rel_interior (convex hull (insert 0 ?p))"
+    unfolding rel_interior_ball mem_Collect_eq h0 apply(rule,rule h2)
+    unfolding substd_simplex[OF assms]
+    apply(rule_tac x="min (Min ((op $$ x) ` d)) ?d" in exI) apply(rule,rule h3) apply safe unfolding mem_ball
+  proof- fix y::'a assume y:"dist x y < min (Min (op $$ x ` d)) ?d" and y2:"(!i<DIM('a). i ~: d --> y$$i = 0)"
+    have "setsum (op $$ y) d \<le> setsum (\<lambda>i. x$$i + ?d) d" proof(rule setsum_mono)
+      fix i assume i:"i\<in>d"
+      have "abs (y$$i - x$$i) < ?d" apply(rule le_less_trans) using component_le_norm[of "y - x" i]
+        using y[unfolded min_less_iff_conj dist_norm, THEN conjunct2]
+        by(auto simp add: norm_minus_commute)
+      thus "y $$ i \<le> x $$ i + ?d" by auto qed
+    also have "\<dots> \<le> 1" unfolding setsum_addf setsum_constant card_enum real_eq_of_nat
+      using `card d >= 1` by(auto simp add: Suc_le_eq)
+    finally show "setsum (op $$ y) d \<le> 1" .
+     
+    fix i assume "i<DIM('a)" thus "0 \<le> y$$i" 
+    proof(cases "i\<in>d") case True
+      have "norm (x - y) < x$$i" using y[unfolded min_less_iff_conj dist_norm, THEN conjunct1]
+        using Min_gr_iff[of "op $$ x ` d" "norm (x - y)"] `card d >= 1` `i:d`
+        apply auto by (metis Suc_n_not_le_n True card_eq_0_iff finite_imageI)
+      thus "0 \<le> y$$i" using component_le_norm[of "x - y" i] and as(1)[rule_format] by auto
+    qed(insert y2, auto)
+  qed
+} ultimately have
+    "!!x :: 'a::euclidean_space. (x : rel_interior (convex hull insert 0 {basis i |i. i : d})) =
+    (x : {x. (ALL i:d. 0 < x $$ i) &
+    setsum (op $$ x) d < 1 & (ALL i<DIM('a). i ~: d --> x $$ i = 0)})" by blast
+from this have ?thesis by (rule set_eqI)
+} ultimately show ?thesis by blast
+qed
+
+lemma rel_interior_substd_simplex_nonempty: assumes "d ~={}" "d\<subseteq>{..<DIM('a::euclidean_space)}"
+  obtains a::"'a::euclidean_space" where
+  "a : rel_interior(convex hull (insert 0 {basis i | i . i : d}))" proof-
+(* Proof is a modified copy of the proof of similar lemma interior_std_simplex_nonempty in Convex_Euclidean_Space.thy *)
+  let ?D = d let ?a = "setsum (\<lambda>b::'a::euclidean_space. inverse (2 * real (card d)) *\<^sub>R b) {(basis i) | i. i \<in> ?D}"
+  have *:"{basis i :: 'a | i. i \<in> ?D} = basis ` ?D" by auto
+  have "finite d" apply(rule finite_subset) using assms(2) by auto
+  hence d1: "real(card d) >= 1" using `d ~={}` card_ge1[of d] by auto
+  { fix i assume "i:d" have "?a $$ i = inverse (2 * real (card d))"
+      unfolding * setsum_reindex[OF basis_inj_on, OF assms(2)] o_def
+      apply(rule trans[of _ "setsum (\<lambda>j. if i = j then inverse (2 * real (card d)) else 0) ?D"]) 
+      unfolding euclidean_component.setsum
+      apply(rule setsum_cong2)
+      using `i:d` `finite d` setsum_delta'[of d i "(%k. inverse (2 * real (card d)))"] d1 assms(2)
+      by (auto simp add: Euclidean_Space.basis_component[of i])}
+  note ** = this
+  show ?thesis apply(rule that[of ?a]) unfolding rel_interior_substd_simplex[OF assms(2)] mem_Collect_eq
+  proof safe fix i assume "i:d" 
+    have "0 < inverse (2 * real (card d))" using d1 by(auto simp add: Suc_le_eq)
+    also have "...=?a $$ i" using **[of i] `i:d` by auto
+    finally show "0 < ?a $$ i" by auto
+  next have "setsum (op $$ ?a) ?D = setsum (\<lambda>i. inverse (2 * real (card d))) ?D" 
+      by(rule setsum_cong2, rule **) 
+    also have "\<dots> < 1" unfolding setsum_constant card_enum real_eq_of_nat real_divide_def[THEN sym]
+      by (auto simp add:field_simps)
+    finally show "setsum (op $$ ?a) ?D < 1" by auto
+  next fix i assume "i<DIM('a)" and "i~:d"
+    have "?a : (span {basis i | i. i : d})" 
+      apply (rule span_setsum[of "{basis i |i. i : d}" "(%b. b /\<^sub>R (2 * real (card d)))" "{basis i |i. i : d}"]) 
+      using finite_substdbasis[of d] apply blast 
+    proof-
+      { fix x assume "(x :: 'a::euclidean_space): {basis i |i. i : d}"
+        hence "x : span {basis i |i. i : d}" 
+          using span_superset[of _ "{basis i |i. i : d}"] by auto
+        hence "(x /\<^sub>R (2 * real (card d))) : (span {basis i |i. i : d})"
+          using span_mul[of x "{basis i |i. i : d}" "(inverse (real (card d)) / 2)"] by auto
+      } thus "\<forall>x\<in>{basis i |i. i \<in> d}. x /\<^sub>R (2 * real (card d)) \<in> span {basis i ::'a |i. i \<in> d}" by auto
+    qed
+    thus "?a $$ i = 0 " using `i~:d` unfolding span_substd_basis[OF assms(2)] using `i<DIM('a)` by auto
+  qed
+qed
+
+subsection{* Relative Interior of Convex Set *}
+
+lemma rel_interior_convex_nonempty_aux: 
+fixes S :: "('n::euclidean_space) set" 
+assumes "convex S" and "0 : S"
+shows "rel_interior S ~= {}"
+proof-
+{ assume "S = {0}" hence ?thesis using rel_interior_sing by auto }
+moreover { 
+assume "S ~= {0}"
+obtain B where B_def: "independent B & B<=S & (S <= span B) & card B = dim S" using basis_exists[of S] by auto
+hence "B~={}" using B_def assms `S ~= {0}` span_empty by auto
+have "insert 0 B <= span B" using subspace_span[of B] subspace_0[of "span B"] span_inc by auto
+hence "span (insert 0 B) <= span B" 
+    using span_span[of B] span_mono[of "insert 0 B" "span B"] by blast
+hence "convex hull insert 0 B <= span B" 
+    using convex_hull_subset_span[of "insert 0 B"] by auto
+hence "span (convex hull insert 0 B) <= span B"
+    using span_span[of B] span_mono[of "convex hull insert 0 B" "span B"] by blast
+hence *: "span (convex hull insert 0 B) = span B" 
+    using span_mono[of B "convex hull insert 0 B"] hull_subset[of "insert 0 B"] by auto
+hence "span (convex hull insert 0 B) = span S"
+    using B_def span_mono[of B S] span_mono[of S "span B"] span_span[of B] by auto
+moreover have "0 : affine hull (convex hull insert 0 B)"
+    using hull_subset[of "convex hull insert 0 B"] hull_subset[of "insert 0 B"] by auto
+ultimately have **: "affine hull (convex hull insert 0 B) = affine hull S"
+    using affine_hull_span_0[of "convex hull insert 0 B"] affine_hull_span_0[of "S"] 
+    assms  hull_subset[of S] by auto
+obtain d and f::"'n=>'n" where fd: "card d = card B & linear f & f ` B = {basis i |i. i : (d :: nat set)} & 
+       f ` span B = {x. ALL i<DIM('n). i ~: d --> x $$ i = (0::real)} &  inj_on f (span B)" and d:"d\<subseteq>{..<DIM('n)}"
+    using basis_to_substdbasis_subspace_isomorphism[of B,OF _ ] B_def by auto
+hence "bounded_linear f" using linear_conv_bounded_linear by auto
+have "d ~={}" using fd B_def `B ~={}` by auto
+have "(insert 0 {basis i |i. i : d}) = f ` (insert 0 B)" using fd linear_0 by auto
+hence "(convex hull (insert 0 {basis i |i. i : d})) = f ` (convex hull (insert 0 B))"
+   using convex_hull_linear_image[of f "(insert 0 {basis i |i. i : d})"] 
+   convex_hull_linear_image[of f "(insert 0 B)"] `bounded_linear f` by auto
+moreover have "rel_interior (f ` (convex hull insert 0 B)) = 
+   f ` rel_interior (convex hull insert 0 B)"
+   apply (rule  rel_interior_injective_on_span_linear_image[of f "(convex hull insert 0 B)"])
+   using `bounded_linear f` fd * by auto
+ultimately have "rel_interior (convex hull insert 0 B) ~= {}"
+   using rel_interior_substd_simplex_nonempty[OF `d~={}` d] apply auto by blast 
+moreover have "convex hull (insert 0 B) <= S"
+   using B_def assms hull_mono[of "insert 0 B" "S" "convex"] convex_hull_eq by auto
+ultimately have ?thesis using subset_rel_interior[of "convex hull insert 0 B" S] ** by auto
+} ultimately show ?thesis by auto
+qed
+
+lemma rel_interior_convex_nonempty:
+fixes S :: "('n::euclidean_space) set"
+assumes "convex S"
+shows "rel_interior S = {} <-> S = {}"
+proof-
+{ assume "S ~= {}" from this obtain a where "a : S" by auto
+  hence "0 : op + (-a) ` S" using assms exI[of "(%x. x:S & -a+x=0)" a] by auto
+  hence "rel_interior (op + (-a) ` S) ~= {}"  
+    using rel_interior_convex_nonempty_aux[of "op + (-a) ` S"] 
+          convex_translation[of S "-a"] assms by auto 
+  hence "rel_interior S ~= {}" using rel_interior_translation by auto
+} from this show ?thesis using rel_interior_empty by auto
+qed
+
+lemma convex_rel_interior:
+fixes S :: "(_::euclidean_space) set"
+assumes "convex S"
+shows "convex (rel_interior S)"
+proof-
+{ fix "x" "y" "u"
+  assume assm: "x:rel_interior S" "y:rel_interior S" "0<=u" "(u :: real) <= 1"
+  hence "x:S" using rel_interior_subset by auto
+  have "x - u *\<^sub>R (x-y) : rel_interior S"
+  proof(cases "0=u")
+     case False hence "0<u" using assm by auto 
+        thus ?thesis
+        using assm rel_interior_convex_shrink[of S y x u] assms `x:S` by auto
+     next
+     case True thus ?thesis using assm by auto
+  qed
+  hence "(1-u) *\<^sub>R x + u *\<^sub>R y : rel_interior S" by (simp add: algebra_simps)
+} from this show ?thesis unfolding convex_alt by auto
+qed
+
+lemma convex_closure_rel_interior: 
+fixes S :: "('n::euclidean_space) set" 
+assumes "convex S"
+shows "closure(rel_interior S) = closure S"
+proof-
+have h1: "closure(rel_interior S) <= closure S" 
+   using subset_closure[of "rel_interior S" S] rel_interior_subset[of S] by auto
+{ assume "S ~= {}" from this obtain a where a_def: "a : rel_interior S" 
+    using rel_interior_convex_nonempty assms by auto
+  { fix x assume x_def: "x : closure S"
+    { assume "x=a" hence "x : closure(rel_interior S)" using a_def unfolding closure_def by auto }
+    moreover
+    { assume "x ~= a"
+       { fix e :: real assume e_def: "e>0" 
+         def e1 == "min 1 (e/norm (x - a))" hence e1_def: "e1>0 & e1<=1 & e1*norm(x-a)<=e"
+            using `x ~= a` `e>0` divide_pos_pos[of e] le_divide_eq[of e1 e "norm(x-a)"] by simp 
+         hence *: "x - e1 *\<^sub>R (x - a) : rel_interior S"
+            using rel_interior_closure_convex_shrink[of S a x e1] assms x_def a_def e1_def by auto
+         have "EX y. y:rel_interior S & y ~= x & (dist y x) <= e"
+            apply (rule_tac x="x - e1 *\<^sub>R (x - a)" in exI)
+            using * e1_def dist_norm[of "x - e1 *\<^sub>R (x - a)" x] `x ~= a` by simp
+      } hence "x islimpt rel_interior S" unfolding islimpt_approachable_le by auto 
+      hence "x : closure(rel_interior S)" unfolding closure_def by auto 
+    } ultimately have "x : closure(rel_interior S)" by auto
+  } hence ?thesis using h1 by auto
+}
+moreover
+{ assume "S = {}" hence "rel_interior S = {}" using rel_interior_empty by auto
+  hence "closure(rel_interior S) = {}" using closure_empty by auto 
+  hence ?thesis using `S={}` by auto 
+} ultimately show ?thesis by blast
+qed
+
+lemma rel_interior_same_affine_hull:
+  fixes S :: "('n::euclidean_space) set"
+  assumes "convex S"
+  shows "affine hull (rel_interior S) = affine hull S"
+by (metis assms closure_same_affine_hull convex_closure_rel_interior)
+
+lemma rel_interior_aff_dim: 
+  fixes S :: "('n::euclidean_space) set"
+  assumes "convex S"
+  shows "aff_dim (rel_interior S) = aff_dim S"
+by (metis aff_dim_affine_hull2 assms rel_interior_same_affine_hull)
+
+lemma rel_interior_rel_interior:
+  fixes S :: "('n::euclidean_space) set"
+  assumes "convex S"
+  shows "rel_interior (rel_interior S) = rel_interior S"
+proof-
+have "openin (subtopology euclidean (affine hull (rel_interior S))) (rel_interior S)"
+  using opein_rel_interior[of S] rel_interior_same_affine_hull[of S] assms by auto
+from this show ?thesis using rel_interior_def by auto
+qed
+
+lemma rel_interior_rel_open:
+  fixes S :: "('n::euclidean_space) set"
+  assumes "convex S"
+  shows "rel_open (rel_interior S)"
+unfolding rel_open_def using rel_interior_rel_interior assms by auto
+
+lemma convex_rel_interior_closure_aux:
+  fixes x y z :: "_::euclidean_space"
+  assumes "0 < a" "0 < b" "(a+b) *\<^sub>R z = a *\<^sub>R x + b *\<^sub>R y"
+  obtains e where "0 < e" "e <= 1" "z = y - e *\<^sub>R (y-x)"
+proof-
+def e == "a/(a+b)"
+have "z = (1 / (a + b)) *\<^sub>R ((a + b) *\<^sub>R z)" apply auto using assms by simp
+also have "... = (1 / (a + b)) *\<^sub>R (a *\<^sub>R x + b *\<^sub>R y)" using assms
+   scaleR_cancel_left[of "1/(a+b)" "(a + b) *\<^sub>R z" "a *\<^sub>R x + b *\<^sub>R y"] by auto
+also have "... = y - e *\<^sub>R (y-x)" using e_def apply (simp add: algebra_simps)
+   using scaleR_left_distrib[of "a/(a+b)" "b/(a+b)" y] assms add_divide_distrib[of a b "a+b"] by auto
+finally have "z = y - e *\<^sub>R (y-x)" by auto
+moreover have "0<e" using e_def assms divide_pos_pos[of a "a+b"] by auto
+moreover have "e<=1" using e_def assms by auto
+ultimately show ?thesis using that[of e] by auto
+qed
+
+lemma convex_rel_interior_closure: 
+  fixes S :: "('n::euclidean_space) set" 
+  assumes "convex S"
+  shows "rel_interior (closure S) = rel_interior S"
+proof-
+{ assume "S={}" hence ?thesis using assms rel_interior_convex_nonempty by auto }
+moreover
+{ assume "S ~= {}"
+  have "rel_interior (closure S) >= rel_interior S" 
+    using subset_rel_interior[of S "closure S"] closure_same_affine_hull closure_subset by auto
+  moreover
+  { fix z assume z_def: "z : rel_interior (closure S)"
+    obtain x where x_def: "x : rel_interior S" 
+      using `S ~= {}` assms rel_interior_convex_nonempty by auto  
+    { assume "x=z" hence "z : rel_interior S" using x_def by auto }
+    moreover
+    { assume "x ~= z"
+      obtain e where e_def: "e > 0 & cball z e Int affine hull closure S <= closure S" 
+        using z_def rel_interior_cball[of "closure S"] by auto
+      hence *: "0 < e/norm(z-x)" using e_def `x ~= z` divide_pos_pos[of e "norm(z-x)"] by auto 
+      def y == "z + (e/norm(z-x)) *\<^sub>R (z-x)"
+      have yball: "y : cball z e"
+        using mem_cball y_def dist_norm[of z y] e_def by auto 
+      have "x : affine hull closure S" 
+        using x_def rel_interior_subset_closure hull_inc[of x "closure S"] by auto
+      moreover have "z : affine hull closure S" 
+        using z_def rel_interior_subset hull_subset[of "closure S"] by auto
+      ultimately have "y : affine hull closure S" 
+        using y_def affine_affine_hull[of "closure S"] 
+          mem_affine_3_minus [of "affine hull closure S" z z x "e/norm(z-x)"] by auto
+      hence "y : closure S" using e_def yball by auto
+      have "(1+(e/norm(z-x))) *\<^sub>R z = (e/norm(z-x)) *\<^sub>R x + y"
+        using y_def by (simp add: algebra_simps) 
+      from this obtain e1 where "0 < e1 & e1 <= 1 & z = y - e1 *\<^sub>R (y - x)"
+        using * convex_rel_interior_closure_aux[of "e / norm (z - x)" 1 z x y] 
+          by (auto simp add: algebra_simps)
+      hence "z : rel_interior S" 
+        using rel_interior_closure_convex_shrink assms x_def `y : closure S` by auto
+    } ultimately have "z : rel_interior S" by auto
+  } ultimately have ?thesis by auto
+} ultimately show ?thesis by blast
+qed
+
+lemma convex_interior_closure: 
+fixes S :: "('n::euclidean_space) set" 
+assumes "convex S"
+shows "interior (closure S) = interior S"
+using closure_aff_dim[of S] interior_rel_interior_gen[of S] interior_rel_interior_gen[of "closure S"] 
+      convex_rel_interior_closure[of S] assms by auto
+
+lemma closure_eq_rel_interior_eq:
+fixes S1 S2 ::  "('n::euclidean_space) set" 
+assumes "convex S1" "convex S2"
+shows "(closure S1 = closure S2) <-> (rel_interior S1 = rel_interior S2)"
+ by (metis convex_rel_interior_closure convex_closure_rel_interior assms)
+
+
+lemma closure_eq_between:
+fixes S1 S2 ::  "('n::euclidean_space) set" 
+assumes "convex S1" "convex S2"
+shows "(closure S1 = closure S2) <-> 
+      ((rel_interior S1 <= S2) & (S2 <= closure S1))" (is "?A <-> ?B")
+proof-
+have "?A --> ?B" by (metis assms closure_subset convex_rel_interior_closure rel_interior_subset)
+moreover have "?B --> (closure S1 <= closure S2)" 
+     by (metis assms(1) convex_closure_rel_interior subset_closure)
+moreover have "?B --> (closure S1 >= closure S2)" by (metis closed_closure closure_minimal)
+ultimately show ?thesis by blast
+qed
+
+lemma open_inter_closure_rel_interior:
+fixes S A ::  "('n::euclidean_space) set" 
+assumes "convex S" "open A"
+shows "((A Int closure S) = {}) <-> ((A Int rel_interior S) = {})"
+by (metis assms convex_closure_rel_interior open_inter_closure_eq_empty) 
+
+definition "rel_frontier S = closure S - rel_interior S"
+
+lemma closed_affine_hull: "closed (affine hull ((S :: ('n::euclidean_space) set)))"
+by (metis affine_affine_hull affine_closed)
+
+lemma closed_rel_frontier: "closed(rel_frontier (S :: ('n::euclidean_space) set))"
+proof-
+have *: "closedin (subtopology euclidean (affine hull S)) (closure S - rel_interior S)" 
+apply (rule closedin_diff[of "subtopology euclidean (affine hull S)""closure S" "rel_interior S"])  using closed_closedin_trans[of "affine hull S" "closure S"] closed_affine_hull[of S] 
+  closure_affine_hull[of S] opein_rel_interior[of S] by auto 
+show ?thesis apply (rule closedin_closed_trans[of "affine hull S" "rel_frontier S"]) 
+  unfolding rel_frontier_def using * closed_affine_hull by auto 
+qed
+ 
+
+lemma convex_rel_frontier_aff_dim:
+fixes S1 S2 ::  "('n::euclidean_space) set" 
+assumes "convex S1" "convex S2" "S2 ~= {}"
+assumes "S1 <= rel_frontier S2"
+shows "aff_dim S1 < aff_dim S2" 
+proof-
+have "S1 <= closure S2" using assms unfolding rel_frontier_def by auto
+hence *: "affine hull S1 <= affine hull S2" 
+   using hull_mono[of "S1" "closure S2"] closure_same_affine_hull[of S2] by auto
+hence "aff_dim S1 <= aff_dim S2" using * aff_dim_affine_hull[of S1] aff_dim_affine_hull[of S2] 
+    aff_dim_subset[of "affine hull S1" "affine hull S2"] by auto
+moreover
+{ assume eq: "aff_dim S1 = aff_dim S2"
+  hence "S1 ~= {}" using aff_dim_empty[of S1] aff_dim_empty[of S2] `S2 ~= {}` by auto
+  have **: "affine hull S1 = affine hull S2" 
+     apply (rule affine_dim_equal) using * affine_affine_hull apply auto
+     using `S1 ~= {}` hull_subset[of S1] apply auto
+     using eq aff_dim_affine_hull[of S1] aff_dim_affine_hull[of S2] by auto
+  obtain a where a_def: "a : rel_interior S1"
+     using  `S1 ~= {}` rel_interior_convex_nonempty assms by auto
+  obtain T where T_def: "open T & a : T Int S1 & T Int affine hull S1 <= S1"
+     using mem_rel_interior[of a S1] a_def by auto
+  hence "a : T Int closure S2" using a_def assms unfolding rel_frontier_def by auto
+  from this obtain b where b_def: "b : T Int rel_interior S2" 
+     using open_inter_closure_rel_interior[of S2 T] assms T_def by auto
+  hence "b : affine hull S1" using rel_interior_subset hull_subset[of S2] ** by auto
+  hence "b : S1" using T_def b_def by auto
+  hence False using b_def assms unfolding rel_frontier_def by auto
+} ultimately show ?thesis using zless_le by auto
+qed
+
+
+lemma convex_rel_interior_if:
+fixes S ::  "('n::euclidean_space) set" 
+assumes "convex S"
+assumes "z : rel_interior S"
+shows "(!x:affine hull S. EX m. m>1 & (!e. (e>1 & e<=m) --> (1-e)*\<^sub>R x+ e *\<^sub>R z : S ))"
+proof-
+obtain e1 where e1_def: "e1>0 & cball z e1 Int affine hull S <= S" 
+    using mem_rel_interior_cball[of z S] assms by auto
+{ fix x assume x_def: "x:affine hull S"
+  { assume "x ~= z"
+    def m == "1+e1/norm(x-z)" 
+    hence "m>1" using e1_def `x ~= z` divide_pos_pos[of e1 "norm (x - z)"] by auto 
+    { fix e assume e_def: "e>1 & e<=m"
+      have "z : affine hull S" using assms rel_interior_subset hull_subset[of S] by auto
+      hence *: "(1-e)*\<^sub>R x+ e *\<^sub>R z : affine hull S"
+         using mem_affine[of "affine hull S" x z "(1-e)" e] affine_affine_hull[of S] x_def by auto
+      have "norm (z + e *\<^sub>R x - (x + e *\<^sub>R z)) = norm ((e - 1) *\<^sub>R (x-z))" by (simp add: algebra_simps)
+      also have "...= (e - 1) * norm(x-z)" using norm_scaleR e_def by auto  
+      also have "...<=(m - 1) * norm(x-z)" using e_def mult_right_mono[of _ _ "norm(x-z)"] by auto
+      also have "...= (e1 / norm (x - z)) * norm (x - z)" using m_def by auto
+      also have "...=e1" using `x ~= z` e1_def by simp
+      finally have **: "norm (z + e *\<^sub>R x - (x + e *\<^sub>R z)) <= e1" by auto
+      have "(1-e)*\<^sub>R x+ e *\<^sub>R z : cball z e1"
+         using m_def ** unfolding cball_def dist_norm by (auto simp add: algebra_simps)
+      hence "(1-e)*\<^sub>R x+ e *\<^sub>R z : S" using e_def * e1_def by auto
+    } hence "EX m. m>1 & (!e. (e>1 & e<=m) --> (1-e)*\<^sub>R x+ e *\<^sub>R z : S )" using `m>1` by auto
+  }
+  moreover
+  { assume "x=z" def m == "1+e1" hence "m>1" using e1_def by auto
+    { fix e assume e_def: "e>1 & e<=m"
+      hence "(1-e)*\<^sub>R x+ e *\<^sub>R z : S"
+        using e1_def x_def `x=z` by (auto simp add: algebra_simps)
+      hence "(1-e)*\<^sub>R x+ e *\<^sub>R z : S" using e_def by auto
+    } hence "EX m. m>1 & (!e. (e>1 & e<=m) --> (1-e)*\<^sub>R x+ e *\<^sub>R z : S )" using `m>1` by auto
+  } ultimately have "EX m. m>1 & (!e. (e>1 & e<=m) --> (1-e)*\<^sub>R x+ e *\<^sub>R z : S )" by auto
+} from this show ?thesis by auto 
+qed
+
+lemma convex_rel_interior_if2:
+fixes S ::  "('n::euclidean_space) set" 
+assumes "convex S"
+assumes "z : rel_interior S"
+shows "(!x:affine hull S. EX e. e>1 & (1-e)*\<^sub>R x+ e *\<^sub>R z : S)"
+using convex_rel_interior_if[of S z] assms by auto
+
+lemma convex_rel_interior_only_if:
+fixes S ::  "('n::euclidean_space) set" 
+assumes "convex S" "S ~= {}"
+assumes "(!x:S. EX e. e>1 & (1-e)*\<^sub>R x+ e *\<^sub>R z : S)"
+shows "z : rel_interior S" 
+proof-
+obtain x where x_def: "x : rel_interior S" using rel_interior_convex_nonempty assms by auto
+hence "x:S" using rel_interior_subset by auto
+from this obtain e where e_def: "e>1 & (1 - e) *\<^sub>R x + e *\<^sub>R z : S" using assms by auto
+def y == "(1 - e) *\<^sub>R x + e *\<^sub>R z" hence "y:S" using e_def by auto
+def e1 == "1/e" hence "0<e1 & e1<1" using e_def by auto
+hence "z=y-(1-e1)*\<^sub>R (y-x)" using e1_def y_def by (auto simp add: algebra_simps)
+from this show ?thesis 
+    using rel_interior_convex_shrink[of S x y "1-e1"] `0<e1 & e1<1` `y:S` x_def assms by auto
+qed
+
+lemma convex_rel_interior_iff:
+fixes S ::  "('n::euclidean_space) set" 
+assumes "convex S" "S ~= {}"
+shows "z : rel_interior S <-> (!x:S. EX e. e>1 & (1-e)*\<^sub>R x+ e *\<^sub>R z : S)"
+using assms hull_subset[of S "affine"] 
+      convex_rel_interior_if[of S z] convex_rel_interior_only_if[of S z] by auto
+
+lemma convex_rel_interior_iff2:
+fixes S ::  "('n::euclidean_space) set" 
+assumes "convex S" "S ~= {}"
+shows "z : rel_interior S <-> (!x:affine hull S. EX e. e>1 & (1-e)*\<^sub>R x+ e *\<^sub>R z : S)"
+using assms hull_subset[of S] 
+      convex_rel_interior_if2[of S z] convex_rel_interior_only_if[of S z] by auto
+
+
+lemma convex_interior_iff:
+fixes S ::  "('n::euclidean_space) set" 
+assumes "convex S"
+shows "z : interior S <-> (!x. EX e. e>0 & z+ e *\<^sub>R x : S)"
+proof-
+{ assume a: "~(aff_dim S = int DIM('n))"
+  { assume "z : interior S"
+    hence False using a interior_rel_interior_gen[of S] by auto
+  }
+  moreover
+  { assume r: "!x. EX e. e>0 & z+ e *\<^sub>R x : S"
+    { fix x obtain e1 where e1_def: "e1>0 & z+ e1 *\<^sub>R (x-z) : S" using r by auto
+      obtain e2 where e2_def: "e2>0 & z+ e2 *\<^sub>R (z-x) : S" using r by auto
+      def x1 == "z+ e1 *\<^sub>R (x-z)"
+         hence x1: "x1 : affine hull S" using e1_def hull_subset[of S] by auto
+      def x2 == "z+ e2 *\<^sub>R (z-x)"
+         hence x2: "x2 : affine hull S" using e2_def hull_subset[of S] by auto
+      have *: "e1/(e1+e2) + e2/(e1+e2) = 1" using divide.add[of e1 e2 "e1+e2"] e1_def e2_def by simp
+      hence "z = (e2/(e1+e2)) *\<^sub>R x1 + (e1/(e1+e2)) *\<^sub>R x2"
+         using x1_def x2_def apply (auto simp add: algebra_simps)
+         using scaleR_left_distrib[of "e1/(e1+e2)" "e2/(e1+e2)" z] by auto
+      hence z: "z : affine hull S" 
+         using mem_affine[of "affine hull S" x1 x2 "e2/(e1+e2)" "e1/(e1+e2)"]  
+         x1 x2 affine_affine_hull[of S] * by auto
+      have "x1-x2 = (e1+e2) *\<^sub>R (x-z)"
+         using x1_def x2_def by (auto simp add: algebra_simps)
+      hence "x=z+(1/(e1+e2)) *\<^sub>R (x1-x2)" using e1_def e2_def by simp
+      hence "x : affine hull S" using mem_affine_3_minus[of "affine hull S" z x1 x2 "1/(e1+e2)"] 
+          x1 x2 z affine_affine_hull[of S] by auto
+    } hence "affine hull S = UNIV" by auto
+    hence "aff_dim S = int DIM('n)" using aff_dim_affine_hull[of S] by (simp add: aff_dim_univ)
+    hence False using a by auto
+  } ultimately have ?thesis by auto
+}
+moreover
+{ assume a: "aff_dim S = int DIM('n)"
+  hence "S ~= {}" using aff_dim_empty[of S] by auto
+  have *: "affine hull S=UNIV" using a affine_hull_univ by auto
+  { assume "z : interior S"
+    hence "z : rel_interior S" using a interior_rel_interior_gen[of S] by auto
+    hence **: "(!x. EX e. e>1 & (1-e)*\<^sub>R x+ e *\<^sub>R z : S)"
+      using convex_rel_interior_iff2[of S z] assms `S~={}` * by auto
+    fix x obtain e1 where e1_def: "e1>1 & (1-e1)*\<^sub>R (z-x)+ e1 *\<^sub>R z : S"
+      using **[rule_format, of "z-x"] by auto
+    def e == "e1 - 1"
+    hence "(1-e1)*\<^sub>R (z-x)+ e1 *\<^sub>R z = z+ e *\<^sub>R x" by (simp add: algebra_simps)
+    hence "e>0 & z+ e *\<^sub>R x : S" using e1_def e_def by auto
+    hence "EX e. e>0 & z+ e *\<^sub>R x : S" by auto
+  }
+  moreover
+  { assume r: "(!x. EX e. e>0 & z+ e *\<^sub>R x : S)"
+    { fix x obtain e1 where e1_def: "e1>0 & z + e1*\<^sub>R (z-x) : S"
+         using r[rule_format, of "z-x"] by auto
+      def e == "e1 + 1"
+      hence "z + e1*\<^sub>R (z-x) = (1-e)*\<^sub>R x+ e *\<^sub>R z" by (simp add: algebra_simps)
+      hence "e > 1 & (1-e)*\<^sub>R x+ e *\<^sub>R z : S" using e1_def e_def by auto
+      hence "EX e. e>1 & (1-e)*\<^sub>R x+ e *\<^sub>R z : S" by auto
+    }
+    hence "z : rel_interior S" using convex_rel_interior_iff2[of S z] assms `S~={}` by auto
+    hence "z : interior S" using a interior_rel_interior_gen[of S] by auto
+  } ultimately have ?thesis by auto
+} ultimately show ?thesis by auto
+qed
+
+subsection{* Relative interior and closure under commom operations *}
+
+lemma rel_interior_inter_aux: "Inter {rel_interior S |S. S : I} <= Inter I"
+proof- 
+{ fix y assume "y : Inter {rel_interior S |S. S : I}"
+  hence y_def: "!S : I. y : rel_interior S" by auto
+  { fix S assume "S : I" hence "y : S" using rel_interior_subset y_def by auto }
+  hence "y : Inter I" by auto
+} thus ?thesis by auto
+qed
+
+lemma closure_inter: "closure (Inter I) <= Inter {closure S |S. S : I}"
+proof- 
+{ fix y assume "y : Inter I" hence y_def: "!S : I. y : S" by auto
+  { fix S assume "S : I" hence "y : closure S" using closure_subset y_def by auto }
+  hence "y : Inter {closure S |S. S : I}" by auto
+} hence "Inter I <= Inter {closure S |S. S : I}" by auto
+moreover have "Inter {closure S |S. S : I} : closed" 
+  unfolding mem_def closed_Inter closed_closure by auto
+ultimately show ?thesis using closure_hull[of "Inter I"]
+  hull_minimal[of "Inter I" "Inter {closure S |S. S : I}" "closed"] by auto
+qed
+
+lemma convex_closure_rel_interior_inter: 
+assumes "!S : I. convex (S :: ('n::euclidean_space) set)"
+assumes "Inter {rel_interior S |S. S : I} ~= {}"
+shows "Inter {closure S |S. S : I} <= closure (Inter {rel_interior S |S. S : I})"
+proof-
+obtain x where x_def: "!S : I. x : rel_interior S" using assms by auto
+{ fix y assume "y : Inter {closure S |S. S : I}" hence y_def: "!S : I. y : closure S" by auto
+  { assume "y = x" 
+    hence "y : closure (Inter {rel_interior S |S. S : I})"
+       using x_def closure_subset[of "Inter {rel_interior S |S. S : I}"] by auto
+  }
+  moreover
+  { assume "y ~= x"
+    { fix e :: real assume e_def: "0 < e"
+      def e1 == "min 1 (e/norm (y - x))" hence e1_def: "e1>0 & e1<=1 & e1*norm(y-x)<=e"
+        using `y ~= x` `e>0` divide_pos_pos[of e] le_divide_eq[of e1 e "norm(y-x)"] by simp 
+      def z == "y - e1 *\<^sub>R (y - x)"
+      { fix S assume "S : I" 
+        hence "z : rel_interior S" using rel_interior_closure_convex_shrink[of S x y e1] 
+           assms x_def y_def e1_def z_def by auto
+      } hence *: "z : Inter {rel_interior S |S. S : I}" by auto
+      have "EX z. z:Inter {rel_interior S |S. S : I} & z ~= y & (dist z y) <= e"
+           apply (rule_tac x="z" in exI) using `y ~= x` z_def * e1_def e_def dist_norm[of z y] by simp
+    } hence "y islimpt Inter {rel_interior S |S. S : I}" unfolding islimpt_approachable_le by blast 
+    hence "y : closure (Inter {rel_interior S |S. S : I})" unfolding closure_def by auto
+  } ultimately have "y : closure (Inter {rel_interior S |S. S : I})" by auto
+} from this show ?thesis by auto
+qed
+
+
+lemma convex_closure_inter: 
+assumes "!S : I. convex (S :: ('n::euclidean_space) set)"
+assumes "Inter {rel_interior S |S. S : I} ~= {}"
+shows "closure (Inter I) = Inter {closure S |S. S : I}"
+proof-
+have "Inter {closure S |S. S : I} <= closure (Inter {rel_interior S |S. S : I})" 
+  using convex_closure_rel_interior_inter assms by auto
+moreover have "closure (Inter {rel_interior S |S. S : I}) <= closure (Inter I)" 
+    using rel_interior_inter_aux 
+          subset_closure[of "Inter {rel_interior S |S. S : I}" "Inter I"] by auto
+ultimately show ?thesis using closure_inter[of I] by auto
+qed
+
+lemma convex_inter_rel_interior_same_closure: 
+assumes "!S : I. convex (S :: ('n::euclidean_space) set)"
+assumes "Inter {rel_interior S |S. S : I} ~= {}"
+shows "closure (Inter {rel_interior S |S. S : I}) = closure (Inter I)"
+proof-
+have "Inter {closure S |S. S : I} <= closure (Inter {rel_interior S |S. S : I})" 
+  using convex_closure_rel_interior_inter assms by auto
+moreover have "closure (Inter {rel_interior S |S. S : I}) <= closure (Inter I)" 
+    using rel_interior_inter_aux 
+          subset_closure[of "Inter {rel_interior S |S. S : I}" "Inter I"] by auto
+ultimately show ?thesis using closure_inter[of I] by auto
+qed
+
+lemma convex_rel_interior_inter: 
+assumes "!S : I. convex (S :: ('n::euclidean_space) set)"
+assumes "Inter {rel_interior S |S. S : I} ~= {}"
+shows "rel_interior (Inter I) <= Inter {rel_interior S |S. S : I}"
+proof-
+have "convex(Inter I)" using assms convex_Inter by auto
+moreover have "convex(Inter {rel_interior S |S. S : I})" apply (rule convex_Inter)
+   using assms convex_rel_interior by auto 
+ultimately have "rel_interior (Inter {rel_interior S |S. S : I}) = rel_interior (Inter I)"
+   using convex_inter_rel_interior_same_closure assms 
+   closure_eq_rel_interior_eq[of "Inter {rel_interior S |S. S : I}" "Inter I"] by blast
+from this show ?thesis using rel_interior_subset[of "Inter {rel_interior S |S. S : I}"] by auto
+qed
+
+lemma convex_rel_interior_finite_inter: 
+assumes "!S : I. convex (S :: ('n::euclidean_space) set)"
+assumes "Inter {rel_interior S |S. S : I} ~= {}"
+assumes "finite I"
+shows "rel_interior (Inter I) = Inter {rel_interior S |S. S : I}"
+proof-
+have "Inter I ~= {}" using assms rel_interior_inter_aux[of I] by auto
+have "convex (Inter I)" using convex_Inter assms by auto
+{ assume "I={}" hence ?thesis using Inter_empty rel_interior_univ2 by auto }
+moreover
+{ assume "I ~= {}"
+{ fix z assume z_def: "z : Inter {rel_interior S |S. S : I}"
+  { fix x assume x_def: "x : Inter I"
+    { fix S assume S_def: "S : I" hence "z : rel_interior S" "x : S" using z_def x_def by auto 
+      (*from this obtain e where e_def: "e>1 & (1 - e) *\<^sub>R x + e *\<^sub>R z : S"*)
+      hence "EX m. m>1 & (!e. (e>1 & e<=m) --> (1-e)*\<^sub>R x+ e *\<^sub>R z : S )"
+         using convex_rel_interior_if[of S z] S_def assms hull_subset[of S] by auto
+    } from this obtain mS where mS_def: "!S : I. (mS(S) > (1 :: real) & 
+         (!e. (e>1 & e<=mS(S)) --> (1-e)*\<^sub>R x+ e *\<^sub>R z : S))" by metis
+    obtain e where e_def: "e=Min (mS ` I)" by auto 
+    have "e : (mS ` I)" using e_def assms `I ~= {}` by (simp add: Min_in) 
+    hence "e>(1 :: real)" using mS_def by auto
+    moreover have "!S : I. e<=mS(S)" using e_def assms by auto
+    ultimately have "EX e>1. (1 - e) *\<^sub>R x + e *\<^sub>R z : Inter I" using mS_def by auto
+  } hence "z : rel_interior (Inter I)" using convex_rel_interior_iff[of "Inter I" z]
+       `Inter I ~= {}` `convex (Inter I)` by auto
+} from this have ?thesis using convex_rel_interior_inter[of I] assms by auto
+} ultimately show ?thesis by blast
+qed
+
+lemma convex_closure_inter_two: 
+fixes S T :: "('n::euclidean_space) set"
+assumes "convex S" "convex T"
+assumes "(rel_interior S) Int (rel_interior T) ~= {}"
+shows "closure (S Int T) = (closure S) Int (closure T)" 
+using convex_closure_inter[of "{S,T}"] assms by auto
+
+lemma convex_rel_interior_inter_two: 
+fixes S T :: "('n::euclidean_space) set"
+assumes "convex S" "convex T"
+assumes "(rel_interior S) Int (rel_interior T) ~= {}"
+shows "rel_interior (S Int T) = (rel_interior S) Int (rel_interior T)" 
+using convex_rel_interior_finite_inter[of "{S,T}"] assms by auto
+
+
+lemma convex_affine_closure_inter: 
+fixes S T :: "('n::euclidean_space) set"
+assumes "convex S" "affine T"
+assumes "(rel_interior S) Int T ~= {}"
+shows "closure (S Int T) = (closure S) Int T"
+proof- 
+have "affine hull T = T" using assms by auto
+hence "rel_interior T = T" using rel_interior_univ[of T] by metis
+moreover have "closure T = T" using assms affine_closed[of T] by auto
+ultimately show ?thesis using convex_closure_inter_two[of S T] assms affine_imp_convex by auto 
+qed
+
+lemma convex_affine_rel_interior_inter: 
+fixes S T :: "('n::euclidean_space) set"
+assumes "convex S" "affine T"
+assumes "(rel_interior S) Int T ~= {}"
+shows "rel_interior (S Int T) = (rel_interior S) Int T"
+proof- 
+have "affine hull T = T" using assms by auto
+hence "rel_interior T = T" using rel_interior_univ[of T] by metis
+moreover have "closure T = T" using assms affine_closed[of T] by auto
+ultimately show ?thesis using convex_rel_interior_inter_two[of S T] assms affine_imp_convex by auto 
+qed
+
+lemma subset_rel_interior_convex:
+fixes S T :: "('n::euclidean_space) set"
+assumes "convex S" "convex T"
+assumes "S <= closure T"
+assumes "~(S <= rel_frontier T)"
+shows "rel_interior S <= rel_interior T"
+proof-
+have *: "S Int closure T = S" using assms by auto
+have "~(rel_interior S <= rel_frontier T)"
+     using subset_closure[of "rel_interior S" "rel_frontier T"] closed_rel_frontier[of T] 
+     closure_closed convex_closure_rel_interior[of S] closure_subset[of S] assms by auto
+hence "(rel_interior S) Int (rel_interior (closure T)) ~= {}" 
+     using assms rel_frontier_def[of T] rel_interior_subset convex_rel_interior_closure[of T] by auto
+hence "rel_interior S Int rel_interior T = rel_interior (S Int closure T)" using assms convex_closure  
+     convex_rel_interior_inter_two[of S "closure T"] convex_rel_interior_closure[of T] by auto
+also have "...=rel_interior (S)" using * by auto
+finally show ?thesis by auto
+qed
+
+
+lemma rel_interior_convex_linear_image:
+fixes f :: "('m::euclidean_space) => ('n::euclidean_space)"
+assumes "linear f"
+assumes "convex S"
+shows "f ` (rel_interior S) = rel_interior (f ` S)"
+proof-
+{ assume "S = {}" hence ?thesis using assms rel_interior_empty rel_interior_convex_nonempty by auto }
+moreover
+{ assume "S ~= {}"
+have *: "f ` (rel_interior S) <= f ` S" unfolding image_mono using rel_interior_subset by auto
+have "f ` S <= f ` (closure S)" unfolding image_mono using closure_subset by auto
+also have "... = f ` (closure (rel_interior S))" using convex_closure_rel_interior assms by auto  
+also have "... <= closure (f ` (rel_interior S))" using closure_linear_image assms by auto 
+finally have "closure (f ` S) = closure (f ` rel_interior S)"
+   using subset_closure[of "f ` S" "closure (f ` rel_interior S)"] closure_closure 
+         subset_closure[of "f ` rel_interior S" "f ` S"] * by auto
+hence "rel_interior (f ` S) = rel_interior (f ` rel_interior S)" using assms convex_rel_interior
+   linear_conv_bounded_linear[of f] convex_linear_image[of S] convex_linear_image[of "rel_interior S"] 
+   closure_eq_rel_interior_eq[of "f ` S" "f ` rel_interior S"] by auto
+hence "rel_interior (f ` S) <= f ` rel_interior S" using rel_interior_subset by auto
+moreover
+{ fix z assume z_def: "z : f ` rel_interior S"
+  from this obtain z1 where z1_def: "z1 : rel_interior S & (f z1 = z)" by auto
+  { fix x assume "x : f ` S"
+    from this obtain x1 where x1_def: "x1 : S & (f x1 = x)" by auto
+    from this obtain e where e_def: "e>1 & (1 - e) *\<^sub>R x1 + e *\<^sub>R z1 : S"
+       using convex_rel_interior_iff[of S z1] `convex S` x1_def z1_def by auto
+    moreover have "f ((1 - e) *\<^sub>R x1 + e *\<^sub>R z1) = (1 - e) *\<^sub>R x + e *\<^sub>R z"
+        using x1_def z1_def `linear f` by (simp add: linear_add_cmul)
+    ultimately have "(1 - e) *\<^sub>R x + e *\<^sub>R z : f ` S"
+        using imageI[of "(1 - e) *\<^sub>R x1 + e *\<^sub>R z1" S f] by auto
+    hence "EX e. (e>1 & (1 - e) *\<^sub>R x + e *\<^sub>R z : f ` S)" using e_def by auto
+  } from this have "z : rel_interior (f ` S)" using convex_rel_interior_iff[of "f ` S" z] `convex S` 
+       `linear f` `S ~= {}` convex_linear_image[of S f]  linear_conv_bounded_linear[of f] by auto
+} ultimately have ?thesis by auto
+} ultimately show ?thesis by blast
+qed
+
+
+lemma convex_linear_preimage:
+  assumes c:"convex S" and l:"bounded_linear f"
+  shows "convex(f -` S)"
+proof(auto simp add: convex_def)
+  interpret f: bounded_linear f by fact
+  fix x y assume xy:"f x : S" "f y : S"
+  fix u v ::real assume uv:"0 <= u" "0 <= v" "u + v = 1"
+  show "f (u *\<^sub>R x + v *\<^sub>R y) : S" unfolding image_iff
+    using bexI[of _ "u *\<^sub>R x + v *\<^sub>R y"] f.add f.scaleR
+      c[unfolded convex_def] xy uv by auto
+qed
+
+
+lemma rel_interior_convex_linear_preimage:
+fixes f :: "('m::euclidean_space) => ('n::euclidean_space)"
+assumes "linear f"
+assumes "convex S"
+assumes "f -` (rel_interior S) ~= {}"
+shows "rel_interior (f -` S) = f -` (rel_interior S)"
+proof-
+have "S ~= {}" using assms rel_interior_empty by auto
+have nonemp: "f -` S ~= {}" by (metis assms(3) rel_interior_subset subset_empty vimage_mono) 
+hence "S Int (range f) ~= {}" by auto
+have conv: "convex (f -` S)" using convex_linear_preimage assms linear_conv_bounded_linear by auto
+hence "convex (S Int (range f))"
+  by (metis assms(1) assms(2) convex_Int subspace_UNIV subspace_imp_convex subspace_linear_image)
+{ fix z assume "z : f -` (rel_interior S)"
+  hence z_def: "f z : rel_interior S" by auto
+  { fix x assume "x : f -` S" from this have x_def: "f x : S" by auto
+    from this obtain e where e_def: "e>1 & (1-e)*\<^sub>R (f x)+ e *\<^sub>R (f z) : S"
+      using convex_rel_interior_iff[of S "f z"] z_def assms `S ~= {}` by auto
+    moreover have "(1-e)*\<^sub>R (f x)+ e *\<^sub>R (f z) = f ((1-e)*\<^sub>R x + e *\<^sub>R z)"
+      using `linear f` by (simp add: linear_def)
+    ultimately have "EX e. e>1 & (1-e)*\<^sub>R x + e *\<^sub>R z : f -` S" using e_def by auto
+  } hence "z : rel_interior (f -` S)" 
+       using convex_rel_interior_iff[of "f -` S" z] conv nonemp by auto
+} 
+moreover
+{ fix z assume z_def: "z : rel_interior (f -` S)" 
+  { fix x assume x_def: "x: S Int (range f)"
+    from this obtain y where y_def: "(f y = x) & (y : f -` S)" by auto
+    from this obtain e where e_def: "e>1 & (1-e)*\<^sub>R y+ e *\<^sub>R z : f -` S"
+      using convex_rel_interior_iff[of "f -` S" z] z_def conv by auto
+    moreover have "(1-e)*\<^sub>R x+ e *\<^sub>R (f z) = f ((1-e)*\<^sub>R y + e *\<^sub>R z)"
+      using `linear f` y_def by (simp add: linear_def)
+    ultimately have "EX e. e>1 & (1-e)*\<^sub>R x + e *\<^sub>R (f z) : S Int (range f)"
+      using e_def by auto
+  } hence "f z : rel_interior (S Int (range f))" using `convex (S Int (range f))`
+    `S Int (range f) ~= {}` convex_rel_interior_iff[of "S Int (range f)" "f z"] by auto
+  moreover have "affine (range f)"
+    by (metis assms(1) subspace_UNIV subspace_imp_affine subspace_linear_image)
+  ultimately have "f z : rel_interior S" 
+    using convex_affine_rel_interior_inter[of S "range f"] assms by auto
+  hence "z : f -` (rel_interior S)" by auto
+}
+ultimately show ?thesis by auto
+qed
+    
+
+lemma convex_direct_sum:
+fixes S :: "('n::euclidean_space) set"
+fixes T :: "('m::euclidean_space) set"
+assumes "convex S" "convex T"
+shows "convex (S <*> T)"
+proof-
+{
+fix x assume "x : S <*> T"
+from this obtain xs xt where xst_def: "xs : S & xt : T & (xs,xt) = x" by auto
+fix y assume "y : S <*> T"
+from this obtain ys yt where yst_def: "ys : S & yt : T & (ys,yt) = y" by auto
+fix u v assume uv_def: "(u :: real)>=0 & (v :: real)>=0 & u+v=1"
+have "u *\<^sub>R x + v *\<^sub>R y = (u *\<^sub>R xs + v *\<^sub>R ys, u *\<^sub>R xt + v *\<^sub>R yt)" using xst_def yst_def by auto
+moreover have "u *\<^sub>R xs + v *\<^sub>R ys : S"
+   using uv_def xst_def yst_def convex_def[of S] assms by auto
+moreover have "u *\<^sub>R xt + v *\<^sub>R yt : T"
+   using uv_def xst_def yst_def convex_def[of T] assms by auto
+ultimately have "u *\<^sub>R x + v *\<^sub>R y : S <*> T" by auto
+} from this show ?thesis unfolding convex_def by auto
+qed
+
+
+lemma convex_hull_direct_sum:
+fixes S :: "('n::euclidean_space) set"
+fixes T :: "('m::euclidean_space) set"
+shows "convex hull (S <*> T) = (convex hull S) <*> (convex hull T)"
+proof-
+{ fix x assume "x : (convex hull S) <*> (convex hull T)"
+  from this obtain xs xt where xst_def: "xs : convex hull S & xt : convex hull T & (xs,xt) = x" by auto
+  from xst_def obtain sI su where s: "finite sI & sI <= S & (ALL x:sI. 0 <= su x) & setsum su sI = 1 
+     & (SUM v:sI. su v *\<^sub>R v) = xs" using convex_hull_explicit[of S] by auto
+  from xst_def obtain tI tu where t: "finite tI & tI <= T & (ALL x:tI. 0 <= tu x) & setsum tu tI = 1 
+     & (SUM v:tI. tu v *\<^sub>R v) = xt" using convex_hull_explicit[of T] by auto
+  def I == "(sI <*> tI)"
+  def u == "(%i. (su (fst i))*(tu(snd i)))"
+  have "fst (SUM v:sI <*> tI. (su (fst v) * tu (snd v)) *\<^sub>R v)=
+     (SUM vs:sI. SUM vt:tI. (su vs * tu vt) *\<^sub>R vs)"
+     using fst_setsum[of "(%v. (su (fst v) * tu (snd v)) *\<^sub>R v)" "sI <*> tI"]
+     by (simp add: split_def scaleR_prod_def setsum_cartesian_product)
+  also have "...=(SUM vt:tI. tu vt *\<^sub>R (SUM vs:sI. su vs *\<^sub>R vs))"
+     using setsum_commute[of "(%vt vs. (su vs * tu vt) *\<^sub>R vs)" sI tI]
+     by (simp add: mult_commute scaleR_right.setsum)
+  also have "...=(SUM vt:tI. tu vt *\<^sub>R xs)" using s by auto
+  also have "...=(SUM vt:tI. tu vt) *\<^sub>R xs" by (simp add: scaleR_left.setsum)
+  also have "...=xs" using t by auto
+  finally have h1: "fst (SUM v:sI <*> tI. (su (fst v) * tu (snd v)) *\<^sub>R v)=xs" by auto
+  have "snd (SUM v:sI <*> tI. (su (fst v) * tu (snd v)) *\<^sub>R v)=
+     (SUM vs:sI. SUM vt:tI. (su vs * tu vt) *\<^sub>R vt)"
+     using snd_setsum[of "(%v. (su (fst v) * tu (snd v)) *\<^sub>R v)" "sI <*> tI"]
+     by (simp add: split_def scaleR_prod_def setsum_cartesian_product)
+  also have "...=(SUM vs:sI. su vs *\<^sub>R (SUM vt:tI. tu vt *\<^sub>R vt))"
+     by (simp add: mult_commute scaleR_right.setsum)
+  also have "...=(SUM vs:sI. su vs *\<^sub>R xt)" using t by auto
+  also have "...=(SUM vs:sI. su vs) *\<^sub>R xt" by (simp add: scaleR_left.setsum)
+  also have "...=xt" using s by auto
+  finally have h2: "snd (SUM v:sI <*> tI. (su (fst v) * tu (snd v)) *\<^sub>R v)=xt" by auto
+  from h1 h2 have "(SUM v:sI <*> tI. (su (fst v) * tu (snd v)) *\<^sub>R v) = x" using xst_def by auto
+
+  moreover have "finite I & (I <= S <*> T)" using s t I_def by auto 
+  moreover have "!i:I. 0 <= u i" using s t I_def u_def by (simp add: mult_nonneg_nonneg)
+  moreover have "setsum u I = 1" using u_def I_def setsum_cartesian_product[of "(% x y. (su x)*(tu y))"] 
+     s t setsum_product[of su sI tu tI] by (auto simp add: split_def)
+  ultimately have "x : convex hull (S <*> T)" 
+     apply (subst convex_hull_explicit[of "S <*> T"]) apply rule
+     apply (rule_tac x="I" in exI) apply (rule_tac x="u" in exI)
+     using I_def u_def by auto
+}
+hence "convex hull (S <*> T) >= (convex hull S) <*> (convex hull T)" by auto
+moreover have "(convex hull S) <*> (convex hull T) : convex" 
+   unfolding mem_def by (simp add: convex_direct_sum convex_convex_hull)
+ultimately show ?thesis 
+   using hull_minimal[of "S <*> T" "(convex hull S) <*> (convex hull T)" "convex"] 
+         hull_subset[of S convex] hull_subset[of T convex] by auto
+qed
+
+lemma rel_interior_direct_sum:
+fixes S :: "('n::euclidean_space) set"
+fixes T :: "('m::euclidean_space) set"
+assumes "convex S" "convex T"
+shows "rel_interior (S <*> T) = rel_interior S <*> rel_interior T"
+proof-
+{ assume "S={}" hence ?thesis apply auto using rel_interior_empty by auto }
+moreover
+{ assume "T={}" hence ?thesis apply auto using rel_interior_empty by auto }
+moreover {
+assume "S ~={}" "T ~={}"
+hence ri: "rel_interior S ~= {}" "rel_interior T ~= {}" using rel_interior_convex_nonempty assms by auto
+hence "fst -` rel_interior S ~= {}" using fst_vimage_eq_Times[of "rel_interior S"] by auto
+hence "rel_interior ((fst :: 'n * 'm => 'n) -` S) = fst -` rel_interior S"
+  using fst_linear `convex S` rel_interior_convex_linear_preimage[of fst S] by auto 
+hence s: "rel_interior (S <*> (UNIV :: 'm set)) = rel_interior S <*> UNIV" by (simp add: fst_vimage_eq_Times)
+from ri have "snd -` rel_interior T ~= {}" using snd_vimage_eq_Times[of "rel_interior T"] by auto
+hence "rel_interior ((snd :: 'n * 'm => 'm) -` T) = snd -` rel_interior T"
+  using snd_linear `convex T` rel_interior_convex_linear_preimage[of snd T] by auto 
+hence t: "rel_interior ((UNIV :: 'n set) <*> T) = UNIV <*> rel_interior T" by (simp add: snd_vimage_eq_Times)
+from s t have *: "rel_interior (S <*> (UNIV :: 'm set)) Int rel_interior ((UNIV :: 'n set) <*> T) 
+  = rel_interior S <*> rel_interior T" by auto
+have "(S <*> T) = (S <*> (UNIV :: 'm set)) Int ((UNIV :: 'n set) <*> T)" by auto
+hence "rel_interior (S <*> T) = rel_interior ((S <*> (UNIV :: 'm set)) Int ((UNIV :: 'n set) <*> T))" by auto
+also have "...=rel_interior (S <*> (UNIV :: 'm set)) Int rel_interior ((UNIV :: 'n set) <*> T)" 
+   apply (subst convex_rel_interior_inter_two[of "S <*> (UNIV :: 'm set)" "(UNIV :: 'n set) <*> T"]) 
+   using * ri assms convex_direct_sum by auto
+finally have ?thesis using * by auto
+}
+ultimately show ?thesis by blast
+qed
+
+lemma rel_interior_scaleR: 
+fixes S :: "('n::euclidean_space) set"
+assumes "c ~= 0"
+shows "(op *\<^sub>R c) ` (rel_interior S) = rel_interior ((op *\<^sub>R c) ` S)"
+using rel_interior_injective_linear_image[of "(op *\<^sub>R c)" S]
+      linear_conv_bounded_linear[of "op *\<^sub>R c"] linear_scaleR injective_scaleR[of c] assms by auto
+
+lemma rel_interior_convex_scaleR: 
+fixes S :: "('n::euclidean_space) set"
+assumes "convex S"
+shows "(op *\<^sub>R c) ` (rel_interior S) = rel_interior ((op *\<^sub>R c) ` S)"
+by (metis assms linear_scaleR rel_interior_convex_linear_image)
+
+lemma convex_rel_open_scaleR: 
+fixes S :: "('n::euclidean_space) set"
+assumes "convex S" "rel_open S"
+shows "convex ((op *\<^sub>R c) ` S) & rel_open ((op *\<^sub>R c) ` S)"
+by (metis assms convex_scaling rel_interior_convex_scaleR rel_open_def)
+
+
+lemma convex_rel_open_finite_inter: 
+assumes "!S : I. (convex (S :: ('n::euclidean_space) set) & rel_open S)"
+assumes "finite I"
+shows "convex (Inter I) & rel_open (Inter I)"
+proof-
+{ assume "Inter {rel_interior S |S. S : I} = {}"
+  hence "Inter I = {}" using assms unfolding rel_open_def by auto
+  hence ?thesis unfolding rel_open_def using rel_interior_empty by auto
+}
+moreover
+{ assume "Inter {rel_interior S |S. S : I} ~= {}"
+  hence "rel_open (Inter I)" using assms unfolding rel_open_def
+    using convex_rel_interior_finite_inter[of I] by auto
+  hence ?thesis using convex_Inter assms by auto
+} ultimately show ?thesis by auto
+qed
+
+lemma convex_rel_open_linear_image:
+fixes f :: "('m::euclidean_space) => ('n::euclidean_space)"
+assumes "linear f"
+assumes "convex S" "rel_open S"
+shows "convex (f ` S) & rel_open (f ` S)"
+by (metis assms convex_linear_image rel_interior_convex_linear_image 
+   linear_conv_bounded_linear rel_open_def)
+
+lemma convex_rel_open_linear_preimage:
+fixes f :: "('m::euclidean_space) => ('n::euclidean_space)"
+assumes "linear f"
+assumes "convex S" "rel_open S"
+shows "convex (f -` S) & rel_open (f -` S)" 
+proof-
+{ assume "f -` (rel_interior S) = {}"
+  hence "f -` S = {}" using assms unfolding rel_open_def by auto
+  hence ?thesis unfolding rel_open_def using rel_interior_empty by auto
+}
+moreover
+{ assume "f -` (rel_interior S) ~= {}"
+  hence "rel_open (f -` S)" using assms unfolding rel_open_def
+    using rel_interior_convex_linear_preimage[of f S] by auto
+  hence ?thesis using convex_linear_preimage assms linear_conv_bounded_linear by auto
+} ultimately show ?thesis by auto
+qed
+
+lemma rel_interior_projection:
+fixes S :: "('m::euclidean_space*'n::euclidean_space) set"
+fixes f :: "'m::euclidean_space => ('n::euclidean_space) set"
+assumes "convex S"
+assumes "f = (%y. {z. (y,z) : S})"
+shows "(y,z) : rel_interior S <-> (y : rel_interior {y. (f y ~= {})} & z : rel_interior (f y))"
+proof-
+{ fix y assume "y : {y. (f y ~= {})}" from this obtain z where "(y,z) : S" using assms by auto
+  hence "EX x. x : S & y = fst x" apply (rule_tac x="(y,z)" in exI) by auto
+  from this obtain x where "x : S & y = fst x" by blast
+  hence "y : fst ` S" unfolding image_def by auto
+}
+hence "fst ` S = {y. (f y ~= {})}" unfolding fst_def using assms by auto
+hence h1: "fst ` rel_interior S = rel_interior {y. (f y ~= {})}"
+   using rel_interior_convex_linear_image[of fst S] assms fst_linear by auto
+{ fix y assume "y : rel_interior {y. (f y ~= {})}"
+  hence "y : fst ` rel_interior S" using h1 by auto
+  hence *: "rel_interior S Int fst -` {y} ~= {}" by auto
+  moreover have aff: "affine (fst -` {y})" unfolding affine_alt by (simp add: algebra_simps)
+  ultimately have **: "rel_interior (S Int fst -` {y}) = rel_interior S Int fst -` {y}"
+    using convex_affine_rel_interior_inter[of S "fst -` {y}"] assms by auto
+  have conv: "convex (S Int fst -` {y})" using convex_Int assms aff affine_imp_convex by auto
+  { fix x assume "x : f y"
+    hence "(y,x) : S Int (fst -` {y})" using assms by auto
+    moreover have "x = snd (y,x)" by auto
+    ultimately have "x : snd ` (S Int fst -` {y})" by blast
+  }
+  hence "snd ` (S Int fst -` {y}) = f y" using assms by auto
+  hence ***: "rel_interior (f y) = snd ` rel_interior (S Int fst -` {y})"
+    using rel_interior_convex_linear_image[of snd "S Int fst -` {y}"] snd_linear conv by auto 
+  { fix z assume "z : rel_interior (f y)"
+    hence "z : snd ` rel_interior (S Int fst -` {y})" using *** by auto
+    moreover have "{y} = fst ` rel_interior (S Int fst -` {y})" using * ** rel_interior_subset by auto   
+    ultimately have "(y,z) : rel_interior (S Int fst -` {y})" by force
+    hence "(y,z) : rel_interior S" using ** by auto
+  }
+  moreover
+  { fix z assume "(y,z) : rel_interior S"
+    hence "(y,z) : rel_interior (S Int fst -` {y})" using ** by auto
+    hence "z : snd ` rel_interior (S Int fst -` {y})" by (metis Range_iff snd_eq_Range) 
+    hence "z : rel_interior (f y)" using *** by auto
+  }
+  ultimately have "!!z. (y,z) : rel_interior S <-> z : rel_interior (f y)" by auto
+} 
+hence h2: "!!y z. y : rel_interior {t. f t ~= {}} ==> ((y, z) : rel_interior S) = (z : rel_interior (f y))"
+  by auto
+{ fix y z assume asm: "(y, z) : rel_interior S"
+  hence "y : fst ` rel_interior S" by (metis Domain_iff fst_eq_Domain)
+  hence "y : rel_interior {t. f t ~= {}}" using h1 by auto
+  hence "y : rel_interior {t. f t ~= {}} & (z : rel_interior (f y))" using h2 asm by auto
+} from this show ?thesis using h2 by blast
+qed
+
+subsection{* Relative interior of convex cone *}
+
+lemma cone_rel_interior:
+fixes S :: "('m::euclidean_space) set"
+assumes "cone S"
+shows "cone ({0} Un (rel_interior S))"
+proof-
+{ assume "S = {}" hence ?thesis by (simp add: rel_interior_empty cone_0) }
+moreover
+{ assume "S ~= {}" hence *: "0:S & (!c. c>0 --> op *\<^sub>R c ` S = S)" using cone_iff[of S] assms by auto
+  hence *: "0:({0} Un (rel_interior S)) &
+           (!c. c>0 --> op *\<^sub>R c ` ({0} Un rel_interior S) = ({0} Un rel_interior S))"
+           by (auto simp add: rel_interior_scaleR)
+  hence ?thesis using cone_iff[of "{0} Un rel_interior S"] by auto
+}
+ultimately show ?thesis by blast
+qed
+
+lemma rel_interior_convex_cone_aux:
+fixes S :: "('m::euclidean_space) set"
+assumes "convex S"
+shows "(c,x) : rel_interior (cone hull ({(1 :: real)} <*> S)) <-> 
+       c>0 & x : ((op *\<^sub>R c) ` (rel_interior S))"
+proof-
+{ assume "S={}" hence ?thesis by (simp add: rel_interior_empty cone_hull_empty) } 
+moreover
+{ assume "S ~= {}" from this obtain s where "s : S" by auto
+have conv: "convex ({(1 :: real)} <*> S)" using convex_direct_sum[of "{(1 :: real)}" S] 
+   assms convex_singleton[of "1 :: real"] by auto
+def f == "(%y. {z. (y,z) : cone hull ({(1 :: real)} <*> S)})"
+hence *: "(c, x) : rel_interior (cone hull ({(1 :: real)} <*> S)) =
+      (c : rel_interior {y. f y ~= {}} & x : rel_interior (f c))"
+  apply (subst rel_interior_projection[of "cone hull ({(1 :: real)} <*> S)" f c x])
+  using convex_cone_hull[of "{(1 :: real)} <*> S"] conv by auto
+{ fix y assume "(y :: real)>=0"
+  hence "y *\<^sub>R (1,s) : cone hull ({(1 :: real)} <*> S)"
+     using cone_hull_expl[of "{(1 :: real)} <*> S"] `s:S` by auto
+  hence "f y ~= {}" using f_def by auto
+}
+hence "{y. f y ~= {}} = {0..}" using f_def cone_hull_expl[of "{(1 :: real)} <*> S"] by auto
+hence **: "rel_interior {y. f y ~= {}} = {0<..}" using rel_interior_real_semiline by auto
+{ fix c assume "c>(0 :: real)"
+  hence "f c = (op *\<^sub>R c ` S)" using f_def cone_hull_expl[of "{(1 :: real)} <*> S"] by auto
+  hence "rel_interior (f c)= (op *\<^sub>R c ` rel_interior S)"
+     using rel_interior_convex_scaleR[of S c] assms by auto
+}
+hence ?thesis using * ** by auto
+} ultimately show ?thesis by blast
+qed
+
+
+lemma rel_interior_convex_cone:
+fixes S :: "('m::euclidean_space) set"
+assumes "convex S"
+shows "rel_interior (cone hull ({(1 :: real)} <*> S)) = 
+       {(c,c *\<^sub>R x) |c x. c>0 & x : (rel_interior S)}"
+(is "?lhs=?rhs")
+proof-
+{ fix z assume "z:?lhs" 
+  have *: "z=(fst z,snd z)" by auto 
+  have "z:?rhs" using rel_interior_convex_cone_aux[of S "fst z" "snd z"] assms `z:?lhs` apply auto
+     apply (rule_tac x="fst z" in exI) apply (rule_tac x="x" in exI) using * by auto
+}
+moreover
+{ fix z assume "z:?rhs" hence "z:?lhs" 
+  using rel_interior_convex_cone_aux[of S "fst z" "snd z"] assms by auto
+}
+ultimately show ?thesis by blast
+qed
+
+lemma convex_hull_finite_union:
+assumes "finite I"
+assumes "!i:I. (convex (S i) & (S i) ~= {})"
+shows "convex hull (Union (S ` I)) = 
+       {setsum (%i. c i *\<^sub>R s i) I |c s. (!i:I. c i >= 0) & (setsum c I = 1) & (!i:I. s i : S i)}"
+  (is "?lhs = ?rhs")
+proof-
+{ fix x assume "x : ?rhs" 
+  from this obtain c s 
+    where *: "setsum (%i. c i *\<^sub>R s i) I=x" "(setsum c I = 1)"
+     "(!i:I. c i >= 0) & (!i:I. s i : S i)" by auto
+  hence "!i:I. s i : convex hull (Union (S ` I))" using hull_subset[of "Union (S ` I)" convex] by auto
+  hence "x : ?lhs" unfolding *(1)[THEN sym]
+     apply (subst convex_setsum[of I "convex hull Union (S ` I)" c s])
+     using * assms convex_convex_hull by auto
+} hence "?lhs >= ?rhs" by auto
+
+{ fix i assume "i:I"
+    from this assms have "EX p. p : S i" by auto
+} 
+from this obtain p where p_def: "!i:I. p i : S i" by metis
+
+{ fix i assume "i:I"
+  { fix x assume "x : S i"
+    def c == "(%j. if (j=i) then (1::real) else 0)"
+    hence *: "setsum c I = 1" using `finite I` `i:I` setsum_delta[of I i "(%(j::'a). (1::real))"] by auto
+    def s == "(%j. if (j=i) then x else p j)"
+    hence "!j. c j *\<^sub>R s j = (if (j=i) then x else 0)" using c_def by (auto simp add: algebra_simps)
+    hence "x = setsum (%i. c i *\<^sub>R s i) I"
+       using s_def c_def `finite I` `i:I` setsum_delta[of I i "(%(j::'a). x)"] by auto 
+    hence "x : ?rhs" apply auto
+      apply (rule_tac x="c" in exI) 
+      apply (rule_tac x="s" in exI) using * c_def s_def p_def `x : S i` by auto 
+  } hence "?rhs >= S i" by auto
+} hence *: "?rhs >= Union (S ` I)" by auto
+
+{ fix u v assume uv: "(u :: real)>=0 & v>=0 & u+v=1"
+  fix x y assume xy: "(x : ?rhs) & (y : ?rhs)"
+  from xy obtain c s where xc: "x=setsum (%i. c i *\<^sub>R s i) I &
+     (!i:I. c i >= 0) & (setsum c I = 1) & (!i:I. s i : S i)" by auto
+  from xy obtain d t where yc: "y=setsum (%i. d i *\<^sub>R t i) I &
+     (!i:I. d i >= 0) & (setsum d I = 1) & (!i:I. t i : S i)" by auto
+  def e == "(%i. u * (c i)+v * (d i))"
+  have ge0: "!i:I. e i >= 0"  using e_def xc yc uv by (simp add: mult_nonneg_nonneg)
+  have "setsum (%i. u * c i) I = u * setsum c I" by (simp add: setsum_right_distrib)
+  moreover have "setsum (%i. v * d i) I = v * setsum d I" by (simp add: setsum_right_distrib)
+  ultimately have sum1: "setsum e I = 1" using e_def xc yc uv by (simp add: setsum_addf)
+  def q == "(%i. if (e i = 0) then (p i) 
+                 else (u * (c i)/(e i))*\<^sub>R (s i)+(v * (d i)/(e i))*\<^sub>R (t i))"
+  { fix i assume "i:I"
+    { assume "e i = 0" hence "q i : S i" using `i:I` p_def q_def by auto }
+    moreover
+    { assume "e i ~= 0" 
+      hence "q i : S i" using mem_convex_alt[of "S i" "s i" "t i" "u * (c i)" "v * (d i)"] 
+         mult_nonneg_nonneg[of u "c i"] mult_nonneg_nonneg[of v "d i"]
+         assms q_def e_def `i:I` `e i ~= 0` xc yc uv by auto
+    } ultimately have "q i : S i" by auto
+  } hence qs: "!i:I. q i : S i" by auto
+  { fix i assume "i:I"
+    { assume "e i = 0" 
+      have ge: "u * (c i) >= 0 & v * (d i) >= 0" using xc yc uv `i:I` by (simp add: mult_nonneg_nonneg)
+      moreover hence "u * (c i) <= 0 & v * (d i) <= 0" using `e i = 0` e_def `i:I` by simp 
+      ultimately have "u * (c i) = 0 & v * (d i) = 0" by auto
+      hence "(u * (c i))*\<^sub>R (s i)+(v * (d i))*\<^sub>R (t i) = (e i) *\<^sub>R (q i)"
+         using `e i = 0` by auto
+    }
+    moreover
+    { assume "e i ~= 0"
+      hence "(u * (c i)/(e i))*\<^sub>R (s i)+(v * (d i)/(e i))*\<^sub>R (t i) = q i"
+         using q_def by auto
+      hence "e i *\<^sub>R ((u * (c i)/(e i))*\<^sub>R (s i)+(v * (d i)/(e i))*\<^sub>R (t i))
+             = (e i) *\<^sub>R (q i)" by auto
+      hence "(u * (c i))*\<^sub>R (s i)+(v * (d i))*\<^sub>R (t i) = (e i) *\<^sub>R (q i)"
+         using `e i ~= 0` by (simp add: algebra_simps)
+    } ultimately have 
+      "(u * (c i))*\<^sub>R (s i)+(v * (d i))*\<^sub>R (t i) = (e i) *\<^sub>R (q i)" by blast
+  } hence *: "!i:I.
+    (u * (c i))*\<^sub>R (s i)+(v * (d i))*\<^sub>R (t i) = (e i) *\<^sub>R (q i)" by auto
+  have "u *\<^sub>R x + v *\<^sub>R y =
+       setsum (%i. (u * (c i))*\<^sub>R (s i)+(v * (d i))*\<^sub>R (t i)) I"
+          using xc yc by (simp add: algebra_simps scaleR_right.setsum setsum_addf)
+  also have "...=setsum (%i. (e i) *\<^sub>R (q i)) I" using * by auto
+  finally have "u *\<^sub>R x + v *\<^sub>R y = setsum (%i. (e i) *\<^sub>R (q i)) I" by auto
+  hence "u *\<^sub>R x + v *\<^sub>R y : ?rhs" using ge0 sum1 qs by auto
+} hence "convex ?rhs" unfolding convex_def by auto
+hence "?rhs : convex" unfolding mem_def by auto
+from this show ?thesis using `?lhs >= ?rhs` * 
+   hull_minimal[of "Union (S ` I)" "?rhs" "convex"] by blast
+qed
+
+lemma convex_hull_union_two:
+fixes S T :: "('m::euclidean_space) set"
+assumes "convex S" "S ~= {}" "convex T" "T ~= {}"
+shows "convex hull (S Un T) = {u *\<^sub>R s + v *\<^sub>R t |u v s t. u>=0 & v>=0 & u+v=1 & s:S & t:T}"
+  (is "?lhs = ?rhs")
+proof-
+def I == "{(1::nat),2}"
+def s == "(%i. (if i=(1::nat) then S else T))"
+have "Union (s ` I) = S Un T" using s_def I_def by auto
+hence "convex hull (Union (s ` I)) = convex hull (S Un T)" by auto
+moreover have "convex hull Union (s ` I) =
+    {SUM i:I. c i *\<^sub>R sa i |c sa. (ALL i:I. 0 <= c i) & setsum c I = 1 & (ALL i:I. sa i : s i)}"
+    apply (subst convex_hull_finite_union[of I s]) using assms s_def I_def by auto
+moreover have 
+  "{SUM i:I. c i *\<^sub>R sa i |c sa. (ALL i:I. 0 <= c i) & setsum c I = 1 & (ALL i:I. sa i : s i)} <=
+  ?rhs"
+  using s_def I_def by auto
+ultimately have "?lhs<=?rhs" by auto 
+{ fix x assume "x : ?rhs" 
+  from this obtain u v s t 
+    where *: "x=u *\<^sub>R s + v *\<^sub>R t & u>=0 & v>=0 & u+v=1 & s:S & t:T" by auto
+  hence "x : convex hull {s,t}" using convex_hull_2[of s t] by auto
+  hence "x : convex hull (S Un T)" using * hull_mono[of "{s, t}" "S Un T"] by auto
+} hence "?lhs >= ?rhs" by blast
+from this show ?thesis using `?lhs<=?rhs` by auto
+qed
+
 end
--- a/src/HOL/Multivariate_Analysis/Euclidean_Space.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Multivariate_Analysis/Euclidean_Space.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -1065,10 +1065,16 @@
 
 text {* Individual closure properties. *}
 
+lemma span_span: "span (span A) = span A"
+  unfolding span_def hull_hull ..
+
 lemma (in real_vector) span_superset: "x \<in> S ==> x \<in> span S" by (metis span_clauses(1))
 
 lemma (in real_vector) span_0: "0 \<in> span S" by (metis subspace_span subspace_0)
 
+lemma span_inc: "S \<subseteq> span S"
+  by (metis subset_eq span_superset)
+
 lemma (in real_vector) dependent_0: assumes "0\<in>A" shows "dependent A"
   unfolding dependent_def apply(rule_tac x=0 in bexI)
   using assms span_0 by auto
@@ -1485,12 +1491,6 @@
 lemma mem_delete: "x \<in> (A - {a}) \<longleftrightarrow> x \<noteq> a \<and> x \<in> A"
   by blast
 
-lemma span_span: "span (span A) = span A"
-  unfolding span_def hull_hull ..
-
-lemma span_inc: "S \<subseteq> span S"
-  by (metis subset_eq span_superset)
-
 lemma spanning_subset_independent:
   assumes BA: "B \<subseteq> A" and iA: "independent A"
   and AsB: "A \<subseteq> span B"
--- a/src/HOL/Multivariate_Analysis/Integration.certs	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Multivariate_Analysis/Integration.certs	Sat Nov 06 10:01:00 2010 -0700
@@ -1,4 +1,4 @@
-19e9a49723add29f06290682aca290aa2ab968ea 238 0
+2e15025784d0676586e79b418a67bcb9811380a1 238 0
 #2 := false
 #48 := 0::real
 decl f19 :: (-> S3 S10 real)
@@ -237,7 +237,7 @@
 #486 := [unit-resolution #460 #485]: #453
 [th-lemma #479 #259 #257 #474 #258 #486]: false
 unsat
-96c3a1d2dea133da23272bb1832adcfffc19c650 333 0
+4c0d1f43a6268b5d3a850361d3ff86d073eaf489 333 0
 #2 := false
 #11 := 0::real
 decl ?v2!1 :: real
@@ -571,7 +571,7 @@
 #408 := [lemma #407]: #230
 [th-lemma #406 #301 #408 #396 #303]: false
 unsat
-d083434592d4f729dd1c100279aa204b663fa35c 57 0
+40822b724c71d6702c01ad1e865c13dca0ab3c21 57 0
 #2 := false
 decl f13 :: (-> S4 S4 S5)
 #44 := (:var 0 S4)
@@ -629,7 +629,7 @@
 #264 := [quant-inst]: #263
 [unit-resolution #264 #269 #258]: false
 unsat
-93a3d21a7f84dc839f14b9a0cfcafdfff6c6b0f1 318 0
+ae79dfdacb760a3554ce388b846d335064f674de 318 0
 #2 := false
 #25 := 0::real
 decl f8 :: (-> S4 S2 real)
@@ -948,7 +948,7 @@
 #622 := [th-lemma]: #621
 [unit-resolution #622 #619 #604]: false
 unsat
-26bfbe5c6decad8b4a2114b85a11ff3552d6b060 295 0
+4c36877468848170cffdf0ddcda5eb522e99ab42 295 0
 #2 := false
 #25 := 0::real
 decl f8 :: (-> S4 S2 real)
@@ -1244,7 +1244,7 @@
 #694 := [th-lemma]: #693
 [unit-resolution #694 #691 #677]: false
 unsat
-5d75e298a98eb55cd39dacd22665bd3062cf5345 204 0
+f2fb6a78bd5ef0d3bd81c73f0edb01f05b9ead4b 204 0
 #2 := false
 #46 := 0::real
 decl f5 :: (-> S3 S2 real)
@@ -1449,7 +1449,7 @@
 #533 := [unit-resolution #532 #153]: #473
 [th-lemma #533 #529 #514]: false
 unsat
-7b235442f6856a575f67cb04d6eaa03042f5336e 870 0
+c57edc9b53558e5e0a7337a056a91568e455bc48 870 0
 #2 := false
 #11 := 0::real
 decl f5 :: real
--- a/src/HOL/Mutabelle/MutabelleExtra.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Mutabelle/MutabelleExtra.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -27,7 +27,7 @@
 
 quickcheck_params [size = 5, iterations = 1000]
 (*
-nitpick_params [timeout = 5 s, sat_solver = MiniSat, no_overlord, verbose, card = 1-5, iter = 1,2,4,8,12]
+nitpick_params [timeout = 5, sat_solver = MiniSat, no_overlord, verbose, card = 1-5, iter = 1,2,4,8,12]
 refute_params [maxtime = 10, minsize = 1, maxsize = 5, satsolver = jerusat]
 *)
 ML {* Auto_Tools.time_limit := 10 *}
--- a/src/HOL/Mutabelle/mutabelle_extra.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Mutabelle/mutabelle_extra.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -179,7 +179,7 @@
          | Refute.REFUTE (loc, details) =>
            (error ("Unhandled Refute error (" ^ quote loc ^ "): " ^ details ^
                    "."))
-         | Exn.Interrupt => raise Exn.Interrupt
+         | Exn.Interrupt => raise Exn.Interrupt  (* FIXME violates Isabelle/ML exception model *)
          | _ => (Output.urgent_message ("Unknown error in Nitpick"); Error)
   end
 val nitpick_mtd = ("nitpick", invoke_nitpick)
--- a/src/HOL/Nitpick_Examples/Core_Nits.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Nitpick_Examples/Core_Nits.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -12,7 +12,7 @@
 begin
 
 nitpick_params [card = 1\<midarrow>6, unary_ints, max_potential = 0,
-                sat_solver = MiniSat_JNI, max_threads = 1, timeout = 60 s]
+                sat_solver = MiniSat_JNI, max_threads = 1, timeout = 60]
 
 subsection {* Curry in a Hurry *}
 
--- a/src/HOL/Nitpick_Examples/Datatype_Nits.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Nitpick_Examples/Datatype_Nits.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -12,7 +12,7 @@
 begin
 
 nitpick_params [card = 1\<midarrow>8, max_potential = 0,
-                sat_solver = MiniSat_JNI, max_threads = 1, timeout = 60 s]
+                sat_solver = MiniSat_JNI, max_threads = 1, timeout = 60]
 
 primrec rot where
 "rot Nibble0 = Nibble1" | "rot Nibble1 = Nibble2" | "rot Nibble2 = Nibble3" |
@@ -23,7 +23,7 @@
 "rot NibbleF = Nibble0"
 
 lemma "rot n \<noteq> n"
-nitpick [card = 1\<midarrow>16, expect = none]
+nitpick [card = 1\<midarrow>8,16, verbose, expect = none]
 sorry
 
 lemma "rot Nibble2 \<noteq> Nibble3"
@@ -69,7 +69,7 @@
 oops
 
 lemma "fs (Pd ((a, b), (c, d))) = (a, b)"
-nitpick [card = 1\<midarrow>9, expect = none]
+nitpick [expect = none]
 sorry
 
 lemma "fs (Pd ((a, b), (c, d))) = (c, d)"
@@ -82,7 +82,7 @@
 "app (Fn f) x = f x"
 
 lemma "app (Fn g) y = g y"
-nitpick [card = 1\<midarrow>10, expect = none]
+nitpick [expect = none]
 sorry
 
 lemma "app (Fn g) y = g' y"
--- a/src/HOL/Nitpick_Examples/Hotel_Nits.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Nitpick_Examples/Hotel_Nits.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -13,7 +13,7 @@
 begin
 
 nitpick_params [max_potential = 0, sat_solver = MiniSat_JNI, max_threads = 1,
-                timeout = 120 s]
+                timeout = 120]
 
 typedecl guest
 typedecl key
--- a/src/HOL/Nitpick_Examples/Induct_Nits.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Nitpick_Examples/Induct_Nits.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -12,7 +12,7 @@
 begin
 
 nitpick_params [card = 1\<midarrow>8, unary_ints, sat_solver = MiniSat_JNI,
-                max_threads = 1, timeout = 60 s]
+                max_threads = 1, timeout = 60]
 
 inductive p1 :: "nat \<Rightarrow> bool" where
 "p1 0" |
--- a/src/HOL/Nitpick_Examples/Integer_Nits.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Nitpick_Examples/Integer_Nits.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -12,7 +12,7 @@
 begin
 
 nitpick_params [card = 1\<midarrow>5, bits = 1,2,3,4,6,
-                sat_solver = MiniSat_JNI, max_threads = 1, timeout = 60 s]
+                sat_solver = MiniSat_JNI, max_threads = 1, timeout = 60]
 
 lemma "Suc x = x + 1"
 nitpick [unary_ints, expect = none]
--- a/src/HOL/Nitpick_Examples/Manual_Nits.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Nitpick_Examples/Manual_Nits.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -17,7 +17,7 @@
 
 chapter {* 3. First Steps *}
 
-nitpick_params [sat_solver = MiniSat_JNI, max_threads = 1, timeout = 60 s]
+nitpick_params [sat_solver = MiniSat_JNI, max_threads = 1, timeout = 60]
 
 subsection {* 3.1. Propositional Logic *}
 
--- a/src/HOL/Nitpick_Examples/Pattern_Nits.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Nitpick_Examples/Pattern_Nits.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -12,7 +12,7 @@
 begin
 
 nitpick_params [card = 10, max_potential = 0, sat_solver = MiniSat_JNI,
-                max_threads = 1, timeout = 60 s]
+                max_threads = 1, timeout = 60]
 
 lemma "x = (case u of () \<Rightarrow> y)"
 nitpick [expect = genuine]
--- a/src/HOL/Nitpick_Examples/Record_Nits.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Nitpick_Examples/Record_Nits.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -12,7 +12,7 @@
 begin
 
 nitpick_params [card = 1\<midarrow>6, max_potential = 0,
-                sat_solver = MiniSat_JNI, max_threads = 1, timeout = 60 s]
+                sat_solver = MiniSat_JNI, max_threads = 1, timeout = 60]
 
 record point2d =
   xc :: int
--- a/src/HOL/Nitpick_Examples/Refute_Nits.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Nitpick_Examples/Refute_Nits.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -12,7 +12,7 @@
 begin
 
 nitpick_params [card = 1\<midarrow>6, max_potential = 0,
-                sat_solver = MiniSat_JNI, max_threads = 1, timeout = 60 s]
+                sat_solver = MiniSat_JNI, max_threads = 1, timeout = 60]
 
 lemma "P \<and> Q"
 apply (rule conjI)
--- a/src/HOL/Nitpick_Examples/Special_Nits.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Nitpick_Examples/Special_Nits.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -12,7 +12,7 @@
 begin
 
 nitpick_params [card = 4, sat_solver = MiniSat_JNI, max_threads = 1,
-                timeout = 60 s]
+                timeout = 60]
 
 fun f1 :: "nat \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> nat" where
 "f1 a b c d e = a + b + c + d + e"
--- a/src/HOL/Nitpick_Examples/Typedef_Nits.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Nitpick_Examples/Typedef_Nits.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -12,7 +12,7 @@
 begin
 
 nitpick_params [card = 1\<midarrow>4, sat_solver = MiniSat_JNI, max_threads = 1,
-                timeout = 60 s]
+                timeout = 60]
 
 typedef three = "{0\<Colon>nat, 1, 2}"
 by blast
--- a/src/HOL/Proofs/Extraction/Higman.thy	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Proofs/Extraction/Higman.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -352,11 +352,11 @@
 function mk_word_aux :: "nat \<Rightarrow> Random.seed \<Rightarrow> letter list \<times> Random.seed" where
   "mk_word_aux k = exec {
      i \<leftarrow> Random.range 10;
-     (if i > 7 \<and> k > 2 \<or> k > 1000 then return []
+     (if i > 7 \<and> k > 2 \<or> k > 1000 then Pair []
      else exec {
        let l = (if i mod 2 = 0 then A else B);
        ls \<leftarrow> mk_word_aux (Suc k);
-       return (l # ls)
+       Pair (l # ls)
      })}"
 by pat_completeness auto
 termination by (relation "measure ((op -) 1001)") auto
--- a/src/HOL/SMT_Examples/SMT_Examples.certs	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/SMT_Examples/SMT_Examples.certs	Sat Nov 06 10:01:00 2010 -0700
@@ -1,13 +1,4 @@
-d4b1481d70f20d4d6280999633c905e21d180d13 8 0
-#2 := false
-#1 := true
-#8 := (not true)
-#26 := (iff #8 false)
-#27 := [rewrite]: #26
-#25 := [asserted]: #8
-[mp #25 #27]: false
-unsat
-a38979487be0aafcf2d387180e92dfd3bd43e483 33 0
+24d44e2684a632b0246b194cc850faec2cea7de6 33 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -41,7 +32,16 @@
 #29 := [asserted]: #12
 [mp #29 #49]: false
 unsat
-fd75276ee28b486a6ea1b6b677d04008959d13f8 37 0
+1b7b7e7109fa2efdf94c204be8d611210920badb 8 0
+#2 := false
+#1 := true
+#8 := (not true)
+#26 := (iff #8 false)
+#27 := [rewrite]: #26
+#25 := [asserted]: #8
+[mp #25 #27]: false
+unsat
+10a83d48b539d27c174c61f5874470265d21b40f 37 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -79,7 +79,7 @@
 #29 := [asserted]: #12
 [mp #29 #53]: false
 unsat
-58aaefc3b25d8181c01a2139430686aeca861bf3 66 0
+060c210941c0fd9eca58c8250fc66d664e976010 66 0
 #2 := false
 decl f4 :: S1
 #10 := f4
@@ -146,9 +146,9 @@
 #71 := [and-elim #69]: #40
 [mp #71 #85]: false
 unsat
-a3969d96ad7c1fdd20f7d69abeb13b18bac4be8d 1 0
-unsat
-694292afe609b4087c0435b347aed1c0c0b6b45b 94 0
+b0eed80076353895afe2bbf37d588b79cf593079 1 0
+unsat
+d37af75fba79a43c8aa95dbef345ea660c999f99 94 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -243,7 +243,7 @@
 #39 := [asserted]: #22
 [mp #39 #108]: false
 unsat
-fcb0f1f1909bdd097de1e485a000708289f9f1ed 72 0
+b3ee7b71753d028d8ffbc5d42df5f0f79660f6e7 72 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -316,7 +316,7 @@
 #36 := [asserted]: #19
 [mp #36 #88]: false
 unsat
-36c95d1da5779fd86d36cb33e0f80e4f14e6c4f0 234 0
+b6f4097a3d567e9383135805312389841b9ed5f3 234 0
 #2 := false
 decl f6 :: S1
 #14 := f6
@@ -551,7 +551,7 @@
 #96 := [mp #69 #95]: #91
 [mp #96 #299]: false
 unsat
-44ca45de077963316e54f5cdfef5cb8cd66ac906 52 0
+75e07bc80c3184013212c0a5c60b827b399474ad 52 0
 #2 := false
 decl f4 :: (-> S2 S2 S2)
 #16 := (:var 1 S2)
@@ -604,7 +604,7 @@
 #118 := [quant-inst]: #204
 [unit-resolution #118 #53 #541]: false
 unsat
-f79d03683394ca6e785cbd8e87f4249c3d42307a 2578 0
+836f826330ec23da3f93f44a06ef6c00563d7781 2578 0
 #2 := false
 decl f35 :: S1
 #112 := f35
@@ -3183,7 +3183,7 @@
 #3638 := [unit-resolution #705 #3637 #3636 #3635]: #683
 [unit-resolution #1968 #3638 #3634]: false
 unsat
-3221f6bae508cb0c6bc508c2b8b4600cdb00669d 95 0
+49266526e51dee0fe0083e5120f86525e2ef1056 95 0
 #2 := false
 decl f3 :: (-> int S1)
 decl ?v0!0 :: int
@@ -3279,7 +3279,7 @@
 #102 := [and-elim #101]: #76
 [unit-resolution #102 #115]: false
 unsat
-517d7705593795e4a28f7687bc92edbaaad5e6a6 146 0
+107e72fe657296bfbc7688086b83c6164eff0b08 146 0
 #2 := false
 decl f3 :: (-> S1 S2 S1)
 #9 := (:var 0 S2)
@@ -3426,7 +3426,7 @@
 #261 := [quant-inst]: #256
 [unit-resolution #261 #584 #284]: false
 unsat
-f7796908cca3a39a93067ec7456dca4edfe09069 146 2
+2bb8a8ad07066951b9c2ff8c6c6ea8a4b3a62bfc 146 2
 #2 := false
 decl f3 :: (-> S1 S2 S1)
 #9 := (:var 0 S2)
@@ -3575,7 +3575,7 @@
 unsat
 WARNING: failed to find a pattern for quantifier (quantifier id: k!13)
 
-3d560cfeafa07e8fb4e5aedbf244ed81193a1bdd 91 0
+3415c51851ea95b52ee39d82ddb23d7a42cd9b2f 91 0
 #2 := false
 decl f3 :: (-> S2 S1)
 decl f4 :: S2
@@ -3667,7 +3667,7 @@
 #162 := [quant-inst]: #248
 [unit-resolution #162 #582 #79]: false
 unsat
-6f4135b5f443c9489ab6f839e6371eb6c05021a1 17 0
+44eecf236b490147dbc51a13ab3759021603fcea 17 0
 #2 := false
 #8 := 3::int
 #9 := (= 3::int 3::int)
@@ -3685,7 +3685,7 @@
 #27 := [asserted]: #10
 [mp #27 #36]: false
 unsat
-1fb88686c084cbd29d5379055cf31c165231f0d2 17 0
+f79c070f64eae6123a31ed43ab22ff256427a856 17 0
 #2 := false
 #8 := 3::real
 #9 := (= 3::real 3::real)
@@ -3703,7 +3703,7 @@
 #27 := [asserted]: #10
 [mp #27 #36]: false
 unsat
-4439cb9b553ba6a7d3d7adaf0bccb7b403389495 26 0
+4ebfd0cdcde15d352023497277a471fa091558e8 26 0
 #2 := false
 #11 := 4::int
 #9 := 1::int
@@ -3730,7 +3730,7 @@
 #30 := [asserted]: #13
 [mp #30 #45]: false
 unsat
-f4b4baf086c1953b46b6c8516c9a7e45f6c086ee 41 0
+c45eaaff3b4218ae166b1ee5b57daee45f751625 41 0
 #2 := false
 decl f3 :: int
 #8 := f3
@@ -3772,7 +3772,7 @@
 #33 := [asserted]: #16
 [mp #33 #57]: false
 unsat
-5926d4083f7d2a89c57531d8e87a5d554a39421a 35 0
+c12d97c9fd2930565ac865f67ef562b3c45fbf6a 35 0
 #2 := false
 #9 := 3::int
 #10 := 8::int
@@ -3808,7 +3808,7 @@
 #31 := [asserted]: #14
 [mp #31 #56]: false
 unsat
-53ebe62bcea7dc90158b3082dda2089fed123703 209 0
+7cb5a788981ee8a217912588519fd956ced665e2 209 0
 #2 := false
 #11 := 0::real
 decl f4 :: real
@@ -4018,7 +4018,7 @@
 #231 := [unit-resolution #159 #230]: #150
 [th-lemma #125 #220 #227 #231]: false
 unsat
-cbc9c5a04b9570a386fb97f8ff4491630835be54 42 0
+1e234cc93c775a7f92c9808afe1122152dd4b38c 42 0
 #2 := false
 decl f3 :: (-> S1 S2)
 decl f1 :: S1
@@ -4061,7 +4061,7 @@
 #32 := [asserted]: #15
 [mp #32 #58]: false
 unsat
-732b399d3ae1d48d68db7a2b4fb14062c7ea7650 54 0
+b18c0c1cf966295783ca6ddab09d2dabebd74ff7 54 0
 #2 := false
 #13 := 1::int
 decl f3 :: int
@@ -4116,7 +4116,7 @@
 #33 := [asserted]: #16
 [mp #33 #72]: false
 unsat
-a511ac5eff75bd85fb28de979615bdeb27073e2f 63 0
+3db1a0441939b3cc14e2a4efb4f74cab6c664bd5 63 0
 #2 := false
 #15 := 0::int
 decl f4 :: int
@@ -4180,7 +4180,7 @@
 #81 := [mp #57 #80]: #68
 [mp #81 #93]: false
 unsat
-5e99525435673f50d9e2cedb056a3eef3ca48d0f 35 0
+08fc4e7efc68a91cbed93f860a54fb029c71bcbb 35 0
 #2 := false
 #10 := 5::int
 #8 := 2::int
@@ -4216,7 +4216,7 @@
 #30 := [asserted]: #13
 [mp #30 #54]: false
 unsat
-cb1ff2dbd74d2844a905d03c2bb5dfdcef7b3703 45 0
+3adb493c0d9d387d1aebf7bcb353d3c00a0851a0 45 0
 #2 := false
 #15 := 4::real
 decl f4 :: real
@@ -4262,7 +4262,7 @@
 #65 := [mp #41 #64]: #56
 [th-lemma #65 #52 #43]: false
 unsat
-7357ea99a84507698d605d047a8912506786b005 59 0
+5ee51bc5647785432ba0c87ce1c0376c614df467 59 0
 #2 := false
 #20 := (not false)
 decl f4 :: int
@@ -4322,7 +4322,7 @@
 #39 := [asserted]: #22
 [mp #39 #76]: false
 unsat
-a2e7fe792ce7e828740707e47e962b9013bfaa8c 43 0
+28a095b5ca08adc7ff0222dfacd76cf43a8ba449 43 0
 #2 := false
 decl f3 :: int
 #8 := f3
@@ -4366,7 +4366,7 @@
 #31 := [asserted]: #14
 [mp #31 #62]: false
 unsat
-f746fa8e8060fa7d6624d49afb6c22d0c2467190 86 0
+d13adc55a1937ef83f29c016ef8623fe1fda09eb 86 0
 #2 := false
 decl f3 :: int
 #9 := f3
@@ -4453,7 +4453,7 @@
 #104 := [unit-resolution #82 #103 #96 #87]: #65
 [unit-resolution #104 #117]: false
 unsat
-96de0a1de3d9897dfb99656d5dd83bfdb80fa75e 551 0
+372a6ad969cb318322945cf566c5d0dc9eaab120 551 0
 #2 := false
 #174 := 0::int
 decl f4 :: int
@@ -5005,7 +5005,7 @@
 #617 := [unit-resolution #411 #614]: #421
 [unit-resolution #601 #617 #593 #616]: false
 unsat
-be4350e057381018abf4a5df1b96e44aa5440970 2109 0
+79f1383c7c06e3e99fb5b45b946ee8edd0a67644 2109 0
 #2 := false
 #10 := 0::int
 decl f3 :: int
@@ -7115,7 +7115,7 @@
 #2119 := [unit-resolution #2118 #2109 #2056 #2114 #2113 #2112 #2096 #2108]: #945
 [unit-resolution #1969 #2119 #2109 #2096 #2042 #2105 #2108]: false
 unsat
-9371d51a82e0a1300620d46b4e7e3f2e34923066 52 0
+e5059b0c3e879c6b6b3ce8026895b93ab92e0728 52 0
 #2 := false
 #12 := 1::real
 decl f3 :: real
@@ -7168,7 +7168,7 @@
 #34 := [asserted]: #17
 [mp #34 #70]: false
 unsat
-7d808a299ec3aa6543955e0b52da2db4f14e2ebc 348 0
+58d0d0a0a699999905091a630166f1e00b881d19 348 0
 #2 := false
 #11 := 0::int
 decl f5 :: int
@@ -7517,7 +7517,7 @@
 #638 := [unit-resolution #642 #647]: #643
 [unit-resolution #638 #640 #637]: false
 unsat
-a58c3bad13ae6ef8848c31ae2ecb4d141ea9bdc6 354 0
+4fc7df80f9cc116a2a88bcb88017dc9b0c75f7fc 354 0
 #2 := false
 #11 := 0::int
 decl f5 :: int
@@ -7872,7 +7872,7 @@
 #626 := [unit-resolution #621 #634]: #753
 [unit-resolution #626 #619 #508]: false
 unsat
-cfd6420dc9709ceb6bf8be602fb4605c1ddb5222 101 0
+391853aefaeecebad29422aff20420b5c8400b71 101 0
 #2 := false
 #9 := 0::real
 decl f3 :: real
@@ -7974,7 +7974,7 @@
 #120 := [th-lemma]: #119
 [unit-resolution #120 #116 #109 #43]: false
 unsat
-957b603c67e0eb51df6576d5eeddcc6aa6ccd469 943 0
+fee0ab8e0ed90b0d56c8dc3103c9526d6f1496af 943 0
 #2 := false
 #49 := 1::int
 decl f4 :: (-> int int int)
@@ -8918,7 +8918,7 @@
 #1294 := [unit-resolution #1107 #1293 #1239]: #405
 [unit-resolution #1252 #1294 #1292]: false
 unsat
-e0bd8674b0a8871e3484c1aaf5e9760d6cdde8fa 24 0
+a36cefa1a79f7b6b132d839263e2dbea9c7e87fc 24 0
 #2 := false
 #8 := (exists (vars (?v0 int)) false)
 #9 := (not #8)
@@ -8943,7 +8943,7 @@
 #27 := [asserted]: #10
 [mp #27 #43]: false
 unsat
-20e7b35733689b5c0fe416fc2b22bfe44b252442 24 0
+54fcba387e363cf8083d4867a9793bbccb7a0314 24 0
 #2 := false
 #8 := (exists (vars (?v0 real)) false)
 #9 := (not #8)
@@ -8968,13 +8968,13 @@
 #27 := [asserted]: #10
 [mp #27 #43]: false
 unsat
-c605fee711b129b0bde66fbd9b8f8cc9ce226e9a 1 0
-unsat
-e58017e3173d9778bc4b43bd6c7d6554fa96991e 1 0
-unsat
-0e0dcf19cd5b120a9f262cfa9c01b662a315ee94 1 0
-unsat
-1781c1a480d6415ddb235a621259ce2092732ba5 67 0
+fb9fab32fe487ed4f4e3d6fe3002d02a0faf856f 1 0
+unsat
+04a6b607d97a19c61cf9fb86541a5de438beb133 1 0
+unsat
+12094d1935a50c8a07214f044f89a779adda7144 1 0
+unsat
+5e524c2f74a70173d25f03f6292e4c1715c27295 67 0
 #2 := false
 #9 := 0::int
 #12 := 1::int
@@ -9042,7 +9042,7 @@
 #143 := [trans #141 #80]: #142
 [mp #143 #145]: false
 unsat
-cb54bc1c8221ce33a204ef4756c350ab3a9165fd 82 0
+8d9412b39d1e4ff552ff059a2a38b571d1cc91d5 82 0
 #2 := false
 #9 := (:var 0 int)
 #11 := 0::int
@@ -9125,7 +9125,7 @@
 #35 := [asserted]: #18
 [mp #35 #101]: false
 unsat
-05e26467c63b2926bb1206f4d9498749ac8572cd 78 0
+27ab42ad2d8b0d1fd722c36b1b4da113e0100061 78 0
 #2 := false
 #9 := (:var 0 int)
 #11 := 2::int
@@ -9204,7 +9204,7 @@
 #36 := [asserted]: #19
 [mp #36 #97]: false
 unsat
-9a25b8cd095131859f14e6e15166f75f654f8b36 61 0
+df217f217128f3754a777d8b086332e1f6ca39ed 61 0
 #2 := false
 #13 := (:var 0 int)
 #8 := 2::int
@@ -9266,7 +9266,7 @@
 #35 := [asserted]: #18
 [mp #35 #80]: false
 unsat
-b845be4ad91437fd7de4e1e43e09de89dff87060 111 0
+ae3d6219d877e775dfed10c63209e257accf66b7 111 0
 #2 := false
 #8 := 2::int
 decl ?v0!1 :: int
@@ -9378,7 +9378,7 @@
 #189 := [th-lemma]: #188
 [unit-resolution #189 #132 #130 #131]: false
 unsat
-d516d2245b3e1198319c778f5d87f60364d9480b 89 0
+13bee6926c3836fd51ee6bc754d5c22e812fc512 89 0
 #2 := false
 #8 := 0::int
 decl ?v0!0 :: int
@@ -9468,7 +9468,7 @@
 #172 := [unit-resolution #157 #95]: #171
 [unit-resolution #172 #170 #167]: false
 unsat
-16973ba3459b683ba763cfd9d1b131b50880d52b 83 2
+d8021ae1b4589558d9fd489bf446659dddb6bd92 83 2
 #2 := false
 #9 := 0::int
 #8 := (:var 0 int)
@@ -9554,7 +9554,7 @@
 unsat
 WARNING: failed to find a pattern for quantifier (quantifier id: k!9)
 
-6a2477ce7e396f5a6b8350494c34556e3187382b 180 2
+d2e44415b02dc3e73faa264730b98a3e42a2c4b7 180 2
 #2 := false
 #16 := 3::int
 #37 := -1::int
@@ -9737,7 +9737,7 @@
 unsat
 WARNING: failed to find a pattern for quantifier (quantifier id: k!9)
 
-2c2ba5876a1ae5b4aacba3ec088a92e8517d1db5 68 0
+4b7d931172988b3d273106901290917cf166502b 68 0
 #2 := false
 #16 := 1::int
 #13 := (:var 1 int)
@@ -9806,7 +9806,7 @@
 #37 := [asserted]: #20
 [mp #37 #88]: false
 unsat
-3bc68a4890101c78401460850d978a5b784ef891 107 0
+3bad73f4a46430e1cd795e36a5d12f24c1d02fca 107 0
 #2 := false
 #8 := 0::int
 decl ?v1!1 :: int
@@ -9914,7 +9914,7 @@
 #128 := [and-elim #106]: #93
 [th-lemma #128 #129 #130]: false
 unsat
-69398382e4236c1f3e9ea09ef96d5056d4f3fa6e 117 0
+87d0780ec63c3625f21f826c074cd13be4d62e3f 117 0
 #2 := false
 #8 := 0::int
 decl ?v1!1 :: int
@@ -10032,7 +10032,7 @@
 #193 := [unit-resolution #192 #115]: #103
 [unit-resolution #193 #135]: false
 unsat
-4e8319ba61c4c37d1677e9a262b47203f2bf5468 148 0
+8cf44aadad8c0d87f2f57333fcb342b5ab385732 148 0
 #2 := false
 #149 := (not false)
 #11 := 0::int
@@ -10181,7 +10181,7 @@
 #163 := [mp #131 #162]: #158
 [mp #163 #186]: false
 unsat
-a21b19aa84de923d8a0d2dc0af8016cd64248558 67 0
+505b296c347b1d80912f4657132db5ad5ac9be4f 67 0
 #2 := false
 #8 := (:var 0 int)
 #9 := (pattern #8)
@@ -10249,9 +10249,9 @@
 #35 := [asserted]: #18
 [mp #35 #85]: false
 unsat
-53ac944328a76df2270bb4117390a226d92d4e8d 1 0
-unsat
-80d97536e18b652f6d95d83165f7e113fa8206dd 75 0
+69b5f9a8c6931a47249060824265e608f534018d 1 0
+unsat
+153386649b53dd5f988fd1bc7b72bcd290f53da9 75 0
 #2 := false
 #10 := 1::int
 decl f5 :: int
@@ -10327,7 +10327,7 @@
 #37 := [asserted]: #20
 [mp #37 #91]: false
 unsat
-1290567b7974f50913459a9370404d1fb27c5c04 62 0
+68a3071b380f0f7c03304499d1f2835f0bf361c3 62 0
 #2 := false
 decl f4 :: real
 #10 := f4
@@ -10390,7 +10390,7 @@
 #37 := [asserted]: #20
 [mp #37 #79]: false
 unsat
-539e99c284f7a3ed7bb350da08f51bfa73f9e832 141 0
+b6399504e06b7554863175061a53aa7486cc9086 141 0
 #2 := false
 decl f6 :: int
 #13 := f6
@@ -10532,7 +10532,7 @@
 #50 := [asserted]: #33
 [mp #50 #155]: false
 unsat
-95f708529404688f5c32519f5db83b1972672eb0 252 0
+161d4df3b39a91bf1bc07402c22e85ffba8398b2 252 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -10785,7 +10785,7 @@
 #544 := [unit-resolution #537 #456]: #562
 [th-lemma #460 #544 #542 #551]: false
 unsat
-069a886d4e32ad09f893e803be1b967f3568fe31 227 0
+2eacc8bb83fecb0fe81d96fc93fc64a7d11a9e4d 227 0
 #2 := false
 #27 := 3::int
 decl f4 :: (-> S2 int)
@@ -11013,7 +11013,7 @@
 #607 := [unit-resolution #602 #605]: #632
 [th-lemma #161 #607 #160]: false
 unsat
-dc0cfb9f55d790de5cad944289080b012df32109 367 0
+61d261a95e60947f23f698475332084ad9cfd094 367 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -11381,7 +11381,7 @@
 #461 := [th-lemma]: #460
 [unit-resolution #461 #469 #457]: false
 unsat
-1119baa29d78de9d8299759a1e2778fd64cb45ac 299 0
+ddf1adc32377020a68931e791f8d3bc93a479493 299 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -11681,7 +11681,7 @@
 #603 := [unit-resolution #617 #615]: #685
 [th-lemma #625 #190 #603 #630]: false
 unsat
-bc26a0abfecc650600742f8182ea35bd8e9c0657 458 0
+044639db28fa915f30475668c634e5237efaa068 458 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -12140,7 +12140,7 @@
 #355 := [unit-resolution #374 #372]: #373
 [unit-resolution #355 #328]: false
 unsat
-d28cb53d0b19f6ffbd9f6906e69a9e4028ab5365 161 0
+35a0968e29848376b1a21560a270f15f6d19aed4 161 0
 #2 := false
 #13 := 0::int
 decl f5 :: int
@@ -12302,7 +12302,7 @@
 #366 := [unit-resolution #644 #660]: #652
 [th-lemma #661 #366 #266]: false
 unsat
-3bdd721710ce740508c48327f8e9174f1a8cdb9c 604 0
+30478456884b028b09fee79763641a90a5f3dc95 604 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -12907,7 +12907,7 @@
 #1005 := [unit-resolution #599 #859]: #455
 [unit-resolution #1005 #1004 #994]: false
 unsat
-9702672d0e4ef4f07fbabb8ea1413e6a7036c6b3 61 0
+b7294e8991937b94c2eeb87ee3638d9d5f007d01 61 0
 #2 := false
 decl f7 :: S3
 #12 := f7
@@ -12969,7 +12969,7 @@
 #59 := [not-or-elim #58]: #57
 [unit-resolution #59 #251]: false
 unsat
-eb96c266a8e3d434df367635dd7c28e36177b61a 116 0
+0eb592b66cd32b0b3c146dc31bf114d3abca5113 116 0
 #2 := false
 decl f10 :: (-> S5 S3)
 decl f7 :: S5
@@ -13086,7 +13086,7 @@
 #81 := [not-or-elim #78]: #80
 [unit-resolution #81 #612]: false
 unsat
-9aa5c4fb11199431a576a38868b15130e8351add 192 0
+919519ba12504066a1609e5f376b9f35de340ebd 192 0
 #2 := false
 decl f6 :: (-> S3 S2 S4)
 decl f3 :: S2
@@ -13279,7 +13279,7 @@
 #73 := [not-or-elim #70]: #72
 [unit-resolution #73 #505]: false
 unsat
-25babfdee044def80821e354fcd8abca6147a0b0 80 0
+0e78b14dde5af897ffb16aaeab92efe89c61b5d1 80 0
 #2 := false
 decl f6 :: (-> S2 S3 S1)
 decl f5 :: S3
@@ -13360,7 +13360,7 @@
 #75 := [not-or-elim #69]: #74
 [mp #75 #96]: false
 unsat
-608cd0071a67598a13af0858c9e1341886caf8cc 128 0
+df98f2515329e244654c3b6826b0db995088c21e 128 0
 #2 := false
 decl f3 :: (-> S2 S2)
 #15 := (:var 0 S2)
@@ -13489,7 +13489,7 @@
 #224 := [quant-inst]: #566
 [unit-resolution #224 #575 #583]: false
 unsat
-737f3f173e29756f346a0a821d7647d108111546 469 0
+be52fda02d5daa6359d2f1d2bccf2f909cea5a49 469 0
 #2 := false
 decl f8 :: (-> S2 S4 S4)
 decl f9 :: S4
@@ -13959,7 +13959,7 @@
 #173 := [asserted]: #43
 [unit-resolution #173 #814]: false
 unsat
-5cfea173c08e120333c1dea606b9463cfcc6450a 38 0
+ee30427d464b4fb3f94aa1806f026182963de849 38 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -13998,7 +13998,7 @@
 #31 := [asserted]: #14
 [mp #31 #54]: false
 unsat
-9cf33fdca403c6c514f1cd0e17b6b0a250477095 366 0
+bb6927e05e73f0d1fe00658a23b5a23277a4c6fa 366 0
 #2 := false
 decl f3 :: (-> int S2)
 #41 := 6::int
@@ -14365,7 +14365,7 @@
 #187 := [asserted]: #44
 [unit-resolution #187 #404]: false
 unsat
-f72e33edaef326a0ed844a14ae54b706945ff4d5 1271 0
+760a08d06b818c4b3a173eacf882e5d9145febb7 1271 0
 #2 := false
 decl f6 :: (-> int int int)
 #12 := 2::int
@@ -15637,7 +15637,7 @@
 #615 := [unit-resolution #638 #1762]: #367
 [unit-resolution #615 #1764]: false
 unsat
-59b518b007738eb00dbca158af8db9e067af1dee 76 0
+1739856e83271d60ba99b4dd0f8fab6bba11b19a 76 0
 #2 := false
 decl f3 :: (-> int S1)
 #12 := (:var 0 int)
@@ -15714,7 +15714,7 @@
 #689 := [quant-inst]: #688
 [unit-resolution #689 #158 #1022]: false
 unsat
-997a0c6c7b0815f9412f3484edb90c328a2f5296 478 0
+e1c7435780cfee6dd8c9bac28159418631b73635 478 0
 #2 := false
 decl f7 :: (-> S4 S2)
 decl f8 :: (-> S1 S4)
--- a/src/HOL/SMT_Examples/SMT_Tests.certs	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/SMT_Examples/SMT_Tests.certs	Sat Nov 06 10:01:00 2010 -0700
@@ -1,4 +1,4 @@
-d4b1481d70f20d4d6280999633c905e21d180d13 8 0
+1b7b7e7109fa2efdf94c204be8d611210920badb 8 0
 #2 := false
 #1 := true
 #8 := (not true)
@@ -7,7 +7,7 @@
 #25 := [asserted]: #8
 [mp #25 #27]: false
 unsat
-a38979487be0aafcf2d387180e92dfd3bd43e483 33 0
+24d44e2684a632b0246b194cc850faec2cea7de6 33 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -41,7 +41,7 @@
 #29 := [asserted]: #12
 [mp #29 #49]: false
 unsat
-ac5b1925e47f9c59b180fdccd321c68a4a01a710 16 0
+e13aa83df86f7aa731de8803590214f1f328e559 16 0
 #2 := false
 #8 := (not false)
 #9 := (not #8)
@@ -58,7 +58,7 @@
 #26 := [asserted]: #9
 [mp #26 #35]: false
 unsat
-b2faf72eaa234b8ac1acedfef5768f99ca3da86b 41 0
+f420673acb14abe98ee018177f96f582264715f6 41 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -100,7 +100,7 @@
 #30 := [asserted]: #13
 [mp #30 #57]: false
 unsat
-b13645ce0b47b432b924b38e0bebde6cbcb236f9 21 0
+1ca9ca5e02de1f4179a12b1248e2289c51261af2 21 0
 #2 := false
 #1 := true
 #8 := (not true)
@@ -122,7 +122,7 @@
 #27 := [asserted]: #10
 [mp #27 #40]: false
 unsat
-fa3a2c67c2833da196c4009cb283e94a9f22829b 65 0
+cdbc0ed6463ef1f60801c650813ddb76e5fc1674 65 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -188,7 +188,7 @@
 #33 := [asserted]: #16
 [mp #33 #81]: false
 unsat
-8ec60d0baade8bddd39b6e00ec153f6bd8949184 16 0
+717a63b9f4d0d299b9c3ce33521d4ac56124d7b8 16 0
 #2 := false
 #1 := true
 #8 := (and true true)
@@ -205,7 +205,7 @@
 #26 := [asserted]: #9
 [mp #26 #35]: false
 unsat
-85a9b542a9c6d64e778f2449f892d6d55e153689 29 0
+c378fcdabec52ebd4390861a6f8953415c34a0b9 29 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -235,7 +235,7 @@
 #28 := [asserted]: #11
 [mp #28 #45]: false
 unsat
-b448617db1567a507fc596f5b21ade645ca6e0f9 16 0
+383085ca96bed3199fce8a7516860e635411bc13 16 0
 #2 := false
 #1 := true
 #8 := (or true false)
@@ -252,7 +252,7 @@
 #26 := [asserted]: #9
 [mp #26 #35]: false
 unsat
-a21434fdffa6243cc7410eb0aff669b84c5be474 41 0
+b8d5743ec1146548a209ace4cd6155117ecb0983 41 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -294,7 +294,7 @@
 #30 := [asserted]: #13
 [mp #30 #57]: false
 unsat
-bf545ecaa58049cbf454eac70ee3077f64564cca 16 0
+bfcbf10bac83ae3af48158f2275ff2d80613bb1c 16 0
 #2 := false
 #1 := true
 #8 := (implies false true)
@@ -311,7 +311,7 @@
 #26 := [asserted]: #9
 [mp #26 #35]: false
 unsat
-a6a664cc4c3ff45fb3211b72c0f520208b902c9b 47 0
+1318ba8c39667bffead89e0e37453cef395b803a 47 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -359,7 +359,7 @@
 #32 := [asserted]: #15
 [mp #32 #62]: false
 unsat
-9a169ba4d23a9080465edad5616230c8b4e1ef98 149 0
+3613b4af790179e90308b88e5d17e375488860dc 149 0
 #2 := false
 decl f5 :: S1
 #12 := f5
@@ -509,7 +509,7 @@
 #109 := [def-axiom]: #108
 [unit-resolution #109 #165 #164 #161]: false
 unsat
-d99e41f56c960ba88eb8ca95c5a49bd2181a7626 47 0
+f66e70c965ea5e45c5d8d8afc12c5c9d8f438bbf 47 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -557,7 +557,7 @@
 #32 := [asserted]: #15
 [mp #32 #62]: false
 unsat
-8d07b6d671ef5c9eedcaa35c22d5f1c7124504cb 66 0
+6a02b3f460d6b73a1c8bb9bc10adaf8bab0c8e8d 66 0
 #2 := false
 decl f3 :: S1
 #8 := f3
@@ -624,7 +624,7 @@
 #95 := [unit-resolution #86 #65]: #94
 [unit-resolution #95 #93 #92]: false
 unsat
-a8e5086b6e21c7bf961a22426cb7ae14847089d7 55 0
+6ad20e70359f46e3ce1c064a3b8026cad7cd2ff8 55 0
 #2 := false
 decl f3 :: S1
 #8 := f3
@@ -680,7 +680,7 @@
 #71 := [and-elim #70]: #33
 [mp #71 #77]: false
 unsat
-415ad6a91bb75e131bb05d34f1965ab914825b25 67 0
+6b05ab468934ffcc0e31bde41bfd81d0a9deefeb 67 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -748,7 +748,7 @@
 #38 := [asserted]: #21
 [mp #38 #80]: false
 unsat
-e2d0843914ae918fb9bd06a2d6949232327217fa 55 0
+2b253648b79acb0e52fb9e262cb32419808d9871 55 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -804,7 +804,7 @@
 #33 := [asserted]: #16
 [mp #33 #70]: false
 unsat
-8b8741030ee2ece2c8d6b3906a1951bc56d9b885 67 0
+641947287e52d98b055b0c416150e15eb1a766da 67 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -872,7 +872,7 @@
 #38 := [asserted]: #21
 [mp #38 #80]: false
 unsat
-00d9c16458cf2825e776c32505a513a412ede70f 55 0
+9b964feeca237f6b2088e905866f89fe7614b790 55 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -928,7 +928,7 @@
 #33 := [asserted]: #16
 [mp #33 #70]: false
 unsat
-a0ca672c65c25c024851f833f39bfb2c705ec387 186 0
+d314e49b3b13f8d1c45bdec28f1a923eafa9dd30 186 0
 #2 := false
 decl f5 :: S1
 #12 := f5
@@ -1115,7 +1115,7 @@
 #118 := [def-axiom]: #117
 [unit-resolution #118 #203 #201]: false
 unsat
-bca31cbd8bb6114896c32a11dfae7025f2fc07b1 49 0
+9edb7fb964a6bff17daa4ba37de7c9c60f75b958 49 0
 #2 := false
 decl f3 :: S1
 #8 := f3
@@ -1165,7 +1165,41 @@
 #63 := [and-elim #61]: #34
 [mp #63 #69]: false
 unsat
-f5031e01f448cd128a3cce562b470d23d1a8bc59 54 0
+a7388049ad99f131accb8444cd89b6a9c1fac45f 33 0
+#2 := false
+decl f1 :: S1
+#4 := f1
+decl f3 :: S1
+#8 := f3
+#9 := (= f3 f1)
+#10 := (not #9)
+#11 := (ite #9 #9 #10)
+#12 := (not #11)
+#48 := (iff #12 false)
+#1 := true
+#43 := (not true)
+#46 := (iff #43 false)
+#47 := [rewrite]: #46
+#44 := (iff #12 #43)
+#41 := (iff #11 true)
+#30 := (= f1 f3)
+#33 := (not #30)
+#36 := (ite #30 #30 #33)
+#39 := (iff #36 true)
+#40 := [rewrite]: #39
+#37 := (iff #11 #36)
+#34 := (iff #10 #33)
+#31 := (iff #9 #30)
+#32 := [rewrite]: #31
+#35 := [monotonicity #32]: #34
+#38 := [monotonicity #32 #32 #35]: #37
+#42 := [trans #38 #40]: #41
+#45 := [monotonicity #42]: #44
+#49 := [trans #45 #47]: #48
+#29 := [asserted]: #12
+[mp #29 #49]: false
+unsat
+60c47bbe18daad2442ee45433370ee0806f6bb96 54 0
 #2 := false
 decl f3 :: S1
 #8 := f3
@@ -1220,7 +1254,7 @@
 #68 := [and-elim #66]: #34
 [mp #68 #74]: false
 unsat
-6bcac7ed9b4a6f3af0933f64ee0cb316b51a44ed 33 0
+39f56c1d543d6413fc0dc639b2b6f15664655196 33 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -1228,7 +1262,7 @@
 #8 := f3
 #9 := (= f3 f1)
 #10 := (not #9)
-#11 := (ite #9 #9 #10)
+#11 := (ite #10 #10 #9)
 #12 := (not #11)
 #48 := (iff #12 false)
 #1 := true
@@ -1239,22 +1273,22 @@
 #41 := (iff #11 true)
 #30 := (= f1 f3)
 #33 := (not #30)
-#36 := (ite #30 #30 #33)
+#36 := (ite #33 #33 #30)
 #39 := (iff #36 true)
 #40 := [rewrite]: #39
 #37 := (iff #11 #36)
-#34 := (iff #10 #33)
 #31 := (iff #9 #30)
 #32 := [rewrite]: #31
+#34 := (iff #10 #33)
 #35 := [monotonicity #32]: #34
-#38 := [monotonicity #32 #32 #35]: #37
+#38 := [monotonicity #35 #35 #32]: #37
 #42 := [trans #38 #40]: #41
 #45 := [monotonicity #42]: #44
 #49 := [trans #45 #47]: #48
 #29 := [asserted]: #12
 [mp #29 #49]: false
 unsat
-38d7d5f12a8c933e456bba4a04c7645f4c87ea49 60 0
+4262551db767bfb5375132641dc2c0e90be1daa4 60 0
 #2 := false
 decl f4 :: S1
 #10 := f4
@@ -1315,41 +1349,26 @@
 #70 := [mp #35 #67]: #64
 [mp #70 #68]: false
 unsat
-be3ab8b5e09f8f942728ba1af0512891f56e0c5b 33 0
-#2 := false
-decl f1 :: S1
-#4 := f1
-decl f3 :: S1
-#8 := f3
-#9 := (= f3 f1)
+6a7b76cfae07a340fb39c8963a01cd95eedd8bf9 18 0
+#2 := false
+decl f3 :: S2
+#8 := f3
+#9 := (= f3 f3)
 #10 := (not #9)
-#11 := (ite #10 #10 #9)
-#12 := (not #11)
-#48 := (iff #12 false)
-#1 := true
-#43 := (not true)
-#46 := (iff #43 false)
-#47 := [rewrite]: #46
-#44 := (iff #12 #43)
-#41 := (iff #11 true)
-#30 := (= f1 f3)
-#33 := (not #30)
-#36 := (ite #33 #33 #30)
-#39 := (iff #36 true)
-#40 := [rewrite]: #39
-#37 := (iff #11 #36)
-#31 := (iff #9 #30)
-#32 := [rewrite]: #31
-#34 := (iff #10 #33)
-#35 := [monotonicity #32]: #34
-#38 := [monotonicity #35 #35 #32]: #37
-#42 := [trans #38 #40]: #41
-#45 := [monotonicity #42]: #44
-#49 := [trans #45 #47]: #48
-#29 := [asserted]: #12
-[mp #29 #49]: false
-unsat
-27121de8ceb5985c14cca2c4563e9cad4d2ebd3c 79 0
+#35 := (iff #10 false)
+#1 := true
+#30 := (not true)
+#33 := (iff #30 false)
+#34 := [rewrite]: #33
+#31 := (iff #10 #30)
+#28 := (iff #9 true)
+#29 := [rewrite]: #28
+#32 := [monotonicity #29]: #31
+#36 := [trans #32 #34]: #35
+#27 := [asserted]: #10
+[mp #27 #36]: false
+unsat
+09afbbf0eb362cf37facfae99f9d6f31556e820b 79 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -1429,26 +1448,37 @@
 #36 := [asserted]: #19
 [mp #36 #93]: false
 unsat
-aa78c56be2c8312419ab25323cf112e3e8809e9f 18 0
+902a92cdc108cc8b99cf8896d6549c8ca538e3d0 29 0
 #2 := false
 decl f3 :: S2
 #8 := f3
-#9 := (= f3 f3)
-#10 := (not #9)
-#35 := (iff #10 false)
-#1 := true
-#30 := (not true)
-#33 := (iff #30 false)
-#34 := [rewrite]: #33
-#31 := (iff #10 #30)
-#28 := (iff #9 true)
-#29 := [rewrite]: #28
-#32 := [monotonicity #29]: #31
-#36 := [trans #32 #34]: #35
-#27 := [asserted]: #10
-[mp #27 #36]: false
-unsat
-dc14c19019afcaa63507e4b503184496ed6bfd2f 94 0
+decl f4 :: S2
+#9 := f4
+#11 := (= f4 f3)
+#10 := (= f3 f4)
+#12 := (implies #10 #11)
+#13 := (not #12)
+#45 := (iff #13 false)
+#1 := true
+#40 := (not true)
+#43 := (iff #40 false)
+#44 := [rewrite]: #43
+#41 := (iff #13 #40)
+#38 := (iff #12 true)
+#33 := (implies #10 #10)
+#36 := (iff #33 true)
+#37 := [rewrite]: #36
+#34 := (iff #12 #33)
+#31 := (iff #11 #10)
+#32 := [rewrite]: #31
+#35 := [monotonicity #32]: #34
+#39 := [trans #35 #37]: #38
+#42 := [monotonicity #39]: #41
+#46 := [trans #42 #44]: #45
+#30 := [asserted]: #13
+[mp #30 #46]: false
+unsat
+be971aad38d2b7ade1dc5cd9703570a52b3c13d8 94 0
 #2 := false
 decl f5 :: S1
 #13 := f5
@@ -1543,37 +1573,42 @@
 #96 := [not-or-elim #89]: #70
 [mp #96 #112]: false
 unsat
-8d3a435e96c2d773a90e94525d09aa8a352d27d6 29 0
-#2 := false
+adac1ab250a9687a951445e1ab79aef512dbc4ce 34 0
+#2 := false
+decl f5 :: S2
+#11 := f5
 decl f3 :: S2
 #8 := f3
+#14 := (= f3 f5)
 decl f4 :: S2
 #9 := f4
-#11 := (= f4 f3)
+#12 := (= f4 f5)
+#58 := (iff #12 #14)
+#56 := (iff #14 #12)
 #10 := (= f3 f4)
-#12 := (implies #10 #11)
-#13 := (not #12)
-#45 := (iff #13 false)
-#1 := true
-#40 := (not true)
-#43 := (iff #40 false)
-#44 := [rewrite]: #43
-#41 := (iff #13 #40)
-#38 := (iff #12 true)
-#33 := (implies #10 #10)
-#36 := (iff #33 true)
+#13 := (and #10 #12)
+#34 := (not #13)
+#35 := (or #34 #14)
+#38 := (not #35)
+#15 := (implies #13 #14)
+#16 := (not #15)
+#39 := (iff #16 #38)
+#36 := (iff #15 #35)
 #37 := [rewrite]: #36
-#34 := (iff #12 #33)
-#31 := (iff #11 #10)
-#32 := [rewrite]: #31
-#35 := [monotonicity #32]: #34
-#39 := [trans #35 #37]: #38
-#42 := [monotonicity #39]: #41
-#46 := [trans #42 #44]: #45
-#30 := [asserted]: #13
-[mp #30 #46]: false
-unsat
-682b764e75beeea86518e9d265c22d014c6c1f1d 114 0
+#40 := [monotonicity #37]: #39
+#33 := [asserted]: #16
+#43 := [mp #33 #40]: #38
+#41 := [not-or-elim #43]: #13
+#42 := [and-elim #41]: #10
+#57 := [monotonicity #42]: #56
+#59 := [symm #57]: #58
+#44 := [and-elim #41]: #12
+#54 := [mp #44 #59]: #14
+#45 := (not #14)
+#46 := [not-or-elim #43]: #45
+[unit-resolution #46 #54]: false
+unsat
+e22b0ec4c7a382fdc38d1cae4e9ead0e7119241c 114 0
 #2 := false
 decl f5 :: S1
 #13 := f5
@@ -1688,42 +1723,35 @@
 #136 := [unit-resolution #109 #135]: #87
 [unit-resolution #93 #136 #134]: false
 unsat
-7d6e447cf6e1145f4f9a866bcc3cde4710e17c79 34 0
-#2 := false
-decl f5 :: S2
-#11 := f5
+fecb07c630f2b4838d9143ebd9c448ef1d8c0d9f 27 0
+#2 := false
+decl f5 :: (-> S2 S2)
+decl f4 :: S2
+#9 := f4
+#12 := (f5 f4)
 decl f3 :: S2
 #8 := f3
-#14 := (= f3 f5)
-decl f4 :: S2
-#9 := f4
-#12 := (= f4 f5)
-#58 := (iff #12 #14)
-#56 := (iff #14 #12)
+#11 := (f5 f3)
+#13 := (= #11 #12)
 #10 := (= f3 f4)
-#13 := (and #10 #12)
-#34 := (not #13)
-#35 := (or #34 #14)
-#38 := (not #35)
-#15 := (implies #13 #14)
-#16 := (not #15)
-#39 := (iff #16 #38)
-#36 := (iff #15 #35)
-#37 := [rewrite]: #36
-#40 := [monotonicity #37]: #39
-#33 := [asserted]: #16
-#43 := [mp #33 #40]: #38
-#41 := [not-or-elim #43]: #13
-#42 := [and-elim #41]: #10
-#57 := [monotonicity #42]: #56
-#59 := [symm #57]: #58
-#44 := [and-elim #41]: #12
-#54 := [mp #44 #59]: #14
-#45 := (not #14)
-#46 := [not-or-elim #43]: #45
-[unit-resolution #46 #54]: false
-unsat
-c134dad603b5004748b4c36796dfbdf41bc232cc 121 0
+#33 := (not #10)
+#34 := (or #33 #13)
+#37 := (not #34)
+#14 := (implies #10 #13)
+#15 := (not #14)
+#38 := (iff #15 #37)
+#35 := (iff #14 #34)
+#36 := [rewrite]: #35
+#39 := [monotonicity #36]: #38
+#32 := [asserted]: #15
+#42 := [mp #32 #39]: #37
+#40 := [not-or-elim #42]: #10
+#51 := [monotonicity #40]: #13
+#41 := (not #13)
+#43 := [not-or-elim #42]: #41
+[unit-resolution #43 #51]: false
+unsat
+bd0235065d3ae8e8f7120ef8c728cacf6335092d 121 0
 #2 := false
 decl f5 :: S1
 #13 := f5
@@ -1845,16 +1873,17 @@
 #99 := [not-or-elim #92]: #98
 [mp #99 #138]: false
 unsat
-810792c4ea80c0bc3287d99f969f1a65dc039da5 27 0
-#2 := false
-decl f5 :: (-> S2 S2)
+d0fff77820573b42e578c359c531050dc8cc1cb7 31 0
+#2 := false
+decl f5 :: (-> S2 S2 S3)
+decl f3 :: S2
+#8 := f3
 decl f4 :: S2
 #9 := f4
-#12 := (f5 f4)
-decl f3 :: S2
-#8 := f3
-#11 := (f5 f3)
+#12 := (f5 f4 f3)
+#11 := (f5 f3 f4)
 #13 := (= #11 #12)
+#53 := (= #12 #11)
 #10 := (= f3 f4)
 #33 := (not #10)
 #34 := (or #33 #13)
@@ -1868,12 +1897,15 @@
 #32 := [asserted]: #15
 #42 := [mp #32 #39]: #37
 #40 := [not-or-elim #42]: #10
-#51 := [monotonicity #40]: #13
+#51 := (= f4 f3)
+#52 := [symm #40]: #51
+#54 := [monotonicity #52 #40]: #53
+#49 := [symm #54]: #13
 #41 := (not #13)
 #43 := [not-or-elim #42]: #41
-[unit-resolution #43 #51]: false
-unsat
-7afff0259006c1c4b6a802d510f1b96695b3e9ad 110 0
+[unit-resolution #43 #49]: false
+unsat
+b0ca15f9e66f88090a8bcf746cc11c5e9df6c55c 110 0
 #2 := false
 decl f4 :: S1
 #10 := f4
@@ -1984,39 +2016,71 @@
 #84 := [and-elim #83]: #44
 [mp #84 #129]: false
 unsat
-09e564f98c53b63bab667092b7072fa2b674fa08 31 0
-#2 := false
-decl f5 :: (-> S2 S2 S3)
-decl f3 :: S2
-#8 := f3
+18f8f90b1403ab11e524a667a0fd98ca5bbf61ca 63 0
+#2 := false
+decl f3 :: (-> S2 S2)
 decl f4 :: S2
-#9 := f4
-#12 := (f5 f4 f3)
-#11 := (f5 f3 f4)
-#13 := (= #11 #12)
-#53 := (= #12 #11)
-#10 := (= f3 f4)
-#33 := (not #10)
-#34 := (or #33 #13)
-#37 := (not #34)
-#14 := (implies #10 #13)
-#15 := (not #14)
-#38 := (iff #15 #37)
-#35 := (iff #14 #34)
-#36 := [rewrite]: #35
-#39 := [monotonicity #36]: #38
-#32 := [asserted]: #15
-#42 := [mp #32 #39]: #37
-#40 := [not-or-elim #42]: #10
-#51 := (= f4 f3)
-#52 := [symm #40]: #51
-#54 := [monotonicity #52 #40]: #53
-#49 := [symm #54]: #13
-#41 := (not #13)
-#43 := [not-or-elim #42]: #41
-[unit-resolution #43 #49]: false
-unsat
-83b90287eef3783de4d8fa4aad70d03dd0abddbf 127 0
+#8 := f4
+#9 := (f3 f4)
+#46 := (= f4 #9)
+#10 := (f3 #9)
+#12 := (f3 #10)
+#78 := (= #12 #9)
+#76 := (= #9 #12)
+#37 := (= f4 #10)
+#13 := (f3 #12)
+#14 := (f3 #13)
+#40 := (= f4 #14)
+#43 := (and #37 #40)
+#52 := (not #43)
+#53 := (or #52 #46)
+#58 := (not #53)
+#17 := (= #9 f4)
+#15 := (= #14 f4)
+#11 := (= #10 f4)
+#16 := (and #11 #15)
+#18 := (implies #16 #17)
+#19 := (not #18)
+#59 := (iff #19 #58)
+#56 := (iff #18 #53)
+#49 := (implies #43 #46)
+#54 := (iff #49 #53)
+#55 := [rewrite]: #54
+#50 := (iff #18 #49)
+#47 := (iff #17 #46)
+#48 := [rewrite]: #47
+#44 := (iff #16 #43)
+#41 := (iff #15 #40)
+#42 := [rewrite]: #41
+#38 := (iff #11 #37)
+#39 := [rewrite]: #38
+#45 := [monotonicity #39 #42]: #44
+#51 := [monotonicity #45 #48]: #50
+#57 := [trans #51 #55]: #56
+#60 := [monotonicity #57]: #59
+#36 := [asserted]: #19
+#63 := [mp #36 #60]: #58
+#61 := [not-or-elim #63]: #43
+#62 := [and-elim #61]: #37
+#77 := [monotonicity #62]: #76
+#79 := [symm #77]: #78
+#81 := (= f4 #12)
+#67 := (= #14 #12)
+#70 := (= #12 #14)
+#72 := (= #10 #13)
+#74 := (= #13 #10)
+#75 := [monotonicity #79]: #74
+#73 := [symm #75]: #72
+#71 := [monotonicity #73]: #70
+#80 := [symm #71]: #67
+#64 := [and-elim #61]: #40
+#82 := [trans #64 #80]: #81
+#83 := [trans #82 #79]: #46
+#65 := (not #46)
+#66 := [not-or-elim #63]: #65
+[unit-resolution #66 #83]: false
+unsat
+a46bdf5ddd9c6bc8726e86b886e63d5fce2aa764 127 0
 #2 := false
 decl f5 :: S1
 #13 := f5
@@ -2144,138 +2208,7 @@
 #149 := [unit-resolution #131 #147]: #97
 [unit-resolution #108 #149 #148]: false
 unsat
-f97c055cc3b87ad54efe59b6c22e3e3633409f7e 63 0
-#2 := false
-decl f3 :: (-> S2 S2)
-decl f4 :: S2
-#8 := f4
-#9 := (f3 f4)
-#46 := (= f4 #9)
-#10 := (f3 #9)
-#12 := (f3 #10)
-#78 := (= #12 #9)
-#76 := (= #9 #12)
-#37 := (= f4 #10)
-#13 := (f3 #12)
-#14 := (f3 #13)
-#40 := (= f4 #14)
-#43 := (and #37 #40)
-#52 := (not #43)
-#53 := (or #52 #46)
-#58 := (not #53)
-#17 := (= #9 f4)
-#15 := (= #14 f4)
-#11 := (= #10 f4)
-#16 := (and #11 #15)
-#18 := (implies #16 #17)
-#19 := (not #18)
-#59 := (iff #19 #58)
-#56 := (iff #18 #53)
-#49 := (implies #43 #46)
-#54 := (iff #49 #53)
-#55 := [rewrite]: #54
-#50 := (iff #18 #49)
-#47 := (iff #17 #46)
-#48 := [rewrite]: #47
-#44 := (iff #16 #43)
-#41 := (iff #15 #40)
-#42 := [rewrite]: #41
-#38 := (iff #11 #37)
-#39 := [rewrite]: #38
-#45 := [monotonicity #39 #42]: #44
-#51 := [monotonicity #45 #48]: #50
-#57 := [trans #51 #55]: #56
-#60 := [monotonicity #57]: #59
-#36 := [asserted]: #19
-#63 := [mp #36 #60]: #58
-#61 := [not-or-elim #63]: #43
-#62 := [and-elim #61]: #37
-#77 := [monotonicity #62]: #76
-#79 := [symm #77]: #78
-#81 := (= f4 #12)
-#67 := (= #14 #12)
-#70 := (= #12 #14)
-#72 := (= #10 #13)
-#74 := (= #13 #10)
-#75 := [monotonicity #79]: #74
-#73 := [symm #75]: #72
-#71 := [monotonicity #73]: #70
-#80 := [symm #71]: #67
-#64 := [and-elim #61]: #40
-#82 := [trans #64 #80]: #81
-#83 := [trans #82 #79]: #46
-#65 := (not #46)
-#66 := [not-or-elim #63]: #65
-[unit-resolution #66 #83]: false
-unsat
-a7f2c916e2192b153aaac29ea6f75d0842fd84d2 66 0
-#2 := false
-decl f3 :: S1
-#8 := f3
-decl f1 :: S1
-#4 := f1
-#33 := (= f1 f3)
-decl f4 :: S1
-#10 := f4
-#36 := (= f1 f4)
-#42 := (not #33)
-#43 := (or #42 #36)
-#51 := (not #43)
-#52 := (or #33 #51)
-#82 := (iff #52 #51)
-#77 := (or false #51)
-#80 := (iff #77 #51)
-#81 := [rewrite]: #80
-#78 := (iff #52 #77)
-#75 := (iff #33 false)
-#60 := (not #52)
-#61 := (or #33 #60)
-#66 := (not #61)
-#9 := (= f3 f1)
-#11 := (= f4 f1)
-#12 := (implies #9 #11)
-#13 := (implies #12 #9)
-#14 := (implies #13 #9)
-#15 := (not #14)
-#67 := (iff #15 #66)
-#64 := (iff #14 #61)
-#57 := (implies #52 #33)
-#62 := (iff #57 #61)
-#63 := [rewrite]: #62
-#58 := (iff #14 #57)
-#34 := (iff #9 #33)
-#35 := [rewrite]: #34
-#55 := (iff #13 #52)
-#48 := (implies #43 #33)
-#53 := (iff #48 #52)
-#54 := [rewrite]: #53
-#49 := (iff #13 #48)
-#46 := (iff #12 #43)
-#39 := (implies #33 #36)
-#44 := (iff #39 #43)
-#45 := [rewrite]: #44
-#40 := (iff #12 #39)
-#37 := (iff #11 #36)
-#38 := [rewrite]: #37
-#41 := [monotonicity #35 #38]: #40
-#47 := [trans #41 #45]: #46
-#50 := [monotonicity #47 #35]: #49
-#56 := [trans #50 #54]: #55
-#59 := [monotonicity #56 #35]: #58
-#65 := [trans #59 #63]: #64
-#68 := [monotonicity #65]: #67
-#32 := [asserted]: #15
-#71 := [mp #32 #68]: #66
-#69 := [not-or-elim #71]: #42
-#76 := [iff-false #69]: #75
-#79 := [monotonicity #76]: #78
-#83 := [trans #79 #81]: #82
-#70 := [not-or-elim #71]: #52
-#84 := [mp #70 #83]: #51
-#74 := [not-or-elim #84]: #33
-[unit-resolution #69 #74]: false
-unsat
-0b20a1cbaefe018fa6502d17013ec89dc657717b 195 0
+937f73f84ea1ebaa68a1a0ee6c81cfd2f4fda91b 195 0
 #2 := false
 decl f6 :: S2
 #13 := f6
@@ -2471,7 +2404,74 @@
 #209 := [unit-resolution #118 #208]: #116
 [unit-resolution #209 #210]: false
 unsat
-d398c106ccd0941d46bab8e5feda32347dd02740 156 0
+622e9d57e1cdc32316cdcbb8529fc67f719c97a9 66 0
+#2 := false
+decl f3 :: S1
+#8 := f3
+decl f1 :: S1
+#4 := f1
+#33 := (= f1 f3)
+decl f4 :: S1
+#10 := f4
+#36 := (= f1 f4)
+#42 := (not #33)
+#43 := (or #42 #36)
+#51 := (not #43)
+#52 := (or #33 #51)
+#82 := (iff #52 #51)
+#77 := (or false #51)
+#80 := (iff #77 #51)
+#81 := [rewrite]: #80
+#78 := (iff #52 #77)
+#75 := (iff #33 false)
+#60 := (not #52)
+#61 := (or #33 #60)
+#66 := (not #61)
+#9 := (= f3 f1)
+#11 := (= f4 f1)
+#12 := (implies #9 #11)
+#13 := (implies #12 #9)
+#14 := (implies #13 #9)
+#15 := (not #14)
+#67 := (iff #15 #66)
+#64 := (iff #14 #61)
+#57 := (implies #52 #33)
+#62 := (iff #57 #61)
+#63 := [rewrite]: #62
+#58 := (iff #14 #57)
+#34 := (iff #9 #33)
+#35 := [rewrite]: #34
+#55 := (iff #13 #52)
+#48 := (implies #43 #33)
+#53 := (iff #48 #52)
+#54 := [rewrite]: #53
+#49 := (iff #13 #48)
+#46 := (iff #12 #43)
+#39 := (implies #33 #36)
+#44 := (iff #39 #43)
+#45 := [rewrite]: #44
+#40 := (iff #12 #39)
+#37 := (iff #11 #36)
+#38 := [rewrite]: #37
+#41 := [monotonicity #35 #38]: #40
+#47 := [trans #41 #45]: #46
+#50 := [monotonicity #47 #35]: #49
+#56 := [trans #50 #54]: #55
+#59 := [monotonicity #56 #35]: #58
+#65 := [trans #59 #63]: #64
+#68 := [monotonicity #65]: #67
+#32 := [asserted]: #15
+#71 := [mp #32 #68]: #66
+#69 := [not-or-elim #71]: #42
+#76 := [iff-false #69]: #75
+#79 := [monotonicity #76]: #78
+#83 := [trans #79 #81]: #82
+#70 := [not-or-elim #71]: #52
+#84 := [mp #70 #83]: #51
+#74 := [not-or-elim #84]: #33
+[unit-resolution #69 #74]: false
+unsat
+2e293f73ef5ad101901501ab2dcfcefd193999bd 156 0
 #2 := false
 decl f5 :: S1
 #13 := f5
@@ -2628,44 +2628,7 @@
 #114 := [def-axiom]: #113
 [unit-resolution #114 #172 #170]: false
 unsat
-ba53dbe39a10406601e0a359b3a1de14129ef1a1 36 0
-#2 := false
-decl f5 :: S2
-#10 := f5
-decl f3 :: S2
-#8 := f3
-#12 := (= f3 f5)
-#13 := (not #12)
-decl f4 :: S2
-#9 := f4
-#11 := (distinct f3 f4 f5)
-#33 := (not #11)
-#34 := (or #33 #13)
-#37 := (not #34)
-#14 := (implies #11 #13)
-#15 := (not #14)
-#38 := (iff #15 #37)
-#35 := (iff #14 #34)
-#36 := [rewrite]: #35
-#39 := [monotonicity #36]: #38
-#32 := [asserted]: #15
-#42 := [mp #32 #39]: #37
-#41 := [not-or-elim #42]: #12
-#52 := (= f4 f5)
-#53 := (not #52)
-#50 := (= f3 f4)
-#51 := (not #50)
-#48 := (and #51 #13 #53)
-#40 := [not-or-elim #42]: #11
-#58 := (or #33 #48)
-#59 := [def-axiom]: #58
-#62 := [unit-resolution #59 #40]: #48
-#49 := (not #48)
-#45 := (or #49 #13)
-#43 := [def-axiom]: #45
-[unit-resolution #43 #62 #41]: false
-unsat
-78ae843b278e5f0cc65999ee60776dec7c9f683f 114 0
+ab1dfd2f679d7dbdde93be399a76ec5036d3899f 114 0
 #2 := false
 decl f5 :: S1
 #13 := f5
@@ -2780,85 +2743,7 @@
 #101 := [mp #36 #100]: #94
 [mp #101 #130]: false
 unsat
-08e0778705271e8f33e9bdf3c26b749a4c39eda2 77 0
-#2 := false
-decl f4 :: S2
-#9 := f4
-decl f3 :: S2
-#8 := f3
-#81 := (= f3 f4)
-decl f6 :: S2
-#12 := f6
-#36 := (= f4 f6)
-#100 := (iff #36 #81)
-#98 := (iff #81 #36)
-#13 := (= f6 f4)
-#37 := (iff #13 #36)
-#97 := [commutativity]: #37
-#95 := (iff #81 #13)
-#14 := (= f3 f6)
-#42 := (not #36)
-#15 := (not #14)
-decl f5 :: S2
-#10 := f5
-#11 := (distinct f3 f4 f5)
-#51 := (not #11)
-#60 := (or #51 #15 #42)
-#63 := (not #60)
-#16 := (implies #13 #15)
-#17 := (implies #11 #16)
-#18 := (not #17)
-#66 := (iff #18 #63)
-#43 := (or #15 #42)
-#52 := (or #51 #43)
-#57 := (not #52)
-#64 := (iff #57 #63)
-#61 := (iff #52 #60)
-#62 := [rewrite]: #61
-#65 := [monotonicity #62]: #64
-#58 := (iff #18 #57)
-#55 := (iff #17 #52)
-#48 := (implies #11 #43)
-#53 := (iff #48 #52)
-#54 := [rewrite]: #53
-#49 := (iff #17 #48)
-#46 := (iff #16 #43)
-#39 := (implies #36 #15)
-#44 := (iff #39 #43)
-#45 := [rewrite]: #44
-#40 := (iff #16 #39)
-#38 := [rewrite]: #37
-#41 := [monotonicity #38]: #40
-#47 := [trans #41 #45]: #46
-#50 := [monotonicity #47]: #49
-#56 := [trans #50 #54]: #55
-#59 := [monotonicity #56]: #58
-#67 := [trans #59 #65]: #66
-#35 := [asserted]: #18
-#68 := [mp #35 #67]: #63
-#70 := [not-or-elim #68]: #14
-#96 := [monotonicity #70]: #95
-#99 := [trans #96 #97]: #98
-#101 := [symm #99]: #100
-#71 := [not-or-elim #68]: #36
-#102 := [mp #71 #101]: #81
-#82 := (not #81)
-#79 := (= f4 f5)
-#80 := (not #79)
-#83 := (= f3 f5)
-#84 := (not #83)
-#77 := (and #82 #84 #80)
-#69 := [not-or-elim #68]: #11
-#89 := (or #51 #77)
-#90 := [def-axiom]: #89
-#93 := [unit-resolution #90 #69]: #77
-#78 := (not #77)
-#75 := (or #78 #82)
-#76 := [def-axiom]: #75
-#94 := [unit-resolution #76 #93]: #82
-[unit-resolution #94 #102]: false
-unsat
-016fee2f7f490b7727a4579bedbeaa0a03271f5c 198 0
+2bb827008c60da1ea2c111246c9460521c7fdcf1 198 0
 #2 := false
 decl f5 :: S1
 #14 := f5
@@ -3057,36 +2942,7 @@
 #141 := [not-or-elim #136]: #93
 [mp #141 #215]: false
 unsat
-32fbe7827173348f5f83cc50b7e41574fd04dba5 28 0
-#2 := false
-decl f4 :: S2
-#9 := f4
-decl f3 :: S2
-#8 := f3
-#10 := (distinct f3 f4 f3 f4)
-#11 := (not #10)
-#12 := (not #11)
-#44 := (iff #12 false)
-#1 := true
-#39 := (not true)
-#42 := (iff #39 false)
-#43 := [rewrite]: #42
-#40 := (iff #12 #39)
-#37 := (iff #11 true)
-#32 := (not false)
-#35 := (iff #32 true)
-#36 := [rewrite]: #35
-#33 := (iff #11 #32)
-#30 := (iff #10 false)
-#31 := [rewrite]: #30
-#34 := [monotonicity #31]: #33
-#38 := [trans #34 #36]: #37
-#41 := [monotonicity #38]: #40
-#45 := [trans #41 #43]: #44
-#29 := [asserted]: #12
-[mp #29 #45]: false
-unsat
-3e0305075f83d65498b4a11b8ca72526b8e2d46d 134 0
+6ab97d6ee969f9713508f655f280864782914283 134 0
 #2 := false
 decl f5 :: S1
 #14 := f5
@@ -3221,38 +3077,44 @@
 #121 := [not-or-elim #116]: #81
 [mp #121 #151]: false
 unsat
-00d94d0af0e9abf6798a28ecb39a441c7c299833 30 0
-#2 := false
-decl f4 :: S2
-#9 := f4
+9cc560481317ca8682cca4f4dca87fc7141c9928 36 0
+#2 := false
+decl f5 :: S2
+#10 := f5
 decl f3 :: S2
 #8 := f3
-#10 := (= f3 f4)
-#11 := (not #10)
-#12 := (not #11)
-#13 := (implies #10 #12)
-#14 := (not #13)
-#46 := (iff #14 false)
-#1 := true
-#41 := (not true)
-#44 := (iff #41 false)
-#45 := [rewrite]: #44
-#42 := (iff #14 #41)
-#39 := (iff #13 true)
-#34 := (implies #10 #10)
-#37 := (iff #34 true)
-#38 := [rewrite]: #37
-#35 := (iff #13 #34)
-#32 := (iff #12 #10)
-#33 := [rewrite]: #32
-#36 := [monotonicity #33]: #35
-#40 := [trans #36 #38]: #39
-#43 := [monotonicity #40]: #42
-#47 := [trans #43 #45]: #46
-#31 := [asserted]: #14
-[mp #31 #47]: false
-unsat
-78ecef8a6265ee63380698aee66f7437c6eb9791 162 0
+#12 := (= f3 f5)
+#13 := (not #12)
+decl f4 :: S2
+#9 := f4
+#11 := (distinct f3 f4 f5)
+#33 := (not #11)
+#34 := (or #33 #13)
+#37 := (not #34)
+#14 := (implies #11 #13)
+#15 := (not #14)
+#38 := (iff #15 #37)
+#35 := (iff #14 #34)
+#36 := [rewrite]: #35
+#39 := [monotonicity #36]: #38
+#32 := [asserted]: #15
+#42 := [mp #32 #39]: #37
+#41 := [not-or-elim #42]: #12
+#52 := (= f4 f5)
+#53 := (not #52)
+#50 := (= f3 f4)
+#51 := (not #50)
+#48 := (and #51 #13 #53)
+#40 := [not-or-elim #42]: #11
+#58 := (or #33 #48)
+#59 := [def-axiom]: #58
+#62 := [unit-resolution #59 #40]: #48
+#49 := (not #48)
+#45 := (or #49 #13)
+#43 := [def-axiom]: #45
+[unit-resolution #43 #62 #41]: false
+unsat
+d6c8bfd9e0a388a9f9feea361765c0999d6f6245 162 0
 #2 := false
 decl f5 :: S1
 #12 := f5
@@ -3415,48 +3277,85 @@
 #178 := [unit-resolution #128 #177]: #70
 [unit-resolution #136 #178 #176 #168]: false
 unsat
-11d1529c7a7d7cf3014e0031300d5be1524ea6df 40 0
-#2 := false
-decl f5 :: S2
-#11 := f5
+4a0a614367c2678ce3a689bf35cf13d010d59c1c 77 0
+#2 := false
 decl f4 :: S2
 #9 := f4
 decl f3 :: S2
 #8 := f3
-#14 := (distinct f3 f4 f5)
+#81 := (= f3 f4)
+decl f6 :: S2
+#12 := f6
+#36 := (= f4 f6)
+#100 := (iff #36 #81)
+#98 := (iff #81 #36)
+#13 := (= f6 f4)
+#37 := (iff #13 #36)
+#97 := [commutativity]: #37
+#95 := (iff #81 #13)
+#14 := (= f3 f6)
+#42 := (not #36)
 #15 := (not #14)
-#12 := (= f3 f5)
-#10 := (= f3 f4)
-#13 := (and #10 #12)
-#35 := (not #13)
-#36 := (or #35 #15)
-#39 := (not #36)
+decl f5 :: S2
+#10 := f5
+#11 := (distinct f3 f4 f5)
+#51 := (not #11)
+#60 := (or #51 #15 #42)
+#63 := (not #60)
 #16 := (implies #13 #15)
-#17 := (not #16)
-#40 := (iff #17 #39)
-#37 := (iff #16 #36)
+#17 := (implies #11 #16)
+#18 := (not #17)
+#66 := (iff #18 #63)
+#43 := (or #15 #42)
+#52 := (or #51 #43)
+#57 := (not #52)
+#64 := (iff #57 #63)
+#61 := (iff #52 #60)
+#62 := [rewrite]: #61
+#65 := [monotonicity #62]: #64
+#58 := (iff #18 #57)
+#55 := (iff #17 #52)
+#48 := (implies #11 #43)
+#53 := (iff #48 #52)
+#54 := [rewrite]: #53
+#49 := (iff #17 #48)
+#46 := (iff #16 #43)
+#39 := (implies #36 #15)
+#44 := (iff #39 #43)
+#45 := [rewrite]: #44
+#40 := (iff #16 #39)
 #38 := [rewrite]: #37
 #41 := [monotonicity #38]: #40
-#34 := [asserted]: #17
-#44 := [mp #34 #41]: #39
-#46 := [not-or-elim #44]: #14
-#58 := (= f4 f5)
-#59 := (not #58)
-#57 := (not #12)
-#56 := (not #10)
-#54 := (and #56 #57 #59)
-#55 := (not #54)
-#42 := [not-or-elim #44]: #13
-#43 := [and-elim #42]: #10
-#52 := (or #55 #56)
-#53 := [def-axiom]: #52
-#66 := [unit-resolution #53 #43]: #55
-#62 := (or #15 #54)
-#63 := [def-axiom]: #62
-#67 := [unit-resolution #63 #66]: #15
-[unit-resolution #67 #46]: false
-unsat
-cbabdc011b8a302b61906c6191f0d7af27e25599 54 0
+#47 := [trans #41 #45]: #46
+#50 := [monotonicity #47]: #49
+#56 := [trans #50 #54]: #55
+#59 := [monotonicity #56]: #58
+#67 := [trans #59 #65]: #66
+#35 := [asserted]: #18
+#68 := [mp #35 #67]: #63
+#70 := [not-or-elim #68]: #14
+#96 := [monotonicity #70]: #95
+#99 := [trans #96 #97]: #98
+#101 := [symm #99]: #100
+#71 := [not-or-elim #68]: #36
+#102 := [mp #71 #101]: #81
+#82 := (not #81)
+#79 := (= f4 f5)
+#80 := (not #79)
+#83 := (= f3 f5)
+#84 := (not #83)
+#77 := (and #82 #84 #80)
+#69 := [not-or-elim #68]: #11
+#89 := (or #51 #77)
+#90 := [def-axiom]: #89
+#93 := [unit-resolution #90 #69]: #77
+#78 := (not #77)
+#75 := (or #78 #82)
+#76 := [def-axiom]: #75
+#94 := [unit-resolution #76 #93]: #82
+[unit-resolution #94 #102]: false
+unsat
+0758d598d78862cf824e4f1011456a0914ccf6a2 54 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -3511,41 +3410,36 @@
 #31 := [asserted]: #14
 [mp #31 #69]: false
 unsat
-8585364a9de57f2c76854513f54ec42d9a599f64 33 0
-#2 := false
-decl f3 :: S2
-#8 := f3
-decl f5 :: S2
-#10 := f5
+1c0d1ac708791c5472b4c7d4618f1f27059a330a 28 0
+#2 := false
 decl f4 :: S2
 #9 := f4
-decl f6 :: S2
-#11 := f6
-#13 := (distinct f6 f4 f5 f3)
-#12 := (distinct f3 f4 f5 f6)
-#14 := (implies #12 #13)
-#15 := (not #14)
-#47 := (iff #15 false)
-#1 := true
-#42 := (not true)
-#45 := (iff #42 false)
-#46 := [rewrite]: #45
-#43 := (iff #15 #42)
-#40 := (iff #14 true)
-#35 := (implies #12 #12)
-#38 := (iff #35 true)
-#39 := [rewrite]: #38
-#36 := (iff #14 #35)
-#33 := (iff #13 #12)
-#34 := [rewrite]: #33
-#37 := [monotonicity #34]: #36
-#41 := [trans #37 #39]: #40
-#44 := [monotonicity #41]: #43
-#48 := [trans #44 #46]: #47
-#32 := [asserted]: #15
-[mp #32 #48]: false
-unsat
-ae8651ca265765f3bb029935ca54bf350a439257 144 0
+decl f3 :: S2
+#8 := f3
+#10 := (distinct f3 f4 f3 f4)
+#11 := (not #10)
+#12 := (not #11)
+#44 := (iff #12 false)
+#1 := true
+#39 := (not true)
+#42 := (iff #39 false)
+#43 := [rewrite]: #42
+#40 := (iff #12 #39)
+#37 := (iff #11 true)
+#32 := (not false)
+#35 := (iff #32 true)
+#36 := [rewrite]: #35
+#33 := (iff #11 #32)
+#30 := (iff #10 false)
+#31 := [rewrite]: #30
+#34 := [monotonicity #31]: #33
+#38 := [trans #34 #36]: #37
+#41 := [monotonicity #38]: #40
+#45 := [trans #41 #43]: #44
+#29 := [asserted]: #12
+[mp #29 #45]: false
+unsat
+d823881369082411f62355b0e1a48f25c2d70d32 144 0
 #2 := false
 decl f5 :: S1
 #12 := f5
@@ -3690,99 +3584,38 @@
 #126 := [not-or-elim #121]: #102
 [mp #126 #161]: false
 unsat
-a785d8d462362aedcc845e3ec87cbb8d13b87ae7 91 0
-#2 := false
-decl f5 :: S2
-#10 := f5
+2b10f8f450bda227c77b2302c26fe079a9366159 30 0
+#2 := false
 decl f4 :: S2
 #9 := f4
 decl f3 :: S2
 #8 := f3
-#13 := (distinct f3 f4 f5)
-#67 := (= f4 f5)
-#68 := (not #67)
-#63 := (= f3 f5)
-#64 := (not #63)
-#61 := (= f3 f4)
-#62 := (not #61)
-#93 := (and #62 #64 #68)
-decl f6 :: S2
-#11 := f6
-#71 := (= f5 f6)
-#72 := (not #71)
-#69 := (= f4 f6)
-#70 := (not #69)
-#65 := (= f3 f6)
-#66 := (not #65)
-#73 := (and #62 #64 #66 #68 #70 #72)
-#12 := (distinct f3 f4 f5 f6)
-#14 := (distinct f4 f5 f6)
-#15 := (and #13 #14)
-#35 := (not #12)
-#36 := (or #35 #15)
-#39 := (not #36)
-#16 := (implies #12 #15)
-#17 := (not #16)
-#40 := (iff #17 #39)
-#37 := (iff #16 #36)
+#10 := (= f3 f4)
+#11 := (not #10)
+#12 := (not #11)
+#13 := (implies #10 #12)
+#14 := (not #13)
+#46 := (iff #14 false)
+#1 := true
+#41 := (not true)
+#44 := (iff #41 false)
+#45 := [rewrite]: #44
+#42 := (iff #14 #41)
+#39 := (iff #13 true)
+#34 := (implies #10 #10)
+#37 := (iff #34 true)
 #38 := [rewrite]: #37
-#41 := [monotonicity #38]: #40
-#34 := [asserted]: #17
-#44 := [mp #34 #41]: #39
-#42 := [not-or-elim #44]: #12
-#89 := (or #35 #73)
-#90 := [def-axiom]: #89
-#121 := [unit-resolution #90 #42]: #73
-#74 := (not #73)
-#75 := (or #74 #62)
-#76 := [def-axiom]: #75
-#122 := [unit-resolution #76 #121]: #62
-#81 := (or #74 #68)
-#82 := [def-axiom]: #81
-#123 := [unit-resolution #82 #121]: #68
-#77 := (or #74 #64)
-#78 := [def-axiom]: #77
-#124 := [unit-resolution #78 #121]: #64
-#101 := (or #93 #61 #63 #67)
-#102 := [def-axiom]: #101
-#125 := [unit-resolution #102 #124 #123 #122]: #93
-#94 := (not #93)
-#105 := (or #13 #94)
-#106 := [def-axiom]: #105
-#126 := [unit-resolution #106 #125]: #13
-#107 := (and #68 #70 #72)
-#85 := (or #74 #72)
-#86 := [def-axiom]: #85
-#127 := [unit-resolution #86 #121]: #72
-#83 := (or #74 #70)
-#84 := [def-axiom]: #83
-#128 := [unit-resolution #84 #121]: #70
-#115 := (or #107 #67 #69 #71)
-#116 := [def-axiom]: #115
-#129 := [unit-resolution #116 #128 #127 #123]: #107
-#108 := (not #107)
-#119 := (or #14 #108)
-#120 := [def-axiom]: #119
-#130 := [unit-resolution #120 #129]: #14
-#54 := (not #14)
-#53 := (not #13)
-#55 := (or #53 #54)
-#43 := (not #15)
-#58 := (iff #43 #55)
-#56 := (not #55)
-#49 := (not #56)
-#46 := (iff #49 #55)
-#57 := [rewrite]: #46
-#50 := (iff #43 #49)
-#51 := (iff #15 #56)
-#52 := [rewrite]: #51
-#48 := [monotonicity #52]: #50
-#59 := [trans #48 #57]: #58
-#45 := [not-or-elim #44]: #43
-#60 := [mp #45 #59]: #55
-[unit-resolution #60 #130 #126]: false
-unsat
-f037e85f433fe4b6db0edebe38d7599d0d5f9a56 121 0
+#35 := (iff #13 #34)
+#32 := (iff #12 #10)
+#33 := [rewrite]: #32
+#36 := [monotonicity #33]: #35
+#40 := [trans #36 #38]: #39
+#43 := [monotonicity #40]: #42
+#47 := [trans #43 #45]: #46
+#31 := [asserted]: #14
+[mp #31 #47]: false
+unsat
+8bc104940e4bdef62a563b12c192439ecd08c6c2 121 0
 #2 := false
 decl f5 :: S1
 #13 := f5
@@ -3904,7 +3737,48 @@
 #115 := [not-or-elim #109]: #90
 [mp #115 #138]: false
 unsat
-a79fa106ccc873005f00005d34ba1798389c2876 123 0
+c9f554ce0537c03818658e81b19fe84ceb0185a6 40 0
+#2 := false
+decl f5 :: S2
+#11 := f5
+decl f4 :: S2
+#9 := f4
+decl f3 :: S2
+#8 := f3
+#14 := (distinct f3 f4 f5)
+#15 := (not #14)
+#12 := (= f3 f5)
+#10 := (= f3 f4)
+#13 := (and #10 #12)
+#35 := (not #13)
+#36 := (or #35 #15)
+#39 := (not #36)
+#16 := (implies #13 #15)
+#17 := (not #16)
+#40 := (iff #17 #39)
+#37 := (iff #16 #36)
+#38 := [rewrite]: #37
+#41 := [monotonicity #38]: #40
+#34 := [asserted]: #17
+#44 := [mp #34 #41]: #39
+#46 := [not-or-elim #44]: #14
+#58 := (= f4 f5)
+#59 := (not #58)
+#57 := (not #12)
+#56 := (not #10)
+#54 := (and #56 #57 #59)
+#55 := (not #54)
+#42 := [not-or-elim #44]: #13
+#43 := [and-elim #42]: #10
+#52 := (or #55 #56)
+#53 := [def-axiom]: #52
+#66 := [unit-resolution #53 #43]: #55
+#62 := (or #15 #54)
+#63 := [def-axiom]: #62
+#67 := [unit-resolution #63 #66]: #15
+[unit-resolution #67 #46]: false
+unsat
+43b0ec204044e8a9ddd46de106038d6a70829412 123 0
 #2 := false
 decl f4 :: S1
 #10 := f4
@@ -4028,7 +3902,41 @@
 #92 := [not-or-elim #91]: #72
 [mp #92 #141]: false
 unsat
-7e097d3ef4e0c4927519d96187a725503177b49b 60 0
+b4be7a04408986e429b4f7b85392a0d8faa4a56b 33 0
+#2 := false
+decl f3 :: S2
+#8 := f3
+decl f5 :: S2
+#10 := f5
+decl f4 :: S2
+#9 := f4
+decl f6 :: S2
+#11 := f6
+#13 := (distinct f6 f4 f5 f3)
+#12 := (distinct f3 f4 f5 f6)
+#14 := (implies #12 #13)
+#15 := (not #14)
+#47 := (iff #15 false)
+#1 := true
+#42 := (not true)
+#45 := (iff #42 false)
+#46 := [rewrite]: #45
+#43 := (iff #15 #42)
+#40 := (iff #14 true)
+#35 := (implies #12 #12)
+#38 := (iff #35 true)
+#39 := [rewrite]: #38
+#36 := (iff #14 #35)
+#33 := (iff #13 #12)
+#34 := [rewrite]: #33
+#37 := [monotonicity #34]: #36
+#41 := [trans #37 #39]: #40
+#44 := [monotonicity #41]: #43
+#48 := [trans #44 #46]: #47
+#32 := [asserted]: #15
+[mp #32 #48]: false
+unsat
+65d147f6ee969d919cd3b4f850a39f6a343f10f2 60 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -4089,33 +3997,99 @@
 #34 := [asserted]: #17
 [mp #34 #75]: false
 unsat
-273a6dc6f10616be4347838d6cbb54a0b0ad5636 25 0
-#2 := false
-#8 := (:var 0 S2)
-#9 := (= #8 #8)
-#10 := (forall (vars (?v0 S2)) #9)
-#11 := (not #10)
-#43 := (iff #11 false)
-#1 := true
-#38 := (not true)
-#41 := (iff #38 false)
-#42 := [rewrite]: #41
-#39 := (iff #11 #38)
-#36 := (iff #10 true)
-#31 := (forall (vars (?v0 S2)) true)
-#34 := (iff #31 true)
-#35 := [elim-unused]: #34
-#32 := (iff #10 #31)
-#29 := (iff #9 true)
-#30 := [rewrite]: #29
-#33 := [quant-intro #30]: #32
-#37 := [trans #33 #35]: #36
-#40 := [monotonicity #37]: #39
-#44 := [trans #40 #42]: #43
-#28 := [asserted]: #11
-[mp #28 #44]: false
-unsat
-cb74096d43b27b6df4bed4b142ce429518455d83 121 0
+58054335ac968ebfdfe24a066ff933b0b06bebaf 91 0
+#2 := false
+decl f5 :: S2
+#10 := f5
+decl f4 :: S2
+#9 := f4
+decl f3 :: S2
+#8 := f3
+#13 := (distinct f3 f4 f5)
+#67 := (= f4 f5)
+#68 := (not #67)
+#63 := (= f3 f5)
+#64 := (not #63)
+#61 := (= f3 f4)
+#62 := (not #61)
+#93 := (and #62 #64 #68)
+decl f6 :: S2
+#11 := f6
+#71 := (= f5 f6)
+#72 := (not #71)
+#69 := (= f4 f6)
+#70 := (not #69)
+#65 := (= f3 f6)
+#66 := (not #65)
+#73 := (and #62 #64 #66 #68 #70 #72)
+#12 := (distinct f3 f4 f5 f6)
+#14 := (distinct f4 f5 f6)
+#15 := (and #13 #14)
+#35 := (not #12)
+#36 := (or #35 #15)
+#39 := (not #36)
+#16 := (implies #12 #15)
+#17 := (not #16)
+#40 := (iff #17 #39)
+#37 := (iff #16 #36)
+#38 := [rewrite]: #37
+#41 := [monotonicity #38]: #40
+#34 := [asserted]: #17
+#44 := [mp #34 #41]: #39
+#42 := [not-or-elim #44]: #12
+#89 := (or #35 #73)
+#90 := [def-axiom]: #89
+#121 := [unit-resolution #90 #42]: #73
+#74 := (not #73)
+#75 := (or #74 #62)
+#76 := [def-axiom]: #75
+#122 := [unit-resolution #76 #121]: #62
+#81 := (or #74 #68)
+#82 := [def-axiom]: #81
+#123 := [unit-resolution #82 #121]: #68
+#77 := (or #74 #64)
+#78 := [def-axiom]: #77
+#124 := [unit-resolution #78 #121]: #64
+#101 := (or #93 #61 #63 #67)
+#102 := [def-axiom]: #101
+#125 := [unit-resolution #102 #124 #123 #122]: #93
+#94 := (not #93)
+#105 := (or #13 #94)
+#106 := [def-axiom]: #105
+#126 := [unit-resolution #106 #125]: #13
+#107 := (and #68 #70 #72)
+#85 := (or #74 #72)
+#86 := [def-axiom]: #85
+#127 := [unit-resolution #86 #121]: #72
+#83 := (or #74 #70)
+#84 := [def-axiom]: #83
+#128 := [unit-resolution #84 #121]: #70
+#115 := (or #107 #67 #69 #71)
+#116 := [def-axiom]: #115
+#129 := [unit-resolution #116 #128 #127 #123]: #107
+#108 := (not #107)
+#119 := (or #14 #108)
+#120 := [def-axiom]: #119
+#130 := [unit-resolution #120 #129]: #14
+#54 := (not #14)
+#53 := (not #13)
+#55 := (or #53 #54)
+#43 := (not #15)
+#58 := (iff #43 #55)
+#56 := (not #55)
+#49 := (not #56)
+#46 := (iff #49 #55)
+#57 := [rewrite]: #46
+#50 := (iff #43 #49)
+#51 := (iff #15 #56)
+#52 := [rewrite]: #51
+#48 := [monotonicity #52]: #50
+#59 := [trans #48 #57]: #58
+#45 := [not-or-elim #44]: #43
+#60 := [mp #45 #59]: #55
+[unit-resolution #60 #130 #126]: false
+unsat
+baf592f0a849ff17a84a15f9f01a6198981eb2cc 121 0
 #2 := false
 decl f5 :: S1
 #12 := f5
@@ -4237,42 +4211,33 @@
 #115 := [not-or-elim #109]: #90
 [mp #115 #138]: false
 unsat
-2b9ce0054ea55ee81c55715bd6d24aa6896b491c 34 0
-#2 := false
-decl f1 :: S1
-#4 := f1
-decl f3 :: (-> S2 S1)
+99555255ecbea462034ff141a5c25be38b45dd0f 25 0
+#2 := false
 #8 := (:var 0 S2)
-#9 := (f3 #8)
-#10 := (= #9 f1)
-#11 := (forall (vars (?v0 S2)) #10)
-#12 := (iff #11 #11)
-#13 := (not #12)
-#49 := (iff #13 false)
-#1 := true
-#44 := (not true)
-#47 := (iff #44 false)
-#48 := [rewrite]: #47
-#45 := (iff #13 #44)
-#42 := (iff #12 true)
-#31 := (= f1 #9)
-#34 := (forall (vars (?v0 S2)) #31)
-#37 := (iff #34 #34)
-#40 := (iff #37 true)
-#41 := [rewrite]: #40
-#38 := (iff #12 #37)
-#35 := (iff #11 #34)
+#9 := (= #8 #8)
+#10 := (forall (vars (?v0 S2)) #9)
+#11 := (not #10)
+#43 := (iff #11 false)
+#1 := true
+#38 := (not true)
+#41 := (iff #38 false)
+#42 := [rewrite]: #41
+#39 := (iff #11 #38)
+#36 := (iff #10 true)
+#31 := (forall (vars (?v0 S2)) true)
+#34 := (iff #31 true)
+#35 := [elim-unused]: #34
 #32 := (iff #10 #31)
-#33 := [rewrite]: #32
-#36 := [quant-intro #33]: #35
-#39 := [monotonicity #36 #36]: #38
-#43 := [trans #39 #41]: #42
-#46 := [monotonicity #43]: #45
-#50 := [trans #46 #48]: #49
-#30 := [asserted]: #13
-[mp #30 #50]: false
-unsat
-f67715569c1aa586d3c8e9a94e103b17f1f34614 84 0
+#29 := (iff #9 true)
+#30 := [rewrite]: #29
+#33 := [quant-intro #30]: #32
+#37 := [trans #33 #35]: #36
+#40 := [monotonicity #37]: #39
+#44 := [trans #40 #42]: #43
+#28 := [asserted]: #11
+[mp #28 #44]: false
+unsat
+882516ca3718492c49c1d6f4497b372b324593e7 84 0
 #2 := false
 decl f4 :: S1
 #10 := f4
@@ -4357,7 +4322,90 @@
 #96 := [unit-resolution #85 #93]: #83
 [unit-resolution #96 #101 #100]: false
 unsat
-4905f6794c524726db3be755d752d3ea53fc4f9a 95 0
+38463bf62ec87c56bbacd6ee7e49d6b7b9e553c8 34 0
+#2 := false
+decl f1 :: S1
+#4 := f1
+decl f3 :: (-> S2 S1)
+#8 := (:var 0 S2)
+#9 := (f3 #8)
+#10 := (= #9 f1)
+#11 := (forall (vars (?v0 S2)) #10)
+#12 := (iff #11 #11)
+#13 := (not #12)
+#49 := (iff #13 false)
+#1 := true
+#44 := (not true)
+#47 := (iff #44 false)
+#48 := [rewrite]: #47
+#45 := (iff #13 #44)
+#42 := (iff #12 true)
+#31 := (= f1 #9)
+#34 := (forall (vars (?v0 S2)) #31)
+#37 := (iff #34 #34)
+#40 := (iff #37 true)
+#41 := [rewrite]: #40
+#38 := (iff #12 #37)
+#35 := (iff #11 #34)
+#32 := (iff #10 #31)
+#33 := [rewrite]: #32
+#36 := [quant-intro #33]: #35
+#39 := [monotonicity #36 #36]: #38
+#43 := [trans #39 #41]: #42
+#46 := [monotonicity #43]: #45
+#50 := [trans #46 #48]: #49
+#30 := [asserted]: #13
+[mp #30 #50]: false
+unsat
+c1b8de1fea5b45b3a67eb085640285bc1cfbb463 47 0
+#2 := false
+decl f1 :: S1
+#4 := f1
+decl f3 :: S1
+#8 := f3
+#9 := (= f3 f1)
+decl f4 :: S1
+#10 := f4
+#11 := (= f4 f1)
+#13 := (iff #11 #9)
+#12 := (iff #9 #11)
+#14 := (iff #12 #13)
+#15 := (not #14)
+#61 := (iff #15 false)
+#1 := true
+#56 := (not true)
+#59 := (iff #56 false)
+#60 := [rewrite]: #59
+#57 := (iff #15 #56)
+#54 := (iff #14 true)
+#36 := (= f1 f4)
+#33 := (= f1 f3)
+#39 := (iff #33 #36)
+#49 := (iff #39 #39)
+#52 := (iff #49 true)
+#53 := [rewrite]: #52
+#50 := (iff #14 #49)
+#47 := (iff #13 #39)
+#42 := (iff #36 #33)
+#45 := (iff #42 #39)
+#46 := [rewrite]: #45
+#43 := (iff #13 #42)
+#34 := (iff #9 #33)
+#35 := [rewrite]: #34
+#37 := (iff #11 #36)
+#38 := [rewrite]: #37
+#44 := [monotonicity #38 #35]: #43
+#48 := [trans #44 #46]: #47
+#40 := (iff #12 #39)
+#41 := [monotonicity #35 #38]: #40
+#51 := [monotonicity #41 #48]: #50
+#55 := [trans #51 #53]: #54
+#58 := [monotonicity #55]: #57
+#62 := [trans #58 #60]: #61
+#32 := [asserted]: #15
+[mp #32 #62]: false
+unsat
+1709b6be330c8fe39899c2448147237ac354e6ac 95 0
 #2 := false
 decl f3 :: (-> S2 S1)
 decl ?v0!0 :: S2
@@ -4453,55 +4501,49 @@
 #102 := [and-elim #101]: #76
 [unit-resolution #102 #115]: false
 unsat
-8abc924327822787c2f5c4e6e7680303fbae57f8 47 0
+f7433bc79c74698b7150f9252f1663dfbc7714ae 41 0
 #2 := false
 decl f1 :: S1
 #4 := f1
 decl f3 :: S1
 #8 := f3
 #9 := (= f3 f1)
-decl f4 :: S1
-#10 := f4
-#11 := (= f4 f1)
-#13 := (iff #11 #9)
-#12 := (iff #9 #11)
-#14 := (iff #12 #13)
-#15 := (not #14)
-#61 := (iff #15 false)
-#1 := true
-#56 := (not true)
-#59 := (iff #56 false)
-#60 := [rewrite]: #59
-#57 := (iff #15 #56)
-#54 := (iff #14 true)
-#36 := (= f1 f4)
-#33 := (= f1 f3)
-#39 := (iff #33 #36)
-#49 := (iff #39 #39)
-#52 := (iff #49 true)
-#53 := [rewrite]: #52
-#50 := (iff #14 #49)
-#47 := (iff #13 #39)
-#42 := (iff #36 #33)
-#45 := (iff #42 #39)
-#46 := [rewrite]: #45
-#43 := (iff #13 #42)
-#34 := (iff #9 #33)
-#35 := [rewrite]: #34
-#37 := (iff #11 #36)
-#38 := [rewrite]: #37
-#44 := [monotonicity #38 #35]: #43
-#48 := [trans #44 #46]: #47
-#40 := (iff #12 #39)
-#41 := [monotonicity #35 #38]: #40
-#51 := [monotonicity #41 #48]: #50
-#55 := [trans #51 #53]: #54
-#58 := [monotonicity #55]: #57
-#62 := [trans #58 #60]: #61
-#32 := [asserted]: #15
-[mp #32 #62]: false
-unsat
-48a51f989350a0e584db03a2950a272906be29b0 300 0
+#10 := (not #9)
+#11 := (iff #9 #10)
+#12 := (not #11)
+#13 := (not #12)
+#56 := (iff #13 false)
+#1 := true
+#51 := (not true)
+#54 := (iff #51 false)
+#55 := [rewrite]: #54
+#52 := (iff #13 #51)
+#49 := (iff #12 true)
+#44 := (not false)
+#47 := (iff #44 true)
+#48 := [rewrite]: #47
+#45 := (iff #12 #44)
+#42 := (iff #11 false)
+#31 := (= f1 f3)
+#34 := (not #31)
+#37 := (iff #31 #34)
+#40 := (iff #37 false)
+#41 := [rewrite]: #40
+#38 := (iff #11 #37)
+#35 := (iff #10 #34)
+#32 := (iff #9 #31)
+#33 := [rewrite]: #32
+#36 := [monotonicity #33]: #35
+#39 := [monotonicity #33 #36]: #38
+#43 := [trans #39 #41]: #42
+#46 := [monotonicity #43]: #45
+#50 := [trans #46 #48]: #49
+#53 := [monotonicity #50]: #52
+#57 := [trans #53 #55]: #56
+#30 := [asserted]: #13
+[mp #30 #57]: false
+unsat
+9e92d358b4d87bdfb0816755e800e46f3d76b51e 300 0
 #2 := false
 decl f4 :: (-> S2 S1)
 decl ?v0!1 :: S2
@@ -4802,49 +4844,68 @@
 #609 := [quant-inst]: #615
 [unit-resolution #609 #257 #603]: false
 unsat
-3731fdf00230f94750072246058d6aec5d30ad57 41 0
+4f091688bc1fe0b9d20810549460b1f682c6b9ee 60 0
 #2 := false
 decl f1 :: S1
 #4 := f1
 decl f3 :: S1
 #8 := f3
 #9 := (= f3 f1)
-#10 := (not #9)
-#11 := (iff #9 #10)
-#12 := (not #11)
-#13 := (not #12)
-#56 := (iff #13 false)
-#1 := true
-#51 := (not true)
-#54 := (iff #51 false)
-#55 := [rewrite]: #54
-#52 := (iff #13 #51)
-#49 := (iff #12 true)
-#44 := (not false)
-#47 := (iff #44 true)
-#48 := [rewrite]: #47
-#45 := (iff #12 #44)
-#42 := (iff #11 false)
-#31 := (= f1 f3)
-#34 := (not #31)
-#37 := (iff #31 #34)
-#40 := (iff #37 false)
-#41 := [rewrite]: #40
-#38 := (iff #11 #37)
-#35 := (iff #10 #34)
-#32 := (iff #9 #31)
-#33 := [rewrite]: #32
-#36 := [monotonicity #33]: #35
-#39 := [monotonicity #33 #36]: #38
-#43 := [trans #39 #41]: #42
-#46 := [monotonicity #43]: #45
-#50 := [trans #46 #48]: #49
-#53 := [monotonicity #50]: #52
-#57 := [trans #53 #55]: #56
-#30 := [asserted]: #13
-[mp #30 #57]: false
-unsat
-8d1c135b088bf498c079d2958e8764a8092679cf 201 0
+#14 := (not #9)
+decl f4 :: S1
+#10 := f4
+#11 := (= f4 f1)
+#13 := (not #11)
+#15 := (implies #13 #14)
+#12 := (implies #9 #11)
+#16 := (iff #12 #15)
+#17 := (not #16)
+#74 := (iff #17 false)
+#1 := true
+#69 := (not true)
+#72 := (iff #69 false)
+#73 := [rewrite]: #72
+#70 := (iff #17 #69)
+#67 := (iff #16 true)
+#38 := (= f1 f4)
+#35 := (= f1 f3)
+#44 := (not #35)
+#45 := (or #44 #38)
+#62 := (iff #45 #45)
+#65 := (iff #62 true)
+#66 := [rewrite]: #65
+#63 := (iff #16 #62)
+#60 := (iff #15 #45)
+#50 := (not #38)
+#55 := (implies #50 #44)
+#58 := (iff #55 #45)
+#59 := [rewrite]: #58
+#56 := (iff #15 #55)
+#53 := (iff #14 #44)
+#36 := (iff #9 #35)
+#37 := [rewrite]: #36
+#54 := [monotonicity #37]: #53
+#51 := (iff #13 #50)
+#39 := (iff #11 #38)
+#40 := [rewrite]: #39
+#52 := [monotonicity #40]: #51
+#57 := [monotonicity #52 #54]: #56
+#61 := [trans #57 #59]: #60
+#48 := (iff #12 #45)
+#41 := (implies #35 #38)
+#46 := (iff #41 #45)
+#47 := [rewrite]: #46
+#42 := (iff #12 #41)
+#43 := [monotonicity #37 #40]: #42
+#49 := [trans #43 #47]: #48
+#64 := [monotonicity #49 #61]: #63
+#68 := [trans #64 #66]: #67
+#71 := [monotonicity #68]: #70
+#75 := [trans #71 #73]: #74
+#34 := [asserted]: #17
+[mp #34 #75]: false
+unsat
+27355f82e9f880139491584519c5f457388ba8e4 201 0
 #2 := false
 decl f3 :: (-> S2 S1)
 #8 := (:var 0 S2)
@@ -5046,68 +5107,80 @@
 #211 := [quant-inst]: #320
 [unit-resolution #211 #595 #319]: false
 unsat
-c4682bd721e64af9e51bd86d6d03d59662baa782 60 0
+45c3801b7a47fb920cbab9584d402164b65dd356 72 0
 #2 := false
 decl f1 :: S1
 #4 := f1
 decl f3 :: S1
 #8 := f3
 #9 := (= f3 f1)
-#14 := (not #9)
-decl f4 :: S1
-#10 := f4
-#11 := (= f4 f1)
-#13 := (not #11)
-#15 := (implies #13 #14)
-#12 := (implies #9 #11)
-#16 := (iff #12 #15)
-#17 := (not #16)
-#74 := (iff #17 false)
-#1 := true
-#69 := (not true)
-#72 := (iff #69 false)
-#73 := [rewrite]: #72
-#70 := (iff #17 #69)
-#67 := (iff #16 true)
-#38 := (= f1 f4)
-#35 := (= f1 f3)
-#44 := (not #35)
-#45 := (or #44 #38)
-#62 := (iff #45 #45)
-#65 := (iff #62 true)
-#66 := [rewrite]: #65
-#63 := (iff #16 #62)
-#60 := (iff #15 #45)
-#50 := (not #38)
-#55 := (implies #50 #44)
-#58 := (iff #55 #45)
-#59 := [rewrite]: #58
-#56 := (iff #15 #55)
-#53 := (iff #14 #44)
-#36 := (iff #9 #35)
-#37 := [rewrite]: #36
-#54 := [monotonicity #37]: #53
-#51 := (iff #13 #50)
-#39 := (iff #11 #38)
-#40 := [rewrite]: #39
-#52 := [monotonicity #40]: #51
-#57 := [monotonicity #52 #54]: #56
-#61 := [trans #57 #59]: #60
-#48 := (iff #12 #45)
-#41 := (implies #35 #38)
-#46 := (iff #41 #45)
-#47 := [rewrite]: #46
-#42 := (iff #12 #41)
-#43 := [monotonicity #37 #40]: #42
-#49 := [trans #43 #47]: #48
-#64 := [monotonicity #49 #61]: #63
-#68 := [trans #64 #66]: #67
-#71 := [monotonicity #68]: #70
-#75 := [trans #71 #73]: #74
-#34 := [asserted]: #17
-[mp #34 #75]: false
-unsat
-c2e19ee7461e4fbfe65c34d98111e3914f852baf 244 0
+#10 := (iff #9 #9)
+#11 := (iff #9 #10)
+#12 := (iff #9 #11)
+#13 := (iff #9 #12)
+#14 := (iff #9 #13)
+#15 := (iff #9 #14)
+#16 := (iff #9 #15)
+#17 := (iff #9 #16)
+#18 := (iff #9 #17)
+#19 := (not #18)
+#87 := (iff #19 false)
+#1 := true
+#82 := (not true)
+#85 := (iff #82 false)
+#86 := [rewrite]: #85
+#83 := (iff #19 #82)
+#80 := (iff #18 true)
+#37 := (= f1 f3)
+#40 := (iff #37 #37)
+#43 := (iff #40 true)
+#44 := [rewrite]: #43
+#78 := (iff #18 #40)
+#76 := (iff #17 #37)
+#47 := (iff #37 true)
+#50 := (iff #47 #37)
+#51 := [rewrite]: #50
+#74 := (iff #17 #47)
+#72 := (iff #16 true)
+#70 := (iff #16 #40)
+#68 := (iff #15 #37)
+#66 := (iff #15 #47)
+#64 := (iff #14 true)
+#62 := (iff #14 #40)
+#60 := (iff #13 #37)
+#58 := (iff #13 #47)
+#56 := (iff #12 true)
+#54 := (iff #12 #40)
+#52 := (iff #11 #37)
+#48 := (iff #11 #47)
+#45 := (iff #10 true)
+#41 := (iff #10 #40)
+#38 := (iff #9 #37)
+#39 := [rewrite]: #38
+#42 := [monotonicity #39 #39]: #41
+#46 := [trans #42 #44]: #45
+#49 := [monotonicity #39 #46]: #48
+#53 := [trans #49 #51]: #52
+#55 := [monotonicity #39 #53]: #54
+#57 := [trans #55 #44]: #56
+#59 := [monotonicity #39 #57]: #58
+#61 := [trans #59 #51]: #60
+#63 := [monotonicity #39 #61]: #62
+#65 := [trans #63 #44]: #64
+#67 := [monotonicity #39 #65]: #66
+#69 := [trans #67 #51]: #68
+#71 := [monotonicity #39 #69]: #70
+#73 := [trans #71 #44]: #72
+#75 := [monotonicity #39 #73]: #74
+#77 := [trans #75 #51]: #76
+#79 := [monotonicity #39 #77]: #78
+#81 := [trans #79 #44]: #80
+#84 := [monotonicity #81]: #83
+#88 := [trans #84 #86]: #87
+#36 := [asserted]: #19
+[mp #36 #88]: false
+unsat
+392dbae729e3baf705095d1fa80eee1de09292e0 244 0
 #2 := false
 decl f3 :: (-> S2 S1)
 decl ?v0!0 :: S2
@@ -5352,80 +5425,33 @@
 #616 := [mp #343 #237]: #621
 [unit-resolution #616 #629 #330]: false
 unsat
-36d1352b395221a431006c238d124165e2b745a3 72 0
-#2 := false
-decl f1 :: S1
-#4 := f1
-decl f3 :: S1
-#8 := f3
-#9 := (= f3 f1)
-#10 := (iff #9 #9)
-#11 := (iff #9 #10)
-#12 := (iff #9 #11)
-#13 := (iff #9 #12)
-#14 := (iff #9 #13)
-#15 := (iff #9 #14)
-#16 := (iff #9 #15)
-#17 := (iff #9 #16)
-#18 := (iff #9 #17)
-#19 := (not #18)
-#87 := (iff #19 false)
-#1 := true
-#82 := (not true)
-#85 := (iff #82 false)
-#86 := [rewrite]: #85
-#83 := (iff #19 #82)
-#80 := (iff #18 true)
-#37 := (= f1 f3)
-#40 := (iff #37 #37)
-#43 := (iff #40 true)
-#44 := [rewrite]: #43
-#78 := (iff #18 #40)
-#76 := (iff #17 #37)
-#47 := (iff #37 true)
-#50 := (iff #47 #37)
-#51 := [rewrite]: #50
-#74 := (iff #17 #47)
-#72 := (iff #16 true)
-#70 := (iff #16 #40)
-#68 := (iff #15 #37)
-#66 := (iff #15 #47)
-#64 := (iff #14 true)
-#62 := (iff #14 #40)
-#60 := (iff #13 #37)
-#58 := (iff #13 #47)
-#56 := (iff #12 true)
-#54 := (iff #12 #40)
-#52 := (iff #11 #37)
-#48 := (iff #11 #47)
-#45 := (iff #10 true)
-#41 := (iff #10 #40)
-#38 := (iff #9 #37)
-#39 := [rewrite]: #38
-#42 := [monotonicity #39 #39]: #41
-#46 := [trans #42 #44]: #45
-#49 := [monotonicity #39 #46]: #48
-#53 := [trans #49 #51]: #52
-#55 := [monotonicity #39 #53]: #54
-#57 := [trans #55 #44]: #56
-#59 := [monotonicity #39 #57]: #58
-#61 := [trans #59 #51]: #60
-#63 := [monotonicity #39 #61]: #62
-#65 := [trans #63 #44]: #64
-#67 := [monotonicity #39 #65]: #66
-#69 := [trans #67 #51]: #68
-#71 := [monotonicity #39 #69]: #70
-#73 := [trans #71 #44]: #72
-#75 := [monotonicity #39 #73]: #74
-#77 := [trans #75 #51]: #76
-#79 := [monotonicity #39 #77]: #78
-#81 := [trans #79 #44]: #80
-#84 := [monotonicity #81]: #83
-#88 := [trans #84 #86]: #87
-#36 := [asserted]: #19
-[mp #36 #88]: false
-unsat
-35b6826e84c97e2db1e3cd91ad69abb16f131b93 49 0
+17f9e5be62669f8acfb50769a06b9e675836393a 25 0
+#2 := false
+#8 := (:var 0 S2)
+#9 := (= #8 #8)
+#10 := (exists (vars (?v0 S2)) #9)
+#11 := (not #10)
+#43 := (iff #11 false)
+#1 := true
+#38 := (not true)
+#41 := (iff #38 false)
+#42 := [rewrite]: #41
+#39 := (iff #11 #38)
+#36 := (iff #10 true)
+#31 := (exists (vars (?v0 S2)) true)
+#34 := (iff #31 true)
+#35 := [elim-unused]: #34
+#32 := (iff #10 #31)
+#29 := (iff #9 true)
+#30 := [rewrite]: #29
+#33 := [quant-intro #30]: #32
+#37 := [trans #33 #35]: #36
+#40 := [monotonicity #37]: #39
+#44 := [trans #40 #42]: #43
+#28 := [asserted]: #11
+[mp #28 #44]: false
+unsat
+f1a2d09c5ae97f135cf03b06910805f4101ff509 49 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -5475,33 +5501,42 @@
 #35 := [asserted]: #18
 [mp #35 #65]: false
 unsat
-150a137e969806c6900cabc66bb27970472c7ba1 25 0
-#2 := false
+cc5c33d65644020014560f00b4d749ba7046207d 34 0
+#2 := false
+decl f1 :: S1
+#4 := f1
+decl f3 :: (-> S2 S1)
 #8 := (:var 0 S2)
-#9 := (= #8 #8)
-#10 := (exists (vars (?v0 S2)) #9)
-#11 := (not #10)
-#43 := (iff #11 false)
-#1 := true
-#38 := (not true)
-#41 := (iff #38 false)
-#42 := [rewrite]: #41
-#39 := (iff #11 #38)
-#36 := (iff #10 true)
-#31 := (exists (vars (?v0 S2)) true)
-#34 := (iff #31 true)
-#35 := [elim-unused]: #34
+#9 := (f3 #8)
+#10 := (= #9 f1)
+#11 := (exists (vars (?v0 S2)) #10)
+#12 := (iff #11 #11)
+#13 := (not #12)
+#49 := (iff #13 false)
+#1 := true
+#44 := (not true)
+#47 := (iff #44 false)
+#48 := [rewrite]: #47
+#45 := (iff #13 #44)
+#42 := (iff #12 true)
+#31 := (= f1 #9)
+#34 := (exists (vars (?v0 S2)) #31)
+#37 := (iff #34 #34)
+#40 := (iff #37 true)
+#41 := [rewrite]: #40
+#38 := (iff #12 #37)
+#35 := (iff #11 #34)
 #32 := (iff #10 #31)
-#29 := (iff #9 true)
-#30 := [rewrite]: #29
-#33 := [quant-intro #30]: #32
-#37 := [trans #33 #35]: #36
-#40 := [monotonicity #37]: #39
-#44 := [trans #40 #42]: #43
-#28 := [asserted]: #11
-[mp #28 #44]: false
-unsat
-2e6f238fe51369f58bc6454a136532e4c6f3bd82 136 0
+#33 := [rewrite]: #32
+#36 := [quant-intro #33]: #35
+#39 := [monotonicity #36 #36]: #38
+#43 := [trans #39 #41]: #42
+#46 := [monotonicity #43]: #45
+#50 := [trans #46 #48]: #49
+#30 := [asserted]: #13
+[mp #30 #50]: false
+unsat
+c0659ef2eb86b9abb113a352ce049de7f5cf2d4d 136 0
 #2 := false
 decl f3 :: (-> S2 S2 S1)
 decl f4 :: S2
@@ -5638,167 +5673,7 @@
 #593 := [quant-inst]: #592
 [unit-resolution #593 #610 #258]: false
 unsat
-b28b1c7eb24edf6acf5466ddd1304a6b881a60f9 34 0
-#2 := false
-decl f1 :: S1
-#4 := f1
-decl f3 :: (-> S2 S1)
-#8 := (:var 0 S2)
-#9 := (f3 #8)
-#10 := (= #9 f1)
-#11 := (exists (vars (?v0 S2)) #10)
-#12 := (iff #11 #11)
-#13 := (not #12)
-#49 := (iff #13 false)
-#1 := true
-#44 := (not true)
-#47 := (iff #44 false)
-#48 := [rewrite]: #47
-#45 := (iff #13 #44)
-#42 := (iff #12 true)
-#31 := (= f1 #9)
-#34 := (exists (vars (?v0 S2)) #31)
-#37 := (iff #34 #34)
-#40 := (iff #37 true)
-#41 := [rewrite]: #40
-#38 := (iff #12 #37)
-#35 := (iff #11 #34)
-#32 := (iff #10 #31)
-#33 := [rewrite]: #32
-#36 := [quant-intro #33]: #35
-#39 := [monotonicity #36 #36]: #38
-#43 := [trans #39 #41]: #42
-#46 := [monotonicity #43]: #45
-#50 := [trans #46 #48]: #49
-#30 := [asserted]: #13
-[mp #30 #50]: false
-unsat
-a15d00efdb475e30bdd25ef3ed2227a8ea9c519f 124 0
-#2 := false
-decl f3 :: (-> S2 S1)
-decl f4 :: (-> S2 S2)
-decl f5 :: S2
-#16 := f5
-#20 := (f4 f5)
-#21 := (f4 #20)
-#154 := (f3 #21)
-decl f1 :: S1
-#4 := f1
-#241 := (= f1 #154)
-#152 := (f3 #20)
-#239 := (= f1 #152)
-#17 := (f3 f5)
-#62 := (= f1 #17)
-#8 := (:var 0 S2)
-#11 := (f4 #8)
-#12 := (f3 #11)
-#47 := (= f1 #12)
-#9 := (f3 #8)
-#44 := (= f1 #9)
-#53 := (not #44)
-#54 := (or #53 #47)
-#59 := (forall (vars (?v0 S2)) #54)
-#65 := (and #59 #62)
-#22 := (f4 #21)
-#23 := (f3 #22)
-#68 := (= f1 #23)
-#74 := (not #65)
-#75 := (or #74 #68)
-#80 := (not #75)
-#24 := (= #23 f1)
-#18 := (= #17 f1)
-#13 := (= #12 f1)
-#10 := (= #9 f1)
-#14 := (implies #10 #13)
-#15 := (forall (vars (?v0 S2)) #14)
-#19 := (and #15 #18)
-#25 := (implies #19 #24)
-#26 := (not #25)
-#81 := (iff #26 #80)
-#78 := (iff #25 #75)
-#71 := (implies #65 #68)
-#76 := (iff #71 #75)
-#77 := [rewrite]: #76
-#72 := (iff #25 #71)
-#69 := (iff #24 #68)
-#70 := [rewrite]: #69
-#66 := (iff #19 #65)
-#63 := (iff #18 #62)
-#64 := [rewrite]: #63
-#60 := (iff #15 #59)
-#57 := (iff #14 #54)
-#50 := (implies #44 #47)
-#55 := (iff #50 #54)
-#56 := [rewrite]: #55
-#51 := (iff #14 #50)
-#48 := (iff #13 #47)
-#49 := [rewrite]: #48
-#45 := (iff #10 #44)
-#46 := [rewrite]: #45
-#52 := [monotonicity #46 #49]: #51
-#58 := [trans #52 #56]: #57
-#61 := [quant-intro #58]: #60
-#67 := [monotonicity #61 #64]: #66
-#73 := [monotonicity #67 #70]: #72
-#79 := [trans #73 #77]: #78
-#82 := [monotonicity #79]: #81
-#43 := [asserted]: #26
-#85 := [mp #43 #82]: #80
-#83 := [not-or-elim #85]: #65
-#86 := [and-elim #83]: #62
-#570 := (pattern #11)
-#571 := (forall (vars (?v0 S2)) (:pat #570) #54)
-#574 := (iff #59 #571)
-#572 := (iff #54 #54)
-#573 := [refl]: #572
-#575 := [quant-intro #573]: #574
-#100 := (~ #59 #59)
-#98 := (~ #54 #54)
-#99 := [refl]: #98
-#101 := [nnf-pos #99]: #100
-#84 := [and-elim #83]: #59
-#91 := [mp~ #84 #101]: #59
-#576 := [mp #91 #575]: #571
-#153 := (not #62)
-#232 := (not #571)
-#243 := (or #232 #153 #239)
-#240 := (or #153 #239)
-#244 := (or #232 #240)
-#245 := (iff #244 #243)
-#242 := [rewrite]: #245
-#172 := [quant-inst]: #244
-#246 := [mp #172 #242]: #243
-#208 := [unit-resolution #246 #576 #86]: #239
-#225 := (not #239)
-#351 := (or #232 #225 #241)
-#562 := (or #225 #241)
-#558 := (or #232 #562)
-#231 := (iff #558 #351)
-#565 := [rewrite]: #231
-#230 := [quant-inst]: #558
-#566 := [mp #230 #565]: #351
-#209 := [unit-resolution #566 #576 #208]: #241
-#87 := (not #68)
-#88 := [not-or-elim #85]: #87
-#564 := (not #241)
-#569 := (or #232 #68 #564)
-#219 := (or #564 #68)
-#559 := (or #232 #219)
-#545 := (iff #559 #569)
-#567 := (or #68 #564)
-#222 := (or #232 #567)
-#561 := (iff #222 #569)
-#202 := [rewrite]: #561
-#560 := (iff #559 #222)
-#568 := (iff #219 #567)
-#563 := [rewrite]: #568
-#218 := [monotonicity #563]: #560
-#206 := [trans #218 #202]: #545
-#217 := [quant-inst]: #559
-#207 := [mp #217 #206]: #569
-[unit-resolution #207 #576 #88 #209]: false
-unsat
-043713d1f8d615cef2b57b8a8ae1162f9c51de61 258 0
+c32773e30c401fac91663753c8932e4d15be0cde 258 0
 #2 := false
 decl f4 :: (-> S2 S1)
 decl ?v0!2 :: S2
@@ -6057,72 +5932,132 @@
 #579 := [quant-inst]: #578
 [unit-resolution #579 #432 #573]: false
 unsat
-0e7fa24f774b5d4840baee92f17adcdc6e36469d 64 0
-#2 := false
-decl f3 :: (-> S2 S2 S3)
-decl f4 :: S2
-#14 := f4
+c94ebedde81defab6c020062b6dae6aec5aa6893 124 0
+#2 := false
+decl f3 :: (-> S2 S1)
+decl f4 :: (-> S2 S2)
 decl f5 :: S2
 #16 := f5
-#18 := (f3 f5 f4)
-#17 := (f3 f4 f5)
-#19 := (= #17 #18)
-#62 := (not #19)
-#8 := (:var 1 S2)
-#9 := (:var 0 S2)
-#11 := (f3 #9 #8)
-#10 := (f3 #8 #9)
-#12 := (= #10 #11)
-#13 := (forall (vars (?v0 S2) (?v1 S2)) #12)
-#52 := (not #13)
-#53 := (or #52 #19)
-#58 := (not #53)
-#15 := (= f4 f4)
-#20 := (and #15 #19)
-#21 := (implies #13 #20)
-#22 := (not #21)
-#59 := (iff #22 #58)
-#56 := (iff #21 #53)
-#49 := (implies #13 #19)
-#54 := (iff #49 #53)
-#55 := [rewrite]: #54
-#50 := (iff #21 #49)
-#47 := (iff #20 #19)
-#1 := true
-#42 := (and true #19)
-#45 := (iff #42 #19)
+#20 := (f4 f5)
+#21 := (f4 #20)
+#154 := (f3 #21)
+decl f1 :: S1
+#4 := f1
+#241 := (= f1 #154)
+#152 := (f3 #20)
+#239 := (= f1 #152)
+#17 := (f3 f5)
+#62 := (= f1 #17)
+#8 := (:var 0 S2)
+#11 := (f4 #8)
+#12 := (f3 #11)
+#47 := (= f1 #12)
+#9 := (f3 #8)
+#44 := (= f1 #9)
+#53 := (not #44)
+#54 := (or #53 #47)
+#59 := (forall (vars (?v0 S2)) #54)
+#65 := (and #59 #62)
+#22 := (f4 #21)
+#23 := (f3 #22)
+#68 := (= f1 #23)
+#74 := (not #65)
+#75 := (or #74 #68)
+#80 := (not #75)
+#24 := (= #23 f1)
+#18 := (= #17 f1)
+#13 := (= #12 f1)
+#10 := (= #9 f1)
+#14 := (implies #10 #13)
+#15 := (forall (vars (?v0 S2)) #14)
+#19 := (and #15 #18)
+#25 := (implies #19 #24)
+#26 := (not #25)
+#81 := (iff #26 #80)
+#78 := (iff #25 #75)
+#71 := (implies #65 #68)
+#76 := (iff #71 #75)
+#77 := [rewrite]: #76
+#72 := (iff #25 #71)
+#69 := (iff #24 #68)
+#70 := [rewrite]: #69
+#66 := (iff #19 #65)
+#63 := (iff #18 #62)
+#64 := [rewrite]: #63
+#60 := (iff #15 #59)
+#57 := (iff #14 #54)
+#50 := (implies #44 #47)
+#55 := (iff #50 #54)
+#56 := [rewrite]: #55
+#51 := (iff #14 #50)
+#48 := (iff #13 #47)
+#49 := [rewrite]: #48
+#45 := (iff #10 #44)
 #46 := [rewrite]: #45
-#43 := (iff #20 #42)
-#40 := (iff #15 true)
-#41 := [rewrite]: #40
-#44 := [monotonicity #41]: #43
-#48 := [trans #44 #46]: #47
-#51 := [monotonicity #48]: #50
-#57 := [trans #51 #55]: #56
-#60 := [monotonicity #57]: #59
-#39 := [asserted]: #22
-#63 := [mp #39 #60]: #58
-#64 := [not-or-elim #63]: #62
-#547 := (pattern #11)
-#546 := (pattern #10)
-#548 := (forall (vars (?v0 S2) (?v1 S2)) (:pat #546 #547) #12)
-#551 := (iff #13 #548)
-#549 := (iff #12 #12)
-#550 := [refl]: #549
-#552 := [quant-intro #550]: #551
-#74 := (~ #13 #13)
-#72 := (~ #12 #12)
-#73 := [refl]: #72
-#75 := [nnf-pos #73]: #74
-#61 := [not-or-elim #63]: #13
-#67 := [mp~ #61 #75]: #13
-#553 := [mp #67 #552]: #548
-#129 := (not #548)
-#216 := (or #129 #19)
-#130 := [quant-inst]: #216
-[unit-resolution #130 #553 #64]: false
-unsat
-7fcf7ce1521f6f1599b2fe6f93ba5dee1cbd7b76 222 0
+#52 := [monotonicity #46 #49]: #51
+#58 := [trans #52 #56]: #57
+#61 := [quant-intro #58]: #60
+#67 := [monotonicity #61 #64]: #66
+#73 := [monotonicity #67 #70]: #72
+#79 := [trans #73 #77]: #78
+#82 := [monotonicity #79]: #81
+#43 := [asserted]: #26
+#85 := [mp #43 #82]: #80
+#83 := [not-or-elim #85]: #65
+#86 := [and-elim #83]: #62
+#570 := (pattern #11)
+#571 := (forall (vars (?v0 S2)) (:pat #570) #54)
+#574 := (iff #59 #571)
+#572 := (iff #54 #54)
+#573 := [refl]: #572
+#575 := [quant-intro #573]: #574
+#100 := (~ #59 #59)
+#98 := (~ #54 #54)
+#99 := [refl]: #98
+#101 := [nnf-pos #99]: #100
+#84 := [and-elim #83]: #59
+#91 := [mp~ #84 #101]: #59
+#576 := [mp #91 #575]: #571
+#153 := (not #62)
+#232 := (not #571)
+#243 := (or #232 #153 #239)
+#240 := (or #153 #239)
+#244 := (or #232 #240)
+#245 := (iff #244 #243)
+#242 := [rewrite]: #245
+#172 := [quant-inst]: #244
+#246 := [mp #172 #242]: #243
+#208 := [unit-resolution #246 #576 #86]: #239
+#225 := (not #239)
+#351 := (or #232 #225 #241)
+#562 := (or #225 #241)
+#558 := (or #232 #562)
+#231 := (iff #558 #351)
+#565 := [rewrite]: #231
+#230 := [quant-inst]: #558
+#566 := [mp #230 #565]: #351
+#209 := [unit-resolution #566 #576 #208]: #241
+#87 := (not #68)
+#88 := [not-or-elim #85]: #87
+#564 := (not #241)
+#569 := (or #232 #68 #564)
+#219 := (or #564 #68)
+#559 := (or #232 #219)
+#545 := (iff #559 #569)
+#567 := (or #68 #564)
+#222 := (or #232 #567)
+#561 := (iff #222 #569)
+#202 := [rewrite]: #561
+#560 := (iff #559 #222)
+#568 := (iff #219 #567)
+#563 := [rewrite]: #568
+#218 := [monotonicity #563]: #560
+#206 := [trans #218 #202]: #545
+#217 := [quant-inst]: #559
+#207 := [mp #217 #206]: #569
+[unit-resolution #207 #576 #88 #209]: false
+unsat
+29a00825da3cfb6f45d89e9d7c24512d752b68eb 222 0
 #2 := false
 decl f3 :: (-> S2 S1)
 decl ?v0!0 :: S2
@@ -6345,7 +6280,122 @@
 #610 := [quant-inst]: #609
 [unit-resolution #610 #339 #320]: false
 unsat
-e97ea15e571d05d4542f0baceec935a45a20adf5 250 0
+d6381b0e6162629304a9edd3be9ca3c00c481087 64 0
+#2 := false
+decl f3 :: (-> S2 S2 S3)
+decl f4 :: S2
+#14 := f4
+decl f5 :: S2
+#16 := f5
+#18 := (f3 f5 f4)
+#17 := (f3 f4 f5)
+#19 := (= #17 #18)
+#62 := (not #19)
+#8 := (:var 1 S2)
+#9 := (:var 0 S2)
+#11 := (f3 #9 #8)
+#10 := (f3 #8 #9)
+#12 := (= #10 #11)
+#13 := (forall (vars (?v0 S2) (?v1 S2)) #12)
+#52 := (not #13)
+#53 := (or #52 #19)
+#58 := (not #53)
+#15 := (= f4 f4)
+#20 := (and #15 #19)
+#21 := (implies #13 #20)
+#22 := (not #21)
+#59 := (iff #22 #58)
+#56 := (iff #21 #53)
+#49 := (implies #13 #19)
+#54 := (iff #49 #53)
+#55 := [rewrite]: #54
+#50 := (iff #21 #49)
+#47 := (iff #20 #19)
+#1 := true
+#42 := (and true #19)
+#45 := (iff #42 #19)
+#46 := [rewrite]: #45
+#43 := (iff #20 #42)
+#40 := (iff #15 true)
+#41 := [rewrite]: #40
+#44 := [monotonicity #41]: #43
+#48 := [trans #44 #46]: #47
+#51 := [monotonicity #48]: #50
+#57 := [trans #51 #55]: #56
+#60 := [monotonicity #57]: #59
+#39 := [asserted]: #22
+#63 := [mp #39 #60]: #58
+#64 := [not-or-elim #63]: #62
+#547 := (pattern #11)
+#546 := (pattern #10)
+#548 := (forall (vars (?v0 S2) (?v1 S2)) (:pat #546 #547) #12)
+#551 := (iff #13 #548)
+#549 := (iff #12 #12)
+#550 := [refl]: #549
+#552 := [quant-intro #550]: #551
+#74 := (~ #13 #13)
+#72 := (~ #12 #12)
+#73 := [refl]: #72
+#75 := [nnf-pos #73]: #74
+#61 := [not-or-elim #63]: #13
+#67 := [mp~ #61 #75]: #13
+#553 := [mp #67 #552]: #548
+#129 := (not #548)
+#216 := (or #129 #19)
+#130 := [quant-inst]: #216
+[unit-resolution #130 #553 #64]: false
+unsat
+a59143663975583139cdacfbcd52f21f568835d6 49 0
+#2 := false
+decl f1 :: S1
+#4 := f1
+decl f3 :: (-> S2 S4 S1)
+#9 := (:var 0 S4)
+#13 := (:var 1 S2)
+#14 := (f3 #13 #9)
+#15 := (= #14 f1)
+#16 := (exists (vars (?v0 S2) (?v1 S4)) #15)
+#8 := (:var 2 S2)
+#10 := (f3 #8 #9)
+#11 := (= #10 f1)
+#12 := (exists (vars (?v0 S2) (?v1 S3) (?v2 S4)) #11)
+#17 := (iff #12 #16)
+#18 := (not #17)
+#64 := (iff #18 false)
+#1 := true
+#59 := (not true)
+#62 := (iff #59 false)
+#63 := [rewrite]: #62
+#60 := (iff #18 #59)
+#57 := (iff #17 true)
+#42 := (= f1 #14)
+#43 := (exists (vars (?v0 S2) (?v2 S4)) #42)
+#52 := (iff #43 #43)
+#55 := (iff #52 true)
+#56 := [rewrite]: #55
+#53 := (iff #17 #52)
+#50 := (iff #16 #43)
+#48 := (iff #15 #42)
+#49 := [rewrite]: #48
+#51 := [quant-intro #49]: #50
+#46 := (iff #12 #43)
+#36 := (= f1 #10)
+#39 := (exists (vars (?v0 S2) (?v1 S3) (?v2 S4)) #36)
+#44 := (iff #39 #43)
+#45 := [elim-unused]: #44
+#40 := (iff #12 #39)
+#37 := (iff #11 #36)
+#38 := [rewrite]: #37
+#41 := [quant-intro #38]: #40
+#47 := [trans #41 #45]: #46
+#54 := [monotonicity #47 #51]: #53
+#58 := [trans #54 #56]: #57
+#61 := [monotonicity #58]: #60
+#65 := [trans #61 #63]: #64
+#35 := [asserted]: #18
+[mp #35 #65]: false
+unsat
+7f4c24ba00666fac3b960c74d81cc061e8e4c71c 250 0
 #2 := false
 decl f3 :: (-> S2 S1)
 decl f7 :: S2
@@ -6596,61 +6646,7 @@
 #699 := [mp #350 #698]: #693
 [unit-resolution #699 #173 #714 #398]: false
 unsat
-8031eb3bcd3fb97da7b874e36b0d4d2ae215ec7b 49 0
-#2 := false
-decl f1 :: S1
-#4 := f1
-decl f3 :: (-> S2 S4 S1)
-#9 := (:var 0 S4)
-#13 := (:var 1 S2)
-#14 := (f3 #13 #9)
-#15 := (= #14 f1)
-#16 := (exists (vars (?v0 S2) (?v1 S4)) #15)
-#8 := (:var 2 S2)
-#10 := (f3 #8 #9)
-#11 := (= #10 f1)
-#12 := (exists (vars (?v0 S2) (?v1 S3) (?v2 S4)) #11)
-#17 := (iff #12 #16)
-#18 := (not #17)
-#64 := (iff #18 false)
-#1 := true
-#59 := (not true)
-#62 := (iff #59 false)
-#63 := [rewrite]: #62
-#60 := (iff #18 #59)
-#57 := (iff #17 true)
-#42 := (= f1 #14)
-#43 := (exists (vars (?v0 S2) (?v2 S4)) #42)
-#52 := (iff #43 #43)
-#55 := (iff #52 true)
-#56 := [rewrite]: #55
-#53 := (iff #17 #52)
-#50 := (iff #16 #43)
-#48 := (iff #15 #42)
-#49 := [rewrite]: #48
-#51 := [quant-intro #49]: #50
-#46 := (iff #12 #43)
-#36 := (= f1 #10)
-#39 := (exists (vars (?v0 S2) (?v1 S3) (?v2 S4)) #36)
-#44 := (iff #39 #43)
-#45 := [elim-unused]: #44
-#40 := (iff #12 #39)
-#37 := (iff #11 #36)
-#38 := [rewrite]: #37
-#41 := [quant-intro #38]: #40
-#47 := [trans #41 #45]: #46
-#54 := [monotonicity #47 #51]: #53
-#58 := [trans #54 #56]: #57
-#61 := [monotonicity #58]: #60
-#65 := [trans #61 #63]: #64
-#35 := [asserted]: #18
-[mp #35 #65]: false
-unsat
-2317912b27971033dc831a6ce5ef74d0f20fbca2 1 2
-unsat
-WARNING: failed to find a pattern for quantifier (quantifier id: k!9)
-
-301a246cbbd414b8b75c6b801fee2f734cf2af47 122 0
+55ab12f407bdf7fa84c1317fb83d267ee6dbe0b9 122 0
 #2 := false
 decl f3 :: (-> S2 S1)
 decl ?v0!1 :: S2
@@ -6773,9 +6769,21 @@
 #287 := [quant-inst]: #200
 [unit-resolution #287 #620 #138]: false
 unsat
-ee898f52c96d73444993788b39566855271caaec 1 0
-unsat
-2acdf9e468d060988547fd7ad4c93238ed78a5bb 105 0
+615edcc1b5967710c13cc8530677bd4b60ed143e 1 2
+unsat
+WARNING: failed to find a pattern for quantifier (quantifier id: k!9)
+
+cd545152cc212d0c395f2d5b056f6b9ac9c802b6 1 0
+unsat
+f064b99fb73e74622b958a2068a0d0b4edd902b2 1 0
+unsat
+2d8e7a5bcefce0c794a69f82f7029712f925b8a0 1 0
+unsat
+2c03da3c2314f743fe9232bb9b9c3ba10bf6d5ef 1 0
+unsat
+e41045b4d3521f41a792e556bf2332e60d77ec7a 1 0
+unsat
+1a85b2998fdcf0e23a359440a42ba41df7200751 105 0
 #2 := false
 decl f3 :: (-> S1 S1)
 decl ?v0!1 :: S1
@@ -6881,9 +6889,7 @@
 #261 := [quant-inst]: #188
 [unit-resolution #261 #590 #259]: false
 unsat
-f7daa562701d4999ed8a3f5ec133f08651bf6190 1 0
-unsat
-ff2e1b7168f418022909b6d3ec628836562df57d 230 0
+598fbc0a61e9e499866f4757d97c531ce37db1ae 230 0
 #2 := false
 decl f3 :: (-> S1 S1)
 decl ?v0!0 :: S1
@@ -7114,9 +7120,7 @@
 #309 := [quant-inst]: #308
 [unit-resolution #309 #590 #312]: false
 unsat
-fdbe39cdd485517d8ec1964f2c4fb7b6646fe608 1 0
-unsat
-258fe7f9c05eff8e107778930f55bcfa407e2fde 156 0
+cac0a2176ec80fb1c96e1c40b7d14da0fa6af78c 156 0
 #2 := false
 decl f3 :: (-> S1 S2 S1)
 #9 := (:var 0 S2)
@@ -7273,9 +7277,7 @@
 #269 := [quant-inst]: #264
 [unit-resolution #269 #592 #292]: false
 unsat
-779c5fc38fd08b8484ec1da52f6a17e6b849eac4 1 0
-unsat
-6c0f54222b59d5e628ff948749ac67e96364c6a1 74 0
+49ea124a0c85794588287d88e4a10f91ec534ee7 74 0
 #2 := false
 decl f3 :: (-> S2 S3 S4)
 #9 := (:var 0 S3)
@@ -7350,9 +7352,7 @@
 #548 := [mp #55 #547]: #543
 [unit-resolution #548 #537]: false
 unsat
-b720bb30cc87882c3f660a5bf9c8737dde4c14c4 1 0
-unsat
-cba176f179e597e7b48393532028be8634e0c4f7 108 0
+f922619aea5365bdf4744142fd24ae3f3d91080e 108 0
 #2 := false
 decl f3 :: (-> S1 S1)
 #11 := (:var 0 S1)
@@ -7461,7 +7461,7 @@
 #179 := [quant-inst]: #265
 [unit-resolution #179 #96 #599]: false
 unsat
-1f79e2aaf530f1cad27b8439c2a93a00022ad034 183 2
+ccfa103f9dc86cc5a39d3a0bd17ea6e15ed83789 183 2
 #2 := false
 decl f3 :: (-> S1 S2 S1)
 #9 := (:var 0 S2)
@@ -7647,21 +7647,15 @@
 unsat
 WARNING: failed to find a pattern for quantifier (quantifier id: k!12)
 
-da85096b57c08af8febf5871c1333121a34c6d28 1 0
-unsat
-6c41d71d8ec4d73ffa088d938320c03ca09b9201 1 2
+04a10002b6cfbd9320b025e8add4b15624e7ca83 1 0
+unsat
+56c3c1aac521682b0935ad2f17220b3ea8838cd3 1 2
 unsat
 WARNING: failed to find a pattern for quantifier (quantifier id: k!12)
 
-5d15e0a34749300f4ce5f4c920d3ca259f7027cd 1 0
-unsat
-fa1639cb0c965ae73d4377750883cc09dbe87562 1 0
-unsat
-fc8d2e66c31565ae0b4756bf95cf9f0717981220 1 0
-unsat
-ce6d32e932c7cece567323ec34f7a5540258fa7f 1 0
-unsat
-cfd9d2f647046e282a1080aae51b4b88be291157 107 0
+5211d0658c8aa96a06f5b015ae31d3fe55c3cab1 1 0
+unsat
+c20f820d839321d9bf17ab605375903e475f33e6 107 0
 #2 := false
 decl f3 :: (-> S2 S1)
 #8 := (:var 0 S2)
@@ -7769,9 +7763,9 @@
 #279 := [quant-inst]: #193
 [unit-resolution #279 #102 #618]: false
 unsat
-22c7d1d1136fafc0a09e243a12ede1ee4fee416f 1 0
-unsat
-9ea0d22c6270219f7cef6ee3d8f429562349b2a3 75 0
+677e024c66187dc21b71678cb1488477fcd87167 1 0
+unsat
+872e0bf32f19bb056d35b742419e7bfe9bc7d3b4 75 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -7847,7 +7841,9 @@
 #41 := [asserted]: #24
 [mp #41 #91]: false
 unsat
-51de51a0d85b126e271283f7eca5a0bb3a5a5bca 207 0
+ac8a74b907f6dc5eac6d550dfb9933eb000058e1 1 0
+unsat
+90c127d5cedd68c871816f3946c02cfc6b8af4a9 207 0
 #2 := false
 decl f3 :: (-> S2 S1)
 decl ?v1!0 :: (-> S2 S2)
@@ -8055,101 +8051,9 @@
 #622 := [mp #616 #257]: #277
 [unit-resolution #622 #645 #591 #596]: false
 unsat
-b8d80ad0d8c340491041b0c69d71b3944eaf90e6 93 0
-#2 := false
-decl f5 :: (-> S2 S1)
-decl f6 :: S2
-#16 := f6
-#20 := (f5 f6)
-decl f1 :: S1
-#4 := f1
-#65 := (= f1 #20)
-#84 := (not #65)
-decl f3 :: (-> S2 S3 S1)
-decl f4 :: S3
-#9 := f4
-#17 := (f3 f6 f4)
-#59 := (= f1 #17)
-#8 := (:var 0 S2)
-#12 := (f5 #8)
-#44 := (= f1 #12)
-#10 := (f3 #8 f4)
-#41 := (= f1 #10)
-#50 := (not #41)
-#51 := (or #50 #44)
-#56 := (forall (vars (?v0 S2)) #51)
-#62 := (and #56 #59)
-#71 := (not #62)
-#72 := (or #71 #65)
-#77 := (not #72)
-#21 := (= #20 f1)
-#18 := (= #17 f1)
-#13 := (= #12 f1)
-#11 := (= #10 f1)
-#14 := (implies #11 #13)
-#15 := (forall (vars (?v0 S2)) #14)
-#19 := (and #15 #18)
-#22 := (implies #19 #21)
-#23 := (not #22)
-#78 := (iff #23 #77)
-#75 := (iff #22 #72)
-#68 := (implies #62 #65)
-#73 := (iff #68 #72)
-#74 := [rewrite]: #73
-#69 := (iff #22 #68)
-#66 := (iff #21 #65)
-#67 := [rewrite]: #66
-#63 := (iff #19 #62)
-#60 := (iff #18 #59)
-#61 := [rewrite]: #60
-#57 := (iff #15 #56)
-#54 := (iff #14 #51)
-#47 := (implies #41 #44)
-#52 := (iff #47 #51)
-#53 := [rewrite]: #52
-#48 := (iff #14 #47)
-#45 := (iff #13 #44)
-#46 := [rewrite]: #45
-#42 := (iff #11 #41)
-#43 := [rewrite]: #42
-#49 := [monotonicity #43 #46]: #48
-#55 := [trans #49 #53]: #54
-#58 := [quant-intro #55]: #57
-#64 := [monotonicity #58 #61]: #63
-#70 := [monotonicity #64 #67]: #69
-#76 := [trans #70 #74]: #75
-#79 := [monotonicity #76]: #78
-#40 := [asserted]: #23
-#82 := [mp #40 #79]: #77
-#85 := [not-or-elim #82]: #84
-#80 := [not-or-elim #82]: #62
-#83 := [and-elim #80]: #59
-#572 := (pattern #12)
-#571 := (pattern #10)
-#573 := (forall (vars (?v0 S2)) (:pat #571 #572) #51)
-#576 := (iff #56 #573)
-#574 := (iff #51 #51)
-#575 := [refl]: #574
-#577 := [quant-intro #575]: #576
-#97 := (~ #56 #56)
-#95 := (~ #51 #51)
-#96 := [refl]: #95
-#98 := [nnf-pos #96]: #97
-#81 := [and-elim #80]: #56
-#88 := [mp~ #81 #98]: #56
-#578 := [mp #88 #577]: #573
-#155 := (not #59)
-#157 := (not #573)
-#244 := (or #157 #155 #65)
-#242 := (or #155 #65)
-#235 := (or #157 #242)
-#247 := (iff #235 #244)
-#175 := [rewrite]: #247
-#246 := [quant-inst]: #235
-#248 := [mp #246 #175]: #244
-[unit-resolution #248 #578 #83 #85]: false
-unsat
-628763241ae198f2ea4a54c641ca6e8df6d851ca 250 0
+5a145de81e4f4eeae6397f2aeade9a713df0b402 1 0
+unsat
+8bc50e9ee1d32eca0b2ec9f707ee916f7233c543 250 0
 #2 := false
 decl f3 :: (-> S2 S1)
 decl ?v1!1 :: (-> S2 S2)
@@ -8400,121 +8304,9 @@
 #616 := [mp #628 #615]: #622
 [unit-resolution #616 #128 #676 #607 #606]: false
 unsat
-0f8bf9d230b6b97c3b9a64ed4f1bb8757963fbc7 113 0
-#2 := false
-decl f3 :: (-> S2 S3 S1)
-decl f4 :: S3
-#9 := f4
-decl f6 :: S2
-#16 := f6
-#19 := (f3 f6 f4)
-decl f1 :: S1
-#4 := f1
-#57 := (= f1 #19)
-decl f5 :: (-> S2 S1)
-#17 := (f5 f6)
-#54 := (= f1 #17)
-#60 := (and #54 #57)
-#63 := (not #60)
-#8 := (:var 0 S2)
-#12 := (f5 #8)
-#45 := (= f1 #12)
-#10 := (f3 #8 f4)
-#42 := (= f1 #10)
-#48 := (and #42 #45)
-#51 := (exists (vars (?v0 S2)) #48)
-#66 := (or #51 #63)
-#69 := (not #66)
-#20 := (= #19 f1)
-#18 := (= #17 f1)
-#21 := (and #18 #20)
-#22 := (not #21)
-#13 := (= #12 f1)
-#11 := (= #10 f1)
-#14 := (and #11 #13)
-#15 := (exists (vars (?v0 S2)) #14)
-#23 := (or #15 #22)
-#24 := (not #23)
-#70 := (iff #24 #69)
-#67 := (iff #23 #66)
-#64 := (iff #22 #63)
-#61 := (iff #21 #60)
-#58 := (iff #20 #57)
-#59 := [rewrite]: #58
-#55 := (iff #18 #54)
-#56 := [rewrite]: #55
-#62 := [monotonicity #56 #59]: #61
-#65 := [monotonicity #62]: #64
-#52 := (iff #15 #51)
-#49 := (iff #14 #48)
-#46 := (iff #13 #45)
-#47 := [rewrite]: #46
-#43 := (iff #11 #42)
-#44 := [rewrite]: #43
-#50 := [monotonicity #44 #47]: #49
-#53 := [quant-intro #50]: #52
-#68 := [monotonicity #53 #65]: #67
-#71 := [monotonicity #68]: #70
-#41 := [asserted]: #24
-#74 := [mp #41 #71]: #69
-#75 := [not-or-elim #74]: #60
-#77 := [and-elim #75]: #57
-#76 := [and-elim #75]: #54
-#585 := (pattern #12)
-#584 := (pattern #10)
-#93 := (not #45)
-#92 := (not #42)
-#94 := (or #92 #93)
-#586 := (forall (vars (?v0 S2)) (:pat #584 #585) #94)
-#101 := (forall (vars (?v0 S2)) #94)
-#589 := (iff #101 #586)
-#587 := (iff #94 #94)
-#588 := [refl]: #587
-#590 := [quant-intro #588]: #589
-#87 := (not #48)
-#90 := (forall (vars (?v0 S2)) #87)
-#102 := (iff #90 #101)
-#99 := (iff #87 #94)
-#95 := (not #94)
-#83 := (not #95)
-#97 := (iff #83 #94)
-#98 := [rewrite]: #97
-#84 := (iff #87 #83)
-#85 := (iff #48 #95)
-#86 := [rewrite]: #85
-#96 := [monotonicity #86]: #84
-#100 := [trans #96 #98]: #99
-#103 := [quant-intro #100]: #102
-#72 := (not #51)
-#80 := (~ #72 #90)
-#88 := (~ #87 #87)
-#89 := [refl]: #88
-#78 := [nnf-neg #89]: #80
-#73 := [not-or-elim #74]: #72
-#91 := [mp~ #73 #78]: #90
-#104 := [mp #91 #103]: #101
-#591 := [mp #104 #590]: #586
-#255 := (not #57)
-#168 := (not #54)
-#248 := (not #586)
-#259 := (or #248 #168 #255)
-#169 := (or #255 #168)
-#260 := (or #248 #169)
-#578 := (iff #260 #259)
-#256 := (or #168 #255)
-#261 := (or #248 #256)
-#241 := (iff #261 #259)
-#576 := [rewrite]: #241
-#258 := (iff #260 #261)
-#170 := (iff #169 #256)
-#257 := [rewrite]: #170
-#262 := [monotonicity #257]: #258
-#235 := [trans #262 #576]: #578
-#188 := [quant-inst]: #260
-#365 := [mp #188 #235]: #259
-[unit-resolution #365 #591 #76 #77]: false
-unsat
-64bd43a9d49de65761e5220e25dbbe3dc269bf0e 238 0
+294a32d87135d8d12940225c21b358de5bcb1008 1 0
+unsat
+f2c8c9d3021edc718ea5a2b825764e713b11fd77 238 0
 #2 := false
 decl f3 :: (-> S2 S1)
 decl ?v1!1 :: (-> S2 S2)
@@ -8753,7 +8545,215 @@
 #338 := [mp #643 #632]: #276
 [unit-resolution #338 #664 #617 #616]: false
 unsat
-42f3c8af4c50150e11519c085a0ad69e107e1705 43 0
+f085880cbe2b6e218620939fd09c5950c149f5a2 93 0
+#2 := false
+decl f5 :: (-> S2 S1)
+decl f6 :: S2
+#16 := f6
+#20 := (f5 f6)
+decl f1 :: S1
+#4 := f1
+#65 := (= f1 #20)
+#84 := (not #65)
+decl f3 :: (-> S2 S3 S1)
+decl f4 :: S3
+#9 := f4
+#17 := (f3 f6 f4)
+#59 := (= f1 #17)
+#8 := (:var 0 S2)
+#12 := (f5 #8)
+#44 := (= f1 #12)
+#10 := (f3 #8 f4)
+#41 := (= f1 #10)
+#50 := (not #41)
+#51 := (or #50 #44)
+#56 := (forall (vars (?v0 S2)) #51)
+#62 := (and #56 #59)
+#71 := (not #62)
+#72 := (or #71 #65)
+#77 := (not #72)
+#21 := (= #20 f1)
+#18 := (= #17 f1)
+#13 := (= #12 f1)
+#11 := (= #10 f1)
+#14 := (implies #11 #13)
+#15 := (forall (vars (?v0 S2)) #14)
+#19 := (and #15 #18)
+#22 := (implies #19 #21)
+#23 := (not #22)
+#78 := (iff #23 #77)
+#75 := (iff #22 #72)
+#68 := (implies #62 #65)
+#73 := (iff #68 #72)
+#74 := [rewrite]: #73
+#69 := (iff #22 #68)
+#66 := (iff #21 #65)
+#67 := [rewrite]: #66
+#63 := (iff #19 #62)
+#60 := (iff #18 #59)
+#61 := [rewrite]: #60
+#57 := (iff #15 #56)
+#54 := (iff #14 #51)
+#47 := (implies #41 #44)
+#52 := (iff #47 #51)
+#53 := [rewrite]: #52
+#48 := (iff #14 #47)
+#45 := (iff #13 #44)
+#46 := [rewrite]: #45
+#42 := (iff #11 #41)
+#43 := [rewrite]: #42
+#49 := [monotonicity #43 #46]: #48
+#55 := [trans #49 #53]: #54
+#58 := [quant-intro #55]: #57
+#64 := [monotonicity #58 #61]: #63
+#70 := [monotonicity #64 #67]: #69
+#76 := [trans #70 #74]: #75
+#79 := [monotonicity #76]: #78
+#40 := [asserted]: #23
+#82 := [mp #40 #79]: #77
+#85 := [not-or-elim #82]: #84
+#80 := [not-or-elim #82]: #62
+#83 := [and-elim #80]: #59
+#572 := (pattern #12)
+#571 := (pattern #10)
+#573 := (forall (vars (?v0 S2)) (:pat #571 #572) #51)
+#576 := (iff #56 #573)
+#574 := (iff #51 #51)
+#575 := [refl]: #574
+#577 := [quant-intro #575]: #576
+#97 := (~ #56 #56)
+#95 := (~ #51 #51)
+#96 := [refl]: #95
+#98 := [nnf-pos #96]: #97
+#81 := [and-elim #80]: #56
+#88 := [mp~ #81 #98]: #56
+#578 := [mp #88 #577]: #573
+#155 := (not #59)
+#157 := (not #573)
+#244 := (or #157 #155 #65)
+#242 := (or #155 #65)
+#235 := (or #157 #242)
+#247 := (iff #235 #244)
+#175 := [rewrite]: #247
+#246 := [quant-inst]: #235
+#248 := [mp #246 #175]: #244
+[unit-resolution #248 #578 #83 #85]: false
+unsat
+9ef609620af3ecd94cdef1f843003b8483978fbb 113 0
+#2 := false
+decl f3 :: (-> S2 S3 S1)
+decl f4 :: S3
+#9 := f4
+decl f6 :: S2
+#16 := f6
+#19 := (f3 f6 f4)
+decl f1 :: S1
+#4 := f1
+#57 := (= f1 #19)
+decl f5 :: (-> S2 S1)
+#17 := (f5 f6)
+#54 := (= f1 #17)
+#60 := (and #54 #57)
+#63 := (not #60)
+#8 := (:var 0 S2)
+#12 := (f5 #8)
+#45 := (= f1 #12)
+#10 := (f3 #8 f4)
+#42 := (= f1 #10)
+#48 := (and #42 #45)
+#51 := (exists (vars (?v0 S2)) #48)
+#66 := (or #51 #63)
+#69 := (not #66)
+#20 := (= #19 f1)
+#18 := (= #17 f1)
+#21 := (and #18 #20)
+#22 := (not #21)
+#13 := (= #12 f1)
+#11 := (= #10 f1)
+#14 := (and #11 #13)
+#15 := (exists (vars (?v0 S2)) #14)
+#23 := (or #15 #22)
+#24 := (not #23)
+#70 := (iff #24 #69)
+#67 := (iff #23 #66)
+#64 := (iff #22 #63)
+#61 := (iff #21 #60)
+#58 := (iff #20 #57)
+#59 := [rewrite]: #58
+#55 := (iff #18 #54)
+#56 := [rewrite]: #55
+#62 := [monotonicity #56 #59]: #61
+#65 := [monotonicity #62]: #64
+#52 := (iff #15 #51)
+#49 := (iff #14 #48)
+#46 := (iff #13 #45)
+#47 := [rewrite]: #46
+#43 := (iff #11 #42)
+#44 := [rewrite]: #43
+#50 := [monotonicity #44 #47]: #49
+#53 := [quant-intro #50]: #52
+#68 := [monotonicity #53 #65]: #67
+#71 := [monotonicity #68]: #70
+#41 := [asserted]: #24
+#74 := [mp #41 #71]: #69
+#75 := [not-or-elim #74]: #60
+#77 := [and-elim #75]: #57
+#76 := [and-elim #75]: #54
+#585 := (pattern #12)
+#584 := (pattern #10)
+#93 := (not #45)
+#92 := (not #42)
+#94 := (or #92 #93)
+#586 := (forall (vars (?v0 S2)) (:pat #584 #585) #94)
+#101 := (forall (vars (?v0 S2)) #94)
+#589 := (iff #101 #586)
+#587 := (iff #94 #94)
+#588 := [refl]: #587
+#590 := [quant-intro #588]: #589
+#87 := (not #48)
+#90 := (forall (vars (?v0 S2)) #87)
+#102 := (iff #90 #101)
+#99 := (iff #87 #94)
+#95 := (not #94)
+#83 := (not #95)
+#97 := (iff #83 #94)
+#98 := [rewrite]: #97
+#84 := (iff #87 #83)
+#85 := (iff #48 #95)
+#86 := [rewrite]: #85
+#96 := [monotonicity #86]: #84
+#100 := [trans #96 #98]: #99
+#103 := [quant-intro #100]: #102
+#72 := (not #51)
+#80 := (~ #72 #90)
+#88 := (~ #87 #87)
+#89 := [refl]: #88
+#78 := [nnf-neg #89]: #80
+#73 := [not-or-elim #74]: #72
+#91 := [mp~ #73 #78]: #90
+#104 := [mp #91 #103]: #101
+#591 := [mp #104 #590]: #586
+#255 := (not #57)
+#168 := (not #54)
+#248 := (not #586)
+#259 := (or #248 #168 #255)
+#169 := (or #255 #168)
+#260 := (or #248 #169)
+#578 := (iff #260 #259)
+#256 := (or #168 #255)
+#261 := (or #248 #256)
+#241 := (iff #261 #259)
+#576 := [rewrite]: #241
+#258 := (iff #260 #261)
+#170 := (iff #169 #256)
+#257 := [rewrite]: #170
+#262 := [monotonicity #257]: #258
+#235 := [trans #262 #576]: #578
+#188 := [quant-inst]: #260
+#365 := [mp #188 #235]: #259
+[unit-resolution #365 #591 #76 #77]: false
+unsat
+b1e70439cf48151ac262711545999d4078fe3f18 43 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -8797,7 +8797,7 @@
 #32 := [asserted]: #15
 [mp #32 #58]: false
 unsat
-e44a18e086890afdae37ccfa17aec44f2a634103 27 0
+5c6baa5560c27cbea391f380f1d2efa0c31ad451 27 0
 #2 := false
 #1 := true
 #9 := (or false true)
@@ -8825,7 +8825,7 @@
 #28 := [asserted]: #11
 [mp #28 #46]: false
 unsat
-48f0da3339d9c9f7707291c89458bdaf3e50c114 31 0
+ca24bad9d30cd7adb4d8824254fb1d868566dba8 31 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -8857,7 +8857,7 @@
 #29 := [asserted]: #12
 [mp #29 #46]: false
 unsat
-e7059fb5d2b001f75897ae16a2ace8ce919e02a1 33 0
+4c370ded875fbae45221845a75b0cee6f100c565 33 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -8891,7 +8891,7 @@
 #30 := [asserted]: #13
 [mp #30 #47]: false
 unsat
-f5fef851c10f40408540848a3507970291adb3e5 35 0
+1796e5eebe3961668a10c629c8446aea6b05d0ff 35 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -8927,7 +8927,7 @@
 #30 := [asserted]: #13
 [mp #30 #50]: false
 unsat
-9facdecb47b87e40c25944deaa804ef85fc985e3 38 0
+6cbede560f4445a6195546ba14a38ce4cef82756 38 0
 #2 := false
 decl f3 :: (-> S2 S2)
 decl f4 :: S2
@@ -8966,7 +8966,7 @@
 #114 := [quant-inst]: #200
 [unit-resolution #114 #51 #50]: false
 unsat
-ae9dfcc290bc6bcccab3cd3af533d10c7c03b3b8 30 0
+3951eb981ad2121ce0b01ef0fb8385398766b219 30 0
 #2 := false
 decl f4 :: (-> S3 S4)
 decl f6 :: S3
@@ -8997,7 +8997,7 @@
 #104 := [quant-inst]: #190
 [unit-resolution #104 #41 #38]: false
 unsat
-90ce83a254a12d0f1bfd0c5eb5a99c36ab0fe295 16 0
+cfb7ec1e9520aafa7d5b29cfb983793ee2d6f2b3 16 0
 #2 := false
 #1 := true
 #8 := (implies true true)
@@ -9014,7 +9014,7 @@
 #26 := [asserted]: #9
 [mp #26 #35]: false
 unsat
-9a0ddca6dee00a602bc428366efd931bcfcee94b 16 0
+7cbcb79eb27355ecf4f8c83e03297c7b412bce52 16 0
 #2 := false
 #8 := (implies false false)
 #9 := (not #8)
@@ -9031,7 +9031,7 @@
 #26 := [asserted]: #9
 [mp #26 #35]: false
 unsat
-cabaa8d0303be40a64e7064642dabce9e7bfcad7 31 0
+abfb47efa43a4820aa829461952d8e31f18076ce 31 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -9063,11 +9063,7 @@
 #29 := [asserted]: #12
 [mp #29 #46]: false
 unsat
-46acb4cd4b5353c32c529ffe509fc6f26ac2f2a1 3 0
-#2 := false
-[asserted]: false
-unsat
-ac00789473bf074e49a8a6419c1f2a1042912d6a 48 0
+68233e17fde29c54af280784ff125abdb937332e 48 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -9116,26 +9112,7 @@
 #31 := [asserted]: #14
 [mp #31 #63]: false
 unsat
-040123bf68e09d0b72cf990436bb29a623c102b8 18 0
-#2 := false
-#9 := 1::int
-#8 := 0::int
-#10 := (< 0::int 1::int)
-#11 := (not #10)
-#38 := (iff #11 false)
-#1 := true
-#33 := (not true)
-#36 := (iff #33 false)
-#37 := [rewrite]: #36
-#34 := (iff #11 #33)
-#31 := (iff #10 true)
-#32 := [rewrite]: #31
-#35 := [monotonicity #32]: #34
-#39 := [trans #35 #37]: #38
-#28 := [asserted]: #11
-[mp #28 #39]: false
-unsat
-75052914158f379cd343f693f354895fa579a89c 53 0
+f363d14bd402cc293d16ba4871e3b8a53de5f8dc 53 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -9189,26 +9166,7 @@
 #31 := [asserted]: #14
 [mp #31 #68]: false
 unsat
-be1600749b493592f603ae3a7f9dcbc68d688187 18 0
-#2 := false
-#9 := 1::int
-#8 := 0::int
-#10 := (<= 0::int 1::int)
-#11 := (not #10)
-#38 := (iff #11 false)
-#1 := true
-#33 := (not true)
-#36 := (iff #33 false)
-#37 := [rewrite]: #36
-#34 := (iff #11 #33)
-#31 := (iff #10 true)
-#32 := [rewrite]: #31
-#35 := [monotonicity #32]: #34
-#39 := [trans #35 #37]: #38
-#28 := [asserted]: #11
-[mp #28 #39]: false
-unsat
-4bcd26d70bcaf24bb295031b732101a3dec2c643 56 0
+9f187e77426ab643b39435558d6d1a14dc433609 56 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -9265,26 +9223,7 @@
 #32 := [asserted]: #15
 [mp #32 #71]: false
 unsat
-d6985ded37fcab252cac3fbb09a30e977c68973d 18 0
-#2 := false
-#9 := 2345678901::int
-#8 := 123456789::int
-#10 := (< 123456789::int 2345678901::int)
-#11 := (not #10)
-#38 := (iff #11 false)
-#1 := true
-#33 := (not true)
-#36 := (iff #33 false)
-#37 := [rewrite]: #36
-#34 := (iff #11 #33)
-#31 := (iff #10 true)
-#32 := [rewrite]: #31
-#35 := [monotonicity #32]: #34
-#39 := [trans #35 #37]: #38
-#28 := [asserted]: #11
-[mp #28 #39]: false
-unsat
-7eeb56537bd13a6f6bc35096a4ddfb33dceb295f 89 0
+510a0fc3c1359f943c6e00e7c3aafbf7737756e9 89 0
 #2 := false
 decl f4 :: S1
 #10 := f4
@@ -9374,7 +9313,7 @@
 #86 := [not-or-elim #83]: #48
 [mp #86 #107]: false
 unsat
-38ce6b99e91d92d7feb75b7b5ff7006aee1a887f 57 0
+356f92e13256c637921f76eda9e7cbbac3ef8f53 57 0
 #2 := false
 decl f3 :: (-> S2 S1)
 decl f4 :: S2
@@ -9432,38 +9371,11 @@
 #59 := [not-or-elim #57]: #58
 [mp #59 #74]: false
 unsat
-12f34f8245ed278a095c475d68eb5a5711d23981 30 0
-#2 := false
-decl f3 :: (-> int S2)
-#25 := 1::int
-#28 := (f3 1::int)
-#13 := 0::int
-#26 := (+ 0::int 1::int)
-#27 := (f3 #26)
-#29 := (= #27 #28)
-#30 := (not #29)
-#148 := (iff #30 false)
-#1 := true
-#143 := (not true)
-#146 := (iff #143 false)
-#147 := [rewrite]: #146
-#144 := (iff #30 #143)
-#141 := (iff #29 true)
-#136 := (= #28 #28)
-#139 := (iff #136 true)
-#140 := [rewrite]: #139
-#137 := (iff #29 #136)
-#133 := (= #26 1::int)
-#134 := [rewrite]: #133
-#135 := [monotonicity #134]: #29
-#138 := [monotonicity #135]: #137
-#142 := [trans #138 #140]: #141
-#145 := [monotonicity #142]: #144
-#149 := [trans #145 #147]: #148
-#132 := [asserted]: #30
-[mp #132 #149]: false
-unsat
-8e8baf35daf48781c204954ba8d7df5254aac6a8 50 0
+ff9d25294dc1a17176296b8b02c6fb61dd5a7105 3 0
+#2 := false
+[asserted]: false
+unsat
+f77cd44869b8452f0b9cdbc4acee77106cfc0c39 50 0
 #2 := false
 decl f5 :: S2
 #11 := f5
@@ -9514,7 +9426,26 @@
 #62 := [not-or-elim #58]: #61
 [unit-resolution #62 #70]: false
 unsat
-7bbe1bf9e8878e3709a71589e39f12e31278f1b7 27 0
+ae97c364e76e6bda750550b3359e25f9363fc00f 18 0
+#2 := false
+#9 := 1::int
+#8 := 0::int
+#10 := (< 0::int 1::int)
+#11 := (not #10)
+#38 := (iff #11 false)
+#1 := true
+#33 := (not true)
+#36 := (iff #33 false)
+#37 := [rewrite]: #36
+#34 := (iff #11 #33)
+#31 := (iff #10 true)
+#32 := [rewrite]: #31
+#35 := [monotonicity #32]: #34
+#39 := [trans #35 #37]: #38
+#28 := [asserted]: #11
+[mp #28 #39]: false
+unsat
+6168df6e70405fbcc2600c1e033ec5aaad4d620c 27 0
 #2 := false
 decl f5 :: (-> S2 S3)
 decl f4 :: S2
@@ -9542,41 +9473,26 @@
 #43 := [not-or-elim #42]: #41
 [unit-resolution #43 #51]: false
 unsat
-fca9345b5fb82879eab30d8a35a71a4cfb012222 33 0
-#2 := false
-#27 := 1::int
-decl f4 :: (-> S2 int)
-decl f5 :: S2
-#25 := f5
-#26 := (f4 f5)
-#28 := (+ #26 1::int)
-#29 := (< #26 #28)
-#30 := (not #29)
-#151 := (iff #30 false)
-#133 := (+ 1::int #26)
-#136 := (< #26 #133)
-#139 := (not #136)
-#149 := (iff #139 false)
-#1 := true
-#144 := (not true)
-#147 := (iff #144 false)
-#148 := [rewrite]: #147
-#145 := (iff #139 #144)
-#142 := (iff #136 true)
-#143 := [rewrite]: #142
-#146 := [monotonicity #143]: #145
-#150 := [trans #146 #148]: #149
-#140 := (iff #30 #139)
-#137 := (iff #29 #136)
-#134 := (= #28 #133)
-#135 := [rewrite]: #134
-#138 := [monotonicity #135]: #137
-#141 := [monotonicity #138]: #140
-#152 := [trans #141 #150]: #151
-#132 := [asserted]: #30
-[mp #132 #152]: false
-unsat
-a8014c2ba4ebe428717a3516d1900ca3b7591555 73 0
+93d89a3ed53f09b21acbcbce4122ad8ab50daca2 18 0
+#2 := false
+#9 := 1::int
+#8 := 0::int
+#10 := (<= 0::int 1::int)
+#11 := (not #10)
+#38 := (iff #11 false)
+#1 := true
+#33 := (not true)
+#36 := (iff #33 false)
+#37 := [rewrite]: #36
+#34 := (iff #11 #33)
+#31 := (iff #10 true)
+#32 := [rewrite]: #31
+#35 := [monotonicity #32]: #34
+#39 := [trans #35 #37]: #38
+#28 := [asserted]: #11
+[mp #28 #39]: false
+unsat
+5a8fd4dc177700b7e623e63e345f854da9c68ee0 73 0
 #2 := false
 decl f3 :: (-> S1 S1)
 decl f4 :: S1
@@ -9650,7 +9566,386 @@
 #146 := [quant-inst]: #232
 [unit-resolution #146 #566 #74]: false
 unsat
-f572500dcd49c30edfbceabc272b009fb11814d2 428 0
+80b6a701eb48d11531bbc36b28f9be8ab306b56a 18 0
+#2 := false
+#9 := 2345678901::int
+#8 := 123456789::int
+#10 := (< 123456789::int 2345678901::int)
+#11 := (not #10)
+#38 := (iff #11 false)
+#1 := true
+#33 := (not true)
+#36 := (iff #33 false)
+#37 := [rewrite]: #36
+#34 := (iff #11 #33)
+#31 := (iff #10 true)
+#32 := [rewrite]: #31
+#35 := [monotonicity #32]: #34
+#39 := [trans #35 #37]: #38
+#28 := [asserted]: #11
+[mp #28 #39]: false
+unsat
+f13cda4935d2ad2244c0ae2a16ca60c9a8153f04 106 0
+#2 := false
+decl f3 :: (-> S2 S2 S1)
+decl ?v0!0 :: S2
+#72 := ?v0!0
+#83 := (f3 ?v0!0 ?v0!0)
+decl f1 :: S1
+#4 := f1
+#75 := (= f1 #83)
+#76 := (not #75)
+#9 := (:var 0 S2)
+#16 := (f3 #9 #9)
+#50 := (= f1 #16)
+#53 := (forall (vars (?v0 S2)) #50)
+#69 := (not #53)
+#84 := (~ #69 #76)
+#85 := [sk]: #84
+#8 := (:var 1 S2)
+#12 := (f3 #9 #8)
+#41 := (= f1 #12)
+#10 := (f3 #8 #9)
+#38 := (= f1 #10)
+#44 := (and #38 #41)
+#47 := (forall (vars (?v0 S2) (?v1 S2)) #44)
+#59 := (not #47)
+#60 := (or #59 #53)
+#65 := (not #60)
+#17 := (= #16 f1)
+#18 := (forall (vars (?v0 S2)) #17)
+#13 := (= #12 f1)
+#11 := (= #10 f1)
+#14 := (and #11 #13)
+#15 := (forall (vars (?v0 S2) (?v1 S2)) #14)
+#19 := (implies #15 #18)
+#20 := (not #19)
+#66 := (iff #20 #65)
+#63 := (iff #19 #60)
+#56 := (implies #47 #53)
+#61 := (iff #56 #60)
+#62 := [rewrite]: #61
+#57 := (iff #19 #56)
+#54 := (iff #18 #53)
+#51 := (iff #17 #50)
+#52 := [rewrite]: #51
+#55 := [quant-intro #52]: #54
+#48 := (iff #15 #47)
+#45 := (iff #14 #44)
+#42 := (iff #13 #41)
+#43 := [rewrite]: #42
+#39 := (iff #11 #38)
+#40 := [rewrite]: #39
+#46 := [monotonicity #40 #43]: #45
+#49 := [quant-intro #46]: #48
+#58 := [monotonicity #49 #55]: #57
+#64 := [trans #58 #62]: #63
+#67 := [monotonicity #64]: #66
+#37 := [asserted]: #20
+#70 := [mp #37 #67]: #65
+#71 := [not-or-elim #70]: #69
+#88 := [mp~ #71 #85]: #76
+#577 := (pattern #12)
+#576 := (pattern #10)
+#87 := (not #41)
+#86 := (not #38)
+#89 := (or #86 #87)
+#90 := (not #89)
+#578 := (forall (vars (?v0 S2) (?v1 S2)) (:pat #576 #577) #90)
+#93 := (forall (vars (?v0 S2) (?v1 S2)) #90)
+#581 := (iff #93 #578)
+#579 := (iff #90 #90)
+#580 := [refl]: #579
+#582 := [quant-intro #580]: #581
+#94 := (iff #47 #93)
+#91 := (iff #44 #90)
+#92 := [rewrite]: #91
+#95 := [quant-intro #92]: #94
+#81 := (~ #47 #47)
+#79 := (~ #44 #44)
+#80 := [refl]: #79
+#82 := [nnf-pos #80]: #81
+#68 := [not-or-elim #70]: #47
+#74 := [mp~ #68 #82]: #47
+#96 := [mp #74 #95]: #93
+#583 := [mp #96 #582]: #578
+#250 := (not #578)
+#254 := (or #250 #75)
+#160 := (or #76 #76)
+#247 := (not #160)
+#233 := (or #250 #247)
+#570 := (iff #233 #254)
+#357 := (iff #254 #254)
+#564 := [rewrite]: #357
+#180 := (iff #247 #75)
+#162 := (not #76)
+#251 := (iff #162 #75)
+#252 := [rewrite]: #251
+#249 := (iff #247 #162)
+#161 := (iff #160 #76)
+#248 := [rewrite]: #161
+#240 := [monotonicity #248]: #249
+#253 := [trans #240 #252]: #180
+#227 := [monotonicity #253]: #570
+#238 := [trans #227 #564]: #570
+#568 := [quant-inst]: #233
+#239 := [mp #568 #238]: #254
+[unit-resolution #239 #583 #88]: false
+unsat
+060c210941c0fd9eca58c8250fc66d664e976010 66 0
+#2 := false
+decl f4 :: S1
+#10 := f4
+decl f1 :: S1
+#4 := f1
+#37 := (= f1 f4)
+decl f3 :: S1
+#8 := f3
+#34 := (= f1 f3)
+#40 := (or #34 #37)
+#84 := (iff #40 false)
+#79 := (or false false)
+#82 := (iff #79 false)
+#83 := [rewrite]: #82
+#80 := (iff #40 #79)
+#75 := (iff #37 false)
+#66 := (not #37)
+#43 := (not #34)
+#49 := (and #43 #40)
+#57 := (not #49)
+#58 := (or #37 #57)
+#63 := (not #58)
+#11 := (= f4 f1)
+#9 := (= f3 f1)
+#13 := (not #9)
+#12 := (or #9 #11)
+#14 := (and #12 #13)
+#15 := (implies #14 #11)
+#16 := (not #15)
+#64 := (iff #16 #63)
+#61 := (iff #15 #58)
+#54 := (implies #49 #37)
+#59 := (iff #54 #58)
+#60 := [rewrite]: #59
+#55 := (iff #15 #54)
+#38 := (iff #11 #37)
+#39 := [rewrite]: #38
+#52 := (iff #14 #49)
+#46 := (and #40 #43)
+#50 := (iff #46 #49)
+#51 := [rewrite]: #50
+#47 := (iff #14 #46)
+#44 := (iff #13 #43)
+#35 := (iff #9 #34)
+#36 := [rewrite]: #35
+#45 := [monotonicity #36]: #44
+#41 := (iff #12 #40)
+#42 := [monotonicity #36 #39]: #41
+#48 := [monotonicity #42 #45]: #47
+#53 := [trans #48 #51]: #52
+#56 := [monotonicity #53 #39]: #55
+#62 := [trans #56 #60]: #61
+#65 := [monotonicity #62]: #64
+#33 := [asserted]: #16
+#68 := [mp #33 #65]: #63
+#67 := [not-or-elim #68]: #66
+#76 := [iff-false #67]: #75
+#77 := (iff #34 false)
+#69 := [not-or-elim #68]: #49
+#70 := [and-elim #69]: #43
+#78 := [iff-false #70]: #77
+#81 := [monotonicity #78 #76]: #80
+#85 := [trans #81 #83]: #84
+#71 := [and-elim #69]: #40
+[mp #71 #85]: false
+unsat
+51b1554c8079ae450aaa843f46db3a132a62d2a4 59 0
+#2 := false
+decl f1 :: S1
+#4 := f1
+decl f6 :: S1
+#15 := f6
+#16 := (= f6 f1)
+decl f5 :: S1
+#13 := f5
+#14 := (= f5 f1)
+#17 := (and #14 #16)
+decl f4 :: S1
+#10 := f4
+#11 := (= f4 f1)
+decl f3 :: S1
+#8 := f3
+#9 := (= f3 f1)
+#12 := (and #9 #11)
+#18 := (or #12 #17)
+#19 := (implies #18 #18)
+#20 := (not #19)
+#71 := (iff #20 false)
+#1 := true
+#66 := (not true)
+#69 := (iff #66 false)
+#70 := [rewrite]: #69
+#67 := (iff #20 #66)
+#64 := (iff #19 true)
+#50 := (= f1 f6)
+#47 := (= f1 f5)
+#53 := (and #47 #50)
+#41 := (= f1 f4)
+#38 := (= f1 f3)
+#44 := (and #38 #41)
+#56 := (or #44 #53)
+#59 := (implies #56 #56)
+#62 := (iff #59 true)
+#63 := [rewrite]: #62
+#60 := (iff #19 #59)
+#57 := (iff #18 #56)
+#54 := (iff #17 #53)
+#51 := (iff #16 #50)
+#52 := [rewrite]: #51
+#48 := (iff #14 #47)
+#49 := [rewrite]: #48
+#55 := [monotonicity #49 #52]: #54
+#45 := (iff #12 #44)
+#42 := (iff #11 #41)
+#43 := [rewrite]: #42
+#39 := (iff #9 #38)
+#40 := [rewrite]: #39
+#46 := [monotonicity #40 #43]: #45
+#58 := [monotonicity #46 #55]: #57
+#61 := [monotonicity #58 #58]: #60
+#65 := [trans #61 #63]: #64
+#68 := [monotonicity #65]: #67
+#72 := [trans #68 #70]: #71
+#37 := [asserted]: #20
+[mp #37 #72]: false
+unsat
+84b3ad1ba10175f629ea45974dd1f7204028ffdc 30 0
+#2 := false
+decl f3 :: (-> int S2)
+#25 := 1::int
+#28 := (f3 1::int)
+#13 := 0::int
+#26 := (+ 0::int 1::int)
+#27 := (f3 #26)
+#29 := (= #27 #28)
+#30 := (not #29)
+#148 := (iff #30 false)
+#1 := true
+#143 := (not true)
+#146 := (iff #143 false)
+#147 := [rewrite]: #146
+#144 := (iff #30 #143)
+#141 := (iff #29 true)
+#136 := (= #28 #28)
+#139 := (iff #136 true)
+#140 := [rewrite]: #139
+#137 := (iff #29 #136)
+#133 := (= #26 1::int)
+#134 := [rewrite]: #133
+#135 := [monotonicity #134]: #29
+#138 := [monotonicity #135]: #137
+#142 := [trans #138 #140]: #141
+#145 := [monotonicity #142]: #144
+#149 := [trans #145 #147]: #148
+#132 := [asserted]: #30
+[mp #132 #149]: false
+unsat
+fc798ca35949786a7df6c3211b951fe889ed5aca 33 0
+#2 := false
+#27 := 1::int
+decl f4 :: (-> S2 int)
+decl f5 :: S2
+#25 := f5
+#26 := (f4 f5)
+#28 := (+ #26 1::int)
+#29 := (< #26 #28)
+#30 := (not #29)
+#151 := (iff #30 false)
+#133 := (+ 1::int #26)
+#136 := (< #26 #133)
+#139 := (not #136)
+#149 := (iff #139 false)
+#1 := true
+#144 := (not true)
+#147 := (iff #144 false)
+#148 := [rewrite]: #147
+#145 := (iff #139 #144)
+#142 := (iff #136 true)
+#143 := [rewrite]: #142
+#146 := [monotonicity #143]: #145
+#150 := [trans #146 #148]: #149
+#140 := (iff #30 #139)
+#137 := (iff #29 #136)
+#134 := (= #28 #133)
+#135 := [rewrite]: #134
+#138 := [monotonicity #135]: #137
+#141 := [monotonicity #138]: #140
+#152 := [trans #141 #150]: #151
+#132 := [asserted]: #30
+[mp #132 #152]: false
+unsat
+1a658a61136d181e832caa6664fb39c44f4496ee 60 0
+#2 := false
+decl f3 :: (-> int S2)
+decl f4 :: (-> S2 int)
+decl f5 :: S2
+#25 := f5
+#26 := (f4 f5)
+#135 := (f3 #26)
+#141 := (= f5 #135)
+#146 := (not #141)
+#13 := 0::int
+#27 := (+ #26 0::int)
+#28 := (f3 #27)
+#29 := (= #28 f5)
+#30 := (not #29)
+#147 := (iff #30 #146)
+#144 := (iff #29 #141)
+#138 := (= #135 f5)
+#142 := (iff #138 #141)
+#143 := [rewrite]: #142
+#139 := (iff #29 #138)
+#136 := (= #28 #135)
+#133 := (= #27 #26)
+#134 := [rewrite]: #133
+#137 := [monotonicity #134]: #136
+#140 := [monotonicity #137]: #139
+#145 := [trans #140 #143]: #144
+#148 := [monotonicity #145]: #147
+#132 := [asserted]: #30
+#151 := [mp #132 #148]: #146
+#8 := (:var 0 S2)
+#9 := (f4 #8)
+#639 := (pattern #9)
+#10 := (f3 #9)
+#48 := (= #8 #10)
+#640 := (forall (vars (?v0 S2)) (:pat #639) #48)
+#51 := (forall (vars (?v0 S2)) #48)
+#641 := (iff #51 #640)
+#643 := (iff #640 #640)
+#644 := [rewrite]: #643
+#642 := [rewrite]: #641
+#645 := [trans #642 #644]: #641
+#163 := (~ #51 #51)
+#161 := (~ #48 #48)
+#162 := [refl]: #161
+#164 := [nnf-pos #162]: #163
+#11 := (= #10 #8)
+#12 := (forall (vars (?v0 S2)) #11)
+#52 := (iff #12 #51)
+#49 := (iff #11 #48)
+#50 := [rewrite]: #49
+#53 := [quant-intro #50]: #52
+#47 := [asserted]: #12
+#56 := [mp #47 #53]: #51
+#152 := [mp~ #56 #164]: #51
+#646 := [mp #152 #645]: #640
+#224 := (not #640)
+#310 := (or #224 #141)
+#311 := [quant-inst]: #310
+[unit-resolution #311 #646 #151]: false
+unsat
+ed39783643eee7923ab14b3fef066b0bb836f7e4 428 0
 #2 := false
 decl f4 :: (-> S2 int)
 decl f6 :: S2
@@ -10079,241 +10374,149 @@
 #393 := [unit-resolution #403 #411 #414]: #443
 [unit-resolution #393 #424]: false
 unsat
-c0906c23e4b0650863a2ef0d68bafa4e06a9dd19 106 0
-#2 := false
-decl f3 :: (-> S2 S2 S1)
-decl ?v0!0 :: S2
-#72 := ?v0!0
-#83 := (f3 ?v0!0 ?v0!0)
-decl f1 :: S1
-#4 := f1
-#75 := (= f1 #83)
-#76 := (not #75)
-#9 := (:var 0 S2)
-#16 := (f3 #9 #9)
-#50 := (= f1 #16)
-#53 := (forall (vars (?v0 S2)) #50)
-#69 := (not #53)
-#84 := (~ #69 #76)
-#85 := [sk]: #84
-#8 := (:var 1 S2)
-#12 := (f3 #9 #8)
-#41 := (= f1 #12)
-#10 := (f3 #8 #9)
-#38 := (= f1 #10)
-#44 := (and #38 #41)
-#47 := (forall (vars (?v0 S2) (?v1 S2)) #44)
-#59 := (not #47)
-#60 := (or #59 #53)
-#65 := (not #60)
-#17 := (= #16 f1)
-#18 := (forall (vars (?v0 S2)) #17)
-#13 := (= #12 f1)
-#11 := (= #10 f1)
-#14 := (and #11 #13)
-#15 := (forall (vars (?v0 S2) (?v1 S2)) #14)
-#19 := (implies #15 #18)
-#20 := (not #19)
-#66 := (iff #20 #65)
-#63 := (iff #19 #60)
-#56 := (implies #47 #53)
-#61 := (iff #56 #60)
-#62 := [rewrite]: #61
-#57 := (iff #19 #56)
-#54 := (iff #18 #53)
-#51 := (iff #17 #50)
-#52 := [rewrite]: #51
-#55 := [quant-intro #52]: #54
-#48 := (iff #15 #47)
-#45 := (iff #14 #44)
-#42 := (iff #13 #41)
-#43 := [rewrite]: #42
-#39 := (iff #11 #38)
-#40 := [rewrite]: #39
-#46 := [monotonicity #40 #43]: #45
-#49 := [quant-intro #46]: #48
-#58 := [monotonicity #49 #55]: #57
-#64 := [trans #58 #62]: #63
-#67 := [monotonicity #64]: #66
-#37 := [asserted]: #20
-#70 := [mp #37 #67]: #65
-#71 := [not-or-elim #70]: #69
-#88 := [mp~ #71 #85]: #76
-#577 := (pattern #12)
-#576 := (pattern #10)
-#87 := (not #41)
-#86 := (not #38)
-#89 := (or #86 #87)
-#90 := (not #89)
-#578 := (forall (vars (?v0 S2) (?v1 S2)) (:pat #576 #577) #90)
-#93 := (forall (vars (?v0 S2) (?v1 S2)) #90)
-#581 := (iff #93 #578)
-#579 := (iff #90 #90)
-#580 := [refl]: #579
-#582 := [quant-intro #580]: #581
-#94 := (iff #47 #93)
-#91 := (iff #44 #90)
-#92 := [rewrite]: #91
-#95 := [quant-intro #92]: #94
-#81 := (~ #47 #47)
-#79 := (~ #44 #44)
-#80 := [refl]: #79
-#82 := [nnf-pos #80]: #81
-#68 := [not-or-elim #70]: #47
-#74 := [mp~ #68 #82]: #47
-#96 := [mp #74 #95]: #93
-#583 := [mp #96 #582]: #578
-#250 := (not #578)
-#254 := (or #250 #75)
-#160 := (or #76 #76)
-#247 := (not #160)
-#233 := (or #250 #247)
-#570 := (iff #233 #254)
-#357 := (iff #254 #254)
-#564 := [rewrite]: #357
-#180 := (iff #247 #75)
-#162 := (not #76)
-#251 := (iff #162 #75)
-#252 := [rewrite]: #251
-#249 := (iff #247 #162)
-#161 := (iff #160 #76)
-#248 := [rewrite]: #161
-#240 := [monotonicity #248]: #249
-#253 := [trans #240 #252]: #180
-#227 := [monotonicity #253]: #570
-#238 := [trans #227 #564]: #570
-#568 := [quant-inst]: #233
-#239 := [mp #568 #238]: #254
-[unit-resolution #239 #583 #88]: false
-unsat
-58aaefc3b25d8181c01a2139430686aeca861bf3 66 0
-#2 := false
-decl f4 :: S1
-#10 := f4
-decl f1 :: S1
-#4 := f1
-#37 := (= f1 f4)
-decl f3 :: S1
-#8 := f3
-#34 := (= f1 f3)
-#40 := (or #34 #37)
-#84 := (iff #40 false)
-#79 := (or false false)
-#82 := (iff #79 false)
-#83 := [rewrite]: #82
-#80 := (iff #40 #79)
-#75 := (iff #37 false)
-#66 := (not #37)
-#43 := (not #34)
-#49 := (and #43 #40)
-#57 := (not #49)
-#58 := (or #37 #57)
-#63 := (not #58)
-#11 := (= f4 f1)
-#9 := (= f3 f1)
-#13 := (not #9)
-#12 := (or #9 #11)
-#14 := (and #12 #13)
-#15 := (implies #14 #11)
-#16 := (not #15)
-#64 := (iff #16 #63)
-#61 := (iff #15 #58)
-#54 := (implies #49 #37)
-#59 := (iff #54 #58)
-#60 := [rewrite]: #59
-#55 := (iff #15 #54)
-#38 := (iff #11 #37)
-#39 := [rewrite]: #38
-#52 := (iff #14 #49)
-#46 := (and #40 #43)
-#50 := (iff #46 #49)
-#51 := [rewrite]: #50
-#47 := (iff #14 #46)
-#44 := (iff #13 #43)
-#35 := (iff #9 #34)
-#36 := [rewrite]: #35
-#45 := [monotonicity #36]: #44
-#41 := (iff #12 #40)
-#42 := [monotonicity #36 #39]: #41
-#48 := [monotonicity #42 #45]: #47
-#53 := [trans #48 #51]: #52
-#56 := [monotonicity #53 #39]: #55
-#62 := [trans #56 #60]: #61
-#65 := [monotonicity #62]: #64
-#33 := [asserted]: #16
-#68 := [mp #33 #65]: #63
-#67 := [not-or-elim #68]: #66
-#76 := [iff-false #67]: #75
-#77 := (iff #34 false)
-#69 := [not-or-elim #68]: #49
-#70 := [and-elim #69]: #43
-#78 := [iff-false #70]: #77
-#81 := [monotonicity #78 #76]: #80
-#85 := [trans #81 #83]: #84
-#71 := [and-elim #69]: #40
-[mp #71 #85]: false
-unsat
-d80d7bb97197c962c0b81d44c7a8cfd617b6ca33 59 0
-#2 := false
-decl f1 :: S1
-#4 := f1
-decl f6 :: S1
-#15 := f6
-#16 := (= f6 f1)
-decl f5 :: S1
-#13 := f5
-#14 := (= f5 f1)
-#17 := (and #14 #16)
-decl f4 :: S1
-#10 := f4
-#11 := (= f4 f1)
-decl f3 :: S1
-#8 := f3
-#9 := (= f3 f1)
-#12 := (and #9 #11)
-#18 := (or #12 #17)
-#19 := (implies #18 #18)
-#20 := (not #19)
-#71 := (iff #20 false)
-#1 := true
-#66 := (not true)
-#69 := (iff #66 false)
-#70 := [rewrite]: #69
-#67 := (iff #20 #66)
-#64 := (iff #19 true)
-#50 := (= f1 f6)
-#47 := (= f1 f5)
-#53 := (and #47 #50)
-#41 := (= f1 f4)
-#38 := (= f1 f3)
-#44 := (and #38 #41)
-#56 := (or #44 #53)
-#59 := (implies #56 #56)
-#62 := (iff #59 true)
-#63 := [rewrite]: #62
-#60 := (iff #19 #59)
-#57 := (iff #18 #56)
-#54 := (iff #17 #53)
-#51 := (iff #16 #50)
-#52 := [rewrite]: #51
-#48 := (iff #14 #47)
-#49 := [rewrite]: #48
-#55 := [monotonicity #49 #52]: #54
-#45 := (iff #12 #44)
-#42 := (iff #11 #41)
-#43 := [rewrite]: #42
-#39 := (iff #9 #38)
-#40 := [rewrite]: #39
-#46 := [monotonicity #40 #43]: #45
-#58 := [monotonicity #46 #55]: #57
-#61 := [monotonicity #58 #58]: #60
-#65 := [trans #61 #63]: #64
-#68 := [monotonicity #65]: #67
-#72 := [trans #68 #70]: #71
-#37 := [asserted]: #20
-[mp #37 #72]: false
-unsat
-5682ca831360f99dba925cc3023ce41a2bdd0f63 364 0
+99ce906c39baeb082cce24e7e191930744f68770 60 0
+#2 := false
+decl f3 :: (-> int S2)
+decl f4 :: (-> S2 int)
+decl f5 :: S2
+#25 := f5
+#26 := (f4 f5)
+#135 := (f3 #26)
+#141 := (= f5 #135)
+#146 := (not #141)
+#13 := 0::int
+#27 := (+ 0::int #26)
+#28 := (f3 #27)
+#29 := (= #28 f5)
+#30 := (not #29)
+#147 := (iff #30 #146)
+#144 := (iff #29 #141)
+#138 := (= #135 f5)
+#142 := (iff #138 #141)
+#143 := [rewrite]: #142
+#139 := (iff #29 #138)
+#136 := (= #28 #135)
+#133 := (= #27 #26)
+#134 := [rewrite]: #133
+#137 := [monotonicity #134]: #136
+#140 := [monotonicity #137]: #139
+#145 := [trans #140 #143]: #144
+#148 := [monotonicity #145]: #147
+#132 := [asserted]: #30
+#151 := [mp #132 #148]: #146
+#8 := (:var 0 S2)
+#9 := (f4 #8)
+#639 := (pattern #9)
+#10 := (f3 #9)
+#48 := (= #8 #10)
+#640 := (forall (vars (?v0 S2)) (:pat #639) #48)
+#51 := (forall (vars (?v0 S2)) #48)
+#641 := (iff #51 #640)
+#643 := (iff #640 #640)
+#644 := [rewrite]: #643
+#642 := [rewrite]: #641
+#645 := [trans #642 #644]: #641
+#163 := (~ #51 #51)
+#161 := (~ #48 #48)
+#162 := [refl]: #161
+#164 := [nnf-pos #162]: #163
+#11 := (= #10 #8)
+#12 := (forall (vars (?v0 S2)) #11)
+#52 := (iff #12 #51)
+#49 := (iff #11 #48)
+#50 := [rewrite]: #49
+#53 := [quant-intro #50]: #52
+#47 := [asserted]: #12
+#56 := [mp #47 #53]: #51
+#152 := [mp~ #56 #164]: #51
+#646 := [mp #152 #645]: #640
+#224 := (not #640)
+#310 := (or #224 #141)
+#311 := [quant-inst]: #310
+[unit-resolution #311 #646 #151]: false
+unsat
+fd4ffa575704f079b1ec52c184c82cdd44b22127 37 0
+#2 := false
+decl f3 :: (-> int S2)
+decl f4 :: (-> S2 int)
+decl f5 :: S2
+#25 := f5
+#26 := (f4 f5)
+decl f6 :: S2
+#27 := f6
+#28 := (f4 f6)
+#31 := (+ #28 #26)
+#32 := (f3 #31)
+#29 := (+ #26 #28)
+#30 := (f3 #29)
+#33 := (= #30 #32)
+#34 := (not #33)
+#153 := (iff #34 false)
+#1 := true
+#148 := (not true)
+#151 := (iff #148 false)
+#152 := [rewrite]: #151
+#149 := (iff #34 #148)
+#146 := (iff #33 true)
+#141 := (= #30 #30)
+#144 := (iff #141 true)
+#145 := [rewrite]: #144
+#142 := (iff #33 #141)
+#139 := (= #32 #30)
+#137 := (= #31 #29)
+#138 := [rewrite]: #137
+#140 := [monotonicity #138]: #139
+#143 := [monotonicity #140]: #142
+#147 := [trans #143 #145]: #146
+#150 := [monotonicity #147]: #149
+#154 := [trans #150 #152]: #153
+#136 := [asserted]: #34
+[mp #136 #154]: false
+unsat
+503b4a1dda22c52727c27668172fc65c05cdd044 42 0
+#2 := false
+decl f3 :: (-> int S2)
+decl f4 :: (-> S2 int)
+decl f7 :: S2
+#29 := f7
+#30 := (f4 f7)
+decl f6 :: S2
+#27 := f6
+#28 := (f4 f6)
+decl f5 :: S2
+#25 := f5
+#26 := (f4 f5)
+#34 := (+ #26 #28)
+#35 := (+ #34 #30)
+#36 := (f3 #35)
+#31 := (+ #28 #30)
+#32 := (+ #26 #31)
+#33 := (f3 #32)
+#37 := (= #33 #36)
+#38 := (not #37)
+#157 := (iff #38 false)
+#1 := true
+#152 := (not true)
+#155 := (iff #152 false)
+#156 := [rewrite]: #155
+#153 := (iff #38 #152)
+#150 := (iff #37 true)
+#145 := (= #33 #33)
+#148 := (iff #145 true)
+#149 := [rewrite]: #148
+#146 := (iff #37 #145)
+#143 := (= #36 #33)
+#141 := (= #35 #32)
+#142 := [rewrite]: #141
+#144 := [monotonicity #142]: #143
+#147 := [monotonicity #144]: #146
+#151 := [trans #147 #149]: #150
+#154 := [monotonicity #151]: #153
+#158 := [trans #154 #156]: #157
+#140 := [asserted]: #38
+[mp #140 #158]: false
+unsat
+7c830a2352021a9371ebd4587ef2e48d76d26c2e 364 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -10678,451 +10881,7 @@
 #500 := [unit-resolution #469 #535]: #379
 [th-lemma #500 #534 #195]: false
 unsat
-b265c055659e0ea1b48e0304606789db36e05540 60 0
-#2 := false
-decl f3 :: (-> int S2)
-decl f4 :: (-> S2 int)
-decl f5 :: S2
-#25 := f5
-#26 := (f4 f5)
-#135 := (f3 #26)
-#141 := (= f5 #135)
-#146 := (not #141)
-#13 := 0::int
-#27 := (+ #26 0::int)
-#28 := (f3 #27)
-#29 := (= #28 f5)
-#30 := (not #29)
-#147 := (iff #30 #146)
-#144 := (iff #29 #141)
-#138 := (= #135 f5)
-#142 := (iff #138 #141)
-#143 := [rewrite]: #142
-#139 := (iff #29 #138)
-#136 := (= #28 #135)
-#133 := (= #27 #26)
-#134 := [rewrite]: #133
-#137 := [monotonicity #134]: #136
-#140 := [monotonicity #137]: #139
-#145 := [trans #140 #143]: #144
-#148 := [monotonicity #145]: #147
-#132 := [asserted]: #30
-#151 := [mp #132 #148]: #146
-#8 := (:var 0 S2)
-#9 := (f4 #8)
-#639 := (pattern #9)
-#10 := (f3 #9)
-#48 := (= #8 #10)
-#640 := (forall (vars (?v0 S2)) (:pat #639) #48)
-#51 := (forall (vars (?v0 S2)) #48)
-#641 := (iff #51 #640)
-#643 := (iff #640 #640)
-#644 := [rewrite]: #643
-#642 := [rewrite]: #641
-#645 := [trans #642 #644]: #641
-#163 := (~ #51 #51)
-#161 := (~ #48 #48)
-#162 := [refl]: #161
-#164 := [nnf-pos #162]: #163
-#11 := (= #10 #8)
-#12 := (forall (vars (?v0 S2)) #11)
-#52 := (iff #12 #51)
-#49 := (iff #11 #48)
-#50 := [rewrite]: #49
-#53 := [quant-intro #50]: #52
-#47 := [asserted]: #12
-#56 := [mp #47 #53]: #51
-#152 := [mp~ #56 #164]: #51
-#646 := [mp #152 #645]: #640
-#224 := (not #640)
-#310 := (or #224 #141)
-#311 := [quant-inst]: #310
-[unit-resolution #311 #646 #151]: false
-unsat
-75c3bae150e305a0fc97df1a1e35cb97fdd88bd7 60 0
-#2 := false
-decl f3 :: (-> int S2)
-decl f4 :: (-> S2 int)
-decl f5 :: S2
-#25 := f5
-#26 := (f4 f5)
-#135 := (f3 #26)
-#141 := (= f5 #135)
-#146 := (not #141)
-#13 := 0::int
-#27 := (+ 0::int #26)
-#28 := (f3 #27)
-#29 := (= #28 f5)
-#30 := (not #29)
-#147 := (iff #30 #146)
-#144 := (iff #29 #141)
-#138 := (= #135 f5)
-#142 := (iff #138 #141)
-#143 := [rewrite]: #142
-#139 := (iff #29 #138)
-#136 := (= #28 #135)
-#133 := (= #27 #26)
-#134 := [rewrite]: #133
-#137 := [monotonicity #134]: #136
-#140 := [monotonicity #137]: #139
-#145 := [trans #140 #143]: #144
-#148 := [monotonicity #145]: #147
-#132 := [asserted]: #30
-#151 := [mp #132 #148]: #146
-#8 := (:var 0 S2)
-#9 := (f4 #8)
-#639 := (pattern #9)
-#10 := (f3 #9)
-#48 := (= #8 #10)
-#640 := (forall (vars (?v0 S2)) (:pat #639) #48)
-#51 := (forall (vars (?v0 S2)) #48)
-#641 := (iff #51 #640)
-#643 := (iff #640 #640)
-#644 := [rewrite]: #643
-#642 := [rewrite]: #641
-#645 := [trans #642 #644]: #641
-#163 := (~ #51 #51)
-#161 := (~ #48 #48)
-#162 := [refl]: #161
-#164 := [nnf-pos #162]: #163
-#11 := (= #10 #8)
-#12 := (forall (vars (?v0 S2)) #11)
-#52 := (iff #12 #51)
-#49 := (iff #11 #48)
-#50 := [rewrite]: #49
-#53 := [quant-intro #50]: #52
-#47 := [asserted]: #12
-#56 := [mp #47 #53]: #51
-#152 := [mp~ #56 #164]: #51
-#646 := [mp #152 #645]: #640
-#224 := (not #640)
-#310 := (or #224 #141)
-#311 := [quant-inst]: #310
-[unit-resolution #311 #646 #151]: false
-unsat
-c52f3166d15e1102a7ca505cd72ba484966ee318 37 0
-#2 := false
-decl f3 :: (-> int S2)
-decl f4 :: (-> S2 int)
-decl f5 :: S2
-#25 := f5
-#26 := (f4 f5)
-decl f6 :: S2
-#27 := f6
-#28 := (f4 f6)
-#31 := (+ #28 #26)
-#32 := (f3 #31)
-#29 := (+ #26 #28)
-#30 := (f3 #29)
-#33 := (= #30 #32)
-#34 := (not #33)
-#153 := (iff #34 false)
-#1 := true
-#148 := (not true)
-#151 := (iff #148 false)
-#152 := [rewrite]: #151
-#149 := (iff #34 #148)
-#146 := (iff #33 true)
-#141 := (= #30 #30)
-#144 := (iff #141 true)
-#145 := [rewrite]: #144
-#142 := (iff #33 #141)
-#139 := (= #32 #30)
-#137 := (= #31 #29)
-#138 := [rewrite]: #137
-#140 := [monotonicity #138]: #139
-#143 := [monotonicity #140]: #142
-#147 := [trans #143 #145]: #146
-#150 := [monotonicity #147]: #149
-#154 := [trans #150 #152]: #153
-#136 := [asserted]: #34
-[mp #136 #154]: false
-unsat
-b04995911f57617d06c9591edf349edadf325b74 60 0
-#2 := false
-decl f3 :: (-> int S2)
-decl f4 :: (-> S2 int)
-decl f5 :: S2
-#25 := f5
-#26 := (f4 f5)
-#135 := (f3 #26)
-#141 := (= f5 #135)
-#146 := (not #141)
-#13 := 0::int
-#27 := (- #26 0::int)
-#28 := (f3 #27)
-#29 := (= #28 f5)
-#30 := (not #29)
-#147 := (iff #30 #146)
-#144 := (iff #29 #141)
-#138 := (= #135 f5)
-#142 := (iff #138 #141)
-#143 := [rewrite]: #142
-#139 := (iff #29 #138)
-#136 := (= #28 #135)
-#133 := (= #27 #26)
-#134 := [rewrite]: #133
-#137 := [monotonicity #134]: #136
-#140 := [monotonicity #137]: #139
-#145 := [trans #140 #143]: #144
-#148 := [monotonicity #145]: #147
-#132 := [asserted]: #30
-#151 := [mp #132 #148]: #146
-#8 := (:var 0 S2)
-#9 := (f4 #8)
-#639 := (pattern #9)
-#10 := (f3 #9)
-#48 := (= #8 #10)
-#640 := (forall (vars (?v0 S2)) (:pat #639) #48)
-#51 := (forall (vars (?v0 S2)) #48)
-#641 := (iff #51 #640)
-#643 := (iff #640 #640)
-#644 := [rewrite]: #643
-#642 := [rewrite]: #641
-#645 := [trans #642 #644]: #641
-#163 := (~ #51 #51)
-#161 := (~ #48 #48)
-#162 := [refl]: #161
-#164 := [nnf-pos #162]: #163
-#11 := (= #10 #8)
-#12 := (forall (vars (?v0 S2)) #11)
-#52 := (iff #12 #51)
-#49 := (iff #11 #48)
-#50 := [rewrite]: #49
-#53 := [quant-intro #50]: #52
-#47 := [asserted]: #12
-#56 := [mp #47 #53]: #51
-#152 := [mp~ #56 #164]: #51
-#646 := [mp #152 #645]: #640
-#224 := (not #640)
-#310 := (or #224 #141)
-#311 := [quant-inst]: #310
-[unit-resolution #311 #646 #151]: false
-unsat
-b5b340366dfb8289e173cd594b95953e97e705ac 42 0
-#2 := false
-decl f3 :: (-> int S2)
-decl f4 :: (-> S2 int)
-decl f7 :: S2
-#29 := f7
-#30 := (f4 f7)
-decl f6 :: S2
-#27 := f6
-#28 := (f4 f6)
-decl f5 :: S2
-#25 := f5
-#26 := (f4 f5)
-#34 := (+ #26 #28)
-#35 := (+ #34 #30)
-#36 := (f3 #35)
-#31 := (+ #28 #30)
-#32 := (+ #26 #31)
-#33 := (f3 #32)
-#37 := (= #33 #36)
-#38 := (not #37)
-#157 := (iff #38 false)
-#1 := true
-#152 := (not true)
-#155 := (iff #152 false)
-#156 := [rewrite]: #155
-#153 := (iff #38 #152)
-#150 := (iff #37 true)
-#145 := (= #33 #33)
-#148 := (iff #145 true)
-#149 := [rewrite]: #148
-#146 := (iff #37 #145)
-#143 := (= #36 #33)
-#141 := (= #35 #32)
-#142 := [rewrite]: #141
-#144 := [monotonicity #142]: #143
-#147 := [monotonicity #144]: #146
-#151 := [trans #147 #149]: #150
-#154 := [monotonicity #151]: #153
-#158 := [trans #154 #156]: #157
-#140 := [asserted]: #38
-[mp #140 #158]: false
-unsat
-2a686ca258d75e408aba2310eab7bfde718856c5 179 0
-#2 := false
-decl f3 :: (-> int S2)
-decl f4 :: (-> S2 int)
-decl f6 :: S2
-#27 := f6
-#28 := (f4 f6)
-#138 := -1::int
-#139 := (* -1::int #28)
-decl f5 :: S2
-#25 := f5
-#26 := (f4 f5)
-#140 := (+ #26 #139)
-#143 := (f3 #140)
-#13 := 0::int
-#32 := (f3 0::int)
-#149 := (= #32 #143)
-#649 := (f4 #143)
-#597 := (f3 #649)
-#596 := (= #597 #143)
-#499 := (= #143 #597)
-#8 := (:var 0 S2)
-#9 := (f4 #8)
-#665 := (pattern #9)
-#10 := (f3 #9)
-#53 := (= #8 #10)
-#666 := (forall (vars (?v0 S2)) (:pat #665) #53)
-#56 := (forall (vars (?v0 S2)) #53)
-#667 := (iff #56 #666)
-#669 := (iff #666 #666)
-#670 := [rewrite]: #669
-#668 := [rewrite]: #667
-#671 := [trans #668 #670]: #667
-#192 := (~ #56 #56)
-#190 := (~ #53 #53)
-#191 := [refl]: #190
-#193 := [nnf-pos #191]: #192
-#11 := (= #10 #8)
-#12 := (forall (vars (?v0 S2)) #11)
-#57 := (iff #12 #56)
-#54 := (iff #11 #53)
-#55 := [rewrite]: #54
-#58 := [quant-intro #55]: #57
-#52 := [asserted]: #12
-#61 := [mp #52 #58]: #56
-#179 := [mp~ #61 #193]: #56
-#672 := [mp #179 #671]: #666
-#338 := (not #666)
-#502 := (or #338 #499)
-#503 := [quant-inst]: #502
-#501 := [unit-resolution #503 #672]: #499
-#600 := [symm #501]: #596
-#506 := (= #32 #597)
-#504 := (= 0::int #649)
-#622 := (= #649 0::int)
-#161 := (>= #140 0::int)
-#160 := (not #161)
-#154 := (not #149)
-#167 := (and #154 #160)
-#30 := (- #26 #28)
-#31 := (f3 #30)
-#33 := (= #31 #32)
-#34 := (not #33)
-#29 := (< #26 #28)
-#35 := (and #29 #34)
-#172 := (iff #35 #167)
-#157 := (and #29 #154)
-#170 := (iff #157 #167)
-#164 := (and #160 #154)
-#168 := (iff #164 #167)
-#169 := [rewrite]: #168
-#165 := (iff #157 #164)
-#162 := (iff #29 #160)
-#163 := [rewrite]: #162
-#166 := [monotonicity #163]: #165
-#171 := [trans #166 #169]: #170
-#158 := (iff #35 #157)
-#155 := (iff #34 #154)
-#152 := (iff #33 #149)
-#146 := (= #143 #32)
-#150 := (iff #146 #149)
-#151 := [rewrite]: #150
-#147 := (iff #33 #146)
-#144 := (= #31 #143)
-#141 := (= #30 #140)
-#142 := [rewrite]: #141
-#145 := [monotonicity #142]: #144
-#148 := [monotonicity #145]: #147
-#153 := [trans #148 #151]: #152
-#156 := [monotonicity #153]: #155
-#159 := [monotonicity #156]: #158
-#173 := [trans #159 #171]: #172
-#137 := [asserted]: #35
-#174 := [mp #137 #173]: #167
-#176 := [and-elim #174]: #160
-#14 := (:var 0 int)
-#16 := (f3 #14)
-#673 := (pattern #16)
-#78 := (>= #14 0::int)
-#17 := (f4 #16)
-#22 := (= #17 0::int)
-#126 := (or #22 #78)
-#680 := (forall (vars (?v0 int)) (:pat #673) #126)
-#131 := (forall (vars (?v0 int)) #126)
-#683 := (iff #131 #680)
-#681 := (iff #126 #126)
-#682 := [refl]: #681
-#684 := [quant-intro #682]: #683
-#182 := (~ #131 #131)
-#196 := (~ #126 #126)
-#197 := [refl]: #196
-#183 := [nnf-pos #197]: #182
-#21 := (< #14 0::int)
-#23 := (implies #21 #22)
-#24 := (forall (vars (?v0 int)) #23)
-#134 := (iff #24 #131)
-#97 := (= 0::int #17)
-#103 := (not #21)
-#104 := (or #103 #97)
-#109 := (forall (vars (?v0 int)) #104)
-#132 := (iff #109 #131)
-#129 := (iff #104 #126)
-#123 := (or #78 #22)
-#127 := (iff #123 #126)
-#128 := [rewrite]: #127
-#124 := (iff #104 #123)
-#121 := (iff #97 #22)
-#122 := [rewrite]: #121
-#119 := (iff #103 #78)
-#79 := (not #78)
-#114 := (not #79)
-#117 := (iff #114 #78)
-#118 := [rewrite]: #117
-#115 := (iff #103 #114)
-#112 := (iff #21 #79)
-#113 := [rewrite]: #112
-#116 := [monotonicity #113]: #115
-#120 := [trans #116 #118]: #119
-#125 := [monotonicity #120 #122]: #124
-#130 := [trans #125 #128]: #129
-#133 := [quant-intro #130]: #132
-#110 := (iff #24 #109)
-#107 := (iff #23 #104)
-#100 := (implies #21 #97)
-#105 := (iff #100 #104)
-#106 := [rewrite]: #105
-#101 := (iff #23 #100)
-#98 := (iff #22 #97)
-#99 := [rewrite]: #98
-#102 := [monotonicity #99]: #101
-#108 := [trans #102 #106]: #107
-#111 := [quant-intro #108]: #110
-#135 := [trans #111 #133]: #134
-#96 := [asserted]: #24
-#136 := [mp #96 #135]: #131
-#198 := [mp~ #136 #183]: #131
-#685 := [mp #198 #684]: #680
-#619 := (not #680)
-#625 := (or #619 #161 #622)
-#617 := (or #622 #161)
-#466 := (or #619 #617)
-#607 := (iff #466 #625)
-#618 := (or #161 #622)
-#468 := (or #619 #618)
-#612 := (iff #468 #625)
-#613 := [rewrite]: #612
-#610 := (iff #466 #468)
-#623 := (iff #617 #618)
-#624 := [rewrite]: #623
-#611 := [monotonicity #624]: #610
-#608 := [trans #611 #613]: #607
-#467 := [quant-inst]: #466
-#614 := [mp #467 #608]: #625
-#494 := [unit-resolution #614 #685 #176]: #622
-#505 := [symm #494]: #504
-#599 := [monotonicity #505]: #506
-#587 := [trans #599 #600]: #149
-#175 := [and-elim #174]: #154
-[unit-resolution #175 #587]: false
-unsat
-3c1f7d30ea379c9ce2207a011fc3d11958eb42f1 438 0
+1632348bdee81a166d57559522a36ec81b67e22e 438 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -11561,7 +11320,248 @@
 #404 := [unit-resolution #379 #434]: #485
 [unit-resolution #404 #396]: false
 unsat
-d2811f187a26b77cca78876fe4e7b2248df3c75e 321 0
+5608753e6b659a303b2db701801c7222764e7e28 60 0
+#2 := false
+decl f3 :: (-> int S2)
+decl f4 :: (-> S2 int)
+decl f5 :: S2
+#25 := f5
+#26 := (f4 f5)
+#135 := (f3 #26)
+#141 := (= f5 #135)
+#146 := (not #141)
+#13 := 0::int
+#27 := (- #26 0::int)
+#28 := (f3 #27)
+#29 := (= #28 f5)
+#30 := (not #29)
+#147 := (iff #30 #146)
+#144 := (iff #29 #141)
+#138 := (= #135 f5)
+#142 := (iff #138 #141)
+#143 := [rewrite]: #142
+#139 := (iff #29 #138)
+#136 := (= #28 #135)
+#133 := (= #27 #26)
+#134 := [rewrite]: #133
+#137 := [monotonicity #134]: #136
+#140 := [monotonicity #137]: #139
+#145 := [trans #140 #143]: #144
+#148 := [monotonicity #145]: #147
+#132 := [asserted]: #30
+#151 := [mp #132 #148]: #146
+#8 := (:var 0 S2)
+#9 := (f4 #8)
+#639 := (pattern #9)
+#10 := (f3 #9)
+#48 := (= #8 #10)
+#640 := (forall (vars (?v0 S2)) (:pat #639) #48)
+#51 := (forall (vars (?v0 S2)) #48)
+#641 := (iff #51 #640)
+#643 := (iff #640 #640)
+#644 := [rewrite]: #643
+#642 := [rewrite]: #641
+#645 := [trans #642 #644]: #641
+#163 := (~ #51 #51)
+#161 := (~ #48 #48)
+#162 := [refl]: #161
+#164 := [nnf-pos #162]: #163
+#11 := (= #10 #8)
+#12 := (forall (vars (?v0 S2)) #11)
+#52 := (iff #12 #51)
+#49 := (iff #11 #48)
+#50 := [rewrite]: #49
+#53 := [quant-intro #50]: #52
+#47 := [asserted]: #12
+#56 := [mp #47 #53]: #51
+#152 := [mp~ #56 #164]: #51
+#646 := [mp #152 #645]: #640
+#224 := (not #640)
+#310 := (or #224 #141)
+#311 := [quant-inst]: #310
+[unit-resolution #311 #646 #151]: false
+unsat
+c6004ce59328c5780acd8bd7e43d352cf78599e0 179 0
+#2 := false
+decl f3 :: (-> int S2)
+decl f4 :: (-> S2 int)
+decl f6 :: S2
+#27 := f6
+#28 := (f4 f6)
+#138 := -1::int
+#139 := (* -1::int #28)
+decl f5 :: S2
+#25 := f5
+#26 := (f4 f5)
+#140 := (+ #26 #139)
+#143 := (f3 #140)
+#13 := 0::int
+#32 := (f3 0::int)
+#149 := (= #32 #143)
+#649 := (f4 #143)
+#597 := (f3 #649)
+#596 := (= #597 #143)
+#499 := (= #143 #597)
+#8 := (:var 0 S2)
+#9 := (f4 #8)
+#665 := (pattern #9)
+#10 := (f3 #9)
+#53 := (= #8 #10)
+#666 := (forall (vars (?v0 S2)) (:pat #665) #53)
+#56 := (forall (vars (?v0 S2)) #53)
+#667 := (iff #56 #666)
+#669 := (iff #666 #666)
+#670 := [rewrite]: #669
+#668 := [rewrite]: #667
+#671 := [trans #668 #670]: #667
+#192 := (~ #56 #56)
+#190 := (~ #53 #53)
+#191 := [refl]: #190
+#193 := [nnf-pos #191]: #192
+#11 := (= #10 #8)
+#12 := (forall (vars (?v0 S2)) #11)
+#57 := (iff #12 #56)
+#54 := (iff #11 #53)
+#55 := [rewrite]: #54
+#58 := [quant-intro #55]: #57
+#52 := [asserted]: #12
+#61 := [mp #52 #58]: #56
+#179 := [mp~ #61 #193]: #56
+#672 := [mp #179 #671]: #666
+#338 := (not #666)
+#502 := (or #338 #499)
+#503 := [quant-inst]: #502
+#501 := [unit-resolution #503 #672]: #499
+#600 := [symm #501]: #596
+#506 := (= #32 #597)
+#504 := (= 0::int #649)
+#622 := (= #649 0::int)
+#161 := (>= #140 0::int)
+#160 := (not #161)
+#154 := (not #149)
+#167 := (and #154 #160)
+#30 := (- #26 #28)
+#31 := (f3 #30)
+#33 := (= #31 #32)
+#34 := (not #33)
+#29 := (< #26 #28)
+#35 := (and #29 #34)
+#172 := (iff #35 #167)
+#157 := (and #29 #154)
+#170 := (iff #157 #167)
+#164 := (and #160 #154)
+#168 := (iff #164 #167)
+#169 := [rewrite]: #168
+#165 := (iff #157 #164)
+#162 := (iff #29 #160)
+#163 := [rewrite]: #162
+#166 := [monotonicity #163]: #165
+#171 := [trans #166 #169]: #170
+#158 := (iff #35 #157)
+#155 := (iff #34 #154)
+#152 := (iff #33 #149)
+#146 := (= #143 #32)
+#150 := (iff #146 #149)
+#151 := [rewrite]: #150
+#147 := (iff #33 #146)
+#144 := (= #31 #143)
+#141 := (= #30 #140)
+#142 := [rewrite]: #141
+#145 := [monotonicity #142]: #144
+#148 := [monotonicity #145]: #147
+#153 := [trans #148 #151]: #152
+#156 := [monotonicity #153]: #155
+#159 := [monotonicity #156]: #158
+#173 := [trans #159 #171]: #172
+#137 := [asserted]: #35
+#174 := [mp #137 #173]: #167
+#176 := [and-elim #174]: #160
+#14 := (:var 0 int)
+#16 := (f3 #14)
+#673 := (pattern #16)
+#78 := (>= #14 0::int)
+#17 := (f4 #16)
+#22 := (= #17 0::int)
+#126 := (or #22 #78)
+#680 := (forall (vars (?v0 int)) (:pat #673) #126)
+#131 := (forall (vars (?v0 int)) #126)
+#683 := (iff #131 #680)
+#681 := (iff #126 #126)
+#682 := [refl]: #681
+#684 := [quant-intro #682]: #683
+#182 := (~ #131 #131)
+#196 := (~ #126 #126)
+#197 := [refl]: #196
+#183 := [nnf-pos #197]: #182
+#21 := (< #14 0::int)
+#23 := (implies #21 #22)
+#24 := (forall (vars (?v0 int)) #23)
+#134 := (iff #24 #131)
+#97 := (= 0::int #17)
+#103 := (not #21)
+#104 := (or #103 #97)
+#109 := (forall (vars (?v0 int)) #104)
+#132 := (iff #109 #131)
+#129 := (iff #104 #126)
+#123 := (or #78 #22)
+#127 := (iff #123 #126)
+#128 := [rewrite]: #127
+#124 := (iff #104 #123)
+#121 := (iff #97 #22)
+#122 := [rewrite]: #121
+#119 := (iff #103 #78)
+#79 := (not #78)
+#114 := (not #79)
+#117 := (iff #114 #78)
+#118 := [rewrite]: #117
+#115 := (iff #103 #114)
+#112 := (iff #21 #79)
+#113 := [rewrite]: #112
+#116 := [monotonicity #113]: #115
+#120 := [trans #116 #118]: #119
+#125 := [monotonicity #120 #122]: #124
+#130 := [trans #125 #128]: #129
+#133 := [quant-intro #130]: #132
+#110 := (iff #24 #109)
+#107 := (iff #23 #104)
+#100 := (implies #21 #97)
+#105 := (iff #100 #104)
+#106 := [rewrite]: #105
+#101 := (iff #23 #100)
+#98 := (iff #22 #97)
+#99 := [rewrite]: #98
+#102 := [monotonicity #99]: #101
+#108 := [trans #102 #106]: #107
+#111 := [quant-intro #108]: #110
+#135 := [trans #111 #133]: #134
+#96 := [asserted]: #24
+#136 := [mp #96 #135]: #131
+#198 := [mp~ #136 #183]: #131
+#685 := [mp #198 #684]: #680
+#619 := (not #680)
+#625 := (or #619 #161 #622)
+#617 := (or #622 #161)
+#466 := (or #619 #617)
+#607 := (iff #466 #625)
+#618 := (or #161 #622)
+#468 := (or #619 #618)
+#612 := (iff #468 #625)
+#613 := [rewrite]: #612
+#610 := (iff #466 #468)
+#623 := (iff #617 #618)
+#624 := [rewrite]: #623
+#611 := [monotonicity #624]: #610
+#608 := [trans #611 #613]: #607
+#467 := [quant-inst]: #466
+#614 := [mp #467 #608]: #625
+#494 := [unit-resolution #614 #685 #176]: #622
+#505 := [symm #494]: #504
+#599 := [monotonicity #505]: #506
+#587 := [trans #599 #600]: #149
+#175 := [and-elim #174]: #154
+[unit-resolution #175 #587]: false
+unsat
+fcfdc4289ad5f9140cb116c6f4c4919f2b4f4923 321 0
 #2 := false
 decl f3 :: (-> int S2)
 decl f4 :: (-> S2 int)
@@ -11883,7 +11883,7 @@
 #181 := [and-elim #183]: #157
 [unit-resolution #181 #478]: false
 unsat
-6750007dac6f87e186d233d8af85a2f566a05649 329 0
+68d29112e746194ea996aa3a623d8373cc08ac2a 329 0
 #2 := false
 decl f6 :: S2
 #27 := f6
@@ -12213,7 +12213,7 @@
 #500 := [trans #499 #542]: #188
 [unit-resolution #198 #500]: false
 unsat
-73fe8e8f8efc05a9592e80e471f1f73a8ea6b41e 33 0
+af3fc323e3a9c9867187efb63d27fdabc458b972 33 0
 #2 := false
 decl f3 :: (-> int S2)
 #13 := 0::int
@@ -12247,7 +12247,7 @@
 #133 := [asserted]: #31
 [mp #133 #150]: false
 unsat
-38a43c830e9f2f628495aa4330122f2c2da981cd 517 0
+afc7043a4955320d1d41ce87a7eed9f5e9408f88 517 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -12765,7 +12765,7 @@
 #282 := [unit-resolution #419 #286]: #319
 [unit-resolution #424 #282 #300]: false
 unsat
-b8b27e6325657430dd1af6ebdf5787c6efe3284f 33 0
+e2cc58543dd5ad16fc6af5d366bfe8cd7b5b7c23 33 0
 #2 := false
 decl f3 :: (-> int S2)
 #13 := 0::int
@@ -12799,7 +12799,7 @@
 #133 := [asserted]: #31
 [mp #133 #150]: false
 unsat
-21ee0df98aa191c83f2b436328c15786df798f7a 60 0
+bdaf29198446643e2cae690c3f0cac29f38941fc 60 0
 #2 := false
 decl f3 :: (-> int S2)
 decl f4 :: (-> S2 int)
@@ -12860,7 +12860,7 @@
 #311 := [quant-inst]: #310
 [unit-resolution #311 #646 #152]: false
 unsat
-f2bd5534623dcef31ae5e3e9a7322f435fd34452 60 0
+2bc16a4276212362a5a76abffcf9b2b6da841754 60 0
 #2 := false
 decl f3 :: (-> int S2)
 decl f4 :: (-> S2 int)
@@ -12921,7 +12921,7 @@
 #311 := [quant-inst]: #310
 [unit-resolution #311 #646 #152]: false
 unsat
-563a522b2ffcab4b8b92a3674b4a7e71c6c68e79 35 0
+2b450a9ee4af266a70157af65786bf2e05023359 35 0
 #2 := false
 decl f3 :: (-> int S2)
 #25 := 3::int
@@ -12957,7 +12957,7 @@
 #135 := [asserted]: #33
 [mp #135 #153]: false
 unsat
-2f498bc61394e79ef8b8e82a20d5e6a57d031207 250 0
+f58726aba38b36bcc4264b070f4c61db1533ea41 250 0
 #2 := false
 decl f5 :: (-> int S2)
 #11 := 0::int
@@ -13208,273 +13208,7 @@
 #269 := [asserted]: #57
 [unit-resolution #269 #746]: false
 unsat
-344dd4c43f015bcb0632176ba256e3bea4a444a5 265 0
-#2 := false
-decl f5 :: (-> int S2)
-#11 := 0::int
-#57 := (f5 0::int)
-decl f3 :: (-> int int int)
-decl f6 :: (-> S2 int)
-decl f7 :: S2
-#53 := f7
-#54 := (f6 f7)
-#55 := (f3 #54 0::int)
-#56 := (f5 #55)
-#58 := (= #56 #57)
-#840 := (= #55 0::int)
-#9 := (:var 0 int)
-#8 := (:var 1 int)
-#10 := (f3 #8 #9)
-#845 := (pattern #10)
-#83 := -1::int
-#87 := (* -1::int #9)
-#84 := (* -1::int #8)
-#90 := (div #84 #87)
-#347 := (* -1::int #90)
-#348 := (+ #10 #347)
-#349 := (= #348 0::int)
-#21 := (div #8 #9)
-#344 := (* -1::int #21)
-#345 := (+ #10 #344)
-#346 := (= #345 0::int)
-#109 := (<= #9 0::int)
-#105 := (<= #8 0::int)
-#302 := (or #105 #109)
-#303 := (not #302)
-#116 := (>= #8 0::int)
-#285 := (or #109 #116)
-#286 := (not #285)
-#309 := (or #286 #303)
-#350 := (ite #309 #346 #349)
-#343 := (= #10 0::int)
-#13 := (= #9 0::int)
-#12 := (= #8 0::int)
-#14 := (or #12 #13)
-#351 := (ite #14 #343 #350)
-#846 := (forall (vars (?v0 int) (?v1 int)) (:pat #845) #351)
-#354 := (forall (vars (?v0 int) (?v1 int)) #351)
-#849 := (iff #354 #846)
-#847 := (iff #351 #351)
-#848 := [refl]: #847
-#850 := [quant-intro #848]: #849
-#314 := (ite #309 #21 #90)
-#317 := (ite #14 0::int #314)
-#320 := (= #10 #317)
-#323 := (forall (vars (?v0 int) (?v1 int)) #320)
-#355 := (iff #323 #354)
-#352 := (iff #320 #351)
-#353 := [rewrite]: #352
-#356 := [quant-intro #353]: #355
-#117 := (not #116)
-#110 := (not #109)
-#120 := (and #110 #117)
-#106 := (not #105)
-#113 := (and #106 #110)
-#123 := (or #113 #120)
-#126 := (ite #123 #21 #90)
-#129 := (ite #14 0::int #126)
-#132 := (= #10 #129)
-#135 := (forall (vars (?v0 int) (?v1 int)) #132)
-#324 := (iff #135 #323)
-#321 := (iff #132 #320)
-#318 := (= #129 #317)
-#315 := (= #126 #314)
-#312 := (iff #123 #309)
-#306 := (or #303 #286)
-#310 := (iff #306 #309)
-#311 := [rewrite]: #310
-#307 := (iff #123 #306)
-#304 := (iff #120 #286)
-#305 := [rewrite]: #304
-#283 := (iff #113 #303)
-#284 := [rewrite]: #283
-#308 := [monotonicity #284 #305]: #307
-#313 := [trans #308 #311]: #312
-#316 := [monotonicity #313]: #315
-#319 := [monotonicity #316]: #318
-#322 := [monotonicity #319]: #321
-#325 := [quant-intro #322]: #324
-#289 := (~ #135 #135)
-#287 := (~ #132 #132)
-#288 := [refl]: #287
-#290 := [nnf-pos #288]: #289
-#23 := (- #9)
-#22 := (- #8)
-#24 := (div #22 #23)
-#16 := (< 0::int #9)
-#18 := (< #8 0::int)
-#19 := (and #18 #16)
-#15 := (< 0::int #8)
-#17 := (and #15 #16)
-#20 := (or #17 #19)
-#25 := (ite #20 #21 #24)
-#26 := (ite #14 0::int #25)
-#27 := (= #10 #26)
-#28 := (forall (vars (?v0 int) (?v1 int)) #27)
-#138 := (iff #28 #135)
-#77 := (and #16 #18)
-#80 := (or #17 #77)
-#93 := (ite #80 #21 #90)
-#96 := (ite #14 0::int #93)
-#99 := (= #10 #96)
-#102 := (forall (vars (?v0 int) (?v1 int)) #99)
-#136 := (iff #102 #135)
-#133 := (iff #99 #132)
-#130 := (= #96 #129)
-#127 := (= #93 #126)
-#124 := (iff #80 #123)
-#121 := (iff #77 #120)
-#118 := (iff #18 #117)
-#119 := [rewrite]: #118
-#111 := (iff #16 #110)
-#112 := [rewrite]: #111
-#122 := [monotonicity #112 #119]: #121
-#114 := (iff #17 #113)
-#107 := (iff #15 #106)
-#108 := [rewrite]: #107
-#115 := [monotonicity #108 #112]: #114
-#125 := [monotonicity #115 #122]: #124
-#128 := [monotonicity #125]: #127
-#131 := [monotonicity #128]: #130
-#134 := [monotonicity #131]: #133
-#137 := [quant-intro #134]: #136
-#103 := (iff #28 #102)
-#100 := (iff #27 #99)
-#97 := (= #26 #96)
-#94 := (= #25 #93)
-#91 := (= #24 #90)
-#88 := (= #23 #87)
-#89 := [rewrite]: #88
-#85 := (= #22 #84)
-#86 := [rewrite]: #85
-#92 := [monotonicity #86 #89]: #91
-#81 := (iff #20 #80)
-#78 := (iff #19 #77)
-#79 := [rewrite]: #78
-#82 := [monotonicity #79]: #81
-#95 := [monotonicity #82 #92]: #94
-#98 := [monotonicity #95]: #97
-#101 := [monotonicity #98]: #100
-#104 := [quant-intro #101]: #103
-#139 := [trans #104 #137]: #138
-#76 := [asserted]: #28
-#140 := [mp #76 #139]: #135
-#274 := [mp~ #140 #290]: #135
-#326 := [mp #274 #325]: #323
-#357 := [mp #326 #356]: #354
-#851 := [mp #357 #850]: #846
-#788 := (not #846)
-#794 := (or #788 #840)
-#431 := (* -1::int 0::int)
-#516 := (* -1::int #54)
-#517 := (div #516 #431)
-#518 := (* -1::int #517)
-#509 := (+ #55 #518)
-#520 := (= #509 0::int)
-#521 := (div #54 0::int)
-#449 := (* -1::int #521)
-#522 := (+ #55 #449)
-#519 := (= #522 0::int)
-#523 := (<= 0::int 0::int)
-#502 := (<= #54 0::int)
-#837 := (or #502 #523)
-#839 := (not #837)
-#496 := (>= #54 0::int)
-#626 := (or #523 #496)
-#833 := (not #626)
-#507 := (or #833 #839)
-#508 := (ite #507 #519 #520)
-#841 := (= 0::int 0::int)
-#842 := (= #54 0::int)
-#843 := (or #842 #841)
-#838 := (ite #843 #840 #508)
-#795 := (or #788 #838)
-#796 := (iff #795 #794)
-#627 := (iff #794 #794)
-#628 := [rewrite]: #627
-#793 := (iff #838 #840)
-#529 := (div #516 0::int)
-#809 := (* -1::int #529)
-#810 := (+ #55 #809)
-#800 := (= #810 0::int)
-#1 := true
-#647 := (ite true #840 #800)
-#791 := (iff #647 #840)
-#792 := [rewrite]: #791
-#648 := (iff #838 #647)
-#805 := (iff #508 #800)
-#797 := (ite false #519 #800)
-#804 := (iff #797 #800)
-#799 := [rewrite]: #804
-#798 := (iff #508 #797)
-#801 := (iff #520 #800)
-#807 := (= #509 #810)
-#524 := (= #518 #809)
-#530 := (= #517 #529)
-#527 := (= #431 0::int)
-#528 := [rewrite]: #527
-#808 := [monotonicity #528]: #530
-#806 := [monotonicity #808]: #524
-#811 := [monotonicity #806]: #807
-#802 := [monotonicity #811]: #801
-#813 := (iff #507 false)
-#815 := (or false false)
-#812 := (iff #815 false)
-#816 := [rewrite]: #812
-#537 := (iff #507 #815)
-#437 := (iff #839 false)
-#821 := (not true)
-#828 := (iff #821 false)
-#830 := [rewrite]: #828
-#543 := (iff #839 #821)
-#541 := (iff #837 true)
-#831 := (or #502 true)
-#818 := (iff #831 true)
-#819 := [rewrite]: #818
-#829 := (iff #837 #831)
-#483 := (iff #523 true)
-#484 := [rewrite]: #483
-#832 := [monotonicity #484]: #829
-#542 := [trans #832 #819]: #541
-#544 := [monotonicity #542]: #543
-#814 := [trans #544 #830]: #437
-#470 := (iff #833 false)
-#827 := (iff #833 #821)
-#825 := (iff #626 true)
-#485 := (or true #496)
-#823 := (iff #485 true)
-#824 := [rewrite]: #823
-#486 := (iff #626 #485)
-#822 := [monotonicity #484]: #486
-#826 := [trans #822 #824]: #825
-#465 := [monotonicity #826]: #827
-#471 := [trans #465 #830]: #470
-#538 := [monotonicity #471 #814]: #537
-#817 := [trans #538 #816]: #813
-#803 := [monotonicity #817 #802]: #798
-#646 := [trans #803 #799]: #805
-#479 := (iff #843 true)
-#494 := (or #842 true)
-#495 := (iff #494 true)
-#836 := [rewrite]: #495
-#499 := (iff #843 #494)
-#844 := (iff #841 true)
-#834 := [rewrite]: #844
-#835 := [monotonicity #834]: #499
-#820 := [trans #835 #836]: #479
-#790 := [monotonicity #820 #646]: #648
-#787 := [trans #790 #792]: #793
-#625 := [monotonicity #787]: #796
-#781 := [trans #625 #628]: #796
-#789 := [quant-inst]: #795
-#782 := [mp #789 #781]: #794
-#737 := [unit-resolution #782 #851]: #840
-#738 := [monotonicity #737]: #58
-#59 := (not #58)
-#271 := [asserted]: #59
-[unit-resolution #271 #738]: false
-unsat
-548d39bc73378ffff45c17ea9af834838e4f2aed 274 0
+f9ec262ae3b89f82ea2dac0232937218e79cd135 274 0
 #2 := false
 decl f5 :: (-> int S2)
 #11 := 0::int
@@ -13749,7 +13483,273 @@
 #269 := [asserted]: #57
 [unit-resolution #269 #742]: false
 unsat
-426e56a2fa6cae689a233b52c380ff3e1f4c5d0f 287 0
+2445ca30fa757c71a9c6aa886c0159c1fde53406 265 0
+#2 := false
+decl f5 :: (-> int S2)
+#11 := 0::int
+#57 := (f5 0::int)
+decl f3 :: (-> int int int)
+decl f6 :: (-> S2 int)
+decl f7 :: S2
+#53 := f7
+#54 := (f6 f7)
+#55 := (f3 #54 0::int)
+#56 := (f5 #55)
+#58 := (= #56 #57)
+#840 := (= #55 0::int)
+#9 := (:var 0 int)
+#8 := (:var 1 int)
+#10 := (f3 #8 #9)
+#845 := (pattern #10)
+#83 := -1::int
+#87 := (* -1::int #9)
+#84 := (* -1::int #8)
+#90 := (div #84 #87)
+#347 := (* -1::int #90)
+#348 := (+ #10 #347)
+#349 := (= #348 0::int)
+#21 := (div #8 #9)
+#344 := (* -1::int #21)
+#345 := (+ #10 #344)
+#346 := (= #345 0::int)
+#109 := (<= #9 0::int)
+#105 := (<= #8 0::int)
+#302 := (or #105 #109)
+#303 := (not #302)
+#116 := (>= #8 0::int)
+#285 := (or #109 #116)
+#286 := (not #285)
+#309 := (or #286 #303)
+#350 := (ite #309 #346 #349)
+#343 := (= #10 0::int)
+#13 := (= #9 0::int)
+#12 := (= #8 0::int)
+#14 := (or #12 #13)
+#351 := (ite #14 #343 #350)
+#846 := (forall (vars (?v0 int) (?v1 int)) (:pat #845) #351)
+#354 := (forall (vars (?v0 int) (?v1 int)) #351)
+#849 := (iff #354 #846)
+#847 := (iff #351 #351)
+#848 := [refl]: #847
+#850 := [quant-intro #848]: #849
+#314 := (ite #309 #21 #90)
+#317 := (ite #14 0::int #314)
+#320 := (= #10 #317)
+#323 := (forall (vars (?v0 int) (?v1 int)) #320)
+#355 := (iff #323 #354)
+#352 := (iff #320 #351)
+#353 := [rewrite]: #352
+#356 := [quant-intro #353]: #355
+#117 := (not #116)
+#110 := (not #109)
+#120 := (and #110 #117)
+#106 := (not #105)
+#113 := (and #106 #110)
+#123 := (or #113 #120)
+#126 := (ite #123 #21 #90)
+#129 := (ite #14 0::int #126)
+#132 := (= #10 #129)
+#135 := (forall (vars (?v0 int) (?v1 int)) #132)
+#324 := (iff #135 #323)
+#321 := (iff #132 #320)
+#318 := (= #129 #317)
+#315 := (= #126 #314)
+#312 := (iff #123 #309)
+#306 := (or #303 #286)
+#310 := (iff #306 #309)
+#311 := [rewrite]: #310
+#307 := (iff #123 #306)
+#304 := (iff #120 #286)
+#305 := [rewrite]: #304
+#283 := (iff #113 #303)
+#284 := [rewrite]: #283
+#308 := [monotonicity #284 #305]: #307
+#313 := [trans #308 #311]: #312
+#316 := [monotonicity #313]: #315
+#319 := [monotonicity #316]: #318
+#322 := [monotonicity #319]: #321
+#325 := [quant-intro #322]: #324
+#289 := (~ #135 #135)
+#287 := (~ #132 #132)
+#288 := [refl]: #287
+#290 := [nnf-pos #288]: #289
+#23 := (- #9)
+#22 := (- #8)
+#24 := (div #22 #23)
+#16 := (< 0::int #9)
+#18 := (< #8 0::int)
+#19 := (and #18 #16)
+#15 := (< 0::int #8)
+#17 := (and #15 #16)
+#20 := (or #17 #19)
+#25 := (ite #20 #21 #24)
+#26 := (ite #14 0::int #25)
+#27 := (= #10 #26)
+#28 := (forall (vars (?v0 int) (?v1 int)) #27)
+#138 := (iff #28 #135)
+#77 := (and #16 #18)
+#80 := (or #17 #77)
+#93 := (ite #80 #21 #90)
+#96 := (ite #14 0::int #93)
+#99 := (= #10 #96)
+#102 := (forall (vars (?v0 int) (?v1 int)) #99)
+#136 := (iff #102 #135)
+#133 := (iff #99 #132)
+#130 := (= #96 #129)
+#127 := (= #93 #126)
+#124 := (iff #80 #123)
+#121 := (iff #77 #120)
+#118 := (iff #18 #117)
+#119 := [rewrite]: #118
+#111 := (iff #16 #110)
+#112 := [rewrite]: #111
+#122 := [monotonicity #112 #119]: #121
+#114 := (iff #17 #113)
+#107 := (iff #15 #106)
+#108 := [rewrite]: #107
+#115 := [monotonicity #108 #112]: #114
+#125 := [monotonicity #115 #122]: #124
+#128 := [monotonicity #125]: #127
+#131 := [monotonicity #128]: #130
+#134 := [monotonicity #131]: #133
+#137 := [quant-intro #134]: #136
+#103 := (iff #28 #102)
+#100 := (iff #27 #99)
+#97 := (= #26 #96)
+#94 := (= #25 #93)
+#91 := (= #24 #90)
+#88 := (= #23 #87)
+#89 := [rewrite]: #88
+#85 := (= #22 #84)
+#86 := [rewrite]: #85
+#92 := [monotonicity #86 #89]: #91
+#81 := (iff #20 #80)
+#78 := (iff #19 #77)
+#79 := [rewrite]: #78
+#82 := [monotonicity #79]: #81
+#95 := [monotonicity #82 #92]: #94
+#98 := [monotonicity #95]: #97
+#101 := [monotonicity #98]: #100
+#104 := [quant-intro #101]: #103
+#139 := [trans #104 #137]: #138
+#76 := [asserted]: #28
+#140 := [mp #76 #139]: #135
+#274 := [mp~ #140 #290]: #135
+#326 := [mp #274 #325]: #323
+#357 := [mp #326 #356]: #354
+#851 := [mp #357 #850]: #846
+#788 := (not #846)
+#794 := (or #788 #840)
+#431 := (* -1::int 0::int)
+#516 := (* -1::int #54)
+#517 := (div #516 #431)
+#518 := (* -1::int #517)
+#509 := (+ #55 #518)
+#520 := (= #509 0::int)
+#521 := (div #54 0::int)
+#449 := (* -1::int #521)
+#522 := (+ #55 #449)
+#519 := (= #522 0::int)
+#523 := (<= 0::int 0::int)
+#502 := (<= #54 0::int)
+#837 := (or #502 #523)
+#839 := (not #837)
+#496 := (>= #54 0::int)
+#626 := (or #523 #496)
+#833 := (not #626)
+#507 := (or #833 #839)
+#508 := (ite #507 #519 #520)
+#841 := (= 0::int 0::int)
+#842 := (= #54 0::int)
+#843 := (or #842 #841)
+#838 := (ite #843 #840 #508)
+#795 := (or #788 #838)
+#796 := (iff #795 #794)
+#627 := (iff #794 #794)
+#628 := [rewrite]: #627
+#793 := (iff #838 #840)
+#529 := (div #516 0::int)
+#809 := (* -1::int #529)
+#810 := (+ #55 #809)
+#800 := (= #810 0::int)
+#1 := true
+#647 := (ite true #840 #800)
+#791 := (iff #647 #840)
+#792 := [rewrite]: #791
+#648 := (iff #838 #647)
+#805 := (iff #508 #800)
+#797 := (ite false #519 #800)
+#804 := (iff #797 #800)
+#799 := [rewrite]: #804
+#798 := (iff #508 #797)
+#801 := (iff #520 #800)
+#807 := (= #509 #810)
+#524 := (= #518 #809)
+#530 := (= #517 #529)
+#527 := (= #431 0::int)
+#528 := [rewrite]: #527
+#808 := [monotonicity #528]: #530
+#806 := [monotonicity #808]: #524
+#811 := [monotonicity #806]: #807
+#802 := [monotonicity #811]: #801
+#813 := (iff #507 false)
+#815 := (or false false)
+#812 := (iff #815 false)
+#816 := [rewrite]: #812
+#537 := (iff #507 #815)
+#437 := (iff #839 false)
+#821 := (not true)
+#828 := (iff #821 false)
+#830 := [rewrite]: #828
+#543 := (iff #839 #821)
+#541 := (iff #837 true)
+#831 := (or #502 true)
+#818 := (iff #831 true)
+#819 := [rewrite]: #818
+#829 := (iff #837 #831)
+#483 := (iff #523 true)
+#484 := [rewrite]: #483
+#832 := [monotonicity #484]: #829
+#542 := [trans #832 #819]: #541
+#544 := [monotonicity #542]: #543
+#814 := [trans #544 #830]: #437
+#470 := (iff #833 false)
+#827 := (iff #833 #821)
+#825 := (iff #626 true)
+#485 := (or true #496)
+#823 := (iff #485 true)
+#824 := [rewrite]: #823
+#486 := (iff #626 #485)
+#822 := [monotonicity #484]: #486
+#826 := [trans #822 #824]: #825
+#465 := [monotonicity #826]: #827
+#471 := [trans #465 #830]: #470
+#538 := [monotonicity #471 #814]: #537
+#817 := [trans #538 #816]: #813
+#803 := [monotonicity #817 #802]: #798
+#646 := [trans #803 #799]: #805
+#479 := (iff #843 true)
+#494 := (or #842 true)
+#495 := (iff #494 true)
+#836 := [rewrite]: #495
+#499 := (iff #843 #494)
+#844 := (iff #841 true)
+#834 := [rewrite]: #844
+#835 := [monotonicity #834]: #499
+#820 := [trans #835 #836]: #479
+#790 := [monotonicity #820 #646]: #648
+#787 := [trans #790 #792]: #793
+#625 := [monotonicity #787]: #796
+#781 := [trans #625 #628]: #796
+#789 := [quant-inst]: #795
+#782 := [mp #789 #781]: #794
+#737 := [unit-resolution #782 #851]: #840
+#738 := [monotonicity #737]: #58
+#59 := (not #58)
+#271 := [asserted]: #59
+[unit-resolution #271 #738]: false
+unsat
+7a16e7d1cff95b977a46175f34e2f58dc17b201b 287 0
 #2 := false
 decl f5 :: (-> int S2)
 #11 := 0::int
@@ -14037,7 +14037,7 @@
 #270 := [asserted]: #58
 [unit-resolution #270 #691]: false
 unsat
-2a856348a2d0d12d43659d3f8fbd60f2f395959a 321 0
+3fde1aa3674893464f069812a19859471255da8e 321 0
 #2 := false
 decl f5 :: (-> int S2)
 decl f4 :: (-> int int int)
@@ -14359,7 +14359,7 @@
 #279 := [mp #270 #276]: #274
 [unit-resolution #279 #757]: false
 unsat
-f595f2976198bb59087cfc3afdc24567f743886b 287 0
+c6bc1ae49d3543060aab7bd42065cc7be0e98df3 287 0
 #2 := false
 decl f5 :: (-> int S2)
 #53 := 1::int
@@ -14647,306 +14647,7 @@
 #270 := [asserted]: #58
 [unit-resolution #270 #692]: false
 unsat
-69a73700cfd90edae90cc37e225595659ec32fc1 298 0
-#2 := false
-decl f5 :: (-> int S2)
-#53 := 3::int
-#57 := (f5 3::int)
-decl f3 :: (-> int int int)
-#54 := 1::int
-#55 := (f3 3::int 1::int)
-#56 := (f5 #55)
-#58 := (= #56 #57)
-#790 := (= #55 3::int)
-#9 := (:var 0 int)
-#8 := (:var 1 int)
-#10 := (f3 #8 #9)
-#844 := (pattern #10)
-#11 := 0::int
-#83 := -1::int
-#87 := (* -1::int #9)
-#84 := (* -1::int #8)
-#90 := (div #84 #87)
-#347 := (* -1::int #90)
-#348 := (+ #10 #347)
-#349 := (= #348 0::int)
-#21 := (div #8 #9)
-#344 := (* -1::int #21)
-#345 := (+ #10 #344)
-#346 := (= #345 0::int)
-#109 := (<= #9 0::int)
-#105 := (<= #8 0::int)
-#302 := (or #105 #109)
-#303 := (not #302)
-#116 := (>= #8 0::int)
-#285 := (or #109 #116)
-#286 := (not #285)
-#309 := (or #286 #303)
-#350 := (ite #309 #346 #349)
-#343 := (= #10 0::int)
-#13 := (= #9 0::int)
-#12 := (= #8 0::int)
-#14 := (or #12 #13)
-#351 := (ite #14 #343 #350)
-#845 := (forall (vars (?v0 int) (?v1 int)) (:pat #844) #351)
-#354 := (forall (vars (?v0 int) (?v1 int)) #351)
-#848 := (iff #354 #845)
-#846 := (iff #351 #351)
-#847 := [refl]: #846
-#849 := [quant-intro #847]: #848
-#314 := (ite #309 #21 #90)
-#317 := (ite #14 0::int #314)
-#320 := (= #10 #317)
-#323 := (forall (vars (?v0 int) (?v1 int)) #320)
-#355 := (iff #323 #354)
-#352 := (iff #320 #351)
-#353 := [rewrite]: #352
-#356 := [quant-intro #353]: #355
-#117 := (not #116)
-#110 := (not #109)
-#120 := (and #110 #117)
-#106 := (not #105)
-#113 := (and #106 #110)
-#123 := (or #113 #120)
-#126 := (ite #123 #21 #90)
-#129 := (ite #14 0::int #126)
-#132 := (= #10 #129)
-#135 := (forall (vars (?v0 int) (?v1 int)) #132)
-#324 := (iff #135 #323)
-#321 := (iff #132 #320)
-#318 := (= #129 #317)
-#315 := (= #126 #314)
-#312 := (iff #123 #309)
-#306 := (or #303 #286)
-#310 := (iff #306 #309)
-#311 := [rewrite]: #310
-#307 := (iff #123 #306)
-#304 := (iff #120 #286)
-#305 := [rewrite]: #304
-#283 := (iff #113 #303)
-#284 := [rewrite]: #283
-#308 := [monotonicity #284 #305]: #307
-#313 := [trans #308 #311]: #312
-#316 := [monotonicity #313]: #315
-#319 := [monotonicity #316]: #318
-#322 := [monotonicity #319]: #321
-#325 := [quant-intro #322]: #324
-#289 := (~ #135 #135)
-#287 := (~ #132 #132)
-#288 := [refl]: #287
-#290 := [nnf-pos #288]: #289
-#23 := (- #9)
-#22 := (- #8)
-#24 := (div #22 #23)
-#16 := (< 0::int #9)
-#18 := (< #8 0::int)
-#19 := (and #18 #16)
-#15 := (< 0::int #8)
-#17 := (and #15 #16)
-#20 := (or #17 #19)
-#25 := (ite #20 #21 #24)
-#26 := (ite #14 0::int #25)
-#27 := (= #10 #26)
-#28 := (forall (vars (?v0 int) (?v1 int)) #27)
-#138 := (iff #28 #135)
-#77 := (and #16 #18)
-#80 := (or #17 #77)
-#93 := (ite #80 #21 #90)
-#96 := (ite #14 0::int #93)
-#99 := (= #10 #96)
-#102 := (forall (vars (?v0 int) (?v1 int)) #99)
-#136 := (iff #102 #135)
-#133 := (iff #99 #132)
-#130 := (= #96 #129)
-#127 := (= #93 #126)
-#124 := (iff #80 #123)
-#121 := (iff #77 #120)
-#118 := (iff #18 #117)
-#119 := [rewrite]: #118
-#111 := (iff #16 #110)
-#112 := [rewrite]: #111
-#122 := [monotonicity #112 #119]: #121
-#114 := (iff #17 #113)
-#107 := (iff #15 #106)
-#108 := [rewrite]: #107
-#115 := [monotonicity #108 #112]: #114
-#125 := [monotonicity #115 #122]: #124
-#128 := [monotonicity #125]: #127
-#131 := [monotonicity #128]: #130
-#134 := [monotonicity #131]: #133
-#137 := [quant-intro #134]: #136
-#103 := (iff #28 #102)
-#100 := (iff #27 #99)
-#97 := (= #26 #96)
-#94 := (= #25 #93)
-#91 := (= #24 #90)
-#88 := (= #23 #87)
-#89 := [rewrite]: #88
-#85 := (= #22 #84)
-#86 := [rewrite]: #85
-#92 := [monotonicity #86 #89]: #91
-#81 := (iff #20 #80)
-#78 := (iff #19 #77)
-#79 := [rewrite]: #78
-#82 := [monotonicity #79]: #81
-#95 := [monotonicity #82 #92]: #94
-#98 := [monotonicity #95]: #97
-#101 := [monotonicity #98]: #100
-#104 := [quant-intro #101]: #103
-#139 := [trans #104 #137]: #138
-#76 := [asserted]: #28
-#140 := [mp #76 #139]: #135
-#274 := [mp~ #140 #290]: #135
-#326 := [mp #274 #325]: #323
-#357 := [mp #326 #356]: #354
-#850 := [mp #357 #849]: #845
-#766 := (not #845)
-#768 := (or #766 #790)
-#431 := (* -1::int 1::int)
-#515 := (* -1::int 3::int)
-#516 := (div #515 #431)
-#517 := (* -1::int #516)
-#508 := (+ #55 #517)
-#519 := (= #508 0::int)
-#520 := (div 3::int 1::int)
-#521 := (* -1::int #520)
-#518 := (+ #55 #521)
-#522 := (= #518 0::int)
-#501 := (<= 1::int 0::int)
-#836 := (<= 3::int 0::int)
-#838 := (or #836 #501)
-#495 := (not #838)
-#625 := (>= 3::int 0::int)
-#832 := (or #501 #625)
-#506 := (not #832)
-#507 := (or #506 #495)
-#839 := (ite #507 #522 #519)
-#840 := (= #55 0::int)
-#841 := (= 1::int 0::int)
-#842 := (= 3::int 0::int)
-#837 := (or #842 #841)
-#843 := (ite #837 #840 #839)
-#760 := (or #766 #843)
-#759 := (iff #760 #768)
-#770 := (iff #768 #768)
-#771 := [rewrite]: #770
-#775 := (iff #843 #790)
-#682 := (ite false #840 #790)
-#685 := (iff #682 #790)
-#778 := [rewrite]: #685
-#683 := (iff #843 #682)
-#673 := (iff #839 #790)
-#1 := true
-#777 := (ite true #790 #790)
-#679 := (iff #777 #790)
-#680 := [rewrite]: #679
-#662 := (iff #839 #777)
-#773 := (iff #519 #790)
-#809 := -3::int
-#802 := (+ -3::int #55)
-#646 := (= #802 0::int)
-#791 := (iff #646 #790)
-#792 := [rewrite]: #791
-#776 := (iff #519 #646)
-#669 := (= #508 #802)
-#801 := (+ #55 -3::int)
-#803 := (= #801 #802)
-#798 := [rewrite]: #803
-#667 := (= #508 #801)
-#782 := (= #517 -3::int)
-#806 := (= #515 -3::int)
-#810 := [rewrite]: #806
-#783 := (= #517 #515)
-#780 := (= #516 3::int)
-#788 := (div -3::int -1::int)
-#626 := (= #788 3::int)
-#627 := [rewrite]: #626
-#795 := (= #516 #788)
-#793 := (= #431 -1::int)
-#794 := [rewrite]: #793
-#624 := [monotonicity #810 #794]: #795
-#781 := [trans #624 #627]: #780
-#784 := [monotonicity #781]: #783
-#785 := [trans #784 #810]: #782
-#668 := [monotonicity #785]: #667
-#628 := [trans #668 #798]: #669
-#678 := [monotonicity #628]: #776
-#774 := [trans #678 #792]: #773
-#786 := (iff #522 #790)
-#647 := (iff #522 #646)
-#804 := (= #518 #802)
-#796 := (= #518 #801)
-#799 := (= #521 -3::int)
-#523 := (= #521 #515)
-#807 := (= #520 3::int)
-#808 := [rewrite]: #807
-#805 := [monotonicity #808]: #523
-#800 := [trans #805 #810]: #799
-#797 := [monotonicity #800]: #796
-#645 := [trans #797 #798]: #804
-#789 := [monotonicity #645]: #647
-#787 := [trans #789 #792]: #786
-#528 := (iff #507 true)
-#824 := (or false true)
-#826 := (iff #824 true)
-#464 := [rewrite]: #826
-#526 := (iff #507 #824)
-#812 := (iff #495 true)
-#814 := (not false)
-#811 := (iff #814 true)
-#815 := [rewrite]: #811
-#536 := (iff #495 #814)
-#437 := (iff #838 false)
-#494 := (or false false)
-#819 := (iff #494 false)
-#482 := [rewrite]: #819
-#542 := (iff #838 #494)
-#485 := (iff #501 false)
-#821 := [rewrite]: #485
-#540 := (iff #836 false)
-#541 := [rewrite]: #540
-#543 := [monotonicity #541 #821]: #542
-#813 := [trans #543 #482]: #437
-#537 := [monotonicity #813]: #536
-#816 := [trans #537 #815]: #812
-#817 := (iff #506 false)
-#469 := (not true)
-#828 := (iff #469 false)
-#831 := [rewrite]: #828
-#470 := (iff #506 #469)
-#827 := (iff #832 true)
-#825 := (iff #832 #824)
-#822 := (iff #625 true)
-#823 := [rewrite]: #822
-#820 := [monotonicity #821 #823]: #825
-#829 := [trans #820 #464]: #827
-#830 := [monotonicity #829]: #470
-#818 := [trans #830 #831]: #817
-#527 := [monotonicity #818 #816]: #526
-#529 := [trans #527 #464]: #528
-#677 := [monotonicity #529 #787 #774]: #662
-#681 := [trans #677 #680]: #673
-#483 := (iff #837 false)
-#835 := (iff #837 #494)
-#498 := (iff #841 false)
-#834 := [rewrite]: #498
-#833 := (iff #842 false)
-#493 := [rewrite]: #833
-#478 := [monotonicity #493 #834]: #835
-#484 := [trans #478 #482]: #483
-#684 := [monotonicity #484 #681]: #683
-#779 := [trans #684 #778]: #775
-#769 := [monotonicity #779]: #759
-#767 := [trans #769 #771]: #759
-#757 := [quant-inst]: #760
-#772 := [mp #757 #767]: #768
-#705 := [unit-resolution #772 #850]: #790
-#706 := [monotonicity #705]: #58
-#59 := (not #58)
-#271 := [asserted]: #59
-[unit-resolution #271 #706]: false
-unsat
-42cd145e516d85b450559c9cc1b54c1ed7265de3 304 0
+1ce1abcb126a1a568a3f8f5f2b0d8898293280b4 304 0
 #2 := false
 decl f5 :: (-> int S2)
 #11 := 0::int
@@ -15251,7 +14952,609 @@
 #270 := [asserted]: #58
 [unit-resolution #270 #708]: false
 unsat
-4183c3ff4a9f3923626099be345775dc19db2d14 360 0
+8182954e616c62f0cc886f21c7ebfe80a132d572 298 0
+#2 := false
+decl f5 :: (-> int S2)
+#53 := 3::int
+#57 := (f5 3::int)
+decl f3 :: (-> int int int)
+#54 := 1::int
+#55 := (f3 3::int 1::int)
+#56 := (f5 #55)
+#58 := (= #56 #57)
+#790 := (= #55 3::int)
+#9 := (:var 0 int)
+#8 := (:var 1 int)
+#10 := (f3 #8 #9)
+#844 := (pattern #10)
+#11 := 0::int
+#83 := -1::int
+#87 := (* -1::int #9)
+#84 := (* -1::int #8)
+#90 := (div #84 #87)
+#347 := (* -1::int #90)
+#348 := (+ #10 #347)
+#349 := (= #348 0::int)
+#21 := (div #8 #9)
+#344 := (* -1::int #21)
+#345 := (+ #10 #344)
+#346 := (= #345 0::int)
+#109 := (<= #9 0::int)
+#105 := (<= #8 0::int)
+#302 := (or #105 #109)
+#303 := (not #302)
+#116 := (>= #8 0::int)
+#285 := (or #109 #116)
+#286 := (not #285)
+#309 := (or #286 #303)
+#350 := (ite #309 #346 #349)
+#343 := (= #10 0::int)
+#13 := (= #9 0::int)
+#12 := (= #8 0::int)
+#14 := (or #12 #13)
+#351 := (ite #14 #343 #350)
+#845 := (forall (vars (?v0 int) (?v1 int)) (:pat #844) #351)
+#354 := (forall (vars (?v0 int) (?v1 int)) #351)
+#848 := (iff #354 #845)
+#846 := (iff #351 #351)
+#847 := [refl]: #846
+#849 := [quant-intro #847]: #848
+#314 := (ite #309 #21 #90)
+#317 := (ite #14 0::int #314)
+#320 := (= #10 #317)
+#323 := (forall (vars (?v0 int) (?v1 int)) #320)
+#355 := (iff #323 #354)
+#352 := (iff #320 #351)
+#353 := [rewrite]: #352
+#356 := [quant-intro #353]: #355
+#117 := (not #116)
+#110 := (not #109)
+#120 := (and #110 #117)
+#106 := (not #105)
+#113 := (and #106 #110)
+#123 := (or #113 #120)
+#126 := (ite #123 #21 #90)
+#129 := (ite #14 0::int #126)
+#132 := (= #10 #129)
+#135 := (forall (vars (?v0 int) (?v1 int)) #132)
+#324 := (iff #135 #323)
+#321 := (iff #132 #320)
+#318 := (= #129 #317)
+#315 := (= #126 #314)
+#312 := (iff #123 #309)
+#306 := (or #303 #286)
+#310 := (iff #306 #309)
+#311 := [rewrite]: #310
+#307 := (iff #123 #306)
+#304 := (iff #120 #286)
+#305 := [rewrite]: #304
+#283 := (iff #113 #303)
+#284 := [rewrite]: #283
+#308 := [monotonicity #284 #305]: #307
+#313 := [trans #308 #311]: #312
+#316 := [monotonicity #313]: #315
+#319 := [monotonicity #316]: #318
+#322 := [monotonicity #319]: #321
+#325 := [quant-intro #322]: #324
+#289 := (~ #135 #135)
+#287 := (~ #132 #132)
+#288 := [refl]: #287
+#290 := [nnf-pos #288]: #289
+#23 := (- #9)
+#22 := (- #8)
+#24 := (div #22 #23)
+#16 := (< 0::int #9)
+#18 := (< #8 0::int)
+#19 := (and #18 #16)
+#15 := (< 0::int #8)
+#17 := (and #15 #16)
+#20 := (or #17 #19)
+#25 := (ite #20 #21 #24)
+#26 := (ite #14 0::int #25)
+#27 := (= #10 #26)
+#28 := (forall (vars (?v0 int) (?v1 int)) #27)
+#138 := (iff #28 #135)
+#77 := (and #16 #18)
+#80 := (or #17 #77)
+#93 := (ite #80 #21 #90)
+#96 := (ite #14 0::int #93)
+#99 := (= #10 #96)
+#102 := (forall (vars (?v0 int) (?v1 int)) #99)
+#136 := (iff #102 #135)
+#133 := (iff #99 #132)
+#130 := (= #96 #129)
+#127 := (= #93 #126)
+#124 := (iff #80 #123)
+#121 := (iff #77 #120)
+#118 := (iff #18 #117)
+#119 := [rewrite]: #118
+#111 := (iff #16 #110)
+#112 := [rewrite]: #111
+#122 := [monotonicity #112 #119]: #121
+#114 := (iff #17 #113)
+#107 := (iff #15 #106)
+#108 := [rewrite]: #107
+#115 := [monotonicity #108 #112]: #114
+#125 := [monotonicity #115 #122]: #124
+#128 := [monotonicity #125]: #127
+#131 := [monotonicity #128]: #130
+#134 := [monotonicity #131]: #133
+#137 := [quant-intro #134]: #136
+#103 := (iff #28 #102)
+#100 := (iff #27 #99)
+#97 := (= #26 #96)
+#94 := (= #25 #93)
+#91 := (= #24 #90)
+#88 := (= #23 #87)
+#89 := [rewrite]: #88
+#85 := (= #22 #84)
+#86 := [rewrite]: #85
+#92 := [monotonicity #86 #89]: #91
+#81 := (iff #20 #80)
+#78 := (iff #19 #77)
+#79 := [rewrite]: #78
+#82 := [monotonicity #79]: #81
+#95 := [monotonicity #82 #92]: #94
+#98 := [monotonicity #95]: #97
+#101 := [monotonicity #98]: #100
+#104 := [quant-intro #101]: #103
+#139 := [trans #104 #137]: #138
+#76 := [asserted]: #28
+#140 := [mp #76 #139]: #135
+#274 := [mp~ #140 #290]: #135
+#326 := [mp #274 #325]: #323
+#357 := [mp #326 #356]: #354
+#850 := [mp #357 #849]: #845
+#766 := (not #845)
+#768 := (or #766 #790)
+#431 := (* -1::int 1::int)
+#515 := (* -1::int 3::int)
+#516 := (div #515 #431)
+#517 := (* -1::int #516)
+#508 := (+ #55 #517)
+#519 := (= #508 0::int)
+#520 := (div 3::int 1::int)
+#521 := (* -1::int #520)
+#518 := (+ #55 #521)
+#522 := (= #518 0::int)
+#501 := (<= 1::int 0::int)
+#836 := (<= 3::int 0::int)
+#838 := (or #836 #501)
+#495 := (not #838)
+#625 := (>= 3::int 0::int)
+#832 := (or #501 #625)
+#506 := (not #832)
+#507 := (or #506 #495)
+#839 := (ite #507 #522 #519)
+#840 := (= #55 0::int)
+#841 := (= 1::int 0::int)
+#842 := (= 3::int 0::int)
+#837 := (or #842 #841)
+#843 := (ite #837 #840 #839)
+#760 := (or #766 #843)
+#759 := (iff #760 #768)
+#770 := (iff #768 #768)
+#771 := [rewrite]: #770
+#775 := (iff #843 #790)
+#682 := (ite false #840 #790)
+#685 := (iff #682 #790)
+#778 := [rewrite]: #685
+#683 := (iff #843 #682)
+#673 := (iff #839 #790)
+#1 := true
+#777 := (ite true #790 #790)
+#679 := (iff #777 #790)
+#680 := [rewrite]: #679
+#662 := (iff #839 #777)
+#773 := (iff #519 #790)
+#809 := -3::int
+#802 := (+ -3::int #55)
+#646 := (= #802 0::int)
+#791 := (iff #646 #790)
+#792 := [rewrite]: #791
+#776 := (iff #519 #646)
+#669 := (= #508 #802)
+#801 := (+ #55 -3::int)
+#803 := (= #801 #802)
+#798 := [rewrite]: #803
+#667 := (= #508 #801)
+#782 := (= #517 -3::int)
+#806 := (= #515 -3::int)
+#810 := [rewrite]: #806
+#783 := (= #517 #515)
+#780 := (= #516 3::int)
+#788 := (div -3::int -1::int)
+#626 := (= #788 3::int)
+#627 := [rewrite]: #626
+#795 := (= #516 #788)
+#793 := (= #431 -1::int)
+#794 := [rewrite]: #793
+#624 := [monotonicity #810 #794]: #795
+#781 := [trans #624 #627]: #780
+#784 := [monotonicity #781]: #783
+#785 := [trans #784 #810]: #782
+#668 := [monotonicity #785]: #667
+#628 := [trans #668 #798]: #669
+#678 := [monotonicity #628]: #776
+#774 := [trans #678 #792]: #773
+#786 := (iff #522 #790)
+#647 := (iff #522 #646)
+#804 := (= #518 #802)
+#796 := (= #518 #801)
+#799 := (= #521 -3::int)
+#523 := (= #521 #515)
+#807 := (= #520 3::int)
+#808 := [rewrite]: #807
+#805 := [monotonicity #808]: #523
+#800 := [trans #805 #810]: #799
+#797 := [monotonicity #800]: #796
+#645 := [trans #797 #798]: #804
+#789 := [monotonicity #645]: #647
+#787 := [trans #789 #792]: #786
+#528 := (iff #507 true)
+#824 := (or false true)
+#826 := (iff #824 true)
+#464 := [rewrite]: #826
+#526 := (iff #507 #824)
+#812 := (iff #495 true)
+#814 := (not false)
+#811 := (iff #814 true)
+#815 := [rewrite]: #811
+#536 := (iff #495 #814)
+#437 := (iff #838 false)
+#494 := (or false false)
+#819 := (iff #494 false)
+#482 := [rewrite]: #819
+#542 := (iff #838 #494)
+#485 := (iff #501 false)
+#821 := [rewrite]: #485
+#540 := (iff #836 false)
+#541 := [rewrite]: #540
+#543 := [monotonicity #541 #821]: #542
+#813 := [trans #543 #482]: #437
+#537 := [monotonicity #813]: #536
+#816 := [trans #537 #815]: #812
+#817 := (iff #506 false)
+#469 := (not true)
+#828 := (iff #469 false)
+#831 := [rewrite]: #828
+#470 := (iff #506 #469)
+#827 := (iff #832 true)
+#825 := (iff #832 #824)
+#822 := (iff #625 true)
+#823 := [rewrite]: #822
+#820 := [monotonicity #821 #823]: #825
+#829 := [trans #820 #464]: #827
+#830 := [monotonicity #829]: #470
+#818 := [trans #830 #831]: #817
+#527 := [monotonicity #818 #816]: #526
+#529 := [trans #527 #464]: #528
+#677 := [monotonicity #529 #787 #774]: #662
+#681 := [trans #677 #680]: #673
+#483 := (iff #837 false)
+#835 := (iff #837 #494)
+#498 := (iff #841 false)
+#834 := [rewrite]: #498
+#833 := (iff #842 false)
+#493 := [rewrite]: #833
+#478 := [monotonicity #493 #834]: #835
+#484 := [trans #478 #482]: #483
+#684 := [monotonicity #484 #681]: #683
+#779 := [trans #684 #778]: #775
+#769 := [monotonicity #779]: #759
+#767 := [trans #769 #771]: #759
+#757 := [quant-inst]: #760
+#772 := [mp #757 #767]: #768
+#705 := [unit-resolution #772 #850]: #790
+#706 := [monotonicity #705]: #58
+#59 := (not #58)
+#271 := [asserted]: #59
+[unit-resolution #271 #706]: false
+unsat
+a73336d8974d339785d03ee7b06059fa66e36b1e 302 0
+#2 := false
+decl f5 :: (-> int S2)
+#11 := 0::int
+#56 := (f5 0::int)
+decl f4 :: (-> int int int)
+#53 := 1::int
+#54 := (f4 1::int 1::int)
+#55 := (f5 #54)
+#57 := (= #55 #56)
+#505 := (= #54 0::int)
+#9 := (:var 0 int)
+#8 := (:var 1 int)
+#29 := (f4 #8 #9)
+#850 := (pattern #29)
+#82 := -1::int
+#86 := (* -1::int #9)
+#83 := (* -1::int #8)
+#141 := (mod #83 #86)
+#362 := (+ #29 #141)
+#363 := (= #362 0::int)
+#30 := (mod #8 #9)
+#359 := (* -1::int #30)
+#360 := (+ #29 #359)
+#361 := (= #360 0::int)
+#108 := (<= #9 0::int)
+#104 := (<= #8 0::int)
+#301 := (or #104 #108)
+#302 := (not #301)
+#115 := (>= #8 0::int)
+#284 := (or #108 #115)
+#285 := (not #284)
+#308 := (or #285 #302)
+#364 := (ite #308 #361 #363)
+#358 := (= #29 0::int)
+#12 := (= #8 0::int)
+#365 := (ite #12 #358 #364)
+#357 := (= #8 #29)
+#13 := (= #9 0::int)
+#366 := (ite #13 #357 #365)
+#851 := (forall (vars (?v0 int) (?v1 int)) (:pat #850) #366)
+#369 := (forall (vars (?v0 int) (?v1 int)) #366)
+#854 := (iff #369 #851)
+#852 := (iff #366 #366)
+#853 := [refl]: #852
+#855 := [quant-intro #853]: #854
+#147 := (* -1::int #141)
+#326 := (ite #308 #30 #147)
+#329 := (ite #12 0::int #326)
+#332 := (ite #13 #8 #329)
+#335 := (= #29 #332)
+#338 := (forall (vars (?v0 int) (?v1 int)) #335)
+#370 := (iff #338 #369)
+#367 := (iff #335 #366)
+#368 := [rewrite]: #367
+#371 := [quant-intro #368]: #370
+#116 := (not #115)
+#109 := (not #108)
+#119 := (and #109 #116)
+#105 := (not #104)
+#112 := (and #105 #109)
+#122 := (or #112 #119)
+#167 := (ite #122 #30 #147)
+#170 := (ite #12 0::int #167)
+#173 := (ite #13 #8 #170)
+#176 := (= #29 #173)
+#179 := (forall (vars (?v0 int) (?v1 int)) #176)
+#339 := (iff #179 #338)
+#336 := (iff #176 #335)
+#333 := (= #173 #332)
+#330 := (= #170 #329)
+#327 := (= #167 #326)
+#311 := (iff #122 #308)
+#305 := (or #302 #285)
+#309 := (iff #305 #308)
+#310 := [rewrite]: #309
+#306 := (iff #122 #305)
+#303 := (iff #119 #285)
+#304 := [rewrite]: #303
+#282 := (iff #112 #302)
+#283 := [rewrite]: #282
+#307 := [monotonicity #283 #304]: #306
+#312 := [trans #307 #310]: #311
+#328 := [monotonicity #312]: #327
+#331 := [monotonicity #328]: #330
+#334 := [monotonicity #331]: #333
+#337 := [monotonicity #334]: #336
+#340 := [quant-intro #337]: #339
+#274 := (~ #179 #179)
+#271 := (~ #176 #176)
+#290 := [refl]: #271
+#275 := [nnf-pos #290]: #274
+#23 := (- #9)
+#22 := (- #8)
+#31 := (mod #22 #23)
+#32 := (- #31)
+#16 := (< 0::int #9)
+#18 := (< #8 0::int)
+#19 := (and #18 #16)
+#15 := (< 0::int #8)
+#17 := (and #15 #16)
+#20 := (or #17 #19)
+#33 := (ite #20 #30 #32)
+#34 := (ite #12 0::int #33)
+#35 := (ite #13 #8 #34)
+#36 := (= #29 #35)
+#37 := (forall (vars (?v0 int) (?v1 int)) #36)
+#182 := (iff #37 #179)
+#76 := (and #16 #18)
+#79 := (or #17 #76)
+#152 := (ite #79 #30 #147)
+#155 := (ite #12 0::int #152)
+#158 := (ite #13 #8 #155)
+#161 := (= #29 #158)
+#164 := (forall (vars (?v0 int) (?v1 int)) #161)
+#180 := (iff #164 #179)
+#177 := (iff #161 #176)
+#174 := (= #158 #173)
+#171 := (= #155 #170)
+#168 := (= #152 #167)
+#123 := (iff #79 #122)
+#120 := (iff #76 #119)
+#117 := (iff #18 #116)
+#118 := [rewrite]: #117
+#110 := (iff #16 #109)
+#111 := [rewrite]: #110
+#121 := [monotonicity #111 #118]: #120
+#113 := (iff #17 #112)
+#106 := (iff #15 #105)
+#107 := [rewrite]: #106
+#114 := [monotonicity #107 #111]: #113
+#124 := [monotonicity #114 #121]: #123
+#169 := [monotonicity #124]: #168
+#172 := [monotonicity #169]: #171
+#175 := [monotonicity #172]: #174
+#178 := [monotonicity #175]: #177
+#181 := [quant-intro #178]: #180
+#165 := (iff #37 #164)
+#162 := (iff #36 #161)
+#159 := (= #35 #158)
+#156 := (= #34 #155)
+#153 := (= #33 #152)
+#150 := (= #32 #147)
+#144 := (- #141)
+#148 := (= #144 #147)
+#149 := [rewrite]: #148
+#145 := (= #32 #144)
+#142 := (= #31 #141)
+#87 := (= #23 #86)
+#88 := [rewrite]: #87
+#84 := (= #22 #83)
+#85 := [rewrite]: #84
+#143 := [monotonicity #85 #88]: #142
+#146 := [monotonicity #143]: #145
+#151 := [trans #146 #149]: #150
+#80 := (iff #20 #79)
+#77 := (iff #19 #76)
+#78 := [rewrite]: #77
+#81 := [monotonicity #78]: #80
+#154 := [monotonicity #81 #151]: #153
+#157 := [monotonicity #154]: #156
+#160 := [monotonicity #157]: #159
+#163 := [monotonicity #160]: #162
+#166 := [quant-intro #163]: #165
+#183 := [trans #166 #181]: #182
+#140 := [asserted]: #37
+#184 := [mp #140 #183]: #179
+#291 := [mp~ #184 #275]: #179
+#341 := [mp #291 #340]: #338
+#372 := [mp #341 #371]: #369
+#856 := [mp #372 #855]: #851
+#776 := (not #851)
+#661 := (or #776 #505)
+#430 := (* -1::int 1::int)
+#514 := (mod #430 #430)
+#515 := (+ #54 #514)
+#516 := (= #515 0::int)
+#507 := (mod 1::int 1::int)
+#518 := (* -1::int #507)
+#519 := (+ #54 #518)
+#520 := (= #519 0::int)
+#517 := (<= 1::int 0::int)
+#521 := (or #517 #517)
+#500 := (not #521)
+#835 := (>= 1::int 0::int)
+#837 := (or #517 #835)
+#494 := (not #837)
+#624 := (or #494 #500)
+#831 := (ite #624 #520 #516)
+#506 := (= 1::int 0::int)
+#838 := (ite #506 #505 #831)
+#839 := (= 1::int #54)
+#840 := (ite #506 #839 #838)
+#676 := (or #776 #840)
+#679 := (iff #676 #661)
+#680 := (iff #661 #661)
+#681 := [rewrite]: #680
+#772 := (iff #840 #505)
+#832 := (= #54 1::int)
+#667 := (ite false #832 #505)
+#775 := (iff #667 #505)
+#677 := [rewrite]: #775
+#668 := (iff #840 #667)
+#784 := (iff #838 #505)
+#779 := (ite false #505 #505)
+#783 := (iff #779 #505)
+#781 := [rewrite]: #783
+#780 := (iff #838 #779)
+#625 := (iff #831 #505)
+#1 := true
+#792 := (ite true #505 #505)
+#794 := (iff #792 #505)
+#623 := [rewrite]: #794
+#793 := (iff #831 #792)
+#785 := (iff #516 #505)
+#790 := (= #515 #54)
+#807 := (+ #54 0::int)
+#808 := (= #807 #54)
+#805 := [rewrite]: #808
+#788 := (= #515 #807)
+#645 := (= #514 0::int)
+#801 := (mod -1::int -1::int)
+#803 := (= #801 0::int)
+#644 := [rewrite]: #803
+#802 := (= #514 #801)
+#795 := (= #430 -1::int)
+#796 := [rewrite]: #795
+#797 := [monotonicity #796 #796]: #802
+#646 := [trans #797 #644]: #645
+#789 := [monotonicity #646]: #788
+#791 := [trans #789 #805]: #790
+#786 := [monotonicity #791]: #785
+#799 := (iff #520 #505)
+#809 := (= #519 #54)
+#522 := (= #519 #807)
+#528 := (= #518 0::int)
+#811 := (* -1::int 0::int)
+#526 := (= #811 0::int)
+#527 := [rewrite]: #526
+#815 := (= #518 #811)
+#810 := (= #507 0::int)
+#814 := [rewrite]: #810
+#525 := [monotonicity #814]: #815
+#806 := [trans #525 #527]: #528
+#804 := [monotonicity #806]: #522
+#798 := [trans #804 #805]: #809
+#800 := [monotonicity #798]: #799
+#535 := (iff #624 true)
+#477 := (or false true)
+#482 := (iff #477 true)
+#483 := [rewrite]: #482
+#812 := (iff #624 #477)
+#542 := (iff #500 true)
+#816 := (not false)
+#540 := (iff #816 true)
+#541 := [rewrite]: #540
+#817 := (iff #500 #816)
+#827 := (iff #521 false)
+#826 := (or false false)
+#469 := (iff #826 false)
+#829 := [rewrite]: #469
+#828 := (iff #521 #826)
+#497 := (iff #517 false)
+#833 := [rewrite]: #497
+#468 := [monotonicity #833 #833]: #828
+#830 := [trans #468 #829]: #827
+#539 := [monotonicity #830]: #817
+#436 := [trans #539 #541]: #542
+#825 := (iff #494 false)
+#821 := (not true)
+#824 := (iff #821 false)
+#819 := [rewrite]: #824
+#822 := (iff #494 #821)
+#484 := (iff #837 true)
+#818 := (iff #837 #477)
+#493 := (iff #835 true)
+#834 := [rewrite]: #493
+#481 := [monotonicity #833 #834]: #818
+#820 := [trans #481 #483]: #484
+#823 := [monotonicity #820]: #822
+#463 := [trans #823 #819]: #825
+#813 := [monotonicity #463 #436]: #812
+#536 := [trans #813 #483]: #535
+#787 := [monotonicity #536 #800 #786]: #793
+#626 := [trans #787 #623]: #625
+#841 := (iff #506 false)
+#836 := [rewrite]: #841
+#782 := [monotonicity #836 #626]: #780
+#666 := [trans #782 #781]: #784
+#842 := (iff #839 #832)
+#492 := [rewrite]: #842
+#627 := [monotonicity #836 #492 #666]: #668
+#773 := [trans #627 #677]: #772
+#672 := [monotonicity #773]: #679
+#682 := [trans #672 #681]: #679
+#678 := [quant-inst]: #676
+#683 := [mp #678 #682]: #661
+#703 := [unit-resolution #683 #856]: #505
+#699 := [monotonicity #703]: #57
+#58 := (not #57)
+#270 := [asserted]: #58
+[unit-resolution #270 #699]: false
+unsat
+aa365ca33021a3af06f636ef2547aa25906c3855 360 0
 #2 := false
 decl f5 :: (-> int S2)
 decl f3 :: (-> int int int)
@@ -15612,599 +15915,7 @@
 #557 := [trans #620 #572]: #272
 [unit-resolution #280 #557]: false
 unsat
-121357a49f554c92c48529c5e8845192f6c0a8a5 302 0
-#2 := false
-decl f5 :: (-> int S2)
-#11 := 0::int
-#56 := (f5 0::int)
-decl f4 :: (-> int int int)
-#53 := 1::int
-#54 := (f4 1::int 1::int)
-#55 := (f5 #54)
-#57 := (= #55 #56)
-#505 := (= #54 0::int)
-#9 := (:var 0 int)
-#8 := (:var 1 int)
-#29 := (f4 #8 #9)
-#850 := (pattern #29)
-#82 := -1::int
-#86 := (* -1::int #9)
-#83 := (* -1::int #8)
-#141 := (mod #83 #86)
-#362 := (+ #29 #141)
-#363 := (= #362 0::int)
-#30 := (mod #8 #9)
-#359 := (* -1::int #30)
-#360 := (+ #29 #359)
-#361 := (= #360 0::int)
-#108 := (<= #9 0::int)
-#104 := (<= #8 0::int)
-#301 := (or #104 #108)
-#302 := (not #301)
-#115 := (>= #8 0::int)
-#284 := (or #108 #115)
-#285 := (not #284)
-#308 := (or #285 #302)
-#364 := (ite #308 #361 #363)
-#358 := (= #29 0::int)
-#12 := (= #8 0::int)
-#365 := (ite #12 #358 #364)
-#357 := (= #8 #29)
-#13 := (= #9 0::int)
-#366 := (ite #13 #357 #365)
-#851 := (forall (vars (?v0 int) (?v1 int)) (:pat #850) #366)
-#369 := (forall (vars (?v0 int) (?v1 int)) #366)
-#854 := (iff #369 #851)
-#852 := (iff #366 #366)
-#853 := [refl]: #852
-#855 := [quant-intro #853]: #854
-#147 := (* -1::int #141)
-#326 := (ite #308 #30 #147)
-#329 := (ite #12 0::int #326)
-#332 := (ite #13 #8 #329)
-#335 := (= #29 #332)
-#338 := (forall (vars (?v0 int) (?v1 int)) #335)
-#370 := (iff #338 #369)
-#367 := (iff #335 #366)
-#368 := [rewrite]: #367
-#371 := [quant-intro #368]: #370
-#116 := (not #115)
-#109 := (not #108)
-#119 := (and #109 #116)
-#105 := (not #104)
-#112 := (and #105 #109)
-#122 := (or #112 #119)
-#167 := (ite #122 #30 #147)
-#170 := (ite #12 0::int #167)
-#173 := (ite #13 #8 #170)
-#176 := (= #29 #173)
-#179 := (forall (vars (?v0 int) (?v1 int)) #176)
-#339 := (iff #179 #338)
-#336 := (iff #176 #335)
-#333 := (= #173 #332)
-#330 := (= #170 #329)
-#327 := (= #167 #326)
-#311 := (iff #122 #308)
-#305 := (or #302 #285)
-#309 := (iff #305 #308)
-#310 := [rewrite]: #309
-#306 := (iff #122 #305)
-#303 := (iff #119 #285)
-#304 := [rewrite]: #303
-#282 := (iff #112 #302)
-#283 := [rewrite]: #282
-#307 := [monotonicity #283 #304]: #306
-#312 := [trans #307 #310]: #311
-#328 := [monotonicity #312]: #327
-#331 := [monotonicity #328]: #330
-#334 := [monotonicity #331]: #333
-#337 := [monotonicity #334]: #336
-#340 := [quant-intro #337]: #339
-#274 := (~ #179 #179)
-#271 := (~ #176 #176)
-#290 := [refl]: #271
-#275 := [nnf-pos #290]: #274
-#23 := (- #9)
-#22 := (- #8)
-#31 := (mod #22 #23)
-#32 := (- #31)
-#16 := (< 0::int #9)
-#18 := (< #8 0::int)
-#19 := (and #18 #16)
-#15 := (< 0::int #8)
-#17 := (and #15 #16)
-#20 := (or #17 #19)
-#33 := (ite #20 #30 #32)
-#34 := (ite #12 0::int #33)
-#35 := (ite #13 #8 #34)
-#36 := (= #29 #35)
-#37 := (forall (vars (?v0 int) (?v1 int)) #36)
-#182 := (iff #37 #179)
-#76 := (and #16 #18)
-#79 := (or #17 #76)
-#152 := (ite #79 #30 #147)
-#155 := (ite #12 0::int #152)
-#158 := (ite #13 #8 #155)
-#161 := (= #29 #158)
-#164 := (forall (vars (?v0 int) (?v1 int)) #161)
-#180 := (iff #164 #179)
-#177 := (iff #161 #176)
-#174 := (= #158 #173)
-#171 := (= #155 #170)
-#168 := (= #152 #167)
-#123 := (iff #79 #122)
-#120 := (iff #76 #119)
-#117 := (iff #18 #116)
-#118 := [rewrite]: #117
-#110 := (iff #16 #109)
-#111 := [rewrite]: #110
-#121 := [monotonicity #111 #118]: #120
-#113 := (iff #17 #112)
-#106 := (iff #15 #105)
-#107 := [rewrite]: #106
-#114 := [monotonicity #107 #111]: #113
-#124 := [monotonicity #114 #121]: #123
-#169 := [monotonicity #124]: #168
-#172 := [monotonicity #169]: #171
-#175 := [monotonicity #172]: #174
-#178 := [monotonicity #175]: #177
-#181 := [quant-intro #178]: #180
-#165 := (iff #37 #164)
-#162 := (iff #36 #161)
-#159 := (= #35 #158)
-#156 := (= #34 #155)
-#153 := (= #33 #152)
-#150 := (= #32 #147)
-#144 := (- #141)
-#148 := (= #144 #147)
-#149 := [rewrite]: #148
-#145 := (= #32 #144)
-#142 := (= #31 #141)
-#87 := (= #23 #86)
-#88 := [rewrite]: #87
-#84 := (= #22 #83)
-#85 := [rewrite]: #84
-#143 := [monotonicity #85 #88]: #142
-#146 := [monotonicity #143]: #145
-#151 := [trans #146 #149]: #150
-#80 := (iff #20 #79)
-#77 := (iff #19 #76)
-#78 := [rewrite]: #77
-#81 := [monotonicity #78]: #80
-#154 := [monotonicity #81 #151]: #153
-#157 := [monotonicity #154]: #156
-#160 := [monotonicity #157]: #159
-#163 := [monotonicity #160]: #162
-#166 := [quant-intro #163]: #165
-#183 := [trans #166 #181]: #182
-#140 := [asserted]: #37
-#184 := [mp #140 #183]: #179
-#291 := [mp~ #184 #275]: #179
-#341 := [mp #291 #340]: #338
-#372 := [mp #341 #371]: #369
-#856 := [mp #372 #855]: #851
-#776 := (not #851)
-#661 := (or #776 #505)
-#430 := (* -1::int 1::int)
-#514 := (mod #430 #430)
-#515 := (+ #54 #514)
-#516 := (= #515 0::int)
-#507 := (mod 1::int 1::int)
-#518 := (* -1::int #507)
-#519 := (+ #54 #518)
-#520 := (= #519 0::int)
-#517 := (<= 1::int 0::int)
-#521 := (or #517 #517)
-#500 := (not #521)
-#835 := (>= 1::int 0::int)
-#837 := (or #517 #835)
-#494 := (not #837)
-#624 := (or #494 #500)
-#831 := (ite #624 #520 #516)
-#506 := (= 1::int 0::int)
-#838 := (ite #506 #505 #831)
-#839 := (= 1::int #54)
-#840 := (ite #506 #839 #838)
-#676 := (or #776 #840)
-#679 := (iff #676 #661)
-#680 := (iff #661 #661)
-#681 := [rewrite]: #680
-#772 := (iff #840 #505)
-#832 := (= #54 1::int)
-#667 := (ite false #832 #505)
-#775 := (iff #667 #505)
-#677 := [rewrite]: #775
-#668 := (iff #840 #667)
-#784 := (iff #838 #505)
-#779 := (ite false #505 #505)
-#783 := (iff #779 #505)
-#781 := [rewrite]: #783
-#780 := (iff #838 #779)
-#625 := (iff #831 #505)
-#1 := true
-#792 := (ite true #505 #505)
-#794 := (iff #792 #505)
-#623 := [rewrite]: #794
-#793 := (iff #831 #792)
-#785 := (iff #516 #505)
-#790 := (= #515 #54)
-#807 := (+ #54 0::int)
-#808 := (= #807 #54)
-#805 := [rewrite]: #808
-#788 := (= #515 #807)
-#645 := (= #514 0::int)
-#801 := (mod -1::int -1::int)
-#803 := (= #801 0::int)
-#644 := [rewrite]: #803
-#802 := (= #514 #801)
-#795 := (= #430 -1::int)
-#796 := [rewrite]: #795
-#797 := [monotonicity #796 #796]: #802
-#646 := [trans #797 #644]: #645
-#789 := [monotonicity #646]: #788
-#791 := [trans #789 #805]: #790
-#786 := [monotonicity #791]: #785
-#799 := (iff #520 #505)
-#809 := (= #519 #54)
-#522 := (= #519 #807)
-#528 := (= #518 0::int)
-#811 := (* -1::int 0::int)
-#526 := (= #811 0::int)
-#527 := [rewrite]: #526
-#815 := (= #518 #811)
-#810 := (= #507 0::int)
-#814 := [rewrite]: #810
-#525 := [monotonicity #814]: #815
-#806 := [trans #525 #527]: #528
-#804 := [monotonicity #806]: #522
-#798 := [trans #804 #805]: #809
-#800 := [monotonicity #798]: #799
-#535 := (iff #624 true)
-#477 := (or false true)
-#482 := (iff #477 true)
-#483 := [rewrite]: #482
-#812 := (iff #624 #477)
-#542 := (iff #500 true)
-#816 := (not false)
-#540 := (iff #816 true)
-#541 := [rewrite]: #540
-#817 := (iff #500 #816)
-#827 := (iff #521 false)
-#826 := (or false false)
-#469 := (iff #826 false)
-#829 := [rewrite]: #469
-#828 := (iff #521 #826)
-#497 := (iff #517 false)
-#833 := [rewrite]: #497
-#468 := [monotonicity #833 #833]: #828
-#830 := [trans #468 #829]: #827
-#539 := [monotonicity #830]: #817
-#436 := [trans #539 #541]: #542
-#825 := (iff #494 false)
-#821 := (not true)
-#824 := (iff #821 false)
-#819 := [rewrite]: #824
-#822 := (iff #494 #821)
-#484 := (iff #837 true)
-#818 := (iff #837 #477)
-#493 := (iff #835 true)
-#834 := [rewrite]: #493
-#481 := [monotonicity #833 #834]: #818
-#820 := [trans #481 #483]: #484
-#823 := [monotonicity #820]: #822
-#463 := [trans #823 #819]: #825
-#813 := [monotonicity #463 #436]: #812
-#536 := [trans #813 #483]: #535
-#787 := [monotonicity #536 #800 #786]: #793
-#626 := [trans #787 #623]: #625
-#841 := (iff #506 false)
-#836 := [rewrite]: #841
-#782 := [monotonicity #836 #626]: #780
-#666 := [trans #782 #781]: #784
-#842 := (iff #839 #832)
-#492 := [rewrite]: #842
-#627 := [monotonicity #836 #492 #666]: #668
-#773 := [trans #627 #677]: #772
-#672 := [monotonicity #773]: #679
-#682 := [trans #672 #681]: #679
-#678 := [quant-inst]: #676
-#683 := [mp #678 #682]: #661
-#703 := [unit-resolution #683 #856]: #505
-#699 := [monotonicity #703]: #57
-#58 := (not #57)
-#270 := [asserted]: #58
-[unit-resolution #270 #699]: false
-unsat
-f2f039ccfb9f8bb6046ed67b2d5f9e4965b93c1c 288 0
-#2 := false
-decl f5 :: (-> int S2)
-#11 := 0::int
-#56 := (f5 0::int)
-decl f3 :: (-> int int int)
-#53 := 3::int
-#54 := (f3 0::int 3::int)
-#55 := (f5 #54)
-#57 := (= #55 #56)
-#839 := (= #54 0::int)
-#9 := (:var 0 int)
-#8 := (:var 1 int)
-#10 := (f3 #8 #9)
-#844 := (pattern #10)
-#82 := -1::int
-#86 := (* -1::int #9)
-#83 := (* -1::int #8)
-#89 := (div #83 #86)
-#346 := (* -1::int #89)
-#347 := (+ #10 #346)
-#348 := (= #347 0::int)
-#21 := (div #8 #9)
-#343 := (* -1::int #21)
-#344 := (+ #10 #343)
-#345 := (= #344 0::int)
-#108 := (<= #9 0::int)
-#104 := (<= #8 0::int)
-#301 := (or #104 #108)
-#302 := (not #301)
-#115 := (>= #8 0::int)
-#284 := (or #108 #115)
-#285 := (not #284)
-#308 := (or #285 #302)
-#349 := (ite #308 #345 #348)
-#342 := (= #10 0::int)
-#13 := (= #9 0::int)
-#12 := (= #8 0::int)
-#14 := (or #12 #13)
-#350 := (ite #14 #342 #349)
-#845 := (forall (vars (?v0 int) (?v1 int)) (:pat #844) #350)
-#353 := (forall (vars (?v0 int) (?v1 int)) #350)
-#848 := (iff #353 #845)
-#846 := (iff #350 #350)
-#847 := [refl]: #846
-#849 := [quant-intro #847]: #848
-#313 := (ite #308 #21 #89)
-#316 := (ite #14 0::int #313)
-#319 := (= #10 #316)
-#322 := (forall (vars (?v0 int) (?v1 int)) #319)
-#354 := (iff #322 #353)
-#351 := (iff #319 #350)
-#352 := [rewrite]: #351
-#355 := [quant-intro #352]: #354
-#116 := (not #115)
-#109 := (not #108)
-#119 := (and #109 #116)
-#105 := (not #104)
-#112 := (and #105 #109)
-#122 := (or #112 #119)
-#125 := (ite #122 #21 #89)
-#128 := (ite #14 0::int #125)
-#131 := (= #10 #128)
-#134 := (forall (vars (?v0 int) (?v1 int)) #131)
-#323 := (iff #134 #322)
-#320 := (iff #131 #319)
-#317 := (= #128 #316)
-#314 := (= #125 #313)
-#311 := (iff #122 #308)
-#305 := (or #302 #285)
-#309 := (iff #305 #308)
-#310 := [rewrite]: #309
-#306 := (iff #122 #305)
-#303 := (iff #119 #285)
-#304 := [rewrite]: #303
-#282 := (iff #112 #302)
-#283 := [rewrite]: #282
-#307 := [monotonicity #283 #304]: #306
-#312 := [trans #307 #310]: #311
-#315 := [monotonicity #312]: #314
-#318 := [monotonicity #315]: #317
-#321 := [monotonicity #318]: #320
-#324 := [quant-intro #321]: #323
-#288 := (~ #134 #134)
-#286 := (~ #131 #131)
-#287 := [refl]: #286
-#289 := [nnf-pos #287]: #288
-#23 := (- #9)
-#22 := (- #8)
-#24 := (div #22 #23)
-#16 := (< 0::int #9)
-#18 := (< #8 0::int)
-#19 := (and #18 #16)
-#15 := (< 0::int #8)
-#17 := (and #15 #16)
-#20 := (or #17 #19)
-#25 := (ite #20 #21 #24)
-#26 := (ite #14 0::int #25)
-#27 := (= #10 #26)
-#28 := (forall (vars (?v0 int) (?v1 int)) #27)
-#137 := (iff #28 #134)
-#76 := (and #16 #18)
-#79 := (or #17 #76)
-#92 := (ite #79 #21 #89)
-#95 := (ite #14 0::int #92)
-#98 := (= #10 #95)
-#101 := (forall (vars (?v0 int) (?v1 int)) #98)
-#135 := (iff #101 #134)
-#132 := (iff #98 #131)
-#129 := (= #95 #128)
-#126 := (= #92 #125)
-#123 := (iff #79 #122)
-#120 := (iff #76 #119)
-#117 := (iff #18 #116)
-#118 := [rewrite]: #117
-#110 := (iff #16 #109)
-#111 := [rewrite]: #110
-#121 := [monotonicity #111 #118]: #120
-#113 := (iff #17 #112)
-#106 := (iff #15 #105)
-#107 := [rewrite]: #106
-#114 := [monotonicity #107 #111]: #113
-#124 := [monotonicity #114 #121]: #123
-#127 := [monotonicity #124]: #126
-#130 := [monotonicity #127]: #129
-#133 := [monotonicity #130]: #132
-#136 := [quant-intro #133]: #135
-#102 := (iff #28 #101)
-#99 := (iff #27 #98)
-#96 := (= #26 #95)
-#93 := (= #25 #92)
-#90 := (= #24 #89)
-#87 := (= #23 #86)
-#88 := [rewrite]: #87
-#84 := (= #22 #83)
-#85 := [rewrite]: #84
-#91 := [monotonicity #85 #88]: #90
-#80 := (iff #20 #79)
-#77 := (iff #19 #76)
-#78 := [rewrite]: #77
-#81 := [monotonicity #78]: #80
-#94 := [monotonicity #81 #91]: #93
-#97 := [monotonicity #94]: #96
-#100 := [monotonicity #97]: #99
-#103 := [quant-intro #100]: #102
-#138 := [trans #103 #136]: #137
-#75 := [asserted]: #28
-#139 := [mp #75 #138]: #134
-#273 := [mp~ #139 #289]: #134
-#325 := [mp #273 #324]: #322
-#356 := [mp #325 #355]: #353
-#850 := [mp #356 #849]: #845
-#680 := (not #845)
-#673 := (or #680 #839)
-#430 := (* -1::int 3::int)
-#515 := (* -1::int 0::int)
-#516 := (div #515 #430)
-#517 := (* -1::int #516)
-#508 := (+ #54 #517)
-#519 := (= #508 0::int)
-#520 := (div 0::int 3::int)
-#448 := (* -1::int #520)
-#521 := (+ #54 #448)
-#518 := (= #521 0::int)
-#522 := (<= 3::int 0::int)
-#501 := (<= 0::int 0::int)
-#836 := (or #501 #522)
-#838 := (not #836)
-#495 := (>= 0::int 0::int)
-#625 := (or #522 #495)
-#832 := (not #625)
-#506 := (or #832 #838)
-#507 := (ite #506 #518 #519)
-#840 := (= 3::int 0::int)
-#841 := (= 0::int 0::int)
-#842 := (or #841 #840)
-#837 := (ite #842 #839 #507)
-#681 := (or #680 #837)
-#683 := (iff #681 #673)
-#685 := (iff #673 #673)
-#778 := [rewrite]: #685
-#677 := (iff #837 #839)
-#1 := true
-#678 := (ite true #839 #839)
-#777 := (iff #678 #839)
-#662 := [rewrite]: #777
-#773 := (iff #837 #678)
-#628 := (iff #507 #839)
-#782 := (ite false #839 #839)
-#668 := (iff #782 #839)
-#669 := [rewrite]: #668
-#785 := (iff #507 #782)
-#783 := (iff #519 #839)
-#780 := (= #508 #54)
-#799 := (+ #54 0::int)
-#796 := (= #799 #54)
-#797 := [rewrite]: #796
-#626 := (= #508 #799)
-#795 := (= #517 0::int)
-#805 := (= #515 0::int)
-#809 := [rewrite]: #805
-#794 := (= #517 #515)
-#787 := (= #516 0::int)
-#645 := -3::int
-#789 := (div 0::int -3::int)
-#792 := (= #789 0::int)
-#786 := [rewrite]: #792
-#790 := (= #516 #789)
-#646 := (= #430 -3::int)
-#647 := [rewrite]: #646
-#791 := [monotonicity #809 #647]: #790
-#793 := [trans #791 #786]: #787
-#788 := [monotonicity #793]: #794
-#624 := [trans #788 #809]: #795
-#627 := [monotonicity #624]: #626
-#781 := [trans #627 #797]: #780
-#784 := [monotonicity #781]: #783
-#798 := (iff #518 #839)
-#802 := (= #521 #54)
-#800 := (= #521 #799)
-#806 := (= #448 0::int)
-#808 := (= #448 #515)
-#529 := (= #520 0::int)
-#807 := [rewrite]: #529
-#523 := [monotonicity #807]: #808
-#810 := [trans #523 #809]: #806
-#801 := [monotonicity #810]: #800
-#803 := [trans #801 #797]: #802
-#804 := [monotonicity #803]: #798
-#527 := (iff #506 false)
-#811 := (or false false)
-#816 := (iff #811 false)
-#526 := [rewrite]: #816
-#815 := (iff #506 #811)
-#536 := (iff #838 false)
-#829 := (not true)
-#830 := (iff #829 false)
-#828 := [rewrite]: #830
-#813 := (iff #838 #829)
-#543 := (iff #836 true)
-#834 := (or true false)
-#478 := (iff #834 true)
-#819 := [rewrite]: #478
-#541 := (iff #836 #834)
-#484 := (iff #522 false)
-#485 := [rewrite]: #484
-#818 := (iff #501 true)
-#540 := [rewrite]: #818
-#542 := [monotonicity #540 #485]: #541
-#436 := [trans #542 #819]: #543
-#814 := [monotonicity #436]: #813
-#537 := [trans #814 #828]: #536
-#831 := (iff #832 false)
-#469 := (iff #832 #829)
-#464 := (iff #625 true)
-#823 := (or false true)
-#820 := (iff #823 true)
-#826 := [rewrite]: #820
-#824 := (iff #625 #823)
-#821 := (iff #495 true)
-#822 := [rewrite]: #821
-#825 := [monotonicity #485 #822]: #824
-#827 := [trans #825 #826]: #464
-#470 := [monotonicity #827]: #469
-#817 := [trans #470 #828]: #831
-#812 := [monotonicity #817 #537]: #815
-#528 := [trans #812 #526]: #527
-#667 := [monotonicity #528 #804 #784]: #785
-#776 := [trans #667 #669]: #628
-#482 := (iff #842 true)
-#494 := (iff #842 #834)
-#493 := (iff #840 false)
-#498 := [rewrite]: #493
-#843 := (iff #841 true)
-#833 := [rewrite]: #843
-#835 := [monotonicity #833 #498]: #494
-#483 := [trans #835 #819]: #482
-#774 := [monotonicity #483 #776]: #773
-#679 := [trans #774 #662]: #677
-#684 := [monotonicity #679]: #683
-#775 := [trans #684 #778]: #683
-#682 := [quant-inst]: #681
-#779 := [mp #682 #775]: #673
-#691 := [unit-resolution #779 #850]: #839
-#692 := [monotonicity #691]: #57
-#58 := (not #57)
-#270 := [asserted]: #58
-[unit-resolution #270 #692]: false
-unsat
-2c035401970833955895c9fd35464fade49dcbf1 313 0
+79a0fde07c4517bfcd8cf389acc12b7fcaddd64c 313 0
 #2 := false
 decl f5 :: (-> int S2)
 #11 := 0::int
@@ -16518,7 +16229,296 @@
 #271 := [asserted]: #59
 [unit-resolution #271 #702]: false
 unsat
-ed1dcbda8b48a8192bb34e0311b0082775d33ed7 302 0
+b6098bbff5fba6e8ac8e634e284360adde41d954 288 0
+#2 := false
+decl f5 :: (-> int S2)
+#11 := 0::int
+#56 := (f5 0::int)
+decl f3 :: (-> int int int)
+#53 := 3::int
+#54 := (f3 0::int 3::int)
+#55 := (f5 #54)
+#57 := (= #55 #56)
+#839 := (= #54 0::int)
+#9 := (:var 0 int)
+#8 := (:var 1 int)
+#10 := (f3 #8 #9)
+#844 := (pattern #10)
+#82 := -1::int
+#86 := (* -1::int #9)
+#83 := (* -1::int #8)
+#89 := (div #83 #86)
+#346 := (* -1::int #89)
+#347 := (+ #10 #346)
+#348 := (= #347 0::int)
+#21 := (div #8 #9)
+#343 := (* -1::int #21)
+#344 := (+ #10 #343)
+#345 := (= #344 0::int)
+#108 := (<= #9 0::int)
+#104 := (<= #8 0::int)
+#301 := (or #104 #108)
+#302 := (not #301)
+#115 := (>= #8 0::int)
+#284 := (or #108 #115)
+#285 := (not #284)
+#308 := (or #285 #302)
+#349 := (ite #308 #345 #348)
+#342 := (= #10 0::int)
+#13 := (= #9 0::int)
+#12 := (= #8 0::int)
+#14 := (or #12 #13)
+#350 := (ite #14 #342 #349)
+#845 := (forall (vars (?v0 int) (?v1 int)) (:pat #844) #350)
+#353 := (forall (vars (?v0 int) (?v1 int)) #350)
+#848 := (iff #353 #845)
+#846 := (iff #350 #350)
+#847 := [refl]: #846
+#849 := [quant-intro #847]: #848
+#313 := (ite #308 #21 #89)
+#316 := (ite #14 0::int #313)
+#319 := (= #10 #316)
+#322 := (forall (vars (?v0 int) (?v1 int)) #319)
+#354 := (iff #322 #353)
+#351 := (iff #319 #350)
+#352 := [rewrite]: #351
+#355 := [quant-intro #352]: #354
+#116 := (not #115)
+#109 := (not #108)
+#119 := (and #109 #116)
+#105 := (not #104)
+#112 := (and #105 #109)
+#122 := (or #112 #119)
+#125 := (ite #122 #21 #89)
+#128 := (ite #14 0::int #125)
+#131 := (= #10 #128)
+#134 := (forall (vars (?v0 int) (?v1 int)) #131)
+#323 := (iff #134 #322)
+#320 := (iff #131 #319)
+#317 := (= #128 #316)
+#314 := (= #125 #313)
+#311 := (iff #122 #308)
+#305 := (or #302 #285)
+#309 := (iff #305 #308)
+#310 := [rewrite]: #309
+#306 := (iff #122 #305)
+#303 := (iff #119 #285)
+#304 := [rewrite]: #303
+#282 := (iff #112 #302)
+#283 := [rewrite]: #282
+#307 := [monotonicity #283 #304]: #306
+#312 := [trans #307 #310]: #311
+#315 := [monotonicity #312]: #314
+#318 := [monotonicity #315]: #317
+#321 := [monotonicity #318]: #320
+#324 := [quant-intro #321]: #323
+#288 := (~ #134 #134)
+#286 := (~ #131 #131)
+#287 := [refl]: #286
+#289 := [nnf-pos #287]: #288
+#23 := (- #9)
+#22 := (- #8)
+#24 := (div #22 #23)
+#16 := (< 0::int #9)
+#18 := (< #8 0::int)
+#19 := (and #18 #16)
+#15 := (< 0::int #8)
+#17 := (and #15 #16)
+#20 := (or #17 #19)
+#25 := (ite #20 #21 #24)
+#26 := (ite #14 0::int #25)
+#27 := (= #10 #26)
+#28 := (forall (vars (?v0 int) (?v1 int)) #27)
+#137 := (iff #28 #134)
+#76 := (and #16 #18)
+#79 := (or #17 #76)
+#92 := (ite #79 #21 #89)
+#95 := (ite #14 0::int #92)
+#98 := (= #10 #95)
+#101 := (forall (vars (?v0 int) (?v1 int)) #98)
+#135 := (iff #101 #134)
+#132 := (iff #98 #131)
+#129 := (= #95 #128)
+#126 := (= #92 #125)
+#123 := (iff #79 #122)
+#120 := (iff #76 #119)
+#117 := (iff #18 #116)
+#118 := [rewrite]: #117
+#110 := (iff #16 #109)
+#111 := [rewrite]: #110
+#121 := [monotonicity #111 #118]: #120
+#113 := (iff #17 #112)
+#106 := (iff #15 #105)
+#107 := [rewrite]: #106
+#114 := [monotonicity #107 #111]: #113
+#124 := [monotonicity #114 #121]: #123
+#127 := [monotonicity #124]: #126
+#130 := [monotonicity #127]: #129
+#133 := [monotonicity #130]: #132
+#136 := [quant-intro #133]: #135
+#102 := (iff #28 #101)
+#99 := (iff #27 #98)
+#96 := (= #26 #95)
+#93 := (= #25 #92)
+#90 := (= #24 #89)
+#87 := (= #23 #86)
+#88 := [rewrite]: #87
+#84 := (= #22 #83)
+#85 := [rewrite]: #84
+#91 := [monotonicity #85 #88]: #90
+#80 := (iff #20 #79)
+#77 := (iff #19 #76)
+#78 := [rewrite]: #77
+#81 := [monotonicity #78]: #80
+#94 := [monotonicity #81 #91]: #93
+#97 := [monotonicity #94]: #96
+#100 := [monotonicity #97]: #99
+#103 := [quant-intro #100]: #102
+#138 := [trans #103 #136]: #137
+#75 := [asserted]: #28
+#139 := [mp #75 #138]: #134
+#273 := [mp~ #139 #289]: #134
+#325 := [mp #273 #324]: #322
+#356 := [mp #325 #355]: #353
+#850 := [mp #356 #849]: #845
+#680 := (not #845)
+#673 := (or #680 #839)
+#430 := (* -1::int 3::int)
+#515 := (* -1::int 0::int)
+#516 := (div #515 #430)
+#517 := (* -1::int #516)
+#508 := (+ #54 #517)
+#519 := (= #508 0::int)
+#520 := (div 0::int 3::int)
+#448 := (* -1::int #520)
+#521 := (+ #54 #448)
+#518 := (= #521 0::int)
+#522 := (<= 3::int 0::int)
+#501 := (<= 0::int 0::int)
+#836 := (or #501 #522)
+#838 := (not #836)
+#495 := (>= 0::int 0::int)
+#625 := (or #522 #495)
+#832 := (not #625)
+#506 := (or #832 #838)
+#507 := (ite #506 #518 #519)
+#840 := (= 3::int 0::int)
+#841 := (= 0::int 0::int)
+#842 := (or #841 #840)
+#837 := (ite #842 #839 #507)
+#681 := (or #680 #837)
+#683 := (iff #681 #673)
+#685 := (iff #673 #673)
+#778 := [rewrite]: #685
+#677 := (iff #837 #839)
+#1 := true
+#678 := (ite true #839 #839)
+#777 := (iff #678 #839)
+#662 := [rewrite]: #777
+#773 := (iff #837 #678)
+#628 := (iff #507 #839)
+#782 := (ite false #839 #839)
+#668 := (iff #782 #839)
+#669 := [rewrite]: #668
+#785 := (iff #507 #782)
+#783 := (iff #519 #839)
+#780 := (= #508 #54)
+#799 := (+ #54 0::int)
+#796 := (= #799 #54)
+#797 := [rewrite]: #796
+#626 := (= #508 #799)
+#795 := (= #517 0::int)
+#805 := (= #515 0::int)
+#809 := [rewrite]: #805
+#794 := (= #517 #515)
+#787 := (= #516 0::int)
+#645 := -3::int
+#789 := (div 0::int -3::int)
+#792 := (= #789 0::int)
+#786 := [rewrite]: #792
+#790 := (= #516 #789)
+#646 := (= #430 -3::int)
+#647 := [rewrite]: #646
+#791 := [monotonicity #809 #647]: #790
+#793 := [trans #791 #786]: #787
+#788 := [monotonicity #793]: #794
+#624 := [trans #788 #809]: #795
+#627 := [monotonicity #624]: #626
+#781 := [trans #627 #797]: #780
+#784 := [monotonicity #781]: #783
+#798 := (iff #518 #839)
+#802 := (= #521 #54)
+#800 := (= #521 #799)
+#806 := (= #448 0::int)
+#808 := (= #448 #515)
+#529 := (= #520 0::int)
+#807 := [rewrite]: #529
+#523 := [monotonicity #807]: #808
+#810 := [trans #523 #809]: #806
+#801 := [monotonicity #810]: #800
+#803 := [trans #801 #797]: #802
+#804 := [monotonicity #803]: #798
+#527 := (iff #506 false)
+#811 := (or false false)
+#816 := (iff #811 false)
+#526 := [rewrite]: #816
+#815 := (iff #506 #811)
+#536 := (iff #838 false)
+#829 := (not true)
+#830 := (iff #829 false)
+#828 := [rewrite]: #830
+#813 := (iff #838 #829)
+#543 := (iff #836 true)
+#834 := (or true false)
+#478 := (iff #834 true)
+#819 := [rewrite]: #478
+#541 := (iff #836 #834)
+#484 := (iff #522 false)
+#485 := [rewrite]: #484
+#818 := (iff #501 true)
+#540 := [rewrite]: #818
+#542 := [monotonicity #540 #485]: #541
+#436 := [trans #542 #819]: #543
+#814 := [monotonicity #436]: #813
+#537 := [trans #814 #828]: #536
+#831 := (iff #832 false)
+#469 := (iff #832 #829)
+#464 := (iff #625 true)
+#823 := (or false true)
+#820 := (iff #823 true)
+#826 := [rewrite]: #820
+#824 := (iff #625 #823)
+#821 := (iff #495 true)
+#822 := [rewrite]: #821
+#825 := [monotonicity #485 #822]: #824
+#827 := [trans #825 #826]: #464
+#470 := [monotonicity #827]: #469
+#817 := [trans #470 #828]: #831
+#812 := [monotonicity #817 #537]: #815
+#528 := [trans #812 #526]: #527
+#667 := [monotonicity #528 #804 #784]: #785
+#776 := [trans #667 #669]: #628
+#482 := (iff #842 true)
+#494 := (iff #842 #834)
+#493 := (iff #840 false)
+#498 := [rewrite]: #493
+#843 := (iff #841 true)
+#833 := [rewrite]: #843
+#835 := [monotonicity #833 #498]: #494
+#483 := [trans #835 #819]: #482
+#774 := [monotonicity #483 #776]: #773
+#679 := [trans #774 #662]: #677
+#684 := [monotonicity #679]: #683
+#775 := [trans #684 #778]: #683
+#682 := [quant-inst]: #681
+#779 := [mp #682 #775]: #673
+#691 := [unit-resolution #779 #850]: #839
+#692 := [monotonicity #691]: #57
+#58 := (not #57)
+#270 := [asserted]: #58
+[unit-resolution #270 #692]: false
+unsat
+86ae6406add6790c99d1c1c3b3a6bf3c60c7e019 302 0
 #2 := false
 decl f5 :: (-> int S2)
 #11 := 0::int
@@ -16821,7 +16821,7 @@
 #271 := [asserted]: #59
 [unit-resolution #271 #702]: false
 unsat
-80ae46a7e9c57ab25c6d7a036d7583b3c508d2eb 447 0
+0aa64721f85c4c9c0df00c84259b25141ea1f07e 447 0
 #2 := false
 #11 := 0::int
 decl f6 :: (-> S2 int)
@@ -17269,7 +17269,7 @@
 #639 := [th-lemma]: #638
 [unit-resolution #639 #637 #636 #660]: false
 unsat
-8f1427496ff61632aac173e792df93e6d2f8fec2 292 0
+a2a1b7b5735fca4ed872e71176348b8f63dcb65b 292 0
 #2 := false
 decl f5 :: (-> int S2)
 #56 := 1::int
@@ -17562,7 +17562,313 @@
 #271 := [asserted]: #59
 [unit-resolution #271 #701]: false
 unsat
-d3447cf6898d788767aea97d325e514adc5f9e24 538 0
+5c15f7e076aa5690517f22531eb4e4a8a733ed8e 305 0
+#2 := false
+decl f5 :: (-> int S2)
+#11 := 0::int
+#56 := (f5 0::int)
+decl f4 :: (-> int int int)
+#53 := 3::int
+#54 := (f4 0::int 3::int)
+#55 := (f5 #54)
+#57 := (= #55 #56)
+#507 := (= #54 0::int)
+#9 := (:var 0 int)
+#8 := (:var 1 int)
+#29 := (f4 #8 #9)
+#851 := (pattern #29)
+#82 := -1::int
+#86 := (* -1::int #9)
+#83 := (* -1::int #8)
+#141 := (mod #83 #86)
+#362 := (+ #29 #141)
+#363 := (= #362 0::int)
+#30 := (mod #8 #9)
+#359 := (* -1::int #30)
+#360 := (+ #29 #359)
+#361 := (= #360 0::int)
+#108 := (<= #9 0::int)
+#104 := (<= #8 0::int)
+#301 := (or #104 #108)
+#302 := (not #301)
+#115 := (>= #8 0::int)
+#284 := (or #108 #115)
+#285 := (not #284)
+#308 := (or #285 #302)
+#364 := (ite #308 #361 #363)
+#358 := (= #29 0::int)
+#12 := (= #8 0::int)
+#365 := (ite #12 #358 #364)
+#357 := (= #8 #29)
+#13 := (= #9 0::int)
+#366 := (ite #13 #357 #365)
+#852 := (forall (vars (?v0 int) (?v1 int)) (:pat #851) #366)
+#369 := (forall (vars (?v0 int) (?v1 int)) #366)
+#855 := (iff #369 #852)
+#853 := (iff #366 #366)
+#854 := [refl]: #853
+#856 := [quant-intro #854]: #855
+#147 := (* -1::int #141)
+#326 := (ite #308 #30 #147)
+#329 := (ite #12 0::int #326)
+#332 := (ite #13 #8 #329)
+#335 := (= #29 #332)
+#338 := (forall (vars (?v0 int) (?v1 int)) #335)
+#370 := (iff #338 #369)
+#367 := (iff #335 #366)
+#368 := [rewrite]: #367
+#371 := [quant-intro #368]: #370
+#116 := (not #115)
+#109 := (not #108)
+#119 := (and #109 #116)
+#105 := (not #104)
+#112 := (and #105 #109)
+#122 := (or #112 #119)
+#167 := (ite #122 #30 #147)
+#170 := (ite #12 0::int #167)
+#173 := (ite #13 #8 #170)
+#176 := (= #29 #173)
+#179 := (forall (vars (?v0 int) (?v1 int)) #176)
+#339 := (iff #179 #338)
+#336 := (iff #176 #335)
+#333 := (= #173 #332)
+#330 := (= #170 #329)
+#327 := (= #167 #326)
+#311 := (iff #122 #308)
+#305 := (or #302 #285)
+#309 := (iff #305 #308)
+#310 := [rewrite]: #309
+#306 := (iff #122 #305)
+#303 := (iff #119 #285)
+#304 := [rewrite]: #303
+#282 := (iff #112 #302)
+#283 := [rewrite]: #282
+#307 := [monotonicity #283 #304]: #306
+#312 := [trans #307 #310]: #311
+#328 := [monotonicity #312]: #327
+#331 := [monotonicity #328]: #330
+#334 := [monotonicity #331]: #333
+#337 := [monotonicity #334]: #336
+#340 := [quant-intro #337]: #339
+#274 := (~ #179 #179)
+#271 := (~ #176 #176)
+#290 := [refl]: #271
+#275 := [nnf-pos #290]: #274
+#23 := (- #9)
+#22 := (- #8)
+#31 := (mod #22 #23)
+#32 := (- #31)
+#16 := (< 0::int #9)
+#18 := (< #8 0::int)
+#19 := (and #18 #16)
+#15 := (< 0::int #8)
+#17 := (and #15 #16)
+#20 := (or #17 #19)
+#33 := (ite #20 #30 #32)
+#34 := (ite #12 0::int #33)
+#35 := (ite #13 #8 #34)
+#36 := (= #29 #35)
+#37 := (forall (vars (?v0 int) (?v1 int)) #36)
+#182 := (iff #37 #179)
+#76 := (and #16 #18)
+#79 := (or #17 #76)
+#152 := (ite #79 #30 #147)
+#155 := (ite #12 0::int #152)
+#158 := (ite #13 #8 #155)
+#161 := (= #29 #158)
+#164 := (forall (vars (?v0 int) (?v1 int)) #161)
+#180 := (iff #164 #179)
+#177 := (iff #161 #176)
+#174 := (= #158 #173)
+#171 := (= #155 #170)
+#168 := (= #152 #167)
+#123 := (iff #79 #122)
+#120 := (iff #76 #119)
+#117 := (iff #18 #116)
+#118 := [rewrite]: #117
+#110 := (iff #16 #109)
+#111 := [rewrite]: #110
+#121 := [monotonicity #111 #118]: #120
+#113 := (iff #17 #112)
+#106 := (iff #15 #105)
+#107 := [rewrite]: #106
+#114 := [monotonicity #107 #111]: #113
+#124 := [monotonicity #114 #121]: #123
+#169 := [monotonicity #124]: #168
+#172 := [monotonicity #169]: #171
+#175 := [monotonicity #172]: #174
+#178 := [monotonicity #175]: #177
+#181 := [quant-intro #178]: #180
+#165 := (iff #37 #164)
+#162 := (iff #36 #161)
+#159 := (= #35 #158)
+#156 := (= #34 #155)
+#153 := (= #33 #152)
+#150 := (= #32 #147)
+#144 := (- #141)
+#148 := (= #144 #147)
+#149 := [rewrite]: #148
+#145 := (= #32 #144)
+#142 := (= #31 #141)
+#87 := (= #23 #86)
+#88 := [rewrite]: #87
+#84 := (= #22 #83)
+#85 := [rewrite]: #84
+#143 := [monotonicity #85 #88]: #142
+#146 := [monotonicity #143]: #145
+#151 := [trans #146 #149]: #150
+#80 := (iff #20 #79)
+#77 := (iff #19 #76)
+#78 := [rewrite]: #77
+#81 := [monotonicity #78]: #80
+#154 := [monotonicity #81 #151]: #153
+#157 := [monotonicity #154]: #156
+#160 := [monotonicity #157]: #159
+#163 := [monotonicity #160]: #162
+#166 := [quant-intro #163]: #165
+#183 := [trans #166 #181]: #182
+#140 := [asserted]: #37
+#184 := [mp #140 #183]: #179
+#291 := [mp~ #184 #275]: #179
+#341 := [mp #291 #340]: #338
+#372 := [mp #341 #371]: #369
+#857 := [mp #372 #856]: #852
+#677 := (not #852)
+#679 := (or #677 #507)
+#430 := (* -1::int 3::int)
+#515 := (* -1::int 0::int)
+#516 := (mod #515 #430)
+#517 := (+ #54 #516)
+#508 := (= #517 0::int)
+#519 := (mod 0::int 3::int)
+#520 := (* -1::int #519)
+#448 := (+ #54 #520)
+#521 := (= #448 0::int)
+#518 := (<= 3::int 0::int)
+#522 := (<= 0::int 0::int)
+#501 := (or #522 #518)
+#836 := (not #501)
+#838 := (>= 0::int 0::int)
+#495 := (or #518 #838)
+#625 := (not #495)
+#832 := (or #625 #836)
+#506 := (ite #832 #521 #508)
+#839 := (= 0::int 0::int)
+#840 := (ite #839 #507 #506)
+#841 := (= 0::int #54)
+#842 := (= 3::int 0::int)
+#837 := (ite #842 #841 #840)
+#680 := (or #677 #837)
+#681 := (iff #680 #679)
+#683 := (iff #679 #679)
+#684 := [rewrite]: #683
+#777 := (iff #837 #507)
+#626 := (ite false #507 #507)
+#781 := (iff #626 #507)
+#783 := [rewrite]: #781
+#773 := (iff #837 #626)
+#776 := (iff #840 #507)
+#1 := true
+#785 := (ite true #507 #507)
+#669 := (iff #785 #507)
+#628 := [rewrite]: #669
+#667 := (iff #840 #785)
+#784 := (iff #506 #507)
+#627 := (iff #506 #626)
+#795 := (iff #508 #507)
+#794 := (= #517 #54)
+#806 := (+ #54 0::int)
+#800 := (= #806 #54)
+#801 := [rewrite]: #800
+#787 := (= #517 #806)
+#792 := (= #516 0::int)
+#798 := -3::int
+#646 := (mod 0::int -3::int)
+#790 := (= #646 0::int)
+#791 := [rewrite]: #790
+#647 := (= #516 #646)
+#804 := (= #430 -3::int)
+#645 := [rewrite]: #804
+#808 := (= #515 0::int)
+#523 := [rewrite]: #808
+#789 := [monotonicity #523 #645]: #647
+#786 := [trans #789 #791]: #792
+#793 := [monotonicity #786]: #787
+#788 := [trans #793 #801]: #794
+#624 := [monotonicity #788]: #795
+#802 := (iff #521 #507)
+#796 := (= #448 #54)
+#810 := (= #448 #806)
+#805 := (= #520 0::int)
+#529 := (= #520 #515)
+#527 := (= #519 0::int)
+#528 := [rewrite]: #527
+#807 := [monotonicity #528]: #529
+#809 := [trans #807 #523]: #805
+#799 := [monotonicity #809]: #810
+#797 := [trans #799 #801]: #796
+#803 := [monotonicity #797]: #802
+#816 := (iff #832 false)
+#536 := (or false false)
+#815 := (iff #536 false)
+#812 := [rewrite]: #815
+#537 := (iff #832 #536)
+#813 := (iff #836 false)
+#825 := (not true)
+#464 := (iff #825 false)
+#827 := [rewrite]: #464
+#543 := (iff #836 #825)
+#541 := (iff #501 true)
+#828 := (or true false)
+#818 := (iff #828 true)
+#540 := [rewrite]: #818
+#831 := (iff #501 #828)
+#835 := (iff #518 false)
+#478 := [rewrite]: #835
+#470 := (iff #522 true)
+#830 := [rewrite]: #470
+#817 := [monotonicity #830 #478]: #831
+#542 := [trans #817 #540]: #541
+#436 := [monotonicity #542]: #543
+#814 := [trans #436 #827]: #813
+#829 := (iff #625 false)
+#820 := (iff #625 #825)
+#823 := (iff #495 true)
+#483 := (or false true)
+#821 := (iff #483 true)
+#822 := [rewrite]: #821
+#484 := (iff #495 #483)
+#819 := (iff #838 true)
+#482 := [rewrite]: #819
+#485 := [monotonicity #478 #482]: #484
+#824 := [trans #485 #822]: #823
+#826 := [monotonicity #824]: #820
+#469 := [trans #826 #827]: #829
+#811 := [monotonicity #469 #814]: #537
+#526 := [trans #811 #812]: #816
+#780 := [monotonicity #526 #803 #624]: #627
+#782 := [trans #780 #783]: #784
+#834 := (iff #839 true)
+#494 := [rewrite]: #834
+#668 := [monotonicity #494 #782]: #667
+#678 := [trans #668 #628]: #776
+#493 := (iff #841 #507)
+#498 := [rewrite]: #493
+#843 := (iff #842 false)
+#833 := [rewrite]: #843
+#774 := [monotonicity #833 #498 #678]: #773
+#662 := [trans #774 #783]: #777
+#682 := [monotonicity #662]: #681
+#685 := [trans #682 #684]: #681
+#673 := [quant-inst]: #680
+#778 := [mp #673 #685]: #679
+#713 := [unit-resolution #778 #857]: #507
+#709 := [monotonicity #713]: #57
+#58 := (not #57)
+#270 := [asserted]: #58
+[unit-resolution #270 #709]: false
+unsat
+8c2d3e4568510c293138be5f353975b23e5bdc6e 538 0
 #2 := false
 #11 := 0::int
 decl f6 :: (-> S2 int)
@@ -18101,98 +18407,99 @@
 #593 := [trans #591 #608]: #781
 [unit-resolution #661 #593]: false
 unsat
-124e92a80da0b0c9c6ea2fb487ed064cc0c65420 305 0
+6dd67c9a5af172ae1a01724c38372069dc3347ac 328 0
 #2 := false
 decl f5 :: (-> int S2)
-#11 := 0::int
-#56 := (f5 0::int)
+#53 := 1::int
+#57 := (f5 1::int)
 decl f4 :: (-> int int int)
-#53 := 3::int
-#54 := (f4 0::int 3::int)
-#55 := (f5 #54)
-#57 := (= #55 #56)
-#507 := (= #54 0::int)
+#54 := 3::int
+#55 := (f4 1::int 3::int)
+#56 := (f5 #55)
+#58 := (= #56 #57)
+#834 := (= #55 1::int)
 #9 := (:var 0 int)
 #8 := (:var 1 int)
 #29 := (f4 #8 #9)
 #851 := (pattern #29)
-#82 := -1::int
-#86 := (* -1::int #9)
-#83 := (* -1::int #8)
-#141 := (mod #83 #86)
-#362 := (+ #29 #141)
-#363 := (= #362 0::int)
+#11 := 0::int
+#83 := -1::int
+#87 := (* -1::int #9)
+#84 := (* -1::int #8)
+#142 := (mod #84 #87)
+#363 := (+ #29 #142)
+#364 := (= #363 0::int)
 #30 := (mod #8 #9)
-#359 := (* -1::int #30)
-#360 := (+ #29 #359)
-#361 := (= #360 0::int)
-#108 := (<= #9 0::int)
-#104 := (<= #8 0::int)
-#301 := (or #104 #108)
-#302 := (not #301)
-#115 := (>= #8 0::int)
-#284 := (or #108 #115)
-#285 := (not #284)
-#308 := (or #285 #302)
-#364 := (ite #308 #361 #363)
-#358 := (= #29 0::int)
-#12 := (= #8 0::int)
-#365 := (ite #12 #358 #364)
-#357 := (= #8 #29)
-#13 := (= #9 0::int)
-#366 := (ite #13 #357 #365)
-#852 := (forall (vars (?v0 int) (?v1 int)) (:pat #851) #366)
-#369 := (forall (vars (?v0 int) (?v1 int)) #366)
-#855 := (iff #369 #852)
-#853 := (iff #366 #366)
+#360 := (* -1::int #30)
+#361 := (+ #29 #360)
+#362 := (= #361 0::int)
+#109 := (<= #9 0::int)
+#105 := (<= #8 0::int)
+#302 := (or #105 #109)
+#303 := (not #302)
+#116 := (>= #8 0::int)
+#285 := (or #109 #116)
+#286 := (not #285)
+#309 := (or #286 #303)
+#365 := (ite #309 #362 #364)
+#359 := (= #29 0::int)
+#12 := (= #8 0::int)
+#366 := (ite #12 #359 #365)
+#358 := (= #8 #29)
+#13 := (= #9 0::int)
+#367 := (ite #13 #358 #366)
+#852 := (forall (vars (?v0 int) (?v1 int)) (:pat #851) #367)
+#370 := (forall (vars (?v0 int) (?v1 int)) #367)
+#855 := (iff #370 #852)
+#853 := (iff #367 #367)
 #854 := [refl]: #853
 #856 := [quant-intro #854]: #855
-#147 := (* -1::int #141)
-#326 := (ite #308 #30 #147)
-#329 := (ite #12 0::int #326)
-#332 := (ite #13 #8 #329)
-#335 := (= #29 #332)
-#338 := (forall (vars (?v0 int) (?v1 int)) #335)
-#370 := (iff #338 #369)
-#367 := (iff #335 #366)
-#368 := [rewrite]: #367
-#371 := [quant-intro #368]: #370
-#116 := (not #115)
-#109 := (not #108)
-#119 := (and #109 #116)
-#105 := (not #104)
-#112 := (and #105 #109)
-#122 := (or #112 #119)
-#167 := (ite #122 #30 #147)
-#170 := (ite #12 0::int #167)
-#173 := (ite #13 #8 #170)
-#176 := (= #29 #173)
-#179 := (forall (vars (?v0 int) (?v1 int)) #176)
-#339 := (iff #179 #338)
-#336 := (iff #176 #335)
-#333 := (= #173 #332)
-#330 := (= #170 #329)
-#327 := (= #167 #326)
-#311 := (iff #122 #308)
-#305 := (or #302 #285)
-#309 := (iff #305 #308)
-#310 := [rewrite]: #309
-#306 := (iff #122 #305)
-#303 := (iff #119 #285)
-#304 := [rewrite]: #303
-#282 := (iff #112 #302)
-#283 := [rewrite]: #282
-#307 := [monotonicity #283 #304]: #306
-#312 := [trans #307 #310]: #311
-#328 := [monotonicity #312]: #327
-#331 := [monotonicity #328]: #330
-#334 := [monotonicity #331]: #333
-#337 := [monotonicity #334]: #336
-#340 := [quant-intro #337]: #339
-#274 := (~ #179 #179)
-#271 := (~ #176 #176)
-#290 := [refl]: #271
-#275 := [nnf-pos #290]: #274
+#148 := (* -1::int #142)
+#327 := (ite #309 #30 #148)
+#330 := (ite #12 0::int #327)
+#333 := (ite #13 #8 #330)
+#336 := (= #29 #333)
+#339 := (forall (vars (?v0 int) (?v1 int)) #336)
+#371 := (iff #339 #370)
+#368 := (iff #336 #367)
+#369 := [rewrite]: #368
+#372 := [quant-intro #369]: #371
+#117 := (not #116)
+#110 := (not #109)
+#120 := (and #110 #117)
+#106 := (not #105)
+#113 := (and #106 #110)
+#123 := (or #113 #120)
+#168 := (ite #123 #30 #148)
+#171 := (ite #12 0::int #168)
+#174 := (ite #13 #8 #171)
+#177 := (= #29 #174)
+#180 := (forall (vars (?v0 int) (?v1 int)) #177)
+#340 := (iff #180 #339)
+#337 := (iff #177 #336)
+#334 := (= #174 #333)
+#331 := (= #171 #330)
+#328 := (= #168 #327)
+#312 := (iff #123 #309)
+#306 := (or #303 #286)
+#310 := (iff #306 #309)
+#311 := [rewrite]: #310
+#307 := (iff #123 #306)
+#304 := (iff #120 #286)
+#305 := [rewrite]: #304
+#283 := (iff #113 #303)
+#284 := [rewrite]: #283
+#308 := [monotonicity #284 #305]: #307
+#313 := [trans #308 #311]: #312
+#329 := [monotonicity #313]: #328
+#332 := [monotonicity #329]: #331
+#335 := [monotonicity #332]: #334
+#338 := [monotonicity #335]: #337
+#341 := [quant-intro #338]: #340
+#275 := (~ #180 #180)
+#272 := (~ #177 #177)
+#291 := [refl]: #272
+#276 := [nnf-pos #291]: #275
 #23 := (- #9)
 #22 := (- #8)
 #31 := (mod #22 #23)
@@ -18208,206 +18515,228 @@
 #35 := (ite #13 #8 #34)
 #36 := (= #29 #35)
 #37 := (forall (vars (?v0 int) (?v1 int)) #36)
-#182 := (iff #37 #179)
-#76 := (and #16 #18)
-#79 := (or #17 #76)
-#152 := (ite #79 #30 #147)
-#155 := (ite #12 0::int #152)
-#158 := (ite #13 #8 #155)
-#161 := (= #29 #158)
-#164 := (forall (vars (?v0 int) (?v1 int)) #161)
-#180 := (iff #164 #179)
-#177 := (iff #161 #176)
-#174 := (= #158 #173)
-#171 := (= #155 #170)
-#168 := (= #152 #167)
-#123 := (iff #79 #122)
-#120 := (iff #76 #119)
-#117 := (iff #18 #116)
-#118 := [rewrite]: #117
-#110 := (iff #16 #109)
-#111 := [rewrite]: #110
-#121 := [monotonicity #111 #118]: #120
-#113 := (iff #17 #112)
-#106 := (iff #15 #105)
-#107 := [rewrite]: #106
-#114 := [monotonicity #107 #111]: #113
-#124 := [monotonicity #114 #121]: #123
-#169 := [monotonicity #124]: #168
-#172 := [monotonicity #169]: #171
-#175 := [monotonicity #172]: #174
-#178 := [monotonicity #175]: #177
-#181 := [quant-intro #178]: #180
-#165 := (iff #37 #164)
-#162 := (iff #36 #161)
-#159 := (= #35 #158)
-#156 := (= #34 #155)
-#153 := (= #33 #152)
-#150 := (= #32 #147)
-#144 := (- #141)
-#148 := (= #144 #147)
-#149 := [rewrite]: #148
-#145 := (= #32 #144)
-#142 := (= #31 #141)
-#87 := (= #23 #86)
-#88 := [rewrite]: #87
-#84 := (= #22 #83)
-#85 := [rewrite]: #84
-#143 := [monotonicity #85 #88]: #142
-#146 := [monotonicity #143]: #145
-#151 := [trans #146 #149]: #150
-#80 := (iff #20 #79)
-#77 := (iff #19 #76)
-#78 := [rewrite]: #77
-#81 := [monotonicity #78]: #80
-#154 := [monotonicity #81 #151]: #153
-#157 := [monotonicity #154]: #156
-#160 := [monotonicity #157]: #159
-#163 := [monotonicity #160]: #162
-#166 := [quant-intro #163]: #165
-#183 := [trans #166 #181]: #182
-#140 := [asserted]: #37
-#184 := [mp #140 #183]: #179
-#291 := [mp~ #184 #275]: #179
-#341 := [mp #291 #340]: #338
-#372 := [mp #341 #371]: #369
-#857 := [mp #372 #856]: #852
-#677 := (not #852)
-#679 := (or #677 #507)
-#430 := (* -1::int 3::int)
-#515 := (* -1::int 0::int)
-#516 := (mod #515 #430)
-#517 := (+ #54 #516)
+#183 := (iff #37 #180)
+#77 := (and #16 #18)
+#80 := (or #17 #77)
+#153 := (ite #80 #30 #148)
+#156 := (ite #12 0::int #153)
+#159 := (ite #13 #8 #156)
+#162 := (= #29 #159)
+#165 := (forall (vars (?v0 int) (?v1 int)) #162)
+#181 := (iff #165 #180)
+#178 := (iff #162 #177)
+#175 := (= #159 #174)
+#172 := (= #156 #171)
+#169 := (= #153 #168)
+#124 := (iff #80 #123)
+#121 := (iff #77 #120)
+#118 := (iff #18 #117)
+#119 := [rewrite]: #118
+#111 := (iff #16 #110)
+#112 := [rewrite]: #111
+#122 := [monotonicity #112 #119]: #121
+#114 := (iff #17 #113)
+#107 := (iff #15 #106)
+#108 := [rewrite]: #107
+#115 := [monotonicity #108 #112]: #114
+#125 := [monotonicity #115 #122]: #124
+#170 := [monotonicity #125]: #169
+#173 := [monotonicity #170]: #172
+#176 := [monotonicity #173]: #175
+#179 := [monotonicity #176]: #178
+#182 := [quant-intro #179]: #181
+#166 := (iff #37 #165)
+#163 := (iff #36 #162)
+#160 := (= #35 #159)
+#157 := (= #34 #156)
+#154 := (= #33 #153)
+#151 := (= #32 #148)
+#145 := (- #142)
+#149 := (= #145 #148)
+#150 := [rewrite]: #149
+#146 := (= #32 #145)
+#143 := (= #31 #142)
+#88 := (= #23 #87)
+#89 := [rewrite]: #88
+#85 := (= #22 #84)
+#86 := [rewrite]: #85
+#144 := [monotonicity #86 #89]: #143
+#147 := [monotonicity #144]: #146
+#152 := [trans #147 #150]: #151
+#81 := (iff #20 #80)
+#78 := (iff #19 #77)
+#79 := [rewrite]: #78
+#82 := [monotonicity #79]: #81
+#155 := [monotonicity #82 #152]: #154
+#158 := [monotonicity #155]: #157
+#161 := [monotonicity #158]: #160
+#164 := [monotonicity #161]: #163
+#167 := [quant-intro #164]: #166
+#184 := [trans #167 #182]: #183
+#141 := [asserted]: #37
+#185 := [mp #141 #184]: #180
+#292 := [mp~ #185 #276]: #180
+#342 := [mp #292 #341]: #339
+#373 := [mp #342 #372]: #370
+#857 := [mp #373 #856]: #852
+#762 := (not #852)
+#763 := (or #762 #834)
+#431 := (* -1::int 3::int)
+#515 := (* -1::int 1::int)
+#516 := (mod #515 #431)
+#517 := (+ #55 #516)
 #508 := (= #517 0::int)
-#519 := (mod 0::int 3::int)
+#519 := (mod 1::int 3::int)
 #520 := (* -1::int #519)
-#448 := (+ #54 #520)
-#521 := (= #448 0::int)
-#518 := (<= 3::int 0::int)
-#522 := (<= 0::int 0::int)
-#501 := (or #522 #518)
-#836 := (not #501)
-#838 := (>= 0::int 0::int)
-#495 := (or #518 #838)
-#625 := (not #495)
-#832 := (or #625 #836)
-#506 := (ite #832 #521 #508)
-#839 := (= 0::int 0::int)
-#840 := (ite #839 #507 #506)
-#841 := (= 0::int #54)
-#842 := (= 3::int 0::int)
-#837 := (ite #842 #841 #840)
-#680 := (or #677 #837)
-#681 := (iff #680 #679)
-#683 := (iff #679 #679)
-#684 := [rewrite]: #683
-#777 := (iff #837 #507)
-#626 := (ite false #507 #507)
-#781 := (iff #626 #507)
-#783 := [rewrite]: #781
-#773 := (iff #837 #626)
-#776 := (iff #840 #507)
-#1 := true
-#785 := (ite true #507 #507)
-#669 := (iff #785 #507)
-#628 := [rewrite]: #669
-#667 := (iff #840 #785)
-#784 := (iff #506 #507)
-#627 := (iff #506 #626)
-#795 := (iff #508 #507)
-#794 := (= #517 #54)
-#806 := (+ #54 0::int)
-#800 := (= #806 #54)
-#801 := [rewrite]: #800
-#787 := (= #517 #806)
-#792 := (= #516 0::int)
-#798 := -3::int
-#646 := (mod 0::int -3::int)
-#790 := (= #646 0::int)
-#791 := [rewrite]: #790
-#647 := (= #516 #646)
-#804 := (= #430 -3::int)
-#645 := [rewrite]: #804
-#808 := (= #515 0::int)
-#523 := [rewrite]: #808
-#789 := [monotonicity #523 #645]: #647
-#786 := [trans #789 #791]: #792
-#793 := [monotonicity #786]: #787
-#788 := [trans #793 #801]: #794
-#624 := [monotonicity #788]: #795
-#802 := (iff #521 #507)
-#796 := (= #448 #54)
-#810 := (= #448 #806)
-#805 := (= #520 0::int)
-#529 := (= #520 #515)
-#527 := (= #519 0::int)
-#528 := [rewrite]: #527
-#807 := [monotonicity #528]: #529
-#809 := [trans #807 #523]: #805
-#799 := [monotonicity #809]: #810
-#797 := [trans #799 #801]: #796
-#803 := [monotonicity #797]: #802
-#816 := (iff #832 false)
-#536 := (or false false)
-#815 := (iff #536 false)
-#812 := [rewrite]: #815
-#537 := (iff #832 #536)
-#813 := (iff #836 false)
-#825 := (not true)
-#464 := (iff #825 false)
-#827 := [rewrite]: #464
-#543 := (iff #836 #825)
-#541 := (iff #501 true)
-#828 := (or true false)
-#818 := (iff #828 true)
-#540 := [rewrite]: #818
-#831 := (iff #501 #828)
-#835 := (iff #518 false)
+#521 := (+ #55 #520)
+#518 := (= #521 0::int)
+#522 := (<= 3::int 0::int)
+#501 := (<= 1::int 0::int)
+#836 := (or #501 #522)
+#838 := (not #836)
+#495 := (>= 1::int 0::int)
+#625 := (or #522 #495)
+#832 := (not #625)
+#506 := (or #832 #838)
+#507 := (ite #506 #518 #508)
+#839 := (= #55 0::int)
+#840 := (= 1::int 0::int)
+#841 := (ite #840 #839 #507)
+#842 := (= 1::int #55)
+#837 := (= 3::int 0::int)
+#843 := (ite #837 #842 #841)
+#764 := (or #762 #843)
+#765 := (iff #764 #763)
+#750 := (iff #763 #763)
+#752 := [rewrite]: #750
+#772 := (iff #843 #834)
+#759 := (ite false #834 #834)
+#771 := (iff #759 #834)
+#767 := [rewrite]: #771
+#769 := (iff #843 #759)
+#760 := (iff #841 #834)
+#778 := (ite false #839 #834)
+#766 := (iff #778 #834)
+#768 := [rewrite]: #766
+#775 := (iff #841 #778)
+#684 := (iff #507 #834)
+#773 := -2::int
+#774 := (= #55 -2::int)
+#1 := true
+#680 := (ite true #834 #774)
+#682 := (iff #680 #834)
+#683 := [rewrite]: #682
+#673 := (iff #507 #680)
+#677 := (iff #508 #774)
+#795 := 2::int
+#782 := (+ 2::int #55)
+#628 := (= #782 0::int)
+#777 := (iff #628 #774)
+#662 := [rewrite]: #777
+#776 := (iff #508 #628)
+#668 := (= #517 #782)
+#781 := (+ #55 2::int)
+#785 := (= #781 #782)
+#667 := [rewrite]: #785
+#783 := (= #517 #781)
+#627 := (= #516 2::int)
+#792 := -3::int
+#793 := (mod -1::int -3::int)
+#624 := (= #793 2::int)
+#626 := [rewrite]: #624
+#794 := (= #516 #793)
+#786 := (= #431 -3::int)
+#787 := [rewrite]: #786
+#805 := (= #515 -1::int)
+#809 := [rewrite]: #805
+#788 := [monotonicity #809 #787]: #794
+#780 := [trans #788 #626]: #627
+#784 := [monotonicity #780]: #783
+#669 := [trans #784 #667]: #668
+#678 := [monotonicity #669]: #776
+#679 := [trans #678 #662]: #677
+#790 := (iff #518 #834)
+#796 := (+ -1::int #55)
+#804 := (= #796 0::int)
+#647 := (iff #804 #834)
+#789 := [rewrite]: #647
+#645 := (iff #518 #804)
+#803 := (= #521 #796)
+#799 := (+ #55 -1::int)
+#797 := (= #799 #796)
+#802 := [rewrite]: #797
+#800 := (= #521 #799)
+#806 := (= #520 -1::int)
+#808 := (= #520 #515)
+#529 := (= #519 1::int)
+#807 := [rewrite]: #529
+#523 := [monotonicity #807]: #808
+#810 := [trans #523 #809]: #806
+#801 := [monotonicity #810]: #800
+#798 := [trans #801 #802]: #803
+#646 := [monotonicity #798]: #645
+#791 := [trans #646 #789]: #790
+#527 := (iff #506 true)
+#485 := (or false true)
+#823 := (iff #485 true)
+#824 := [rewrite]: #823
+#816 := (iff #506 #485)
+#815 := (iff #838 true)
+#813 := (not false)
+#537 := (iff #813 true)
+#811 := [rewrite]: #537
+#814 := (iff #838 #813)
+#543 := (iff #836 false)
+#817 := (or false false)
+#541 := (iff #817 false)
+#542 := [rewrite]: #541
+#818 := (iff #836 #817)
+#819 := (iff #522 false)
+#482 := [rewrite]: #819
+#828 := (iff #501 false)
+#831 := [rewrite]: #828
+#540 := [monotonicity #831 #482]: #818
+#437 := [trans #540 #542]: #543
+#536 := [monotonicity #437]: #814
+#812 := [trans #536 #811]: #815
+#470 := (iff #832 false)
+#826 := (not true)
+#829 := (iff #826 false)
+#469 := [rewrite]: #829
+#464 := (iff #832 #826)
+#825 := (iff #625 true)
+#821 := (iff #625 #485)
+#483 := (iff #495 true)
+#484 := [rewrite]: #483
+#822 := [monotonicity #482 #484]: #821
+#820 := [trans #822 #824]: #825
+#827 := [monotonicity #820]: #464
+#830 := [trans #827 #469]: #470
+#526 := [monotonicity #830 #812]: #816
+#528 := [trans #526 #824]: #527
+#681 := [monotonicity #528 #791 #679]: #673
+#685 := [trans #681 #683]: #684
+#835 := (iff #840 false)
 #478 := [rewrite]: #835
-#470 := (iff #522 true)
-#830 := [rewrite]: #470
-#817 := [monotonicity #830 #478]: #831
-#542 := [trans #817 #540]: #541
-#436 := [monotonicity #542]: #543
-#814 := [trans #436 #827]: #813
-#829 := (iff #625 false)
-#820 := (iff #625 #825)
-#823 := (iff #495 true)
-#483 := (or false true)
-#821 := (iff #483 true)
-#822 := [rewrite]: #821
-#484 := (iff #495 #483)
-#819 := (iff #838 true)
-#482 := [rewrite]: #819
-#485 := [monotonicity #478 #482]: #484
-#824 := [trans #485 #822]: #823
-#826 := [monotonicity #824]: #820
-#469 := [trans #826 #827]: #829
-#811 := [monotonicity #469 #814]: #537
-#526 := [trans #811 #812]: #816
-#780 := [monotonicity #526 #803 #624]: #627
-#782 := [trans #780 #783]: #784
-#834 := (iff #839 true)
-#494 := [rewrite]: #834
-#668 := [monotonicity #494 #782]: #667
-#678 := [trans #668 #628]: #776
-#493 := (iff #841 #507)
-#498 := [rewrite]: #493
-#843 := (iff #842 false)
-#833 := [rewrite]: #843
-#774 := [monotonicity #833 #498 #678]: #773
-#662 := [trans #774 #783]: #777
-#682 := [monotonicity #662]: #681
-#685 := [trans #682 #684]: #681
-#673 := [quant-inst]: #680
-#778 := [mp #673 #685]: #679
-#713 := [unit-resolution #778 #857]: #507
-#709 := [monotonicity #713]: #57
-#58 := (not #57)
-#270 := [asserted]: #58
-[unit-resolution #270 #709]: false
-unsat
-b68469389563a7c2adfa58d6c3a299893ac9030d 605 0
+#779 := [monotonicity #478 #685]: #775
+#757 := [trans #779 #768]: #760
+#498 := (iff #842 #834)
+#494 := [rewrite]: #498
+#833 := (iff #837 false)
+#493 := [rewrite]: #833
+#770 := [monotonicity #493 #494 #757]: #769
+#761 := [trans #770 #767]: #772
+#749 := [monotonicity #761]: #765
+#753 := [trans #749 #752]: #765
+#758 := [quant-inst]: #764
+#754 := [mp #758 #753]: #763
+#703 := [unit-resolution #754 #857]: #834
+#708 := [monotonicity #703]: #58
+#59 := (not #58)
+#271 := [asserted]: #59
+[unit-resolution #271 #708]: false
+unsat
+d632f2ce3ea3569341b3f434b727f0c2aca7fff1 605 0
 #2 := false
 decl f5 :: (-> int S2)
 #11 := 0::int
@@ -19013,99 +19342,98 @@
 #603 := [unit-resolution #535 #671]: #61
 [unit-resolution #603 #596]: false
 unsat
-48fbc21a65dea108392ceeedb3a0cbae0d536aab 328 0
+35e52a261c60456fe5328f3a2bc282a72801535d 303 0
 #2 := false
 decl f5 :: (-> int S2)
-#53 := 1::int
-#57 := (f5 1::int)
+#11 := 0::int
+#56 := (f5 0::int)
 decl f4 :: (-> int int int)
-#54 := 3::int
-#55 := (f4 1::int 3::int)
-#56 := (f5 #55)
-#58 := (= #56 #57)
-#834 := (= #55 1::int)
+#53 := 3::int
+#54 := (f4 3::int 3::int)
+#55 := (f5 #54)
+#57 := (= #55 #56)
+#832 := (= #54 0::int)
 #9 := (:var 0 int)
 #8 := (:var 1 int)
 #29 := (f4 #8 #9)
 #851 := (pattern #29)
-#11 := 0::int
-#83 := -1::int
-#87 := (* -1::int #9)
-#84 := (* -1::int #8)
-#142 := (mod #84 #87)
-#363 := (+ #29 #142)
-#364 := (= #363 0::int)
+#82 := -1::int
+#86 := (* -1::int #9)
+#83 := (* -1::int #8)
+#141 := (mod #83 #86)
+#362 := (+ #29 #141)
+#363 := (= #362 0::int)
 #30 := (mod #8 #9)
-#360 := (* -1::int #30)
-#361 := (+ #29 #360)
-#362 := (= #361 0::int)
-#109 := (<= #9 0::int)
-#105 := (<= #8 0::int)
-#302 := (or #105 #109)
-#303 := (not #302)
-#116 := (>= #8 0::int)
-#285 := (or #109 #116)
-#286 := (not #285)
-#309 := (or #286 #303)
-#365 := (ite #309 #362 #364)
-#359 := (= #29 0::int)
-#12 := (= #8 0::int)
-#366 := (ite #12 #359 #365)
-#358 := (= #8 #29)
-#13 := (= #9 0::int)
-#367 := (ite #13 #358 #366)
-#852 := (forall (vars (?v0 int) (?v1 int)) (:pat #851) #367)
-#370 := (forall (vars (?v0 int) (?v1 int)) #367)
-#855 := (iff #370 #852)
-#853 := (iff #367 #367)
+#359 := (* -1::int #30)
+#360 := (+ #29 #359)
+#361 := (= #360 0::int)
+#108 := (<= #9 0::int)
+#104 := (<= #8 0::int)
+#301 := (or #104 #108)
+#302 := (not #301)
+#115 := (>= #8 0::int)
+#284 := (or #108 #115)
+#285 := (not #284)
+#308 := (or #285 #302)
+#364 := (ite #308 #361 #363)
+#358 := (= #29 0::int)
+#12 := (= #8 0::int)
+#365 := (ite #12 #358 #364)
+#357 := (= #8 #29)
+#13 := (= #9 0::int)
+#366 := (ite #13 #357 #365)
+#852 := (forall (vars (?v0 int) (?v1 int)) (:pat #851) #366)
+#369 := (forall (vars (?v0 int) (?v1 int)) #366)
+#855 := (iff #369 #852)
+#853 := (iff #366 #366)
 #854 := [refl]: #853
 #856 := [quant-intro #854]: #855
-#148 := (* -1::int #142)
-#327 := (ite #309 #30 #148)
-#330 := (ite #12 0::int #327)
-#333 := (ite #13 #8 #330)
-#336 := (= #29 #333)
-#339 := (forall (vars (?v0 int) (?v1 int)) #336)
-#371 := (iff #339 #370)
-#368 := (iff #336 #367)
-#369 := [rewrite]: #368
-#372 := [quant-intro #369]: #371
-#117 := (not #116)
-#110 := (not #109)
-#120 := (and #110 #117)
-#106 := (not #105)
-#113 := (and #106 #110)
-#123 := (or #113 #120)
-#168 := (ite #123 #30 #148)
-#171 := (ite #12 0::int #168)
-#174 := (ite #13 #8 #171)
-#177 := (= #29 #174)
-#180 := (forall (vars (?v0 int) (?v1 int)) #177)
-#340 := (iff #180 #339)
-#337 := (iff #177 #336)
-#334 := (= #174 #333)
-#331 := (= #171 #330)
-#328 := (= #168 #327)
-#312 := (iff #123 #309)
-#306 := (or #303 #286)
-#310 := (iff #306 #309)
-#311 := [rewrite]: #310
-#307 := (iff #123 #306)
-#304 := (iff #120 #286)
-#305 := [rewrite]: #304
-#283 := (iff #113 #303)
-#284 := [rewrite]: #283
-#308 := [monotonicity #284 #305]: #307
-#313 := [trans #308 #311]: #312
-#329 := [monotonicity #313]: #328
-#332 := [monotonicity #329]: #331
-#335 := [monotonicity #332]: #334
-#338 := [monotonicity #335]: #337
-#341 := [quant-intro #338]: #340
-#275 := (~ #180 #180)
-#272 := (~ #177 #177)
-#291 := [refl]: #272
-#276 := [nnf-pos #291]: #275
+#147 := (* -1::int #141)
+#326 := (ite #308 #30 #147)
+#329 := (ite #12 0::int #326)
+#332 := (ite #13 #8 #329)
+#335 := (= #29 #332)
+#338 := (forall (vars (?v0 int) (?v1 int)) #335)
+#370 := (iff #338 #369)
+#367 := (iff #335 #366)
+#368 := [rewrite]: #367
+#371 := [quant-intro #368]: #370
+#116 := (not #115)
+#109 := (not #108)
+#119 := (and #109 #116)
+#105 := (not #104)
+#112 := (and #105 #109)
+#122 := (or #112 #119)
+#167 := (ite #122 #30 #147)
+#170 := (ite #12 0::int #167)
+#173 := (ite #13 #8 #170)
+#176 := (= #29 #173)
+#179 := (forall (vars (?v0 int) (?v1 int)) #176)
+#339 := (iff #179 #338)
+#336 := (iff #176 #335)
+#333 := (= #173 #332)
+#330 := (= #170 #329)
+#327 := (= #167 #326)
+#311 := (iff #122 #308)
+#305 := (or #302 #285)
+#309 := (iff #305 #308)
+#310 := [rewrite]: #309
+#306 := (iff #122 #305)
+#303 := (iff #119 #285)
+#304 := [rewrite]: #303
+#282 := (iff #112 #302)
+#283 := [rewrite]: #282
+#307 := [monotonicity #283 #304]: #306
+#312 := [trans #307 #310]: #311
+#328 := [monotonicity #312]: #327
+#331 := [monotonicity #328]: #330
+#334 := [monotonicity #331]: #333
+#337 := [monotonicity #334]: #336
+#340 := [quant-intro #337]: #339
+#274 := (~ #179 #179)
+#271 := (~ #176 #176)
+#290 := [refl]: #271
+#275 := [nnf-pos #290]: #274
 #23 := (- #9)
 #22 := (- #8)
 #31 := (mod #22 #23)
@@ -19121,228 +19449,204 @@
 #35 := (ite #13 #8 #34)
 #36 := (= #29 #35)
 #37 := (forall (vars (?v0 int) (?v1 int)) #36)
-#183 := (iff #37 #180)
-#77 := (and #16 #18)
-#80 := (or #17 #77)
-#153 := (ite #80 #30 #148)
-#156 := (ite #12 0::int #153)
-#159 := (ite #13 #8 #156)
-#162 := (= #29 #159)
-#165 := (forall (vars (?v0 int) (?v1 int)) #162)
-#181 := (iff #165 #180)
-#178 := (iff #162 #177)
-#175 := (= #159 #174)
-#172 := (= #156 #171)
-#169 := (= #153 #168)
-#124 := (iff #80 #123)
-#121 := (iff #77 #120)
-#118 := (iff #18 #117)
-#119 := [rewrite]: #118
-#111 := (iff #16 #110)
-#112 := [rewrite]: #111
-#122 := [monotonicity #112 #119]: #121
-#114 := (iff #17 #113)
-#107 := (iff #15 #106)
-#108 := [rewrite]: #107
-#115 := [monotonicity #108 #112]: #114
-#125 := [monotonicity #115 #122]: #124
-#170 := [monotonicity #125]: #169
-#173 := [monotonicity #170]: #172
-#176 := [monotonicity #173]: #175
-#179 := [monotonicity #176]: #178
-#182 := [quant-intro #179]: #181
-#166 := (iff #37 #165)
-#163 := (iff #36 #162)
-#160 := (= #35 #159)
-#157 := (= #34 #156)
-#154 := (= #33 #153)
-#151 := (= #32 #148)
-#145 := (- #142)
-#149 := (= #145 #148)
-#150 := [rewrite]: #149
-#146 := (= #32 #145)
-#143 := (= #31 #142)
-#88 := (= #23 #87)
-#89 := [rewrite]: #88
-#85 := (= #22 #84)
-#86 := [rewrite]: #85
-#144 := [monotonicity #86 #89]: #143
-#147 := [monotonicity #144]: #146
-#152 := [trans #147 #150]: #151
-#81 := (iff #20 #80)
-#78 := (iff #19 #77)
-#79 := [rewrite]: #78
-#82 := [monotonicity #79]: #81
-#155 := [monotonicity #82 #152]: #154
-#158 := [monotonicity #155]: #157
-#161 := [monotonicity #158]: #160
-#164 := [monotonicity #161]: #163
-#167 := [quant-intro #164]: #166
-#184 := [trans #167 #182]: #183
-#141 := [asserted]: #37
-#185 := [mp #141 #184]: #180
-#292 := [mp~ #185 #276]: #180
-#342 := [mp #292 #341]: #339
-#373 := [mp #342 #372]: #370
-#857 := [mp #373 #856]: #852
-#762 := (not #852)
-#763 := (or #762 #834)
-#431 := (* -1::int 3::int)
-#515 := (* -1::int 1::int)
-#516 := (mod #515 #431)
-#517 := (+ #55 #516)
-#508 := (= #517 0::int)
-#519 := (mod 1::int 3::int)
-#520 := (* -1::int #519)
-#521 := (+ #55 #520)
-#518 := (= #521 0::int)
-#522 := (<= 3::int 0::int)
-#501 := (<= 1::int 0::int)
-#836 := (or #501 #522)
+#182 := (iff #37 #179)
+#76 := (and #16 #18)
+#79 := (or #17 #76)
+#152 := (ite #79 #30 #147)
+#155 := (ite #12 0::int #152)
+#158 := (ite #13 #8 #155)
+#161 := (= #29 #158)
+#164 := (forall (vars (?v0 int) (?v1 int)) #161)
+#180 := (iff #164 #179)
+#177 := (iff #161 #176)
+#174 := (= #158 #173)
+#171 := (= #155 #170)
+#168 := (= #152 #167)
+#123 := (iff #79 #122)
+#120 := (iff #76 #119)
+#117 := (iff #18 #116)
+#118 := [rewrite]: #117
+#110 := (iff #16 #109)
+#111 := [rewrite]: #110
+#121 := [monotonicity #111 #118]: #120
+#113 := (iff #17 #112)
+#106 := (iff #15 #105)
+#107 := [rewrite]: #106
+#114 := [monotonicity #107 #111]: #113
+#124 := [monotonicity #114 #121]: #123
+#169 := [monotonicity #124]: #168
+#172 := [monotonicity #169]: #171
+#175 := [monotonicity #172]: #174
+#178 := [monotonicity #175]: #177
+#181 := [quant-intro #178]: #180
+#165 := (iff #37 #164)
+#162 := (iff #36 #161)
+#159 := (= #35 #158)
+#156 := (= #34 #155)
+#153 := (= #33 #152)
+#150 := (= #32 #147)
+#144 := (- #141)
+#148 := (= #144 #147)
+#149 := [rewrite]: #148
+#145 := (= #32 #144)
+#142 := (= #31 #141)
+#87 := (= #23 #86)
+#88 := [rewrite]: #87
+#84 := (= #22 #83)
+#85 := [rewrite]: #84
+#143 := [monotonicity #85 #88]: #142
+#146 := [monotonicity #143]: #145
+#151 := [trans #146 #149]: #150
+#80 := (iff #20 #79)
+#77 := (iff #19 #76)
+#78 := [rewrite]: #77
+#81 := [monotonicity #78]: #80
+#154 := [monotonicity #81 #151]: #153
+#157 := [monotonicity #154]: #156
+#160 := [monotonicity #157]: #159
+#163 := [monotonicity #160]: #162
+#166 := [quant-intro #163]: #165
+#183 := [trans #166 #181]: #182
+#140 := [asserted]: #37
+#184 := [mp #140 #183]: #179
+#291 := [mp~ #184 #275]: #179
+#341 := [mp #291 #340]: #338
+#372 := [mp #341 #371]: #369
+#857 := [mp #372 #856]: #852
+#777 := (not #852)
+#662 := (or #777 #832)
+#430 := (* -1::int 3::int)
+#515 := (mod #430 #430)
+#516 := (+ #54 #515)
+#517 := (= #516 0::int)
+#508 := (mod 3::int 3::int)
+#519 := (* -1::int #508)
+#520 := (+ #54 #519)
+#448 := (= #520 0::int)
+#521 := (<= 3::int 0::int)
+#518 := (or #521 #521)
+#522 := (not #518)
+#501 := (>= 3::int 0::int)
+#836 := (or #521 #501)
 #838 := (not #836)
-#495 := (>= 1::int 0::int)
-#625 := (or #522 #495)
-#832 := (not #625)
-#506 := (or #832 #838)
-#507 := (ite #506 #518 #508)
-#839 := (= #55 0::int)
-#840 := (= 1::int 0::int)
-#841 := (ite #840 #839 #507)
-#842 := (= 1::int #55)
-#837 := (= 3::int 0::int)
-#843 := (ite #837 #842 #841)
-#764 := (or #762 #843)
-#765 := (iff #764 #763)
-#750 := (iff #763 #763)
-#752 := [rewrite]: #750
-#772 := (iff #843 #834)
-#759 := (ite false #834 #834)
-#771 := (iff #759 #834)
-#767 := [rewrite]: #771
-#769 := (iff #843 #759)
-#760 := (iff #841 #834)
-#778 := (ite false #839 #834)
-#766 := (iff #778 #834)
-#768 := [rewrite]: #766
-#775 := (iff #841 #778)
-#684 := (iff #507 #834)
-#773 := -2::int
-#774 := (= #55 -2::int)
-#1 := true
-#680 := (ite true #834 #774)
-#682 := (iff #680 #834)
-#683 := [rewrite]: #682
-#673 := (iff #507 #680)
-#677 := (iff #508 #774)
-#795 := 2::int
-#782 := (+ 2::int #55)
-#628 := (= #782 0::int)
-#777 := (iff #628 #774)
-#662 := [rewrite]: #777
-#776 := (iff #508 #628)
-#668 := (= #517 #782)
-#781 := (+ #55 2::int)
-#785 := (= #781 #782)
-#667 := [rewrite]: #785
-#783 := (= #517 #781)
-#627 := (= #516 2::int)
-#792 := -3::int
-#793 := (mod -1::int -3::int)
-#624 := (= #793 2::int)
-#626 := [rewrite]: #624
-#794 := (= #516 #793)
-#786 := (= #431 -3::int)
-#787 := [rewrite]: #786
-#805 := (= #515 -1::int)
+#495 := (or #838 #522)
+#625 := (ite #495 #448 #517)
+#506 := (= 3::int 0::int)
+#507 := (ite #506 #832 #625)
+#839 := (= 3::int #54)
+#840 := (ite #506 #839 #507)
+#677 := (or #777 #840)
+#680 := (iff #677 #662)
+#681 := (iff #662 #662)
+#682 := [rewrite]: #681
+#773 := (iff #840 #832)
+#843 := (= #54 3::int)
+#668 := (ite false #843 #832)
+#776 := (iff #668 #832)
+#678 := [rewrite]: #776
+#669 := (iff #840 #668)
+#785 := (iff #507 #832)
+#780 := (ite false #832 #832)
+#784 := (iff #780 #832)
+#782 := [rewrite]: #784
+#781 := (iff #507 #780)
+#626 := (iff #625 #832)
+#1 := true
+#793 := (ite true #832 #832)
+#795 := (iff #793 #832)
+#624 := [rewrite]: #795
+#794 := (iff #625 #793)
+#786 := (iff #517 #832)
+#791 := (= #516 #54)
+#807 := (+ #54 0::int)
+#805 := (= #807 #54)
 #809 := [rewrite]: #805
-#788 := [monotonicity #809 #787]: #794
-#780 := [trans #788 #626]: #627
-#784 := [monotonicity #780]: #783
-#669 := [trans #784 #667]: #668
-#678 := [monotonicity #669]: #776
-#679 := [trans #678 #662]: #677
-#790 := (iff #518 #834)
-#796 := (+ -1::int #55)
-#804 := (= #796 0::int)
-#647 := (iff #804 #834)
-#789 := [rewrite]: #647
-#645 := (iff #518 #804)
-#803 := (= #521 #796)
-#799 := (+ #55 -1::int)
-#797 := (= #799 #796)
-#802 := [rewrite]: #797
-#800 := (= #521 #799)
-#806 := (= #520 -1::int)
-#808 := (= #520 #515)
-#529 := (= #519 1::int)
-#807 := [rewrite]: #529
-#523 := [monotonicity #807]: #808
-#810 := [trans #523 #809]: #806
-#801 := [monotonicity #810]: #800
-#798 := [trans #801 #802]: #803
-#646 := [monotonicity #798]: #645
-#791 := [trans #646 #789]: #790
-#527 := (iff #506 true)
-#485 := (or false true)
-#823 := (iff #485 true)
-#824 := [rewrite]: #823
-#816 := (iff #506 #485)
-#815 := (iff #838 true)
-#813 := (not false)
-#537 := (iff #813 true)
+#789 := (= #516 #807)
+#646 := (= #515 0::int)
+#801 := -3::int
+#802 := (mod -3::int -3::int)
+#804 := (= #802 0::int)
+#645 := [rewrite]: #804
+#803 := (= #515 #802)
+#796 := (= #430 -3::int)
+#797 := [rewrite]: #796
+#798 := [monotonicity #797 #797]: #803
+#647 := [trans #798 #645]: #646
+#790 := [monotonicity #647]: #789
+#792 := [trans #790 #809]: #791
+#787 := [monotonicity #792]: #786
+#799 := (iff #448 #832)
+#806 := (= #520 #54)
+#808 := (= #520 #807)
+#528 := (= #519 0::int)
+#815 := (* -1::int 0::int)
+#526 := (= #815 0::int)
+#527 := [rewrite]: #526
+#812 := (= #519 #815)
+#537 := (= #508 0::int)
 #811 := [rewrite]: #537
-#814 := (iff #838 #813)
-#543 := (iff #836 false)
-#817 := (or false false)
-#541 := (iff #817 false)
-#542 := [rewrite]: #541
-#818 := (iff #836 #817)
-#819 := (iff #522 false)
-#482 := [rewrite]: #819
-#828 := (iff #501 false)
-#831 := [rewrite]: #828
-#540 := [monotonicity #831 #482]: #818
-#437 := [trans #540 #542]: #543
-#536 := [monotonicity #437]: #814
-#812 := [trans #536 #811]: #815
-#470 := (iff #832 false)
-#826 := (not true)
-#829 := (iff #826 false)
-#469 := [rewrite]: #829
-#464 := (iff #832 #826)
-#825 := (iff #625 true)
-#821 := (iff #625 #485)
-#483 := (iff #495 true)
-#484 := [rewrite]: #483
-#822 := [monotonicity #482 #484]: #821
-#820 := [trans #822 #824]: #825
-#827 := [monotonicity #820]: #464
-#830 := [trans #827 #469]: #470
-#526 := [monotonicity #830 #812]: #816
-#528 := [trans #526 #824]: #527
-#681 := [monotonicity #528 #791 #679]: #673
-#685 := [trans #681 #683]: #684
-#835 := (iff #840 false)
-#478 := [rewrite]: #835
-#779 := [monotonicity #478 #685]: #775
-#757 := [trans #779 #768]: #760
-#498 := (iff #842 #834)
-#494 := [rewrite]: #498
-#833 := (iff #837 false)
-#493 := [rewrite]: #833
-#770 := [monotonicity #493 #494 #757]: #769
-#761 := [trans #770 #767]: #772
-#749 := [monotonicity #761]: #765
-#753 := [trans #749 #752]: #765
-#758 := [quant-inst]: #764
-#754 := [mp #758 #753]: #763
-#703 := [unit-resolution #754 #857]: #834
-#708 := [monotonicity #703]: #58
-#59 := (not #58)
-#271 := [asserted]: #59
-[unit-resolution #271 #708]: false
-unsat
-d5d2986a8efaefb5e38f30bc14afaad18d3334c6 848 0
+#816 := [monotonicity #811]: #812
+#529 := [trans #816 #527]: #528
+#523 := [monotonicity #529]: #808
+#810 := [trans #523 #809]: #806
+#800 := [monotonicity #810]: #799
+#814 := (iff #495 true)
+#835 := (or false true)
+#482 := (iff #835 true)
+#483 := [rewrite]: #482
+#436 := (iff #495 #835)
+#542 := (iff #522 true)
+#831 := (not false)
+#540 := (iff #831 true)
+#541 := [rewrite]: #540
+#817 := (iff #522 #831)
+#830 := (iff #518 false)
+#464 := (or false false)
+#469 := (iff #464 false)
+#470 := [rewrite]: #469
+#827 := (iff #518 #464)
+#493 := (iff #521 false)
+#498 := [rewrite]: #493
+#829 := [monotonicity #498 #498]: #827
+#828 := [trans #829 #470]: #830
+#818 := [monotonicity #828]: #817
+#543 := [trans #818 #541]: #542
+#820 := (iff #838 false)
+#821 := (not true)
+#824 := (iff #821 false)
+#825 := [rewrite]: #824
+#822 := (iff #838 #821)
+#484 := (iff #836 true)
+#478 := (iff #836 #835)
+#834 := (iff #501 true)
+#494 := [rewrite]: #834
+#819 := [monotonicity #498 #494]: #478
+#485 := [trans #819 #483]: #484
+#823 := [monotonicity #485]: #822
+#826 := [trans #823 #825]: #820
+#813 := [monotonicity #826 #543]: #436
+#536 := [trans #813 #483]: #814
+#788 := [monotonicity #536 #800 #787]: #794
+#627 := [trans #788 #624]: #626
+#841 := (iff #506 false)
+#842 := [rewrite]: #841
+#783 := [monotonicity #842 #627]: #781
+#667 := [trans #783 #782]: #785
+#837 := (iff #839 #843)
+#833 := [rewrite]: #837
+#628 := [monotonicity #842 #833 #667]: #669
+#774 := [trans #628 #678]: #773
+#673 := [monotonicity #774]: #680
+#683 := [trans #673 #682]: #680
+#679 := [quant-inst]: #677
+#684 := [mp #679 #683]: #662
+#704 := [unit-resolution #684 #857]: #832
+#700 := [monotonicity #704]: #57
+#58 := (not #57)
+#270 := [asserted]: #58
+[unit-resolution #270 #700]: false
+unsat
+dfe2acff8e1fa8b5c4e4ba1cf8fef0ce4556ee21 848 0
 #2 := false
 decl f5 :: (-> int S2)
 decl f6 :: (-> S2 int)
@@ -20191,311 +20495,7 @@
 #1103 := [trans #935 #1102]: #300
 [unit-resolution #308 #1103]: false
 unsat
-30266f09c986583d8c5407f4e044da694063d38f 303 0
-#2 := false
-decl f5 :: (-> int S2)
-#11 := 0::int
-#56 := (f5 0::int)
-decl f4 :: (-> int int int)
-#53 := 3::int
-#54 := (f4 3::int 3::int)
-#55 := (f5 #54)
-#57 := (= #55 #56)
-#832 := (= #54 0::int)
-#9 := (:var 0 int)
-#8 := (:var 1 int)
-#29 := (f4 #8 #9)
-#851 := (pattern #29)
-#82 := -1::int
-#86 := (* -1::int #9)
-#83 := (* -1::int #8)
-#141 := (mod #83 #86)
-#362 := (+ #29 #141)
-#363 := (= #362 0::int)
-#30 := (mod #8 #9)
-#359 := (* -1::int #30)
-#360 := (+ #29 #359)
-#361 := (= #360 0::int)
-#108 := (<= #9 0::int)
-#104 := (<= #8 0::int)
-#301 := (or #104 #108)
-#302 := (not #301)
-#115 := (>= #8 0::int)
-#284 := (or #108 #115)
-#285 := (not #284)
-#308 := (or #285 #302)
-#364 := (ite #308 #361 #363)
-#358 := (= #29 0::int)
-#12 := (= #8 0::int)
-#365 := (ite #12 #358 #364)
-#357 := (= #8 #29)
-#13 := (= #9 0::int)
-#366 := (ite #13 #357 #365)
-#852 := (forall (vars (?v0 int) (?v1 int)) (:pat #851) #366)
-#369 := (forall (vars (?v0 int) (?v1 int)) #366)
-#855 := (iff #369 #852)
-#853 := (iff #366 #366)
-#854 := [refl]: #853
-#856 := [quant-intro #854]: #855
-#147 := (* -1::int #141)
-#326 := (ite #308 #30 #147)
-#329 := (ite #12 0::int #326)
-#332 := (ite #13 #8 #329)
-#335 := (= #29 #332)
-#338 := (forall (vars (?v0 int) (?v1 int)) #335)
-#370 := (iff #338 #369)
-#367 := (iff #335 #366)
-#368 := [rewrite]: #367
-#371 := [quant-intro #368]: #370
-#116 := (not #115)
-#109 := (not #108)
-#119 := (and #109 #116)
-#105 := (not #104)
-#112 := (and #105 #109)
-#122 := (or #112 #119)
-#167 := (ite #122 #30 #147)
-#170 := (ite #12 0::int #167)
-#173 := (ite #13 #8 #170)
-#176 := (= #29 #173)
-#179 := (forall (vars (?v0 int) (?v1 int)) #176)
-#339 := (iff #179 #338)
-#336 := (iff #176 #335)
-#333 := (= #173 #332)
-#330 := (= #170 #329)
-#327 := (= #167 #326)
-#311 := (iff #122 #308)
-#305 := (or #302 #285)
-#309 := (iff #305 #308)
-#310 := [rewrite]: #309
-#306 := (iff #122 #305)
-#303 := (iff #119 #285)
-#304 := [rewrite]: #303
-#282 := (iff #112 #302)
-#283 := [rewrite]: #282
-#307 := [monotonicity #283 #304]: #306
-#312 := [trans #307 #310]: #311
-#328 := [monotonicity #312]: #327
-#331 := [monotonicity #328]: #330
-#334 := [monotonicity #331]: #333
-#337 := [monotonicity #334]: #336
-#340 := [quant-intro #337]: #339
-#274 := (~ #179 #179)
-#271 := (~ #176 #176)
-#290 := [refl]: #271
-#275 := [nnf-pos #290]: #274
-#23 := (- #9)
-#22 := (- #8)
-#31 := (mod #22 #23)
-#32 := (- #31)
-#16 := (< 0::int #9)
-#18 := (< #8 0::int)
-#19 := (and #18 #16)
-#15 := (< 0::int #8)
-#17 := (and #15 #16)
-#20 := (or #17 #19)
-#33 := (ite #20 #30 #32)
-#34 := (ite #12 0::int #33)
-#35 := (ite #13 #8 #34)
-#36 := (= #29 #35)
-#37 := (forall (vars (?v0 int) (?v1 int)) #36)
-#182 := (iff #37 #179)
-#76 := (and #16 #18)
-#79 := (or #17 #76)
-#152 := (ite #79 #30 #147)
-#155 := (ite #12 0::int #152)
-#158 := (ite #13 #8 #155)
-#161 := (= #29 #158)
-#164 := (forall (vars (?v0 int) (?v1 int)) #161)
-#180 := (iff #164 #179)
-#177 := (iff #161 #176)
-#174 := (= #158 #173)
-#171 := (= #155 #170)
-#168 := (= #152 #167)
-#123 := (iff #79 #122)
-#120 := (iff #76 #119)
-#117 := (iff #18 #116)
-#118 := [rewrite]: #117
-#110 := (iff #16 #109)
-#111 := [rewrite]: #110
-#121 := [monotonicity #111 #118]: #120
-#113 := (iff #17 #112)
-#106 := (iff #15 #105)
-#107 := [rewrite]: #106
-#114 := [monotonicity #107 #111]: #113
-#124 := [monotonicity #114 #121]: #123
-#169 := [monotonicity #124]: #168
-#172 := [monotonicity #169]: #171
-#175 := [monotonicity #172]: #174
-#178 := [monotonicity #175]: #177
-#181 := [quant-intro #178]: #180
-#165 := (iff #37 #164)
-#162 := (iff #36 #161)
-#159 := (= #35 #158)
-#156 := (= #34 #155)
-#153 := (= #33 #152)
-#150 := (= #32 #147)
-#144 := (- #141)
-#148 := (= #144 #147)
-#149 := [rewrite]: #148
-#145 := (= #32 #144)
-#142 := (= #31 #141)
-#87 := (= #23 #86)
-#88 := [rewrite]: #87
-#84 := (= #22 #83)
-#85 := [rewrite]: #84
-#143 := [monotonicity #85 #88]: #142
-#146 := [monotonicity #143]: #145
-#151 := [trans #146 #149]: #150
-#80 := (iff #20 #79)
-#77 := (iff #19 #76)
-#78 := [rewrite]: #77
-#81 := [monotonicity #78]: #80
-#154 := [monotonicity #81 #151]: #153
-#157 := [monotonicity #154]: #156
-#160 := [monotonicity #157]: #159
-#163 := [monotonicity #160]: #162
-#166 := [quant-intro #163]: #165
-#183 := [trans #166 #181]: #182
-#140 := [asserted]: #37
-#184 := [mp #140 #183]: #179
-#291 := [mp~ #184 #275]: #179
-#341 := [mp #291 #340]: #338
-#372 := [mp #341 #371]: #369
-#857 := [mp #372 #856]: #852
-#777 := (not #852)
-#662 := (or #777 #832)
-#430 := (* -1::int 3::int)
-#515 := (mod #430 #430)
-#516 := (+ #54 #515)
-#517 := (= #516 0::int)
-#508 := (mod 3::int 3::int)
-#519 := (* -1::int #508)
-#520 := (+ #54 #519)
-#448 := (= #520 0::int)
-#521 := (<= 3::int 0::int)
-#518 := (or #521 #521)
-#522 := (not #518)
-#501 := (>= 3::int 0::int)
-#836 := (or #521 #501)
-#838 := (not #836)
-#495 := (or #838 #522)
-#625 := (ite #495 #448 #517)
-#506 := (= 3::int 0::int)
-#507 := (ite #506 #832 #625)
-#839 := (= 3::int #54)
-#840 := (ite #506 #839 #507)
-#677 := (or #777 #840)
-#680 := (iff #677 #662)
-#681 := (iff #662 #662)
-#682 := [rewrite]: #681
-#773 := (iff #840 #832)
-#843 := (= #54 3::int)
-#668 := (ite false #843 #832)
-#776 := (iff #668 #832)
-#678 := [rewrite]: #776
-#669 := (iff #840 #668)
-#785 := (iff #507 #832)
-#780 := (ite false #832 #832)
-#784 := (iff #780 #832)
-#782 := [rewrite]: #784
-#781 := (iff #507 #780)
-#626 := (iff #625 #832)
-#1 := true
-#793 := (ite true #832 #832)
-#795 := (iff #793 #832)
-#624 := [rewrite]: #795
-#794 := (iff #625 #793)
-#786 := (iff #517 #832)
-#791 := (= #516 #54)
-#807 := (+ #54 0::int)
-#805 := (= #807 #54)
-#809 := [rewrite]: #805
-#789 := (= #516 #807)
-#646 := (= #515 0::int)
-#801 := -3::int
-#802 := (mod -3::int -3::int)
-#804 := (= #802 0::int)
-#645 := [rewrite]: #804
-#803 := (= #515 #802)
-#796 := (= #430 -3::int)
-#797 := [rewrite]: #796
-#798 := [monotonicity #797 #797]: #803
-#647 := [trans #798 #645]: #646
-#790 := [monotonicity #647]: #789
-#792 := [trans #790 #809]: #791
-#787 := [monotonicity #792]: #786
-#799 := (iff #448 #832)
-#806 := (= #520 #54)
-#808 := (= #520 #807)
-#528 := (= #519 0::int)
-#815 := (* -1::int 0::int)
-#526 := (= #815 0::int)
-#527 := [rewrite]: #526
-#812 := (= #519 #815)
-#537 := (= #508 0::int)
-#811 := [rewrite]: #537
-#816 := [monotonicity #811]: #812
-#529 := [trans #816 #527]: #528
-#523 := [monotonicity #529]: #808
-#810 := [trans #523 #809]: #806
-#800 := [monotonicity #810]: #799
-#814 := (iff #495 true)
-#835 := (or false true)
-#482 := (iff #835 true)
-#483 := [rewrite]: #482
-#436 := (iff #495 #835)
-#542 := (iff #522 true)
-#831 := (not false)
-#540 := (iff #831 true)
-#541 := [rewrite]: #540
-#817 := (iff #522 #831)
-#830 := (iff #518 false)
-#464 := (or false false)
-#469 := (iff #464 false)
-#470 := [rewrite]: #469
-#827 := (iff #518 #464)
-#493 := (iff #521 false)
-#498 := [rewrite]: #493
-#829 := [monotonicity #498 #498]: #827
-#828 := [trans #829 #470]: #830
-#818 := [monotonicity #828]: #817
-#543 := [trans #818 #541]: #542
-#820 := (iff #838 false)
-#821 := (not true)
-#824 := (iff #821 false)
-#825 := [rewrite]: #824
-#822 := (iff #838 #821)
-#484 := (iff #836 true)
-#478 := (iff #836 #835)
-#834 := (iff #501 true)
-#494 := [rewrite]: #834
-#819 := [monotonicity #498 #494]: #478
-#485 := [trans #819 #483]: #484
-#823 := [monotonicity #485]: #822
-#826 := [trans #823 #825]: #820
-#813 := [monotonicity #826 #543]: #436
-#536 := [trans #813 #483]: #814
-#788 := [monotonicity #536 #800 #787]: #794
-#627 := [trans #788 #624]: #626
-#841 := (iff #506 false)
-#842 := [rewrite]: #841
-#783 := [monotonicity #842 #627]: #781
-#667 := [trans #783 #782]: #785
-#837 := (iff #839 #843)
-#833 := [rewrite]: #837
-#628 := [monotonicity #842 #833 #667]: #669
-#774 := [trans #628 #678]: #773
-#673 := [monotonicity #774]: #680
-#683 := [trans #673 #682]: #680
-#679 := [quant-inst]: #677
-#684 := [mp #679 #683]: #662
-#704 := [unit-resolution #684 #857]: #832
-#700 := [monotonicity #704]: #57
-#58 := (not #57)
-#270 := [asserted]: #58
-[unit-resolution #270 #700]: false
-unsat
-29a274d82d7dfcc17be98231a7a95a9ec14cd706 533 0
+ca0580f7bff73a2d860730ec786524526e0ba0ea 533 0
 #2 := false
 #55 := 3::int
 decl f6 :: (-> S2 int)
@@ -21029,7 +21029,7 @@
 #594 := [unit-resolution #608 #604]: #802
 [th-lemma #594 #286 #627 #636]: false
 unsat
-7c27e22543c792c36da02bc4168bcd3f7ce7432d 961 0
+a9c34a43767d7d2678eb5dde12b17fe190a6efe1 961 0
 #2 := false
 decl f5 :: (-> int S2)
 decl f6 :: (-> S2 int)
@@ -21991,7 +21991,7 @@
 #1225 := [trans #1224 #1218]: #301
 [unit-resolution #309 #1225]: false
 unsat
-914ab31d83892bfaa2a8848c9049be9e1ce2cb06 671 0
+5967f5c1592ecf001d4f064122298df3a0ca76b7 671 0
 #2 := false
 decl f6 :: (-> S2 int)
 decl f5 :: (-> int S2)
@@ -22663,7 +22663,7 @@
 #507 := [unit-resolution #504 #503]: #806
 [unit-resolution #507 #477]: false
 unsat
-85ac6a29deaf91400dbfbdf638baba5914d49e18 60 0
+b7e0eef92ca8fea2ccc91684e833dc3dce9b2d04 60 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -22724,7 +22724,68 @@
 #630 := [unit-resolution #632 #631]: #266
 [th-lemma #159 #629 #630]: false
 unsat
-d84df414dbdb37289879fadf547b4a4bc9c68951 60 0
+5617bc6b938b986893bfcfa7ce1760c2311e1366 60 0
+#2 := false
+#13 := 0::int
+decl f4 :: (-> S2 int)
+decl f6 :: S2
+#27 := f6
+#28 := (f4 f6)
+decl f5 :: S2
+#25 := f5
+#26 := (f4 f5)
+#137 := -1::int
+#138 := (* -1::int #28)
+#139 := (+ #26 #138)
+#140 := (<= #139 0::int)
+#143 := (ite #140 #26 #28)
+#150 := (* -1::int #143)
+#151 := (+ #28 #150)
+#149 := (>= #151 0::int)
+#156 := (not #149)
+#29 := (<= #26 #28)
+#30 := (ite #29 #26 #28)
+#31 := (<= #30 #28)
+#32 := (not #31)
+#157 := (iff #32 #156)
+#154 := (iff #31 #149)
+#146 := (<= #143 #28)
+#152 := (iff #146 #149)
+#153 := [rewrite]: #152
+#147 := (iff #31 #146)
+#144 := (= #30 #143)
+#141 := (iff #29 #140)
+#142 := [rewrite]: #141
+#145 := [monotonicity #142]: #144
+#148 := [monotonicity #145]: #147
+#155 := [trans #148 #153]: #154
+#158 := [monotonicity #155]: #157
+#134 := [asserted]: #32
+#159 := [mp #134 #158]: #156
+#317 := (= #28 #143)
+#232 := (not #140)
+#625 := [hypothesis]: #140
+#637 := (+ #26 #150)
+#624 := (>= #637 0::int)
+#231 := (= #26 #143)
+#318 := (or #232 #231)
+#319 := [def-axiom]: #318
+#626 := [unit-resolution #319 #625]: #231
+#627 := (not #231)
+#622 := (or #627 #624)
+#628 := [th-lemma]: #622
+#266 := [unit-resolution #628 #626]: #624
+#629 := [th-lemma #266 #159 #625]: false
+#631 := [lemma #629]: #232
+#310 := (or #140 #317)
+#321 := [def-axiom]: #310
+#271 := [unit-resolution #321 #631]: #317
+#272 := (not #317)
+#632 := (or #272 #149)
+#630 := [th-lemma]: #632
+[unit-resolution #630 #271 #159]: false
+unsat
+050c8f359b390869bd7cdf1db28b2773829a0360 60 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -22785,129 +22846,7 @@
 #630 := [th-lemma]: #632
 [unit-resolution #630 #271 #159]: false
 unsat
-ec431e8216f1d8b2f670cdb0885c1e07fa83e950 60 0
-#2 := false
-#13 := 0::int
-decl f4 :: (-> S2 int)
-decl f6 :: S2
-#27 := f6
-#28 := (f4 f6)
-decl f5 :: S2
-#25 := f5
-#26 := (f4 f5)
-#137 := -1::int
-#138 := (* -1::int #28)
-#139 := (+ #26 #138)
-#140 := (<= #139 0::int)
-#143 := (ite #140 #26 #28)
-#150 := (* -1::int #143)
-#151 := (+ #28 #150)
-#149 := (>= #151 0::int)
-#156 := (not #149)
-#29 := (<= #26 #28)
-#30 := (ite #29 #26 #28)
-#31 := (<= #30 #28)
-#32 := (not #31)
-#157 := (iff #32 #156)
-#154 := (iff #31 #149)
-#146 := (<= #143 #28)
-#152 := (iff #146 #149)
-#153 := [rewrite]: #152
-#147 := (iff #31 #146)
-#144 := (= #30 #143)
-#141 := (iff #29 #140)
-#142 := [rewrite]: #141
-#145 := [monotonicity #142]: #144
-#148 := [monotonicity #145]: #147
-#155 := [trans #148 #153]: #154
-#158 := [monotonicity #155]: #157
-#134 := [asserted]: #32
-#159 := [mp #134 #158]: #156
-#317 := (= #28 #143)
-#232 := (not #140)
-#625 := [hypothesis]: #140
-#637 := (+ #26 #150)
-#624 := (>= #637 0::int)
-#231 := (= #26 #143)
-#318 := (or #232 #231)
-#319 := [def-axiom]: #318
-#626 := [unit-resolution #319 #625]: #231
-#627 := (not #231)
-#622 := (or #627 #624)
-#628 := [th-lemma]: #622
-#266 := [unit-resolution #628 #626]: #624
-#629 := [th-lemma #266 #159 #625]: false
-#631 := [lemma #629]: #232
-#310 := (or #140 #317)
-#321 := [def-axiom]: #310
-#271 := [unit-resolution #321 #631]: #317
-#272 := (not #317)
-#632 := (or #272 #149)
-#630 := [th-lemma]: #632
-[unit-resolution #630 #271 #159]: false
-unsat
-2abc216904909a8ab09db7d8ddd5116874c405b2 60 0
-#2 := false
-#13 := 0::int
-decl f4 :: (-> S2 int)
-decl f6 :: S2
-#27 := f6
-#28 := (f4 f6)
-decl f5 :: S2
-#25 := f5
-#26 := (f4 f5)
-#137 := -1::int
-#140 := (* -1::int #28)
-#141 := (+ #26 #140)
-#139 := (>= #141 0::int)
-#143 := (ite #139 #26 #28)
-#149 := (* -1::int #143)
-#637 := (+ #28 #149)
-#628 := (<= #637 0::int)
-#317 := (= #28 #143)
-#232 := (not #139)
-#231 := (= #26 #143)
-#624 := (not #231)
-#150 := (+ #26 #149)
-#151 := (<= #150 0::int)
-#156 := (not #151)
-#29 := (<= #28 #26)
-#30 := (ite #29 #26 #28)
-#31 := (<= #26 #30)
-#32 := (not #31)
-#157 := (iff #32 #156)
-#154 := (iff #31 #151)
-#146 := (<= #26 #143)
-#152 := (iff #146 #151)
-#153 := [rewrite]: #152
-#147 := (iff #31 #146)
-#144 := (= #30 #143)
-#138 := (iff #29 #139)
-#142 := [rewrite]: #138
-#145 := [monotonicity #142]: #144
-#148 := [monotonicity #145]: #147
-#155 := [trans #148 #153]: #154
-#158 := [monotonicity #155]: #157
-#134 := [asserted]: #32
-#159 := [mp #134 #158]: #156
-#280 := [hypothesis]: #231
-#625 := (or #624 #151)
-#626 := [th-lemma]: #625
-#627 := [unit-resolution #626 #280 #159]: false
-#622 := [lemma #627]: #624
-#318 := (or #232 #231)
-#319 := [def-axiom]: #318
-#629 := [unit-resolution #319 #622]: #232
-#310 := (or #139 #317)
-#321 := [def-axiom]: #310
-#631 := [unit-resolution #321 #629]: #317
-#271 := (not #317)
-#272 := (or #271 #628)
-#632 := [th-lemma]: #272
-#630 := [unit-resolution #632 #631]: #628
-[th-lemma #159 #629 #630]: false
-unsat
-db10b3baed96f5ad894a70d823fdba86b4614481 253 0
+04cc411b96731925afb67c561af17d4cb6d68cf0 253 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -23161,7 +23100,172 @@
 #473 := [lemma #472]: #233
 [unit-resolution #631 #473 #487]: false
 unsat
-14969492cac173e86b554790b2b1280f30825e8b 437 0
+80aafa9ce13a262b7746b90465ebd387a9798fb0 60 0
+#2 := false
+#13 := 0::int
+decl f4 :: (-> S2 int)
+decl f6 :: S2
+#27 := f6
+#28 := (f4 f6)
+decl f5 :: S2
+#25 := f5
+#26 := (f4 f5)
+#137 := -1::int
+#140 := (* -1::int #28)
+#141 := (+ #26 #140)
+#139 := (>= #141 0::int)
+#143 := (ite #139 #26 #28)
+#149 := (* -1::int #143)
+#637 := (+ #28 #149)
+#628 := (<= #637 0::int)
+#317 := (= #28 #143)
+#232 := (not #139)
+#231 := (= #26 #143)
+#624 := (not #231)
+#150 := (+ #26 #149)
+#151 := (<= #150 0::int)
+#156 := (not #151)
+#29 := (<= #28 #26)
+#30 := (ite #29 #26 #28)
+#31 := (<= #26 #30)
+#32 := (not #31)
+#157 := (iff #32 #156)
+#154 := (iff #31 #151)
+#146 := (<= #26 #143)
+#152 := (iff #146 #151)
+#153 := [rewrite]: #152
+#147 := (iff #31 #146)
+#144 := (= #30 #143)
+#138 := (iff #29 #139)
+#142 := [rewrite]: #138
+#145 := [monotonicity #142]: #144
+#148 := [monotonicity #145]: #147
+#155 := [trans #148 #153]: #154
+#158 := [monotonicity #155]: #157
+#134 := [asserted]: #32
+#159 := [mp #134 #158]: #156
+#280 := [hypothesis]: #231
+#625 := (or #624 #151)
+#626 := [th-lemma]: #625
+#627 := [unit-resolution #626 #280 #159]: false
+#622 := [lemma #627]: #624
+#318 := (or #232 #231)
+#319 := [def-axiom]: #318
+#629 := [unit-resolution #319 #622]: #232
+#310 := (or #139 #317)
+#321 := [def-axiom]: #310
+#631 := [unit-resolution #321 #629]: #317
+#271 := (not #317)
+#272 := (or #271 #628)
+#632 := [th-lemma]: #272
+#630 := [unit-resolution #632 #631]: #628
+[th-lemma #159 #629 #630]: false
+unsat
+afcf8a254d165c5e9d701ed584fa3d55dcc74a09 103 0
+#2 := false
+#13 := 0::int
+decl f4 :: (-> S2 int)
+decl f7 :: S2
+#30 := f7
+#31 := (f4 f7)
+decl f6 :: S2
+#27 := f6
+#28 := (f4 f6)
+#143 := -1::int
+#146 := (* -1::int #31)
+#150 := (+ #28 #146)
+#151 := (<= #150 0::int)
+#154 := (ite #151 #28 #31)
+#162 := (* -1::int #154)
+decl f5 :: S2
+#25 := f5
+#26 := (f4 f5)
+#163 := (+ #26 #162)
+#161 := (>= #163 0::int)
+#177 := (* -1::int #28)
+#178 := (+ #26 #177)
+#176 := (>= #178 0::int)
+#175 := (not #176)
+#147 := (+ #26 #146)
+#145 := (>= #147 0::int)
+#144 := (not #145)
+#187 := (and #144 #161 #175)
+#33 := (<= #28 #31)
+#34 := (ite #33 #28 #31)
+#35 := (< #26 #34)
+#36 := (not #35)
+#32 := (< #26 #31)
+#37 := (and #32 #36)
+#29 := (< #26 #28)
+#38 := (and #29 #37)
+#190 := (iff #38 #187)
+#181 := (and #144 #161)
+#184 := (and #175 #181)
+#188 := (iff #184 #187)
+#189 := [rewrite]: #188
+#185 := (iff #38 #184)
+#182 := (iff #37 #181)
+#173 := (iff #36 #161)
+#160 := (not #161)
+#168 := (not #160)
+#171 := (iff #168 #161)
+#172 := [rewrite]: #171
+#169 := (iff #36 #168)
+#166 := (iff #35 #160)
+#157 := (< #26 #154)
+#164 := (iff #157 #160)
+#165 := [rewrite]: #164
+#158 := (iff #35 #157)
+#155 := (= #34 #154)
+#152 := (iff #33 #151)
+#153 := [rewrite]: #152
+#156 := [monotonicity #153]: #155
+#159 := [monotonicity #156]: #158
+#167 := [trans #159 #165]: #166
+#170 := [monotonicity #167]: #169
+#174 := [trans #170 #172]: #173
+#148 := (iff #32 #144)
+#149 := [rewrite]: #148
+#183 := [monotonicity #149 #174]: #182
+#179 := (iff #29 #175)
+#180 := [rewrite]: #179
+#186 := [monotonicity #180 #183]: #185
+#191 := [trans #186 #189]: #190
+#140 := [asserted]: #38
+#192 := [mp #140 #191]: #187
+#194 := [and-elim #192]: #161
+#193 := [and-elim #192]: #144
+#365 := (+ #31 #162)
+#638 := (<= #365 0::int)
+#353 := (= #31 #154)
+#268 := (not #151)
+#267 := (= #28 #154)
+#643 := (not #267)
+#652 := (+ #28 #162)
+#374 := (<= #652 0::int)
+#645 := (not #374)
+#195 := [and-elim #192]: #175
+#366 := [hypothesis]: #374
+#367 := [th-lemma #366 #195 #194]: false
+#646 := [lemma #367]: #645
+#361 := [hypothesis]: #267
+#647 := (or #643 #374)
+#644 := [th-lemma]: #647
+#648 := [unit-resolution #644 #361 #646]: false
+#637 := [lemma #648]: #643
+#354 := (or #268 #267)
+#355 := [def-axiom]: #354
+#634 := [unit-resolution #355 #637]: #268
+#346 := (or #151 #353)
+#357 := [def-axiom]: #346
+#635 := [unit-resolution #357 #634]: #353
+#640 := (not #353)
+#641 := (or #640 #638)
+#636 := [th-lemma]: #641
+#642 := [unit-resolution #636 #635]: #638
+[th-lemma #642 #193 #194]: false
+unsat
+b9568adc9ac22f504348a42395408d6d8271d777 437 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -23599,111 +23703,7 @@
 #462 := [unit-resolution #492 #479]: #669
 [th-lemma #462 #528 #194 #475 #461]: false
 unsat
-89bc3a6333da51700f7daac14eb84da9abc113a1 103 0
-#2 := false
-#13 := 0::int
-decl f4 :: (-> S2 int)
-decl f7 :: S2
-#30 := f7
-#31 := (f4 f7)
-decl f6 :: S2
-#27 := f6
-#28 := (f4 f6)
-#143 := -1::int
-#146 := (* -1::int #31)
-#150 := (+ #28 #146)
-#151 := (<= #150 0::int)
-#154 := (ite #151 #28 #31)
-#162 := (* -1::int #154)
-decl f5 :: S2
-#25 := f5
-#26 := (f4 f5)
-#163 := (+ #26 #162)
-#161 := (>= #163 0::int)
-#177 := (* -1::int #28)
-#178 := (+ #26 #177)
-#176 := (>= #178 0::int)
-#175 := (not #176)
-#147 := (+ #26 #146)
-#145 := (>= #147 0::int)
-#144 := (not #145)
-#187 := (and #144 #161 #175)
-#33 := (<= #28 #31)
-#34 := (ite #33 #28 #31)
-#35 := (< #26 #34)
-#36 := (not #35)
-#32 := (< #26 #31)
-#37 := (and #32 #36)
-#29 := (< #26 #28)
-#38 := (and #29 #37)
-#190 := (iff #38 #187)
-#181 := (and #144 #161)
-#184 := (and #175 #181)
-#188 := (iff #184 #187)
-#189 := [rewrite]: #188
-#185 := (iff #38 #184)
-#182 := (iff #37 #181)
-#173 := (iff #36 #161)
-#160 := (not #161)
-#168 := (not #160)
-#171 := (iff #168 #161)
-#172 := [rewrite]: #171
-#169 := (iff #36 #168)
-#166 := (iff #35 #160)
-#157 := (< #26 #154)
-#164 := (iff #157 #160)
-#165 := [rewrite]: #164
-#158 := (iff #35 #157)
-#155 := (= #34 #154)
-#152 := (iff #33 #151)
-#153 := [rewrite]: #152
-#156 := [monotonicity #153]: #155
-#159 := [monotonicity #156]: #158
-#167 := [trans #159 #165]: #166
-#170 := [monotonicity #167]: #169
-#174 := [trans #170 #172]: #173
-#148 := (iff #32 #144)
-#149 := [rewrite]: #148
-#183 := [monotonicity #149 #174]: #182
-#179 := (iff #29 #175)
-#180 := [rewrite]: #179
-#186 := [monotonicity #180 #183]: #185
-#191 := [trans #186 #189]: #190
-#140 := [asserted]: #38
-#192 := [mp #140 #191]: #187
-#194 := [and-elim #192]: #161
-#193 := [and-elim #192]: #144
-#365 := (+ #31 #162)
-#638 := (<= #365 0::int)
-#353 := (= #31 #154)
-#268 := (not #151)
-#267 := (= #28 #154)
-#643 := (not #267)
-#652 := (+ #28 #162)
-#374 := (<= #652 0::int)
-#645 := (not #374)
-#195 := [and-elim #192]: #175
-#366 := [hypothesis]: #374
-#367 := [th-lemma #366 #195 #194]: false
-#646 := [lemma #367]: #645
-#361 := [hypothesis]: #267
-#647 := (or #643 #374)
-#644 := [th-lemma]: #647
-#648 := [unit-resolution #644 #361 #646]: false
-#637 := [lemma #648]: #643
-#354 := (or #268 #267)
-#355 := [def-axiom]: #354
-#634 := [unit-resolution #355 #637]: #268
-#346 := (or #151 #353)
-#357 := [def-axiom]: #346
-#635 := [unit-resolution #357 #634]: #353
-#640 := (not #353)
-#641 := (or #640 #638)
-#636 := [th-lemma]: #641
-#642 := [unit-resolution #636 #635]: #638
-[th-lemma #642 #193 #194]: false
-unsat
-c39739842d64e1dca61912be5a777a90f01e28fd 117 0
+caea920980c91680caa298496d6beb2d2bf61295 117 0
 #2 := false
 decl f3 :: (-> int S2)
 decl f4 :: (-> S2 int)
@@ -23821,7 +23821,7 @@
 #559 := [trans #554 #555]: #162
 [unit-resolution #168 #559]: false
 unsat
-452992a55139d640bc8969517cd3166d0f13bb37 103 0
+d7b83db7c0c4e066fdea2d94e35ab3cc620d56df 103 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -23925,7 +23925,7 @@
 #642 := [unit-resolution #636 #635]: #639
 [th-lemma #642 #195 #194]: false
 unsat
-c3edc6cce39c9c380e8b07a4426540e2db018197 156 0
+140237685072a702cc83b447cdc8b15858b3f321 156 0
 #2 := false
 decl f3 :: (-> int S2)
 #13 := 0::int
@@ -24082,7 +24082,7 @@
 #134 := [asserted]: #32
 [unit-resolution #134 #583]: false
 unsat
-c2cc039657273f4c31549e108b87c8f33092d45f 119 0
+7941a5e6f861d5ba779c3ff6672cac31550af836 119 0
 #2 := false
 decl f3 :: (-> int S2)
 decl f4 :: (-> S2 int)
@@ -24202,7 +24202,7 @@
 #540 := [trans #557 #539]: #162
 [unit-resolution #168 #540]: false
 unsat
-a6a23143d2240b5fcacf31f97f0b436ce20b01cf 164 0
+fbf28453c2565ae4248c42863556e4f8088a62a2 164 0
 #2 := false
 decl f3 :: (-> int S2)
 decl f4 :: (-> S2 int)
@@ -24367,7 +24367,7 @@
 #142 := [mp #133 #139]: #137
 [unit-resolution #142 #586]: false
 unsat
-f5e2e20fb8c501f38b6d2f15c9fef9418df3a3f5 139 0
+c457a6610bcddee5fbeec4bb3572ce6f1d88807f 139 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -24507,25 +24507,7 @@
 #260 := [th-lemma]: #618
 [unit-resolution #260 #139 #617]: false
 unsat
-88db0d3335480a81cfc5f118ecaef1678c52c57c 17 0
-#2 := false
-#8 := 0::int
-#9 := (= 0::int 0::int)
-#10 := (not #9)
-#35 := (iff #10 false)
-#1 := true
-#30 := (not true)
-#33 := (iff #30 false)
-#34 := [rewrite]: #33
-#31 := (iff #10 #30)
-#28 := (iff #9 true)
-#29 := [rewrite]: #28
-#32 := [monotonicity #29]: #31
-#36 := [trans #32 #34]: #35
-#27 := [asserted]: #10
-[mp #27 #36]: false
-unsat
-3413e63e105cab337755fe6950808ba664d2597a 75 0
+f025d25f9f9c8e38fac474962b7f2dfba4e1a07a 75 0
 #2 := false
 decl f3 :: (-> int S2)
 #28 := 1::int
@@ -24601,33 +24583,7 @@
 #153 := [and-elim #151]: #32
 [unit-resolution #153 #339]: false
 unsat
-3bd4cf5a7808f0310fbc231a810dbf418d0f69cc 25 0
-#2 := false
-#8 := 0::int
-#9 := (- 0::int)
-#10 := (= 0::int #9)
-#11 := (not #10)
-#43 := (iff #11 false)
-#1 := true
-#38 := (not true)
-#41 := (iff #38 false)
-#42 := [rewrite]: #41
-#39 := (iff #11 #38)
-#36 := (iff #10 true)
-#31 := (= 0::int 0::int)
-#34 := (iff #31 true)
-#35 := [rewrite]: #34
-#32 := (iff #10 #31)
-#29 := (= #9 0::int)
-#30 := [rewrite]: #29
-#33 := [monotonicity #30]: #32
-#37 := [trans #33 #35]: #36
-#40 := [monotonicity #37]: #39
-#44 := [trans #40 #42]: #43
-#28 := [asserted]: #11
-[mp #28 #44]: false
-unsat
-7c99e4c706a5bfe7c4bac45e274e4bb5f5ba171b 20 0
+c8f2ead1c220dd8ed211af0515b88614b1941079 20 0
 #2 := false
 decl f4 :: (-> S2 int)
 decl f5 :: S2
@@ -24648,25 +24604,7 @@
 #130 := [asserted]: #28
 [mp #130 #141]: false
 unsat
-575466500975f7b2e0bdbc552a0711af0164ab2f 17 0
-#2 := false
-#8 := 1::int
-#9 := (= 1::int 1::int)
-#10 := (not #9)
-#35 := (iff #10 false)
-#1 := true
-#30 := (not true)
-#33 := (iff #30 false)
-#34 := [rewrite]: #33
-#31 := (iff #10 #30)
-#28 := (iff #9 true)
-#29 := [rewrite]: #28
-#32 := [monotonicity #29]: #31
-#36 := [trans #32 #34]: #35
-#27 := [asserted]: #10
-[mp #27 #36]: false
-unsat
-2c1b55c23f4e7de8da8d5f6f9bfa461e094d5fdc 319 0
+747cc264821ac8db5ad7ac37788ade0f4e407c6a 319 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -24986,83 +24924,51 @@
 #507 := [unit-resolution #506 #504]: #623
 [th-lemma #507 #516 #163 #162]: false
 unsat
-a2fa5e02114a58b8161c5f17b5db7f1bd8de21cc 34 0
-#2 := false
-#8 := 1::int
-#9 := (- 1::int)
-#10 := (= #9 1::int)
+ee051bde3c817c0890ce724f834fd4253b261c0e 17 0
+#2 := false
+#8 := 0::int
+#9 := (= 0::int 0::int)
+#10 := (not #9)
+#35 := (iff #10 false)
+#1 := true
+#30 := (not true)
+#33 := (iff #30 false)
+#34 := [rewrite]: #33
+#31 := (iff #10 #30)
+#28 := (iff #9 true)
+#29 := [rewrite]: #28
+#32 := [monotonicity #29]: #31
+#36 := [trans #32 #34]: #35
+#27 := [asserted]: #10
+[mp #27 #36]: false
+unsat
+28a8e8694abd02c43e1fd53f8a8f970f52a27053 25 0
+#2 := false
+#8 := 0::int
+#9 := (- 0::int)
+#10 := (= 0::int #9)
 #11 := (not #10)
-#12 := (not #11)
-#52 := (iff #12 false)
-#1 := true
-#47 := (not true)
-#50 := (iff #47 false)
-#51 := [rewrite]: #50
-#48 := (iff #12 #47)
-#45 := (iff #11 true)
-#40 := (not false)
-#43 := (iff #40 true)
-#44 := [rewrite]: #43
-#41 := (iff #11 #40)
-#38 := (iff #10 false)
-#30 := -1::int
-#33 := (= -1::int 1::int)
-#36 := (iff #33 false)
-#37 := [rewrite]: #36
-#34 := (iff #10 #33)
-#31 := (= #9 -1::int)
-#32 := [rewrite]: #31
-#35 := [monotonicity #32]: #34
-#39 := [trans #35 #37]: #38
-#42 := [monotonicity #39]: #41
-#46 := [trans #42 #44]: #45
-#49 := [monotonicity #46]: #48
-#53 := [trans #49 #51]: #52
-#29 := [asserted]: #12
-[mp #29 #53]: false
-unsat
-833da25c34dad32196cafeb37ee24e9c4b09f5e6 40 0
-#2 := false
-#12 := 567::int
-#10 := 345::int
-#8 := 123::int
-#9 := (- 123::int)
-#11 := (+ #9 345::int)
-#13 := (< #11 567::int)
-#14 := (not #13)
-#58 := (iff #14 false)
-#38 := 222::int
-#43 := (< 222::int 567::int)
-#46 := (not #43)
-#56 := (iff #46 false)
-#1 := true
-#51 := (not true)
-#54 := (iff #51 false)
-#55 := [rewrite]: #54
-#52 := (iff #46 #51)
-#49 := (iff #43 true)
-#50 := [rewrite]: #49
-#53 := [monotonicity #50]: #52
-#57 := [trans #53 #55]: #56
-#47 := (iff #14 #46)
-#44 := (iff #13 #43)
-#41 := (= #11 222::int)
-#32 := -123::int
-#35 := (+ -123::int 345::int)
-#39 := (= #35 222::int)
-#40 := [rewrite]: #39
-#36 := (= #11 #35)
-#33 := (= #9 -123::int)
-#34 := [rewrite]: #33
-#37 := [monotonicity #34]: #36
-#42 := [trans #37 #40]: #41
-#45 := [monotonicity #42]: #44
-#48 := [monotonicity #45]: #47
-#59 := [trans #48 #57]: #58
-#31 := [asserted]: #14
-[mp #31 #59]: false
-unsat
-b1d5ad1c199444dbf6fe73759c2c90d7c60b146e 325 0
+#43 := (iff #11 false)
+#1 := true
+#38 := (not true)
+#41 := (iff #38 false)
+#42 := [rewrite]: #41
+#39 := (iff #11 #38)
+#36 := (iff #10 true)
+#31 := (= 0::int 0::int)
+#34 := (iff #31 true)
+#35 := [rewrite]: #34
+#32 := (iff #10 #31)
+#29 := (= #9 0::int)
+#30 := [rewrite]: #29
+#33 := [monotonicity #30]: #32
+#37 := [trans #33 #35]: #36
+#40 := [monotonicity #37]: #39
+#44 := [trans #40 #42]: #43
+#28 := [asserted]: #11
+[mp #28 #44]: false
+unsat
+0df3e9ed226dfff3cefc71e4bc79cb937d7b5379 325 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -25388,38 +25294,60 @@
 #515 := [th-lemma]: #519
 [unit-resolution #515 #510 #517]: false
 unsat
-94a3c69e40ab8834fda1414aac36766b6e6d0448 30 0
-#2 := false
-#10 := 2345678901::int
-#8 := 123456789::int
-#9 := (- 123456789::int)
-#11 := (< #9 2345678901::int)
+7e2eed6546d767248580207671baf3c1fef46bda 17 0
+#2 := false
+#8 := 1::int
+#9 := (= 1::int 1::int)
+#10 := (not #9)
+#35 := (iff #10 false)
+#1 := true
+#30 := (not true)
+#33 := (iff #30 false)
+#34 := [rewrite]: #33
+#31 := (iff #10 #30)
+#28 := (iff #9 true)
+#29 := [rewrite]: #28
+#32 := [monotonicity #29]: #31
+#36 := [trans #32 #34]: #35
+#27 := [asserted]: #10
+[mp #27 #36]: false
+unsat
+83be50b0dfcaa8788a3a347c206dfe65b71396c0 34 0
+#2 := false
+#8 := 1::int
+#9 := (- 1::int)
+#10 := (= #9 1::int)
+#11 := (not #10)
 #12 := (not #11)
-#48 := (iff #12 false)
-#30 := -123456789::int
-#33 := (< -123456789::int 2345678901::int)
-#36 := (not #33)
-#46 := (iff #36 false)
-#1 := true
-#41 := (not true)
-#44 := (iff #41 false)
-#45 := [rewrite]: #44
-#42 := (iff #36 #41)
-#39 := (iff #33 true)
-#40 := [rewrite]: #39
-#43 := [monotonicity #40]: #42
-#47 := [trans #43 #45]: #46
-#37 := (iff #12 #36)
-#34 := (iff #11 #33)
-#31 := (= #9 -123456789::int)
+#52 := (iff #12 false)
+#1 := true
+#47 := (not true)
+#50 := (iff #47 false)
+#51 := [rewrite]: #50
+#48 := (iff #12 #47)
+#45 := (iff #11 true)
+#40 := (not false)
+#43 := (iff #40 true)
+#44 := [rewrite]: #43
+#41 := (iff #11 #40)
+#38 := (iff #10 false)
+#30 := -1::int
+#33 := (= -1::int 1::int)
+#36 := (iff #33 false)
+#37 := [rewrite]: #36
+#34 := (iff #10 #33)
+#31 := (= #9 -1::int)
 #32 := [rewrite]: #31
 #35 := [monotonicity #32]: #34
-#38 := [monotonicity #35]: #37
-#49 := [trans #38 #47]: #48
+#39 := [trans #35 #37]: #38
+#42 := [monotonicity #39]: #41
+#46 := [trans #42 #44]: #45
+#49 := [monotonicity #46]: #48
+#53 := [trans #49 #51]: #52
 #29 := [asserted]: #12
-[mp #29 #49]: false
-unsat
-a489de1c5d2012bec455302dfb4702c1a1df77d2 38 0
+[mp #29 #53]: false
+unsat
+87afea5c9ab9449c41123c8fdd4e20f06a72b155 38 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -25458,61 +25386,79 @@
 #228 := [unit-resolution #313 #154]: #144
 [unit-resolution #228 #155]: false
 unsat
-44da310bca35772c7c4ab7b6f9468b0cf95baf9e 26 0
-#2 := false
-decl f3 :: int
-#8 := f3
-#9 := 0::int
-#10 := (+ f3 0::int)
-#11 := (= #10 f3)
+6b06bc907860e099747eaf937729c46239164204 40 0
+#2 := false
+#12 := 567::int
+#10 := 345::int
+#8 := 123::int
+#9 := (- 123::int)
+#11 := (+ #9 345::int)
+#13 := (< #11 567::int)
+#14 := (not #13)
+#58 := (iff #14 false)
+#38 := 222::int
+#43 := (< 222::int 567::int)
+#46 := (not #43)
+#56 := (iff #46 false)
+#1 := true
+#51 := (not true)
+#54 := (iff #51 false)
+#55 := [rewrite]: #54
+#52 := (iff #46 #51)
+#49 := (iff #43 true)
+#50 := [rewrite]: #49
+#53 := [monotonicity #50]: #52
+#57 := [trans #53 #55]: #56
+#47 := (iff #14 #46)
+#44 := (iff #13 #43)
+#41 := (= #11 222::int)
+#32 := -123::int
+#35 := (+ -123::int 345::int)
+#39 := (= #35 222::int)
+#40 := [rewrite]: #39
+#36 := (= #11 #35)
+#33 := (= #9 -123::int)
+#34 := [rewrite]: #33
+#37 := [monotonicity #34]: #36
+#42 := [trans #37 #40]: #41
+#45 := [monotonicity #42]: #44
+#48 := [monotonicity #45]: #47
+#59 := [trans #48 #57]: #58
+#31 := [asserted]: #14
+[mp #31 #59]: false
+unsat
+b28c9714ddda449b19d3e58f8860da63f62b1deb 30 0
+#2 := false
+#10 := 2345678901::int
+#8 := 123456789::int
+#9 := (- 123456789::int)
+#11 := (< #9 2345678901::int)
 #12 := (not #11)
-#43 := (iff #12 false)
-#1 := true
-#38 := (not true)
-#41 := (iff #38 false)
-#42 := [rewrite]: #41
-#39 := (iff #12 #38)
-#36 := (iff #11 true)
-#31 := (= f3 f3)
-#34 := (iff #31 true)
-#35 := [rewrite]: #34
-#32 := (iff #11 #31)
-#30 := [rewrite]: #11
-#33 := [monotonicity #30]: #32
-#37 := [trans #33 #35]: #36
-#40 := [monotonicity #37]: #39
-#44 := [trans #40 #42]: #43
+#48 := (iff #12 false)
+#30 := -123456789::int
+#33 := (< -123456789::int 2345678901::int)
+#36 := (not #33)
+#46 := (iff #36 false)
+#1 := true
+#41 := (not true)
+#44 := (iff #41 false)
+#45 := [rewrite]: #44
+#42 := (iff #36 #41)
+#39 := (iff #33 true)
+#40 := [rewrite]: #39
+#43 := [monotonicity #40]: #42
+#47 := [trans #43 #45]: #46
+#37 := (iff #12 #36)
+#34 := (iff #11 #33)
+#31 := (= #9 -123456789::int)
+#32 := [rewrite]: #31
+#35 := [monotonicity #32]: #34
+#38 := [monotonicity #35]: #37
+#49 := [trans #38 #47]: #48
 #29 := [asserted]: #12
-[mp #29 #44]: false
-unsat
-fed373ed1a62868b78e70bd0d9a3428669ee5457 26 0
-#2 := false
-decl f3 :: int
-#9 := f3
-#8 := 0::int
-#10 := (+ 0::int f3)
-#11 := (= #10 f3)
-#12 := (not #11)
-#43 := (iff #12 false)
-#1 := true
-#38 := (not true)
-#41 := (iff #38 false)
-#42 := [rewrite]: #41
-#39 := (iff #12 #38)
-#36 := (iff #11 true)
-#31 := (= f3 f3)
-#34 := (iff #31 true)
-#35 := [rewrite]: #34
-#32 := (iff #11 #31)
-#30 := [rewrite]: #11
-#33 := [monotonicity #30]: #32
-#37 := [trans #33 #35]: #36
-#40 := [monotonicity #37]: #39
-#44 := [trans #40 #42]: #43
-#29 := [asserted]: #12
-[mp #29 #44]: false
-unsat
-957a81798a07625d9f9bb6cae6421523a9942b09 70 0
+[mp #29 #49]: false
+unsat
+c7398895db207a7bb660baa83c993733723b339a 70 0
 #2 := false
 #149 := -1::int
 decl f4 :: (-> S2 int)
@@ -25583,37 +25529,34 @@
 #333 := [unit-resolution #247 #172]: #332
 [unit-resolution #333 #352 #253]: false
 unsat
-bb9d75a7a3abc7f60dd441b4f982645b6039e03e 29 0
+fbc565374e3b4fadcdcd336b454d25bde6467984 26 0
 #2 := false
 decl f3 :: int
 #8 := f3
-decl f4 :: int
-#9 := f4
-#11 := (+ f4 f3)
-#10 := (+ f3 f4)
-#12 := (= #10 #11)
-#13 := (not #12)
-#45 := (iff #13 false)
-#1 := true
-#40 := (not true)
-#43 := (iff #40 false)
-#44 := [rewrite]: #43
-#41 := (iff #13 #40)
-#38 := (iff #12 true)
-#33 := (= #10 #10)
-#36 := (iff #33 true)
-#37 := [rewrite]: #36
-#34 := (iff #12 #33)
-#31 := (= #11 #10)
-#32 := [rewrite]: #31
-#35 := [monotonicity #32]: #34
-#39 := [trans #35 #37]: #38
-#42 := [monotonicity #39]: #41
-#46 := [trans #42 #44]: #45
-#30 := [asserted]: #13
-[mp #30 #46]: false
-unsat
-7a80c4532f5787abddc50ad2e7bc9838390acb73 11 0
+#9 := 0::int
+#10 := (+ f3 0::int)
+#11 := (= #10 f3)
+#12 := (not #11)
+#43 := (iff #12 false)
+#1 := true
+#38 := (not true)
+#41 := (iff #38 false)
+#42 := [rewrite]: #41
+#39 := (iff #12 #38)
+#36 := (iff #11 true)
+#31 := (= f3 f3)
+#34 := (iff #31 true)
+#35 := [rewrite]: #34
+#32 := (iff #11 #31)
+#30 := [rewrite]: #11
+#33 := [monotonicity #30]: #32
+#37 := [trans #33 #35]: #36
+#40 := [monotonicity #37]: #39
+#44 := [trans #40 #42]: #43
+#29 := [asserted]: #12
+[mp #29 #44]: false
+unsat
+1c6447ae3efd555f314253453337411963c9b538 11 0
 #2 := false
 decl f4 :: (-> S2 int)
 decl f5 :: S2
@@ -25625,41 +25568,34 @@
 #129 := [asserted]: #27
 [mp #129 #133]: false
 unsat
-698ca3e8d5433877845f98d57033a6d63af62497 33 0
-#2 := false
-decl f5 :: int
-#10 := f5
-decl f4 :: int
-#9 := f4
+1e80490820921041707f27ae0a0d7240e7d720ab 26 0
+#2 := false
 decl f3 :: int
-#8 := f3
-#13 := (+ f3 f4)
-#14 := (+ #13 f5)
-#11 := (+ f4 f5)
-#12 := (+ f3 #11)
-#15 := (= #12 #14)
-#16 := (not #15)
-#48 := (iff #16 false)
-#1 := true
-#43 := (not true)
-#46 := (iff #43 false)
-#47 := [rewrite]: #46
-#44 := (iff #16 #43)
-#41 := (iff #15 true)
-#36 := (= #12 #12)
-#39 := (iff #36 true)
-#40 := [rewrite]: #39
-#37 := (iff #15 #36)
-#34 := (= #14 #12)
+#9 := f3
+#8 := 0::int
+#10 := (+ 0::int f3)
+#11 := (= #10 f3)
+#12 := (not #11)
+#43 := (iff #12 false)
+#1 := true
+#38 := (not true)
+#41 := (iff #38 false)
+#42 := [rewrite]: #41
+#39 := (iff #12 #38)
+#36 := (iff #11 true)
+#31 := (= f3 f3)
+#34 := (iff #31 true)
 #35 := [rewrite]: #34
-#38 := [monotonicity #35]: #37
-#42 := [trans #38 #40]: #41
-#45 := [monotonicity #42]: #44
-#49 := [trans #45 #47]: #48
-#33 := [asserted]: #16
-[mp #33 #49]: false
-unsat
-a5e0b28483c053128bc0be113d20a82250433b74 54 0
+#32 := (iff #11 #31)
+#30 := [rewrite]: #11
+#33 := [monotonicity #30]: #32
+#37 := [trans #33 #35]: #36
+#40 := [monotonicity #37]: #39
+#44 := [trans #40 #42]: #43
+#29 := [asserted]: #12
+[mp #29 #44]: false
+unsat
+efe17b9041c87fa89222f21112652ecefaf9bedd 54 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -25714,53 +25650,37 @@
 #171 := [and-elim #170]: #144
 [th-lemma #171 #172 #173]: false
 unsat
-41dc588e082dd0bed2354a8e37e9f3c6c05151c1 45 0
-#2 := false
+71f4e35d43eaaeb0679a8b9fedb7bbbab02c4bce 29 0
+#2 := false
+decl f3 :: int
+#8 := f3
 decl f4 :: int
 #9 := f4
-#13 := (- f4)
-decl f3 :: int
-#8 := f3
-#14 := (= f3 #13)
-#11 := 0::int
+#11 := (+ f4 f3)
 #10 := (+ f3 f4)
-#12 := (= #10 0::int)
-#15 := (iff #12 #14)
-#16 := (not #15)
-#62 := (iff #16 false)
-#47 := (not #12)
-#34 := -1::int
-#35 := (* -1::int f4)
-#38 := (= f3 #35)
-#48 := (iff #38 #47)
-#60 := (iff #48 false)
-#55 := (iff #12 #47)
-#58 := (iff #55 false)
-#59 := [rewrite]: #58
-#56 := (iff #48 #55)
-#53 := (iff #38 #12)
-#54 := [rewrite]: #53
-#57 := [monotonicity #54]: #56
-#61 := [trans #57 #59]: #60
-#51 := (iff #16 #48)
-#41 := (iff #12 #38)
-#44 := (not #41)
-#49 := (iff #44 #48)
-#50 := [rewrite]: #49
-#45 := (iff #16 #44)
-#42 := (iff #15 #41)
-#39 := (iff #14 #38)
-#36 := (= #13 #35)
+#12 := (= #10 #11)
+#13 := (not #12)
+#45 := (iff #13 false)
+#1 := true
+#40 := (not true)
+#43 := (iff #40 false)
+#44 := [rewrite]: #43
+#41 := (iff #13 #40)
+#38 := (iff #12 true)
+#33 := (= #10 #10)
+#36 := (iff #33 true)
 #37 := [rewrite]: #36
-#40 := [monotonicity #37]: #39
-#43 := [monotonicity #40]: #42
-#46 := [monotonicity #43]: #45
-#52 := [trans #46 #50]: #51
-#63 := [trans #52 #61]: #62
-#33 := [asserted]: #16
-[mp #33 #63]: false
-unsat
-4d82a9a048129e417a9e0a1825ce1ac4532cabd0 55 0
+#34 := (iff #12 #33)
+#31 := (= #11 #10)
+#32 := [rewrite]: #31
+#35 := [monotonicity #32]: #34
+#39 := [trans #35 #37]: #38
+#42 := [monotonicity #39]: #41
+#46 := [trans #42 #44]: #45
+#30 := [asserted]: #13
+[mp #30 #46]: false
+unsat
+c6c3e4476b55ace179a4bf0db3bd85166dd656f0 55 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -25816,7 +25736,41 @@
 #172 := [and-elim #171]: #144
 [th-lemma #172 #173 #174]: false
 unsat
-839ca15e4db302dc5cd29e9aa43868c766ec1b81 55 0
+29b7b3cf808acec0133f90b0ff01d3741beb5a05 33 0
+#2 := false
+decl f5 :: int
+#10 := f5
+decl f4 :: int
+#9 := f4
+decl f3 :: int
+#8 := f3
+#13 := (+ f3 f4)
+#14 := (+ #13 f5)
+#11 := (+ f4 f5)
+#12 := (+ f3 #11)
+#15 := (= #12 #14)
+#16 := (not #15)
+#48 := (iff #16 false)
+#1 := true
+#43 := (not true)
+#46 := (iff #43 false)
+#47 := [rewrite]: #46
+#44 := (iff #16 #43)
+#41 := (iff #15 true)
+#36 := (= #12 #12)
+#39 := (iff #36 true)
+#40 := [rewrite]: #39
+#37 := (iff #15 #36)
+#34 := (= #14 #12)
+#35 := [rewrite]: #34
+#38 := [monotonicity #35]: #37
+#42 := [trans #38 #40]: #41
+#45 := [monotonicity #42]: #44
+#49 := [trans #45 #47]: #48
+#33 := [asserted]: #16
+[mp #33 #49]: false
+unsat
+8b0fe59ad928398852287cdf2c2184de1f57bfbd 55 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -25872,7 +25826,53 @@
 #173 := [and-elim #171]: #152
 [th-lemma #173 #172 #174]: false
 unsat
-d7837998c869430b9e700142d2b377bead7796dc 26 0
+4237cbb86bd8822b359c36bc821360aed38710bb 45 0
+#2 := false
+decl f4 :: int
+#9 := f4
+#13 := (- f4)
+decl f3 :: int
+#8 := f3
+#14 := (= f3 #13)
+#11 := 0::int
+#10 := (+ f3 f4)
+#12 := (= #10 0::int)
+#15 := (iff #12 #14)
+#16 := (not #15)
+#62 := (iff #16 false)
+#47 := (not #12)
+#34 := -1::int
+#35 := (* -1::int f4)
+#38 := (= f3 #35)
+#48 := (iff #38 #47)
+#60 := (iff #48 false)
+#55 := (iff #12 #47)
+#58 := (iff #55 false)
+#59 := [rewrite]: #58
+#56 := (iff #48 #55)
+#53 := (iff #38 #12)
+#54 := [rewrite]: #53
+#57 := [monotonicity #54]: #56
+#61 := [trans #57 #59]: #60
+#51 := (iff #16 #48)
+#41 := (iff #12 #38)
+#44 := (not #41)
+#49 := (iff #44 #48)
+#50 := [rewrite]: #49
+#45 := (iff #16 #44)
+#42 := (iff #15 #41)
+#39 := (iff #14 #38)
+#36 := (= #13 #35)
+#37 := [rewrite]: #36
+#40 := [monotonicity #37]: #39
+#43 := [monotonicity #40]: #42
+#46 := [monotonicity #43]: #45
+#52 := [trans #46 #50]: #51
+#63 := [trans #52 #61]: #62
+#33 := [asserted]: #16
+[mp #33 #63]: false
+unsat
+113be911296a33250bbcd43128973cc59f93526e 26 0
 #2 := false
 #8 := 1::int
 #9 := (- 1::int)
@@ -25899,7 +25899,7 @@
 #28 := [asserted]: #11
 [mp #28 #45]: false
 unsat
-2fa07586f302aa9750784686f2cfa4df7ec4584e 61 0
+f6ff37f2a66568ce60ecd5249eff25718c85c238 61 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -25961,7 +25961,7 @@
 #179 := [and-elim #177]: #149
 [th-lemma #179 #178 #180]: false
 unsat
-70a72eb40efd415a7fc201441ac2d390324dc85f 26 0
+cec95d65322be695abf9c2181f05ec8f90e8a935 26 0
 #2 := false
 #8 := 3::int
 #9 := (- 3::int)
@@ -25988,7 +25988,7 @@
 #28 := [asserted]: #11
 [mp #28 #45]: false
 unsat
-fe16712a1fa51f4a62675a12f177489494d4ff85 53 0
+dab3885ba8215d926ee3c6f413de786f19602704 53 0
 #2 := false
 #13 := 0::int
 decl f4 :: (-> S2 int)
@@ -26042,7 +26042,7 @@
 #171 := [and-elim #169]: #149
 [th-lemma #171 #170 #172]: false
 unsat
-c4720018b6df523588840d966fa6b5f79e529106 58 0
+9d1587620b1ac03e716760e9b77670cdcbc0d869 58 0
 #2 := false
 decl f3 :: int
 #8 := f3
@@ -26101,7 +26101,7 @@
 #31 := [asserted]: #14
 [mp #31 #77]: false
 unsat
-c156df2cdcaafc0712bbd7f760cf7c1135b2a278 61 0
+2fe4017173baaf767c6629bd6852a7b438932e50 61 0
 #2 := false
 #8 := 0::int
 decl f3 :: int
@@ -26163,7 +26163,7 @@
 #31 := [asserted]: #14
 [mp #31 #79]: false
 unsat
-fc81f629d09c01783c65b3ee17baad49669d55bf 26 0
+6f7f580886df4b14f8fb404c5d3a00f03fbd8ee6 26 0
 #2 := false
 decl f3 :: int
 #8 := f3
@@ -26190,7 +26190,7 @@
 #29 := [asserted]: #12
 [mp #29 #44]: false
 unsat
-1c28009871674ce12da75bf1dced4812d4d59e07 61 0
+fdb98420125ded457439e02e837bc03d7148c23c 61 0
 #2 := false
 decl f3 :: int
 #8 := f3
@@ -26252,7 +26252,7 @@
 #31 := [asserted]: #14
 [mp #31 #79]: false
 unsat
-aec51136d021a387f2d6872e725f19b898f18ef5 32 0
+445783642ee7433013df57b7e4cef00ffeb157e0 32 0
 #2 := false
 decl f3 :: int
 #9 := f3
@@ -26285,34 +26285,7 @@
 #30 := [asserted]: #13
 [mp #30 #50]: false
 unsat
-65a9f6762bf7c73e050776f2f97205392ade9eb8 26 0
-#2 := false
-#9 := 0::int
-decl f3 :: int
-#8 := f3
-#10 := (* f3 0::int)
-#11 := (= #10 0::int)
-#12 := (not #11)
-#43 := (iff #12 false)
-#1 := true
-#38 := (not true)
-#41 := (iff #38 false)
-#42 := [rewrite]: #41
-#39 := (iff #12 #38)
-#36 := (iff #11 true)
-#31 := (= 0::int 0::int)
-#34 := (iff #31 true)
-#35 := [rewrite]: #34
-#32 := (iff #11 #31)
-#30 := [rewrite]: #11
-#33 := [monotonicity #30]: #32
-#37 := [trans #33 #35]: #36
-#40 := [monotonicity #37]: #39
-#44 := [trans #40 #42]: #43
-#29 := [asserted]: #12
-[mp #29 #44]: false
-unsat
-31fc2c351446233f2061fde4a4592b401c54f862 64 0
+ed57db9b5bc45b814efcbe55950db276a0ae6227 64 0
 #2 := false
 #12 := 0::int
 decl f4 :: int
@@ -26377,7 +26350,34 @@
 #32 := [asserted]: #15
 [mp #32 #81]: false
 unsat
-592736b964503a2e2a8b3d310866adf35fdeb70d 26 0
+5fea704d847c1f572f04828761c6aeed07320331 26 0
+#2 := false
+#9 := 0::int
+decl f3 :: int
+#8 := f3
+#10 := (* f3 0::int)
+#11 := (= #10 0::int)
+#12 := (not #11)
+#43 := (iff #12 false)
+#1 := true
+#38 := (not true)
+#41 := (iff #38 false)
+#42 := [rewrite]: #41
+#39 := (iff #12 #38)
+#36 := (iff #11 true)
+#31 := (= 0::int 0::int)
+#34 := (iff #31 true)
+#35 := [rewrite]: #34
+#32 := (iff #11 #31)
+#30 := [rewrite]: #11
+#33 := [monotonicity #30]: #32
+#37 := [trans #33 #35]: #36
+#40 := [monotonicity #37]: #39
+#44 := [trans #40 #42]: #43
+#29 := [asserted]: #12
+[mp #29 #44]: false
+unsat
+afeb47d1fabcd35b9434330dd3b684867663bcd6 26 0
 #2 := false
 #8 := 0::int
 decl f3 :: int
@@ -26404,7 +26404,7 @@
 #29 := [asserted]: #12
 [mp #29 #44]: false
 unsat
-7e5077e88974e2fa3da11f2fc124b2fc85a4f520 44 0
+5f6eb6ae429716b4776e5fd2a14d9da3158d991d 44 0
 #2 := false
 decl f3 :: int
 #8 := f3
@@ -26449,7 +26449,7 @@
 #31 := [asserted]: #14
 [mp #31 #61]: false
 unsat
-89e44e496d1c9e19d85ee56ab3fb92079351f1b0 26 0
+1eeb11e60a6bbbe94fa15811311d2d40ac3f4033 26 0
 #2 := false
 decl f3 :: int
 #8 := f3
@@ -26476,34 +26476,7 @@
 #29 := [asserted]: #12
 [mp #29 #44]: false
 unsat
-38200cf17f447eb7490b14a7927d61babf42be2c 26 0
-#2 := false
-decl f3 :: int
-#9 := f3
-#8 := 1::int
-#10 := (* 1::int f3)
-#11 := (= #10 f3)
-#12 := (not #11)
-#43 := (iff #12 false)
-#1 := true
-#38 := (not true)
-#41 := (iff #38 false)
-#42 := [rewrite]: #41
-#39 := (iff #12 #38)
-#36 := (iff #11 true)
-#31 := (= f3 f3)
-#34 := (iff #31 true)
-#35 := [rewrite]: #34
-#32 := (iff #11 #31)
-#30 := [rewrite]: #11
-#33 := [monotonicity #30]: #32
-#37 := [trans #33 #35]: #36
-#40 := [monotonicity #37]: #39
-#44 := [trans #40 #42]: #43
-#29 := [asserted]: #12
-[mp #29 #44]: false
-unsat
-891b65b932309e97c69155ee809ef85f6496b3c5 42 0
+fd6e7c25e63ac8e70326ced7855970dd3a736cfa 42 0
 #2 := false
 decl f3 :: int
 #8 := f3
@@ -26546,48 +26519,34 @@
 #31 := [asserted]: #14
 [mp #31 #59]: false
 unsat
-f1f03cdf8e0332171bfb331e70236cd578ef1b1a 40 0
+08503fa6172915df238b523388ddb33a24fd4cb7 26 0
 #2 := false
 decl f3 :: int
-#8 := f3
-#12 := (- f3)
-#9 := 1::int
-#10 := (- 1::int)
-#11 := (* f3 #10)
-#13 := (= #11 #12)
-#14 := (not #13)
-#57 := (iff #14 false)
-#1 := true
-#52 := (not true)
-#55 := (iff #52 false)
-#56 := [rewrite]: #55
-#53 := (iff #14 #52)
-#50 := (iff #13 true)
-#32 := -1::int
-#38 := (* -1::int f3)
-#45 := (= #38 #38)
-#48 := (iff #45 true)
-#49 := [rewrite]: #48
-#46 := (iff #13 #45)
-#43 := (= #12 #38)
-#44 := [rewrite]: #43
-#41 := (= #11 #38)
-#35 := (* f3 -1::int)
-#39 := (= #35 #38)
-#40 := [rewrite]: #39
-#36 := (= #11 #35)
-#33 := (= #10 -1::int)
-#34 := [rewrite]: #33
-#37 := [monotonicity #34]: #36
-#42 := [trans #37 #40]: #41
-#47 := [monotonicity #42 #44]: #46
-#51 := [trans #47 #49]: #50
-#54 := [monotonicity #51]: #53
-#58 := [trans #54 #56]: #57
-#31 := [asserted]: #14
-[mp #31 #58]: false
-unsat
-e90209aecaafc9e5a8d65cc3bfe9923d664d1180 48 0
+#9 := f3
+#8 := 1::int
+#10 := (* 1::int f3)
+#11 := (= #10 f3)
+#12 := (not #11)
+#43 := (iff #12 false)
+#1 := true
+#38 := (not true)
+#41 := (iff #38 false)
+#42 := [rewrite]: #41
+#39 := (iff #12 #38)
+#36 := (iff #11 true)
+#31 := (= f3 f3)
+#34 := (iff #31 true)
+#35 := [rewrite]: #34
+#32 := (iff #11 #31)
+#30 := [rewrite]: #11
+#33 := [monotonicity #30]: #32
+#37 := [trans #33 #35]: #36
+#40 := [monotonicity #37]: #39
+#44 := [trans #40 #42]: #43
+#29 := [asserted]: #12
+[mp #29 #44]: false
+unsat
+250ddfb8ca251f84a346d955cf6715564ce90b7a 48 0
 #2 := false
 decl f5 :: int
 #11 := f5
@@ -26636,7 +26595,48 @@
 #33 := [asserted]: #16
 [mp #33 #64]: false
 unsat
-dcb91b564372ef4df7bba10a66d7a6eecfdd1891 35 0
+2c2b089e4b5c6cb37aa179a9f71ce56ba7d47fd2 40 0
+#2 := false
+decl f3 :: int
+#8 := f3
+#12 := (- f3)
+#9 := 1::int
+#10 := (- 1::int)
+#11 := (* f3 #10)
+#13 := (= #11 #12)
+#14 := (not #13)
+#57 := (iff #14 false)
+#1 := true
+#52 := (not true)
+#55 := (iff #52 false)
+#56 := [rewrite]: #55
+#53 := (iff #14 #52)
+#50 := (iff #13 true)
+#32 := -1::int
+#38 := (* -1::int f3)
+#45 := (= #38 #38)
+#48 := (iff #45 true)
+#49 := [rewrite]: #48
+#46 := (iff #13 #45)
+#43 := (= #12 #38)
+#44 := [rewrite]: #43
+#41 := (= #11 #38)
+#35 := (* f3 -1::int)
+#39 := (= #35 #38)
+#40 := [rewrite]: #39
+#36 := (= #11 #35)
+#33 := (= #10 -1::int)
+#34 := [rewrite]: #33
+#37 := [monotonicity #34]: #36
+#42 := [trans #37 #40]: #41
+#47 := [monotonicity #42 #44]: #46
+#51 := [trans #47 #49]: #50
+#54 := [monotonicity #51]: #53
+#58 := [trans #54 #56]: #57
+#31 := [asserted]: #14
+[mp #31 #58]: false
+unsat
+df5f08c8b5312cfbfbb1f5bf1a74e868b8d5f32a 35 0
 #2 := false
 decl f3 :: int
 #10 := f3
@@ -26672,7 +26672,7 @@
 #31 := [asserted]: #14
 [mp #31 #53]: false
 unsat
-dc9c4895f383c2bc2209a55e4f8478193dad358d 244 0
+56201244c1c31fc8628969c3f353db10a7f712f1 244 0
 #2 := false
 #11 := 0::int
 decl f3 :: (-> int int int)
@@ -26917,7 +26917,7 @@
 #683 := [mp #696 #682]: #695
 [unit-resolution #683 #742 #167]: false
 unsat
-e58e9441ca33f62ea126f129a1302457840ee037 28 0
+738d46bed422c47f454cfba0aef7d0d41195018e 28 0
 #2 := false
 #8 := 3::int
 decl f3 :: int
@@ -26946,7 +26946,7 @@
 #30 := [asserted]: #13
 [mp #30 #46]: false
 unsat
-1a424f78adbf3f5b91865b15057a1edb6fd9f0c7 268 0
+b55995757cc7c0e54ef05dc5c7ed8997164e973f 268 0
 #2 := false
 #11 := 0::int
 decl f4 :: (-> int int int)
@@ -27215,7 +27215,7 @@
 #678 := [mp #538 #684]: #696
 [unit-resolution #678 #749 #167]: false
 unsat
-6b27a316bc3cb1671937528bbb2aa4c5f16dd00c 257 0
+fa3f22f8699f818222604ac64aca7fd59a22aa11 257 0
 #2 := false
 #11 := 0::int
 decl f3 :: (-> int int int)
@@ -27473,7 +27473,7 @@
 #673 := [mp #687 #520]: #680
 [unit-resolution #673 #743 #168]: false
 unsat
-d05667c302799334d71c6767e44df657452bd738 276 0
+706350a91145c463c7f48c3bf9879c01a9686cec 276 0
 #2 := false
 decl f4 :: (-> int int int)
 #11 := 0::int
@@ -27750,7 +27750,7 @@
 #683 := [mp #679 #677]: #536
 [unit-resolution #683 #747 #177]: false
 unsat
-ac9468ec7d34e56bdf0ee161b89fe3a4afadc438 281 0
+f347a4adcb7fcad632a20b1470ae003828031f6b 281 0
 #2 := false
 #11 := 0::int
 decl f3 :: (-> int int int)
@@ -28032,7 +28032,7 @@
 #667 := [mp #573 #670]: #572
 [unit-resolution #667 #742 #168]: false
 unsat
-9c82ae76cec416fd404b909bc700a14311ef9064 281 0
+9f3a2d1e5184a5f18507c2cbcaba7052c2f44041 281 0
 #2 := false
 #38 := 1::int
 decl f3 :: (-> int int int)
@@ -28314,7 +28314,7 @@
 #667 := [mp #573 #670]: #572
 [unit-resolution #667 #742 #168]: false
 unsat
-07a66f14187da887bd1f0f4bb16d6c9a7023aeaf 298 0
+6a680acca8e4fb44be34c90aae6eeffc77e0f409 298 0
 #2 := false
 #11 := 0::int
 decl f4 :: (-> int int int)
@@ -28613,7 +28613,7 @@
 #574 := [mp #554 #573]: #666
 [unit-resolution #574 #749 #168]: false
 unsat
-892e25c8bdf423f86a8231d77f83b5c173fd91c0 292 0
+724afb6ea0d36c4f4d7be70cf80c093f76cab778 292 0
 #2 := false
 #38 := 3::int
 decl f3 :: (-> int int int)
@@ -28906,7 +28906,7 @@
 #660 := [mp #653 #664]: #659
 [unit-resolution #660 #743 #169]: false
 unsat
-ed1abab981b05d680a1c92a497bf3305ff9e1f16 296 0
+3d7d433cca19abbbfd4e4b784dad4abf4567789e 296 0
 #2 := false
 #11 := 0::int
 decl f4 :: (-> int int int)
@@ -29203,7 +29203,7 @@
 #575 := [mp #569 #574]: #669
 [unit-resolution #575 #749 #168]: false
 unsat
-dcc2c3c66de3e673b0cfeb392eb7d2e8ec04caf3 335 0
+92529b3476781962ca1626bb5307f530f9b5594f 335 0
 #2 := false
 decl f3 :: (-> int int int)
 #39 := 1::int
@@ -29539,7 +29539,7 @@
 #500 := [mp #530 #497]: #170
 [unit-resolution #178 #500]: false
 unsat
-52cf99958a1402707eac2a505ecb8d6adc72de1a 307 0
+7eb8a7aa41cf540c32626b3af4825722acd864ac 307 0
 #2 := false
 #11 := 0::int
 decl f4 :: (-> int int int)
@@ -29847,7 +29847,7 @@
 #652 := [mp #668 #650]: #578
 [unit-resolution #652 #750 #169]: false
 unsat
-2a60c54232ee9900c0a7254451730bed52200c08 306 0
+bcd6aa81c95602060c016443dc50a08e0f15fea6 306 0
 #2 := false
 #11 := 0::int
 decl f3 :: (-> int int int)
@@ -30154,316 +30154,7 @@
 #682 := [mp #588 #685]: #587
 [unit-resolution #682 #757 #193]: false
 unsat
-6d75bf2e8df3400e173e94c70d533cd85e2830a4 308 0
-#2 := false
-#11 := 0::int
-decl f5 :: int
-#38 := f5
-#732 := (= f5 0::int)
-#573 := (not #732)
-#394 := (<= f5 0::int)
-#720 := (not #394)
-#388 := (>= f5 0::int)
-#377 := (not #388)
-#688 := (or #377 #720 #732)
-#575 := (not #688)
-#66 := -1::int
-#408 := (* -1::int f5)
-#700 := (mod #408 -1::int)
-decl f4 :: (-> int int int)
-#39 := 1::int
-#40 := (f4 f5 1::int)
-#698 := (+ #40 #700)
-#703 := (= #698 0::int)
-#41 := (= #40 0::int)
-#520 := (ite #688 #41 #703)
-#9 := (:var 0 int)
-#8 := (:var 1 int)
-#29 := (f4 #8 #9)
-#744 := (pattern #29)
-#70 := (* -1::int #9)
-#67 := (* -1::int #8)
-#125 := (mod #67 #70)
-#256 := (+ #29 #125)
-#257 := (= #256 0::int)
-#30 := (mod #8 #9)
-#253 := (* -1::int #30)
-#254 := (+ #29 #253)
-#255 := (= #254 0::int)
-#92 := (<= #9 0::int)
-#88 := (<= #8 0::int)
-#195 := (or #88 #92)
-#196 := (not #195)
-#99 := (>= #8 0::int)
-#187 := (or #92 #99)
-#188 := (not #187)
-#202 := (or #188 #196)
-#258 := (ite #202 #255 #257)
-#252 := (= #29 0::int)
-#12 := (= #8 0::int)
-#259 := (ite #12 #252 #258)
-#251 := (= #8 #29)
-#13 := (= #9 0::int)
-#260 := (ite #13 #251 #259)
-#745 := (forall (vars (?v0 int) (?v1 int)) (:pat #744) #260)
-#263 := (forall (vars (?v0 int) (?v1 int)) #260)
-#748 := (iff #263 #745)
-#746 := (iff #260 #260)
-#747 := [refl]: #746
-#749 := [quant-intro #747]: #748
-#131 := (* -1::int #125)
-#220 := (ite #202 #30 #131)
-#223 := (ite #12 0::int #220)
-#226 := (ite #13 #8 #223)
-#229 := (= #29 #226)
-#232 := (forall (vars (?v0 int) (?v1 int)) #229)
-#264 := (iff #232 #263)
-#261 := (iff #229 #260)
-#262 := [rewrite]: #261
-#265 := [quant-intro #262]: #264
-#100 := (not #99)
-#93 := (not #92)
-#103 := (and #93 #100)
-#89 := (not #88)
-#96 := (and #89 #93)
-#106 := (or #96 #103)
-#151 := (ite #106 #30 #131)
-#154 := (ite #12 0::int #151)
-#157 := (ite #13 #8 #154)
-#160 := (= #29 #157)
-#163 := (forall (vars (?v0 int) (?v1 int)) #160)
-#233 := (iff #163 #232)
-#230 := (iff #160 #229)
-#227 := (= #157 #226)
-#224 := (= #154 #223)
-#221 := (= #151 #220)
-#205 := (iff #106 #202)
-#199 := (or #196 #188)
-#203 := (iff #199 #202)
-#204 := [rewrite]: #203
-#200 := (iff #106 #199)
-#197 := (iff #103 #188)
-#198 := [rewrite]: #197
-#185 := (iff #96 #196)
-#186 := [rewrite]: #185
-#201 := [monotonicity #186 #198]: #200
-#206 := [trans #201 #204]: #205
-#222 := [monotonicity #206]: #221
-#225 := [monotonicity #222]: #224
-#228 := [monotonicity #225]: #227
-#231 := [monotonicity #228]: #230
-#234 := [quant-intro #231]: #233
-#183 := (~ #163 #163)
-#180 := (~ #160 #160)
-#193 := [refl]: #180
-#184 := [nnf-pos #193]: #183
-#23 := (- #9)
-#22 := (- #8)
-#31 := (mod #22 #23)
-#32 := (- #31)
-#16 := (< 0::int #9)
-#18 := (< #8 0::int)
-#19 := (and #18 #16)
-#15 := (< 0::int #8)
-#17 := (and #15 #16)
-#20 := (or #17 #19)
-#33 := (ite #20 #30 #32)
-#34 := (ite #12 0::int #33)
-#35 := (ite #13 #8 #34)
-#36 := (= #29 #35)
-#37 := (forall (vars (?v0 int) (?v1 int)) #36)
-#166 := (iff #37 #163)
-#60 := (and #16 #18)
-#63 := (or #17 #60)
-#136 := (ite #63 #30 #131)
-#139 := (ite #12 0::int #136)
-#142 := (ite #13 #8 #139)
-#145 := (= #29 #142)
-#148 := (forall (vars (?v0 int) (?v1 int)) #145)
-#164 := (iff #148 #163)
-#161 := (iff #145 #160)
-#158 := (= #142 #157)
-#155 := (= #139 #154)
-#152 := (= #136 #151)
-#107 := (iff #63 #106)
-#104 := (iff #60 #103)
-#101 := (iff #18 #100)
-#102 := [rewrite]: #101
-#94 := (iff #16 #93)
-#95 := [rewrite]: #94
-#105 := [monotonicity #95 #102]: #104
-#97 := (iff #17 #96)
-#90 := (iff #15 #89)
-#91 := [rewrite]: #90
-#98 := [monotonicity #91 #95]: #97
-#108 := [monotonicity #98 #105]: #107
-#153 := [monotonicity #108]: #152
-#156 := [monotonicity #153]: #155
-#159 := [monotonicity #156]: #158
-#162 := [monotonicity #159]: #161
-#165 := [quant-intro #162]: #164
-#149 := (iff #37 #148)
-#146 := (iff #36 #145)
-#143 := (= #35 #142)
-#140 := (= #34 #139)
-#137 := (= #33 #136)
-#134 := (= #32 #131)
-#128 := (- #125)
-#132 := (= #128 #131)
-#133 := [rewrite]: #132
-#129 := (= #32 #128)
-#126 := (= #31 #125)
-#71 := (= #23 #70)
-#72 := [rewrite]: #71
-#68 := (= #22 #67)
-#69 := [rewrite]: #68
-#127 := [monotonicity #69 #72]: #126
-#130 := [monotonicity #127]: #129
-#135 := [trans #130 #133]: #134
-#64 := (iff #20 #63)
-#61 := (iff #19 #60)
-#62 := [rewrite]: #61
-#65 := [monotonicity #62]: #64
-#138 := [monotonicity #65 #135]: #137
-#141 := [monotonicity #138]: #140
-#144 := [monotonicity #141]: #143
-#147 := [monotonicity #144]: #146
-#150 := [quant-intro #147]: #149
-#167 := [trans #150 #165]: #166
-#124 := [asserted]: #37
-#168 := [mp #124 #167]: #163
-#194 := [mp~ #168 #184]: #163
-#235 := [mp #194 #234]: #232
-#266 := [mp #235 #265]: #263
-#750 := [mp #266 #749]: #745
-#675 := (not #745)
-#678 := (or #675 #520)
-#324 := (* -1::int 1::int)
-#409 := (mod #408 #324)
-#410 := (+ #40 #409)
-#401 := (= #410 0::int)
-#412 := (mod f5 1::int)
-#413 := (* -1::int #412)
-#414 := (+ #40 #413)
-#411 := (= #414 0::int)
-#415 := (<= 1::int 0::int)
-#729 := (or #394 #415)
-#731 := (not #729)
-#518 := (or #415 #388)
-#725 := (not #518)
-#399 := (or #725 #731)
-#400 := (ite #399 #411 #401)
-#733 := (ite #732 #41 #400)
-#734 := (= f5 #40)
-#735 := (= 1::int 0::int)
-#730 := (ite #735 #734 #733)
-#560 := (or #675 #730)
-#562 := (iff #560 #678)
-#669 := (iff #678 #678)
-#571 := [rewrite]: #669
-#676 := (iff #730 #520)
-#363 := (or #377 #720)
-#697 := (or #363 #732)
-#538 := (ite #697 #41 #703)
-#673 := (iff #538 #520)
-#517 := (iff #697 #688)
-#519 := [rewrite]: #517
-#674 := [monotonicity #519]: #673
-#687 := (iff #730 #538)
-#684 := (ite false #734 #538)
-#680 := (iff #684 #538)
-#686 := [rewrite]: #680
-#685 := (iff #730 #684)
-#682 := (iff #733 #538)
-#694 := (ite #363 #41 #703)
-#695 := (ite #732 #41 #694)
-#539 := (iff #695 #538)
-#540 := [rewrite]: #539
-#696 := (iff #733 #695)
-#689 := (iff #400 #694)
-#692 := (iff #401 #703)
-#702 := (= #410 #698)
-#701 := (= #409 #700)
-#421 := (= #324 -1::int)
-#422 := [rewrite]: #421
-#416 := [monotonicity #422]: #701
-#699 := [monotonicity #416]: #702
-#693 := [monotonicity #699]: #692
-#419 := (iff #411 #41)
-#705 := (= #414 #40)
-#707 := (+ #40 0::int)
-#704 := (= #707 #40)
-#708 := [rewrite]: #704
-#429 := (= #414 #707)
-#330 := (= #413 0::int)
-#711 := (* -1::int 0::int)
-#435 := (= #711 0::int)
-#436 := [rewrite]: #435
-#433 := (= #413 #711)
-#724 := (= #412 0::int)
-#710 := [rewrite]: #724
-#434 := [monotonicity #710]: #433
-#706 := [trans #434 #436]: #330
-#430 := [monotonicity #706]: #429
-#709 := [trans #430 #708]: #705
-#420 := [monotonicity #709]: #419
-#723 := (iff #399 #363)
-#722 := (iff #731 #720)
-#719 := (iff #729 #394)
-#715 := (or #394 false)
-#718 := (iff #715 #394)
-#713 := [rewrite]: #718
-#716 := (iff #729 #715)
-#386 := (iff #415 false)
-#391 := [rewrite]: #386
-#717 := [monotonicity #391]: #716
-#357 := [trans #717 #713]: #719
-#362 := [monotonicity #357]: #722
-#378 := (iff #725 #377)
-#375 := (iff #518 #388)
-#727 := (or false #388)
-#371 := (iff #727 #388)
-#712 := [rewrite]: #371
-#387 := (iff #518 #727)
-#728 := [monotonicity #391]: #387
-#376 := [trans #728 #712]: #375
-#714 := [monotonicity #376]: #378
-#721 := [monotonicity #714 #362]: #723
-#690 := [monotonicity #721 #420 #693]: #689
-#691 := [monotonicity #690]: #696
-#683 := [trans #691 #540]: #682
-#736 := (iff #735 false)
-#726 := [rewrite]: #736
-#679 := [monotonicity #726 #683]: #685
-#681 := [trans #679 #686]: #687
-#677 := [trans #681 #674]: #676
-#521 := [monotonicity #677]: #562
-#666 := [trans #521 #571]: #562
-#561 := [quant-inst]: #560
-#667 := [mp #561 #666]: #678
-#660 := [unit-resolution #667 #750]: #520
-#668 := (not #520)
-#665 := (or #668 #575)
-#42 := (not #41)
-#169 := [asserted]: #42
-#672 := (or #668 #575 #41)
-#659 := [def-axiom]: #672
-#654 := [unit-resolution #659 #169]: #665
-#655 := [unit-resolution #654 #660]: #575
-#566 := (or #688 #573)
-#574 := [def-axiom]: #566
-#656 := [unit-resolution #574 #655]: #573
-#670 := (or #688 #388)
-#555 := [def-axiom]: #670
-#657 := [unit-resolution #555 #655]: #388
-#570 := (or #688 #394)
-#572 := [def-axiom]: #570
-#651 := [unit-resolution #572 #655]: #394
-#658 := (or #732 #720 #377)
-#642 := [th-lemma]: #658
-[unit-resolution #642 #651 #657 #656]: false
-unsat
-923c4bec65f1ce0be6fa5d4ec7cf2b004a307f06 315 0
+c5e0a78cd4281adc96eca6cb66f3bfdd83b7f982 315 0
 #2 := false
 #66 := -1::int
 decl f3 :: (-> int int int)
@@ -30779,7 +30470,316 @@
 #678 := [mp #675 #677]: #686
 [unit-resolution #678 #757 #193]: false
 unsat
-f6b6632f2c5a6045abfce98be6bbc967a6c8ca72 311 0
+5fd03e95521b145801ae320c34d2eabe8b033de9 308 0
+#2 := false
+#11 := 0::int
+decl f5 :: int
+#38 := f5
+#732 := (= f5 0::int)
+#573 := (not #732)
+#394 := (<= f5 0::int)
+#720 := (not #394)
+#388 := (>= f5 0::int)
+#377 := (not #388)
+#688 := (or #377 #720 #732)
+#575 := (not #688)
+#66 := -1::int
+#408 := (* -1::int f5)
+#700 := (mod #408 -1::int)
+decl f4 :: (-> int int int)
+#39 := 1::int
+#40 := (f4 f5 1::int)
+#698 := (+ #40 #700)
+#703 := (= #698 0::int)
+#41 := (= #40 0::int)
+#520 := (ite #688 #41 #703)
+#9 := (:var 0 int)
+#8 := (:var 1 int)
+#29 := (f4 #8 #9)
+#744 := (pattern #29)
+#70 := (* -1::int #9)
+#67 := (* -1::int #8)
+#125 := (mod #67 #70)
+#256 := (+ #29 #125)
+#257 := (= #256 0::int)
+#30 := (mod #8 #9)
+#253 := (* -1::int #30)
+#254 := (+ #29 #253)
+#255 := (= #254 0::int)
+#92 := (<= #9 0::int)
+#88 := (<= #8 0::int)
+#195 := (or #88 #92)
+#196 := (not #195)
+#99 := (>= #8 0::int)
+#187 := (or #92 #99)
+#188 := (not #187)
+#202 := (or #188 #196)
+#258 := (ite #202 #255 #257)
+#252 := (= #29 0::int)
+#12 := (= #8 0::int)
+#259 := (ite #12 #252 #258)
+#251 := (= #8 #29)
+#13 := (= #9 0::int)
+#260 := (ite #13 #251 #259)
+#745 := (forall (vars (?v0 int) (?v1 int)) (:pat #744) #260)
+#263 := (forall (vars (?v0 int) (?v1 int)) #260)
+#748 := (iff #263 #745)
+#746 := (iff #260 #260)
+#747 := [refl]: #746
+#749 := [quant-intro #747]: #748
+#131 := (* -1::int #125)
+#220 := (ite #202 #30 #131)
+#223 := (ite #12 0::int #220)
+#226 := (ite #13 #8 #223)
+#229 := (= #29 #226)
+#232 := (forall (vars (?v0 int) (?v1 int)) #229)
+#264 := (iff #232 #263)
+#261 := (iff #229 #260)
+#262 := [rewrite]: #261
+#265 := [quant-intro #262]: #264
+#100 := (not #99)
+#93 := (not #92)
+#103 := (and #93 #100)
+#89 := (not #88)
+#96 := (and #89 #93)
+#106 := (or #96 #103)
+#151 := (ite #106 #30 #131)
+#154 := (ite #12 0::int #151)
+#157 := (ite #13 #8 #154)
+#160 := (= #29 #157)
+#163 := (forall (vars (?v0 int) (?v1 int)) #160)
+#233 := (iff #163 #232)
+#230 := (iff #160 #229)
+#227 := (= #157 #226)
+#224 := (= #154 #223)
+#221 := (= #151 #220)
+#205 := (iff #106 #202)
+#199 := (or #196 #188)
+#203 := (iff #199 #202)
+#204 := [rewrite]: #203
+#200 := (iff #106 #199)
+#197 := (iff #103 #188)
+#198 := [rewrite]: #197
+#185 := (iff #96 #196)
+#186 := [rewrite]: #185
+#201 := [monotonicity #186 #198]: #200
+#206 := [trans #201 #204]: #205
+#222 := [monotonicity #206]: #221
+#225 := [monotonicity #222]: #224
+#228 := [monotonicity #225]: #227
+#231 := [monotonicity #228]: #230
+#234 := [quant-intro #231]: #233
+#183 := (~ #163 #163)
+#180 := (~ #160 #160)
+#193 := [refl]: #180
+#184 := [nnf-pos #193]: #183
+#23 := (- #9)
+#22 := (- #8)
+#31 := (mod #22 #23)
+#32 := (- #31)
+#16 := (< 0::int #9)
+#18 := (< #8 0::int)
+#19 := (and #18 #16)
+#15 := (< 0::int #8)
+#17 := (and #15 #16)
+#20 := (or #17 #19)
+#33 := (ite #20 #30 #32)
+#34 := (ite #12 0::int #33)
+#35 := (ite #13 #8 #34)
+#36 := (= #29 #35)
+#37 := (forall (vars (?v0 int) (?v1 int)) #36)
+#166 := (iff #37 #163)
+#60 := (and #16 #18)
+#63 := (or #17 #60)
+#136 := (ite #63 #30 #131)
+#139 := (ite #12 0::int #136)
+#142 := (ite #13 #8 #139)
+#145 := (= #29 #142)
+#148 := (forall (vars (?v0 int) (?v1 int)) #145)
+#164 := (iff #148 #163)
+#161 := (iff #145 #160)
+#158 := (= #142 #157)
+#155 := (= #139 #154)
+#152 := (= #136 #151)
+#107 := (iff #63 #106)
+#104 := (iff #60 #103)
+#101 := (iff #18 #100)
+#102 := [rewrite]: #101
+#94 := (iff #16 #93)
+#95 := [rewrite]: #94
+#105 := [monotonicity #95 #102]: #104
+#97 := (iff #17 #96)
+#90 := (iff #15 #89)
+#91 := [rewrite]: #90
+#98 := [monotonicity #91 #95]: #97
+#108 := [monotonicity #98 #105]: #107
+#153 := [monotonicity #108]: #152
+#156 := [monotonicity #153]: #155
+#159 := [monotonicity #156]: #158
+#162 := [monotonicity #159]: #161
+#165 := [quant-intro #162]: #164
+#149 := (iff #37 #148)
+#146 := (iff #36 #145)
+#143 := (= #35 #142)
+#140 := (= #34 #139)
+#137 := (= #33 #136)
+#134 := (= #32 #131)
+#128 := (- #125)
+#132 := (= #128 #131)
+#133 := [rewrite]: #132
+#129 := (= #32 #128)
+#126 := (= #31 #125)
+#71 := (= #23 #70)
+#72 := [rewrite]: #71
+#68 := (= #22 #67)
+#69 := [rewrite]: #68
+#127 := [monotonicity #69 #72]: #126
+#130 := [monotonicity #127]: #129
+#135 := [trans #130 #133]: #134
+#64 := (iff #20 #63)
+#61 := (iff #19 #60)
+#62 := [rewrite]: #61
+#65 := [monotonicity #62]: #64
+#138 := [monotonicity #65 #135]: #137
+#141 := [monotonicity #138]: #140
+#144 := [monotonicity #141]: #143
+#147 := [monotonicity #144]: #146
+#150 := [quant-intro #147]: #149
+#167 := [trans #150 #165]: #166
+#124 := [asserted]: #37
+#168 := [mp #124 #167]: #163
+#194 := [mp~ #168 #184]: #163
+#235 := [mp #194 #234]: #232
+#266 := [mp #235 #265]: #263
+#750 := [mp #266 #749]: #745
+#675 := (not #745)
+#678 := (or #675 #520)
+#324 := (* -1::int 1::int)
+#409 := (mod #408 #324)
+#410 := (+ #40 #409)
+#401 := (= #410 0::int)
+#412 := (mod f5 1::int)
+#413 := (* -1::int #412)
+#414 := (+ #40 #413)
+#411 := (= #414 0::int)
+#415 := (<= 1::int 0::int)
+#729 := (or #394 #415)
+#731 := (not #729)
+#518 := (or #415 #388)
+#725 := (not #518)
+#399 := (or #725 #731)
+#400 := (ite #399 #411 #401)
+#733 := (ite #732 #41 #400)
+#734 := (= f5 #40)
+#735 := (= 1::int 0::int)
+#730 := (ite #735 #734 #733)
+#560 := (or #675 #730)
+#562 := (iff #560 #678)
+#669 := (iff #678 #678)
+#571 := [rewrite]: #669
+#676 := (iff #730 #520)
+#363 := (or #377 #720)
+#697 := (or #363 #732)
+#538 := (ite #697 #41 #703)
+#673 := (iff #538 #520)
+#517 := (iff #697 #688)
+#519 := [rewrite]: #517
+#674 := [monotonicity #519]: #673
+#687 := (iff #730 #538)
+#684 := (ite false #734 #538)
+#680 := (iff #684 #538)
+#686 := [rewrite]: #680
+#685 := (iff #730 #684)
+#682 := (iff #733 #538)
+#694 := (ite #363 #41 #703)
+#695 := (ite #732 #41 #694)
+#539 := (iff #695 #538)
+#540 := [rewrite]: #539
+#696 := (iff #733 #695)
+#689 := (iff #400 #694)
+#692 := (iff #401 #703)
+#702 := (= #410 #698)
+#701 := (= #409 #700)
+#421 := (= #324 -1::int)
+#422 := [rewrite]: #421
+#416 := [monotonicity #422]: #701
+#699 := [monotonicity #416]: #702
+#693 := [monotonicity #699]: #692
+#419 := (iff #411 #41)
+#705 := (= #414 #40)
+#707 := (+ #40 0::int)
+#704 := (= #707 #40)
+#708 := [rewrite]: #704
+#429 := (= #414 #707)
+#330 := (= #413 0::int)
+#711 := (* -1::int 0::int)
+#435 := (= #711 0::int)
+#436 := [rewrite]: #435
+#433 := (= #413 #711)
+#724 := (= #412 0::int)
+#710 := [rewrite]: #724
+#434 := [monotonicity #710]: #433
+#706 := [trans #434 #436]: #330
+#430 := [monotonicity #706]: #429
+#709 := [trans #430 #708]: #705
+#420 := [monotonicity #709]: #419
+#723 := (iff #399 #363)
+#722 := (iff #731 #720)
+#719 := (iff #729 #394)
+#715 := (or #394 false)
+#718 := (iff #715 #394)
+#713 := [rewrite]: #718
+#716 := (iff #729 #715)
+#386 := (iff #415 false)
+#391 := [rewrite]: #386
+#717 := [monotonicity #391]: #716
+#357 := [trans #717 #713]: #719
+#362 := [monotonicity #357]: #722
+#378 := (iff #725 #377)
+#375 := (iff #518 #388)
+#727 := (or false #388)
+#371 := (iff #727 #388)
+#712 := [rewrite]: #371
+#387 := (iff #518 #727)
+#728 := [monotonicity #391]: #387
+#376 := [trans #728 #712]: #375
+#714 := [monotonicity #376]: #378
+#721 := [monotonicity #714 #362]: #723
+#690 := [monotonicity #721 #420 #693]: #689
+#691 := [monotonicity #690]: #696
+#683 := [trans #691 #540]: #682
+#736 := (iff #735 false)
+#726 := [rewrite]: #736
+#679 := [monotonicity #726 #683]: #685
+#681 := [trans #679 #686]: #687
+#677 := [trans #681 #674]: #676
+#521 := [monotonicity #677]: #562
+#666 := [trans #521 #571]: #562
+#561 := [quant-inst]: #560
+#667 := [mp #561 #666]: #678
+#660 := [unit-resolution #667 #750]: #520
+#668 := (not #520)
+#665 := (or #668 #575)
+#42 := (not #41)
+#169 := [asserted]: #42
+#672 := (or #668 #575 #41)
+#659 := [def-axiom]: #672
+#654 := [unit-resolution #659 #169]: #665
+#655 := [unit-resolution #654 #660]: #575
+#566 := (or #688 #573)
+#574 := [def-axiom]: #566
+#656 := [unit-resolution #574 #655]: #573
+#670 := (or #688 #388)
+#555 := [def-axiom]: #670
+#657 := [unit-resolution #555 #655]: #388
+#570 := (or #688 #394)
+#572 := [def-axiom]: #570
+#651 := [unit-resolution #572 #655]: #394
+#658 := (or #732 #720 #377)
+#642 := [th-lemma]: #658
+[unit-resolution #642 #651 #657 #656]: false
+unsat
+313d9507d6b102d4601325c684027a26955dd8c8 311 0
 #2 := false
 #177 := -3::int
 decl f3 :: (-> int int int)
@@ -31091,7 +31091,7 @@
 #661 := [mp #659 #672]: #660
 [unit-resolution #661 #750 #188]: false
 unsat
-a09ca425a49bbf59a7db8aba4b01dbd7473e9c09 317 0
+3d32e1abf69ce0e5041899ca9973bae87dfc28de 317 0
 #2 := false
 #11 := 0::int
 decl f4 :: (-> int int int)
@@ -31409,7 +31409,7 @@
 #587 := [mp #680 #586]: #683
 [unit-resolution #587 #764 #193]: false
 unsat
-ef319beaaae1961d7e0fb146b0bd21608ccf741d 362 0
+554be993a1782ec7f024b52e37aa60a3dc009c1f 362 0
 #2 := false
 #11 := 0::int
 #39 := 1::int
@@ -31772,7 +31772,7 @@
 #563 := [th-lemma]: #562
 [unit-resolution #563 #561 #633]: false
 unsat
-07f15f3f61db6e3805237fa8c50e95e2181bdd46 327 0
+658c83eb9ce09a5dbf189137f768372756f07aa7 327 0
 #2 := false
 #11 := 0::int
 decl f4 :: (-> int int int)
@@ -32100,7 +32100,7 @@
 #673 := [mp #590 #686]: #588
 [unit-resolution #673 #764 #193]: false
 unsat
-24bbfda15529f2b078998e7a57a330dfd637cef3 282 0
+637a9fb4751b1db772b995626b3d6e97b52eb701 282 0
 #2 := false
 #11 := 0::int
 decl f3 :: (-> int int int)
@@ -32383,7 +32383,7 @@
 #668 := [mp #574 #671]: #573
 [unit-resolution #668 #743 #168]: false
 unsat
-8144b6d093845ae8dee3931af66c9361d99b4453 329 0
+7760bfb909b598c1c9e59b0475683ef8155b0972 329 0
 #2 := false
 #11 := 0::int
 decl f4 :: (-> int int int)
@@ -32713,7 +32713,7 @@
 #676 := [mp #592 #674]: #590
 [unit-resolution #676 #765 #194]: false
 unsat
-12ef6b4ae9675610f423327a4c22119f401927ad 307 0
+3720824b257034758f7a600c278307a5f80b6e02 307 0
 #2 := false
 #11 := 0::int
 decl f3 :: (-> int int int)
@@ -33021,7 +33021,7 @@
 #687 := [mp #582 #594]: #588
 [unit-resolution #687 #759 #194]: false
 unsat
-a20f91759967cf78b23640f832ca57a185975634 306 0
+8c2ddb2baafdfdaa50382790d0f6610f91f76e27 306 0
 #2 := false
 #11 := 0::int
 decl f4 :: (-> int int int)
@@ -33328,7 +33328,7 @@
 #693 := [mp #535 #690]: #532
 [unit-resolution #693 #765 #194]: false
 unsat
-35df6ca3b9d8297d2ae93fc18a5a2fbecd67e27f 296 0
+f3e8e6f2d42536caa9e4ddd3735d660dddce72ee 296 0
 #2 := false
 #11 := 0::int
 decl f3 :: (-> int int int)
@@ -33625,7 +33625,7 @@
 #656 := [mp #663 #655]: #652
 [unit-resolution #656 #743 #169]: false
 unsat
-d02187cb7fcefe99851febe02397cc4a2e6fdbff 286 0
+93736e6f4586e3d8675e6c2a74bb3371d5238b60 286 0
 #2 := false
 #40 := 1::int
 decl f3 :: (-> int int int)
@@ -33912,7 +33912,7 @@
 #643 := [mp #568 #651]: #566
 [unit-resolution #643 #733 #169]: false
 unsat
-450a206c661160bbd83de0094374a847857dd804 299 0
+3b0f74b1f071a3ff5876e6e320a42af764cd8901 299 0
 #2 := false
 #11 := 0::int
 decl f4 :: (-> int int int)
@@ -34212,7 +34212,7 @@
 #575 := [mp #555 #574]: #667
 [unit-resolution #575 #750 #168]: false
 unsat
-fc9ffeceefa2f1854d4c8adb404766a307c30ad9 310 0
+47a39d6a04f9615c07eaa600e336bda0f6475ecd 310 0
 #2 := false
 #41 := 1::int
 decl f3 :: (-> int int int)
@@ -34523,7 +34523,7 @@
 #627 := [mp #637 #626]: #634
 [unit-resolution #627 #734 #170]: false
 unsat
-b8be49aa798ad99c4b186f0fa5e2759eac880cd8 318 0
+297aa7cb47f4ebcdd849638dea24e69f28ead5a8 318 0
 #2 := false
 #11 := 0::int
 decl f4 :: (-> int int int)
@@ -34842,7 +34842,7 @@
 #588 := [mp #587 #586]: #537
 [unit-resolution #588 #766 #194]: false
 unsat
-334231bac1c10cb79d865cb2c86779cf7dd19631 324 0
+5b0e88fc80a274fa3e863e03464470bfb173c5f7 324 0
 #2 := false
 #68 := -1::int
 decl f3 :: (-> int int int)
@@ -35167,7 +35167,7 @@
 #674 := [mp #681 #673]: #669
 [unit-resolution #674 #762 #198]: false
 unsat
-ed5e3568452fe6600500ab5071290e80a7175922 322 0
+c6240466c20be0ec4a8775881ce8a00f5857e767 322 0
 #2 := false
 #38 := 1::int
 decl f4 :: (-> int int int)
@@ -35490,7 +35490,7 @@
 #642 := [mp #654 #658]: #660
 [unit-resolution #642 #750 #169]: false
 unsat
-60a3e615568433502bc15c7d472c0ece644ee329 323 0
+6267f0b993e2728f85ea31149fbe98cf106912d9 323 0
 #2 := false
 #68 := -1::int
 decl f3 :: (-> int int int)
@@ -35814,305 +35814,7 @@
 #673 := [mp #671 #684]: #672
 [unit-resolution #673 #762 #198]: false
 unsat
-1897b65589b01a36e8c901ddcdce3eb69e66fd4d 297 0
-#2 := false
-#11 := 0::int
-decl f4 :: (-> int int int)
-#38 := 3::int
-#39 := (f4 3::int 3::int)
-#40 := (= #39 0::int)
-#41 := (not #40)
-#168 := [asserted]: #41
-#9 := (:var 0 int)
-#8 := (:var 1 int)
-#29 := (f4 #8 #9)
-#744 := (pattern #29)
-#65 := -1::int
-#69 := (* -1::int #9)
-#66 := (* -1::int #8)
-#124 := (mod #66 #69)
-#255 := (+ #29 #124)
-#256 := (= #255 0::int)
-#30 := (mod #8 #9)
-#252 := (* -1::int #30)
-#253 := (+ #29 #252)
-#254 := (= #253 0::int)
-#91 := (<= #9 0::int)
-#87 := (<= #8 0::int)
-#194 := (or #87 #91)
-#195 := (not #194)
-#98 := (>= #8 0::int)
-#186 := (or #91 #98)
-#187 := (not #186)
-#201 := (or #187 #195)
-#257 := (ite #201 #254 #256)
-#251 := (= #29 0::int)
-#12 := (= #8 0::int)
-#258 := (ite #12 #251 #257)
-#250 := (= #8 #29)
-#13 := (= #9 0::int)
-#259 := (ite #13 #250 #258)
-#745 := (forall (vars (?v0 int) (?v1 int)) (:pat #744) #259)
-#262 := (forall (vars (?v0 int) (?v1 int)) #259)
-#748 := (iff #262 #745)
-#746 := (iff #259 #259)
-#747 := [refl]: #746
-#749 := [quant-intro #747]: #748
-#130 := (* -1::int #124)
-#219 := (ite #201 #30 #130)
-#222 := (ite #12 0::int #219)
-#225 := (ite #13 #8 #222)
-#228 := (= #29 #225)
-#231 := (forall (vars (?v0 int) (?v1 int)) #228)
-#263 := (iff #231 #262)
-#260 := (iff #228 #259)
-#261 := [rewrite]: #260
-#264 := [quant-intro #261]: #263
-#99 := (not #98)
-#92 := (not #91)
-#102 := (and #92 #99)
-#88 := (not #87)
-#95 := (and #88 #92)
-#105 := (or #95 #102)
-#150 := (ite #105 #30 #130)
-#153 := (ite #12 0::int #150)
-#156 := (ite #13 #8 #153)
-#159 := (= #29 #156)
-#162 := (forall (vars (?v0 int) (?v1 int)) #159)
-#232 := (iff #162 #231)
-#229 := (iff #159 #228)
-#226 := (= #156 #225)
-#223 := (= #153 #222)
-#220 := (= #150 #219)
-#204 := (iff #105 #201)
-#198 := (or #195 #187)
-#202 := (iff #198 #201)
-#203 := [rewrite]: #202
-#199 := (iff #105 #198)
-#196 := (iff #102 #187)
-#197 := [rewrite]: #196
-#184 := (iff #95 #195)
-#185 := [rewrite]: #184
-#200 := [monotonicity #185 #197]: #199
-#205 := [trans #200 #203]: #204
-#221 := [monotonicity #205]: #220
-#224 := [monotonicity #221]: #223
-#227 := [monotonicity #224]: #226
-#230 := [monotonicity #227]: #229
-#233 := [quant-intro #230]: #232
-#182 := (~ #162 #162)
-#179 := (~ #159 #159)
-#192 := [refl]: #179
-#183 := [nnf-pos #192]: #182
-#23 := (- #9)
-#22 := (- #8)
-#31 := (mod #22 #23)
-#32 := (- #31)
-#16 := (< 0::int #9)
-#18 := (< #8 0::int)
-#19 := (and #18 #16)
-#15 := (< 0::int #8)
-#17 := (and #15 #16)
-#20 := (or #17 #19)
-#33 := (ite #20 #30 #32)
-#34 := (ite #12 0::int #33)
-#35 := (ite #13 #8 #34)
-#36 := (= #29 #35)
-#37 := (forall (vars (?v0 int) (?v1 int)) #36)
-#165 := (iff #37 #162)
-#59 := (and #16 #18)
-#62 := (or #17 #59)
-#135 := (ite #62 #30 #130)
-#138 := (ite #12 0::int #135)
-#141 := (ite #13 #8 #138)
-#144 := (= #29 #141)
-#147 := (forall (vars (?v0 int) (?v1 int)) #144)
-#163 := (iff #147 #162)
-#160 := (iff #144 #159)
-#157 := (= #141 #156)
-#154 := (= #138 #153)
-#151 := (= #135 #150)
-#106 := (iff #62 #105)
-#103 := (iff #59 #102)
-#100 := (iff #18 #99)
-#101 := [rewrite]: #100
-#93 := (iff #16 #92)
-#94 := [rewrite]: #93
-#104 := [monotonicity #94 #101]: #103
-#96 := (iff #17 #95)
-#89 := (iff #15 #88)
-#90 := [rewrite]: #89
-#97 := [monotonicity #90 #94]: #96
-#107 := [monotonicity #97 #104]: #106
-#152 := [monotonicity #107]: #151
-#155 := [monotonicity #152]: #154
-#158 := [monotonicity #155]: #157
-#161 := [monotonicity #158]: #160
-#164 := [quant-intro #161]: #163
-#148 := (iff #37 #147)
-#145 := (iff #36 #144)
-#142 := (= #35 #141)
-#139 := (= #34 #138)
-#136 := (= #33 #135)
-#133 := (= #32 #130)
-#127 := (- #124)
-#131 := (= #127 #130)
-#132 := [rewrite]: #131
-#128 := (= #32 #127)
-#125 := (= #31 #124)
-#70 := (= #23 #69)
-#71 := [rewrite]: #70
-#67 := (= #22 #66)
-#68 := [rewrite]: #67
-#126 := [monotonicity #68 #71]: #125
-#129 := [monotonicity #126]: #128
-#134 := [trans #129 #132]: #133
-#63 := (iff #20 #62)
-#60 := (iff #19 #59)
-#61 := [rewrite]: #60
-#64 := [monotonicity #61]: #63
-#137 := [monotonicity #64 #134]: #136
-#140 := [monotonicity #137]: #139
-#143 := [monotonicity #140]: #142
-#146 := [monotonicity #143]: #145
-#149 := [quant-intro #146]: #148
-#166 := [trans #149 #164]: #165
-#123 := [asserted]: #37
-#167 := [mp #123 #166]: #162
-#193 := [mp~ #167 #183]: #162
-#234 := [mp #193 #233]: #231
-#265 := [mp #234 #264]: #262
-#750 := [mp #265 #749]: #745
-#667 := (not #745)
-#670 := (or #667 #40)
-#323 := (* -1::int 3::int)
-#408 := (mod #323 #323)
-#409 := (+ #39 #408)
-#410 := (= #409 0::int)
-#401 := (mod 3::int 3::int)
-#412 := (* -1::int #401)
-#413 := (+ #39 #412)
-#341 := (= #413 0::int)
-#414 := (<= 3::int 0::int)
-#411 := (or #414 #414)
-#415 := (not #411)
-#394 := (>= 3::int 0::int)
-#729 := (or #414 #394)
-#731 := (not #729)
-#388 := (or #731 #415)
-#518 := (ite #388 #341 #410)
-#725 := (= 3::int 0::int)
-#399 := (ite #725 #40 #518)
-#400 := (= 3::int #39)
-#732 := (ite #725 #400 #399)
-#555 := (or #667 #732)
-#572 := (iff #555 #670)
-#566 := (iff #670 #670)
-#574 := [rewrite]: #566
-#571 := (iff #732 #40)
-#730 := (= #39 3::int)
-#560 := (ite false #730 #40)
-#521 := (iff #560 #40)
-#669 := [rewrite]: #521
-#561 := (iff #732 #560)
-#675 := (iff #399 #40)
-#520 := (ite false #40 #40)
-#676 := (iff #520 #40)
-#677 := [rewrite]: #676
-#673 := (iff #399 #520)
-#517 := (iff #518 #40)
-#1 := true
-#680 := (ite true #40 #40)
-#681 := (iff #680 #40)
-#688 := [rewrite]: #681
-#686 := (iff #518 #680)
-#685 := (iff #410 #40)
-#683 := (= #409 #39)
-#422 := (+ #39 0::int)
-#416 := (= #422 #39)
-#698 := [rewrite]: #416
-#540 := (= #409 #422)
-#538 := (= #408 0::int)
-#693 := -3::int
-#690 := (mod -3::int -3::int)
-#691 := (= #690 0::int)
-#697 := [rewrite]: #691
-#695 := (= #408 #690)
-#694 := (= #323 -3::int)
-#689 := [rewrite]: #694
-#696 := [monotonicity #689 #689]: #695
-#539 := [trans #696 #697]: #538
-#682 := [monotonicity #539]: #540
-#684 := [trans #682 #698]: #683
-#679 := [monotonicity #684]: #685
-#703 := (iff #341 #40)
-#702 := (= #413 #39)
-#700 := (= #413 #422)
-#420 := (= #412 0::int)
-#704 := (* -1::int 0::int)
-#709 := (= #704 0::int)
-#419 := [rewrite]: #709
-#708 := (= #412 #704)
-#429 := (= #401 0::int)
-#430 := [rewrite]: #429
-#705 := [monotonicity #430]: #708
-#421 := [trans #705 #419]: #420
-#701 := [monotonicity #421]: #700
-#699 := [trans #701 #698]: #702
-#692 := [monotonicity #699]: #703
-#706 := (iff #388 true)
-#387 := (or false true)
-#712 := (iff #387 true)
-#375 := [rewrite]: #712
-#436 := (iff #388 #387)
-#434 := (iff #415 true)
-#721 := (not false)
-#711 := (iff #721 true)
-#433 := [rewrite]: #711
-#724 := (iff #415 #721)
-#363 := (iff #411 false)
-#719 := (or false false)
-#722 := (iff #719 false)
-#362 := [rewrite]: #722
-#357 := (iff #411 #719)
-#726 := (iff #414 false)
-#386 := [rewrite]: #726
-#720 := [monotonicity #386 #386]: #357
-#723 := [trans #720 #362]: #363
-#710 := [monotonicity #723]: #724
-#435 := [trans #710 #433]: #434
-#718 := (iff #731 false)
-#378 := (not true)
-#716 := (iff #378 false)
-#717 := [rewrite]: #716
-#714 := (iff #731 #378)
-#376 := (iff #729 true)
-#728 := (iff #729 #387)
-#391 := (iff #394 true)
-#727 := [rewrite]: #391
-#371 := [monotonicity #386 #727]: #728
-#377 := [trans #371 #375]: #376
-#715 := [monotonicity #377]: #714
-#713 := [trans #715 #717]: #718
-#329 := [monotonicity #713 #435]: #436
-#707 := [trans #329 #375]: #706
-#687 := [monotonicity #707 #692 #679]: #686
-#519 := [trans #687 #688]: #517
-#733 := (iff #725 false)
-#734 := [rewrite]: #733
-#674 := [monotonicity #734 #519]: #673
-#678 := [trans #674 #677]: #675
-#735 := (iff #400 #730)
-#736 := [rewrite]: #735
-#562 := [monotonicity #734 #736 #678]: #561
-#666 := [trans #562 #669]: #571
-#573 := [monotonicity #666]: #572
-#575 := [trans #573 #574]: #572
-#570 := [quant-inst]: #555
-#576 := [mp #570 #575]: #670
-[unit-resolution #576 #750 #168]: false
-unsat
-0217fb3975a8ed7626e13b93029371f1151b43e4 326 0
+ab3ee722b1a4b13d571e9569335a5a4521f8479c 326 0
 #2 := false
 #179 := -2::int
 decl f3 :: (-> int int int)
@@ -36439,7 +36141,627 @@
 #654 := [mp #652 #658]: #661
 [unit-resolution #654 #753 #190]: false
 unsat
-0950f059c8c59b021ddf8b08664ab965652bd6ab 328 0
+289a94002efb27d5f9eb28105782f378a655ffff 297 0
+#2 := false
+#11 := 0::int
+decl f4 :: (-> int int int)
+#38 := 3::int
+#39 := (f4 3::int 3::int)
+#40 := (= #39 0::int)
+#41 := (not #40)
+#168 := [asserted]: #41
+#9 := (:var 0 int)
+#8 := (:var 1 int)
+#29 := (f4 #8 #9)
+#744 := (pattern #29)
+#65 := -1::int
+#69 := (* -1::int #9)
+#66 := (* -1::int #8)
+#124 := (mod #66 #69)
+#255 := (+ #29 #124)
+#256 := (= #255 0::int)
+#30 := (mod #8 #9)
+#252 := (* -1::int #30)
+#253 := (+ #29 #252)
+#254 := (= #253 0::int)
+#91 := (<= #9 0::int)
+#87 := (<= #8 0::int)
+#194 := (or #87 #91)
+#195 := (not #194)
+#98 := (>= #8 0::int)
+#186 := (or #91 #98)
+#187 := (not #186)
+#201 := (or #187 #195)
+#257 := (ite #201 #254 #256)
+#251 := (= #29 0::int)
+#12 := (= #8 0::int)
+#258 := (ite #12 #251 #257)
+#250 := (= #8 #29)
+#13 := (= #9 0::int)
+#259 := (ite #13 #250 #258)
+#745 := (forall (vars (?v0 int) (?v1 int)) (:pat #744) #259)
+#262 := (forall (vars (?v0 int) (?v1 int)) #259)
+#748 := (iff #262 #745)
+#746 := (iff #259 #259)
+#747 := [refl]: #746
+#749 := [quant-intro #747]: #748
+#130 := (* -1::int #124)
+#219 := (ite #201 #30 #130)
+#222 := (ite #12 0::int #219)
+#225 := (ite #13 #8 #222)
+#228 := (= #29 #225)
+#231 := (forall (vars (?v0 int) (?v1 int)) #228)
+#263 := (iff #231 #262)
+#260 := (iff #228 #259)
+#261 := [rewrite]: #260
+#264 := [quant-intro #261]: #263
+#99 := (not #98)
+#92 := (not #91)
+#102 := (and #92 #99)
+#88 := (not #87)
+#95 := (and #88 #92)
+#105 := (or #95 #102)
+#150 := (ite #105 #30 #130)
+#153 := (ite #12 0::int #150)
+#156 := (ite #13 #8 #153)
+#159 := (= #29 #156)
+#162 := (forall (vars (?v0 int) (?v1 int)) #159)
+#232 := (iff #162 #231)
+#229 := (iff #159 #228)
+#226 := (= #156 #225)
+#223 := (= #153 #222)
+#220 := (= #150 #219)
+#204 := (iff #105 #201)
+#198 := (or #195 #187)
+#202 := (iff #198 #201)
+#203 := [rewrite]: #202
+#199 := (iff #105 #198)
+#196 := (iff #102 #187)
+#197 := [rewrite]: #196
+#184 := (iff #95 #195)
+#185 := [rewrite]: #184
+#200 := [monotonicity #185 #197]: #199
+#205 := [trans #200 #203]: #204
+#221 := [monotonicity #205]: #220
+#224 := [monotonicity #221]: #223
+#227 := [monotonicity #224]: #226
+#230 := [monotonicity #227]: #229
+#233 := [quant-intro #230]: #232
+#182 := (~ #162 #162)
+#179 := (~ #159 #159)
+#192 := [refl]: #179
+#183 := [nnf-pos #192]: #182
+#23 := (- #9)
+#22 := (- #8)
+#31 := (mod #22 #23)
+#32 := (- #31)
+#16 := (< 0::int #9)
+#18 := (< #8 0::int)
+#19 := (and #18 #16)
+#15 := (< 0::int #8)
+#17 := (and #15 #16)
+#20 := (or #17 #19)
+#33 := (ite #20 #30 #32)
+#34 := (ite #12 0::int #33)
+#35 := (ite #13 #8 #34)
+#36 := (= #29 #35)
+#37 := (forall (vars (?v0 int) (?v1 int)) #36)
+#165 := (iff #37 #162)
+#59 := (and #16 #18)
+#62 := (or #17 #59)
+#135 := (ite #62 #30 #130)
+#138 := (ite #12 0::int #135)
+#141 := (ite #13 #8 #138)
+#144 := (= #29 #141)
+#147 := (forall (vars (?v0 int) (?v1 int)) #144)
+#163 := (iff #147 #162)
+#160 := (iff #144 #159)
+#157 := (= #141 #156)
+#154 := (= #138 #153)
+#151 := (= #135 #150)
+#106 := (iff #62 #105)
+#103 := (iff #59 #102)
+#100 := (iff #18 #99)
+#101 := [rewrite]: #100
+#93 := (iff #16 #92)
+#94 := [rewrite]: #93
+#104 := [monotonicity #94 #101]: #103
+#96 := (iff #17 #95)
+#89 := (iff #15 #88)
+#90 := [rewrite]: #89
+#97 := [monotonicity #90 #94]: #96
+#107 := [monotonicity #97 #104]: #106
+#152 := [monotonicity #107]: #151
+#155 := [monotonicity #152]: #154
+#158 := [monotonicity #155]: #157
+#161 := [monotonicity #158]: #160
+#164 := [quant-intro #161]: #163
+#148 := (iff #37 #147)
+#145 := (iff #36 #144)
+#142 := (= #35 #141)
+#139 := (= #34 #138)
+#136 := (= #33 #135)
+#133 := (= #32 #130)
+#127 := (- #124)
+#131 := (= #127 #130)
+#132 := [rewrite]: #131
+#128 := (= #32 #127)
+#125 := (= #31 #124)
+#70 := (= #23 #69)
+#71 := [rewrite]: #70
+#67 := (= #22 #66)
+#68 := [rewrite]: #67
+#126 := [monotonicity #68 #71]: #125
+#129 := [monotonicity #126]: #128
+#134 := [trans #129 #132]: #133
+#63 := (iff #20 #62)
+#60 := (iff #19 #59)
+#61 := [rewrite]: #60
+#64 := [monotonicity #61]: #63
+#137 := [monotonicity #64 #134]: #136
+#140 := [monotonicity #137]: #139
+#143 := [monotonicity #140]: #142
+#146 := [monotonicity #143]: #145
+#149 := [quant-intro #146]: #148
+#166 := [trans #149 #164]: #165
+#123 := [asserted]: #37
+#167 := [mp #123 #166]: #162
+#193 := [mp~ #167 #183]: #162
+#234 := [mp #193 #233]: #231
+#265 := [mp #234 #264]: #262
+#750 := [mp #265 #749]: #745
+#667 := (not #745)
+#670 := (or #667 #40)
+#323 := (* -1::int 3::int)
+#408 := (mod #323 #323)
+#409 := (+ #39 #408)
+#410 := (= #409 0::int)
+#401 := (mod 3::int 3::int)
+#412 := (* -1::int #401)
+#413 := (+ #39 #412)
+#341 := (= #413 0::int)
+#414 := (<= 3::int 0::int)
+#411 := (or #414 #414)
+#415 := (not #411)
+#394 := (>= 3::int 0::int)
+#729 := (or #414 #394)
+#731 := (not #729)
+#388 := (or #731 #415)
+#518 := (ite #388 #341 #410)
+#725 := (= 3::int 0::int)
+#399 := (ite #725 #40 #518)
+#400 := (= 3::int #39)
+#732 := (ite #725 #400 #399)
+#555 := (or #667 #732)
+#572 := (iff #555 #670)
+#566 := (iff #670 #670)
+#574 := [rewrite]: #566
+#571 := (iff #732 #40)
+#730 := (= #39 3::int)
+#560 := (ite false #730 #40)
+#521 := (iff #560 #40)
+#669 := [rewrite]: #521
+#561 := (iff #732 #560)
+#675 := (iff #399 #40)
+#520 := (ite false #40 #40)
+#676 := (iff #520 #40)
+#677 := [rewrite]: #676
+#673 := (iff #399 #520)
+#517 := (iff #518 #40)
+#1 := true
+#680 := (ite true #40 #40)
+#681 := (iff #680 #40)
+#688 := [rewrite]: #681
+#686 := (iff #518 #680)
+#685 := (iff #410 #40)
+#683 := (= #409 #39)
+#422 := (+ #39 0::int)
+#416 := (= #422 #39)
+#698 := [rewrite]: #416
+#540 := (= #409 #422)
+#538 := (= #408 0::int)
+#693 := -3::int
+#690 := (mod -3::int -3::int)
+#691 := (= #690 0::int)
+#697 := [rewrite]: #691
+#695 := (= #408 #690)
+#694 := (= #323 -3::int)
+#689 := [rewrite]: #694
+#696 := [monotonicity #689 #689]: #695
+#539 := [trans #696 #697]: #538
+#682 := [monotonicity #539]: #540
+#684 := [trans #682 #698]: #683
+#679 := [monotonicity #684]: #685
+#703 := (iff #341 #40)
+#702 := (= #413 #39)
+#700 := (= #413 #422)
+#420 := (= #412 0::int)
+#704 := (* -1::int 0::int)
+#709 := (= #704 0::int)
+#419 := [rewrite]: #709
+#708 := (= #412 #704)
+#429 := (= #401 0::int)
+#430 := [rewrite]: #429
+#705 := [monotonicity #430]: #708
+#421 := [trans #705 #419]: #420
+#701 := [monotonicity #421]: #700
+#699 := [trans #701 #698]: #702
+#692 := [monotonicity #699]: #703
+#706 := (iff #388 true)
+#387 := (or false true)
+#712 := (iff #387 true)
+#375 := [rewrite]: #712
+#436 := (iff #388 #387)
+#434 := (iff #415 true)
+#721 := (not false)
+#711 := (iff #721 true)
+#433 := [rewrite]: #711
+#724 := (iff #415 #721)
+#363 := (iff #411 false)
+#719 := (or false false)
+#722 := (iff #719 false)
+#362 := [rewrite]: #722
+#357 := (iff #411 #719)
+#726 := (iff #414 false)
+#386 := [rewrite]: #726
+#720 := [monotonicity #386 #386]: #357
+#723 := [trans #720 #362]: #363
+#710 := [monotonicity #723]: #724
+#435 := [trans #710 #433]: #434
+#718 := (iff #731 false)
+#378 := (not true)
+#716 := (iff #378 false)
+#717 := [rewrite]: #716
+#714 := (iff #731 #378)
+#376 := (iff #729 true)
+#728 := (iff #729 #387)
+#391 := (iff #394 true)
+#727 := [rewrite]: #391
+#371 := [monotonicity #386 #727]: #728
+#377 := [trans #371 #375]: #376
+#715 := [monotonicity #377]: #714
+#713 := [trans #715 #717]: #718
+#329 := [monotonicity #713 #435]: #436
+#707 := [trans #329 #375]: #706
+#687 := [monotonicity #707 #692 #679]: #686
+#519 := [trans #687 #688]: #517
+#733 := (iff #725 false)
+#734 := [rewrite]: #733
+#674 := [monotonicity #734 #519]: #673
+#678 := [trans #674 #677]: #675
+#735 := (iff #400 #730)
+#736 := [rewrite]: #735
+#562 := [monotonicity #734 #736 #678]: #561
+#666 := [trans #562 #669]: #571
+#573 := [monotonicity #666]: #572
+#575 := [trans #573 #574]: #572
+#570 := [quant-inst]: #555
+#576 := [mp #570 #575]: #670
+[unit-resolution #576 #750 #168]: false
+unsat
+df3c3180cbba903cfcccf082cba5dc63ba7e5462 321 0
+#2 := false
+#67 := -1::int
+decl f3 :: (-> int int int)
+#40 := 3::int
+#173 := (f3 -1::int 3::int)
+#176 := (= #173 -1::int)
+#189 := (not #176)
+#38 := 1::int
+#39 := (- 1::int)
+#41 := (f3 #39 3::int)
+#42 := (= #41 #39)
+#43 := (not #42)
+#192 := (iff #43 #189)
+#179 := (= -1::int #173)
+#184 := (not #179)
+#190 := (iff #184 #189)
+#187 := (iff #179 #176)
+#188 := [rewrite]: #187
+#191 := [monotonicity #188]: #190
+#185 := (iff #43 #184)
+#182 := (iff #42 #179)
+#180 := (iff #176 #179)
+#181 := [rewrite]: #180
+#177 := (iff #42 #176)
+#171 := (= #39 -1::int)
+#172 := [rewrite]: #171
+#174 := (= #41 #173)
+#175 := [monotonicity #172]: #174
+#178 := [monotonicity #175 #172]: #177
+#183 := [trans #178 #181]: #182
+#186 := [monotonicity #183]: #185
+#193 := [trans #186 #191]: #192
+#170 := [asserted]: #43
+#194 := [mp #170 #193]: #189
+#9 := (:var 0 int)
+#8 := (:var 1 int)
+#10 := (f3 #8 #9)
+#752 := (pattern #10)
+#11 := 0::int
+#71 := (* -1::int #9)
+#68 := (* -1::int #8)
+#74 := (div #68 #71)
+#255 := (* -1::int #74)
+#256 := (+ #10 #255)
+#257 := (= #256 0::int)
+#21 := (div #8 #9)
+#252 := (* -1::int #21)
+#253 := (+ #10 #252)
+#254 := (= #253 0::int)
+#93 := (<= #9 0::int)
+#89 := (<= #8 0::int)
+#210 := (or #89 #93)
+#211 := (not #210)
+#100 := (>= #8 0::int)
+#202 := (or #93 #100)
+#203 := (not #202)
+#217 := (or #203 #211)
+#258 := (ite #217 #254 #257)
+#251 := (= #10 0::int)
+#13 := (= #9 0::int)
+#12 := (= #8 0::int)
+#14 := (or #12 #13)
+#259 := (ite #14 #251 #258)
+#753 := (forall (vars (?v0 int) (?v1 int)) (:pat #752) #259)
+#262 := (forall (vars (?v0 int) (?v1 int)) #259)
+#756 := (iff #262 #753)
+#754 := (iff #259 #259)
+#755 := [refl]: #754
+#757 := [quant-intro #755]: #756
+#222 := (ite #217 #21 #74)
+#225 := (ite #14 0::int #222)
+#228 := (= #10 #225)
+#231 := (forall (vars (?v0 int) (?v1 int)) #228)
+#263 := (iff #231 #262)
+#260 := (iff #228 #259)
+#261 := [rewrite]: #260
+#264 := [quant-intro #261]: #263
+#101 := (not #100)
+#94 := (not #93)
+#104 := (and #94 #101)
+#90 := (not #89)
+#97 := (and #90 #94)
+#107 := (or #97 #104)
+#110 := (ite #107 #21 #74)
+#113 := (ite #14 0::int #110)
+#116 := (= #10 #113)
+#119 := (forall (vars (?v0 int) (?v1 int)) #116)
+#232 := (iff #119 #231)
+#229 := (iff #116 #228)
+#226 := (= #113 #225)
+#223 := (= #110 #222)
+#220 := (iff #107 #217)
+#214 := (or #211 #203)
+#218 := (iff #214 #217)
+#219 := [rewrite]: #218
+#215 := (iff #107 #214)
+#212 := (iff #104 #203)
+#213 := [rewrite]: #212
+#200 := (iff #97 #211)
+#201 := [rewrite]: #200
+#216 := [monotonicity #201 #213]: #215
+#221 := [trans #216 #219]: #220
+#224 := [monotonicity #221]: #223
+#227 := [monotonicity #224]: #226
+#230 := [monotonicity #227]: #229
+#233 := [quant-intro #230]: #232
+#206 := (~ #119 #119)
+#204 := (~ #116 #116)
+#205 := [refl]: #204
+#207 := [nnf-pos #205]: #206
+#23 := (- #9)
+#22 := (- #8)
+#24 := (div #22 #23)
+#16 := (< 0::int #9)
+#18 := (< #8 0::int)
+#19 := (and #18 #16)
+#15 := (< 0::int #8)
+#17 := (and #15 #16)
+#20 := (or #17 #19)
+#25 := (ite #20 #21 #24)
+#26 := (ite #14 0::int #25)
+#27 := (= #10 #26)
+#28 := (forall (vars (?v0 int) (?v1 int)) #27)
+#122 := (iff #28 #119)
+#61 := (and #16 #18)
+#64 := (or #17 #61)
+#77 := (ite #64 #21 #74)
+#80 := (ite #14 0::int #77)
+#83 := (= #10 #80)
+#86 := (forall (vars (?v0 int) (?v1 int)) #83)
+#120 := (iff #86 #119)
+#117 := (iff #83 #116)
+#114 := (= #80 #113)
+#111 := (= #77 #110)
+#108 := (iff #64 #107)
+#105 := (iff #61 #104)
+#102 := (iff #18 #101)
+#103 := [rewrite]: #102
+#95 := (iff #16 #94)
+#96 := [rewrite]: #95
+#106 := [monotonicity #96 #103]: #105
+#98 := (iff #17 #97)
+#91 := (iff #15 #90)
+#92 := [rewrite]: #91
+#99 := [monotonicity #92 #96]: #98
+#109 := [monotonicity #99 #106]: #108
+#112 := [monotonicity #109]: #111
+#115 := [monotonicity #112]: #114
+#118 := [monotonicity #115]: #117
+#121 := [quant-intro #118]: #120
+#87 := (iff #28 #86)
+#84 := (iff #27 #83)
+#81 := (= #26 #80)
+#78 := (= #25 #77)
+#75 := (= #24 #74)
+#72 := (= #23 #71)
+#73 := [rewrite]: #72
+#69 := (= #22 #68)
+#70 := [rewrite]: #69
+#76 := [monotonicity #70 #73]: #75
+#65 := (iff #20 #64)
+#62 := (iff #19 #61)
+#63 := [rewrite]: #62
+#66 := [monotonicity #63]: #65
+#79 := [monotonicity #66 #76]: #78
+#82 := [monotonicity #79]: #81
+#85 := [monotonicity #82]: #84
+#88 := [quant-intro #85]: #87
+#123 := [trans #88 #121]: #122
+#60 := [asserted]: #28
+#124 := [mp #60 #123]: #119
+#197 := [mp~ #124 #207]: #119
+#234 := [mp #197 #233]: #231
+#265 := [mp #234 #264]: #262
+#758 := [mp #265 #757]: #753
+#665 := (not #753)
+#667 := (or #665 #176)
+#339 := (* -1::int 3::int)
+#423 := (* -1::int -1::int)
+#424 := (div #423 #339)
+#425 := (* -1::int #424)
+#416 := (+ #173 #425)
+#427 := (= #416 0::int)
+#428 := (div -1::int 3::int)
+#429 := (* -1::int #428)
+#426 := (+ #173 #429)
+#430 := (= #426 0::int)
+#409 := (<= 3::int 0::int)
+#744 := (<= -1::int 0::int)
+#746 := (or #744 #409)
+#403 := (not #746)
+#533 := (>= -1::int 0::int)
+#740 := (or #409 #533)
+#414 := (not #740)
+#415 := (or #414 #403)
+#747 := (ite #415 #430 #427)
+#748 := (= #173 0::int)
+#749 := (= 3::int 0::int)
+#750 := (= -1::int 0::int)
+#745 := (or #750 #749)
+#751 := (ite #745 #748 #747)
+#677 := (or #665 #751)
+#679 := (iff #677 #667)
+#680 := (iff #667 #667)
+#669 := [rewrite]: #680
+#676 := (iff #751 #176)
+#593 := (ite false #748 #176)
+#687 := (iff #593 #176)
+#674 := [rewrite]: #687
+#686 := (iff #751 #593)
+#591 := (iff #747 #176)
+#1 := true
+#587 := (ite true #176 #748)
+#589 := (iff #587 #176)
+#590 := [rewrite]: #589
+#588 := (iff #747 #587)
+#570 := (iff #427 #748)
+#682 := (= #416 #173)
+#577 := (+ #173 0::int)
+#586 := (= #577 #173)
+#681 := [rewrite]: #586
+#536 := (= #416 #577)
+#575 := (= #425 0::int)
+#689 := (* -1::int 0::int)
+#690 := (= #689 0::int)
+#693 := [rewrite]: #690
+#691 := (= #425 #689)
+#535 := (= #424 0::int)
+#694 := -3::int
+#702 := (div 1::int -3::int)
+#532 := (= #702 0::int)
+#534 := [rewrite]: #532
+#696 := (= #424 #702)
+#695 := (= #339 -3::int)
+#701 := [rewrite]: #695
+#717 := (= #423 1::int)
+#714 := [rewrite]: #717
+#703 := [monotonicity #714 #701]: #696
+#688 := [trans #703 #534]: #535
+#692 := [monotonicity #688]: #691
+#576 := [trans #692 #693]: #575
+#684 := [monotonicity #576]: #536
+#685 := [trans #684 #681]: #682
+#585 := [monotonicity #685]: #570
+#699 := (iff #430 #176)
+#705 := (+ 1::int #173)
+#553 := (= #705 0::int)
+#697 := (iff #553 #176)
+#698 := [rewrite]: #697
+#554 := (iff #430 #553)
+#706 := (= #426 #705)
+#708 := (+ #173 1::int)
+#710 := (= #708 #705)
+#711 := [rewrite]: #710
+#709 := (= #426 #708)
+#718 := (= #429 1::int)
+#431 := (= #429 #423)
+#715 := (= #428 -1::int)
+#716 := [rewrite]: #715
+#713 := [monotonicity #716]: #431
+#707 := [trans #713 #714]: #718
+#704 := [monotonicity #707]: #709
+#712 := [trans #704 #711]: #706
+#555 := [monotonicity #712]: #554
+#700 := [trans #555 #698]: #699
+#436 := (iff #415 true)
+#726 := (or true false)
+#450 := (iff #726 true)
+#451 := [rewrite]: #450
+#434 := (iff #415 #726)
+#720 := (iff #403 false)
+#722 := (not true)
+#719 := (iff #722 false)
+#723 := [rewrite]: #719
+#444 := (iff #403 #722)
+#345 := (iff #746 true)
+#448 := (iff #746 #726)
+#393 := (iff #409 false)
+#729 := [rewrite]: #393
+#739 := (iff #744 true)
+#725 := [rewrite]: #739
+#449 := [monotonicity #725 #729]: #448
+#721 := [trans #449 #451]: #345
+#445 := [monotonicity #721]: #444
+#724 := [trans #445 #723]: #720
+#738 := (iff #414 true)
+#372 := (not false)
+#377 := (iff #372 true)
+#378 := [rewrite]: #377
+#735 := (iff #414 #372)
+#728 := (iff #740 false)
+#402 := (or false false)
+#727 := (iff #402 false)
+#390 := [rewrite]: #727
+#732 := (iff #740 #402)
+#730 := (iff #533 false)
+#731 := [rewrite]: #730
+#733 := [monotonicity #729 #731]: #732
+#734 := [trans #733 #390]: #728
+#737 := [monotonicity #734]: #735
+#736 := [trans #737 #378]: #738
+#435 := [monotonicity #736 #724]: #434
+#437 := [trans #435 #451]: #436
+#581 := [monotonicity #437 #700 #585]: #588
+#592 := [trans #581 #590]: #591
+#391 := (iff #745 false)
+#743 := (iff #745 #402)
+#406 := (iff #749 false)
+#742 := [rewrite]: #406
+#741 := (iff #750 false)
+#401 := [rewrite]: #741
+#386 := [monotonicity #401 #742]: #743
+#392 := [trans #386 #390]: #391
+#683 := [monotonicity #392 #592]: #686
+#668 := [trans #683 #674]: #676
+#675 := [monotonicity #668]: #679
+#670 := [trans #675 #669]: #679
+#678 := [quant-inst]: #677
+#671 := [mp #678 #670]: #667
+[unit-resolution #671 #758 #194]: false
+unsat
+033c174f82b5a84d7fb4bb3712b35d17f518a720 328 0
 #2 := false
 #41 := 2::int
 decl f4 :: (-> int int int)
@@ -36768,329 +37090,7 @@
 #641 := [mp #635 #636]: #650
 [unit-resolution #641 #742 #170]: false
 unsat
-a5e7ca3a1a908b3cfa96261b62a5e5f564ff08b5 321 0
-#2 := false
-#67 := -1::int
-decl f3 :: (-> int int int)
-#40 := 3::int
-#173 := (f3 -1::int 3::int)
-#176 := (= #173 -1::int)
-#189 := (not #176)
-#38 := 1::int
-#39 := (- 1::int)
-#41 := (f3 #39 3::int)
-#42 := (= #41 #39)
-#43 := (not #42)
-#192 := (iff #43 #189)
-#179 := (= -1::int #173)
-#184 := (not #179)
-#190 := (iff #184 #189)
-#187 := (iff #179 #176)
-#188 := [rewrite]: #187
-#191 := [monotonicity #188]: #190
-#185 := (iff #43 #184)
-#182 := (iff #42 #179)
-#180 := (iff #176 #179)
-#181 := [rewrite]: #180
-#177 := (iff #42 #176)
-#171 := (= #39 -1::int)
-#172 := [rewrite]: #171
-#174 := (= #41 #173)
-#175 := [monotonicity #172]: #174
-#178 := [monotonicity #175 #172]: #177
-#183 := [trans #178 #181]: #182
-#186 := [monotonicity #183]: #185
-#193 := [trans #186 #191]: #192
-#170 := [asserted]: #43
-#194 := [mp #170 #193]: #189
-#9 := (:var 0 int)
-#8 := (:var 1 int)
-#10 := (f3 #8 #9)
-#752 := (pattern #10)
-#11 := 0::int
-#71 := (* -1::int #9)
-#68 := (* -1::int #8)
-#74 := (div #68 #71)
-#255 := (* -1::int #74)
-#256 := (+ #10 #255)
-#257 := (= #256 0::int)
-#21 := (div #8 #9)
-#252 := (* -1::int #21)
-#253 := (+ #10 #252)
-#254 := (= #253 0::int)
-#93 := (<= #9 0::int)
-#89 := (<= #8 0::int)
-#210 := (or #89 #93)
-#211 := (not #210)
-#100 := (>= #8 0::int)
-#202 := (or #93 #100)
-#203 := (not #202)
-#217 := (or #203 #211)
-#258 := (ite #217 #254 #257)
-#251 := (= #10 0::int)
-#13 := (= #9 0::int)
-#12 := (= #8 0::int)
-#14 := (or #12 #13)
-#259 := (ite #14 #251 #258)
-#753 := (forall (vars (?v0 int) (?v1 int)) (:pat #752) #259)
-#262 := (forall (vars (?v0 int) (?v1 int)) #259)
-#756 := (iff #262 #753)
-#754 := (iff #259 #259)
-#755 := [refl]: #754
-#757 := [quant-intro #755]: #756
-#222 := (ite #217 #21 #74)
-#225 := (ite #14 0::int #222)
-#228 := (= #10 #225)
-#231 := (forall (vars (?v0 int) (?v1 int)) #228)
-#263 := (iff #231 #262)
-#260 := (iff #228 #259)
-#261 := [rewrite]: #260
-#264 := [quant-intro #261]: #263
-#101 := (not #100)
-#94 := (not #93)
-#104 := (and #94 #101)
-#90 := (not #89)
-#97 := (and #90 #94)
-#107 := (or #97 #104)
-#110 := (ite #107 #21 #74)
-#113 := (ite #14 0::int #110)
-#116 := (= #10 #113)
-#119 := (forall (vars (?v0 int) (?v1 int)) #116)
-#232 := (iff #119 #231)
-#229 := (iff #116 #228)
-#226 := (= #113 #225)
-#223 := (= #110 #222)
-#220 := (iff #107 #217)
-#214 := (or #211 #203)
-#218 := (iff #214 #217)
-#219 := [rewrite]: #218
-#215 := (iff #107 #214)
-#212 := (iff #104 #203)
-#213 := [rewrite]: #212
-#200 := (iff #97 #211)
-#201 := [rewrite]: #200
-#216 := [monotonicity #201 #213]: #215
-#221 := [trans #216 #219]: #220
-#224 := [monotonicity #221]: #223
-#227 := [monotonicity #224]: #226
-#230 := [monotonicity #227]: #229
-#233 := [quant-intro #230]: #232
-#206 := (~ #119 #119)
-#204 := (~ #116 #116)
-#205 := [refl]: #204
-#207 := [nnf-pos #205]: #206
-#23 := (- #9)
-#22 := (- #8)
-#24 := (div #22 #23)
-#16 := (< 0::int #9)
-#18 := (< #8 0::int)
-#19 := (and #18 #16)
-#15 := (< 0::int #8)
-#17 := (and #15 #16)
-#20 := (or #17 #19)
-#25 := (ite #20 #21 #24)
-#26 := (ite #14 0::int #25)
-#27 := (= #10 #26)
-#28 := (forall (vars (?v0 int) (?v1 int)) #27)
-#122 := (iff #28 #119)
-#61 := (and #16 #18)
-#64 := (or #17 #61)
-#77 := (ite #64 #21 #74)
-#80 := (ite #14 0::int #77)
-#83 := (= #10 #80)
-#86 := (forall (vars (?v0 int) (?v1 int)) #83)
-#120 := (iff #86 #119)
-#117 := (iff #83 #116)
-#114 := (= #80 #113)
-#111 := (= #77 #110)
-#108 := (iff #64 #107)
-#105 := (iff #61 #104)
-#102 := (iff #18 #101)
-#103 := [rewrite]: #102
-#95 := (iff #16 #94)
-#96 := [rewrite]: #95
-#106 := [monotonicity #96 #103]: #105
-#98 := (iff #17 #97)
-#91 := (iff #15 #90)
-#92 := [rewrite]: #91
-#99 := [monotonicity #92 #96]: #98
-#109 := [monotonicity #99 #106]: #108
-#112 := [monotonicity #109]: #111
-#115 := [monotonicity #112]: #114
-#118 := [monotonicity #115]: #117
-#121 := [quant-intro #118]: #120
-#87 := (iff #28 #86)
-#84 := (iff #27 #83)
-#81 := (= #26 #80)
-#78 := (= #25 #77)
-#75 := (= #24 #74)
-#72 := (= #23 #71)
-#73 := [rewrite]: #72
-#69 := (= #22 #68)
-#70 := [rewrite]: #69
-#76 := [monotonicity #70 #73]: #75
-#65 := (iff #20 #64)
-#62 := (iff #19 #61)
-#63 := [rewrite]: #62
-#66 := [monotonicity #63]: #65
-#79 := [monotonicity #66 #76]: #78
-#82 := [monotonicity #79]: #81
-#85 := [monotonicity #82]: #84
-#88 := [quant-intro #85]: #87
-#123 := [trans #88 #121]: #122
-#60 := [asserted]: #28
-#124 := [mp #60 #123]: #119
-#197 := [mp~ #124 #207]: #119
-#234 := [mp #197 #233]: #231
-#265 := [mp #234 #264]: #262
-#758 := [mp #265 #757]: #753
-#665 := (not #753)
-#667 := (or #665 #176)
-#339 := (* -1::int 3::int)
-#423 := (* -1::int -1::int)
-#424 := (div #423 #339)
-#425 := (* -1::int #424)
-#416 := (+ #173 #425)
-#427 := (= #416 0::int)
-#428 := (div -1::int 3::int)
-#429 := (* -1::int #428)
-#426 := (+ #173 #429)
-#430 := (= #426 0::int)
-#409 := (<= 3::int 0::int)
-#744 := (<= -1::int 0::int)
-#746 := (or #744 #409)
-#403 := (not #746)
-#533 := (>= -1::int 0::int)
-#740 := (or #409 #533)
-#414 := (not #740)
-#415 := (or #414 #403)
-#747 := (ite #415 #430 #427)
-#748 := (= #173 0::int)
-#749 := (= 3::int 0::int)
-#750 := (= -1::int 0::int)
-#745 := (or #750 #749)
-#751 := (ite #745 #748 #747)
-#677 := (or #665 #751)
-#679 := (iff #677 #667)
-#680 := (iff #667 #667)
-#669 := [rewrite]: #680
-#676 := (iff #751 #176)
-#593 := (ite false #748 #176)
-#687 := (iff #593 #176)
-#674 := [rewrite]: #687
-#686 := (iff #751 #593)
-#591 := (iff #747 #176)
-#1 := true
-#587 := (ite true #176 #748)
-#589 := (iff #587 #176)
-#590 := [rewrite]: #589
-#588 := (iff #747 #587)
-#570 := (iff #427 #748)
-#682 := (= #416 #173)
-#577 := (+ #173 0::int)
-#586 := (= #577 #173)
-#681 := [rewrite]: #586
-#536 := (= #416 #577)
-#575 := (= #425 0::int)
-#689 := (* -1::int 0::int)
-#690 := (= #689 0::int)
-#693 := [rewrite]: #690
-#691 := (= #425 #689)
-#535 := (= #424 0::int)
-#694 := -3::int
-#702 := (div 1::int -3::int)
-#532 := (= #702 0::int)
-#534 := [rewrite]: #532
-#696 := (= #424 #702)
-#695 := (= #339 -3::int)
-#701 := [rewrite]: #695
-#717 := (= #423 1::int)
-#714 := [rewrite]: #717
-#703 := [monotonicity #714 #701]: #696
-#688 := [trans #703 #534]: #535
-#692 := [monotonicity #688]: #691
-#576 := [trans #692 #693]: #575
-#684 := [monotonicity #576]: #536
-#685 := [trans #684 #681]: #682
-#585 := [monotonicity #685]: #570
-#699 := (iff #430 #176)
-#705 := (+ 1::int #173)
-#553 := (= #705 0::int)
-#697 := (iff #553 #176)
-#698 := [rewrite]: #697
-#554 := (iff #430 #553)
-#706 := (= #426 #705)
-#708 := (+ #173 1::int)
-#710 := (= #708 #705)
-#711 := [rewrite]: #710
-#709 := (= #426 #708)
-#718 := (= #429 1::int)
-#431 := (= #429 #423)
-#715 := (= #428 -1::int)
-#716 := [rewrite]: #715
-#713 := [monotonicity #716]: #431
-#707 := [trans #713 #714]: #718
-#704 := [monotonicity #707]: #709
-#712 := [trans #704 #711]: #706
-#555 := [monotonicity #712]: #554
-#700 := [trans #555 #698]: #699
-#436 := (iff #415 true)
-#726 := (or true false)
-#450 := (iff #726 true)
-#451 := [rewrite]: #450
-#434 := (iff #415 #726)
-#720 := (iff #403 false)
-#722 := (not true)
-#719 := (iff #722 false)
-#723 := [rewrite]: #719
-#444 := (iff #403 #722)
-#345 := (iff #746 true)
-#448 := (iff #746 #726)
-#393 := (iff #409 false)
-#729 := [rewrite]: #393
-#739 := (iff #744 true)
-#725 := [rewrite]: #739
-#449 := [monotonicity #725 #729]: #448
-#721 := [trans #449 #451]: #345
-#445 := [monotonicity #721]: #444
-#724 := [trans #445 #723]: #720
-#738 := (iff #414 true)
-#372 := (not false)
-#377 := (iff #372 true)
-#378 := [rewrite]: #377
-#735 := (iff #414 #372)
-#728 := (iff #740 false)
-#402 := (or false false)
-#727 := (iff #402 false)
-#390 := [rewrite]: #727
-#732 := (iff #740 #402)
-#730 := (iff #533 false)
-#731 := [rewrite]: #730
-#733 := [monotonicity #729 #731]: #732
-#734 := [trans #733 #390]: #728
-#737 := [monotonicity #734]: #735
-#736 := [trans #737 #378]: #738
-#435 := [monotonicity #736 #724]: #434
-#437 := [trans #435 #451]: #436
-#581 := [monotonicity #437 #700 #585]: #588
-#592 := [trans #581 #590]: #591
-#391 := (iff #745 false)
-#743 := (iff #745 #402)
-#406 := (iff #749 false)
-#742 := [rewrite]: #406
-#741 := (iff #750 false)
-#401 := [rewrite]: #741
-#386 := [monotonicity #401 #742]: #743
-#392 := [trans #386 #390]: #391
-#683 := [monotonicity #392 #592]: #686
-#668 := [trans #683 #674]: #676
-#675 := [monotonicity #668]: #679
-#670 := [trans #675 #669]: #679
-#678 := [quant-inst]: #677
-#671 := [mp #678 #670]: #667
-[unit-resolution #671 #758 #194]: false
-unsat
-4a26f9179dc065943e8b39f87c50b753014abca8 323 0
+d42aa6984a7dce484750bcd7fd3519e7754fc33c 323 0
 #2 := false
 #68 := -1::int
 decl f3 :: (-> int int int)
@@ -37414,7 +37414,7 @@
 #673 := [mp #671 #684]: #672
 [unit-resolution #673 #762 #198]: false
 unsat
-f77523eb025c744a899f70384fe23771c2e2df49 335 0
+9a87ecccd917767a2618c6aa64ea49313201d461 335 0
 #2 := false
 #179 := -2::int
 decl f4 :: (-> int int int)
@@ -37750,7 +37750,7 @@
 #666 := [mp #673 #665]: #671
 [unit-resolution #666 #759 #190]: false
 unsat
-aa5c848d75f817ce17fcfbcc43fdae3201eb9151 326 0
+ad2a6875c2ba06fc01a6747490a7bde0bd97929e 326 0
 #2 := false
 #179 := -2::int
 decl f3 :: (-> int int int)
@@ -38077,7 +38077,7 @@
 #654 := [mp #652 #658]: #661
 [unit-resolution #654 #753 #190]: false
 unsat
-51326f007e56e93f50afc5ba2d03581cdc697a2d 328 0
+b80549d22ecf7f5cd139430555c8f40a8bf6eaf1 328 0
 #2 := false
 #11 := 0::int
 decl f4 :: (-> int int int)
@@ -38406,7 +38406,7 @@
 #688 := [mp #591 #684]: #582
 [unit-resolution #688 #766 #194]: false
 unsat
-4ca477e5a43a16dacbb90f983ac5a8510c16d464 327 0
+f5bac51774cbba53d38c1b1a54df34cd76c05e60 327 0
 #2 := false
 #11 := 0::int
 decl f3 :: (-> int int int)
@@ -38734,7 +38734,7 @@
 #670 := [mp #679 #676]: #682
 [unit-resolution #670 #762 #198]: false
 unsat
-0f74c41c938e9378ba24d8b61b7a4d0b50210370 356 0
+0b4939d8f1f4bc7cd881c6a957ccad857d8a1074 356 0
 #2 := false
 #69 := -1::int
 decl f4 :: (-> int int int)
@@ -39091,7 +39091,7 @@
 #669 := [mp #663 #664]: #678
 [unit-resolution #669 #770 #199]: false
 unsat
-ddc5a6b304650a08be4d46afd02b8b25ea1c25a2 311 0
+970747fa305dc2e610f7c82f817720c0ccc3a165 311 0
 #2 := false
 #41 := 1::int
 decl f3 :: (-> int int int)
@@ -39403,7 +39403,7 @@
 #677 := [mp #593 #675]: #591
 [unit-resolution #677 #759 #195]: false
 unsat
-3c5a12d92626ff8ea2f3e7c2d04bebd45ef00916 350 0
+fdc90ed3bd1ececd431bc0c6098387ca00c73cfc 350 0
 #2 := false
 #42 := 2::int
 decl f4 :: (-> int int int)
@@ -39754,7 +39754,7 @@
 #664 := [mp #674 #663]: #673
 [unit-resolution #664 #766 #195]: false
 unsat
-081d17418769caf8ceb0841229da368f6008d179 338 0
+b3920b336e88838381046f8db8a66873eedc037f 338 0
 #2 := false
 #43 := 1::int
 decl f3 :: (-> int int int)
@@ -40093,7 +40093,7 @@
 #670 := [mp #664 #665]: #679
 [unit-resolution #670 #764 #200]: false
 unsat
-9ee8d0dc4ede7b68c19a265d2c4cda80156ee20b 331 0
+751a59e3560a9cccfdefaac76c413ce978cf57af 331 0
 #2 := false
 #11 := 0::int
 decl f4 :: (-> int int int)
@@ -40425,7 +40425,7 @@
 #669 := [mp #594 #677]: #592
 [unit-resolution #669 #766 #194]: false
 unsat
-ab1c3c43720ded895d2a82ffbaf56e6367dbc9b8 592 0
+1e04803c850b7955989debde9ec201f52ca7253f 592 0
 #2 := false
 #11 := 0::int
 decl f3 :: (-> int int int)
@@ -41018,7 +41018,7 @@
 #362 := [unit-resolution #397 #361]: #600
 [th-lemma #362 #415 #382 #378]: false
 unsat
-0dff6836610ad24fd350792fdba18f67fffe78ae 353 0
+0014d0664084b0406eb7d7fe8514292d539673ea 353 0
 #2 := false
 #42 := 1::int
 decl f4 :: (-> int int int)
@@ -41372,7 +41372,7 @@
 #666 := [mp #660 #661]: #675
 [unit-resolution #666 #767 #196]: false
 unsat
-f7d21861165159375bc45e6364e84fc0183b7f2c 549 0
+b73a0de984e1278677e252eddd5f49245a89ef43 549 0
 #2 := false
 #11 := 0::int
 decl f3 :: (-> int int int)
@@ -41922,7 +41922,7 @@
 #478 := [unit-resolution #470 #507]: #751
 [th-lemma #478 #476 #486 #472]: false
 unsat
-2131919aacf2b81143bdcdf048ab7c7b571f4dab 350 0
+69b248ec4c8c22d71fd11309dbdf636ac009612d 350 0
 #2 := false
 #68 := -1::int
 decl f4 :: (-> int int int)
@@ -42273,7 +42273,7 @@
 #664 := [mp #675 #662]: #673
 [unit-resolution #664 #769 #198]: false
 unsat
-f185b775c0ed207acb3897bf916bd950213b79f9 319 0
+206d37ba92a2e6c0100ce1d13f8823dad1d40cd1 319 0
 #2 := false
 #11 := 0::int
 decl f4 :: (-> int int int)
@@ -42593,7 +42593,7 @@
 #589 := [mp #682 #588]: #685
 [unit-resolution #589 #766 #194]: false
 unsat
-b8a677f41acfea6ca1bd28f53fd89f2c10758abc 75 0
+cc9432c40327db517dd79cbbd0d9d26dcbfe5cac 75 0
 #2 := false
 #8 := 0::int
 decl f3 :: int
@@ -42669,7 +42669,7 @@
 #96 := [unit-resolution #95 #92]: #90
 [th-lemma #89 #70 #96]: false
 unsat
-957272aa2f77e61687a16c7aa490ba2664908958 132 0
+48eb42104c7475e8c3a01fc47d1fb95a5b64e0b9 132 0
 #2 := false
 #9 := 0::int
 decl f3 :: int
@@ -42802,7 +42802,7 @@
 #162 := [th-lemma]: #161
 [unit-resolution #162 #160 #143]: false
 unsat
-9485d306079aa8cdc08952543a8ac86391d45fc0 103 0
+029c5fe4db8f26b45338d7437b6be2ddd1a19e85 103 0
 #2 := false
 #8 := 0::int
 decl f3 :: int
@@ -42906,7 +42906,7 @@
 #124 := [unit-resolution #123 #120]: #115
 [th-lemma #110 #124]: false
 unsat
-fc9f250b0540aecbc3a008bfe364829a1228d272 347 0
+830c72401ff6ad8a8e8d6573aef1bb4cebf52b34 347 0
 #2 := false
 #183 := -2::int
 decl f4 :: (-> int int int)
@@ -43254,7 +43254,7 @@
 #661 := [mp #665 #660]: #670
 [unit-resolution #661 #764 #194]: false
 unsat
-443d726f158e992756000aa2462469d5494d62ee 149 0
+52af3e6f56c34eae5bf2a6d6b943c47275276ffc 149 0
 #2 := false
 #9 := 0::int
 decl f3 :: int
@@ -43404,7 +43404,7 @@
 #170 := [unit-resolution #169 #155]: #97
 [th-lemma #159 #170 #167]: false
 unsat
-5d75c12dca04a93af891e80a12133cb48b0e8ce3 114 0
+a6116a7f03a76aa4ac7d1dcd46146a27d6d63ab1 114 0
 #2 := false
 #9 := 0::int
 decl f3 :: int
@@ -43519,7 +43519,7 @@
 #143 := [unit-resolution #142 #139]: #137
 [th-lemma #136 #134 #143]: false
 unsat
-1c29e683939b29daf6c0c39d6dc5211f90494d2b 57 0
+e4b94493f8fddbc193be4dbfae372055ca4cbda1 57 0
 #2 := false
 #36 := 0::int
 decl f4 :: int
@@ -43577,7 +43577,7 @@
 #77 := [th-lemma]: #76
 [unit-resolution #77 #74 #56]: false
 unsat
-66247d826364718443f0bc07b82495d982768eb5 327 0
+0296c8b047bf7c4a566214ff7059485e4b909dfc 327 0
 #2 := false
 #11 := 0::int
 decl f5 :: int
@@ -43905,7 +43905,7 @@
 #595 := [unit-resolution #594 #613]: #727
 [unit-resolution #595 #482 #589]: false
 unsat
-f5bdd04ade0ff62ddedb44ca71a4ab32cea43ed1 57 0
+91e3b65fe0735963e19e3d7ce9fe3c5222eb3f2d 57 0
 #2 := false
 #36 := 0::int
 decl f4 :: int
@@ -43963,7 +43963,7 @@
 #77 := [unit-resolution #76 #73]: #71
 [th-lemma #77 #56 #72]: false
 unsat
-db7c87847633d861c99b1fec84d68fb0617d9c27 103 0
+e8ac648521d18274c15ba44956491a942644e11b 103 0
 #2 := false
 #45 := 0::int
 decl f5 :: int
@@ -44067,7 +44067,7 @@
 #122 := [unit-resolution #121 #118]: #115
 [th-lemma #122 #92 #93]: false
 unsat
-30ec056750b76c9c44be73825eb8959f04eaf2af 86 0
+ce75b686fb3c3081849ae555f6c4209952006101 86 0
 #2 := false
 decl f3 :: int
 #8 := f3
@@ -44154,7 +44154,7 @@
 #105 := [trans #104 #83]: #51
 [unit-resolution #57 #105]: false
 unsat
-87cffe59a43ecd3ffcda40df06578c44d2a9feac 68 0
+5ed6ad8b6d8d132011755b1d04d869cf48c13481 68 0
 #2 := false
 #8 := 0::int
 decl f3 :: int
@@ -44223,132 +44223,7 @@
 #88 := [trans #87 #84]: #13
 [unit-resolution #71 #88]: false
 unsat
-90c0dd925b0006ab13047c20a6f0e8d277ec4cdf 124 0
-#2 := false
-#13 := 0::int
-decl f4 :: int
-#9 := f4
-decl f3 :: int
-#8 := f3
-#36 := -1::int
-#38 := (* -1::int f4)
-#51 := (+ f3 #38)
-#52 := (<= #51 0::int)
-#55 := (ite #52 f3 f4)
-#103 := (* -1::int #55)
-#104 := (+ f3 #103)
-#106 := (>= #104 0::int)
-#91 := (= f3 #55)
-#105 := (+ f4 #103)
-#123 := (>= #105 0::int)
-#92 := (= f4 #55)
-#93 := (not #52)
-#134 := [hypothesis]: #93
-#90 := (or #52 #92)
-#88 := [def-axiom]: #90
-#135 := [unit-resolution #88 #134]: #92
-#126 := (not #92)
-#127 := (or #126 #123)
-#128 := [th-lemma]: #127
-#136 := [unit-resolution #128 #135]: #123
-#37 := (* -1::int f3)
-#39 := (+ #37 #38)
-#12 := (+ f3 f4)
-#58 := (>= #12 0::int)
-#65 := (ite #58 #12 #39)
-#73 := (* -1::int #65)
-#74 := (+ #55 #73)
-#75 := (<= #74 0::int)
-#80 := (not #75)
-#15 := (- #12)
-#14 := (< #12 0::int)
-#16 := (ite #14 #15 #12)
-#10 := (<= f3 f4)
-#11 := (ite #10 f3 f4)
-#17 := (<= #11 #16)
-#18 := (not #17)
-#83 := (iff #18 #80)
-#42 := (ite #14 #39 #12)
-#45 := (<= #11 #42)
-#48 := (not #45)
-#81 := (iff #48 #80)
-#78 := (iff #45 #75)
-#70 := (<= #55 #65)
-#76 := (iff #70 #75)
-#77 := [rewrite]: #76
-#71 := (iff #45 #70)
-#68 := (= #42 #65)
-#59 := (not #58)
-#62 := (ite #59 #39 #12)
-#66 := (= #62 #65)
-#67 := [rewrite]: #66
-#63 := (= #42 #62)
-#60 := (iff #14 #59)
-#61 := [rewrite]: #60
-#64 := [monotonicity #61]: #63
-#69 := [trans #64 #67]: #68
-#56 := (= #11 #55)
-#53 := (iff #10 #52)
-#54 := [rewrite]: #53
-#57 := [monotonicity #54]: #56
-#72 := [monotonicity #57 #69]: #71
-#79 := [trans #72 #77]: #78
-#82 := [monotonicity #79]: #81
-#49 := (iff #18 #48)
-#46 := (iff #17 #45)
-#43 := (= #16 #42)
-#40 := (= #15 #39)
-#41 := [rewrite]: #40
-#44 := [monotonicity #41]: #43
-#47 := [monotonicity #44]: #46
-#50 := [monotonicity #47]: #49
-#84 := [trans #50 #82]: #83
-#35 := [asserted]: #18
-#85 := [mp #35 #84]: #80
-#102 := (+ #12 #73)
-#122 := (<= #102 0::int)
-#86 := (= #12 #65)
-#108 := [hypothesis]: #59
-#120 := (or #93 #58)
-#107 := [hypothesis]: #52
-#100 := (+ #39 #73)
-#101 := (<= #100 0::int)
-#95 := (= #39 #65)
-#98 := (or #58 #95)
-#99 := [def-axiom]: #98
-#109 := [unit-resolution #99 #108]: #95
-#110 := (not #95)
-#111 := (or #110 #101)
-#112 := [th-lemma]: #111
-#113 := [unit-resolution #112 #109]: #101
-#94 := (or #93 #91)
-#89 := [def-axiom]: #94
-#114 := [unit-resolution #89 #107]: #91
-#115 := (not #91)
-#116 := (or #115 #106)
-#117 := [th-lemma]: #116
-#118 := [unit-resolution #117 #114]: #106
-#119 := [th-lemma #108 #118 #113 #85 #107]: false
-#121 := [lemma #119]: #120
-#124 := [unit-resolution #121 #108]: #93
-#125 := [unit-resolution #88 #124]: #92
-#129 := [unit-resolution #128 #125]: #123
-#130 := [th-lemma #113 #85 #108 #124 #129]: false
-#131 := [lemma #130]: #58
-#96 := (or #59 #86)
-#97 := [def-axiom]: #96
-#137 := [unit-resolution #97 #131]: #86
-#138 := (not #86)
-#139 := (or #138 #122)
-#140 := [th-lemma]: #139
-#141 := [unit-resolution #140 #137]: #122
-#142 := [th-lemma #134 #131 #141 #85 #136]: false
-#143 := [lemma #142]: #52
-#144 := [unit-resolution #89 #143]: #91
-#145 := [unit-resolution #117 #144]: #106
-[th-lemma #131 #143 #141 #85 #145]: false
-unsat
-e48a7e8698a7ec4071541fd4399337a2b0f4fdb6 345 0
+f33aa883aeb7c21943e04cb493978fec1eef7863 345 0
 #2 := false
 #39 := 3::int
 decl f4 :: (-> int int int)
@@ -44694,7 +44569,132 @@
 #624 := [unit-resolution #628 #626]: #707
 [th-lemma #624 #612 #206 #631 #648]: false
 unsat
-de67b37b9c3eba477099ff5d9b09e840de376762 57 0
+676aec4873ed7d4eeb51bdde607873c00764a075 124 0
+#2 := false
+#13 := 0::int
+decl f4 :: int
+#9 := f4
+decl f3 :: int
+#8 := f3
+#36 := -1::int
+#38 := (* -1::int f4)
+#51 := (+ f3 #38)
+#52 := (<= #51 0::int)
+#55 := (ite #52 f3 f4)
+#103 := (* -1::int #55)
+#104 := (+ f3 #103)
+#106 := (>= #104 0::int)
+#91 := (= f3 #55)
+#105 := (+ f4 #103)
+#123 := (>= #105 0::int)
+#92 := (= f4 #55)
+#93 := (not #52)
+#134 := [hypothesis]: #93
+#90 := (or #52 #92)
+#88 := [def-axiom]: #90
+#135 := [unit-resolution #88 #134]: #92
+#126 := (not #92)
+#127 := (or #126 #123)
+#128 := [th-lemma]: #127
+#136 := [unit-resolution #128 #135]: #123
+#37 := (* -1::int f3)
+#39 := (+ #37 #38)
+#12 := (+ f3 f4)
+#58 := (>= #12 0::int)
+#65 := (ite #58 #12 #39)
+#73 := (* -1::int #65)
+#74 := (+ #55 #73)
+#75 := (<= #74 0::int)
+#80 := (not #75)
+#15 := (- #12)
+#14 := (< #12 0::int)
+#16 := (ite #14 #15 #12)
+#10 := (<= f3 f4)
+#11 := (ite #10 f3 f4)
+#17 := (<= #11 #16)
+#18 := (not #17)
+#83 := (iff #18 #80)
+#42 := (ite #14 #39 #12)
+#45 := (<= #11 #42)
+#48 := (not #45)
+#81 := (iff #48 #80)
+#78 := (iff #45 #75)
+#70 := (<= #55 #65)
+#76 := (iff #70 #75)
+#77 := [rewrite]: #76
+#71 := (iff #45 #70)
+#68 := (= #42 #65)
+#59 := (not #58)
+#62 := (ite #59 #39 #12)
+#66 := (= #62 #65)
+#67 := [rewrite]: #66
+#63 := (= #42 #62)
+#60 := (iff #14 #59)
+#61 := [rewrite]: #60
+#64 := [monotonicity #61]: #63
+#69 := [trans #64 #67]: #68
+#56 := (= #11 #55)
+#53 := (iff #10 #52)
+#54 := [rewrite]: #53
+#57 := [monotonicity #54]: #56
+#72 := [monotonicity #57 #69]: #71
+#79 := [trans #72 #77]: #78
+#82 := [monotonicity #79]: #81
+#49 := (iff #18 #48)
+#46 := (iff #17 #45)
+#43 := (= #16 #42)
+#40 := (= #15 #39)
+#41 := [rewrite]: #40
+#44 := [monotonicity #41]: #43
+#47 := [monotonicity #44]: #46
+#50 := [monotonicity #47]: #49
+#84 := [trans #50 #82]: #83
+#35 := [asserted]: #18
+#85 := [mp #35 #84]: #80
+#102 := (+ #12 #73)
+#122 := (<= #102 0::int)
+#86 := (= #12 #65)
+#108 := [hypothesis]: #59
+#120 := (or #93 #58)
+#107 := [hypothesis]: #52
+#100 := (+ #39 #73)
+#101 := (<= #100 0::int)
+#95 := (= #39 #65)
+#98 := (or #58 #95)
+#99 := [def-axiom]: #98
+#109 := [unit-resolution #99 #108]: #95
+#110 := (not #95)
+#111 := (or #110 #101)
+#112 := [th-lemma]: #111
+#113 := [unit-resolution #112 #109]: #101
+#94 := (or #93 #91)
+#89 := [def-axiom]: #94
+#114 := [unit-resolution #89 #107]: #91
+#115 := (not #91)
+#116 := (or #115 #106)
+#117 := [th-lemma]: #116
+#118 := [unit-resolution #117 #114]: #106
+#119 := [th-lemma #108 #118 #113 #85 #107]: false
+#121 := [lemma #119]: #120
+#124 := [unit-resolution #121 #108]: #93
+#125 := [unit-resolution #88 #124]: #92
+#129 := [unit-resolution #128 #125]: #123
+#130 := [th-lemma #113 #85 #108 #124 #129]: false
+#131 := [lemma #130]: #58
+#96 := (or #59 #86)
+#97 := [def-axiom]: #96
+#137 := [unit-resolution #97 #131]: #86
+#138 := (not #86)
+#139 := (or #138 #122)
+#140 := [th-lemma]: #139
+#141 := [unit-resolution #140 #137]: #122
+#142 := [th-lemma #134 #131 #141 #85 #136]: false
+#143 := [lemma #142]: #52
+#144 := [unit-resolution #89 #143]: #91
+#145 := [unit-resolution #117 #144]: #106
+[th-lemma #131 #143 #141 #85 #145]: false
+unsat
+8c7ea6775a14dcc4e6e4353a2f19b1779116c872 57 0
 #2 := false
 #36 := 0::int
 decl f4 :: int
@@ -44752,7 +44752,7 @@
 #77 := [unit-resolution #76 #73]: #70
 [th-lemma #77 #56 #72]: false
 unsat
-8f0b2c755e25c9b0ef5750035ec56d21d3c6b32f 57 0
+d2ac6a0bd8f242b6fea1d95d6a700ca235f7739e 57 0
 #2 := false
 #35 := 0::int
 decl f4 :: int
@@ -44810,7 +44810,7 @@
 #77 := [th-lemma]: #76
 [unit-resolution #77 #74 #56]: false
 unsat
-ba050e782d9473f46d4f759400e69d34d257264e 103 0
+8bc37b5efc45a2f7051f9fdaf148c2248f44ab13 103 0
 #2 := false
 #45 := 0::int
 decl f3 :: int
@@ -44914,7 +44914,7 @@
 #122 := [unit-resolution #121 #118]: #116
 [th-lemma #122 #91 #93]: false
 unsat
-9c2cfdc304fee997e8f612dd9123abd86a877f29 88 0
+3bd554374bbb33d45f736a3866c11a3228de58fe 88 0
 #2 := false
 decl f4 :: int
 #9 := f4
@@ -45003,64 +45003,7 @@
 #109 := [trans #108 #83]: #51
 [unit-resolution #57 #109]: false
 unsat
-efdfb7635dd41e99f117d8463d9d75f3897207dd 56 0
-#2 := false
-#11 := 1::int
-decl f3 :: int
-#9 := f3
-#14 := (= f3 1::int)
-#12 := (<= f3 1::int)
-#8 := 0::int
-#41 := (<= f3 0::int)
-#42 := (not #41)
-#48 := (and #12 #42)
-#53 := (not #48)
-#59 := (or #14 #53)
-#64 := (not #59)
-#10 := (< 0::int f3)
-#13 := (and #10 #12)
-#15 := (implies #13 #14)
-#16 := (not #15)
-#67 := (iff #16 #64)
-#34 := (not #13)
-#35 := (or #34 #14)
-#38 := (not #35)
-#65 := (iff #38 #64)
-#62 := (iff #35 #59)
-#56 := (or #53 #14)
-#60 := (iff #56 #59)
-#61 := [rewrite]: #60
-#57 := (iff #35 #56)
-#54 := (iff #34 #53)
-#51 := (iff #13 #48)
-#45 := (and #42 #12)
-#49 := (iff #45 #48)
-#50 := [rewrite]: #49
-#46 := (iff #13 #45)
-#43 := (iff #10 #42)
-#44 := [rewrite]: #43
-#47 := [monotonicity #44]: #46
-#52 := [trans #47 #50]: #51
-#55 := [monotonicity #52]: #54
-#58 := [monotonicity #55]: #57
-#63 := [trans #58 #61]: #62
-#66 := [monotonicity #63]: #65
-#39 := (iff #16 #38)
-#36 := (iff #15 #35)
-#37 := [rewrite]: #36
-#40 := [monotonicity #37]: #39
-#68 := [trans #40 #66]: #67
-#33 := [asserted]: #16
-#69 := [mp #33 #68]: #64
-#72 := [not-or-elim #69]: #48
-#73 := [and-elim #72]: #12
-#74 := [and-elim #72]: #42
-#85 := [th-lemma #74 #73]: #14
-#70 := (not #14)
-#71 := [not-or-elim #69]: #70
-[unit-resolution #71 #85]: false
-unsat
-66ca5933e35ee3faa0336268f65c331335330f57 66 0
+0a0200d3ff0127396d33719b1042db644955b4a6 66 0
 #2 := false
 decl f3 :: int
 #9 := f3
@@ -45127,26 +45070,7 @@
 #86 := [trans #83 #85]: #33
 [unit-resolution #69 #86]: false
 unsat
-6a196ac012aba8c7b41b1d8437b14fc3fb23e5a4 18 0
-#2 := false
-decl f3 :: int
-#8 := f3
-#9 := (<= f3 f3)
-#10 := (not #9)
-#37 := (iff #10 false)
-#1 := true
-#32 := (not true)
-#35 := (iff #32 false)
-#36 := [rewrite]: #35
-#33 := (iff #10 #32)
-#30 := (iff #9 true)
-#31 := [rewrite]: #30
-#34 := [monotonicity #31]: #33
-#38 := [trans #34 #36]: #37
-#27 := [asserted]: #10
-[mp #27 #38]: false
-unsat
-a176c257f1c89ffea971e08639242e005fb1222f 228 0
+8577a1a174a114007fec8ab3e02f9bb87a08d3a4 228 0
 #2 := false
 #9 := 0::int
 decl f4 :: int
@@ -45375,7 +45299,83 @@
 #250 := [unit-resolution #196 #249]: #190
 [th-lemma #236 #250 #131 #234 #248 #238]: false
 unsat
-4afe860c901fd901bf34dc83b799fd986f9e4155 51 0
+5113b523f1372e7b618c36a10fb907e6373d5abd 56 0
+#2 := false
+#11 := 1::int
+decl f3 :: int
+#9 := f3
+#14 := (= f3 1::int)
+#12 := (<= f3 1::int)
+#8 := 0::int
+#41 := (<= f3 0::int)
+#42 := (not #41)
+#48 := (and #12 #42)
+#53 := (not #48)
+#59 := (or #14 #53)
+#64 := (not #59)
+#10 := (< 0::int f3)
+#13 := (and #10 #12)
+#15 := (implies #13 #14)
+#16 := (not #15)
+#67 := (iff #16 #64)
+#34 := (not #13)
+#35 := (or #34 #14)
+#38 := (not #35)
+#65 := (iff #38 #64)
+#62 := (iff #35 #59)
+#56 := (or #53 #14)
+#60 := (iff #56 #59)
+#61 := [rewrite]: #60
+#57 := (iff #35 #56)
+#54 := (iff #34 #53)
+#51 := (iff #13 #48)
+#45 := (and #42 #12)
+#49 := (iff #45 #48)
+#50 := [rewrite]: #49
+#46 := (iff #13 #45)
+#43 := (iff #10 #42)
+#44 := [rewrite]: #43
+#47 := [monotonicity #44]: #46
+#52 := [trans #47 #50]: #51
+#55 := [monotonicity #52]: #54
+#58 := [monotonicity #55]: #57
+#63 := [trans #58 #61]: #62
+#66 := [monotonicity #63]: #65
+#39 := (iff #16 #38)
+#36 := (iff #15 #35)
+#37 := [rewrite]: #36
+#40 := [monotonicity #37]: #39
+#68 := [trans #40 #66]: #67
+#33 := [asserted]: #16
+#69 := [mp #33 #68]: #64
+#72 := [not-or-elim #69]: #48
+#73 := [and-elim #72]: #12
+#74 := [and-elim #72]: #42
+#85 := [th-lemma #74 #73]: #14
+#70 := (not #14)
+#71 := [not-or-elim #69]: #70
+[unit-resolution #71 #85]: false
+unsat
+62b700db02f2de2fa17813b51c0e2aba7a4c9eab 18 0
+#2 := false
+decl f3 :: int
+#8 := f3
+#9 := (<= f3 f3)
+#10 := (not #9)
+#37 := (iff #10 false)
+#1 := true
+#32 := (not true)
+#35 := (iff #32 false)
+#36 := [rewrite]: #35
+#33 := (iff #10 #32)
+#30 := (iff #9 true)
+#31 := [rewrite]: #30
+#34 := [monotonicity #31]: #33
+#38 := [trans #34 #36]: #37
+#27 := [asserted]: #10
+[mp #27 #38]: false
+unsat
+096109feda0c7355b238e40d53b92530b4dac963 51 0
 #2 := false
 decl f4 :: int
 #9 := f4
@@ -45427,7 +45427,7 @@
 #33 := [asserted]: #16
 [mp #33 #68]: false
 unsat
-5551b99ea77d386f007b1b1979a0b6b379c3a347 56 0
+b5e5bf38e2f1c07ae123d010d3ca139589460e87 56 0
 #2 := false
 decl f4 :: int
 #9 := f4
@@ -45484,7 +45484,7 @@
 #33 := [asserted]: #16
 [mp #33 #73]: false
 unsat
-76fdd03dce324fb45070b1e1983f0a282cda6fa6 52 0
+fed98b15794bca1381978ee51c537989f6976c21 52 0
 #2 := false
 #40 := 0::int
 decl f4 :: int
@@ -45537,7 +45537,7 @@
 #77 := [unit-resolution #76 #65]: #53
 [unit-resolution #77 #67]: false
 unsat
-550f7d68b0836924510ab12e5b3c4ed9f6c794bb 73 0
+87f174d87c949beb4788f98812dca55337bf0039 73 0
 #2 := false
 #58 := 0::int
 decl f4 :: int
@@ -45611,25 +45611,7 @@
 #78 := [unit-resolution #82 #74]: #83
 [unit-resolution #78 #92 #89]: false
 unsat
-0eeabd2aea1625cea2b9a9ade1eee621e6dfb534 17 0
-#2 := false
-#8 := 0::real
-#9 := (= 0::real 0::real)
-#10 := (not #9)
-#35 := (iff #10 false)
-#1 := true
-#30 := (not true)
-#33 := (iff #30 false)
-#34 := [rewrite]: #33
-#31 := (iff #10 #30)
-#28 := (iff #9 true)
-#29 := [rewrite]: #28
-#32 := [monotonicity #29]: #31
-#36 := [trans #32 #34]: #35
-#27 := [asserted]: #10
-[mp #27 #36]: false
-unsat
-65c77124096528f9cb7c1cb6b89625b62f5eeb2a 15 0
+e9fb6be58fab173c96da99cb14354ad048f64a9a 15 0
 #2 := false
 decl f3 :: int
 #8 := f3
@@ -45645,33 +45627,7 @@
 #28 := [asserted]: #11
 [mp #28 #34]: false
 unsat
-582ef11d89a67dd029d6b29272ca6688d8312bd7 25 0
-#2 := false
-#8 := 0::real
-#9 := (- 0::real)
-#10 := (= 0::real #9)
-#11 := (not #10)
-#43 := (iff #11 false)
-#1 := true
-#38 := (not true)
-#41 := (iff #38 false)
-#42 := [rewrite]: #41
-#39 := (iff #11 #38)
-#36 := (iff #10 true)
-#31 := (= 0::real 0::real)
-#34 := (iff #31 true)
-#35 := [rewrite]: #34
-#32 := (iff #10 #31)
-#29 := (= #9 0::real)
-#30 := [rewrite]: #29
-#33 := [monotonicity #30]: #32
-#37 := [trans #33 #35]: #36
-#40 := [monotonicity #37]: #39
-#44 := [trans #40 #42]: #43
-#28 := [asserted]: #11
-[mp #28 #44]: false
-unsat
-8aa9d7db6e905a29f4a4232a6a82f51c63e2641b 75 0
+2e519318d3bea148863de330ab0d886976088a08 75 0
 #2 := false
 #53 := 0::int
 decl f4 :: int
@@ -45747,25 +45703,7 @@
 #89 := [not-or-elim #88]: #54
 [th-lemma #89 #91 #92]: false
 unsat
-4de73c1caf8d03027271f9dfec62b23debf65d9b 17 0
-#2 := false
-#8 := 1::real
-#9 := (= 1::real 1::real)
-#10 := (not #9)
-#35 := (iff #10 false)
-#1 := true
-#30 := (not true)
-#33 := (iff #30 false)
-#34 := [rewrite]: #33
-#31 := (iff #10 #30)
-#28 := (iff #9 true)
-#29 := [rewrite]: #28
-#32 := [monotonicity #29]: #31
-#36 := [trans #32 #34]: #35
-#27 := [asserted]: #10
-[mp #27 #36]: false
-unsat
-625ca444862ba21a1fa0a52470751952d4f5acee 80 0
+d957e317464f75f14f0257c9a9e3944a4c7e56fa 80 0
 #2 := false
 #53 := 0::int
 decl f4 :: int
@@ -45846,61 +45784,7 @@
 #94 := [not-or-elim #93]: #54
 [th-lemma #94 #96 #97]: false
 unsat
-793c5962cbb9973917b8d8c66a2d2a3d94594803 34 0
-#2 := false
-#8 := 1::real
-#9 := (- 1::real)
-#10 := (= #9 1::real)
-#11 := (not #10)
-#12 := (not #11)
-#52 := (iff #12 false)
-#1 := true
-#47 := (not true)
-#50 := (iff #47 false)
-#51 := [rewrite]: #50
-#48 := (iff #12 #47)
-#45 := (iff #11 true)
-#40 := (not false)
-#43 := (iff #40 true)
-#44 := [rewrite]: #43
-#41 := (iff #11 #40)
-#38 := (iff #10 false)
-#30 := -1::real
-#33 := (= -1::real 1::real)
-#36 := (iff #33 false)
-#37 := [rewrite]: #36
-#34 := (iff #10 #33)
-#31 := (= #9 -1::real)
-#32 := [rewrite]: #31
-#35 := [monotonicity #32]: #34
-#39 := [trans #35 #37]: #38
-#42 := [monotonicity #39]: #41
-#46 := [trans #42 #44]: #45
-#49 := [monotonicity #46]: #48
-#53 := [trans #49 #51]: #52
-#29 := [asserted]: #12
-[mp #29 #53]: false
-unsat
-8f6bb26e23c49df219a9fc6920a8bbad56872cba 18 0
-#2 := false
-#9 := 1::real
-#8 := 0::real
-#10 := (< 0::real 1::real)
-#11 := (not #10)
-#38 := (iff #11 false)
-#1 := true
-#33 := (not true)
-#36 := (iff #33 false)
-#37 := [rewrite]: #36
-#34 := (iff #11 #33)
-#31 := (iff #10 true)
-#32 := [rewrite]: #31
-#35 := [monotonicity #32]: #34
-#39 := [trans #35 #37]: #38
-#28 := [asserted]: #11
-[mp #28 #39]: false
-unsat
-59582f385e59c3a49a302bb1b9701c92bb368fac 80 0
+1e6359b823e59d7a3bc20a06b7948d9799fc1ea2 80 0
 #2 := false
 #52 := 0::int
 decl f4 :: int
@@ -45981,26 +45865,7 @@
 #96 := [not-or-elim #93]: #95
 [th-lemma #96 #94 #97]: false
 unsat
-6edbad6a7b2935c8d856f03c54b56bf43891a380 18 0
-#2 := false
-#9 := 1::real
-#8 := 0::real
-#10 := (<= 0::real 1::real)
-#11 := (not #10)
-#38 := (iff #11 false)
-#1 := true
-#33 := (not true)
-#36 := (iff #33 false)
-#37 := [rewrite]: #36
-#34 := (iff #11 #33)
-#31 := (iff #10 true)
-#32 := [rewrite]: #31
-#35 := [monotonicity #32]: #34
-#39 := [trans #35 #37]: #38
-#28 := [asserted]: #11
-[mp #28 #39]: false
-unsat
-6dfe89c45e68ba796109229b1c54d23603c64ded 85 0
+70f0bd2ca61ea7f7f79a865b60edecada1e579bc 85 0
 #2 := false
 #52 := 0::int
 decl f4 :: int
@@ -46086,48 +45951,7 @@
 #101 := [not-or-elim #99]: #66
 [th-lemma #101 #100 #102]: false
 unsat
-a64bea89744a3af0ed560a5c871536de3fcb2ecf 40 0
-#2 := false
-#12 := 567::real
-#10 := 345::real
-#8 := 123::real
-#9 := (- 123::real)
-#11 := (+ #9 345::real)
-#13 := (< #11 567::real)
-#14 := (not #13)
-#58 := (iff #14 false)
-#38 := 222::real
-#43 := (< 222::real 567::real)
-#46 := (not #43)
-#56 := (iff #46 false)
-#1 := true
-#51 := (not true)
-#54 := (iff #51 false)
-#55 := [rewrite]: #54
-#52 := (iff #46 #51)
-#49 := (iff #43 true)
-#50 := [rewrite]: #49
-#53 := [monotonicity #50]: #52
-#57 := [trans #53 #55]: #56
-#47 := (iff #14 #46)
-#44 := (iff #13 #43)
-#41 := (= #11 222::real)
-#32 := -123::real
-#35 := (+ -123::real 345::real)
-#39 := (= #35 222::real)
-#40 := [rewrite]: #39
-#36 := (= #11 #35)
-#33 := (= #9 -123::real)
-#34 := [rewrite]: #33
-#37 := [monotonicity #34]: #36
-#42 := [trans #37 #40]: #41
-#45 := [monotonicity #42]: #44
-#48 := [monotonicity #45]: #47
-#59 := [trans #48 #57]: #58
-#31 := [asserted]: #14
-[mp #31 #59]: false
-unsat
-650b9ceb8c2cf801e6ceee5375af886f013abe2c 69 0
+d4b9d7236f58deec9d8b880ed595e162ac78698f 69 0
 #2 := false
 #44 := 0::int
 decl f5 :: int
@@ -46197,7 +46021,237 @@
 #85 := [and-elim #83]: #53
 [th-lemma #85 #84 #86]: false
 unsat
-a79ee55daec933b360adb88ed0db37156e2f7821 18 0
+93f88e9d9942aeac0995634bc80288f6b3124d6e 17 0
+#2 := false
+#8 := 0::real
+#9 := (= 0::real 0::real)
+#10 := (not #9)
+#35 := (iff #10 false)
+#1 := true
+#30 := (not true)
+#33 := (iff #30 false)
+#34 := [rewrite]: #33
+#31 := (iff #10 #30)
+#28 := (iff #9 true)
+#29 := [rewrite]: #28
+#32 := [monotonicity #29]: #31
+#36 := [trans #32 #34]: #35
+#27 := [asserted]: #10
+[mp #27 #36]: false
+unsat
+c76a2eba918417f6f2e01b2b723c524c06e861cf 25 0
+#2 := false
+#8 := 0::real
+#9 := (- 0::real)
+#10 := (= 0::real #9)
+#11 := (not #10)
+#43 := (iff #11 false)
+#1 := true
+#38 := (not true)
+#41 := (iff #38 false)
+#42 := [rewrite]: #41
+#39 := (iff #11 #38)
+#36 := (iff #10 true)
+#31 := (= 0::real 0::real)
+#34 := (iff #31 true)
+#35 := [rewrite]: #34
+#32 := (iff #10 #31)
+#29 := (= #9 0::real)
+#30 := [rewrite]: #29
+#33 := [monotonicity #30]: #32
+#37 := [trans #33 #35]: #36
+#40 := [monotonicity #37]: #39
+#44 := [trans #40 #42]: #43
+#28 := [asserted]: #11
+[mp #28 #44]: false
+unsat
+124d21d085906b9b1a287c6fb023579c3d29d71e 17 0
+#2 := false
+#8 := 1::real
+#9 := (= 1::real 1::real)
+#10 := (not #9)
+#35 := (iff #10 false)
+#1 := true
+#30 := (not true)
+#33 := (iff #30 false)
+#34 := [rewrite]: #33
+#31 := (iff #10 #30)
+#28 := (iff #9 true)
+#29 := [rewrite]: #28
+#32 := [monotonicity #29]: #31
+#36 := [trans #32 #34]: #35
+#27 := [asserted]: #10
+[mp #27 #36]: false
+unsat
+5560886df3c18f9a0c150a7d43e759132adbc67a 34 0
+#2 := false
+#8 := 1::real
+#9 := (- 1::real)
+#10 := (= #9 1::real)
+#11 := (not #10)
+#12 := (not #11)
+#52 := (iff #12 false)
+#1 := true
+#47 := (not true)
+#50 := (iff #47 false)
+#51 := [rewrite]: #50
+#48 := (iff #12 #47)
+#45 := (iff #11 true)
+#40 := (not false)
+#43 := (iff #40 true)
+#44 := [rewrite]: #43
+#41 := (iff #11 #40)
+#38 := (iff #10 false)
+#30 := -1::real
+#33 := (= -1::real 1::real)
+#36 := (iff #33 false)
+#37 := [rewrite]: #36
+#34 := (iff #10 #33)
+#31 := (= #9 -1::real)
+#32 := [rewrite]: #31
+#35 := [monotonicity #32]: #34
+#39 := [trans #35 #37]: #38
+#42 := [monotonicity #39]: #41
+#46 := [trans #42 #44]: #45
+#49 := [monotonicity #46]: #48
+#53 := [trans #49 #51]: #52
+#29 := [asserted]: #12
+[mp #29 #53]: false
+unsat
+ea1032005c0c668000f0638ca6458e10715452d1 18 0
+#2 := false
+#9 := 1::real
+#8 := 0::real
+#10 := (< 0::real 1::real)
+#11 := (not #10)
+#38 := (iff #11 false)
+#1 := true
+#33 := (not true)
+#36 := (iff #33 false)
+#37 := [rewrite]: #36
+#34 := (iff #11 #33)
+#31 := (iff #10 true)
+#32 := [rewrite]: #31
+#35 := [monotonicity #32]: #34
+#39 := [trans #35 #37]: #38
+#28 := [asserted]: #11
+[mp #28 #39]: false
+unsat
+9bf86956cfc4183079f2d625e7fb67e79d8e3a6f 18 0
+#2 := false
+#9 := 1::real
+#8 := 0::real
+#10 := (<= 0::real 1::real)
+#11 := (not #10)
+#38 := (iff #11 false)
+#1 := true
+#33 := (not true)
+#36 := (iff #33 false)
+#37 := [rewrite]: #36
+#34 := (iff #11 #33)
+#31 := (iff #10 true)
+#32 := [rewrite]: #31
+#35 := [monotonicity #32]: #34
+#39 := [trans #35 #37]: #38
+#28 := [asserted]: #11
+[mp #28 #39]: false
+unsat
+462b078573a7260cabbe050e6e8a010e81307468 26 0
+#2 := false
+decl f3 :: real
+#8 := f3
+#9 := 0::real
+#10 := (+ f3 0::real)
+#11 := (= #10 f3)
+#12 := (not #11)
+#43 := (iff #12 false)
+#1 := true
+#38 := (not true)
+#41 := (iff #38 false)
+#42 := [rewrite]: #41
+#39 := (iff #12 #38)
+#36 := (iff #11 true)
+#31 := (= f3 f3)
+#34 := (iff #31 true)
+#35 := [rewrite]: #34
+#32 := (iff #11 #31)
+#30 := [rewrite]: #11
+#33 := [monotonicity #30]: #32
+#37 := [trans #33 #35]: #36
+#40 := [monotonicity #37]: #39
+#44 := [trans #40 #42]: #43
+#29 := [asserted]: #12
+[mp #29 #44]: false
+unsat
+fbe5b7285614f32e77c7dc8b02bdfaab1ce33767 40 0
+#2 := false
+#12 := 567::real
+#10 := 345::real
+#8 := 123::real
+#9 := (- 123::real)
+#11 := (+ #9 345::real)
+#13 := (< #11 567::real)
+#14 := (not #13)
+#58 := (iff #14 false)
+#38 := 222::real
+#43 := (< 222::real 567::real)
+#46 := (not #43)
+#56 := (iff #46 false)
+#1 := true
+#51 := (not true)
+#54 := (iff #51 false)
+#55 := [rewrite]: #54
+#52 := (iff #46 #51)
+#49 := (iff #43 true)
+#50 := [rewrite]: #49
+#53 := [monotonicity #50]: #52
+#57 := [trans #53 #55]: #56
+#47 := (iff #14 #46)
+#44 := (iff #13 #43)
+#41 := (= #11 222::real)
+#32 := -123::real
+#35 := (+ -123::real 345::real)
+#39 := (= #35 222::real)
+#40 := [rewrite]: #39
+#36 := (= #11 #35)
+#33 := (= #9 -123::real)
+#34 := [rewrite]: #33
+#37 := [monotonicity #34]: #36
+#42 := [trans #37 #40]: #41
+#45 := [monotonicity #42]: #44
+#48 := [monotonicity #45]: #47
+#59 := [trans #48 #57]: #58
+#31 := [asserted]: #14
+[mp #31 #59]: false
+unsat
+440f4e3d826b24104b71d716ed035b8fcf2e496d 26 0
+#2 := false
+decl f3 :: real
+#9 := f3
+#8 := 0::real
+#10 := (+ 0::real f3)
+#11 := (= #10 f3)
+#12 := (not #11)
+#43 := (iff #12 false)
+#1 := true
+#38 := (not true)
+#41 := (iff #38 false)
+#42 := [rewrite]: #41
+#39 := (iff #12 #38)
+#36 := (iff #11 true)
+#31 := (= f3 f3)
+#34 := (iff #31 true)
+#35 := [rewrite]: #34
+#32 := (iff #11 #31)
+#30 := [rewrite]: #11
+#33 := [monotonicity #30]: #32
+#37 := [trans #33 #35]: #36
+#40 := [monotonicity #37]: #39
+#44 := [trans #40 #42]: #43
+#29 := [asserted]: #12
+[mp #29 #44]: false
+unsat
+0f930aea7df79d93cedef0ce68be2ff1d1da57e3 18 0
 #2 := false
 #9 := 2345678901::real
 #8 := 123456789::real
@@ -46216,7 +46270,37 @@
 #28 := [asserted]: #11
 [mp #28 #39]: false
 unsat
-4b51b4eed1dc4e4e6099fbf906b70822230d5e3f 30 0
+20e0c3ffbf68f93c4311b4bf54c2ea3efe010e7a 29 0
+#2 := false
+decl f3 :: real
+#8 := f3
+decl f4 :: real
+#9 := f4
+#11 := (+ f4 f3)
+#10 := (+ f3 f4)
+#12 := (= #10 #11)
+#13 := (not #12)
+#45 := (iff #13 false)
+#1 := true
+#40 := (not true)
+#43 := (iff #40 false)
+#44 := [rewrite]: #43
+#41 := (iff #13 #40)
+#38 := (iff #12 true)
+#33 := (= #10 #10)
+#36 := (iff #33 true)
+#37 := [rewrite]: #36
+#34 := (iff #12 #33)
+#31 := (= #11 #10)
+#32 := [rewrite]: #31
+#35 := [monotonicity #32]: #34
+#39 := [trans #35 #37]: #38
+#42 := [monotonicity #39]: #41
+#46 := [trans #42 #44]: #45
+#30 := [asserted]: #13
+[mp #30 #46]: false
+unsat
+39b152c2721f346c536c8037f243dbf8a4709b1b 30 0
 #2 := false
 #10 := 2345678901::real
 #8 := 123456789::real
@@ -46247,12 +46331,92 @@
 #29 := [asserted]: #12
 [mp #29 #49]: false
 unsat
-209cf5d4457acae6abf17187fd6e89c259187362 26 0
+2fbcb3e0a00b30b4d1cfcecd9304791b2a48d7f4 33 0
+#2 := false
+decl f5 :: real
+#10 := f5
+decl f4 :: real
+#9 := f4
+decl f3 :: real
+#8 := f3
+#13 := (+ f3 f4)
+#14 := (+ #13 f5)
+#11 := (+ f4 f5)
+#12 := (+ f3 #11)
+#15 := (= #12 #14)
+#16 := (not #15)
+#48 := (iff #16 false)
+#1 := true
+#43 := (not true)
+#46 := (iff #43 false)
+#47 := [rewrite]: #46
+#44 := (iff #16 #43)
+#41 := (iff #15 true)
+#36 := (= #12 #12)
+#39 := (iff #36 true)
+#40 := [rewrite]: #39
+#37 := (iff #15 #36)
+#34 := (= #14 #12)
+#35 := [rewrite]: #34
+#38 := [monotonicity #35]: #37
+#42 := [trans #38 #40]: #41
+#45 := [monotonicity #42]: #44
+#49 := [trans #45 #47]: #48
+#33 := [asserted]: #16
+[mp #33 #49]: false
+unsat
+2ec6b499b5be496e928bd834c349a1c431eea001 45 0
+#2 := false
+decl f4 :: real
+#9 := f4
+#13 := (- f4)
+decl f3 :: real
+#8 := f3
+#14 := (= f3 #13)
+#11 := 0::real
+#10 := (+ f3 f4)
+#12 := (= #10 0::real)
+#15 := (iff #12 #14)
+#16 := (not #15)
+#62 := (iff #16 false)
+#47 := (not #12)
+#34 := -1::real
+#35 := (* -1::real f4)
+#38 := (= f3 #35)
+#48 := (iff #38 #47)
+#60 := (iff #48 false)
+#55 := (iff #12 #47)
+#58 := (iff #55 false)
+#59 := [rewrite]: #58
+#56 := (iff #48 #55)
+#53 := (iff #38 #12)
+#54 := [rewrite]: #53
+#57 := [monotonicity #54]: #56
+#61 := [trans #57 #59]: #60
+#51 := (iff #16 #48)
+#41 := (iff #12 #38)
+#44 := (not #41)
+#49 := (iff #44 #48)
+#50 := [rewrite]: #49
+#45 := (iff #16 #44)
+#42 := (iff #15 #41)
+#39 := (iff #14 #38)
+#36 := (= #13 #35)
+#37 := [rewrite]: #36
+#40 := [monotonicity #37]: #39
+#43 := [monotonicity #40]: #42
+#46 := [monotonicity #43]: #45
+#52 := [trans #46 #50]: #51
+#63 := [trans #52 #61]: #62
+#33 := [asserted]: #16
+[mp #33 #63]: false
+unsat
+fc436284003e8c697b8dbb37e8945314d2bc0428 26 0
 #2 := false
 decl f3 :: real
 #8 := f3
 #9 := 0::real
-#10 := (+ f3 0::real)
+#10 := (- f3 0::real)
 #11 := (= #10 f3)
 #12 := (not #11)
 #43 := (iff #12 false)
@@ -46274,34 +46438,7 @@
 #29 := [asserted]: #12
 [mp #29 #44]: false
 unsat
-97dafa0bba507529233c05cc33dd1519b4e28e4b 26 0
-#2 := false
-decl f3 :: real
-#9 := f3
-#8 := 0::real
-#10 := (+ 0::real f3)
-#11 := (= #10 f3)
-#12 := (not #11)
-#43 := (iff #12 false)
-#1 := true
-#38 := (not true)
-#41 := (iff #38 false)
-#42 := [rewrite]: #41
-#39 := (iff #12 #38)
-#36 := (iff #11 true)
-#31 := (= f3 f3)
-#34 := (iff #31 true)
-#35 := [rewrite]: #34
-#32 := (iff #11 #31)
-#30 := [rewrite]: #11
-#33 := [monotonicity #30]: #32
-#37 := [trans #33 #35]: #36
-#40 := [monotonicity #37]: #39
-#44 := [trans #40 #42]: #43
-#29 := [asserted]: #12
-[mp #29 #44]: false
-unsat
-4a497c9573e0d4cf02c29e65ea385ac694a5d2a9 58 0
+d3d5a890beab517bd089563bbca4f1f153a58428 58 0
 #2 := false
 decl f3 :: real
 #8 := f3
@@ -46360,37 +46497,40 @@
 #31 := [asserted]: #14
 [mp #31 #77]: false
 unsat
-393f5dbb0db04527f22218d40363df111099baf5 29 0
+e32be0c9d1b02319d3e7244ea2d0e549b6430915 32 0
 #2 := false
 decl f3 :: real
-#8 := f3
-decl f4 :: real
-#9 := f4
-#11 := (+ f4 f3)
-#10 := (+ f3 f4)
+#9 := f3
+#11 := (- f3)
+#8 := 0::real
+#10 := (- 0::real f3)
 #12 := (= #10 #11)
 #13 := (not #12)
-#45 := (iff #13 false)
-#1 := true
-#40 := (not true)
-#43 := (iff #40 false)
-#44 := [rewrite]: #43
-#41 := (iff #13 #40)
-#38 := (iff #12 true)
-#33 := (= #10 #10)
-#36 := (iff #33 true)
-#37 := [rewrite]: #36
-#34 := (iff #12 #33)
-#31 := (= #11 #10)
-#32 := [rewrite]: #31
-#35 := [monotonicity #32]: #34
-#39 := [trans #35 #37]: #38
-#42 := [monotonicity #39]: #41
-#46 := [trans #42 #44]: #45
+#49 := (iff #13 false)
+#1 := true
+#44 := (not true)
+#47 := (iff #44 false)
+#48 := [rewrite]: #47
+#45 := (iff #13 #44)
+#42 := (iff #12 true)
+#31 := -1::real
+#32 := (* -1::real f3)
+#37 := (= #32 #32)
+#40 := (iff #37 true)
+#41 := [rewrite]: #40
+#38 := (iff #12 #37)
+#35 := (= #11 #32)
+#36 := [rewrite]: #35
+#33 := (= #10 #32)
+#34 := [rewrite]: #33
+#39 := [monotonicity #34 #36]: #38
+#43 := [trans #39 #41]: #42
+#46 := [monotonicity #43]: #45
+#50 := [trans #46 #48]: #49
 #30 := [asserted]: #13
-[mp #30 #46]: false
-unsat
-5310d952762e8bd0d9db1c0127d9100532f42cf4 61 0
+[mp #30 #50]: false
+unsat
+eb2eb6c8c377b3314725038ad15c0d85d1554cd5 61 0
 #2 := false
 #8 := 0::real
 decl f3 :: real
@@ -46452,209 +46592,7 @@
 #31 := [asserted]: #14
 [mp #31 #79]: false
 unsat
-08018537eda07e4214b99470b7aa75706e7cd28c 33 0
-#2 := false
-decl f5 :: real
-#10 := f5
-decl f4 :: real
-#9 := f4
-decl f3 :: real
-#8 := f3
-#13 := (+ f3 f4)
-#14 := (+ #13 f5)
-#11 := (+ f4 f5)
-#12 := (+ f3 #11)
-#15 := (= #12 #14)
-#16 := (not #15)
-#48 := (iff #16 false)
-#1 := true
-#43 := (not true)
-#46 := (iff #43 false)
-#47 := [rewrite]: #46
-#44 := (iff #16 #43)
-#41 := (iff #15 true)
-#36 := (= #12 #12)
-#39 := (iff #36 true)
-#40 := [rewrite]: #39
-#37 := (iff #15 #36)
-#34 := (= #14 #12)
-#35 := [rewrite]: #34
-#38 := [monotonicity #35]: #37
-#42 := [trans #38 #40]: #41
-#45 := [monotonicity #42]: #44
-#49 := [trans #45 #47]: #48
-#33 := [asserted]: #16
-[mp #33 #49]: false
-unsat
-aed50da01a066fa4f6c8e7af4a461d101bc09de0 61 0
-#2 := false
-decl f3 :: real
-#8 := f3
-#11 := (- f3)
-#9 := 0::real
-#12 := (< 0::real #11)
-#10 := (< f3 0::real)
-#13 := (implies #10 #12)
-#14 := (not #13)
-#78 := (iff #14 false)
-#32 := -1::real
-#33 := (* -1::real f3)
-#36 := (< 0::real #33)
-#42 := (not #10)
-#43 := (or #42 #36)
-#48 := (not #43)
-#76 := (iff #48 false)
-#1 := true
-#71 := (not true)
-#74 := (iff #71 false)
-#75 := [rewrite]: #74
-#72 := (iff #48 #71)
-#69 := (iff #43 true)
-#51 := (>= f3 0::real)
-#52 := (not #51)
-#64 := (or #51 #52)
-#67 := (iff #64 true)
-#68 := [rewrite]: #67
-#65 := (iff #43 #64)
-#62 := (iff #36 #52)
-#63 := [rewrite]: #62
-#60 := (iff #42 #51)
-#55 := (not #52)
-#58 := (iff #55 #51)
-#59 := [rewrite]: #58
-#56 := (iff #42 #55)
-#53 := (iff #10 #52)
-#54 := [rewrite]: #53
-#57 := [monotonicity #54]: #56
-#61 := [trans #57 #59]: #60
-#66 := [monotonicity #61 #63]: #65
-#70 := [trans #66 #68]: #69
-#73 := [monotonicity #70]: #72
-#77 := [trans #73 #75]: #76
-#49 := (iff #14 #48)
-#46 := (iff #13 #43)
-#39 := (implies #10 #36)
-#44 := (iff #39 #43)
-#45 := [rewrite]: #44
-#40 := (iff #13 #39)
-#37 := (iff #12 #36)
-#34 := (= #11 #33)
-#35 := [rewrite]: #34
-#38 := [monotonicity #35]: #37
-#41 := [monotonicity #38]: #40
-#47 := [trans #41 #45]: #46
-#50 := [monotonicity #47]: #49
-#79 := [trans #50 #77]: #78
-#31 := [asserted]: #14
-[mp #31 #79]: false
-unsat
-afbfb539cd215cee99e6f9076de9621f41db722f 45 0
-#2 := false
-decl f4 :: real
-#9 := f4
-#13 := (- f4)
-decl f3 :: real
-#8 := f3
-#14 := (= f3 #13)
-#11 := 0::real
-#10 := (+ f3 f4)
-#12 := (= #10 0::real)
-#15 := (iff #12 #14)
-#16 := (not #15)
-#62 := (iff #16 false)
-#47 := (not #12)
-#34 := -1::real
-#35 := (* -1::real f4)
-#38 := (= f3 #35)
-#48 := (iff #38 #47)
-#60 := (iff #48 false)
-#55 := (iff #12 #47)
-#58 := (iff #55 false)
-#59 := [rewrite]: #58
-#56 := (iff #48 #55)
-#53 := (iff #38 #12)
-#54 := [rewrite]: #53
-#57 := [monotonicity #54]: #56
-#61 := [trans #57 #59]: #60
-#51 := (iff #16 #48)
-#41 := (iff #12 #38)
-#44 := (not #41)
-#49 := (iff #44 #48)
-#50 := [rewrite]: #49
-#45 := (iff #16 #44)
-#42 := (iff #15 #41)
-#39 := (iff #14 #38)
-#36 := (= #13 #35)
-#37 := [rewrite]: #36
-#40 := [monotonicity #37]: #39
-#43 := [monotonicity #40]: #42
-#46 := [monotonicity #43]: #45
-#52 := [trans #46 #50]: #51
-#63 := [trans #52 #61]: #62
-#33 := [asserted]: #16
-[mp #33 #63]: false
-unsat
-4c33a6158d9a09229cc4bfd8f383004f3cebc48a 26 0
-#2 := false
-decl f3 :: real
-#8 := f3
-#9 := 0::real
-#10 := (- f3 0::real)
-#11 := (= #10 f3)
-#12 := (not #11)
-#43 := (iff #12 false)
-#1 := true
-#38 := (not true)
-#41 := (iff #38 false)
-#42 := [rewrite]: #41
-#39 := (iff #12 #38)
-#36 := (iff #11 true)
-#31 := (= f3 f3)
-#34 := (iff #31 true)
-#35 := [rewrite]: #34
-#32 := (iff #11 #31)
-#30 := [rewrite]: #11
-#33 := [monotonicity #30]: #32
-#37 := [trans #33 #35]: #36
-#40 := [monotonicity #37]: #39
-#44 := [trans #40 #42]: #43
-#29 := [asserted]: #12
-[mp #29 #44]: false
-unsat
-5fa448e93a50f684d9003c71f7eb6c60b8908f77 32 0
-#2 := false
-decl f3 :: real
-#9 := f3
-#11 := (- f3)
-#8 := 0::real
-#10 := (- 0::real f3)
-#12 := (= #10 #11)
-#13 := (not #12)
-#49 := (iff #13 false)
-#1 := true
-#44 := (not true)
-#47 := (iff #44 false)
-#48 := [rewrite]: #47
-#45 := (iff #13 #44)
-#42 := (iff #12 true)
-#31 := -1::real
-#32 := (* -1::real f3)
-#37 := (= #32 #32)
-#40 := (iff #37 true)
-#41 := [rewrite]: #40
-#38 := (iff #12 #37)
-#35 := (= #11 #32)
-#36 := [rewrite]: #35
-#33 := (= #10 #32)
-#34 := [rewrite]: #33
-#39 := [monotonicity #34 #36]: #38
-#43 := [trans #39 #41]: #42
-#46 := [monotonicity #43]: #45
-#50 := [trans #46 #48]: #49
-#30 := [asserted]: #13
-[mp #30 #50]: false
-unsat
-abc85cf86b0b1c8a34cd74d5da49e570c77ddea0 64 0
+83589b9e6143db146b7355cf95d479fdd7008de6 64 0
 #2 := false
 #12 := 0::real
 decl f4 :: real
@@ -46719,7 +46657,69 @@
 #32 := [asserted]: #15
 [mp #32 #81]: false
 unsat
-8084abd03f885814b6c145eb3fdc41f5a2cc85f8 44 0
+20175dd1cbc4733e0e0a6808b337d3ef714bc8ea 61 0
+#2 := false
+decl f3 :: real
+#8 := f3
+#11 := (- f3)
+#9 := 0::real
+#12 := (< 0::real #11)
+#10 := (< f3 0::real)
+#13 := (implies #10 #12)
+#14 := (not #13)
+#78 := (iff #14 false)
+#32 := -1::real
+#33 := (* -1::real f3)
+#36 := (< 0::real #33)
+#42 := (not #10)
+#43 := (or #42 #36)
+#48 := (not #43)
+#76 := (iff #48 false)
+#1 := true
+#71 := (not true)
+#74 := (iff #71 false)
+#75 := [rewrite]: #74
+#72 := (iff #48 #71)
+#69 := (iff #43 true)
+#51 := (>= f3 0::real)
+#52 := (not #51)
+#64 := (or #51 #52)
+#67 := (iff #64 true)
+#68 := [rewrite]: #67
+#65 := (iff #43 #64)
+#62 := (iff #36 #52)
+#63 := [rewrite]: #62
+#60 := (iff #42 #51)
+#55 := (not #52)
+#58 := (iff #55 #51)
+#59 := [rewrite]: #58
+#56 := (iff #42 #55)
+#53 := (iff #10 #52)
+#54 := [rewrite]: #53
+#57 := [monotonicity #54]: #56
+#61 := [trans #57 #59]: #60
+#66 := [monotonicity #61 #63]: #65
+#70 := [trans #66 #68]: #69
+#73 := [monotonicity #70]: #72
+#77 := [trans #73 #75]: #76
+#49 := (iff #14 #48)
+#46 := (iff #13 #43)
+#39 := (implies #10 #36)
+#44 := (iff #39 #43)
+#45 := [rewrite]: #44
+#40 := (iff #13 #39)
+#37 := (iff #12 #36)
+#34 := (= #11 #33)
+#35 := [rewrite]: #34
+#38 := [monotonicity #35]: #37
+#41 := [monotonicity #38]: #40
+#47 := [trans #41 #45]: #46
+#50 := [monotonicity #47]: #49
+#79 := [trans #50 #77]: #78
+#31 := [asserted]: #14
+[mp #31 #79]: false
+unsat
+0edbb7a2c42cbb0fdbf200f800919445d8fe0fcd 44 0
 #2 := false
 decl f3 :: real
 #8 := f3
@@ -46764,7 +46764,7 @@
 #31 := [asserted]: #14
 [mp #31 #61]: false
 unsat
-9afe5717b3e2c9027579ba3e8d9d66db44c6cbda 42 0
+07f4f6c399af663ebc560d31da386f4b6f8eceaa 42 0
 #2 := false
 decl f3 :: real
 #8 := f3
@@ -46807,7 +46807,7 @@
 #31 := [asserted]: #14
 [mp #31 #59]: false
 unsat
-a1710b56b11072c592931adbf944a5bd3bc6efc2 48 0
+11d02f55135438b9126f773087ae5fbc1bfb4b1f 48 0
 #2 := false
 decl f5 :: real
 #11 := f5
@@ -46856,7 +46856,7 @@
 #33 := [asserted]: #16
 [mp #33 #64]: false
 unsat
-4611c2bccf9693379d8f36635022f4216eaaa919 30 0
+43b7b87cca59f261804e2de323813ff74305eab9 30 0
 #2 := false
 #8 := 1::real
 #9 := 2::real
@@ -46887,7 +46887,7 @@
 #29 := [asserted]: #12
 [mp #29 #49]: false
 unsat
-300cf7e266e08d39c05d69e60b19d0ac09a08a2e 27 0
+53cfe5e87c16fffbe2f16f255256cca3098e68ab 27 0
 #2 := false
 #9 := 3::real
 #8 := 1::real
@@ -46915,7 +46915,44 @@
 #29 := [asserted]: #12
 [mp #29 #46]: false
 unsat
-b59d35169428d1cd490a83e17435ecfc93225870 48 0
+a0dc8948916e6295727989d5921bca6fbb1b7702 36 0
+#2 := false
+decl f3 :: real
+#9 := f3
+#8 := 3::real
+#10 := (/ f3 3::real)
+#11 := (* 3::real #10)
+#12 := (= #11 f3)
+#13 := (not #12)
+#53 := (iff #13 false)
+#1 := true
+#48 := (not true)
+#51 := (iff #48 false)
+#52 := [rewrite]: #51
+#49 := (iff #13 #48)
+#46 := (iff #12 true)
+#41 := (= f3 f3)
+#44 := (iff #41 true)
+#45 := [rewrite]: #44
+#42 := (iff #12 #41)
+#31 := 1/3::real
+#32 := (* 1/3::real f3)
+#35 := (* 3::real #32)
+#38 := (= #35 f3)
+#39 := [rewrite]: #38
+#36 := (= #11 #35)
+#33 := (= #10 #32)
+#34 := [rewrite]: #33
+#37 := [monotonicity #34]: #36
+#40 := [trans #37 #39]: #12
+#43 := [monotonicity #40]: #42
+#47 := [trans #43 #45]: #46
+#50 := [monotonicity #47]: #49
+#54 := [trans #50 #52]: #53
+#30 := [asserted]: #13
+[mp #30 #54]: false
+unsat
+26808346607eaf4342e6db7ed90e590a0bd9c647 48 0
 #2 := false
 #9 := 3::real
 #8 := 1::real
@@ -46964,7 +47001,43 @@
 #32 := [asserted]: #15
 [mp #32 #67]: false
 unsat
-1c222157f628411945e7e47ef57130c5ba4ad155 36 0
+09202bff4da2c74e9a8dbe43ef21689e4bdfaae9 35 0
+#2 := false
+decl f3 :: real
+#8 := f3
+#9 := 3::real
+#10 := (* f3 3::real)
+#11 := (/ #10 3::real)
+#12 := (= #11 f3)
+#13 := (not #12)
+#52 := (iff #13 false)
+#1 := true
+#47 := (not true)
+#50 := (iff #47 false)
+#51 := [rewrite]: #50
+#48 := (iff #13 #47)
+#45 := (iff #12 true)
+#40 := (= f3 f3)
+#43 := (iff #40 true)
+#44 := [rewrite]: #43
+#41 := (iff #12 #40)
+#31 := (* 3::real f3)
+#34 := (/ #31 3::real)
+#37 := (= #34 f3)
+#38 := [rewrite]: #37
+#35 := (= #11 #34)
+#32 := (= #10 #31)
+#33 := [rewrite]: #32
+#36 := [monotonicity #33]: #35
+#39 := [trans #36 #38]: #12
+#42 := [monotonicity #39]: #41
+#46 := [trans #42 #44]: #45
+#49 := [monotonicity #46]: #48
+#53 := [trans #49 #51]: #52
+#30 := [asserted]: #13
+[mp #30 #53]: false
+unsat
+b76505782dfbae0f8341048039ea3f79ecdab350 36 0
 #2 := false
 #10 := 3::real
 #8 := 1::real
@@ -47001,7 +47074,70 @@
 #30 := [asserted]: #13
 [mp #30 #55]: false
 unsat
-e4a7188c884c4cc69972b6b4c9f7bcbb1cd3ef93 43 0
+0c13c4469b276c16009a975c07b71cc3daa7abc5 62 0
+#2 := false
+#8 := 0::real
+decl f3 :: real
+#9 := f3
+#67 := 1/3::real
+#68 := (* 1/3::real f3)
+#69 := (<= #68 0::real)
+#65 := (not #69)
+#54 := (<= f3 0::real)
+#71 := (or #54 #65)
+#74 := (not #71)
+#13 := 3::real
+#11 := 2::real
+#12 := (* 2::real f3)
+#14 := (/ #12 3::real)
+#15 := (< #14 f3)
+#10 := (< 0::real f3)
+#16 := (implies #10 #15)
+#17 := (not #16)
+#77 := (iff #17 #74)
+#36 := 2/3::real
+#37 := (* 2/3::real f3)
+#39 := (< #37 f3)
+#45 := (not #10)
+#46 := (or #45 #39)
+#51 := (not #46)
+#75 := (iff #51 #74)
+#72 := (iff #46 #71)
+#66 := (iff #39 #65)
+#70 := [rewrite]: #66
+#63 := (iff #45 #54)
+#55 := (not #54)
+#58 := (not #55)
+#61 := (iff #58 #54)
+#62 := [rewrite]: #61
+#59 := (iff #45 #58)
+#56 := (iff #10 #55)
+#57 := [rewrite]: #56
+#60 := [monotonicity #57]: #59
+#64 := [trans #60 #62]: #63
+#73 := [monotonicity #64 #70]: #72
+#76 := [monotonicity #73]: #75
+#52 := (iff #17 #51)
+#49 := (iff #16 #46)
+#42 := (implies #10 #39)
+#47 := (iff #42 #46)
+#48 := [rewrite]: #47
+#43 := (iff #16 #42)
+#40 := (iff #15 #39)
+#35 := (= #14 #37)
+#38 := [rewrite]: #35
+#41 := [monotonicity #38]: #40
+#44 := [monotonicity #41]: #43
+#50 := [trans #44 #48]: #49
+#53 := [monotonicity #50]: #52
+#78 := [trans #53 #76]: #77
+#34 := [asserted]: #17
+#79 := [mp #34 #78]: #74
+#81 := [not-or-elim #79]: #69
+#80 := [not-or-elim #79]: #55
+[th-lemma #80 #81]: false
+unsat
+bc88a01de6db0490fffd7e188b191be86acfd954 43 0
 #2 := false
 #10 := 3::real
 #8 := 1::real
@@ -47045,7 +47181,70 @@
 #32 := [asserted]: #15
 [mp #32 #62]: false
 unsat
-b7bd87b08d1cd38b7e0db00083a20eb0fa944982 26 0
+27ba361ee1bcc866b25f3de9b0470e4e247364ed 62 0
+#2 := false
+#9 := 0::real
+decl f3 :: real
+#8 := f3
+#69 := 1/3::real
+#70 := (* 1/3::real f3)
+#67 := (>= #70 0::real)
+#65 := (not #67)
+#56 := (>= f3 0::real)
+#71 := (or #56 #65)
+#74 := (not #71)
+#13 := 3::real
+#11 := 2::real
+#12 := (* 2::real f3)
+#14 := (/ #12 3::real)
+#15 := (< f3 #14)
+#10 := (< f3 0::real)
+#16 := (implies #10 #15)
+#17 := (not #16)
+#77 := (iff #17 #74)
+#36 := 2/3::real
+#37 := (* 2/3::real f3)
+#39 := (< f3 #37)
+#45 := (not #10)
+#46 := (or #45 #39)
+#51 := (not #46)
+#75 := (iff #51 #74)
+#72 := (iff #46 #71)
+#66 := (iff #39 #65)
+#68 := [rewrite]: #66
+#63 := (iff #45 #56)
+#54 := (not #56)
+#58 := (not #54)
+#61 := (iff #58 #56)
+#62 := [rewrite]: #61
+#59 := (iff #45 #58)
+#55 := (iff #10 #54)
+#57 := [rewrite]: #55
+#60 := [monotonicity #57]: #59
+#64 := [trans #60 #62]: #63
+#73 := [monotonicity #64 #68]: #72
+#76 := [monotonicity #73]: #75
+#52 := (iff #17 #51)
+#49 := (iff #16 #46)
+#42 := (implies #10 #39)
+#47 := (iff #42 #46)
+#48 := [rewrite]: #47
+#43 := (iff #16 #42)
+#40 := (iff #15 #39)
+#35 := (= #14 #37)
+#38 := [rewrite]: #35
+#41 := [monotonicity #38]: #40
+#44 := [monotonicity #41]: #43
+#50 := [trans #44 #48]: #49
+#53 := [monotonicity #50]: #52
+#78 := [trans #53 #76]: #77
+#34 := [asserted]: #17
+#79 := [mp #34 #78]: #74
+#81 := [not-or-elim #79]: #67
+#80 := [not-or-elim #79]: #54
+[th-lemma #80 #81]: false
+unsat
+e1161936dfae097cefecc5afb0c61d7cd7a9394d 26 0
 #2 := false
 decl f3 :: real
 #8 := f3
@@ -47072,7 +47271,7 @@
 #29 := [asserted]: #12
 [mp #29 #44]: false
 unsat
-c3e8ed15657d66fdc6a77370b7e3994d0741653a 60 0
+501254910821a4c83220ee640918ae11739106cb 60 0
 #2 := false
 #8 := 0::real
 decl f3 :: real
@@ -47133,141 +47332,7 @@
 #78 := [not-or-elim #77]: #53
 [th-lemma #78 #79]: false
 unsat
-05dd4ddb8672ca6d3f31acc3ffa7f7986078b232 60 0
-#2 := false
-#9 := 0::real
-decl f3 :: real
-#8 := f3
-#67 := 2/3::real
-#68 := (* 2/3::real f3)
-#65 := (>= #68 0::real)
-#63 := (not #65)
-#54 := (>= f3 0::real)
-#69 := (or #54 #63)
-#72 := (not #69)
-#11 := 3::real
-#12 := (/ f3 3::real)
-#13 := (< f3 #12)
-#10 := (< f3 0::real)
-#14 := (implies #10 #13)
-#15 := (not #14)
-#75 := (iff #15 #72)
-#33 := 1/3::real
-#34 := (* 1/3::real f3)
-#37 := (< f3 #34)
-#43 := (not #10)
-#44 := (or #43 #37)
-#49 := (not #44)
-#73 := (iff #49 #72)
-#70 := (iff #44 #69)
-#64 := (iff #37 #63)
-#66 := [rewrite]: #64
-#61 := (iff #43 #54)
-#52 := (not #54)
-#56 := (not #52)
-#59 := (iff #56 #54)
-#60 := [rewrite]: #59
-#57 := (iff #43 #56)
-#53 := (iff #10 #52)
-#55 := [rewrite]: #53
-#58 := [monotonicity #55]: #57
-#62 := [trans #58 #60]: #61
-#71 := [monotonicity #62 #66]: #70
-#74 := [monotonicity #71]: #73
-#50 := (iff #15 #49)
-#47 := (iff #14 #44)
-#40 := (implies #10 #37)
-#45 := (iff #40 #44)
-#46 := [rewrite]: #45
-#41 := (iff #14 #40)
-#38 := (iff #13 #37)
-#35 := (= #12 #34)
-#36 := [rewrite]: #35
-#39 := [monotonicity #36]: #38
-#42 := [monotonicity #39]: #41
-#48 := [trans #42 #46]: #47
-#51 := [monotonicity #48]: #50
-#76 := [trans #51 #74]: #75
-#32 := [asserted]: #15
-#77 := [mp #32 #76]: #72
-#79 := [not-or-elim #77]: #65
-#78 := [not-or-elim #77]: #52
-[th-lemma #78 #79]: false
-unsat
-b7a066feb9f43bcc3b0373cd9c9287361b54eff6 36 0
-#2 := false
-decl f3 :: real
-#9 := f3
-#8 := 3::real
-#10 := (/ f3 3::real)
-#11 := (* 3::real #10)
-#12 := (= #11 f3)
-#13 := (not #12)
-#53 := (iff #13 false)
-#1 := true
-#48 := (not true)
-#51 := (iff #48 false)
-#52 := [rewrite]: #51
-#49 := (iff #13 #48)
-#46 := (iff #12 true)
-#41 := (= f3 f3)
-#44 := (iff #41 true)
-#45 := [rewrite]: #44
-#42 := (iff #12 #41)
-#31 := 1/3::real
-#32 := (* 1/3::real f3)
-#35 := (* 3::real #32)
-#38 := (= #35 f3)
-#39 := [rewrite]: #38
-#36 := (= #11 #35)
-#33 := (= #10 #32)
-#34 := [rewrite]: #33
-#37 := [monotonicity #34]: #36
-#40 := [trans #37 #39]: #12
-#43 := [monotonicity #40]: #42
-#47 := [trans #43 #45]: #46
-#50 := [monotonicity #47]: #49
-#54 := [trans #50 #52]: #53
-#30 := [asserted]: #13
-[mp #30 #54]: false
-unsat
-60b8185463f5b2ce142483f90c095e9accf8989c 35 0
-#2 := false
-decl f3 :: real
-#8 := f3
-#9 := 3::real
-#10 := (* f3 3::real)
-#11 := (/ #10 3::real)
-#12 := (= #11 f3)
-#13 := (not #12)
-#52 := (iff #13 false)
-#1 := true
-#47 := (not true)
-#50 := (iff #47 false)
-#51 := [rewrite]: #50
-#48 := (iff #13 #47)
-#45 := (iff #12 true)
-#40 := (= f3 f3)
-#43 := (iff #40 true)
-#44 := [rewrite]: #43
-#41 := (iff #12 #40)
-#31 := (* 3::real f3)
-#34 := (/ #31 3::real)
-#37 := (= #34 f3)
-#38 := [rewrite]: #37
-#35 := (= #11 #34)
-#32 := (= #10 #31)
-#33 := [rewrite]: #32
-#36 := [monotonicity #33]: #35
-#39 := [trans #36 #38]: #12
-#42 := [monotonicity #39]: #41
-#46 := [trans #42 #44]: #45
-#49 := [monotonicity #46]: #48
-#53 := [trans #49 #51]: #52
-#30 := [asserted]: #13
-[mp #30 #53]: false
-unsat
-2f685a966903afb267e7499dd8ad6b2b43caca93 75 0
+86149959970b3ea28fbf17dcb380883b8a659842 75 0
 #2 := false
 #8 := 0::real
 decl f3 :: real
@@ -47343,70 +47408,68 @@
 #96 := [unit-resolution #95 #92]: #90
 [th-lemma #89 #70 #96]: false
 unsat
-8140105cc276b32acd77e4f2cd380fea1f24efd8 62 0
-#2 := false
-#8 := 0::real
+3adfdc99c7629ab533bda7bf39a3bd8e76e15d1b 60 0
+#2 := false
+#9 := 0::real
 decl f3 :: real
-#9 := f3
-#67 := 1/3::real
-#68 := (* 1/3::real f3)
-#69 := (<= #68 0::real)
-#65 := (not #69)
-#54 := (<= f3 0::real)
-#71 := (or #54 #65)
-#74 := (not #71)
-#13 := 3::real
-#11 := 2::real
-#12 := (* 2::real f3)
-#14 := (/ #12 3::real)
-#15 := (< #14 f3)
-#10 := (< 0::real f3)
-#16 := (implies #10 #15)
-#17 := (not #16)
-#77 := (iff #17 #74)
-#36 := 2/3::real
-#37 := (* 2/3::real f3)
-#39 := (< #37 f3)
-#45 := (not #10)
-#46 := (or #45 #39)
-#51 := (not #46)
-#75 := (iff #51 #74)
-#72 := (iff #46 #71)
-#66 := (iff #39 #65)
-#70 := [rewrite]: #66
-#63 := (iff #45 #54)
-#55 := (not #54)
-#58 := (not #55)
-#61 := (iff #58 #54)
-#62 := [rewrite]: #61
-#59 := (iff #45 #58)
-#56 := (iff #10 #55)
-#57 := [rewrite]: #56
-#60 := [monotonicity #57]: #59
-#64 := [trans #60 #62]: #63
-#73 := [monotonicity #64 #70]: #72
-#76 := [monotonicity #73]: #75
-#52 := (iff #17 #51)
-#49 := (iff #16 #46)
-#42 := (implies #10 #39)
-#47 := (iff #42 #46)
-#48 := [rewrite]: #47
-#43 := (iff #16 #42)
-#40 := (iff #15 #39)
-#35 := (= #14 #37)
-#38 := [rewrite]: #35
-#41 := [monotonicity #38]: #40
-#44 := [monotonicity #41]: #43
-#50 := [trans #44 #48]: #49
-#53 := [monotonicity #50]: #52
-#78 := [trans #53 #76]: #77
-#34 := [asserted]: #17
-#79 := [mp #34 #78]: #74
-#81 := [not-or-elim #79]: #69
-#80 := [not-or-elim #79]: #55
-[th-lemma #80 #81]: false
-unsat
-4a38ab99c62d0654d0c5bc149db3e769cf921224 132 0
+#8 := f3
+#67 := 2/3::real
+#68 := (* 2/3::real f3)
+#65 := (>= #68 0::real)
+#63 := (not #65)
+#54 := (>= f3 0::real)
+#69 := (or #54 #63)
+#72 := (not #69)
+#11 := 3::real
+#12 := (/ f3 3::real)
+#13 := (< f3 #12)
+#10 := (< f3 0::real)
+#14 := (implies #10 #13)
+#15 := (not #14)
+#75 := (iff #15 #72)
+#33 := 1/3::real
+#34 := (* 1/3::real f3)
+#37 := (< f3 #34)
+#43 := (not #10)
+#44 := (or #43 #37)
+#49 := (not #44)
+#73 := (iff #49 #72)
+#70 := (iff #44 #69)
+#64 := (iff #37 #63)
+#66 := [rewrite]: #64
+#61 := (iff #43 #54)
+#52 := (not #54)
+#56 := (not #52)
+#59 := (iff #56 #54)
+#60 := [rewrite]: #59
+#57 := (iff #43 #56)
+#53 := (iff #10 #52)
+#55 := [rewrite]: #53
+#58 := [monotonicity #55]: #57
+#62 := [trans #58 #60]: #61
+#71 := [monotonicity #62 #66]: #70
+#74 := [monotonicity #71]: #73
+#50 := (iff #15 #49)
+#47 := (iff #14 #44)
+#40 := (implies #10 #37)
+#45 := (iff #40 #44)
+#46 := [rewrite]: #45
+#41 := (iff #14 #40)
+#38 := (iff #13 #37)
+#35 := (= #12 #34)
+#36 := [rewrite]: #35
+#39 := [monotonicity #36]: #38
+#42 := [monotonicity #39]: #41
+#48 := [trans #42 #46]: #47
+#51 := [monotonicity #48]: #50
+#76 := [trans #51 #74]: #75
+#32 := [asserted]: #15
+#77 := [mp #32 #76]: #72
+#79 := [not-or-elim #77]: #65
+#78 := [not-or-elim #77]: #52
+[th-lemma #78 #79]: false
+unsat
+9239e81a3a819598711273c035c67b58cc850e19 132 0
 #2 := false
 #9 := 0::real
 decl f3 :: real
@@ -47539,70 +47602,7 @@
 #162 := [th-lemma]: #161
 [unit-resolution #162 #160 #143]: false
 unsat
-9a571f31a85693be816acc5c7b7aa7362cb820bb 62 0
-#2 := false
-#9 := 0::real
-decl f3 :: real
-#8 := f3
-#69 := 1/3::real
-#70 := (* 1/3::real f3)
-#67 := (>= #70 0::real)
-#65 := (not #67)
-#56 := (>= f3 0::real)
-#71 := (or #56 #65)
-#74 := (not #71)
-#13 := 3::real
-#11 := 2::real
-#12 := (* 2::real f3)
-#14 := (/ #12 3::real)
-#15 := (< f3 #14)
-#10 := (< f3 0::real)
-#16 := (implies #10 #15)
-#17 := (not #16)
-#77 := (iff #17 #74)
-#36 := 2/3::real
-#37 := (* 2/3::real f3)
-#39 := (< f3 #37)
-#45 := (not #10)
-#46 := (or #45 #39)
-#51 := (not #46)
-#75 := (iff #51 #74)
-#72 := (iff #46 #71)
-#66 := (iff #39 #65)
-#68 := [rewrite]: #66
-#63 := (iff #45 #56)
-#54 := (not #56)
-#58 := (not #54)
-#61 := (iff #58 #56)
-#62 := [rewrite]: #61
-#59 := (iff #45 #58)
-#55 := (iff #10 #54)
-#57 := [rewrite]: #55
-#60 := [monotonicity #57]: #59
-#64 := [trans #60 #62]: #63
-#73 := [monotonicity #64 #68]: #72
-#76 := [monotonicity #73]: #75
-#52 := (iff #17 #51)
-#49 := (iff #16 #46)
-#42 := (implies #10 #39)
-#47 := (iff #42 #46)
-#48 := [rewrite]: #47
-#43 := (iff #16 #42)
-#40 := (iff #15 #39)
-#35 := (= #14 #37)
-#38 := [rewrite]: #35
-#41 := [monotonicity #38]: #40
-#44 := [monotonicity #41]: #43
-#50 := [trans #44 #48]: #49
-#53 := [monotonicity #50]: #52
-#78 := [trans #53 #76]: #77
-#34 := [asserted]: #17
-#79 := [mp #34 #78]: #74
-#81 := [not-or-elim #79]: #67
-#80 := [not-or-elim #79]: #54
-[th-lemma #80 #81]: false
-unsat
-704113f68324742364e301291c46543b32d30adc 103 0
+e3b48db6caf5e610a2e9a0bcae40a85fdd5e39bf 103 0
 #2 := false
 #8 := 0::real
 decl f3 :: real
@@ -47706,7 +47706,7 @@
 #124 := [unit-resolution #123 #120]: #115
 [th-lemma #110 #124]: false
 unsat
-c7322eea663ce724ffdf3e5de8e20e490ab8caf6 57 0
+e9188136c9d6e220e6ee3a401a574bb3b56f838f 57 0
 #2 := false
 #36 := 0::real
 decl f4 :: real
@@ -47764,7 +47764,7 @@
 #77 := [th-lemma]: #76
 [unit-resolution #77 #74 #56]: false
 unsat
-099809f4b951e6c4b8dd87d068c12977d185ca9a 149 0
+00baaea05aa472fbe57df430837e148f4a44397f 149 0
 #2 := false
 #9 := 0::real
 decl f3 :: real
@@ -47914,7 +47914,7 @@
 #170 := [unit-resolution #169 #155]: #97
 [th-lemma #159 #170 #167]: false
 unsat
-f580fbf74c17d6b6fb5afde9912701d1c54bba4d 57 0
+6166959cee3110b0d0634dd50d7cb2cfabb9eb5a 57 0
 #2 := false
 #36 := 0::real
 decl f4 :: real
@@ -47972,7 +47972,111 @@
 #77 := [unit-resolution #76 #73]: #71
 [th-lemma #77 #56 #72]: false
 unsat
-29b8934bcf2c51c8a551e0b17bf814bf8deedd61 114 0
+92d942d88d8ad274a6c24a4a1642ec3e151829bd 103 0
+#2 := false
+#45 := 0::real
+decl f5 :: real
+#11 := f5
+decl f4 :: real
+#9 := f4
+#43 := -1::real
+#53 := (* -1::real f5)
+#63 := (+ f4 #53)
+#64 := (<= #63 0::real)
+#67 := (ite #64 f4 f5)
+#75 := (* -1::real #67)
+decl f3 :: real
+#8 := f3
+#76 := (+ f3 #75)
+#74 := (>= #76 0::real)
+#73 := (not #74)
+#54 := (+ f3 #53)
+#52 := (>= #54 0::real)
+#51 := (not #52)
+#47 := (* -1::real f4)
+#48 := (+ f3 #47)
+#46 := (>= #48 0::real)
+#44 := (not #46)
+#57 := (and #44 #51)
+#60 := (not #57)
+#81 := (or #60 #73)
+#84 := (not #81)
+#14 := (<= f4 f5)
+#15 := (ite #14 f4 f5)
+#16 := (< f3 #15)
+#12 := (< f3 f5)
+#10 := (< f3 f4)
+#13 := (and #10 #12)
+#17 := (implies #13 #16)
+#18 := (not #17)
+#87 := (iff #18 #84)
+#36 := (not #13)
+#37 := (or #36 #16)
+#40 := (not #37)
+#85 := (iff #40 #84)
+#82 := (iff #37 #81)
+#79 := (iff #16 #73)
+#70 := (< f3 #67)
+#77 := (iff #70 #73)
+#78 := [rewrite]: #77
+#71 := (iff #16 #70)
+#68 := (= #15 #67)
+#65 := (iff #14 #64)
+#66 := [rewrite]: #65
+#69 := [monotonicity #66]: #68
+#72 := [monotonicity #69]: #71
+#80 := [trans #72 #78]: #79
+#61 := (iff #36 #60)
+#58 := (iff #13 #57)
+#55 := (iff #12 #51)
+#56 := [rewrite]: #55
+#49 := (iff #10 #44)
+#50 := [rewrite]: #49
+#59 := [monotonicity #50 #56]: #58
+#62 := [monotonicity #59]: #61
+#83 := [monotonicity #62 #80]: #82
+#86 := [monotonicity #83]: #85
+#41 := (iff #18 #40)
+#38 := (iff #17 #37)
+#39 := [rewrite]: #38
+#42 := [monotonicity #39]: #41
+#88 := [trans #42 #86]: #87
+#35 := [asserted]: #18
+#89 := [mp #35 #88]: #84
+#93 := [not-or-elim #89]: #74
+#90 := [not-or-elim #89]: #57
+#92 := [and-elim #90]: #51
+#98 := (+ f5 #75)
+#115 := (<= #98 0::real)
+#104 := (= f5 #67)
+#105 := (not #64)
+#103 := (= f4 #67)
+#110 := (not #103)
+#100 := (+ f4 #75)
+#97 := (<= #100 0::real)
+#107 := (not #97)
+#91 := [and-elim #90]: #44
+#96 := [hypothesis]: #97
+#94 := [th-lemma #96 #91 #93]: false
+#108 := [lemma #94]: #107
+#109 := [hypothesis]: #103
+#111 := (or #110 #97)
+#112 := [th-lemma]: #111
+#113 := [unit-resolution #112 #109 #108]: false
+#114 := [lemma #113]: #110
+#106 := (or #105 #103)
+#101 := [def-axiom]: #106
+#117 := [unit-resolution #101 #114]: #105
+#102 := (or #64 #104)
+#99 := [def-axiom]: #102
+#118 := [unit-resolution #99 #117]: #104
+#119 := (not #104)
+#120 := (or #119 #115)
+#121 := [th-lemma]: #120
+#122 := [unit-resolution #121 #118]: #115
+[th-lemma #122 #92 #93]: false
+unsat
+ebd0660c7140785afcd9de0809a5083ea0dcee04 114 0
 #2 := false
 #9 := 0::real
 decl f3 :: real
@@ -48087,169 +48191,7 @@
 #143 := [unit-resolution #142 #139]: #137
 [th-lemma #136 #134 #143]: false
 unsat
-cc7a80da13c82cc207500cb8afbaae97318e63e2 103 0
-#2 := false
-#45 := 0::real
-decl f5 :: real
-#11 := f5
-decl f4 :: real
-#9 := f4
-#43 := -1::real
-#53 := (* -1::real f5)
-#63 := (+ f4 #53)
-#64 := (<= #63 0::real)
-#67 := (ite #64 f4 f5)
-#75 := (* -1::real #67)
-decl f3 :: real
-#8 := f3
-#76 := (+ f3 #75)
-#74 := (>= #76 0::real)
-#73 := (not #74)
-#54 := (+ f3 #53)
-#52 := (>= #54 0::real)
-#51 := (not #52)
-#47 := (* -1::real f4)
-#48 := (+ f3 #47)
-#46 := (>= #48 0::real)
-#44 := (not #46)
-#57 := (and #44 #51)
-#60 := (not #57)
-#81 := (or #60 #73)
-#84 := (not #81)
-#14 := (<= f4 f5)
-#15 := (ite #14 f4 f5)
-#16 := (< f3 #15)
-#12 := (< f3 f5)
-#10 := (< f3 f4)
-#13 := (and #10 #12)
-#17 := (implies #13 #16)
-#18 := (not #17)
-#87 := (iff #18 #84)
-#36 := (not #13)
-#37 := (or #36 #16)
-#40 := (not #37)
-#85 := (iff #40 #84)
-#82 := (iff #37 #81)
-#79 := (iff #16 #73)
-#70 := (< f3 #67)
-#77 := (iff #70 #73)
-#78 := [rewrite]: #77
-#71 := (iff #16 #70)
-#68 := (= #15 #67)
-#65 := (iff #14 #64)
-#66 := [rewrite]: #65
-#69 := [monotonicity #66]: #68
-#72 := [monotonicity #69]: #71
-#80 := [trans #72 #78]: #79
-#61 := (iff #36 #60)
-#58 := (iff #13 #57)
-#55 := (iff #12 #51)
-#56 := [rewrite]: #55
-#49 := (iff #10 #44)
-#50 := [rewrite]: #49
-#59 := [monotonicity #50 #56]: #58
-#62 := [monotonicity #59]: #61
-#83 := [monotonicity #62 #80]: #82
-#86 := [monotonicity #83]: #85
-#41 := (iff #18 #40)
-#38 := (iff #17 #37)
-#39 := [rewrite]: #38
-#42 := [monotonicity #39]: #41
-#88 := [trans #42 #86]: #87
-#35 := [asserted]: #18
-#89 := [mp #35 #88]: #84
-#93 := [not-or-elim #89]: #74
-#90 := [not-or-elim #89]: #57
-#92 := [and-elim #90]: #51
-#98 := (+ f5 #75)
-#115 := (<= #98 0::real)
-#104 := (= f5 #67)
-#105 := (not #64)
-#103 := (= f4 #67)
-#110 := (not #103)
-#100 := (+ f4 #75)
-#97 := (<= #100 0::real)
-#107 := (not #97)
-#91 := [and-elim #90]: #44
-#96 := [hypothesis]: #97
-#94 := [th-lemma #96 #91 #93]: false
-#108 := [lemma #94]: #107
-#109 := [hypothesis]: #103
-#111 := (or #110 #97)
-#112 := [th-lemma]: #111
-#113 := [unit-resolution #112 #109 #108]: false
-#114 := [lemma #113]: #110
-#106 := (or #105 #103)
-#101 := [def-axiom]: #106
-#117 := [unit-resolution #101 #114]: #105
-#102 := (or #64 #104)
-#99 := [def-axiom]: #102
-#118 := [unit-resolution #99 #117]: #104
-#119 := (not #104)
-#120 := (or #119 #115)
-#121 := [th-lemma]: #120
-#122 := [unit-resolution #121 #118]: #115
-[th-lemma #122 #92 #93]: false
-unsat
-dcaa54c51c4b138dac6c0178c67a0d52f05b3002 57 0
-#2 := false
-#36 := 0::real
-decl f4 :: real
-#9 := f4
-#33 := -1::real
-#34 := (* -1::real f4)
-decl f3 :: real
-#8 := f3
-#35 := (+ f3 #34)
-#37 := (<= #35 0::real)
-#40 := (ite #37 f4 f3)
-#61 := (= f3 #40)
-#65 := (not #61)
-#46 := (* -1::real #40)
-#47 := (+ f3 #46)
-#48 := (<= #47 0::real)
-#53 := (not #48)
-#10 := (<= f3 f4)
-#11 := (ite #10 f4 f3)
-#12 := (<= f3 #11)
-#13 := (not #12)
-#54 := (iff #13 #53)
-#51 := (iff #12 #48)
-#43 := (<= f3 #40)
-#49 := (iff #43 #48)
-#50 := [rewrite]: #49
-#44 := (iff #12 #43)
-#41 := (= #11 #40)
-#38 := (iff #10 #37)
-#39 := [rewrite]: #38
-#42 := [monotonicity #39]: #41
-#45 := [monotonicity #42]: #44
-#52 := [trans #45 #50]: #51
-#55 := [monotonicity #52]: #54
-#30 := [asserted]: #13
-#56 := [mp #30 #55]: #53
-#64 := [hypothesis]: #61
-#66 := (or #65 #48)
-#67 := [th-lemma]: #66
-#68 := [unit-resolution #67 #64 #56]: false
-#69 := [lemma #68]: #65
-#59 := (or #37 #61)
-#57 := [def-axiom]: #59
-#72 := [unit-resolution #57 #69]: #37
-#31 := (+ f4 #46)
-#70 := (<= #31 0::real)
-#60 := (= f4 #40)
-#62 := (not #37)
-#63 := (or #62 #60)
-#58 := [def-axiom]: #63
-#73 := [unit-resolution #58 #72]: #60
-#74 := (not #60)
-#75 := (or #74 #70)
-#76 := [th-lemma]: #75
-#77 := [unit-resolution #76 #73]: #70
-[th-lemma #77 #56 #72]: false
-unsat
-23d9458c2d94638d741588b7f5f53da3b743fc4b 86 0
+bc553cd04d1e096b5239cc4030cde6a6b1f35726 86 0
 #2 := false
 decl f3 :: real
 #8 := f3
@@ -48336,65 +48278,7 @@
 #105 := [trans #104 #83]: #51
 [unit-resolution #57 #105]: false
 unsat
-ef39e4f5f84c012d1a7afd1eb9ae7787355eb901 57 0
-#2 := false
-#35 := 0::real
-decl f4 :: real
-#9 := f4
-decl f3 :: real
-#8 := f3
-#33 := -1::real
-#37 := (* -1::real f4)
-#38 := (+ f3 #37)
-#36 := (>= #38 0::real)
-#40 := (ite #36 f3 f4)
-#46 := (* -1::real #40)
-#47 := (+ f3 #46)
-#48 := (<= #47 0::real)
-#53 := (not #48)
-#10 := (<= f4 f3)
-#11 := (ite #10 f3 f4)
-#12 := (<= f3 #11)
-#13 := (not #12)
-#54 := (iff #13 #53)
-#51 := (iff #12 #48)
-#43 := (<= f3 #40)
-#49 := (iff #43 #48)
-#50 := [rewrite]: #49
-#44 := (iff #12 #43)
-#41 := (= #11 #40)
-#34 := (iff #10 #36)
-#39 := [rewrite]: #34
-#42 := [monotonicity #39]: #41
-#45 := [monotonicity #42]: #44
-#52 := [trans #45 #50]: #51
-#55 := [monotonicity #52]: #54
-#30 := [asserted]: #13
-#56 := [mp #30 #55]: #53
-#60 := (= f3 #40)
-#31 := (+ f4 #46)
-#64 := (<= #31 0::real)
-#61 := (= f4 #40)
-#62 := (not #36)
-#66 := [hypothesis]: #62
-#59 := (or #36 #61)
-#57 := [def-axiom]: #59
-#67 := [unit-resolution #57 #66]: #61
-#68 := (not #61)
-#69 := (or #68 #64)
-#70 := [th-lemma]: #69
-#71 := [unit-resolution #70 #67]: #64
-#72 := [th-lemma #56 #66 #71]: false
-#73 := [lemma #72]: #36
-#63 := (or #62 #60)
-#58 := [def-axiom]: #63
-#74 := [unit-resolution #58 #73]: #60
-#75 := (not #60)
-#76 := (or #75 #48)
-#77 := [th-lemma]: #76
-[unit-resolution #77 #74 #56]: false
-unsat
-ca3670773dec1aa185941c6109c12ef74c091595 68 0
+ace00ee2ae241d978310b9741895c318a66ed629 68 0
 #2 := false
 #8 := 0::real
 decl f3 :: real
@@ -48463,111 +48347,65 @@
 #88 := [trans #87 #84]: #13
 [unit-resolution #71 #88]: false
 unsat
-7eae59ca8b45a027fbc591665e655f191dd6bbc4 103 0
-#2 := false
-#45 := 0::real
-decl f3 :: real
-#8 := f3
-decl f5 :: real
-#11 := f5
-#43 := -1::real
-#51 := (* -1::real f5)
-#63 := (+ f3 #51)
-#64 := (<= #63 0::real)
-#67 := (ite #64 f5 f3)
-#73 := (* -1::real #67)
+e81fb3c2654f8ea7635466cd1678fb1937f5d399 57 0
+#2 := false
+#36 := 0::real
 decl f4 :: real
 #9 := f4
-#74 := (+ f4 #73)
-#75 := (<= #74 0::real)
-#76 := (not #75)
-#52 := (+ f4 #51)
-#53 := (<= #52 0::real)
-#54 := (not #53)
-#47 := (* -1::real f4)
-#48 := (+ f3 #47)
-#46 := (>= #48 0::real)
-#44 := (not #46)
-#57 := (and #44 #54)
-#60 := (not #57)
-#81 := (or #60 #76)
-#84 := (not #81)
-#14 := (<= f3 f5)
-#15 := (ite #14 f5 f3)
-#16 := (< #15 f4)
-#12 := (< f5 f4)
-#10 := (< f3 f4)
-#13 := (and #10 #12)
-#17 := (implies #13 #16)
-#18 := (not #17)
-#87 := (iff #18 #84)
-#36 := (not #13)
-#37 := (or #36 #16)
-#40 := (not #37)
-#85 := (iff #40 #84)
-#82 := (iff #37 #81)
-#79 := (iff #16 #76)
-#70 := (< #67 f4)
-#77 := (iff #70 #76)
-#78 := [rewrite]: #77
-#71 := (iff #16 #70)
-#68 := (= #15 #67)
-#65 := (iff #14 #64)
-#66 := [rewrite]: #65
-#69 := [monotonicity #66]: #68
-#72 := [monotonicity #69]: #71
-#80 := [trans #72 #78]: #79
-#61 := (iff #36 #60)
-#58 := (iff #13 #57)
-#55 := (iff #12 #54)
-#56 := [rewrite]: #55
-#49 := (iff #10 #44)
+#33 := -1::real
+#34 := (* -1::real f4)
+decl f3 :: real
+#8 := f3
+#35 := (+ f3 #34)
+#37 := (<= #35 0::real)
+#40 := (ite #37 f4 f3)
+#61 := (= f3 #40)
+#65 := (not #61)
+#46 := (* -1::real #40)
+#47 := (+ f3 #46)
+#48 := (<= #47 0::real)
+#53 := (not #48)
+#10 := (<= f3 f4)
+#11 := (ite #10 f4 f3)
+#12 := (<= f3 #11)
+#13 := (not #12)
+#54 := (iff #13 #53)
+#51 := (iff #12 #48)
+#43 := (<= f3 #40)
+#49 := (iff #43 #48)
 #50 := [rewrite]: #49
-#59 := [monotonicity #50 #56]: #58
-#62 := [monotonicity #59]: #61
-#83 := [monotonicity #62 #80]: #82
-#86 := [monotonicity #83]: #85
-#41 := (iff #18 #40)
-#38 := (iff #17 #37)
+#44 := (iff #12 #43)
+#41 := (= #11 #40)
+#38 := (iff #10 #37)
 #39 := [rewrite]: #38
 #42 := [monotonicity #39]: #41
-#88 := [trans #42 #86]: #87
-#35 := [asserted]: #18
-#89 := [mp #35 #88]: #84
-#93 := [not-or-elim #89]: #75
-#90 := [not-or-elim #89]: #57
-#91 := [and-elim #90]: #44
-#97 := (+ f3 #73)
-#116 := (>= #97 0::real)
-#104 := (= f3 #67)
-#105 := (not #64)
-#103 := (= f5 #67)
-#110 := (not #103)
-#100 := (+ f5 #73)
-#98 := (>= #100 0::real)
-#107 := (not #98)
-#92 := [and-elim #90]: #54
-#96 := [hypothesis]: #98
-#94 := [th-lemma #96 #92 #93]: false
-#108 := [lemma #94]: #107
-#109 := [hypothesis]: #103
-#111 := (or #110 #98)
-#112 := [th-lemma]: #111
-#113 := [unit-resolution #112 #109 #108]: false
-#114 := [lemma #113]: #110
-#106 := (or #105 #103)
-#101 := [def-axiom]: #106
-#117 := [unit-resolution #101 #114]: #105
-#102 := (or #64 #104)
-#99 := [def-axiom]: #102
-#118 := [unit-resolution #99 #117]: #104
-#119 := (not #104)
-#120 := (or #119 #116)
-#121 := [th-lemma]: #120
-#122 := [unit-resolution #121 #118]: #116
-[th-lemma #122 #91 #93]: false
-unsat
-a5005d5e2177d7e219c0762e500aaee9c6b18ed1 124 0
+#45 := [monotonicity #42]: #44
+#52 := [trans #45 #50]: #51
+#55 := [monotonicity #52]: #54
+#30 := [asserted]: #13
+#56 := [mp #30 #55]: #53
+#64 := [hypothesis]: #61
+#66 := (or #65 #48)
+#67 := [th-lemma]: #66
+#68 := [unit-resolution #67 #64 #56]: false
+#69 := [lemma #68]: #65
+#59 := (or #37 #61)
+#57 := [def-axiom]: #59
+#72 := [unit-resolution #57 #69]: #37
+#31 := (+ f4 #46)
+#70 := (<= #31 0::real)
+#60 := (= f4 #40)
+#62 := (not #37)
+#63 := (or #62 #60)
+#58 := [def-axiom]: #63
+#73 := [unit-resolution #58 #72]: #60
+#74 := (not #60)
+#75 := (or #74 #70)
+#76 := [th-lemma]: #75
+#77 := [unit-resolution #76 #73]: #70
+[th-lemma #77 #56 #72]: false
+unsat
+3664abc26f14854ad536c42c42a627c251d7213d 124 0
 #2 := false
 #13 := 0::real
 decl f4 :: real
@@ -48692,7 +48530,169 @@
 #145 := [unit-resolution #117 #144]: #106
 [th-lemma #131 #143 #141 #85 #145]: false
 unsat
-f8a9afea5f80c13265f7efc519efee9034d86aaa 88 0
+927cad57bf38ad7e837486701c357c7d04ee43f1 57 0
+#2 := false
+#35 := 0::real
+decl f4 :: real
+#9 := f4
+decl f3 :: real
+#8 := f3
+#33 := -1::real
+#37 := (* -1::real f4)
+#38 := (+ f3 #37)
+#36 := (>= #38 0::real)
+#40 := (ite #36 f3 f4)
+#46 := (* -1::real #40)
+#47 := (+ f3 #46)
+#48 := (<= #47 0::real)
+#53 := (not #48)
+#10 := (<= f4 f3)
+#11 := (ite #10 f3 f4)
+#12 := (<= f3 #11)
+#13 := (not #12)
+#54 := (iff #13 #53)
+#51 := (iff #12 #48)
+#43 := (<= f3 #40)
+#49 := (iff #43 #48)
+#50 := [rewrite]: #49
+#44 := (iff #12 #43)
+#41 := (= #11 #40)
+#34 := (iff #10 #36)
+#39 := [rewrite]: #34
+#42 := [monotonicity #39]: #41
+#45 := [monotonicity #42]: #44
+#52 := [trans #45 #50]: #51
+#55 := [monotonicity #52]: #54
+#30 := [asserted]: #13
+#56 := [mp #30 #55]: #53
+#60 := (= f3 #40)
+#31 := (+ f4 #46)
+#64 := (<= #31 0::real)
+#61 := (= f4 #40)
+#62 := (not #36)
+#66 := [hypothesis]: #62
+#59 := (or #36 #61)
+#57 := [def-axiom]: #59
+#67 := [unit-resolution #57 #66]: #61
+#68 := (not #61)
+#69 := (or #68 #64)
+#70 := [th-lemma]: #69
+#71 := [unit-resolution #70 #67]: #64
+#72 := [th-lemma #56 #66 #71]: false
+#73 := [lemma #72]: #36
+#63 := (or #62 #60)
+#58 := [def-axiom]: #63
+#74 := [unit-resolution #58 #73]: #60
+#75 := (not #60)
+#76 := (or #75 #48)
+#77 := [th-lemma]: #76
+[unit-resolution #77 #74 #56]: false
+unsat
+d6fff20b692527fbc5f2c570f30f65c6b5299749 103 0
+#2 := false
+#45 := 0::real
+decl f3 :: real
+#8 := f3
+decl f5 :: real
+#11 := f5
+#43 := -1::real
+#51 := (* -1::real f5)
+#63 := (+ f3 #51)
+#64 := (<= #63 0::real)
+#67 := (ite #64 f5 f3)
+#73 := (* -1::real #67)
+decl f4 :: real
+#9 := f4
+#74 := (+ f4 #73)
+#75 := (<= #74 0::real)
+#76 := (not #75)
+#52 := (+ f4 #51)
+#53 := (<= #52 0::real)
+#54 := (not #53)
+#47 := (* -1::real f4)
+#48 := (+ f3 #47)
+#46 := (>= #48 0::real)
+#44 := (not #46)
+#57 := (and #44 #54)
+#60 := (not #57)
+#81 := (or #60 #76)
+#84 := (not #81)
+#14 := (<= f3 f5)
+#15 := (ite #14 f5 f3)
+#16 := (< #15 f4)
+#12 := (< f5 f4)
+#10 := (< f3 f4)
+#13 := (and #10 #12)
+#17 := (implies #13 #16)
+#18 := (not #17)
+#87 := (iff #18 #84)
+#36 := (not #13)
+#37 := (or #36 #16)
+#40 := (not #37)
+#85 := (iff #40 #84)
+#82 := (iff #37 #81)
+#79 := (iff #16 #76)
+#70 := (< #67 f4)
+#77 := (iff #70 #76)
+#78 := [rewrite]: #77
+#71 := (iff #16 #70)
+#68 := (= #15 #67)
+#65 := (iff #14 #64)
+#66 := [rewrite]: #65
+#69 := [monotonicity #66]: #68
+#72 := [monotonicity #69]: #71
+#80 := [trans #72 #78]: #79
+#61 := (iff #36 #60)
+#58 := (iff #13 #57)
+#55 := (iff #12 #54)
+#56 := [rewrite]: #55
+#49 := (iff #10 #44)
+#50 := [rewrite]: #49
+#59 := [monotonicity #50 #56]: #58
+#62 := [monotonicity #59]: #61
+#83 := [monotonicity #62 #80]: #82
+#86 := [monotonicity #83]: #85
+#41 := (iff #18 #40)
+#38 := (iff #17 #37)
+#39 := [rewrite]: #38
+#42 := [monotonicity #39]: #41
+#88 := [trans #42 #86]: #87
+#35 := [asserted]: #18
+#89 := [mp #35 #88]: #84
+#93 := [not-or-elim #89]: #75
+#90 := [not-or-elim #89]: #57
+#91 := [and-elim #90]: #44
+#97 := (+ f3 #73)
+#116 := (>= #97 0::real)
+#104 := (= f3 #67)
+#105 := (not #64)
+#103 := (= f5 #67)
+#110 := (not #103)
+#100 := (+ f5 #73)
+#98 := (>= #100 0::real)
+#107 := (not #98)
+#92 := [and-elim #90]: #54
+#96 := [hypothesis]: #98
+#94 := [th-lemma #96 #92 #93]: false
+#108 := [lemma #94]: #107
+#109 := [hypothesis]: #103
+#111 := (or #110 #98)
+#112 := [th-lemma]: #111
+#113 := [unit-resolution #112 #109 #108]: false
+#114 := [lemma #113]: #110
+#106 := (or #105 #103)
+#101 := [def-axiom]: #106
+#117 := [unit-resolution #101 #114]: #105
+#102 := (or #64 #104)
+#99 := [def-axiom]: #102
+#118 := [unit-resolution #99 #117]: #104
+#119 := (not #104)
+#120 := (or #119 #116)
+#121 := [th-lemma]: #120
+#122 := [unit-resolution #121 #118]: #116
+[th-lemma #122 #91 #93]: false
+unsat
+71c351bb1819ddd2772bbf0065af1d459d5e627d 88 0
 #2 := false
 decl f4 :: real
 #9 := f4
@@ -48781,7 +48781,7 @@
 #109 := [trans #108 #83]: #51
 [unit-resolution #57 #109]: false
 unsat
-c008fb0a346a13df61c397707ef86eadaaaaf028 66 0
+0871a2d7a1a8feb4c622a99d4a7c9677b08adbc1 66 0
 #2 := false
 decl f3 :: real
 #9 := f3
@@ -48848,26 +48848,7 @@
 #86 := [trans #83 #85]: #33
 [unit-resolution #69 #86]: false
 unsat
-6fa8c48985ebc99327aefe25360343fbef04699f 18 0
-#2 := false
-decl f3 :: real
-#8 := f3
-#9 := (<= f3 f3)
-#10 := (not #9)
-#37 := (iff #10 false)
-#1 := true
-#32 := (not true)
-#35 := (iff #32 false)
-#36 := [rewrite]: #35
-#33 := (iff #10 #32)
-#30 := (iff #9 true)
-#31 := [rewrite]: #30
-#34 := [monotonicity #31]: #33
-#38 := [trans #34 #36]: #37
-#27 := [asserted]: #10
-[mp #27 #38]: false
-unsat
-3ea0cce22deeb1cf0a91c70b01f38d938cbfca2b 228 0
+f25887cff9f186252a40569f295759f63c1a99d5 228 0
 #2 := false
 #9 := 0::real
 decl f4 :: real
@@ -49096,7 +49077,26 @@
 #250 := [unit-resolution #196 #249]: #190
 [th-lemma #236 #250 #131 #234 #248 #238]: false
 unsat
-6246909589ff44c53af5060ab09e0fb241168550 50 0
+dec7d4cc8bde2cdb0d27eb6949a1b3c0be77f81d 18 0
+#2 := false
+decl f3 :: real
+#8 := f3
+#9 := (<= f3 f3)
+#10 := (not #9)
+#37 := (iff #10 false)
+#1 := true
+#32 := (not true)
+#35 := (iff #32 false)
+#36 := [rewrite]: #35
+#33 := (iff #10 #32)
+#30 := (iff #9 true)
+#31 := [rewrite]: #30
+#34 := [monotonicity #31]: #33
+#38 := [trans #34 #36]: #37
+#27 := [asserted]: #10
+[mp #27 #38]: false
+unsat
+a4cd1ac41bf4526fafd89a49dac8eaa0aa8148d4 50 0
 #2 := false
 #44 := 0::real
 decl f4 :: real
@@ -49147,7 +49147,7 @@
 #68 := [not-or-elim #65]: #67
 [th-lemma #68 #66]: false
 unsat
-9a368b708e53fe0140c26e7ca790639aa465ac37 55 0
+f04ec87433f814fae44c74b8e4463331c99ee4d7 55 0
 #2 := false
 #43 := 0::real
 decl f4 :: real
@@ -49203,7 +49203,7 @@
 #72 := [not-or-elim #71]: #42
 [th-lemma #72 #73]: false
 unsat
-9d1b38a4c0ecf43766b852c7e4d288a3e46da901 52 0
+306ff8b8fc070291a5ab7a64ab57d274b4990969 52 0
 #2 := false
 #40 := 0::real
 decl f4 :: real
@@ -49256,51 +49256,7 @@
 #77 := [unit-resolution #76 #65]: #53
 [unit-resolution #77 #67]: false
 unsat
-7db3ee0924a4cb1b14a4cebbf1c598c0b8dbec57 43 0
-#2 := false
-decl f5 :: (-> S2 S2 S3)
-#15 := (:var 0 S2)
-#14 := (:var 1 S2)
-#16 := (f5 #14 #15)
-#561 := (pattern #16)
-decl f4 :: (-> S3 S2)
-#17 := (f4 #16)
-#47 := (= #14 #17)
-#562 := (forall (vars (?v0 S2) (?v1 S2)) (:pat #561) #47)
-#50 := (forall (vars (?v0 S2) (?v1 S2)) #47)
-#565 := (iff #50 #562)
-#563 := (iff #47 #47)
-#564 := [refl]: #563
-#566 := [quant-intro #564]: #565
-#83 := (~ #50 #50)
-#81 := (~ #47 #47)
-#82 := [refl]: #81
-#84 := [nnf-pos #82]: #83
-#18 := (= #17 #14)
-#19 := (forall (vars (?v0 S2) (?v1 S2)) #18)
-#51 := (iff #19 #50)
-#48 := (iff #18 #47)
-#49 := [rewrite]: #48
-#52 := [quant-intro #49]: #51
-#46 := [asserted]: #19
-#55 := [mp #46 #52]: #50
-#73 := [mp~ #55 #84]: #50
-#567 := [mp #73 #566]: #562
-decl f6 :: S2
-#9 := f6
-decl f3 :: S2
-#8 := f3
-#10 := (f5 f3 f6)
-#11 := (f4 #10)
-#12 := (= f3 #11)
-#13 := (not #12)
-#45 := [asserted]: #13
-#144 := (not #562)
-#231 := (or #144 #12)
-#145 := [quant-inst]: #231
-[unit-resolution #145 #45 #567]: false
-unsat
-5631a67f2c650efd9761a68c96a2b28d9ed4cdd0 15 0
+3e97f3eb9f24bfae7990e01bc01c5a21dda19218 15 0
 #2 := false
 decl f3 :: real
 #8 := f3
@@ -49316,51 +49272,7 @@
 #28 := [asserted]: #11
 [mp #28 #34]: false
 unsat
-8502f9cde674da83d9cbc8a977644ab6e85265ed 43 0
-#2 := false
-decl f5 :: (-> S2 S2 S3)
-#15 := (:var 0 S2)
-#14 := (:var 1 S2)
-#16 := (f5 #14 #15)
-#561 := (pattern #16)
-decl f4 :: (-> S3 S2)
-#20 := (f4 #16)
-#54 := (= #15 #20)
-#568 := (forall (vars (?v0 S2) (?v1 S2)) (:pat #561) #54)
-#58 := (forall (vars (?v0 S2) (?v1 S2)) #54)
-#571 := (iff #58 #568)
-#569 := (iff #54 #54)
-#570 := [refl]: #569
-#572 := [quant-intro #570]: #571
-#75 := (~ #58 #58)
-#74 := (~ #54 #54)
-#72 := [refl]: #74
-#76 := [nnf-pos #72]: #75
-#21 := (= #20 #15)
-#22 := (forall (vars (?v0 S2) (?v1 S2)) #21)
-#59 := (iff #22 #58)
-#56 := (iff #21 #54)
-#57 := [rewrite]: #56
-#60 := [quant-intro #57]: #59
-#53 := [asserted]: #22
-#63 := [mp #53 #60]: #58
-#69 := [mp~ #63 #76]: #58
-#573 := [mp #69 #572]: #568
-decl f3 :: S2
-#8 := f3
-decl f6 :: S2
-#9 := f6
-#10 := (f5 f6 f3)
-#11 := (f4 #10)
-#12 := (= f3 #11)
-#13 := (not #12)
-#45 := [asserted]: #13
-#234 := (not #568)
-#235 := (or #234 #12)
-#163 := [quant-inst]: #235
-[unit-resolution #163 #45 #573]: false
-unsat
-c41bf12f912d9026a2697f2c615b98bf21c74fe7 75 0
+21d10b6d12abf591475883c4d7507c1168d34b59 75 0
 #2 := false
 #53 := 0::real
 decl f4 :: real
@@ -49436,7 +49348,413 @@
 #89 := [not-or-elim #88]: #54
 [th-lemma #89 #91 #92]: false
 unsat
-7028fd42bf273f5da876a633b9b2fac12fd44679 85 0
+a2e7adbf25ec843eff2ffcb678b0be5736d7d96c 80 0
+#2 := false
+#53 := 0::real
+decl f4 :: real
+#9 := f4
+#50 := -1::real
+#66 := (* -1::real f4)
+decl f3 :: real
+#8 := f3
+#67 := (+ f3 #66)
+#65 := (>= #67 0::real)
+#64 := (not #65)
+decl f5 :: real
+#11 := f5
+#51 := (* -1::real f5)
+#60 := (+ f3 #51)
+#61 := (<= #60 0::real)
+#52 := (+ f4 #51)
+#54 := (<= #52 0::real)
+#57 := (not #54)
+#83 := (or #57 #61 #65)
+#88 := (not #83)
+#13 := (<= f3 f5)
+#12 := (<= f4 f5)
+#14 := (implies #12 #13)
+#10 := (< f3 f4)
+#15 := (implies #10 #14)
+#16 := (not #15)
+#91 := (iff #16 #88)
+#34 := (not #12)
+#35 := (or #34 #13)
+#41 := (not #10)
+#42 := (or #41 #35)
+#47 := (not #42)
+#89 := (iff #47 #88)
+#86 := (iff #42 #83)
+#77 := (or #57 #61)
+#80 := (or #65 #77)
+#84 := (iff #80 #83)
+#85 := [rewrite]: #84
+#81 := (iff #42 #80)
+#78 := (iff #35 #77)
+#62 := (iff #13 #61)
+#63 := [rewrite]: #62
+#58 := (iff #34 #57)
+#55 := (iff #12 #54)
+#56 := [rewrite]: #55
+#59 := [monotonicity #56]: #58
+#79 := [monotonicity #59 #63]: #78
+#75 := (iff #41 #65)
+#70 := (not #64)
+#73 := (iff #70 #65)
+#74 := [rewrite]: #73
+#71 := (iff #41 #70)
+#68 := (iff #10 #64)
+#69 := [rewrite]: #68
+#72 := [monotonicity #69]: #71
+#76 := [trans #72 #74]: #75
+#82 := [monotonicity #76 #79]: #81
+#87 := [trans #82 #85]: #86
+#90 := [monotonicity #87]: #89
+#48 := (iff #16 #47)
+#45 := (iff #15 #42)
+#38 := (implies #10 #35)
+#43 := (iff #38 #42)
+#44 := [rewrite]: #43
+#39 := (iff #15 #38)
+#36 := (iff #14 #35)
+#37 := [rewrite]: #36
+#40 := [monotonicity #37]: #39
+#46 := [trans #40 #44]: #45
+#49 := [monotonicity #46]: #48
+#92 := [trans #49 #90]: #91
+#33 := [asserted]: #16
+#93 := [mp #33 #92]: #88
+#97 := [not-or-elim #93]: #64
+#95 := (not #61)
+#96 := [not-or-elim #93]: #95
+#94 := [not-or-elim #93]: #54
+[th-lemma #94 #96 #97]: false
+unsat
+1a6c859282e9f174eccf2c9ae56d2a4283272a9d 80 0
+#2 := false
+#52 := 0::real
+decl f4 :: real
+#9 := f4
+#50 := -1::real
+#69 := (* -1::real f4)
+decl f3 :: real
+#8 := f3
+#70 := (+ f3 #69)
+#71 := (<= #70 0::real)
+#74 := (not #71)
+decl f5 :: real
+#11 := f5
+#54 := (* -1::real f5)
+#65 := (+ f3 #54)
+#66 := (<= #65 0::real)
+#55 := (+ f4 #54)
+#53 := (>= #55 0::real)
+#83 := (or #53 #66 #74)
+#88 := (not #83)
+#13 := (<= f3 f5)
+#12 := (< f4 f5)
+#14 := (implies #12 #13)
+#10 := (<= f3 f4)
+#15 := (implies #10 #14)
+#16 := (not #15)
+#91 := (iff #16 #88)
+#34 := (not #12)
+#35 := (or #34 #13)
+#41 := (not #10)
+#42 := (or #41 #35)
+#47 := (not #42)
+#89 := (iff #47 #88)
+#86 := (iff #42 #83)
+#77 := (or #53 #66)
+#80 := (or #74 #77)
+#84 := (iff #80 #83)
+#85 := [rewrite]: #84
+#81 := (iff #42 #80)
+#78 := (iff #35 #77)
+#67 := (iff #13 #66)
+#68 := [rewrite]: #67
+#63 := (iff #34 #53)
+#51 := (not #53)
+#58 := (not #51)
+#61 := (iff #58 #53)
+#62 := [rewrite]: #61
+#59 := (iff #34 #58)
+#56 := (iff #12 #51)
+#57 := [rewrite]: #56
+#60 := [monotonicity #57]: #59
+#64 := [trans #60 #62]: #63
+#79 := [monotonicity #64 #68]: #78
+#75 := (iff #41 #74)
+#72 := (iff #10 #71)
+#73 := [rewrite]: #72
+#76 := [monotonicity #73]: #75
+#82 := [monotonicity #76 #79]: #81
+#87 := [trans #82 #85]: #86
+#90 := [monotonicity #87]: #89
+#48 := (iff #16 #47)
+#45 := (iff #15 #42)
+#38 := (implies #10 #35)
+#43 := (iff #38 #42)
+#44 := [rewrite]: #43
+#39 := (iff #15 #38)
+#36 := (iff #14 #35)
+#37 := [rewrite]: #36
+#40 := [monotonicity #37]: #39
+#46 := [trans #40 #44]: #45
+#49 := [monotonicity #46]: #48
+#92 := [trans #49 #90]: #91
+#33 := [asserted]: #16
+#93 := [mp #33 #92]: #88
+#97 := [not-or-elim #93]: #71
+#94 := [not-or-elim #93]: #51
+#95 := (not #66)
+#96 := [not-or-elim #93]: #95
+[th-lemma #96 #94 #97]: false
+unsat
+a456c127f26b5322f4e875bd59145cba8570dfda 85 0
+#2 := false
+#52 := 0::real
+decl f4 :: real
+#9 := f4
+#50 := -1::real
+#72 := (* -1::real f4)
+decl f3 :: real
+#8 := f3
+#73 := (+ f3 #72)
+#71 := (>= #73 0::real)
+#70 := (not #71)
+decl f5 :: real
+#11 := f5
+#54 := (* -1::real f5)
+#67 := (+ f3 #54)
+#66 := (>= #67 0::real)
+#65 := (not #66)
+#55 := (+ f4 #54)
+#53 := (>= #55 0::real)
+#89 := (or #53 #65 #71)
+#94 := (not #89)
+#13 := (< f3 f5)
+#12 := (< f4 f5)
+#14 := (implies #12 #13)
+#10 := (< f3 f4)
+#15 := (implies #10 #14)
+#16 := (not #15)
+#97 := (iff #16 #94)
+#34 := (not #12)
+#35 := (or #34 #13)
+#41 := (not #10)
+#42 := (or #41 #35)
+#47 := (not #42)
+#95 := (iff #47 #94)
+#92 := (iff #42 #89)
+#83 := (or #53 #65)
+#86 := (or #71 #83)
+#90 := (iff #86 #89)
+#91 := [rewrite]: #90
+#87 := (iff #42 #86)
+#84 := (iff #35 #83)
+#68 := (iff #13 #65)
+#69 := [rewrite]: #68
+#63 := (iff #34 #53)
+#51 := (not #53)
+#58 := (not #51)
+#61 := (iff #58 #53)
+#62 := [rewrite]: #61
+#59 := (iff #34 #58)
+#56 := (iff #12 #51)
+#57 := [rewrite]: #56
+#60 := [monotonicity #57]: #59
+#64 := [trans #60 #62]: #63
+#85 := [monotonicity #64 #69]: #84
+#81 := (iff #41 #71)
+#76 := (not #70)
+#79 := (iff #76 #71)
+#80 := [rewrite]: #79
+#77 := (iff #41 #76)
+#74 := (iff #10 #70)
+#75 := [rewrite]: #74
+#78 := [monotonicity #75]: #77
+#82 := [trans #78 #80]: #81
+#88 := [monotonicity #82 #85]: #87
+#93 := [trans #88 #91]: #92
+#96 := [monotonicity #93]: #95
+#48 := (iff #16 #47)
+#45 := (iff #15 #42)
+#38 := (implies #10 #35)
+#43 := (iff #38 #42)
+#44 := [rewrite]: #43
+#39 := (iff #15 #38)
+#36 := (iff #14 #35)
+#37 := [rewrite]: #36
+#40 := [monotonicity #37]: #39
+#46 := [trans #40 #44]: #45
+#49 := [monotonicity #46]: #48
+#98 := [trans #49 #96]: #97
+#33 := [asserted]: #16
+#99 := [mp #33 #98]: #94
+#102 := [not-or-elim #99]: #70
+#100 := [not-or-elim #99]: #51
+#101 := [not-or-elim #99]: #66
+[th-lemma #101 #100 #102]: false
+unsat
+8a69c429281dbce5e808c8ed794578e8f39d3940 69 0
+#2 := false
+#44 := 0::real
+decl f5 :: real
+#11 := f5
+#42 := -1::real
+#51 := (* -1::real f5)
+decl f3 :: real
+#8 := f3
+#62 := (+ f3 #51)
+#63 := (<= #62 0::real)
+#64 := (not #63)
+decl f4 :: real
+#9 := f4
+#52 := (+ f4 #51)
+#50 := (>= #52 0::real)
+#53 := (not #50)
+#46 := (* -1::real f4)
+#47 := (+ f3 #46)
+#45 := (>= #47 0::real)
+#43 := (not #45)
+#56 := (and #43 #53)
+#59 := (not #56)
+#74 := (or #59 #63)
+#77 := (not #74)
+#14 := (< f5 f3)
+#15 := (not #14)
+#12 := (< f4 f5)
+#10 := (< f3 f4)
+#13 := (and #10 #12)
+#16 := (implies #13 #15)
+#17 := (not #16)
+#80 := (iff #17 #77)
+#35 := (not #13)
+#36 := (or #35 #15)
+#39 := (not #36)
+#78 := (iff #39 #77)
+#75 := (iff #36 #74)
+#72 := (iff #15 #63)
+#67 := (not #64)
+#70 := (iff #67 #63)
+#71 := [rewrite]: #70
+#68 := (iff #15 #67)
+#65 := (iff #14 #64)
+#66 := [rewrite]: #65
+#69 := [monotonicity #66]: #68
+#73 := [trans #69 #71]: #72
+#60 := (iff #35 #59)
+#57 := (iff #13 #56)
+#54 := (iff #12 #53)
+#55 := [rewrite]: #54
+#48 := (iff #10 #43)
+#49 := [rewrite]: #48
+#58 := [monotonicity #49 #55]: #57
+#61 := [monotonicity #58]: #60
+#76 := [monotonicity #61 #73]: #75
+#79 := [monotonicity #76]: #78
+#40 := (iff #17 #39)
+#37 := (iff #16 #36)
+#38 := [rewrite]: #37
+#41 := [monotonicity #38]: #40
+#81 := [trans #41 #79]: #80
+#34 := [asserted]: #17
+#82 := [mp #34 #81]: #77
+#86 := [not-or-elim #82]: #64
+#83 := [not-or-elim #82]: #56
+#84 := [and-elim #83]: #43
+#85 := [and-elim #83]: #53
+[th-lemma #85 #84 #86]: false
+unsat
+857d7ddf089457505996d95feeeae40661d0b2f9 43 0
+#2 := false
+decl f5 :: (-> S2 S2 S3)
+#15 := (:var 0 S2)
+#14 := (:var 1 S2)
+#16 := (f5 #14 #15)
+#561 := (pattern #16)
+decl f4 :: (-> S3 S2)
+#17 := (f4 #16)
+#47 := (= #14 #17)
+#562 := (forall (vars (?v0 S2) (?v1 S2)) (:pat #561) #47)
+#50 := (forall (vars (?v0 S2) (?v1 S2)) #47)
+#565 := (iff #50 #562)
+#563 := (iff #47 #47)
+#564 := [refl]: #563
+#566 := [quant-intro #564]: #565
+#83 := (~ #50 #50)
+#81 := (~ #47 #47)
+#82 := [refl]: #81
+#84 := [nnf-pos #82]: #83
+#18 := (= #17 #14)
+#19 := (forall (vars (?v0 S2) (?v1 S2)) #18)
+#51 := (iff #19 #50)
+#48 := (iff #18 #47)
+#49 := [rewrite]: #48
+#52 := [quant-intro #49]: #51
+#46 := [asserted]: #19
+#55 := [mp #46 #52]: #50
+#73 := [mp~ #55 #84]: #50
+#567 := [mp #73 #566]: #562
+decl f6 :: S2
+#9 := f6
+decl f3 :: S2
+#8 := f3
+#10 := (f5 f3 f6)
+#11 := (f4 #10)
+#12 := (= f3 #11)
+#13 := (not #12)
+#45 := [asserted]: #13
+#144 := (not #562)
+#231 := (or #144 #12)
+#145 := [quant-inst]: #231
+[unit-resolution #145 #45 #567]: false
+unsat
+23637ccd7eefaf0528eb9dd850aad7beaa4e7354 43 0
+#2 := false
+decl f5 :: (-> S2 S2 S3)
+#15 := (:var 0 S2)
+#14 := (:var 1 S2)
+#16 := (f5 #14 #15)
+#561 := (pattern #16)
+decl f4 :: (-> S3 S2)
+#20 := (f4 #16)
+#54 := (= #15 #20)
+#568 := (forall (vars (?v0 S2) (?v1 S2)) (:pat #561) #54)
+#58 := (forall (vars (?v0 S2) (?v1 S2)) #54)
+#571 := (iff #58 #568)
+#569 := (iff #54 #54)
+#570 := [refl]: #569
+#572 := [quant-intro #570]: #571
+#75 := (~ #58 #58)
+#74 := (~ #54 #54)
+#72 := [refl]: #74
+#76 := [nnf-pos #72]: #75
+#21 := (= #20 #15)
+#22 := (forall (vars (?v0 S2) (?v1 S2)) #21)
+#59 := (iff #22 #58)
+#56 := (iff #21 #54)
+#57 := [rewrite]: #56
+#60 := [quant-intro #57]: #59
+#53 := [asserted]: #22
+#63 := [mp #53 #60]: #58
+#69 := [mp~ #63 #76]: #58
+#573 := [mp #69 #572]: #568
+decl f3 :: S2
+#8 := f3
+decl f6 :: S2
+#9 := f6
+#10 := (f5 f6 f3)
+#11 := (f4 #10)
+#12 := (= f3 #11)
+#13 := (not #12)
+#45 := [asserted]: #13
+#234 := (not #568)
+#235 := (or #234 #12)
+#163 := [quant-inst]: #235
+[unit-resolution #163 #45 #573]: false
+unsat
+9a00f879e91964e9d6bb28cc5e490183e3742924 85 0
 #2 := false
 decl f5 :: S2
 #9 := f5
@@ -49522,88 +49840,7 @@
 #206 := [unit-resolution #170 #205]: #239
 [unit-resolution #206 #186]: false
 unsat
-9f5fa7c760db14a67656e2a38b69825c2338f5ee 80 0
-#2 := false
-#53 := 0::real
-decl f4 :: real
-#9 := f4
-#50 := -1::real
-#66 := (* -1::real f4)
-decl f3 :: real
-#8 := f3
-#67 := (+ f3 #66)
-#65 := (>= #67 0::real)
-#64 := (not #65)
-decl f5 :: real
-#11 := f5
-#51 := (* -1::real f5)
-#60 := (+ f3 #51)
-#61 := (<= #60 0::real)
-#52 := (+ f4 #51)
-#54 := (<= #52 0::real)
-#57 := (not #54)
-#83 := (or #57 #61 #65)
-#88 := (not #83)
-#13 := (<= f3 f5)
-#12 := (<= f4 f5)
-#14 := (implies #12 #13)
-#10 := (< f3 f4)
-#15 := (implies #10 #14)
-#16 := (not #15)
-#91 := (iff #16 #88)
-#34 := (not #12)
-#35 := (or #34 #13)
-#41 := (not #10)
-#42 := (or #41 #35)
-#47 := (not #42)
-#89 := (iff #47 #88)
-#86 := (iff #42 #83)
-#77 := (or #57 #61)
-#80 := (or #65 #77)
-#84 := (iff #80 #83)
-#85 := [rewrite]: #84
-#81 := (iff #42 #80)
-#78 := (iff #35 #77)
-#62 := (iff #13 #61)
-#63 := [rewrite]: #62
-#58 := (iff #34 #57)
-#55 := (iff #12 #54)
-#56 := [rewrite]: #55
-#59 := [monotonicity #56]: #58
-#79 := [monotonicity #59 #63]: #78
-#75 := (iff #41 #65)
-#70 := (not #64)
-#73 := (iff #70 #65)
-#74 := [rewrite]: #73
-#71 := (iff #41 #70)
-#68 := (iff #10 #64)
-#69 := [rewrite]: #68
-#72 := [monotonicity #69]: #71
-#76 := [trans #72 #74]: #75
-#82 := [monotonicity #76 #79]: #81
-#87 := [trans #82 #85]: #86
-#90 := [monotonicity #87]: #89
-#48 := (iff #16 #47)
-#45 := (iff #15 #42)
-#38 := (implies #10 #35)
-#43 := (iff #38 #42)
-#44 := [rewrite]: #43
-#39 := (iff #15 #38)
-#36 := (iff #14 #35)
-#37 := [rewrite]: #36
-#40 := [monotonicity #37]: #39
-#46 := [trans #40 #44]: #45
-#49 := [monotonicity #46]: #48
-#92 := [trans #49 #90]: #91
-#33 := [asserted]: #16
-#93 := [mp #33 #92]: #88
-#97 := [not-or-elim #93]: #64
-#95 := (not #61)
-#96 := [not-or-elim #93]: #95
-#94 := [not-or-elim #93]: #54
-[th-lemma #94 #96 #97]: false
-unsat
-ab91d7002afe61891f92aa68c03a93dbeac150bb 155 0
+8760f419b4705bba51bf2708287a0ef4a7175b9e 155 0
 #2 := false
 decl f7 :: S2
 #12 := f7
@@ -49759,88 +49996,7 @@
 #263 := [def-axiom]: #176
 [unit-resolution #263 #289 #215 #569]: false
 unsat
-ef54c95730a86f29e142ca8c0703d6c3a6105c5e 80 0
-#2 := false
-#52 := 0::real
-decl f4 :: real
-#9 := f4
-#50 := -1::real
-#69 := (* -1::real f4)
-decl f3 :: real
-#8 := f3
-#70 := (+ f3 #69)
-#71 := (<= #70 0::real)
-#74 := (not #71)
-decl f5 :: real
-#11 := f5
-#54 := (* -1::real f5)
-#65 := (+ f3 #54)
-#66 := (<= #65 0::real)
-#55 := (+ f4 #54)
-#53 := (>= #55 0::real)
-#83 := (or #53 #66 #74)
-#88 := (not #83)
-#13 := (<= f3 f5)
-#12 := (< f4 f5)
-#14 := (implies #12 #13)
-#10 := (<= f3 f4)
-#15 := (implies #10 #14)
-#16 := (not #15)
-#91 := (iff #16 #88)
-#34 := (not #12)
-#35 := (or #34 #13)
-#41 := (not #10)
-#42 := (or #41 #35)
-#47 := (not #42)
-#89 := (iff #47 #88)
-#86 := (iff #42 #83)
-#77 := (or #53 #66)
-#80 := (or #74 #77)
-#84 := (iff #80 #83)
-#85 := [rewrite]: #84
-#81 := (iff #42 #80)
-#78 := (iff #35 #77)
-#67 := (iff #13 #66)
-#68 := [rewrite]: #67
-#63 := (iff #34 #53)
-#51 := (not #53)
-#58 := (not #51)
-#61 := (iff #58 #53)
-#62 := [rewrite]: #61
-#59 := (iff #34 #58)
-#56 := (iff #12 #51)
-#57 := [rewrite]: #56
-#60 := [monotonicity #57]: #59
-#64 := [trans #60 #62]: #63
-#79 := [monotonicity #64 #68]: #78
-#75 := (iff #41 #74)
-#72 := (iff #10 #71)
-#73 := [rewrite]: #72
-#76 := [monotonicity #73]: #75
-#82 := [monotonicity #76 #79]: #81
-#87 := [trans #82 #85]: #86
-#90 := [monotonicity #87]: #89
-#48 := (iff #16 #47)
-#45 := (iff #15 #42)
-#38 := (implies #10 #35)
-#43 := (iff #38 #42)
-#44 := [rewrite]: #43
-#39 := (iff #15 #38)
-#36 := (iff #14 #35)
-#37 := [rewrite]: #36
-#40 := [monotonicity #37]: #39
-#46 := [trans #40 #44]: #45
-#49 := [monotonicity #46]: #48
-#92 := [trans #49 #90]: #91
-#33 := [asserted]: #16
-#93 := [mp #33 #92]: #88
-#97 := [not-or-elim #93]: #71
-#94 := [not-or-elim #93]: #51
-#95 := (not #66)
-#96 := [not-or-elim #93]: #95
-[th-lemma #96 #94 #97]: false
-unsat
-c53da5ad16e14d4123258f05451b97645b05e47b 91 0
+9b011b5f1ccfc0c5952d2a8ce428ee6a14bd5a78 91 0
 #2 := false
 decl f9 :: S3
 #14 := f9
@@ -49932,93 +50088,58 @@
 #320 := [unit-resolution #230 #598]: #299
 [unit-resolution #320 #321]: false
 unsat
-0c5d7dbb8aa2814977e1a9556d08eabbc11dd00b 85 0
-#2 := false
-#52 := 0::real
-decl f4 :: real
-#9 := f4
-#50 := -1::real
-#72 := (* -1::real f4)
-decl f3 :: real
-#8 := f3
-#73 := (+ f3 #72)
-#71 := (>= #73 0::real)
-#70 := (not #71)
-decl f5 :: real
-#11 := f5
-#54 := (* -1::real f5)
-#67 := (+ f3 #54)
-#66 := (>= #67 0::real)
-#65 := (not #66)
-#55 := (+ f4 #54)
-#53 := (>= #55 0::real)
-#89 := (or #53 #65 #71)
-#94 := (not #89)
-#13 := (< f3 f5)
-#12 := (< f4 f5)
-#14 := (implies #12 #13)
-#10 := (< f3 f4)
-#15 := (implies #10 #14)
-#16 := (not #15)
-#97 := (iff #16 #94)
-#34 := (not #12)
-#35 := (or #34 #13)
-#41 := (not #10)
-#42 := (or #41 #35)
-#47 := (not #42)
-#95 := (iff #47 #94)
-#92 := (iff #42 #89)
-#83 := (or #53 #65)
-#86 := (or #71 #83)
-#90 := (iff #86 #89)
-#91 := [rewrite]: #90
-#87 := (iff #42 #86)
-#84 := (iff #35 #83)
-#68 := (iff #13 #65)
-#69 := [rewrite]: #68
-#63 := (iff #34 #53)
-#51 := (not #53)
-#58 := (not #51)
-#61 := (iff #58 #53)
-#62 := [rewrite]: #61
-#59 := (iff #34 #58)
-#56 := (iff #12 #51)
+15e3058b649be6d5463c784c16fd64eaa28f5f73 50 0
+#2 := false
+decl f3 :: (-> S2 S3 S4 S3 S4)
+#15 := (:var 1 S3)
+#16 := (:var 0 S4)
+#14 := (:var 2 S2)
+#17 := (f3 #14 #15 #16 #15)
+#571 := (pattern #17)
+#54 := (= #16 #17)
+#572 := (forall (vars (?v0 S2) (?v1 S3) (?v2 S4)) (:pat #571) #54)
+#58 := (forall (vars (?v0 S2) (?v1 S3) (?v2 S4)) #54)
+#575 := (iff #58 #572)
+#573 := (iff #54 #54)
+#574 := [refl]: #573
+#576 := [quant-intro #574]: #575
+#87 := (~ #58 #58)
+#85 := (~ #54 #54)
+#86 := [refl]: #85
+#88 := [nnf-pos #86]: #87
+#18 := (= #17 #16)
+#19 := (forall (vars (?v0 S2) (?v1 S3) (?v2 S4)) #18)
+#59 := (iff #19 #58)
+#56 := (iff #18 #54)
 #57 := [rewrite]: #56
-#60 := [monotonicity #57]: #59
-#64 := [trans #60 #62]: #63
-#85 := [monotonicity #64 #69]: #84
-#81 := (iff #41 #71)
-#76 := (not #70)
-#79 := (iff #76 #71)
-#80 := [rewrite]: #79
-#77 := (iff #41 #76)
-#74 := (iff #10 #70)
-#75 := [rewrite]: #74
-#78 := [monotonicity #75]: #77
-#82 := [trans #78 #80]: #81
-#88 := [monotonicity #82 #85]: #87
-#93 := [trans #88 #91]: #92
-#96 := [monotonicity #93]: #95
-#48 := (iff #16 #47)
-#45 := (iff #15 #42)
-#38 := (implies #10 #35)
-#43 := (iff #38 #42)
-#44 := [rewrite]: #43
-#39 := (iff #15 #38)
-#36 := (iff #14 #35)
-#37 := [rewrite]: #36
-#40 := [monotonicity #37]: #39
-#46 := [trans #40 #44]: #45
-#49 := [monotonicity #46]: #48
-#98 := [trans #49 #96]: #97
-#33 := [asserted]: #16
-#99 := [mp #33 #98]: #94
-#102 := [not-or-elim #99]: #70
-#100 := [not-or-elim #99]: #51
-#101 := [not-or-elim #99]: #66
-[th-lemma #101 #100 #102]: false
-unsat
-4d6ae030a899d6a058af8429edba2402745a216b 210 0
+#60 := [quant-intro #57]: #59
+#53 := [asserted]: #19
+#63 := [mp #53 #60]: #58
+#79 := [mp~ #63 #88]: #58
+#577 := [mp #79 #576]: #572
+decl f5 :: S3
+#9 := f5
+decl f6 :: S4
+#10 := f6
+decl f4 :: S2
+#8 := f4
+#11 := (f3 f4 f5 f6 f5)
+#47 := (= f6 #11)
+#50 := (not #47)
+#12 := (= #11 f6)
+#13 := (not #12)
+#51 := (iff #13 #50)
+#48 := (iff #12 #47)
+#49 := [rewrite]: #48
+#52 := [monotonicity #49]: #51
+#46 := [asserted]: #13
+#55 := [mp #46 #52]: #50
+#154 := (not #572)
+#241 := (or #154 #47)
+#155 := [quant-inst]: #241
+[unit-resolution #155 #55 #577]: false
+unsat
+a158237dab9b8e1ca3aee50fa8555cfce1bec7cc 210 0
 #2 := false
 decl f11 :: S5
 #16 := f11
@@ -50229,77 +50350,93 @@
 #321 := [def-axiom]: #234
 [unit-resolution #321 #597 #608 #332]: false
 unsat
-ad850a4d677f642c1e98f0e5f3b7d3f84b6c874a 69 0
-#2 := false
-#44 := 0::real
-decl f5 :: real
-#11 := f5
-#42 := -1::real
-#51 := (* -1::real f5)
-decl f3 :: real
-#8 := f3
-#62 := (+ f3 #51)
-#63 := (<= #62 0::real)
-#64 := (not #63)
-decl f4 :: real
-#9 := f4
-#52 := (+ f4 #51)
-#50 := (>= #52 0::real)
-#53 := (not #50)
-#46 := (* -1::real f4)
-#47 := (+ f3 #46)
-#45 := (>= #47 0::real)
-#43 := (not #45)
-#56 := (and #43 #53)
-#59 := (not #56)
-#74 := (or #59 #63)
-#77 := (not #74)
-#14 := (< f5 f3)
-#15 := (not #14)
-#12 := (< f4 f5)
-#10 := (< f3 f4)
-#13 := (and #10 #12)
-#16 := (implies #13 #15)
-#17 := (not #16)
-#80 := (iff #17 #77)
-#35 := (not #13)
-#36 := (or #35 #15)
-#39 := (not #36)
-#78 := (iff #39 #77)
-#75 := (iff #36 #74)
-#72 := (iff #15 #63)
-#67 := (not #64)
-#70 := (iff #67 #63)
-#71 := [rewrite]: #70
-#68 := (iff #15 #67)
-#65 := (iff #14 #64)
-#66 := [rewrite]: #65
-#69 := [monotonicity #66]: #68
-#73 := [trans #69 #71]: #72
-#60 := (iff #35 #59)
-#57 := (iff #13 #56)
-#54 := (iff #12 #53)
-#55 := [rewrite]: #54
-#48 := (iff #10 #43)
-#49 := [rewrite]: #48
-#58 := [monotonicity #49 #55]: #57
-#61 := [monotonicity #58]: #60
-#76 := [monotonicity #61 #73]: #75
+9e71fbaeab4696b5dac5d3a07643d4cf5689f72a 85 0
+#2 := false
+decl f8 :: (-> S3 S2 S4)
+decl f4 :: S2
+#9 := f4
+decl f6 :: S3
+#12 := f6
+#15 := (f8 f6 f4)
+decl f5 :: (-> S3 S2 S4 S2 S4)
+decl f7 :: S4
+#13 := f7
+decl f3 :: S2
+#8 := f3
+#14 := (f5 f6 f3 f7 f4)
+#16 := (= #14 #15)
+#161 := (= f7 #14)
+#10 := (= f3 f4)
+#248 := (ite #10 #161 #16)
+#252 := (not #248)
+#59 := (not #16)
+#52 := (or #10 #16)
+#55 := (not #52)
+#11 := (not #10)
+#17 := (implies #11 #16)
+#18 := (not #17)
+#56 := (iff #18 #55)
+#53 := (iff #17 #52)
+#54 := [rewrite]: #53
+#57 := [monotonicity #54]: #56
+#51 := [asserted]: #18
+#60 := [mp #51 #57]: #55
+#61 := [not-or-elim #60]: #59
+#58 := [not-or-elim #60]: #11
+#254 := (or #252 #10 #16)
+#251 := [def-axiom]: #254
+#162 := [unit-resolution #251 #58 #61]: #252
+#28 := (:var 0 S2)
+#27 := (:var 1 S4)
+#26 := (:var 2 S2)
+#25 := (:var 3 S3)
+#29 := (f5 #25 #26 #27 #28)
+#586 := (pattern #29)
+#31 := (f8 #25 #28)
+#83 := (= #29 #31)
+#86 := (= #27 #29)
+#70 := (= #26 #28)
+#93 := (ite #70 #86 #83)
+#587 := (forall (vars (?v0 S3) (?v1 S2) (?v2 S4) (?v3 S2)) (:pat #586) #93)
+#100 := (forall (vars (?v0 S3) (?v1 S2) (?v2 S4) (?v3 S2)) #93)
+#590 := (iff #100 #587)
+#588 := (iff #93 #93)
+#589 := [refl]: #588
+#591 := [quant-intro #589]: #590
+#74 := (ite #70 #27 #31)
+#77 := (= #29 #74)
+#80 := (forall (vars (?v0 S3) (?v1 S2) (?v2 S4) (?v3 S2)) #77)
+#101 := (iff #80 #100)
+#94 := (iff #77 #93)
+#99 := [rewrite]: #94
+#102 := [quant-intro #99]: #101
+#91 := (~ #80 #80)
+#90 := (~ #77 #77)
+#87 := [refl]: #90
+#92 := [nnf-pos #87]: #91
+#30 := (= #28 #26)
+#32 := (ite #30 #27 #31)
+#33 := (= #29 #32)
+#34 := (forall (vars (?v0 S3) (?v1 S2) (?v2 S4) (?v3 S2)) #33)
+#81 := (iff #34 #80)
+#78 := (iff #33 #77)
+#75 := (= #32 #74)
+#72 := (iff #30 #70)
+#73 := [rewrite]: #72
+#76 := [monotonicity #73]: #75
 #79 := [monotonicity #76]: #78
-#40 := (iff #17 #39)
-#37 := (iff #16 #36)
-#38 := [rewrite]: #37
-#41 := [monotonicity #38]: #40
-#81 := [trans #41 #79]: #80
-#34 := [asserted]: #17
-#82 := [mp #34 #81]: #77
-#86 := [not-or-elim #82]: #64
-#83 := [not-or-elim #82]: #56
-#84 := [and-elim #83]: #43
-#85 := [and-elim #83]: #53
-[th-lemma #85 #84 #86]: false
-unsat
-003bb45597da3e4b1800d61bab0b4e1d95dbdf99 144 0
+#82 := [quant-intro #79]: #81
+#69 := [asserted]: #34
+#85 := [mp #69 #82]: #80
+#88 := [mp~ #85 #92]: #80
+#103 := [mp #88 #102]: #100
+#592 := [mp #103 #591]: #587
+#163 := (not #587)
+#250 := (or #163 #248)
+#241 := [quant-inst]: #250
+[unit-resolution #241 #592 #162]: false
+unsat
+acd9894f281a06eeaf416c1e8c82c6d84e7d6ad1 144 0
 #2 := false
 decl f11 :: S3
 #16 := f11
@@ -50444,393 +50581,7 @@
 #432 := [unit-resolution #232 #431]: #301
 [unit-resolution #432 #433]: false
 unsat
-6cc8ed53fe294f253a561b590f79ef0e0271d1c2 50 0
-#2 := false
-decl f3 :: (-> S2 S3 S4 S3 S4)
-#15 := (:var 1 S3)
-#16 := (:var 0 S4)
-#14 := (:var 2 S2)
-#17 := (f3 #14 #15 #16 #15)
-#571 := (pattern #17)
-#54 := (= #16 #17)
-#572 := (forall (vars (?v0 S2) (?v1 S3) (?v2 S4)) (:pat #571) #54)
-#58 := (forall (vars (?v0 S2) (?v1 S3) (?v2 S4)) #54)
-#575 := (iff #58 #572)
-#573 := (iff #54 #54)
-#574 := [refl]: #573
-#576 := [quant-intro #574]: #575
-#87 := (~ #58 #58)
-#85 := (~ #54 #54)
-#86 := [refl]: #85
-#88 := [nnf-pos #86]: #87
-#18 := (= #17 #16)
-#19 := (forall (vars (?v0 S2) (?v1 S3) (?v2 S4)) #18)
-#59 := (iff #19 #58)
-#56 := (iff #18 #54)
-#57 := [rewrite]: #56
-#60 := [quant-intro #57]: #59
-#53 := [asserted]: #19
-#63 := [mp #53 #60]: #58
-#79 := [mp~ #63 #88]: #58
-#577 := [mp #79 #576]: #572
-decl f5 :: S3
-#9 := f5
-decl f6 :: S4
-#10 := f6
-decl f4 :: S2
-#8 := f4
-#11 := (f3 f4 f5 f6 f5)
-#47 := (= f6 #11)
-#50 := (not #47)
-#12 := (= #11 f6)
-#13 := (not #12)
-#51 := (iff #13 #50)
-#48 := (iff #12 #47)
-#49 := [rewrite]: #48
-#52 := [monotonicity #49]: #51
-#46 := [asserted]: #13
-#55 := [mp #46 #52]: #50
-#154 := (not #572)
-#241 := (or #154 #47)
-#155 := [quant-inst]: #241
-[unit-resolution #155 #55 #577]: false
-unsat
-31b5dadcaa7e7a3e69848f4809b04b844a6e8b56 144 0
-#2 := false
-decl f12 :: S3
-#17 := f12
-decl f9 :: S3
-#10 := f9
-#23 := (= f9 f12)
-decl f3 :: (-> S2 S3)
-decl f4 :: (-> S4 S2)
-decl f5 :: (-> S5 S2 S4)
-decl f7 :: (-> S5 S3 S2)
-decl f11 :: S5
-#16 := f11
-#18 := (f7 f11 f12)
-decl f10 :: S5
-#15 := f10
-#19 := (f5 f10 #18)
-#20 := (f4 #19)
-#21 := (f3 #20)
-decl f8 :: S5
-#9 := f8
-#11 := (f7 f8 f9)
-decl f6 :: S5
-#8 := f6
-#12 := (f5 f6 #11)
-#13 := (f4 #12)
-#14 := (f3 #13)
-#22 := (= #14 #21)
-#24 := (iff #22 #23)
-#315 := (= #21 f12)
-#626 := (f3 #18)
-#312 := (= #626 f12)
-#627 := (= f12 #626)
-#27 := (:var 0 S3)
-#26 := (:var 1 S5)
-#28 := (f7 #26 #27)
-#630 := (pattern #28)
-#37 := (f3 #28)
-#92 := (= #27 #37)
-#644 := (forall (vars (?v0 S5) (?v1 S3)) (:pat #630) #92)
-#96 := (forall (vars (?v0 S5) (?v1 S3)) #92)
-#647 := (iff #96 #644)
-#645 := (iff #92 #92)
-#646 := [refl]: #645
-#648 := [quant-intro #646]: #647
-#131 := (~ #96 #96)
-#145 := (~ #92 #92)
-#146 := [refl]: #145
-#132 := [nnf-pos #146]: #131
-#38 := (= #37 #27)
-#39 := (forall (vars (?v0 S5) (?v1 S3)) #38)
-#97 := (iff #39 #96)
-#94 := (iff #38 #92)
-#95 := [rewrite]: #94
-#98 := [quant-intro #95]: #97
-#91 := [asserted]: #39
-#101 := [mp #91 #98]: #96
-#147 := [mp~ #101 #132]: #96
-#649 := [mp #147 #648]: #644
-#290 := (not #644)
-#277 := (or #290 #627)
-#282 := [quant-inst]: #277
-#323 := [unit-resolution #282 #649]: #627
-#313 := [symm #323]: #312
-#602 := (= #21 #626)
-#601 := (= #20 #18)
-#607 := (= #18 #20)
-#32 := (:var 0 S2)
-#33 := (f5 #26 #32)
-#637 := (pattern #33)
-#40 := (f4 #33)
-#100 := (= #32 #40)
-#650 := (forall (vars (?v0 S5) (?v1 S2)) (:pat #637) #100)
-#104 := (forall (vars (?v0 S5) (?v1 S2)) #100)
-#653 := (iff #104 #650)
-#651 := (iff #100 #100)
-#652 := [refl]: #651
-#654 := [quant-intro #652]: #653
-#133 := (~ #104 #104)
-#148 := (~ #100 #100)
-#149 := [refl]: #148
-#134 := [nnf-pos #149]: #133
-#41 := (= #40 #32)
-#42 := (forall (vars (?v0 S5) (?v1 S2)) #41)
-#105 := (iff #42 #104)
-#102 := (iff #41 #100)
-#103 := [rewrite]: #102
-#106 := [quant-intro #103]: #105
-#99 := [asserted]: #42
-#109 := [mp #99 #106]: #104
-#150 := [mp~ #109 #134]: #104
-#655 := [mp #150 #654]: #650
-#267 := (not #650)
-#606 := (or #267 #607)
-#612 := [quant-inst]: #606
-#597 := [unit-resolution #612 #655]: #607
-#598 := [symm #597]: #601
-#311 := [monotonicity #598]: #602
-#593 := [trans #311 #313]: #315
-#587 := (= #14 f9)
-#306 := (f3 #11)
-#585 := (= #306 f9)
-#285 := (= f9 #306)
-#291 := (or #290 #285)
-#625 := [quant-inst]: #291
-#594 := [unit-resolution #625 #649]: #285
-#586 := [symm #594]: #585
-#592 := (= #14 #306)
-#591 := (= #13 #11)
-#620 := (= #11 #13)
-#268 := (or #267 #620)
-#269 := [quant-inst]: #268
-#307 := [unit-resolution #269 #655]: #620
-#595 := [symm #307]: #591
-#596 := [monotonicity #595]: #592
-#582 := [trans #596 #586]: #587
-#583 := [monotonicity #582 #593]: #24
-#301 := (not #23)
-#71 := (not #22)
-#588 := (iff #71 #301)
-#589 := [monotonicity #583]: #588
-#220 := [hypothesis]: #71
-#584 := [mp #220 #589]: #301
-#300 := (or #23 #22)
-#72 := (iff #23 #71)
-#25 := (not #24)
-#73 := (iff #25 #72)
-#74 := [rewrite]: #73
-#70 := [asserted]: #25
-#77 := [mp #70 #74]: #72
-#212 := (not #72)
-#299 := (or #23 #22 #212)
-#213 := [def-axiom]: #299
-#214 := [unit-resolution #213 #77]: #300
-#599 := [unit-resolution #214 #220]: #23
-#590 := [unit-resolution #599 #584]: false
-#431 := [lemma #590]: #22
-#433 := [mp #431 #583]: #23
-#304 := (or #301 #71)
-#292 := (or #301 #71 #212)
-#303 := [def-axiom]: #292
-#232 := [unit-resolution #303 #77]: #304
-#432 := [unit-resolution #232 #431]: #301
-[unit-resolution #432 #433]: false
-unsat
-d2a264ef3e43d9b7d009fa11ec172212f0bd6279 85 0
-#2 := false
-decl f8 :: (-> S3 S2 S4)
-decl f4 :: S2
-#9 := f4
-decl f6 :: S3
-#12 := f6
-#15 := (f8 f6 f4)
-decl f5 :: (-> S3 S2 S4 S2 S4)
-decl f7 :: S4
-#13 := f7
-decl f3 :: S2
-#8 := f3
-#14 := (f5 f6 f3 f7 f4)
-#16 := (= #14 #15)
-#161 := (= f7 #14)
-#10 := (= f3 f4)
-#248 := (ite #10 #161 #16)
-#252 := (not #248)
-#59 := (not #16)
-#52 := (or #10 #16)
-#55 := (not #52)
-#11 := (not #10)
-#17 := (implies #11 #16)
-#18 := (not #17)
-#56 := (iff #18 #55)
-#53 := (iff #17 #52)
-#54 := [rewrite]: #53
-#57 := [monotonicity #54]: #56
-#51 := [asserted]: #18
-#60 := [mp #51 #57]: #55
-#61 := [not-or-elim #60]: #59
-#58 := [not-or-elim #60]: #11
-#254 := (or #252 #10 #16)
-#251 := [def-axiom]: #254
-#162 := [unit-resolution #251 #58 #61]: #252
-#28 := (:var 0 S2)
-#27 := (:var 1 S4)
-#26 := (:var 2 S2)
-#25 := (:var 3 S3)
-#29 := (f5 #25 #26 #27 #28)
-#586 := (pattern #29)
-#31 := (f8 #25 #28)
-#83 := (= #29 #31)
-#86 := (= #27 #29)
-#70 := (= #26 #28)
-#93 := (ite #70 #86 #83)
-#587 := (forall (vars (?v0 S3) (?v1 S2) (?v2 S4) (?v3 S2)) (:pat #586) #93)
-#100 := (forall (vars (?v0 S3) (?v1 S2) (?v2 S4) (?v3 S2)) #93)
-#590 := (iff #100 #587)
-#588 := (iff #93 #93)
-#589 := [refl]: #588
-#591 := [quant-intro #589]: #590
-#74 := (ite #70 #27 #31)
-#77 := (= #29 #74)
-#80 := (forall (vars (?v0 S3) (?v1 S2) (?v2 S4) (?v3 S2)) #77)
-#101 := (iff #80 #100)
-#94 := (iff #77 #93)
-#99 := [rewrite]: #94
-#102 := [quant-intro #99]: #101
-#91 := (~ #80 #80)
-#90 := (~ #77 #77)
-#87 := [refl]: #90
-#92 := [nnf-pos #87]: #91
-#30 := (= #28 #26)
-#32 := (ite #30 #27 #31)
-#33 := (= #29 #32)
-#34 := (forall (vars (?v0 S3) (?v1 S2) (?v2 S4) (?v3 S2)) #33)
-#81 := (iff #34 #80)
-#78 := (iff #33 #77)
-#75 := (= #32 #74)
-#72 := (iff #30 #70)
-#73 := [rewrite]: #72
-#76 := [monotonicity #73]: #75
-#79 := [monotonicity #76]: #78
-#82 := [quant-intro #79]: #81
-#69 := [asserted]: #34
-#85 := [mp #69 #82]: #80
-#88 := [mp~ #85 #92]: #80
-#103 := [mp #88 #102]: #100
-#592 := [mp #103 #591]: #587
-#163 := (not #587)
-#250 := (or #163 #248)
-#241 := [quant-inst]: #250
-[unit-resolution #241 #592 #162]: false
-unsat
-87752431ac232f724f4719a9dd746411dc8e0334 103 0
-#2 := false
-decl f6 :: S3
-#9 := f6
-decl f5 :: S3
-#8 := f5
-#14 := (= f5 f6)
-decl f7 :: (-> S2 S3)
-decl f4 :: (-> S3 S3 S2)
-#10 := (f4 f5 f6)
-#12 := (f7 #10)
-decl f3 :: (-> S2 S3)
-#11 := (f3 #10)
-#13 := (= #11 #12)
-#15 := (iff #13 #14)
-#558 := (iff #14 #13)
-#241 := (= f6 #12)
-#18 := (:var 0 S3)
-#17 := (:var 1 S3)
-#19 := (f4 #17 #18)
-#569 := (pattern #19)
-#23 := (f7 #19)
-#62 := (= #18 #23)
-#576 := (forall (vars (?v0 S3) (?v1 S3)) (:pat #569) #62)
-#66 := (forall (vars (?v0 S3) (?v1 S3)) #62)
-#579 := (iff #66 #576)
-#577 := (iff #62 #62)
-#578 := [refl]: #577
-#580 := [quant-intro #578]: #579
-#83 := (~ #66 #66)
-#82 := (~ #62 #62)
-#80 := [refl]: #82
-#84 := [nnf-pos #80]: #83
-#24 := (= #23 #18)
-#25 := (forall (vars (?v0 S3) (?v1 S3)) #24)
-#67 := (iff #25 #66)
-#64 := (iff #24 #62)
-#65 := [rewrite]: #64
-#68 := [quant-intro #65]: #67
-#61 := [asserted]: #25
-#71 := [mp #61 #68]: #66
-#77 := [mp~ #71 #84]: #66
-#581 := [mp #77 #580]: #576
-#350 := (not #576)
-#557 := (or #350 #241)
-#229 := [quant-inst]: #557
-#562 := [unit-resolution #229 #581]: #241
-#244 := (= f5 #11)
-#20 := (f3 #19)
-#54 := (= #17 #20)
-#570 := (forall (vars (?v0 S3) (?v1 S3)) (:pat #569) #54)
-#58 := (forall (vars (?v0 S3) (?v1 S3)) #54)
-#573 := (iff #58 #570)
-#571 := (iff #54 #54)
-#572 := [refl]: #571
-#574 := [quant-intro #572]: #573
-#91 := (~ #58 #58)
-#89 := (~ #54 #54)
-#90 := [refl]: #89
-#92 := [nnf-pos #90]: #91
-#21 := (= #20 #17)
-#22 := (forall (vars (?v0 S3) (?v1 S3)) #21)
-#59 := (iff #22 #58)
-#56 := (iff #21 #54)
-#57 := [rewrite]: #56
-#60 := [quant-intro #57]: #59
-#53 := [asserted]: #22
-#63 := [mp #53 #60]: #58
-#81 := [mp~ #63 #92]: #58
-#575 := [mp #81 #574]: #570
-#224 := (not #570)
-#561 := (or #224 #244)
-#563 := [quant-inst]: #561
-#568 := [unit-resolution #563 #575]: #244
-#216 := [monotonicity #568 #562]: #558
-#221 := [symm #216]: #15
-#240 := (not #14)
-#49 := (not #13)
-#559 := (iff #49 #240)
-#217 := [monotonicity #221]: #559
-#230 := [hypothesis]: #49
-#560 := [mp #230 #217]: #240
-#239 := (or #14 #13)
-#50 := (iff #14 #49)
-#16 := (not #15)
-#51 := (iff #16 #50)
-#52 := [rewrite]: #51
-#48 := [asserted]: #16
-#55 := [mp #48 #52]: #50
-#151 := (not #50)
-#238 := (or #14 #13 #151)
-#152 := [def-axiom]: #238
-#153 := [unit-resolution #152 #55]: #239
-#564 := [unit-resolution #153 #230]: #14
-#201 := [unit-resolution #564 #560]: false
-#544 := [lemma #201]: #13
-#206 := [mp #544 #221]: #14
-#243 := (or #240 #49)
-#231 := (or #240 #49 #151)
-#242 := [def-axiom]: #231
-#171 := [unit-resolution #242 #55]: #243
-#205 := [unit-resolution #171 #544]: #240
-[unit-resolution #205 #206]: false
-unsat
-13cd2a6082f8fe0947641619628aa7b793fa5eb0 158 0
+417188282427933be953d50eedb6f8d3636fdcb9 158 0
 #2 := false
 decl f5 :: (-> S3 S2 S4)
 decl f3 :: S2
@@ -50989,7 +50740,411 @@
 #73 := [not-or-elim #72]: #71
 [unit-resolution #73 #578]: false
 unsat
-de0be68d62a4eef58cc08ca9b43494f9219ad474 111 0
+866d440edf643384cbf5eede7548231cbd17d588 144 0
+#2 := false
+decl f12 :: S3
+#17 := f12
+decl f9 :: S3
+#10 := f9
+#23 := (= f9 f12)
+decl f3 :: (-> S2 S3)
+decl f4 :: (-> S4 S2)
+decl f5 :: (-> S5 S2 S4)
+decl f7 :: (-> S5 S3 S2)
+decl f11 :: S5
+#16 := f11
+#18 := (f7 f11 f12)
+decl f10 :: S5
+#15 := f10
+#19 := (f5 f10 #18)
+#20 := (f4 #19)
+#21 := (f3 #20)
+decl f8 :: S5
+#9 := f8
+#11 := (f7 f8 f9)
+decl f6 :: S5
+#8 := f6
+#12 := (f5 f6 #11)
+#13 := (f4 #12)
+#14 := (f3 #13)
+#22 := (= #14 #21)
+#24 := (iff #22 #23)
+#315 := (= #21 f12)
+#626 := (f3 #18)
+#312 := (= #626 f12)
+#627 := (= f12 #626)
+#27 := (:var 0 S3)
+#26 := (:var 1 S5)
+#28 := (f7 #26 #27)
+#630 := (pattern #28)
+#37 := (f3 #28)
+#92 := (= #27 #37)
+#644 := (forall (vars (?v0 S5) (?v1 S3)) (:pat #630) #92)
+#96 := (forall (vars (?v0 S5) (?v1 S3)) #92)
+#647 := (iff #96 #644)
+#645 := (iff #92 #92)
+#646 := [refl]: #645
+#648 := [quant-intro #646]: #647
+#131 := (~ #96 #96)
+#145 := (~ #92 #92)
+#146 := [refl]: #145
+#132 := [nnf-pos #146]: #131
+#38 := (= #37 #27)
+#39 := (forall (vars (?v0 S5) (?v1 S3)) #38)
+#97 := (iff #39 #96)
+#94 := (iff #38 #92)
+#95 := [rewrite]: #94
+#98 := [quant-intro #95]: #97
+#91 := [asserted]: #39
+#101 := [mp #91 #98]: #96
+#147 := [mp~ #101 #132]: #96
+#649 := [mp #147 #648]: #644
+#290 := (not #644)
+#277 := (or #290 #627)
+#282 := [quant-inst]: #277
+#323 := [unit-resolution #282 #649]: #627
+#313 := [symm #323]: #312
+#602 := (= #21 #626)
+#601 := (= #20 #18)
+#607 := (= #18 #20)
+#32 := (:var 0 S2)
+#33 := (f5 #26 #32)
+#637 := (pattern #33)
+#40 := (f4 #33)
+#100 := (= #32 #40)
+#650 := (forall (vars (?v0 S5) (?v1 S2)) (:pat #637) #100)
+#104 := (forall (vars (?v0 S5) (?v1 S2)) #100)
+#653 := (iff #104 #650)
+#651 := (iff #100 #100)
+#652 := [refl]: #651
+#654 := [quant-intro #652]: #653
+#133 := (~ #104 #104)
+#148 := (~ #100 #100)
+#149 := [refl]: #148
+#134 := [nnf-pos #149]: #133
+#41 := (= #40 #32)
+#42 := (forall (vars (?v0 S5) (?v1 S2)) #41)
+#105 := (iff #42 #104)
+#102 := (iff #41 #100)
+#103 := [rewrite]: #102
+#106 := [quant-intro #103]: #105
+#99 := [asserted]: #42
+#109 := [mp #99 #106]: #104
+#150 := [mp~ #109 #134]: #104
+#655 := [mp #150 #654]: #650
+#267 := (not #650)
+#606 := (or #267 #607)
+#612 := [quant-inst]: #606
+#597 := [unit-resolution #612 #655]: #607
+#598 := [symm #597]: #601
+#311 := [monotonicity #598]: #602
+#593 := [trans #311 #313]: #315
+#587 := (= #14 f9)
+#306 := (f3 #11)
+#585 := (= #306 f9)
+#285 := (= f9 #306)
+#291 := (or #290 #285)
+#625 := [quant-inst]: #291
+#594 := [unit-resolution #625 #649]: #285
+#586 := [symm #594]: #585
+#592 := (= #14 #306)
+#591 := (= #13 #11)
+#620 := (= #11 #13)
+#268 := (or #267 #620)
+#269 := [quant-inst]: #268
+#307 := [unit-resolution #269 #655]: #620
+#595 := [symm #307]: #591
+#596 := [monotonicity #595]: #592
+#582 := [trans #596 #586]: #587
+#583 := [monotonicity #582 #593]: #24
+#301 := (not #23)
+#71 := (not #22)
+#588 := (iff #71 #301)
+#589 := [monotonicity #583]: #588
+#220 := [hypothesis]: #71
+#584 := [mp #220 #589]: #301
+#300 := (or #23 #22)
+#72 := (iff #23 #71)
+#25 := (not #24)
+#73 := (iff #25 #72)
+#74 := [rewrite]: #73
+#70 := [asserted]: #25
+#77 := [mp #70 #74]: #72
+#212 := (not #72)
+#299 := (or #23 #22 #212)
+#213 := [def-axiom]: #299
+#214 := [unit-resolution #213 #77]: #300
+#599 := [unit-resolution #214 #220]: #23
+#590 := [unit-resolution #599 #584]: false
+#431 := [lemma #590]: #22
+#433 := [mp #431 #583]: #23
+#304 := (or #301 #71)
+#292 := (or #301 #71 #212)
+#303 := [def-axiom]: #292
+#232 := [unit-resolution #303 #77]: #304
+#432 := [unit-resolution #232 #431]: #301
+[unit-resolution #432 #433]: false
+unsat
+3e56e54d471720a3a5d996ce27f17fcb7694aeb0 72 0
+#2 := false
+decl f6 :: (-> S3 S2 S4 S3)
+#23 := (:var 0 S4)
+#22 := (:var 1 S2)
+#21 := (:var 2 S3)
+#24 := (f6 #21 #22 #23)
+#591 := (pattern #24)
+decl f5 :: (-> S3 S2 S4)
+#25 := (f5 #24 #22)
+#75 := (= #23 #25)
+#593 := (forall (vars (?v0 S3) (?v1 S2) (?v2 S4)) (:pat #591) #75)
+#78 := (forall (vars (?v0 S3) (?v1 S2) (?v2 S4)) #75)
+#592 := (iff #78 #593)
+#595 := (iff #593 #593)
+#596 := [rewrite]: #595
+#594 := [rewrite]: #592
+#597 := [trans #594 #596]: #592
+#109 := (~ #78 #78)
+#107 := (~ #75 #75)
+#108 := [refl]: #107
+#110 := [nnf-pos #108]: #109
+#26 := (= #25 #23)
+#27 := (forall (vars (?v0 S3) (?v1 S2) (?v2 S4)) #26)
+#79 := (iff #27 #78)
+#76 := (iff #26 #75)
+#77 := [rewrite]: #76
+#80 := [quant-intro #77]: #79
+#74 := [asserted]: #27
+#83 := [mp #74 #80]: #78
+#101 := [mp~ #83 #110]: #78
+#598 := [mp #101 #597]: #593
+decl f4 :: S2
+#9 := f4
+decl f9 :: S4
+#15 := f9
+decl f8 :: S4
+#13 := f8
+decl f3 :: S2
+#8 := f3
+decl f7 :: S3
+#12 := f7
+#14 := (f6 f7 f3 f8)
+#16 := (f6 #14 f4 f9)
+#17 := (f5 #16 f4)
+#56 := (= f9 #17)
+#71 := (not #56)
+#10 := (= f3 f4)
+#62 := (or #10 #56)
+#67 := (not #62)
+#18 := (= #17 f9)
+#11 := (not #10)
+#19 := (implies #11 #18)
+#20 := (not #19)
+#68 := (iff #20 #67)
+#65 := (iff #19 #62)
+#59 := (implies #11 #56)
+#63 := (iff #59 #62)
+#64 := [rewrite]: #63
+#60 := (iff #19 #59)
+#57 := (iff #18 #56)
+#58 := [rewrite]: #57
+#61 := [monotonicity #58]: #60
+#66 := [trans #61 #64]: #65
+#69 := [monotonicity #66]: #68
+#55 := [asserted]: #20
+#72 := [mp #55 #69]: #67
+#73 := [not-or-elim #72]: #71
+#175 := (not #593)
+#264 := (or #175 #56)
+#265 := [quant-inst]: #264
+[unit-resolution #265 #73 #598]: false
+unsat
+2ecc5cb618eddd0d10a797b2211747ef8a2776e2 103 0
+#2 := false
+decl f6 :: S3
+#9 := f6
+decl f5 :: S3
+#8 := f5
+#14 := (= f5 f6)
+decl f7 :: (-> S2 S3)
+decl f4 :: (-> S3 S3 S2)
+#10 := (f4 f5 f6)
+#12 := (f7 #10)
+decl f3 :: (-> S2 S3)
+#11 := (f3 #10)
+#13 := (= #11 #12)
+#15 := (iff #13 #14)
+#558 := (iff #14 #13)
+#241 := (= f6 #12)
+#18 := (:var 0 S3)
+#17 := (:var 1 S3)
+#19 := (f4 #17 #18)
+#569 := (pattern #19)
+#23 := (f7 #19)
+#62 := (= #18 #23)
+#576 := (forall (vars (?v0 S3) (?v1 S3)) (:pat #569) #62)
+#66 := (forall (vars (?v0 S3) (?v1 S3)) #62)
+#579 := (iff #66 #576)
+#577 := (iff #62 #62)
+#578 := [refl]: #577
+#580 := [quant-intro #578]: #579
+#83 := (~ #66 #66)
+#82 := (~ #62 #62)
+#80 := [refl]: #82
+#84 := [nnf-pos #80]: #83
+#24 := (= #23 #18)
+#25 := (forall (vars (?v0 S3) (?v1 S3)) #24)
+#67 := (iff #25 #66)
+#64 := (iff #24 #62)
+#65 := [rewrite]: #64
+#68 := [quant-intro #65]: #67
+#61 := [asserted]: #25
+#71 := [mp #61 #68]: #66
+#77 := [mp~ #71 #84]: #66
+#581 := [mp #77 #580]: #576
+#350 := (not #576)
+#557 := (or #350 #241)
+#229 := [quant-inst]: #557
+#562 := [unit-resolution #229 #581]: #241
+#244 := (= f5 #11)
+#20 := (f3 #19)
+#54 := (= #17 #20)
+#570 := (forall (vars (?v0 S3) (?v1 S3)) (:pat #569) #54)
+#58 := (forall (vars (?v0 S3) (?v1 S3)) #54)
+#573 := (iff #58 #570)
+#571 := (iff #54 #54)
+#572 := [refl]: #571
+#574 := [quant-intro #572]: #573
+#91 := (~ #58 #58)
+#89 := (~ #54 #54)
+#90 := [refl]: #89
+#92 := [nnf-pos #90]: #91
+#21 := (= #20 #17)
+#22 := (forall (vars (?v0 S3) (?v1 S3)) #21)
+#59 := (iff #22 #58)
+#56 := (iff #21 #54)
+#57 := [rewrite]: #56
+#60 := [quant-intro #57]: #59
+#53 := [asserted]: #22
+#63 := [mp #53 #60]: #58
+#81 := [mp~ #63 #92]: #58
+#575 := [mp #81 #574]: #570
+#224 := (not #570)
+#561 := (or #224 #244)
+#563 := [quant-inst]: #561
+#568 := [unit-resolution #563 #575]: #244
+#216 := [monotonicity #568 #562]: #558
+#221 := [symm #216]: #15
+#240 := (not #14)
+#49 := (not #13)
+#559 := (iff #49 #240)
+#217 := [monotonicity #221]: #559
+#230 := [hypothesis]: #49
+#560 := [mp #230 #217]: #240
+#239 := (or #14 #13)
+#50 := (iff #14 #49)
+#16 := (not #15)
+#51 := (iff #16 #50)
+#52 := [rewrite]: #51
+#48 := [asserted]: #16
+#55 := [mp #48 #52]: #50
+#151 := (not #50)
+#238 := (or #14 #13 #151)
+#152 := [def-axiom]: #238
+#153 := [unit-resolution #152 #55]: #239
+#564 := [unit-resolution #153 #230]: #14
+#201 := [unit-resolution #564 #560]: false
+#544 := [lemma #201]: #13
+#206 := [mp #544 #221]: #14
+#243 := (or #240 #49)
+#231 := (or #240 #49 #151)
+#242 := [def-axiom]: #231
+#171 := [unit-resolution #242 #55]: #243
+#205 := [unit-resolution #171 #544]: #240
+[unit-resolution #205 #206]: false
+unsat
+40581b0e6cc161d835ae1db56e86336b57a7ee1b 81 0
+#2 := false
+decl f5 :: (-> S3 S2 S4)
+decl f3 :: S2
+#8 := f3
+decl f6 :: (-> S3 S2 S4 S3)
+decl f9 :: S4
+#14 := f9
+decl f4 :: S2
+#9 := f4
+decl f8 :: S4
+#12 := f8
+decl f7 :: S3
+#11 := f7
+#13 := (f6 f7 f3 f8)
+#15 := (f6 #13 f4 f9)
+#16 := (f5 #15 f3)
+#55 := (= f9 #16)
+#261 := (f5 #15 f4)
+#228 := (= #261 #16)
+#566 := (= #16 #261)
+#10 := (= f3 f4)
+#61 := (not #10)
+#62 := (or #61 #55)
+#67 := (not #62)
+#17 := (= #16 f9)
+#18 := (implies #10 #17)
+#19 := (not #18)
+#68 := (iff #19 #67)
+#65 := (iff #18 #62)
+#58 := (implies #10 #55)
+#63 := (iff #58 #62)
+#64 := [rewrite]: #63
+#59 := (iff #18 #58)
+#56 := (iff #17 #55)
+#57 := [rewrite]: #56
+#60 := [monotonicity #57]: #59
+#66 := [trans #60 #64]: #65
+#69 := [monotonicity #66]: #68
+#54 := [asserted]: #19
+#72 := [mp #54 #69]: #67
+#70 := [not-or-elim #72]: #10
+#227 := [monotonicity #70]: #566
+#229 := [symm #227]: #228
+#175 := (= f9 #261)
+#22 := (:var 0 S4)
+#21 := (:var 1 S2)
+#20 := (:var 2 S3)
+#23 := (f6 #20 #21 #22)
+#591 := (pattern #23)
+#24 := (f5 #23 #21)
+#75 := (= #22 #24)
+#593 := (forall (vars (?v0 S3) (?v1 S2) (?v2 S4)) (:pat #591) #75)
+#78 := (forall (vars (?v0 S3) (?v1 S2) (?v2 S4)) #75)
+#592 := (iff #78 #593)
+#595 := (iff #593 #593)
+#596 := [rewrite]: #595
+#594 := [rewrite]: #592
+#597 := [trans #594 #596]: #592
+#109 := (~ #78 #78)
+#107 := (~ #75 #75)
+#108 := [refl]: #107
+#110 := [nnf-pos #108]: #109
+#25 := (= #24 #22)
+#26 := (forall (vars (?v0 S3) (?v1 S2) (?v2 S4)) #25)
+#79 := (iff #26 #78)
+#76 := (iff #25 #75)
+#77 := [rewrite]: #76
+#80 := [quant-intro #77]: #79
+#74 := [asserted]: #26
+#83 := [mp #74 #80]: #78
+#101 := [mp~ #83 #110]: #78
+#598 := [mp #101 #597]: #593
+#262 := (not #593)
+#266 := (or #262 #175)
+#263 := [quant-inst]: #266
+#223 := [unit-resolution #263 #598]: #175
+#230 := [trans #223 #229]: #55
+#71 := (not #55)
+#73 := [not-or-elim #72]: #71
+[unit-resolution #73 #230]: false
+unsat
+7886f0fda259625a913921a1bd89d90840edec3d 111 0
 #2 := false
 decl f9 :: (-> S2 S3)
 decl f7 :: S2
@@ -51101,280 +51256,7 @@
 #66 := [not-or-elim #63]: #65
 [unit-resolution #66 #563]: false
 unsat
-c3052f64b6a04dd1c8c5afaf04fa56dc411bc19c 72 0
-#2 := false
-decl f6 :: (-> S3 S2 S4 S3)
-#23 := (:var 0 S4)
-#22 := (:var 1 S2)
-#21 := (:var 2 S3)
-#24 := (f6 #21 #22 #23)
-#591 := (pattern #24)
-decl f5 :: (-> S3 S2 S4)
-#25 := (f5 #24 #22)
-#75 := (= #23 #25)
-#593 := (forall (vars (?v0 S3) (?v1 S2) (?v2 S4)) (:pat #591) #75)
-#78 := (forall (vars (?v0 S3) (?v1 S2) (?v2 S4)) #75)
-#592 := (iff #78 #593)
-#595 := (iff #593 #593)
-#596 := [rewrite]: #595
-#594 := [rewrite]: #592
-#597 := [trans #594 #596]: #592
-#109 := (~ #78 #78)
-#107 := (~ #75 #75)
-#108 := [refl]: #107
-#110 := [nnf-pos #108]: #109
-#26 := (= #25 #23)
-#27 := (forall (vars (?v0 S3) (?v1 S2) (?v2 S4)) #26)
-#79 := (iff #27 #78)
-#76 := (iff #26 #75)
-#77 := [rewrite]: #76
-#80 := [quant-intro #77]: #79
-#74 := [asserted]: #27
-#83 := [mp #74 #80]: #78
-#101 := [mp~ #83 #110]: #78
-#598 := [mp #101 #597]: #593
-decl f4 :: S2
-#9 := f4
-decl f9 :: S4
-#15 := f9
-decl f8 :: S4
-#13 := f8
-decl f3 :: S2
-#8 := f3
-decl f7 :: S3
-#12 := f7
-#14 := (f6 f7 f3 f8)
-#16 := (f6 #14 f4 f9)
-#17 := (f5 #16 f4)
-#56 := (= f9 #17)
-#71 := (not #56)
-#10 := (= f3 f4)
-#62 := (or #10 #56)
-#67 := (not #62)
-#18 := (= #17 f9)
-#11 := (not #10)
-#19 := (implies #11 #18)
-#20 := (not #19)
-#68 := (iff #20 #67)
-#65 := (iff #19 #62)
-#59 := (implies #11 #56)
-#63 := (iff #59 #62)
-#64 := [rewrite]: #63
-#60 := (iff #19 #59)
-#57 := (iff #18 #56)
-#58 := [rewrite]: #57
-#61 := [monotonicity #58]: #60
-#66 := [trans #61 #64]: #65
-#69 := [monotonicity #66]: #68
-#55 := [asserted]: #20
-#72 := [mp #55 #69]: #67
-#73 := [not-or-elim #72]: #71
-#175 := (not #593)
-#264 := (or #175 #56)
-#265 := [quant-inst]: #264
-[unit-resolution #265 #73 #598]: false
-unsat
-2dd7e2139c57ac13e3558d5a7c2ee7d6b5a8a254 81 0
-#2 := false
-decl f5 :: (-> S3 S2 S4)
-decl f3 :: S2
-#8 := f3
-decl f6 :: (-> S3 S2 S4 S3)
-decl f9 :: S4
-#14 := f9
-decl f4 :: S2
-#9 := f4
-decl f8 :: S4
-#12 := f8
-decl f7 :: S3
-#11 := f7
-#13 := (f6 f7 f3 f8)
-#15 := (f6 #13 f4 f9)
-#16 := (f5 #15 f3)
-#55 := (= f9 #16)
-#261 := (f5 #15 f4)
-#228 := (= #261 #16)
-#566 := (= #16 #261)
-#10 := (= f3 f4)
-#61 := (not #10)
-#62 := (or #61 #55)
-#67 := (not #62)
-#17 := (= #16 f9)
-#18 := (implies #10 #17)
-#19 := (not #18)
-#68 := (iff #19 #67)
-#65 := (iff #18 #62)
-#58 := (implies #10 #55)
-#63 := (iff #58 #62)
-#64 := [rewrite]: #63
-#59 := (iff #18 #58)
-#56 := (iff #17 #55)
-#57 := [rewrite]: #56
-#60 := [monotonicity #57]: #59
-#66 := [trans #60 #64]: #65
-#69 := [monotonicity #66]: #68
-#54 := [asserted]: #19
-#72 := [mp #54 #69]: #67
-#70 := [not-or-elim #72]: #10
-#227 := [monotonicity #70]: #566
-#229 := [symm #227]: #228
-#175 := (= f9 #261)
-#22 := (:var 0 S4)
-#21 := (:var 1 S2)
-#20 := (:var 2 S3)
-#23 := (f6 #20 #21 #22)
-#591 := (pattern #23)
-#24 := (f5 #23 #21)
-#75 := (= #22 #24)
-#593 := (forall (vars (?v0 S3) (?v1 S2) (?v2 S4)) (:pat #591) #75)
-#78 := (forall (vars (?v0 S3) (?v1 S2) (?v2 S4)) #75)
-#592 := (iff #78 #593)
-#595 := (iff #593 #593)
-#596 := [rewrite]: #595
-#594 := [rewrite]: #592
-#597 := [trans #594 #596]: #592
-#109 := (~ #78 #78)
-#107 := (~ #75 #75)
-#108 := [refl]: #107
-#110 := [nnf-pos #108]: #109
-#25 := (= #24 #22)
-#26 := (forall (vars (?v0 S3) (?v1 S2) (?v2 S4)) #25)
-#79 := (iff #26 #78)
-#76 := (iff #25 #75)
-#77 := [rewrite]: #76
-#80 := [quant-intro #77]: #79
-#74 := [asserted]: #26
-#83 := [mp #74 #80]: #78
-#101 := [mp~ #83 #110]: #78
-#598 := [mp #101 #597]: #593
-#262 := (not #593)
-#266 := (or #262 #175)
-#263 := [quant-inst]: #266
-#223 := [unit-resolution #263 #598]: #175
-#230 := [trans #223 #229]: #55
-#71 := (not #55)
-#73 := [not-or-elim #72]: #71
-[unit-resolution #73 #230]: false
-unsat
-c992b1f07c8690f317843ec597ee745825b8d2b2 117 0
-#2 := false
-decl f6 :: (-> S3 S3 S2)
-decl f3 :: (-> S2 S3)
-decl f4 :: S2
-#8 := f4
-#9 := (f3 f4)
-decl f5 :: (-> S2 S3)
-#10 := (f5 f4)
-#12 := (f6 #10 #9)
-#13 := (= f4 #12)
-#349 := (f6 #9 #10)
-#550 := (= #349 #12)
-#549 := (= #12 #349)
-#11 := (= #9 #10)
-#243 := (f3 #12)
-#543 := (= #243 #10)
-#240 := (= #10 #243)
-#17 := (:var 0 S3)
-#16 := (:var 1 S3)
-#18 := (f6 #16 #17)
-#568 := (pattern #18)
-#19 := (f3 #18)
-#53 := (= #16 #19)
-#569 := (forall (vars (?v0 S3) (?v1 S3)) (:pat #568) #53)
-#57 := (forall (vars (?v0 S3) (?v1 S3)) #53)
-#572 := (iff #57 #569)
-#570 := (iff #53 #53)
-#571 := [refl]: #570
-#573 := [quant-intro #571]: #572
-#90 := (~ #57 #57)
-#88 := (~ #53 #53)
-#89 := [refl]: #88
-#91 := [nnf-pos #89]: #90
-#20 := (= #19 #16)
-#21 := (forall (vars (?v0 S3) (?v1 S3)) #20)
-#58 := (iff #21 #57)
-#55 := (iff #20 #53)
-#56 := [rewrite]: #55
-#59 := [quant-intro #56]: #58
-#52 := [asserted]: #21
-#62 := [mp #52 #59]: #57
-#80 := [mp~ #62 #91]: #57
-#574 := [mp #80 #573]: #569
-#560 := (not #569)
-#562 := (or #560 #240)
-#217 := [quant-inst]: #562
-#220 := [unit-resolution #217 #574]: #240
-#204 := [symm #220]: #543
-#559 := (= #9 #243)
-#558 := (= #243 #9)
-#557 := (= #12 f4)
-#48 := (not #11)
-#564 := [hypothesis]: #48
-#238 := (or #13 #11)
-#49 := (iff #13 #48)
-#14 := (iff #11 #13)
-#15 := (not #14)
-#50 := (iff #15 #49)
-#51 := [rewrite]: #50
-#47 := [asserted]: #15
-#54 := [mp #47 #51]: #49
-#150 := (not #49)
-#237 := (or #13 #11 #150)
-#151 := [def-axiom]: #237
-#152 := [unit-resolution #151 #54]: #238
-#565 := [unit-resolution #152 #564]: #13
-#215 := [symm #565]: #557
-#216 := [monotonicity #215]: #558
-#200 := [symm #216]: #559
-#205 := [trans #200 #204]: #11
-#206 := [unit-resolution #564 #205]: false
-#207 := [lemma #206]: #11
-#546 := (= #10 #9)
-#547 := [symm #207]: #546
-#544 := [monotonicity #547 #207]: #549
-#186 := [symm #544]: #550
-#556 := (= f4 #349)
-#25 := (:var 0 S2)
-#27 := (f5 #25)
-#582 := (pattern #27)
-#26 := (f3 #25)
-#581 := (pattern #26)
-#28 := (f6 #26 #27)
-#69 := (= #25 #28)
-#583 := (forall (vars (?v0 S2)) (:pat #581 #582) #69)
-#73 := (forall (vars (?v0 S2)) #69)
-#586 := (iff #73 #583)
-#584 := (iff #69 #69)
-#585 := [refl]: #584
-#587 := [quant-intro #585]: #586
-#84 := (~ #73 #73)
-#92 := (~ #69 #69)
-#93 := [refl]: #92
-#85 := [nnf-pos #93]: #84
-#29 := (= #28 #25)
-#30 := (forall (vars (?v0 S2)) #29)
-#74 := (iff #30 #73)
-#71 := (iff #29 #69)
-#72 := [rewrite]: #71
-#75 := [quant-intro #72]: #74
-#68 := [asserted]: #30
-#78 := [mp #68 #75]: #73
-#94 := [mp~ #78 #85]: #73
-#588 := [mp #94 #587]: #583
-#566 := (not #583)
-#561 := (or #566 #556)
-#567 := [quant-inst]: #561
-#548 := [unit-resolution #567 #588]: #556
-#551 := [trans #548 #186]: #13
-#239 := (not #13)
-#242 := (or #239 #48)
-#230 := (or #239 #48 #150)
-#241 := [def-axiom]: #230
-#170 := [unit-resolution #241 #54]: #242
-#545 := [unit-resolution #170 #207]: #239
-[unit-resolution #545 #551]: false
-unsat
-d43a3750252b86094159a0508ea79def7392e6da 187 0
+8cd68e8e260f2f18965c0617f7c8e0414cba4ea7 187 0
 #2 := false
 decl f6 :: (-> S3 S2 S4)
 decl f5 :: S2
@@ -51562,7 +51444,125 @@
 #67 := [not-or-elim #66]: #65
 [unit-resolution #67 #496]: false
 unsat
-d9c2fc1edc378ccb88037e9ae16a84f1542acb6f 31 0
+11ff498c93ee1972d946dfaaf38aec4ff91ae83c 117 0
+#2 := false
+decl f6 :: (-> S3 S3 S2)
+decl f3 :: (-> S2 S3)
+decl f4 :: S2
+#8 := f4
+#9 := (f3 f4)
+decl f5 :: (-> S2 S3)
+#10 := (f5 f4)
+#12 := (f6 #10 #9)
+#13 := (= f4 #12)
+#349 := (f6 #9 #10)
+#550 := (= #349 #12)
+#549 := (= #12 #349)
+#11 := (= #9 #10)
+#243 := (f3 #12)
+#543 := (= #243 #10)
+#240 := (= #10 #243)
+#17 := (:var 0 S3)
+#16 := (:var 1 S3)
+#18 := (f6 #16 #17)
+#568 := (pattern #18)
+#19 := (f3 #18)
+#53 := (= #16 #19)
+#569 := (forall (vars (?v0 S3) (?v1 S3)) (:pat #568) #53)
+#57 := (forall (vars (?v0 S3) (?v1 S3)) #53)
+#572 := (iff #57 #569)
+#570 := (iff #53 #53)
+#571 := [refl]: #570
+#573 := [quant-intro #571]: #572
+#90 := (~ #57 #57)
+#88 := (~ #53 #53)
+#89 := [refl]: #88
+#91 := [nnf-pos #89]: #90
+#20 := (= #19 #16)
+#21 := (forall (vars (?v0 S3) (?v1 S3)) #20)
+#58 := (iff #21 #57)
+#55 := (iff #20 #53)
+#56 := [rewrite]: #55
+#59 := [quant-intro #56]: #58
+#52 := [asserted]: #21
+#62 := [mp #52 #59]: #57
+#80 := [mp~ #62 #91]: #57
+#574 := [mp #80 #573]: #569
+#560 := (not #569)
+#562 := (or #560 #240)
+#217 := [quant-inst]: #562
+#220 := [unit-resolution #217 #574]: #240
+#204 := [symm #220]: #543
+#559 := (= #9 #243)
+#558 := (= #243 #9)
+#557 := (= #12 f4)
+#48 := (not #11)
+#564 := [hypothesis]: #48
+#238 := (or #13 #11)
+#49 := (iff #13 #48)
+#14 := (iff #11 #13)
+#15 := (not #14)
+#50 := (iff #15 #49)
+#51 := [rewrite]: #50
+#47 := [asserted]: #15
+#54 := [mp #47 #51]: #49
+#150 := (not #49)
+#237 := (or #13 #11 #150)
+#151 := [def-axiom]: #237
+#152 := [unit-resolution #151 #54]: #238
+#565 := [unit-resolution #152 #564]: #13
+#215 := [symm #565]: #557
+#216 := [monotonicity #215]: #558
+#200 := [symm #216]: #559
+#205 := [trans #200 #204]: #11
+#206 := [unit-resolution #564 #205]: false
+#207 := [lemma #206]: #11
+#546 := (= #10 #9)
+#547 := [symm #207]: #546
+#544 := [monotonicity #547 #207]: #549
+#186 := [symm #544]: #550
+#556 := (= f4 #349)
+#25 := (:var 0 S2)
+#27 := (f5 #25)
+#582 := (pattern #27)
+#26 := (f3 #25)
+#581 := (pattern #26)
+#28 := (f6 #26 #27)
+#69 := (= #25 #28)
+#583 := (forall (vars (?v0 S2)) (:pat #581 #582) #69)
+#73 := (forall (vars (?v0 S2)) #69)
+#586 := (iff #73 #583)
+#584 := (iff #69 #69)
+#585 := [refl]: #584
+#587 := [quant-intro #585]: #586
+#84 := (~ #73 #73)
+#92 := (~ #69 #69)
+#93 := [refl]: #92
+#85 := [nnf-pos #93]: #84
+#29 := (= #28 #25)
+#30 := (forall (vars (?v0 S2)) #29)
+#74 := (iff #30 #73)
+#71 := (iff #29 #69)
+#72 := [rewrite]: #71
+#75 := [quant-intro #72]: #74
+#68 := [asserted]: #30
+#78 := [mp #68 #75]: #73
+#94 := [mp~ #78 #85]: #73
+#588 := [mp #94 #587]: #583
+#566 := (not #583)
+#561 := (or #566 #556)
+#567 := [quant-inst]: #561
+#548 := [unit-resolution #567 #588]: #556
+#551 := [trans #548 #186]: #13
+#239 := (not #13)
+#242 := (or #239 #48)
+#230 := (or #239 #48 #150)
+#241 := [def-axiom]: #230
+#170 := [unit-resolution #241 #54]: #242
+#545 := [unit-resolution #170 #207]: #239
+[unit-resolution #545 #551]: false
+unsat
+4cd366e11e92a3096da693a1c949e0a0235771e1 31 0
 #2 := false
 decl f1 :: S1
 #4 := f1
@@ -51594,7 +51594,7 @@
 #62 := [asserted]: #12
 [mp #62 #79]: false
 unsat
-3df517f77a8847ec580730167b0937b5bdc9f32c 58 0
+862ca11132e978d4725394191af361fe43022f5f 58 0
 #2 := false
 decl f3 :: (-> S2 S1)
 #13 := (:var 0 S2)
@@ -51653,7 +51653,7 @@
 #247 := [quant-inst]: #333
 [unit-resolution #247 #78 #667]: false
 unsat
-1b877eab526e97351cb862fc0b9910541c0a7e4b 46 0
+889c897f95d38c70626926b88d4e65240961bf38 46 0
 #2 := false
 decl f3 :: (-> S2 S1)
 #17 := (:var 0 S2)
@@ -51700,7 +51700,7 @@
 #239 := [quant-inst]: #325
 [unit-resolution #239 #70 #666]: false
 unsat
-9cf9419534c29ea2783ed62db9d7dac14034c845 119 0
+f03c0d076b09a28f063ddbca092a33b823afb804 119 0
 #2 := false
 decl f3 :: (-> S2 S2 S3 S1)
 decl f6 :: S3
@@ -51820,7 +51820,7 @@
 #320 := [unit-resolution #678 #329]: #319
 [unit-resolution #320 #318 #317]: false
 unsat
-db4d005483a981015636afecf4abdbe3eecdc540 154 0
+a6efe1b3687d3cc17ba5ea65fa9b7033b64122bf 154 0
 #2 := false
 decl f7 :: (-> S2 S3 S1)
 decl f6 :: S3
@@ -51975,7 +51975,7 @@
 #289 := [quant-inst]: #651
 [unit-resolution #289 #675 #294]: false
 unsat
-01e84163a16924ffd8e379badcb76f97c88eb8e1 128 0
+d1421e190f987aeaec441d0daf9b02a2f258566f 128 0
 #2 := false
 decl f8 :: (-> S2 S3 S1)
 decl f6 :: S3
@@ -52104,7 +52104,7 @@
 #630 := [quant-inst]: #635
 [unit-resolution #630 #667 #637]: false
 unsat
-db25ac5ac3d60bebb553d3f6b343562b94a56253 146 0
+db52b16fae67253deaefead0db41a82bcf2ebe59 146 0
 #2 := false
 decl f3 :: (-> S2 S2 S3 S1)
 decl f6 :: S3
@@ -52251,7 +52251,7 @@
 #632 := [unit-resolution #661 #642]: #635
 [unit-resolution #632 #631 #633]: false
 unsat
-9033d495190da4d9088c43145881d91ed9687495 121 0
+8f02554bbb40e6658b09b0c2823ecea18b08c91d 121 0
 #2 := false
 decl f3 :: (-> S2 S2 S3 S1)
 decl f5 :: S3
@@ -52373,7 +52373,7 @@
 #650 := [unit-resolution #323 #308]: #649
 [unit-resolution #650 #648 #647]: false
 unsat
-d24feed52b94afbe0c3926c41e67eb725f57798d 258 0
+2736190123a7d967c1298876eb9c2dad86e52b59 258 0
 #2 := false
 decl f3 :: (-> S2 S3 S1)
 decl f8 :: S3
@@ -52632,7 +52632,7 @@
 #585 := [def-axiom]: #575
 [unit-resolution #585 #539 #546 #581]: false
 unsat
-5b1f4025c8afe3b7c1a0fb50a6e0140ed51756ba 153 0
+eaeae96294c9f1d454cc1537d34925d3b42674d8 153 0
 #2 := false
 decl f7 :: (-> S2 S3 S1)
 decl f6 :: S3
@@ -52786,7 +52786,7 @@
 #339 := [unit-resolution #692 #689]: #338
 [unit-resolution #339 #337 #674]: false
 unsat
-14e5476f4f3857f931521140926538df69a7900f 141 0
+95f397b9920f2327707ec91629a09aa96ab88f3c 141 0
 #2 := false
 decl f7 :: (-> S2 S3 S1)
 decl f6 :: S3
@@ -52928,7 +52928,7 @@
 #312 := [quant-inst]: #652
 [unit-resolution #312 #668 #637]: false
 unsat
-17d0e6f19e122ea3db2aaeed6f9623f5ae4eb5b6 165 0
+7a53c3d1a097c7a7e4616fc3acc808abc59f3a4b 165 0
 #2 := false
 decl f7 :: (-> S2 S3 S1)
 decl f6 :: S3
@@ -53094,7 +53094,7 @@
 #665 := [def-axiom]: #664
 [unit-resolution #665 #655 #654]: false
 unsat
-8c5227e6af822f9c7c2a140803c4af49bcf24bcb 164 0
+f3ecd39108ba2067a1db25179cee7d64804b1fdb 164 0
 #2 := false
 decl f3 :: (-> S2 S2 S3 S1)
 decl f6 :: S3
@@ -53259,7 +53259,7 @@
 #626 := [unit-resolution #290 #354]: #625
 [unit-resolution #626 #636 #631]: false
 unsat
-8156155a61a8ea554dc6bef7e96703a3d13ceb5f 142 0
+f5598d5da2ef327dfa5f6213aebc49b5a19fb777 142 0
 #2 := false
 decl f3 :: (-> S2 S2 S3 S1)
 decl f5 :: S3
@@ -53402,7 +53402,7 @@
 #655 := [unit-resolution #309 #645]: #295
 [unit-resolution #655 #294 #654]: false
 unsat
-f0bdfff0ca207ce8dcf7aafa0f5fd49080a4003e 279 0
+11da52e001c270ce301b6d7c5a73bedb29349752 279 0
 #2 := false
 decl f3 :: (-> S2 S3 S1)
 decl f8 :: S3
@@ -53682,7 +53682,7 @@
 #580 := [def-axiom]: #579
 [unit-resolution #580 #526 #543 #572]: false
 unsat
-0166ab8a0d2c326b9fbcb4a04b09f2f360525618 18 0
+b948f53222b56a42099bea7be09fe4963a5cfdb3 18 0
 #2 := false
 decl f3 :: S2
 #8 := f3
--- a/src/HOL/SMT_Examples/SMT_Word_Examples.certs	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/SMT_Examples/SMT_Word_Examples.certs	Sat Nov 06 10:01:00 2010 -0700
@@ -1,50 +1,50 @@
-46235d1f6a4388f12c18d3d18eaed2d6ab3523e2 1 0
+e1bd9b09ecc046c90fa67ab56ab4bc91c2137e7c 1 0
 unsat
-2989011a3b771bf7eab17217929d76db371db55a 1 0
+b0b514fa1c40f2df103dbe4bab9d6ee5e8e38622 1 0
 unsat
-4d462cfbec6db35b16a67293eb04373a3a11cb44 1 0
+4a2f9858de3b5f966f7cfe668d50b9fdbdccc28f 1 0
 unsat
-32e799a4f02a8bf85378e2558d647d6e6e7e4116 1 0
+b403fe5b6096d56ba2e1efb5889c116ad939fb9a 1 0
 unsat
-ea8ec671ee4ec9ca44eadb130212b55542ad3c72 1 0
+07197240befc69475d497a3deb0cd58a7dc5035a 1 0
 unsat
-0b22b7d406250c007b69daac26169211cece6e5e 1 0
+19797ddd09fac50784f91151252f6cbfe61e45fe 1 0
 unsat
-6f37bd70504a10f1a5bd56b5d3031a3658eef94d 1 0
+aae95453d4c2d67c25587bad0e870093008f21c8 1 0
 unsat
-12d0a7828bda723d340f377f770b153b4828c723 1 0
+586fe9c93d5a4634c21e336a3f011bf667295f8d 1 0
 unsat
-42a5347bcc64f0fc5e7773f929e8b7e6d96e73d0 1 0
+2de49ccadae9ad983581b90d74323c219d328a06 1 0
 unsat
-a42bcf18394af94f8cc8ab8ce877ec1e88c84c2b 1 0
+7c0a6866bb2417256d44d53c9d7cc8aa1afea73b 1 0
 unsat
-e3c0ae35ad656751b98714cf4a7bf8c152a73c5b 1 0
+00738aadb1b8c4a3738b0d9345151d9314628cdb 1 0
 unsat
-471cc482e74eb56062a56eeeedc0a1257f6bda33 1 0
+cfe59e32fdada7e2400e8a4a36a9a1c57b6e6943 1 0
 unsat
-122224697bc7ce7440727f7345bc6c4718983ebf 1 0
+0c1a115ce11f64d84848e4e43f8f568ca009da60 1 0
 unsat
-ff841f21b338943202778802235f8b185af9f926 1 0
+e6fc30fe7a455e14f6da307ba6450d7a3ee50441 1 0
 unsat
-d53ed3b2dea404bbf4cc3cdde4855f8f002b1ced 1 0
+94dd0007678a5ab7d0ca74a327a14670df6381ad 1 0
 unsat
-6f80ff315644370e76762c9594cc0408fb226af7 1 0
+6de5148ae90599cea51776126a320aa18e44b930 1 0
 unsat
-9354d8e43f3fcfb65d935d9c042aa4eb28fa8c7f 1 0
+7b557ca70d803069d3ec0841f7b2f90180f7632c 1 0
 unsat
-ea68ff6144ab104762c1ca59e4571d4c481712f2 1 0
+04ec8bbf4ad5ec6998df2648b8f7d5128b689a93 1 0
 unsat
-7ec887bf8cbac8fcbb5ed1a9fdcd99b2e709a6ec 1 0
+e82e83431339e5060426d14b5f9b33f0e35290ef 1 0
 unsat
-5005c7113901a2b2f31bdfbbc6192115a80e6a9f 1 0
+748ebe13985717efeb5cfe13eebe2535d37f2be9 1 0
 unsat
-9c31a94edb0c85615a8598ba1cd1036b5072b34f 1 0
+ba350e495fbbfb8ca8ba84ce8ea5cf5cfcb78c88 1 0
 unsat
-68c40f37bd410a9b4b24ab0f6e3e9dcc5159144c 1 0
+2e23d2adc09e970979a04c100cda2e246c4be751 1 0
 unsat
-833f259a7dd52b3dddfc285b647a432c0daf13c1 1 0
+13c805fce739c689f74923066ed5467cbe271049 1 0
 unsat
-7d5a71ba893f865044699426792a024fe1612235 1 0
+9272ca3409998794083865eb22a5af989a22bbdd 1 0
 unsat
-6adbd17723088c30f1d1f0f07e1e4df2076a51b2 1 0
+158ebeaaae2e81911b4f0b18392fa55af050541c 1 0
 unsat
--- a/src/HOL/Tools/ATP/atp_systems.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Tools/ATP/atp_systems.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -80,15 +80,16 @@
 
 (* E *)
 
-(* Give older versions of E an extra second, because the "eproof" script wrongly
-   subtracted an entire second to account for the overhead of the script
-   itself, which is in fact much lower. *)
+(* Give E an extra second to reconstruct the proof. Older versions even get two
+   seconds, because the "eproof" script wrongly subtracted an entire second to
+   account for the overhead of the script itself, which is in fact much
+   lower. *)
 fun e_bonus () =
   case getenv "E_VERSION" of
-    "" => 1000
+    "" => 2000
   | version =>
-    if exists (fn s => String.isPrefix s version) ["0.9", "1.0"] then 1000
-    else 0
+    if exists (fn s => String.isPrefix s version) ["0.9", "1.0"] then 2000
+    else 1000
 
 val tstp_proof_delims =
   ("# SZS output start CNFRefutation.", "# SZS output end CNFRefutation")
--- a/src/HOL/Tools/Function/context_tree.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Tools/Function/context_tree.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -125,7 +125,7 @@
      (cterm_instantiate inst r, dep, branches)
    end
    handle Pattern.MATCH => find_cong_rule ctx fvar h rs t)
-  | find_cong_rule _ _ _ [] _ = sys_error "Function/context_tree.ML: No cong rule found!"
+  | find_cong_rule _ _ _ [] _ = raise General.Fail "No cong rule found!"
 
 
 fun mk_tree fvar h ctxt t =
--- a/src/HOL/Tools/Function/lexicographic_order.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Tools/Function/lexicographic_order.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -117,7 +117,7 @@
        rtac @{thm "mlex_leq"} 1
        THEN PRIMITIVE (Thm.elim_implies thm)
        THEN prove_row cs
-   | _ => sys_error "lexicographic_order")
+   | _ => raise General.Fail "lexicographic_order")
  | prove_row [] = no_tac;
 
 
--- a/src/HOL/Tools/Function/mutual.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Tools/Function/mutual.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -185,7 +185,7 @@
       case cprems_of psimp of
         [] => (psimp, I)
       | [cond] => (Thm.implies_elim psimp (Thm.assume cond), Thm.implies_intr cond)
-      | _ => sys_error "Too many conditions"
+      | _ => raise General.Fail "Too many conditions"
 
   in
     Goal.prove ctxt [] []
--- a/src/HOL/Tools/Function/scnp_reconstruct.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Tools/Function/scnp_reconstruct.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -171,8 +171,8 @@
           else (thm COMP (Thm.lift_rule (cprop_of thm) @{thm less_imp_le}))
         | SOME (Termination.LessEq (thm, _))  =>
           if not bStrict then thm
-          else sys_error "get_desc_thm"
-        | _ => sys_error "get_desc_thm"
+          else raise Fail "get_desc_thm"
+        | _ => raise Fail "get_desc_thm"
 
     val (label, lev, sl, covering) = certificate
 
--- a/src/HOL/Tools/Nitpick/kodkod.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Tools/Nitpick/kodkod.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -1085,15 +1085,15 @@
                 Normal (ps, js, first_error)
             end
         in remove_temporary_files (); outcome end
-        handle Exn.Interrupt =>
+        handle Exn.Interrupt =>  (* FIXME Exn.is_interrupt *)
                let
                  val nontriv_js =
                    read_output_file new_kodkodi out_path
                    |> snd |> snd |> map reindex
                in
                  (remove_temporary_files ();
-                  Interrupted (SOME (triv_js @ nontriv_js)))
-                 handle Exn.Interrupt =>
+                  Interrupted (SOME (triv_js @ nontriv_js)))  (* FIXME violates Isabelle/ML exception model *)
+                 handle Exn.Interrupt =>  (* FIXME violates Isabelle/ML exception model *)
                         (remove_temporary_files (); Interrupted NONE)
                end
       end
--- a/src/HOL/Tools/Nitpick/nitpick.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Tools/Nitpick/nitpick.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -973,25 +973,25 @@
     val outcome_code =
       (run_batches 0 (length batches) batches
                    (false, max_potential, max_genuine, 0)
-       handle Exn.Interrupt => do_interrupted ())
+       handle Exn.Interrupt => do_interrupted ())  (* FIXME violates Isabelle/ML exception model *)
       handle TimeLimit.TimeOut =>
              (print_m (fn () => excipit "ran out of time after checking");
               if !met_potential > 0 then "potential" else "unknown")
            | Exn.Interrupt =>
              if auto orelse debug then raise Interrupt
-             else error (excipit "was interrupted after checking")
-    val _ = print_v (fn () => "Total time: " ^
-                              signed_string_of_int (Time.toMilliseconds
-                                    (Timer.checkRealTimer timer)) ^ " ms.")
+             else error (excipit "was interrupted after checking")  (* FIXME violates Isabelle/ML exception model *)
+    val _ = print_v (fn () =>
+                "Total time: " ^ string_from_time (Timer.checkRealTimer timer) ^
+                ".")
   in (outcome_code, !state_ref) end
-  handle Exn.Interrupt =>
+  handle Exn.Interrupt =>  (* FIXME violates Isabelle/ML exception model *)
          if auto orelse #debug params then
            raise Interrupt
          else
            if passed_deadline deadline then
              (Output.urgent_message "Nitpick ran out of time."; ("unknown", state))
            else
-             error "Nitpick was interrupted."
+             error "Nitpick was interrupted."  (* FIXME violates Isabelle/ML exception model *)
 
 fun pick_nits_in_term state (params as {debug, timeout, expect, ...}) auto i n
                       step subst assm_ts orig_t =
--- a/src/HOL/Tools/Nitpick/nitpick_isar.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Tools/Nitpick/nitpick_isar.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -61,8 +61,8 @@
    ("peephole_optim", "true"),
    ("datatype_sym_break", "5"),
    ("kodkod_sym_break", "15"),
-   ("timeout", "30 s"),
-   ("tac_timeout", "500 ms"),
+   ("timeout", "30"),
+   ("tac_timeout", "0.5"),
    ("max_threads", "0"),
    ("debug", "false"),
    ("verbose", "false"),
@@ -297,8 +297,10 @@
 val parse_key = Scan.repeat1 Parse.typ_group >> space_implode " "
 val parse_value =
   Scan.repeat1 (Parse.minus >> single
-                || Scan.repeat1 (Scan.unless Parse.minus Parse.name)
-                || Parse.$$$ "," |-- Parse.number >> prefix "," >> single) >> flat
+                || Scan.repeat1 (Scan.unless Parse.minus
+                                             (Parse.name || Parse.float_number))
+                || Parse.$$$ "," |-- Parse.number >> prefix "," >> single)
+  >> flat
 val parse_param = parse_key -- Scan.optional (Parse.$$$ "=" |-- parse_value) []
 val parse_params =
   Scan.optional (Parse.$$$ "[" |-- Parse.list parse_param --| Parse.$$$ "]") []
--- a/src/HOL/Tools/Nitpick/nitpick_util.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Tools/Nitpick/nitpick_util.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -52,6 +52,7 @@
   val pretty_serial_commas : string -> Pretty.T list -> Pretty.T list
   val parse_bool_option : bool -> string -> string -> bool option
   val parse_time_option : string -> string -> Time.time option
+  val string_from_time : Time.time -> string
   val nat_subscript : int -> string
   val flip_polarity : polarity -> polarity
   val prop_T : typ
@@ -237,6 +238,7 @@
 
 val parse_bool_option = Sledgehammer_Util.parse_bool_option
 val parse_time_option = Sledgehammer_Util.parse_time_option
+val string_from_time = Sledgehammer_Util.string_from_time
 
 val i_subscript = implode o map (prefix "\<^isub>") o explode
 fun be_subscript s = "\<^bsub>" ^ s ^ "\<^esub>"
--- a/src/HOL/Tools/SMT/smt_solver.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Tools/SMT/smt_solver.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -35,7 +35,7 @@
   val filter_only: bool Config.T
   val datatypes: bool Config.T
   val keep_assms: bool Config.T
-  val timeout: int Config.T
+  val timeout: real Config.T
   val with_timeout: Proof.context -> ('a -> 'b) -> 'a -> 'b
   val traceN: string
   val trace: bool Config.T
@@ -127,10 +127,10 @@
 val (keep_assms, setup_keep_assms) =
   Attrib.config_bool "smt_keep_assms" (K true)
 
-val (timeout, setup_timeout) = Attrib.config_int "smt_timeout" (K 30)
+val (timeout, setup_timeout) = Attrib.config_real "smt_timeout" (K 30.0)
 
 fun with_timeout ctxt f x =
-  TimeLimit.timeLimit (Time.fromSeconds (Config.get ctxt timeout)) f x
+  TimeLimit.timeLimit (seconds (Config.get ctxt timeout)) f x
   handle TimeLimit.TimeOut => raise SMT Time_Out
 
 val traceN = "smt_trace"
@@ -252,7 +252,7 @@
   let
     val args = more_opts @ options ctxt
     val comments = ("solver: " ^ name) ::
-      ("timeout: " ^ string_of_int (Config.get ctxt timeout)) ::
+      ("timeout: " ^ Time.toString (seconds (Config.get ctxt timeout))) ::
       "arguments:" :: args
   in
     irules
@@ -433,19 +433,20 @@
     val {facts, goal, ...} = Proof.goal st
     val ctxt =
       Proof.context_of st
-      |> Config.put timeout (Time.toSeconds time_limit)
+      |> Config.put timeout (Real.fromInt (Time.toSeconds time_limit))
       |> Config.put oracle false
       |> Config.put filter_only true
       |> Config.put keep_assms false
+    val ({context=ctxt', prems, concl, ...}, _) = Subgoal.focus ctxt i goal
     val cprop =
-      Thm.cprem_of goal i
-      |> Thm.rhs_of o SMT_Normalize.atomize_conv ctxt
+      concl
+      |> Thm.rhs_of o SMT_Normalize.atomize_conv ctxt'
       |> Thm.capply @{cterm Trueprop} o Thm.capply @{cterm Not} o Thm.dest_arg
-    val irs = map (pair ~1) (Thm.assume cprop :: facts)
+    val irs = map (pair ~1) (Thm.assume cprop :: prems @ facts)
     val rm = SOME run_remote
   in
     split_list xrules
-    ||> distinct (op =) o fst o smt_solver rm ctxt o append irs o map_index I
+    ||> distinct (op =) o fst o smt_solver rm ctxt' o append irs o map_index I
     |-> map_filter o try o nth
     |> (fn xs => {outcome=NONE, used_facts=xs, run_time_in_msecs=NONE})
   end
@@ -504,7 +505,7 @@
 
 fun print_setup context =
   let
-    val t = string_of_int (Config.get_generic context timeout)
+    val t = Time.toString (seconds (Config.get_generic context timeout))
     val names = sort_strings (all_solver_names_of context)
     val ns = if null names then [no_solver] else names
     val n = solver_name_of context
--- a/src/HOL/Tools/Sledgehammer/sledgehammer.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Tools/Sledgehammer/sledgehammer.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -54,7 +54,8 @@
   val is_prover_available : theory -> string -> bool
   val is_prover_installed : Proof.context -> string -> bool
   val default_max_relevant_for_prover : theory -> string -> int
-  val irrelevant_consts_for_prover : string -> string list
+  val is_built_in_const_for_prover :
+    Proof.context -> string -> string * typ -> bool
   val relevance_fudge_for_prover : string -> relevance_fudge
   val dest_dir : string Config.T
   val problem_prefix : string Config.T
@@ -116,29 +117,9 @@
   [@{const_name False}, @{const_name True}, @{const_name If}, @{const_name Let},
    @{const_name HOL.eq}]
 
-(* FIXME: check types *)
-val smt_irrelevant_consts =
-  atp_irrelevant_consts @
-  [@{const_name distinct},
-   (* numeral-related: *)
-   @{const_name number_of}, @{const_name Int.Pls}, @{const_name Int.Min},
-   @{const_name Int.Bit0}, @{const_name Int.Bit1}, @{const_name Suc},
-   (* FIXME: @{const_name Numeral0}, @{const_name Numeral1}, *)
-   (* int => nat *)
-   @{const_name nat},
-   (* nat => int *)
-   (* FIXME: @{const_name int}, *)
-   (* for "nat", "int", and "real": *)
-   @{const_name plus}, @{const_name uminus}, @{const_name minus},
-   @{const_name times}, @{const_name less}, @{const_name less_eq},
-   @{const_name abs}, @{const_name min}, @{const_name max},
-   (* for "nat" and "div": *)
-   @{const_name div}, @{const_name mod} (* , *)
-   (* for real: *)
-   (* FIXME: @{const_name "op /"} *)]
-
-fun irrelevant_consts_for_prover name =
-  if is_smt_prover name then smt_irrelevant_consts else atp_irrelevant_consts
+fun is_built_in_const_for_prover ctxt name (s, T) =
+  if is_smt_prover name then SMT_Builtin.is_builtin ctxt (s, T)
+  else member (op =) atp_irrelevant_consts s
 
 (* FUDGE *)
 val atp_relevance_fudge =
@@ -277,8 +258,8 @@
 fun fact_name (Untranslated ((name, _), _)) = SOME name
   | fact_name (Translated (_, p)) = Option.map (fst o fst) p
 
-fun int_option_add (SOME m) (SOME n) = SOME (m + n)
-  | int_option_add _ _ = NONE
+fun int_opt_add (SOME m) (SOME n) = SOME (m + n)
+  | int_opt_add _ _ = NONE
 
 (* Important messages are important but not so important that users want to see
    them each time. *)
@@ -377,8 +358,8 @@
                  ? (fn (_, msecs0, _, SOME _) =>
                        run true (Time.- (timeout, Timer.checkRealTimer timer))
                        |> (fn (output, msecs, tstplike_proof, outcome) =>
-                              (output, int_option_add msecs0 msecs,
-                               tstplike_proof, outcome))
+                              (output, int_opt_add msecs0 msecs, tstplike_proof,
+                               outcome))
                      | result => result)
           in ((pool, conjecture_shape, fact_names), result) end
         else
@@ -411,11 +392,12 @@
             (proof_banner auto, full_types, minimize_command, tstplike_proof,
              fact_names, goal, subgoal)
         |>> (fn message =>
-                message ^ (if verbose then
-                             "\nATP real CPU time: " ^
-                             string_of_int (the msecs) ^ " ms."
-                           else
-                             "") ^
+                message ^
+                (if verbose then
+                   "\nATP real CPU time: " ^
+                   string_from_time (Time.fromMilliseconds (the msecs)) ^ "."
+                 else
+                   "") ^
                 (if important_message <> "" then
                    "\n\nImportant message from Dr. Geoff Sutcliffe:\n" ^
                    important_message
@@ -432,14 +414,43 @@
   | failure_from_smt_failure SMT_Solver.Out_Of_Memory = OutOfResources
   | failure_from_smt_failure _ = UnknownError
 
+val smt_filter_max_iter = 5
+val smt_filter_fact_divisor = 2
+
+fun smt_filter_loop iter msecs_so_far remote timeout state facts i =
+  let
+    val timer = Timer.startRealTimer ()
+    val {outcome, used_facts, run_time_in_msecs} =
+      SMT_Solver.smt_filter remote timeout state facts i
+    val msecs_so_far = int_opt_add run_time_in_msecs msecs_so_far
+    val too_many_facts_perhaps =
+      case outcome of
+        NONE => false
+      | SOME (SMT_Solver.Counterexample _) => false
+      | SOME SMT_Solver.Time_Out => false
+      | SOME SMT_Solver.Out_Of_Memory => true
+      | SOME _ => true
+  in
+    if too_many_facts_perhaps andalso iter < smt_filter_max_iter andalso
+       not (null facts) then
+      let val facts = take (length facts div smt_filter_fact_divisor) facts in
+        smt_filter_loop (iter + 1) msecs_so_far remote
+                        (Time.- (timeout, Timer.checkRealTimer timer)) state
+                        facts i
+      end
+    else
+      {outcome = outcome, used_facts = used_facts,
+       run_time_in_msecs = msecs_so_far}
+  end
+
 fun run_smt_solver auto remote ({timeout, ...} : params) minimize_command
                    ({state, subgoal, subgoal_count, facts, ...}
                     : prover_problem) =
   let
     val ctxt = Proof.context_of state
     val {outcome, used_facts, run_time_in_msecs} =
-      SMT_Solver.smt_filter remote timeout state
-                            (map_filter (try dest_Untranslated) facts) subgoal
+      smt_filter_loop 1 (SOME 0) remote timeout state
+                      (map_filter (try dest_Untranslated) facts) subgoal
     val message =
       case outcome of
         NONE =>
@@ -535,8 +546,8 @@
       val _ = () |> not blocking ? kill_provers
       val _ = if auto then () else Output.urgent_message "Sledgehammering..."
       val (smts, atps) = provers |> List.partition is_smt_prover
-      fun run_provers label full_types irrelevant_consts relevance_fudge
-                      maybe_translate provers (res as (success, state)) =
+      fun run_provers label full_types relevance_fudge maybe_translate provers
+                      (res as (success, state)) =
         if success orelse null provers then
           res
         else
@@ -548,9 +559,11 @@
                 0 |> fold (Integer.max o default_max_relevant_for_prover thy)
                           provers
                   |> auto ? (fn n => n div auto_max_relevant_divisor)
+            val is_built_in_const =
+              is_built_in_const_for_prover ctxt (hd provers)
             val facts =
               relevant_facts ctxt full_types relevance_thresholds
-                             max_max_relevant irrelevant_consts relevance_fudge
+                             max_max_relevant is_built_in_const relevance_fudge
                              relevance_override chained_ths hyp_ts concl_t
               |> map maybe_translate
             val problem =
@@ -559,7 +572,7 @@
             val run_prover = run_prover params auto minimize_command
           in
             if debug then
-              Output.urgent_message (label ^ ": " ^
+              Output.urgent_message (label ^ plural_s (length provers) ^ ": " ^
                   (if null facts then
                      "Found no relevant facts."
                    else
@@ -579,11 +592,10 @@
                       |> exists fst |> rpair state
           end
       val run_atps =
-        run_provers "ATPs" full_types atp_irrelevant_consts atp_relevance_fudge
+        run_provers "ATP" full_types atp_relevance_fudge
                     (Translated o translate_fact ctxt) atps
       val run_smts =
-        run_provers "SMT" true smt_irrelevant_consts smt_relevance_fudge
-                    Untranslated smts
+        run_provers "SMT solver" true smt_relevance_fudge Untranslated smts
       fun run_atps_and_smt_solvers () =
         [run_atps, run_smts] |> Par_List.map (fn f => f (false, state) |> K ())
     in
--- a/src/HOL/Tools/Sledgehammer/sledgehammer_filter.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Tools/Sledgehammer/sledgehammer_filter.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -38,7 +38,7 @@
     Proof.context -> unit Symtab.table -> thm list
     -> Facts.ref * Attrib.src list -> ((string * locality) * thm) list
   val relevant_facts :
-    Proof.context -> bool -> real * real -> int -> string list
+    Proof.context -> bool -> real * real -> int -> (string * typ -> bool)
     -> relevance_fudge -> relevance_override -> thm list -> term list -> term
     -> ((string * locality) * thm) list
 end;
@@ -87,29 +87,37 @@
 val theory_const_suffix = Long_Name.separator ^ " 1"
 
 fun needs_quoting reserved s =
-  Symtab.defined reserved s (* FIXME: orelse
-  exists (not o Syntax.is_identifier) (Long_Name.explode s) *)
+  Symtab.defined reserved s orelse
+  exists (not o Syntax.is_identifier) (Long_Name.explode s)
 
-fun repair_name reserved multi j name =
+fun make_name reserved multi j name =
   (name |> needs_quoting reserved name ? quote) ^
   (if multi then "(" ^ Int.toString j ^ ")" else "")
 
+fun explode_interval _ (Facts.FromTo (i, j)) = i upto j
+  | explode_interval max (Facts.From i) = i upto i + max - 1
+  | explode_interval _ (Facts.Single i) = [i]
+
 fun fact_from_ref ctxt reserved chained_ths (xthm as (xref, args)) =
   let
     val ths = Attrib.eval_thms ctxt [xthm]
     val bracket =
       implode (map (fn arg => "[" ^ Pretty.str_of (Args.pretty_src ctxt arg)
                                ^ "]") args)
-    val name =
+    fun nth_name j =
       case xref of
         Facts.Fact s => "`" ^ s ^ "`" ^ bracket
       | Facts.Named (("", _), _) => "[" ^ bracket ^ "]"
-      | _ => Facts.string_of_ref xref ^ bracket
-    val multi = length ths > 1
+      | Facts.Named ((name, _), NONE) =>
+        make_name reserved (length ths > 1) (j + 1) name ^ bracket
+      | Facts.Named ((name, _), SOME intervals) =>
+        make_name reserved true
+                 (nth (maps (explode_interval (length ths)) intervals) j) name ^
+        bracket
   in
-    (ths, (1, []))
+    (ths, (0, []))
     |-> fold (fn th => fn (j, rest) =>
-                 (j + 1, ((repair_name reserved multi j name,
+                 (j + 1, ((nth_name j,
                           if member Thm.eq_thm chained_ths th then Chained
                           else General), th) :: rest))
     |> snd
@@ -174,31 +182,31 @@
 and pconst thy const (s, T) ts = (s, ptype thy const (s, T) ts)
 and rich_ptype thy const (s, T) ts =
   PType (order_of_type T, ptype thy const (s, T) ts)
-and rich_pconst thy const (s, T) ts = (s, rich_ptype thy const (s, T) ts)
+and rich_pconst thy const x ts = (x, rich_ptype thy const x ts)
 
 fun string_for_hyper_pconst (s, ps) =
   s ^ "{" ^ commas (map string_for_ptype ps) ^ "}"
 
 (* Add a pconstant to the table, but a [] entry means a standard
    connective, which we ignore.*)
-fun add_pconst_to_table irrelevant_consts also_skolem (c, p) =
-  if member (op =) irrelevant_consts c orelse
-     (not also_skolem andalso String.isPrefix skolem_prefix c) then
+fun add_pconst_to_table is_built_in_const also_skolem ((s, T), p) =
+  if is_built_in_const (s, T) orelse
+     (not also_skolem andalso String.isPrefix skolem_prefix s) then
     I
   else
-    Symtab.map_default (c, [p]) (insert (op =) p)
+    Symtab.map_default (s, [p]) (insert (op =) p)
 
 fun is_formula_type T = (T = HOLogic.boolT orelse T = propT)
 
-fun pconsts_in_terms thy irrelevant_consts also_skolems pos ts =
+fun pconsts_in_terms thy is_built_in_const also_skolems pos ts =
   let
     val flip = Option.map not
     (* We include free variables, as well as constants, to handle locales. For
        each quantifiers that must necessarily be skolemized by the ATP, we
        introduce a fresh constant to simulate the effect of Skolemization. *)
-    fun do_const const (s, T) ts =
-      add_pconst_to_table irrelevant_consts also_skolems
-                          (rich_pconst thy const (s, T) ts)
+    fun do_const const x ts =
+      add_pconst_to_table is_built_in_const also_skolems
+                          (rich_pconst thy const x ts)
       #> fold do_term ts
     and do_term t =
       case strip_comb t of
@@ -206,15 +214,15 @@
       | (Free x, ts) => do_const false x ts
       | (Abs (_, T, t'), ts) =>
         (null ts
-         ? add_pconst_to_table irrelevant_consts true
-                               (abs_name, PType (order_of_type T + 1, [])))
+         ? add_pconst_to_table (K false) true
+                          ((abs_name, dummyT), PType (order_of_type T + 1, [])))
         #> fold do_term (t' :: ts)
       | (_, ts) => fold do_term ts
     fun do_quantifier will_surely_be_skolemized abs_T body_t =
       do_formula pos body_t
       #> (if also_skolems andalso will_surely_be_skolemized then
-            add_pconst_to_table irrelevant_consts true
-                         (gensym skolem_prefix, PType (order_of_type abs_T, []))
+            add_pconst_to_table (K false) true
+               ((gensym skolem_prefix, dummyT), PType (order_of_type abs_T, []))
           else
             I)
     and do_term_or_formula T =
@@ -366,22 +374,26 @@
                    ||> filter_out (pconst_hyper_mem swap relevant_consts) of
     ([], _) => 0.0
   | (rel, irrel) =>
-    let
-      val irrel = irrel |> filter_out (pconst_mem swap rel)
-      val rel_weight =
-        0.0 |> fold (curry (op +) o rel_pconst_weight fudge const_tab) rel
-      val irrel_weight =
-        ~ (locality_bonus fudge loc)
-        |> fold (curry (op +) o irrel_pconst_weight fudge const_tab) irrel
-      val res = rel_weight / (rel_weight + irrel_weight)
-    in if Real.isFinite res then res else 0.0 end
+    if forall (forall (String.isSuffix theory_const_suffix o fst))
+              [rel, irrel] then
+      0.0
+    else
+      let
+        val irrel = irrel |> filter_out (pconst_mem swap rel)
+        val rel_weight =
+          0.0 |> fold (curry (op +) o rel_pconst_weight fudge const_tab) rel
+        val irrel_weight =
+          ~ (locality_bonus fudge loc)
+          |> fold (curry (op +) o irrel_pconst_weight fudge const_tab) irrel
+        val res = rel_weight / (rel_weight + irrel_weight)
+      in if Real.isFinite res then res else 0.0 end
 
-fun pconsts_in_fact thy irrelevant_consts t =
+fun pconsts_in_fact thy is_built_in_const t =
   Symtab.fold (fn (s, pss) => fold (cons o pair s) pss)
-              (pconsts_in_terms thy irrelevant_consts true (SOME true) [t]) []
-fun pair_consts_fact thy irrelevant_consts fudge fact =
+              (pconsts_in_terms thy is_built_in_const true (SOME true) [t]) []
+fun pair_consts_fact thy is_built_in_const fudge fact =
   case fact |> snd |> theory_const_prop_of fudge
-            |> pconsts_in_fact thy irrelevant_consts of
+            |> pconsts_in_fact thy is_built_in_const of
     [] => NONE
   | consts => SOME ((fact, consts), NONE)
 
@@ -411,23 +423,23 @@
     (accepts, more_rejects @ rejects)
   end
 
-fun if_empty_replace_with_locality thy irrelevant_consts facts loc tab =
+fun if_empty_replace_with_locality thy is_built_in_const facts loc tab =
   if Symtab.is_empty tab then
-    pconsts_in_terms thy irrelevant_consts false (SOME false)
+    pconsts_in_terms thy is_built_in_const false (SOME false)
         (map_filter (fn ((_, loc'), th) =>
                         if loc' = loc then SOME (prop_of th) else NONE) facts)
   else
     tab
 
-fun relevance_filter ctxt threshold0 decay max_relevant irrelevant_consts
+fun relevance_filter ctxt threshold0 decay max_relevant is_built_in_const
         (fudge as {threshold_divisor, ridiculous_threshold, ...})
         ({add, del, ...} : relevance_override) facts goal_ts =
   let
     val thy = ProofContext.theory_of ctxt
     val const_tab = fold (count_fact_consts thy fudge) facts Symtab.empty
     val goal_const_tab =
-      pconsts_in_terms thy irrelevant_consts false (SOME false) goal_ts
-      |> fold (if_empty_replace_with_locality thy irrelevant_consts facts)
+      pconsts_in_terms thy is_built_in_const false (SOME false) goal_ts
+      |> fold (if_empty_replace_with_locality thy is_built_in_const facts)
               [Chained, Assum, Local]
     val add_ths = Attrib.eval_thms ctxt add
     val del_ths = Attrib.eval_thms ctxt del
@@ -448,8 +460,8 @@
                 take_most_relevant max_relevant remaining_max fudge candidates
               val rel_const_tab' =
                 rel_const_tab
-                |> fold (add_pconst_to_table irrelevant_consts false)
-                        (maps (snd o fst) accepts)
+                |> fold (add_pconst_to_table (K false) false)
+                        (maps (map (apfst (rpair dummyT)) o snd o fst) accepts)
               fun is_dirty (c, _) =
                 Symtab.lookup rel_const_tab' c <> Symtab.lookup rel_const_tab c
               val (hopeful_rejects, hopeless_rejects) =
@@ -508,8 +520,9 @@
                          andf (not o member (Thm.eq_thm o apsnd snd) accepts))
                         o snd))
       @ accepts
+      |> take max_relevant
   in
-    facts |> map_filter (pair_consts_fact thy irrelevant_consts fudge)
+    facts |> map_filter (pair_consts_fact thy is_built_in_const fudge)
           |> iter 0 max_relevant threshold0 goal_const_tab []
           |> not (null add_ths) ? add_add_ths
           |> tap (fn res => trace_msg (fn () =>
@@ -755,7 +768,7 @@
                               val name2 = Name_Space.extern full_space name0
                             in
                               case find_first check_thms [name1, name2, name0] of
-                                SOME name => repair_name reserved multi j name
+                                SOME name => make_name reserved multi j name
                               | NONE => ""
                             end),
                       let val t = prop_of th in
@@ -788,7 +801,7 @@
 (***************************************************************)
 
 fun relevant_facts ctxt full_types (threshold0, threshold1) max_relevant
-                   irrelevant_consts fudge (override as {add, only, ...})
+                   is_built_in_const fudge (override as {add, only, ...})
                    chained_ths hyp_ts concl_t =
   let
     val decay = Math.pow ((1.0 - threshold1) / (1.0 - threshold0),
@@ -812,7 +825,7 @@
              max_relevant = 0 then
        []
      else
-       relevance_filter ctxt threshold0 decay max_relevant irrelevant_consts
+       relevance_filter ctxt threshold0 decay max_relevant is_built_in_const
                         fudge override facts (concl_t :: hyp_ts))
     |> map (apfst (apfst (fn f => f ())))
   end
--- a/src/HOL/Tools/Sledgehammer/sledgehammer_isar.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Tools/Sledgehammer/sledgehammer_isar.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -78,7 +78,7 @@
    ("verbose", "false"),
    ("overlord", "false"),
    ("explicit_apply", "false"),
-   ("relevance_thresholds", "45 85"),
+   ("relevance_thresholds", "0.45 0.85"),
    ("max_relevant", "smart"),
    ("isar_proof", "false"),
    ("isar_shrink_factor", "1")]
@@ -177,7 +177,7 @@
              ("full_types", [if !full_types then "true" else "false"]),
              ("timeout", let val timeout = !timeout in
                            [if timeout <= 0 then "none"
-                            else string_of_int timeout ^ " s"]
+                            else string_of_int timeout]
                          end)]
   end
 
@@ -206,14 +206,14 @@
                     SOME n => n
                   | NONE => error ("Parameter " ^ quote name ^
                                    " must be assigned an integer value.")
-    fun lookup_int_pair name =
+    fun lookup_real_pair name =
       case lookup name of
-        NONE => (0, 0)
-      | SOME s => case s |> space_explode " " |> map Int.fromString of
-                    [SOME n1, SOME n2] => (n1, n2)
+        NONE => (0.0, 0.0)
+      | SOME s => case s |> space_explode " " |> map Real.fromString of
+                    [SOME r1, SOME r2] => (r1, r2)
                   | _ => error ("Parameter " ^ quote name ^
-                                "must be assigned a pair of integer values \
-                                \(e.g., \"60 95\")")
+                                "must be assigned a pair of floating-point \
+                                \values (e.g., \"0.6 0.95\")")
     fun lookup_int_option name =
       case lookup name of
         SOME "smart" => NONE
@@ -226,9 +226,7 @@
                   |> auto ? single o hd
     val full_types = lookup_bool "full_types"
     val explicit_apply = lookup_bool "explicit_apply"
-    val relevance_thresholds =
-      lookup_int_pair "relevance_thresholds"
-      |> pairself (fn n => 0.01 * Real.fromInt n)
+    val relevance_thresholds = lookup_real_pair "relevance_thresholds"
     val max_relevant = lookup_int_option "max_relevant"
     val isar_proof = lookup_bool "isar_proof"
     val isar_shrink_factor = Int.max (1, lookup_int "isar_shrink_factor")
@@ -322,7 +320,7 @@
                   end))
 
 val parse_key = Scan.repeat1 Parse.typ_group >> space_implode " "
-val parse_value = Scan.repeat1 Parse.xname
+val parse_value = Scan.repeat1 (Parse.xname || Parse.float_number)
 val parse_param = parse_key -- Scan.optional (Parse.$$$ "=" |-- parse_value) []
 val parse_params = Scan.optional (Args.bracks (Parse.list parse_param)) []
 val parse_fact_refs =
--- a/src/HOL/Tools/Sledgehammer/sledgehammer_minimize.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Tools/Sledgehammer/sledgehammer_minimize.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -42,14 +42,14 @@
        "")
   end
 
-fun test_facts ({debug, verbose, overlord, provers, full_types, isar_proof,
+fun test_facts ({debug, overlord, provers, full_types, isar_proof,
                  isar_shrink_factor, ...} : params) (prover : prover)
                explicit_apply timeout i n state facts =
   let
     val _ =
       Output.urgent_message ("Testing " ^ n_facts (map fst facts) ^ "...")
     val params =
-      {blocking = true, debug = debug, verbose = verbose, overlord = overlord,
+      {blocking = true, debug = debug, verbose = false, overlord = overlord,
        provers = provers, full_types = full_types,
        explicit_apply = explicit_apply, relevance_thresholds = (1.01, 1.01),
        max_relevant = NONE, isar_proof = isar_proof,
@@ -124,13 +124,13 @@
      | {outcome = SOME TimedOut, ...} =>
        (NONE, "Timeout: You can increase the time limit using the \"timeout\" \
               \option (e.g., \"timeout = " ^
-              string_of_int (10 + msecs div 1000) ^ " s\").")
+              string_of_int (10 + msecs div 1000) ^ "\").")
      | {outcome = SOME UnknownError, ...} =>
        (* Failure sometimes mean timeout, unfortunately. *)
        (NONE, "Failure: No proof was found with the current time limit. You \
               \can increase the time limit using the \"timeout\" \
               \option (e.g., \"timeout = " ^
-              string_of_int (10 + msecs div 1000) ^ " s\").")
+              string_of_int (10 + msecs div 1000) ^ "\").")
      | {message, ...} => (NONE, "ATP error: " ^ message))
     handle ERROR msg => (NONE, "Error: " ^ msg)
   end
--- a/src/HOL/Tools/Sledgehammer/sledgehammer_util.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Tools/Sledgehammer/sledgehammer_util.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -11,6 +11,7 @@
   val simplify_spaces : string -> string
   val parse_bool_option : bool -> string -> string -> bool option
   val parse_time_option : string -> string -> Time.time option
+  val string_from_time : Time.time -> string
   val nat_subscript : int -> string
   val unyxml : string -> string
   val maybe_quote : string -> string
@@ -49,23 +50,22 @@
                   space_implode " " (serial_commas "or" ss) ^ ".")
          end
 
+val has_junk =
+  exists (fn s => not (Symbol.is_digit s) andalso s <> ".") o explode
+
 fun parse_time_option _ "none" = NONE
   | parse_time_option name s =
-    let
-      val msecs =
-        case space_explode " " s of
-          [s1, "min"] => 60000 * the (Int.fromString s1)
-        | [s1, "s"] => 1000 * the (Int.fromString s1)
-        | [s1, "ms"] => the (Int.fromString s1)
-        | _ => 0
-    in
-      if msecs <= 0 then
-        error ("Parameter " ^ quote name ^ " must be assigned a positive time \
-               \value (e.g., \"60 s\", \"200 ms\") or \"none\".")
+    let val secs = if has_junk s then NONE else Real.fromString s in
+      if is_none secs orelse Real.<= (the secs, 0.0) then
+        error ("Parameter " ^ quote name ^ " must be assigned a positive \
+               \number of seconds (e.g., \"60\", \"0.5\") or \"none\".")
       else
-        SOME (Time.fromMilliseconds msecs)
+        SOME (seconds (the secs))
     end
 
+fun string_from_time t =
+  string_of_real (0.01 * Real.fromInt (Time.toMilliseconds t div 10)) ^ " s"
+
 val subscript = implode o map (prefix "\<^isub>") o explode
 fun nat_subscript n =
   n |> string_of_int |> print_mode_active Symbol.xsymbolsN ? subscript
--- a/src/HOL/Tools/TFL/tfl.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Tools/TFL/tfl.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -607,8 +607,7 @@
       val vlist = #2(S.strip_comb (S.rhs body))
       val plist = ListPair.zip (vlist, xlist)
       val args = map (the o AList.lookup (op aconv) plist) qvars
-                   handle Option => sys_error
-                       "TFL fault [alpha_ex_unroll]: no correspondence"
+                   handle Option => raise Fail "TFL.alpha_ex_unroll: no correspondence"
       fun build ex      []   = []
         | build (_$rex) (v::rst) =
            let val ex1 = Term.betapply(rex, v)
--- a/src/HOL/Tools/inductive.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Tools/inductive.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -229,7 +229,7 @@
 
 fun arg_types_of k c = drop k (binder_types (fastype_of c));
 
-fun find_arg T x [] = sys_error "find_arg"
+fun find_arg T x [] = raise Fail "find_arg"
   | find_arg T x ((p as (_, (SOME _, _))) :: ps) =
       apsnd (cons p) (find_arg T x ps)
   | find_arg T x ((p as (U, (NONE, y))) :: ps) =
--- a/src/HOL/Tools/primrec.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Tools/primrec.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -31,8 +31,6 @@
 fun primrec_error msg = raise PrimrecError (msg, NONE);
 fun primrec_error_eqn msg eqn = raise PrimrecError (msg, SOME eqn);
 
-fun message s = if ! Toplevel.debug then tracing s else ();
-
 
 (* preprocessing of equations *)
 
@@ -251,7 +249,6 @@
           if Variable.is_fixed lthy x then I else insert (op =) x | _ => I) eqs [];
         val rewrites = rec_rewrites' @ map (snd o snd) defs;
         fun tac _ = EVERY [rewrite_goals_tac rewrites, rtac refl 1];
-        val _ = message ("Proving equations for primrec function(s) " ^ commas_quote names);
       in map (fn eq => Goal.prove lthy frees [] eq tac) eqs end;
   in ((prefix, (fs, defs)), prove) end
   handle PrimrecError (msg, some_eqn) =>
--- a/src/HOL/Tools/record.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Tools/record.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -1578,7 +1578,7 @@
           (case rev params of
             [] =>
               (case AList.lookup (op =) (Term.add_frees g []) s of
-                NONE => sys_error "try_param_tac: no such variable"
+                NONE => error "try_param_tac: no such variable"
               | SOME T => [(P, if ca then concl else lambda (Free (s, T)) concl), (x, Free (s, T))])
           | (_, T) :: _ =>
               [(P, list_abs (params, if ca then concl else incr_boundvars 1 (Abs (s, T, concl)))),
--- a/src/HOL/Tools/sat_solver.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Tools/sat_solver.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -321,7 +321,7 @@
           []      => [xs1]
         | (0::[]) => [xs1]
         | (0::tl) => xs1 :: clauses tl
-        | _       => sys_error "this cannot happen"
+        | _       => raise Fail "SatSolver.clauses"
       end
     (* int -> PropLogic.prop_formula *)
     fun literal_from_int i =
--- a/src/HOL/Tools/split_rule.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/Tools/split_rule.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -7,7 +7,6 @@
 signature SPLIT_RULE =
 sig
   val split_rule_var: term -> thm -> thm
-  val split_rule_goal: Proof.context -> string list list -> thm -> thm
   val split_rule: thm -> thm
   val complete_split_rule: thm -> thm
   val setup: theory -> theory
@@ -48,7 +47,7 @@
   | split_rule_var' t rl = rl;
 
 
-(* complete splitting of partially splitted rules *)
+(* complete splitting of partially split rules *)
 
 fun ap_split' (T::Ts) U u = Abs ("v", T, ap_split' Ts U
       (ap_split T (maps HOLogic.flatten_tupleT Ts ---> U)
@@ -107,37 +106,12 @@
   end;
 
 
-fun pair_tac ctxt s =
-  res_inst_tac ctxt [(("y", 0), s)] @{thm prod.exhaust}
-  THEN' hyp_subst_tac
-  THEN' K prune_params_tac;
-
-val split_rule_ss = HOL_basic_ss addsimps [@{thm split_conv}, @{thm fst_conv}, @{thm snd_conv}];
-
-fun split_rule_goal ctxt xss rl =
-  let
-    fun one_split i s = Tactic.rule_by_tactic ctxt (pair_tac ctxt s i);
-    fun one_goal (i, xs) = fold (one_split (i + 1)) xs;
-  in
-    rl
-    |> fold_index one_goal xss
-    |> Simplifier.full_simplify split_rule_ss
-    |> Drule.export_without_context
-    |> Rule_Cases.save rl
-  end;
-
-
 (* attribute syntax *)
 
-(* FIXME dynamically scoped due to Args.name_source/pair_tac *)
-
 val setup =
   Attrib.setup @{binding split_format}
     (Scan.lift
-     (Args.parens (Args.$$$ "complete") >> K (Thm.rule_attribute (K complete_split_rule)) ||
-      Parse.and_list1 (Scan.repeat Args.name_source)
-        >> (fn xss => Thm.rule_attribute (fn context =>
-            split_rule_goal (Context.proof_of context) xss))))
+     (Args.parens (Args.$$$ "complete") >> K (Thm.rule_attribute (K complete_split_rule))))
     "split pair-typed subterms in premises, or function arguments" #>
   Attrib.setup @{binding split_rule} (Scan.succeed (Thm.rule_attribute (K split_rule)))
     "curries ALL function variables occurring in a rule's conclusion";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/ex/Quicksort.thy	Sat Nov 06 10:01:00 2010 -0700
@@ -0,0 +1,39 @@
+(*  Author:     Tobias Nipkow
+    Copyright   1994 TU Muenchen
+*)
+
+header {* Quicksort with function package *}
+
+theory Quicksort
+imports Main Multiset
+begin
+
+context linorder
+begin
+
+fun quicksort :: "'a list \<Rightarrow> 'a list" where
+  "quicksort []     = []"
+| "quicksort (x#xs) = quicksort [y\<leftarrow>xs. \<not> x\<le>y] @ [x] @ quicksort [y\<leftarrow>xs. x\<le>y]"
+
+lemma [code]:
+  "quicksort []     = []"
+  "quicksort (x#xs) = quicksort [y\<leftarrow>xs. y<x] @ [x] @ quicksort [y\<leftarrow>xs. x\<le>y]"
+  by (simp_all add: not_le)
+
+lemma quicksort_permutes [simp]:
+  "multiset_of (quicksort xs) = multiset_of xs"
+  by (induct xs rule: quicksort.induct) (simp_all add: ac_simps)
+
+lemma set_quicksort [simp]: "set (quicksort xs) = set xs"
+  by (simp add: set_count_greater_0)
+
+lemma sorted_quicksort: "sorted (quicksort xs)"
+  by (induct xs rule: quicksort.induct) (auto simp add: sorted_Cons sorted_append not_le less_imp_le)
+
+theorem sort_quicksort:
+  "sort = quicksort"
+  by (rule ext, rule properties_for_sort) (fact quicksort_permutes sorted_quicksort)+
+
+end
+
+end
--- a/src/HOL/ex/ROOT.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/HOL/ex/ROOT.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -66,7 +66,8 @@
   "Execute_Choice",
   "Summation",
   "Gauge_Integration",
-  "Dedekind_Real"
+  "Dedekind_Real",
+  "Quicksort"
 ];
 
 HTML.with_charset "utf-8" (no_document use_thys)
--- a/src/Provers/Arith/fast_lin_arith.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/Provers/Arith/fast_lin_arith.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -327,8 +327,8 @@
 
 fun multiply_ineq n (i as Lineq(k,ty,l,just)) =
   if n = 1 then i
-  else if n = 0 andalso ty = Lt then sys_error "multiply_ineq"
-  else if n < 0 andalso (ty=Le orelse ty=Lt) then sys_error "multiply_ineq"
+  else if n = 0 andalso ty = Lt then raise Fail "multiply_ineq"
+  else if n < 0 andalso (ty=Le orelse ty=Lt) then raise Fail "multiply_ineq"
   else Lineq (n * k, ty, map (Integer.mult n) l, Multiplied (n, just));
 
 (* ------------------------------------------------------------------------- *)
@@ -352,7 +352,7 @@
         if (c1 >= 0) = (c2 >= 0)
         then if ty1 = Eq then (~m1,m2)
              else if ty2 = Eq then (m1,~m2)
-                  else sys_error "elim_var"
+                  else raise Fail "elim_var"
         else (m1,m2)
       val (p1,p2) = if ty1=Eq andalso ty2=Eq andalso (n1 = ~1 orelse n2 = ~1)
                     then (~n1,~n2) else (n1,n2)
@@ -497,7 +497,7 @@
               (the (try_add ([thm2] RL inj_thms) thm1)
                 handle Option =>
                   (trace_thm ctxt "" thm1; trace_thm ctxt "" thm2;
-                   sys_error "Linear arithmetic: failed to add thms"))
+                   raise Fail "Linear arithmetic: failed to add thms"))
           | SOME thm => thm)
       | SOME thm => thm);
 
@@ -598,7 +598,7 @@
                 else lineq(c,Lt,diff,just)
      | "~<"  => lineq(~c,Le,map (op~) diff,NotLessD(just))
      | "="   => lineq(c,Eq,diff,just)
-     | _     => sys_error("mklineq" ^ rel)
+     | _     => raise Fail ("mklineq" ^ rel)
   end;
 
 (* ------------------------------------------------------------------------- *)
--- a/src/Pure/Isar/code.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/Pure/Isar/code.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -124,11 +124,23 @@
  of SOME c_ty => c_ty
   | NONE => error ("Not a constant: " ^ Syntax.string_of_term_global thy t);
 
-fun check_const thy = AxClass.unoverload_const thy o check_bare_const thy;
+fun check_unoverload thy (c, ty) =
+  let
+    val c' = AxClass.unoverload_const thy (c, ty);
+    val ty_decl = Sign.the_const_type thy c';
+  in if Sign.typ_equiv thy
+      (Type.strip_sorts ty_decl, Type.strip_sorts (Logic.varifyT_global ty)) then c'
+    else error ("Type\n" ^ string_of_typ thy ty
+      ^ "\nof constant " ^ quote c
+      ^ "\nis too specific compared to declared type\n"
+      ^ string_of_typ thy ty_decl)
+  end; 
+
+fun check_const thy = check_unoverload thy o check_bare_const thy;
 
 fun read_bare_const thy = check_bare_const thy o Syntax.read_term_global thy;
 
-fun read_const thy = AxClass.unoverload_const thy o read_bare_const thy;
+fun read_const thy = check_unoverload thy o read_bare_const thy;
 
 
 (** data store **)
@@ -222,7 +234,7 @@
 
 fun invoke f k = case Datatab.lookup (! kinds) k
  of SOME kind => f kind
-  | NONE => sys_error "Invalid code data identifier";
+  | NONE => raise Fail "Invalid code data identifier";
 
 in
 
@@ -471,7 +483,7 @@
   in if Sign.typ_equiv thy (Type.strip_sorts ty_decl, Type.strip_sorts ty) then ()
     else bad_thm ("Type\n" ^ string_of_typ thy ty
       ^ "\nof constant " ^ quote c
-      ^ "\nis incompatible with declared type\n"
+      ^ "\nis too specific compared to declared type\n"
       ^ string_of_typ thy ty_decl)
   end; 
 
--- a/src/Pure/Isar/runtime.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/Pure/Isar/runtime.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -68,7 +68,6 @@
         | TERMINATE => ["Exit"]
         | TimeLimit.TimeOut => ["Timeout"]
         | TOPLEVEL_ERROR => ["Error"]
-        | SYS_ERROR msg => ["## SYSTEM ERROR ##\n" ^ msg]
         | ERROR msg => [msg]
         | Fail msg => [raised exn "Fail" [msg]]
         | THEORY (msg, thys) =>
--- a/src/Pure/ML-Systems/timing.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/Pure/ML-Systems/timing.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -1,10 +1,10 @@
 (*  Title:      Pure/ML-Systems/timing.ML
     Author:     Makarius
 
-Basic support for timing.
+Basic support for time measurement.
 *)
 
-fun seconds s = Time.fromNanoseconds (Real.ceil (s * 1E9));
+val seconds = Time.fromReal;
 
 fun start_timing () =
   let
--- a/src/Pure/ML/ml_lex.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/Pure/ML/ml_lex.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -70,6 +70,14 @@
 fun content_of (Token (_, (_, x))) = x;
 fun token_leq (tok, tok') = content_of tok <= content_of tok';
 
+fun warn tok =
+  (case tok of
+    Token (_, (Keyword, ":>")) =>
+      warning ("Opaque signature matching (:>) fails to work with ML pretty printing --\n\
+        \prefer non-opaque matching (:) possibly with abstype" ^
+        Position.str_of (pos_of tok))
+  | _ => ());
+
 fun check_content_of tok =
   (case kind_of tok of
     Error msg => error msg
@@ -281,7 +289,7 @@
         |> Source.exhaust
         |> tap (List.app (Antiquote.report report_token))
         |> tap Antiquote.check_nesting
-        |> tap (List.app (fn Antiquote.Text tok => ignore (check_content_of tok) | _ => ())))
+        |> tap (List.app (fn Antiquote.Text tok => (check_content_of tok; warn tok) | _ => ())))
       handle ERROR msg =>
         cat_error msg ("The error(s) above occurred in ML source" ^ Position.str_of pos);
   in input @ termination end;
--- a/src/Pure/codegen.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/Pure/codegen.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -354,10 +354,11 @@
 fun is_ascii_letdig x = Symbol.is_ascii_letter x orelse
   Symbol.is_ascii_digit x orelse Symbol.is_ascii_quasi x;
 
-fun dest_sym s = (case split_last (snd (take_prefix (fn c => c = "\\") (explode s))) of
+fun dest_sym s =
+  (case split_last (snd (take_prefix (fn c => c = "\\") (explode s))) of
     ("<" :: "^" :: xs, ">") => (true, implode xs)
   | ("<" :: xs, ">") => (false, implode xs)
-  | _ => sys_error "dest_sym");
+  | _ => raise Fail "dest_sym");
 
 fun mk_id s = if s = "" then "" else
   let
@@ -378,7 +379,7 @@
 
 fun mk_long_id (p as (tab, used)) module s =
   let
-    fun find_name [] = sys_error "mk_long_id"
+    fun find_name [] = raise Fail "mk_long_id"
       | find_name (ys :: yss) =
           let
             val s' = Long_Name.implode ys
--- a/src/Pure/library.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/Pure/library.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -29,8 +29,6 @@
   val funpow_yield: int -> ('a -> 'b * 'a) -> 'a -> 'b list * 'a
 
   (*errors*)
-  exception SYS_ERROR of string
-  val sys_error: string -> 'a
   exception ERROR of string
   val error: string -> 'a
   val cat_error: string -> string -> 'a
@@ -256,11 +254,9 @@
 fun funpow_yield (0 : int) _ x = ([], x)
   | funpow_yield n f x = x |> f ||>> funpow_yield (n - 1) f |>> op ::;
 
+
 (* errors *)
 
-exception SYS_ERROR of string;
-fun sys_error msg = raise SYS_ERROR msg;
-
 exception ERROR of string;
 fun error msg = raise ERROR msg;
 
--- a/src/Tools/jEdit/plugin/Isabelle.props	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/Tools/jEdit/plugin/Isabelle.props	Sat Nov 06 10:01:00 2010 -0700
@@ -29,6 +29,8 @@
 options.isabelle.relative-font-size=100
 options.isabelle.tooltip-font-size.title=Tooltip Font Size
 options.isabelle.tooltip-font-size=10
+options.isabelle.tooltip-margin.title=Tooltip Margin
+options.isabelle.tooltip-margin=40
 options.isabelle.tooltip-dismiss-delay.title=Tooltip Dismiss Delay (global)
 options.isabelle.tooltip-dismiss-delay=8000
 options.isabelle.startup-timeout=10000
--- a/src/Tools/jEdit/src/jedit/document_view.scala	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/Tools/jEdit/src/jedit/document_view.scala	Sat Nov 06 10:01:00 2010 -0700
@@ -165,6 +165,8 @@
 
   /* CONTROL-mouse management */
 
+  private var control: Boolean = false
+
   private def exit_control()
   {
     exit_popup()
@@ -184,7 +186,7 @@
 
   private val mouse_motion_listener = new MouseMotionAdapter {
     override def mouseMoved(e: MouseEvent) {
-      val control = if (OperatingSystem.isMacOS()) e.isMetaDown else e.isControlDown
+      control = if (OperatingSystem.isMacOS()) e.isMetaDown else e.isControlDown
       val x = e.getX()
       val y = e.getY()
 
@@ -288,10 +290,20 @@
       Isabelle.swing_buffer_lock(model.buffer) {
         val snapshot = model.snapshot()
         val offset = text_area.xyToOffset(x, y)
-        snapshot.select_markup(Text.Range(offset, offset + 1))(Isabelle_Markup.tooltip) match
-        {
-          case Text.Info(_, Some(text)) #:: _ => Isabelle.tooltip(text)
-          case _ => null
+        if (control) {
+          snapshot.select_markup(Text.Range(offset, offset + 1))(Isabelle_Markup.tooltip) match
+          {
+            case Text.Info(_, Some(text)) #:: _ => Isabelle.tooltip(text)
+            case _ => null
+          }
+        }
+        else {
+          // FIXME snapshot.cumulate
+          snapshot.select_markup(Text.Range(offset, offset + 1))(Isabelle_Markup.popup) match
+          {
+            case Text.Info(_, Some(text)) #:: _ => Isabelle.tooltip(text)
+            case _ => null
+          }
         }
       }
     }
--- a/src/Tools/jEdit/src/jedit/isabelle_markup.scala	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/Tools/jEdit/src/jedit/isabelle_markup.scala	Sat Nov 06 10:01:00 2010 -0700
@@ -84,10 +84,11 @@
     case Text.Info(_, XML.Elem(Markup(Markup.ERROR, _), _)) => error_color
   }
 
-  val popup: Markup_Tree.Select[XML.Tree] =
+  val popup: Markup_Tree.Select[String] =
   {
     case Text.Info(_, msg @ XML.Elem(Markup(markup, _), _))
-    if markup == Markup.WRITELN || markup == Markup.WARNING || markup == Markup.ERROR => msg
+    if markup == Markup.WRITELN || markup == Markup.WARNING || markup == Markup.ERROR =>
+      Pretty.string_of(List(msg), margin = Isabelle.Int_Property("tooltip-margin"))
   }
 
   val gutter_message: Markup_Tree.Select[Icon] =
@@ -109,7 +110,8 @@
   val tooltip: Markup_Tree.Select[String] =
   {
     case Text.Info(_, XML.Elem(Markup(Markup.ML_TYPING, _), body)) =>
-      Pretty.string_of(List(Pretty.block(XML.Text("ML:") :: Pretty.Break(1) :: body)), margin = 40)
+      Pretty.string_of(List(Pretty.block(XML.Text("ML:") :: Pretty.Break(1) :: body)),
+        margin = Isabelle.Int_Property("tooltip-margin"))
     case Text.Info(_, XML.Elem(Markup(Markup.SORT, _), _)) => "sort"
     case Text.Info(_, XML.Elem(Markup(Markup.TYP, _), _)) => "type"
     case Text.Info(_, XML.Elem(Markup(Markup.TERM, _), _)) => "term"
--- a/src/Tools/jEdit/src/jedit/isabelle_options.scala	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/Tools/jEdit/src/jedit/isabelle_options.scala	Sat Nov 06 10:01:00 2010 -0700
@@ -20,6 +20,7 @@
   private val auto_start = new CheckBox()
   private val relative_font_size = new JSpinner()
   private val tooltip_font_size = new JSpinner()
+  private val tooltip_margin = new JSpinner()
   private val tooltip_dismiss_delay = new JSpinner()
 
   override def _init()
@@ -35,6 +36,9 @@
     tooltip_font_size.setValue(Isabelle.Int_Property("tooltip-font-size", 10))
     addComponent(Isabelle.Property("tooltip-font-size.title"), tooltip_font_size)
 
+    tooltip_margin.setValue(Isabelle.Int_Property("tooltip-margin", 40))
+    addComponent(Isabelle.Property("tooltip-margin.title"), tooltip_margin)
+
     tooltip_dismiss_delay.setValue(Isabelle.Int_Property("tooltip-dismiss-delay", 8000))
     addComponent(Isabelle.Property("tooltip-dismiss-delay.title"), tooltip_dismiss_delay)
   }
@@ -51,6 +55,9 @@
     Isabelle.Int_Property("tooltip-font-size") =
       tooltip_font_size.getValue().asInstanceOf[Int]
 
+    Isabelle.Int_Property("tooltip-margin") =
+      tooltip_margin.getValue().asInstanceOf[Int]
+
     Isabelle.Int_Property("tooltip-dismiss-delay") =
       tooltip_dismiss_delay.getValue().asInstanceOf[Int]
   }
--- a/src/Tools/nbe.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/Tools/nbe.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -64,7 +64,7 @@
     val lhs_rhs = case try Logic.dest_equals eqn
      of SOME lhs_rhs => lhs_rhs
       | _ => error ("Not an equation: " ^ Syntax.string_of_term_global thy eqn);
-    val c_c' = case try (pairself (Code.check_const thy)) lhs_rhs
+    val c_c' = case try (pairself (AxClass.unoverload_const thy o dest_Const)) lhs_rhs
      of SOME c_c' => c_c'
       | _ => error ("Not an equation with two constants: "
           ^ Syntax.string_of_term_global thy eqn);
--- a/src/Tools/quickcheck.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/Tools/quickcheck.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -16,12 +16,12 @@
   datatype expectation = No_Expectation | No_Counterexample | Counterexample;
   datatype test_params = Test_Params of
   { size: int, iterations: int, default_type: typ list, no_assms: bool,
-    expect : expectation, report: bool, quiet : bool, timeout : int};
+    expect : expectation, report: bool, quiet : bool, timeout : real};
   val test_params_of : Proof.context -> test_params
   val report : Proof.context -> bool
   val map_test_params :
-    ((int * int) * ((typ list * bool) * ((expectation * bool) * (bool * int)))
-      -> (int * int) * ((typ list * bool) * ((expectation * bool) * (bool * int))))
+    ((int * int) * ((typ list * bool) * ((expectation * bool) * (bool * real)))
+      -> (int * int) * ((typ list * bool) * ((expectation * bool) * (bool * real))))
     -> Context.generic -> Context.generic
   val add_generator:
     string * (Proof.context -> term -> int -> term list option * (bool list * bool))
@@ -81,7 +81,7 @@
 
 datatype test_params = Test_Params of
   { size: int, iterations: int, default_type: typ list, no_assms: bool,
-    expect : expectation, report: bool, quiet : bool, timeout : int};
+    expect : expectation, report: bool, quiet : bool, timeout : real};
 
 fun dest_test_params
     (Test_Params { size, iterations, default_type, no_assms, expect, report, quiet, timeout }) =
@@ -105,7 +105,7 @@
   make_test_params ((Int.max (size1, size2), Int.max (iterations1, iterations2)),
     ((merge (op =) (default_type1, default_type2), no_assms1 orelse no_assms2),
     ((merge_expectation (expect1, expect2), report1 orelse report2),
-    (quiet1 orelse quiet2, Int.min (timeout1, timeout2)))));
+    (quiet1 orelse quiet2, Real.min (timeout1, timeout2)))));
 
 structure Data = Generic_Data
 (
@@ -114,7 +114,7 @@
       * test_params;
   val empty = ([], Test_Params
     { size = 10, iterations = 100, default_type = [], no_assms = false,
-      expect = No_Expectation, report = false, quiet = false, timeout = 30});
+      expect = No_Expectation, report = false, quiet = false, timeout = 30.0});
   val extend = I;
   fun merge ((generators1, params1), (generators2, params2)) : T =
     (AList.merge (op =) (K true) (generators1, generators2),
@@ -200,6 +200,9 @@
 fun test_term ctxt generator_name t =
   let
     val (names, t') = prep_test_term t;
+    val current_size = Unsynchronized.ref 0
+    fun excipit s =
+      "Quickcheck " ^ s ^ " while testing at size " ^ string_of_int (!current_size)
     val (testers, comp_time) = cpu_time "quickcheck compilation"
       (fn () => (case generator_name
        of NONE => if quiet ctxt then mk_testers ctxt t' else mk_testers_strict ctxt t'
@@ -225,15 +228,18 @@
       else
        (if quiet ctxt then () else Output.urgent_message ("Test data size: " ^ string_of_int k);
         let
+          val _ = current_size := k  
           val (result, new_report) = with_testers k testers
           val reports = ((k, new_report) :: reports)
         in case result of NONE => with_size (k + 1) reports | SOME q => (SOME q, reports) end);
     val ((result, reports), exec_time) =
-      TimeLimit.timeLimit (Time.fromSeconds (timeout ctxt)) (fn () => cpu_time "quickcheck execution"
+      TimeLimit.timeLimit (seconds (timeout ctxt)) (fn () => cpu_time "quickcheck execution"
       (fn () => apfst
          (fn result => case result of NONE => NONE
         | SOME ts => SOME (names ~~ ts)) (with_size 1 []))) ()
-      handle TimeLimit.TimeOut => error "Reached timeout during Quickcheck"
+      handle TimeLimit.TimeOut =>
+        error (excipit "ran out of time")
+     | Exn.Interrupt => error (excipit "was interrupted")  (* FIXME violates Isabelle/ML exception model *)
   in
     (result, ([exec_time, comp_time], if report ctxt then SOME reports else NONE))
   end;
@@ -367,6 +373,11 @@
   | read_bool "true" = true
   | read_bool s = error ("Not a Boolean value: " ^ s)
 
+fun read_real s =
+  case (Real.fromString s) of
+    SOME s => s
+  | NONE => error ("Not a real number: " ^ s)
+
 fun read_expectation "no_expectation" = No_Expectation
   | read_expectation "no_counterexample" = No_Counterexample 
   | read_expectation "counterexample" = Counterexample
@@ -387,7 +398,7 @@
   | parse_test_param ctxt ("quiet", [arg]) =
       (apsnd o apsnd o apsnd o apfst o K) (read_bool arg)
   | parse_test_param ctxt ("timeout", [arg]) =
-      (apsnd o apsnd o apsnd o apsnd o K) (read_nat arg)
+      (apsnd o apsnd o apsnd o apsnd o K) (read_real arg)
   | parse_test_param ctxt (name, _) =
       error ("Unknown test parameter: " ^ name);
 
@@ -431,7 +442,7 @@
   |> Pretty.writeln o pretty_counterex_and_reports (Toplevel.context_of state) false;
 
 val parse_arg = Parse.name -- (Scan.optional (Parse.$$$ "=" |-- 
-  ((Parse.name >> single) || (Parse.$$$ "[" |-- Parse.list1 Parse.name --| Parse.$$$ "]"))) ["true"]);
+  (((Parse.name || Parse.float_number) >> single) || (Parse.$$$ "[" |-- Parse.list1 Parse.name --| Parse.$$$ "]"))) ["true"]);
 
 val parse_args = Parse.$$$ "[" |-- Parse.list1 parse_arg --| Parse.$$$ "]"
   || Scan.succeed [];
--- a/src/ZF/Tools/numeral_syntax.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/ZF/Tools/numeral_syntax.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -21,7 +21,7 @@
 
 fun mk_bit 0 = Syntax.const @{const_syntax "0"}
   | mk_bit 1 = Syntax.const @{const_syntax succ} $ Syntax.const @{const_syntax 0}
-  | mk_bit _ = sys_error "mk_bit";
+  | mk_bit _ = raise Fail "mk_bit";
 
 fun dest_bit (Const (@{const_syntax "0"}, _)) = 0
   | dest_bit (Const (@{const_syntax succ}, _) $ Const (@{const_syntax "0"}, _)) = 1
--- a/src/ZF/int_arith.ML	Fri Nov 05 15:15:28 2010 -0700
+++ b/src/ZF/int_arith.ML	Sat Nov 06 10:01:00 2010 -0700
@@ -4,18 +4,25 @@
 Simprocs for linear arithmetic.
 *)
 
-structure Int_Numeral_Simprocs =
+signature INT_NUMERAL_SIMPROCS =
+sig
+  val cancel_numerals: simproc list
+  val combine_numerals: simproc
+  val combine_numerals_prod: simproc
+end
+
+structure Int_Numeral_Simprocs: INT_NUMERAL_SIMPROCS =
 struct
 
 (* abstract syntax operations *)
 
 fun mk_bit 0 = @{term "0"}
   | mk_bit 1 = @{term "succ(0)"}
-  | mk_bit _ = sys_error "mk_bit";
+  | mk_bit _ = raise TERM ("mk_bit", []);
 
 fun dest_bit @{term "0"} = 0
   | dest_bit @{term "succ(0)"} = 1
-  | dest_bit _ = raise Match;
+  | dest_bit t = raise TERM ("dest_bit", [t]);
 
 fun mk_bin i =
   let
@@ -29,7 +36,7 @@
     fun bin_of @{term Pls} = []
       | bin_of @{term Min} = [~1]
       | bin_of (@{term Bit} $ bs $ b) = dest_bit b :: bin_of bs
-      | bin_of _ = sys_error "dest_bin";
+      | bin_of _ = raise TERM ("dest_bin", [tm]);
   in Numeral_Syntax.dest_binary (bin_of tm) end;
 
 
@@ -37,10 +44,8 @@
 
 fun mk_numeral i = @{const integ_of} $ mk_bin i;
 
-(*Decodes a binary INTEGER*)
-fun dest_numeral (Const(@{const_name integ_of}, _) $ w) =
-     (dest_bin w handle SYS_ERROR _ => raise TERM("Int_Numeral_Simprocs.dest_numeral:1", [w]))
-  | dest_numeral t = raise TERM("Int_Numeral_Simprocs.dest_numeral:2", [t]);
+fun dest_numeral (Const(@{const_name integ_of}, _) $ w) = dest_bin w
+  | dest_numeral t = raise TERM ("dest_numeral", [t]);
 
 fun find_first_numeral past (t::terms) =
         ((dest_numeral t, rev past @ terms)
@@ -59,8 +64,6 @@
 fun long_mk_sum []        = zero
   | long_mk_sum (t :: ts) = mk_plus (t, mk_sum ts);
 
-val dest_plus = FOLogic.dest_bin @{const_name "zadd"} @{typ i};
-
 (*decompose additions AND subtractions as a sum*)
 fun dest_summing (pos, Const (@{const_name "zadd"}, _) $ t $ u, ts) =
         dest_summing (pos, t, dest_summing (pos, u, ts))
@@ -71,9 +74,6 @@
 
 fun dest_sum t = dest_summing (true, t, []);
 
-val mk_diff = FOLogic.mk_binop @{const_name "zdiff"};
-val dest_diff = FOLogic.dest_bin @{const_name "zdiff"} @{typ i};
-
 val one = mk_numeral 1;
 val mk_times = FOLogic.mk_binop @{const_name "zmult"};