Logiweb(TM)

Logiweb body of finalversion in pyk

Up Help

"File page.tex
\documentclass [fleqn]{article}

\everymath{\rm}
\everydisplay{\rm}
\usepackage{latexsym}
\setlength {\overfullrule }{0mm}
%\input{lgwinclude}

\usepackage{url}
\usepackage[dvipdfm=true]{hyperref}
\usepackage{amsmath}
\usepackage{theorem}
\usepackage{amssymb}
\hypersetup{pdfpagemode=none}
\hypersetup{pdfstartpage=1}
\hypersetup{pdfstartview=FitBH}
\hypersetup{pdfpagescrop={120 80 490 730}}
\hypersetup{pdftitle=Logiweb sequent calculus}
\hypersetup{colorlinks=true}

% Save current \parindent (used by e.g. pyk display ... end display)
\newlength{\docparindent}
\setlength{\docparindent}{\parindent}

%Our extras
\newtheorem{Def}{Definition}[section]
\newtheorem{Lem}[Def]{Lemma}
\newtheorem{The}[Def]{Theorem}
\newtheorem{Cor}[Def]{Corollary}
\newtheorem{Alg}[Def]{Algorithm}
\theorembodyfont{\rmfamily} %normale bogstaver
\newtheorem{Exa}[Def]{Example}
\newtheorem{Rem}[Def]{Remark}

\newenvironment{proof}{
{\bf{\scriptsize{\uppercase{proof:}}}}\\}{
\begin{flushright}
\ensuremath{\blacksquare}
\end{flushright}}
\newcommand{\qedsubproof}{\begin{flushright}\ensuremath{\square}\end{flushright}}

\begin{document}
\title{Formal Logic}
\author{Lasse Nielsen \& Morten Ib Nielsen\\
Department of Computer Science, University of Copenhagen}
\date{\today}
\maketitle

\section{Initial remarks}
Initially we planned to show a simple result of Group Theory namely the
uniqueness of the neutral element. Our idea was to develop propositional logic
and predicate calculus first. Based on these we planned to develop the axiomatic set theory ZFC
and finally when we had sets we could define groups. Unfortunately it turned out that this was
much more cumbersome than we thought both because we are newcomers to Logiweb\texttrademark{} and also because core Logiweb\texttrademark{}
is very low level. Being newcomers to Logiweb\texttrademark{} we have used a lot of time
trying to find out how to use the system. This hasn't been easy due to the absence of a hands on users manual.
Thus we wasted a lot of time early on trying to parse other peoples code from earlier years in order to understand how
to use pyk (the language used to construct proofs ect. in Logiweb\texttrademark{}). This was a very frustrating and non-trivial task since this years pyk syntax is different from earlier years!
A lot of emailing back and forth with Klaus Grue helped us, but progress was slow. Very late in the course we had the opportunity
to sit down with Klaus in a kind of assisted programming session, where Klaus helped us with our problems as they occurred -
this was very rewarding. After that we revised our goals with respect to this project and we found that even though we were now
able to prove things in Logiweb\texttrademark{} our initial goal was out of range because of the assembler like nature of our predicate calculus.
Instead we decided to take the first step towards a more high level interface to our predicate calculus.

\section{Conclusion}
This Logiweb\texttrademark{} page is an exam project on the course \emph{202 Logik} Spring 2006 at
the Department of Computer Science, University of Copenhagen. The purpose with this project is to use
Logiweb\texttrademark{} \emph{to publish a machine checkable proof for a theorem of our choise} - which we have done
\footnote{This page has been verified and found correct by Logiweb\texttrademark{} and is
available at \url{http://www.diku.dk/hjemmesider/ansatte/grue/logiweb/20060417/home/mortenib/finalversion/fixed/}.}.
Since
both of us have backgrounds in mathematics and formal methods in computer science we started out having
high ambitions. As hinted we had to revise our goals along the way for several reasons. Instead of doing
a large and complicated proof we have decided to show how to use the Logiweb\texttrademark{} system to
\emph{define a theory} (a set of axioms) and how to \emph{define and prove lemmas in a theory} (both using axioms
as well as already proved lemmas). Along the way we have explained key parts of the Logiweb\texttrademark{} notation.
It is our hope that this Logiweb\texttrademark{} page will serve as a helping hand to
future students on this course providing the \emph{getting started} manual that we have been missing so much.

We start out defining a theory called \emph{pred calc} containing one possible set of axioms and inference rules
for the predicate calculus. Since these axioms are very low level we define, inspired by Natural Deduction
(see \cite{huth}), a set of higher level (and more intuitive) proof rules which we prove. Finally we use these
higher level rules to prove lemma \ref{lem:mainresult}.

\section{Introduction}
This Logiweb\texttrademark{} page is formally correct. This means that it has been verified and found correct by the Logiweb\texttrademark{} proof engine.
Therefore we can say that it is correct modulo errors in the proof engine. Is the content correct then? Well yes, but only in the sense that the lemmas
we have proved are consequences of the axioms and proof rules we have introduced. There is no guarantee of soundness of our axioms and proof rules.

We have structured this document as follows. In section \ref{sec:predcalc} we define the axioms and proof rules
of predicate calculus. We conclude the section with two simple proofs namely the very (intuitively) obvious
lemma \emph{trivia} \ref{lem:trivia} and the lemma \emph{repeat} \ref{lem:repeat}. Then in section
\ref{sec:natded} we state and prove lemmas inspired by Natural Deduction. Finally in section \ref{sec:higherproof}
we use these lemmas to prove lemma \ref{lem:mainresult}. The appendix includes various Logiweb\texttrademark{} dependent
stuff like \emph{Tex definitions} and \emph{Priority table} but also our suggestions of how Logiweb\texttrademark{} could be improved.

\section{First order predicate calculus}\label{sec:predcalc}
Based on Mathworld\footnote{\url{http://mathworld.wolfram.com/First-OrderLogic.html}.} and thus on Kleene (2002) we define
first-order predicate calculus below. We note that the axioms 1 through 10 together with the inference rule
modus ponens (pcmp) constitutes the propositional calculus. Our definitions are not exactly like those found on Mathworld for two reasons.
First we have made $\Rightarrow$ right associative in order to get rid of unnecessary parenthesis. This means that
" [ math meta f imply meta g imply meta f end math ] " really means
" [ math meta f imply parenthesis meta g imply meta f end parenthesis end math ] " below. Second we had to express formulations such as \emph{in which $x$ occurs free} in
a machine checkable way.

The " [ math theory pred calc end theory end math ] " contains the following axioms:

\begin{enumerate}
\item " [ math in theory pred calc rule pc1 says for all terms meta f comma meta g indeed meta f imply meta g imply meta f end rule end math ] "

\item " [ math in theory pred calc rule pc2 says for all terms meta f comma meta g comma meta h indeed parenthesis meta f imply meta g end parenthesis imply parenthesis meta f imply meta g imply meta h end parenthesis imply meta f imply meta h end rule end math ] "

\item " [ math in theory pred calc rule pc3 says for all terms meta f comma meta g indeed meta f imply meta g imply meta f land meta g end rule end math ] "

\item " [ math in theory pred calc rule pc4 says for all terms meta f comma meta g indeed meta f imply meta f lor meta g end rule end math ] "

\item " [ math in theory pred calc rule pc5 says for all terms meta f comma meta g indeed meta f imply meta g lor meta f end rule end math ] "

\item " [ math in theory pred calc rule pc6 says for all terms meta f comma meta g indeed meta f land meta g imply meta f end rule end math ] "

\item " [ math in theory pred calc rule pc7 says for all terms meta f comma meta g indeed meta f land meta g imply meta g end rule end math ] "

\item " [ math in theory pred calc rule pc8 says for all terms meta f comma meta g comma meta h indeed parenthesis meta f imply meta g end parenthesis imply parenthesis meta h imply meta g end parenthesis imply meta f lor meta h imply meta g end rule end math ] "

\item " [ math in theory pred calc rule pc9 says for all terms meta f comma meta g indeed parenthesis meta f imply meta g end parenthesis imply parenthesis meta f imply lnot meta g end parenthesis imply lnot meta f end rule end math ] "

\item " [ math in theory pred calc rule pc10 says for all terms meta f indeed lnot lnot meta f imply meta f end rule end math ] "

\item " [ math in theory pred calc rule pc11 says for all terms meta x comma meta r comma meta g comma meta f indeed meta x avoid meta r endorse meta x avoid meta g endorse sub meta g is meta f where meta x is meta r end sub endorse forall meta x dot meta f end forall imply meta g end rule end math ] "

\item " [ math in theory pred calc rule pc12 says for all terms meta x comma meta r comma meta g comma meta f indeed meta x avoid meta r endorse meta x avoid meta g endorse sub meta g is meta f where meta x is meta r end sub endorse meta g imply exists meta x dot meta f end exists end rule end math ] "

\end{enumerate}

The proof rules in the " [ math theory pred calc end theory end math ] " are:

\begin{itemize}
\item " [ math in theory pred calc rule pcmp says for all terms meta f comma meta g indeed meta f infer meta f imply meta g infer meta g end rule end math ] "

\item " [ math in theory pred calc rule pcia says for all terms meta f comma meta g comma meta x indeed meta x avoid meta g endorse meta g imply meta f infer meta g imply forall meta x dot meta f end forall end rule end math ] "

\item " [ math in theory pred calc rule pcie says for all terms meta f comma meta g comma meta x indeed meta x avoid meta g endorse meta f imply meta g infer exists meta x dot meta f end exists imply meta g end rule end math ] "

\item " [ math in theory pred calc rule pcdeduction says for all terms meta a comma meta b indeed deduction meta a conclude meta b end deduction endorse meta a infer meta b end rule end math ] "
\end{itemize}

\subsection{A conservative extension}
The rule \emph{pcdeduction} is not really a part of Predicate Calculus according to Mathworld but it is a conservative extension
in the sense than we cannot prove anything using this rule that we cannot prove without it. We include it in order to make proofs shorter
and thus easier to understand for humans. As a curiosity we cannot prove that \emph{pcdeduction} is a conservative extension formally
\footnote{In a machine checkable way.}.

\subsection{A troublesome extension}
It seems fair to conclude " [ math meta b end math ] " if both " [ math meta a infer meta b end math ] " and " [ math meta a end math ] " are known.
This is the proof rule \emph{modus ponens}. Unfortunately Logiweb\texttrademark{} does not allow the use of modus ponens on anything other than lemmas
e.g. modus ponens cannot be used on line numbers in proofs. One of the aims of this project is to introduce and prove natural deduction like
proof rules enabling the use of pred calc on a higher level. Since we cannot use line numbers with modus ponens we cannot prove the implication
introduction rule (see \cite[p.~27]{huth}). Therefore we need to add the following rule as a proof rule in " [ math theory pred calc end theory end math ] ".

\begin{itemize}
\item " [ math in theory pred calc rule pcunsound says for all terms meta f comma meta g indeed parenthesis meta f infer meta g end parenthesis infer meta f infer meta g end rule end math ] "
\end{itemize}

We have been told that this rule makes the system unsound, but we have not seen and cannot find an example of this. We have been told
(by Klaus Grue via email) that it requires some special side conditions in order to be sound. Alas we have been unable to communicate with
Klaus Grue in the week up to our deadline. Therefore we have been unable to ameliorate this deficiency but we are convinced that we only use
the rule in sound ways. Given the right side conditions we expect that our proofs could be patched simply by adding these side conditions.

\subsection{Notation}
Some of the notation used above is most likely unfamiliar. So let's spend a few paragraphs explaining it before we continue.
The meaning of the axioms and proof rules above are of course given by their definition but in order to understand the definitions
we need to explain the basic syntax (or at least the part of it we use) in Logiweb\texttrademark{} definitions and proofs.
\begin{itemize}

\item{\textbf{The symbol $\Pi$}} is the for all meta quantifier.

\item{\textbf{The symbol $\vdash$}} is placed between two propositions. The meaning of $A \vdash B$ is that if $A$ can be proved then so can $B$.
$\vdash$ can be used sequentially in the way that $A \vdash B \vdash C$ means if $A$ can be proved, then if $B$ can be proved, then so can $C$.
That is if $A$ and $B$ can be proved then so can $C$.

\item{\textbf{The symbol $\triangleright$}} is placed between a rule and a line number.
It is the opposite of $\vdash$ in the sense that if $R$ is a rule saying that $A \vdash B$ and $L$ is a line concluding $A$, then
$R \triangleright L$ concludes $B$.

\item{\textbf{Explanation of $\gg$}}. A line in a proof consists of the symbol $\gg$ with the use of a rule on the left, and the conclusion on the right.
The example above would give the line $R \triangleright L \gg B$.

\item{\textbf{The meaning of $\Vdash$}} is almost the same as $\vdash$. If the condition on the left evaluates to true, then the proposition on the right can be proved.
The condition on the left of a $\Vdash$ is a so called side-condition. The only side-conditions we use are expressed using substitution and $\sharp$ (explained below).

\item{\textbf{The $\triangleright\!\!\triangleright$}} symbol is used much like $\triangleright$, but it is the opposite of $\Vdash$ instead of $\vdash$, thus the line number on the right
of the symbol must conclude that the side-condition is fulfilled.

\item{\textbf{The side-condition $\left< A \equiv B \mid C := D \right>$}} is fulfilled, if the proposition $B$ where any occurrence of the meta-variable $C$ is replaced
by the proposition $D$ is exactly equal to the proposition $A$. Another way to express this using a more common notation of substitution would be $A \equiv B[D/C]$. It is
important to note that this substitution avoids variable capture. An example of why variable capture would be unsound is the propositional formula
$\forall x \exists y: (x \lor y) \land (\lnot x \lor \lnot y)$. We see that this is a tautology since the choice of $y\equiv \lnot x$ satisfies the formula. But if we
substituted $y$ for $x$ in this formula then we would get an absurdity.

\item{\textbf{The side-condition $A \sharp B$}} is fulfilled if the meta-variable $A$ does not occur (free) in the proposition $B$.

\end{itemize}

\subsection{Some small proofs}
Having explained the syntax of definitions and proofs we continue with two simple but useful lemmas just to show
how it is done. Lemma \ref{lem:trivia} is proved using only axioms and proof rules while the proof of lemma \ref{lem:repeat}
uses the result of lemma \ref{lem:trivia} as well.

\begin{Lem}\label{lem:trivia}
" [ math in theory pred calc lemma trivia says all meta f indeed meta f imply meta f end lemma end math ] "
\end{Lem}

" [ math pred calc proof of trivia reads arbitrary meta f end line line ell a because pc2 indeed parenthesis meta f imply meta f imply meta f end parenthesis imply parenthesis meta f imply parenthesis meta f imply meta f end parenthesis imply meta f end parenthesis imply meta f imply meta f end line line ell b because pc1 indeed meta f imply meta f imply meta f end line line ell c because pcmp modus ponens ell b modus ponens ell a indeed parenthesis meta f imply parenthesis meta f imply meta f end parenthesis imply meta f end parenthesis imply meta f imply meta f end line line ell d because pc1 indeed meta f imply parenthesis meta f imply meta f end parenthesis imply meta f end line because pcmp modus ponens ell d modus ponens ell c indeed meta f imply meta f qed end math ] "

\begin{Lem}[Repetition]\label{lem:repeat}
" [ math in theory pred calc lemma repeat says for all terms meta f indeed meta f infer meta f end lemma end math ] "
\end{Lem}

" [ math pred calc proof of repeat reads any term meta f end line line ell a premise meta f end line line ell b because trivia indeed meta f imply meta f end line because pcmp modus ponens ell a modus ponens ell b indeed meta f qed end math ] "

\section{Natural deduction}\label{sec:natded}
The axioms and proof rules in " [ math theory pred calc end theory end math ] " constitutes a very low level proof system.
In order to ameliorate this we introduce and prove some higher level (and more intuitive) proof rules. These proof rules
are inspired by natural deduction as defined in \cite{huth}. We conclude this section by justifying why we have replaced two
rules from \cite{huth} with a new rule.

\begin{Lem}
" [ math in theory pred calc lemma andintro says for all terms meta f comma meta g indeed meta f infer meta g infer meta f land meta g end lemma end math ] "
\end{Lem}

" [ math pred calc proof of andintro reads any term meta f comma meta g end line line ell a premise meta f end line line ell b premise meta g end line line ell c because pc3 indeed meta f imply meta g imply meta f land meta g end line line ell d because pcmp modus ponens ell a modus ponens ell c indeed meta g imply meta f land meta g end line because pcmp modus ponens ell b modus ponens ell d indeed meta f land meta g qed end math ] "

\begin{Lem}
" [ math in theory pred calc lemma andelim1 says for all terms meta f comma meta g indeed meta f land meta g infer meta f end lemma end math ] "
\end{Lem}

" [ math pred calc proof of andelim1 reads any term meta f comma meta g end line line ell a premise meta f land meta g end line line ell b because pc6 indeed meta f land meta g imply meta f end line because pcmp modus ponens ell a modus ponens ell b indeed meta f qed end math ] "

\begin{Lem}
" [ math in theory pred calc lemma andelim2 says for all terms meta f comma meta g indeed meta f land meta g infer meta g end lemma end math ] "
\end{Lem}

" [ math pred calc proof of andelim2 reads any term meta f comma meta g end line line ell a premise meta f land meta g end line line ell b because pc7 indeed meta f land meta g imply meta g end line because pcmp modus ponens ell a modus ponens ell b indeed meta g qed end math ] "

\begin{Lem}
" [ math in theory pred calc lemma orintro1 says for all terms meta f comma meta g indeed meta f infer meta f lor meta g end lemma end math ] "
\end{Lem}

" [ math pred calc proof of orintro1 reads any term meta f comma meta g end line line ell a premise meta f end line line ell b because pc4 indeed meta f imply meta f lor meta g end line because pcmp modus ponens ell a modus ponens ell b indeed meta f lor meta g qed end math ] "

\begin{Lem}
" [ math in theory pred calc lemma orintro2 says for all terms meta f comma meta g indeed meta g infer meta f lor meta g end lemma end math ] "
\end{Lem}

" [ math pred calc proof of orintro2 reads any term meta f comma meta g end line line ell a premise meta g end line line ell b because pc5 indeed meta g imply meta f lor meta g end line because pcmp modus ponens ell a modus ponens ell b indeed meta f lor meta g qed end math ] "

\begin{Lem}
" [ math in theory pred calc lemma orelim says for all terms meta f comma meta g comma meta h indeed meta f lor meta g infer parenthesis meta f infer meta h end parenthesis infer parenthesis meta g infer meta h end parenthesis infer meta h end lemma end math ] "
\end{Lem}

" [ math pred calc proof of orelim reads any term meta f comma meta g comma meta h end line line ell a premise meta f lor meta g end line line ell b premise meta f infer meta h end line line ell c premise meta g infer meta h end line line ell d because implyintro modus ponens ell b indeed meta f imply meta h end line line ell e because implyintro modus ponens ell c indeed meta g imply meta h end line line ell f because pc8 indeed parenthesis meta f imply meta h end parenthesis imply parenthesis meta g imply meta h end parenthesis imply meta f lor meta g imply meta h end line line ell g because pcmp modus ponens ell d modus ponens ell f indeed parenthesis meta g imply meta h end parenthesis imply meta f lor meta g imply meta h end line line ell h because pcmp modus ponens ell e modus ponens ell g indeed meta f lor meta g imply meta h end line because pcmp modus ponens ell a modus ponens ell h indeed meta h qed end math ] "

\begin{Lem}
" [ math in theory pred calc lemma implyintro says for all terms meta f comma meta g indeed parenthesis meta f infer meta g end parenthesis infer meta f imply meta g end lemma end math ] "
\end{Lem}

" [ math pred calc proof of implyintro reads any term meta f comma meta g end line line ell a premise meta f infer meta g end line block any term meta f comma meta g end line line ell b premise meta f end line because pcunsound modus ponens ell a modus ponens ell b indeed meta g end line line ell c end block because pcdeduction modus ponens ell c indeed meta f imply meta g qed end math ] "

\begin{Lem}
" [ math in theory pred calc lemma notintro says for all terms meta f comma meta g indeed parenthesis meta f infer meta g end parenthesis infer parenthesis meta f infer lnot meta g end parenthesis infer lnot meta f end lemma end math ] "
\end{Lem}

" [ math pred calc proof of notintro reads any term meta f comma meta g end line line ell a premise meta f infer meta g end line line ell b premise meta f infer lnot meta g end line line ell c because implyintro modus ponens ell a indeed meta f imply meta g end line line ell d because implyintro modus ponens ell b indeed meta f imply lnot meta g end line line ell e because pc9 indeed parenthesis meta f imply meta g end parenthesis imply parenthesis meta f imply lnot meta g end parenthesis imply lnot meta f end line line ell f because pcmp modus ponens ell c modus ponens ell e indeed parenthesis meta f imply lnot meta g end parenthesis imply lnot meta f end line because pcmp modus ponens ell d modus ponens ell f indeed lnot meta f qed end math ] "

\begin{Lem}
" [ math in theory pred calc lemma notnotelim says for all terms meta f indeed lnot lnot meta f infer meta f end lemma end math ] "
\end{Lem}

" [ math pred calc proof of notnotelim reads any term meta f end line line ell a premise lnot lnot meta f end line line ell b because pc10 indeed lnot lnot meta f imply meta f end line because pcmp modus ponens ell a modus ponens ell b indeed meta f qed end math ] "


\begin{Lem}\label{lem:forallintro}
" [ math in theory pred calc lemma forallintro says for all terms meta f comma meta g comma meta x indeed meta x avoid meta g lor lnot meta g endorse meta f infer forall meta x dot meta f end forall end lemma end math ] "
\end{Lem}

" [ math pred calc proof of forallintro reads any term meta f comma meta g comma meta x end line line ell a side condition meta x avoid meta g lor lnot meta g end line line ell b premise meta f end line line ell c because lem indeed meta g lor lnot meta g end line block any term meta g comma meta f end line line ell d premise meta g lor lnot meta g end line because repeat modus ponens ell b indeed meta f end line line ell e end block line ell f because pcdeduction modus ponens ell e indeed meta g lor lnot meta g imply meta f end line line ell g because pcia modus probans ell a modus ponens ell f indeed meta g lor lnot meta g imply forall meta x dot meta f end forall end line because pcmp modus ponens ell c modus ponens ell g indeed forall meta x dot meta f end forall qed end math ] "

\begin{Rem}
In lemma \ref{lem:forallintro} we use the side condition " [ math meta x avoid meta g lor lnot meta g end math ] ". We would like to use the
equivalent " [ math meta x avoid meta g end math ] " instead but we haven't been able to find a way to prove the former side condition
from the latter. Another example of reasoning about side conditions is the following. If we have
" [ math sub meta g is meta f where meta x is meta r end sub end math ] " and " [ math meta x avoid meta r end math ] " then it follows that
" [ math meta x avoid meta g end math ] ". Unfortunately we haven't heard of any ways to reason about side conditions therefore we are forced to assume side
conditions in lemmas whenever we need them even though they might be deductable.
\end{Rem}

\begin{Lem}{}\hspace{1cm}\\
" [ math in theory pred calc lemma forallelim says for all terms meta x comma meta r comma meta g comma meta f indeed meta x avoid meta r endorse meta x avoid meta g endorse sub meta g is meta f where meta x is meta r end sub endorse forall meta x dot meta f end forall infer meta g end lemma end math ] "
\end{Lem}

" [ math pred calc proof of forallelim reads any term meta x comma meta r comma meta g comma meta f end line line ell a side condition meta x avoid meta r end line line ell b side condition meta x avoid meta g end line line ell c side condition sub meta g is meta f where meta x is meta r end sub end line line ell d because pc11 modus probans ell a modus probans ell b modus probans ell c indeed forall meta x dot meta f end forall imply meta g end line block any term meta x comma meta g comma meta f end line line ell e premise forall meta x dot meta f end forall end line because pcmp modus ponens ell e modus ponens ell d indeed meta g end line line ell f end block because pcdeduction modus ponens ell f indeed forall meta x dot meta f end forall infer meta g qed end math ] "

\begin{Lem}\hspace{1cm}\\
" [ math in theory pred calc lemma existsintro says for all terms meta x comma meta r comma meta g comma meta f indeed meta x avoid meta r endorse meta x avoid meta g endorse sub meta g is meta f where meta x is meta r end sub endorse meta g infer exists meta x dot meta f end exists end lemma end math ] "
\end{Lem}

" [ math pred calc proof of existsintro reads any term meta x comma meta r comma meta g comma meta f end line line ell a side condition meta x avoid meta r end line line ell b side condition meta x avoid meta g end line line ell c side condition sub meta g is meta f where meta x is meta r end sub end line line ell d because pc12 modus probans ell a modus probans ell b modus probans ell c indeed meta g imply exists meta x dot meta f end exists end line block any term meta x comma meta g comma meta f end line line ell e premise meta g end line because pcmp modus ponens ell e modus ponens ell d indeed exists meta x dot meta f end exists end line line ell f end block because pcdeduction modus ponens ell f indeed meta g infer exists meta x dot meta f end exists qed end math ] "

\begin{Lem}
" [ math in theory pred calc lemma existselim says for all terms meta x comma meta f comma meta g indeed meta x avoid meta g endorse exists meta x dot meta f end exists infer parenthesis meta f infer meta g end parenthesis infer meta g end lemma end math ] "
\end{Lem}

" [ math pred calc proof of existselim reads any term meta x comma meta f comma meta g end line line ell a side condition meta x avoid meta g end line line ell b premise exists meta x dot meta f end exists end line line ell c premise meta f infer meta g end line line ell d because implyintro modus ponens ell c indeed meta f imply meta g end line line ell e because pcie modus probans ell a modus ponens ell d indeed exists meta x dot meta f end exists imply meta g end line because pcmp modus ponens ell b modus ponens ell e indeed meta g qed end math ] "

\subsection{Derived lemmas}
Below we apply the lemmas above together with the defining rules of\\" [ math theory pred calc end theory end math ] " to prove some other fairly standard
and very useful lemmas.

\begin{Lem}[Modus Tollens]
" [ math in theory pred calc lemma mt says for all terms meta f comma meta g indeed meta f imply meta g infer lnot meta g infer lnot meta f end lemma end math ] "
\end{Lem}

" [ math pred calc proof of mt reads any term meta f comma meta g end line line ell a premise meta f imply meta g end line line ell b premise lnot meta g end line block any term meta f comma meta g end line line ell c premise meta f end line because pcmp modus ponens ell c modus ponens ell a indeed meta g end line line ell d end block line ell e because pcdeduction modus ponens ell d indeed meta f infer meta g end line block any term meta f comma meta g end line line ell f premise meta f end line because repeat modus ponens ell b indeed lnot meta g end line line ell g end block line ell h because pcdeduction modus ponens ell g indeed meta f infer lnot meta g end line because notintro modus ponens ell e modus ponens ell h indeed lnot meta f qed end math ] "

\begin{Lem}
" [ math in theory pred calc lemma notnotintro says for all terms meta f indeed meta f infer lnot lnot meta f end lemma end math ] "
\end{Lem}

" [ math pred calc proof of notnotintro reads any term meta f end line line ell a premise meta f end line block any term macro indent meta f end line line ell b premise macro indent meta f end line line ell c premise macro indent lnot meta f end line because repeat modus ponens ell b indeed macro indent meta f end line line ell c end block line ell d because pcdeduction modus ponens ell c indeed meta f imply lnot meta f imply meta f end line line ell e because pcmp modus ponens ell a modus ponens ell d indeed lnot meta f imply meta f end line line ell f because trivia indeed lnot meta f imply lnot meta f end line line ell g because pc9 indeed parenthesis lnot meta f imply meta f end parenthesis imply parenthesis lnot meta f imply lnot meta f end parenthesis imply lnot lnot meta f end line line ell h because pcmp modus ponens ell e modus ponens ell g indeed parenthesis lnot meta f imply lnot meta f end parenthesis imply lnot lnot meta f end line because pcmp modus ponens ell f modus ponens ell h indeed lnot lnot meta f qed end math ] "

\begin{Lem}[Proof by Contradiction]
" [ math in theory pred calc lemma pbc says for all terms meta f comma meta g indeed parenthesis lnot meta f infer meta g end parenthesis infer parenthesis lnot meta f infer lnot meta g end parenthesis infer meta f end lemma end math ] "
\end{Lem}

" [ math pred calc proof of pbc reads any term meta f comma meta g end line line ell a premise lnot meta f infer meta g end line line ell b premise lnot meta f infer lnot meta g end line line ell c because notintro modus ponens ell a modus ponens ell b indeed lnot lnot meta f end line because notnotelim modus ponens ell c indeed meta f qed end math ] "

\begin{Lem}[Law of the Excluded Middle]\label{the:lem}\hspace{1cm}\\
" [ math in theory pred calc lemma lem says for all terms meta f indeed meta f lor lnot meta f end lemma end math ] "
\end{Lem}

" [ math pred calc proof of lem reads any term meta f end line block any term macro indent meta f end line line ell a premise macro indent lnot parenthesis meta f lor lnot meta f end parenthesis end line block any term macro indent meta f end line line ell b premise macro indent meta f end line because orintro1 modus ponens ell b indeed macro indent meta f lor lnot meta f end line line ell c end block line ell d because pcdeduction modus ponens ell c indeed macro indent meta f infer meta f lor lnot meta f end line block any term macro indent meta f end line line ell q premise macro indent meta f end line because repeat modus ponens ell a indeed macro indent lnot parenthesis meta f lor lnot meta f end parenthesis end line line ell e end block line ell f because pcdeduction modus ponens ell e indeed macro indent meta f infer lnot parenthesis meta f lor lnot meta f end parenthesis end line line ell g because macro indent notintro modus ponens ell d modus ponens ell f indeed lnot meta f end line because macro indent orintro2 modus ponens ell g indeed meta f lor lnot meta f end line line ell h end block line ell i because macro indent pcdeduction modus ponens ell h indeed lnot parenthesis meta f lor lnot meta f end parenthesis infer meta f lor lnot meta f end line block any term macro indent meta f end line line ell j premise macro indent lnot parenthesis meta f lor lnot meta f end parenthesis end line because repeat modus ponens ell j indeed macro indent lnot parenthesis meta f lor lnot meta f end parenthesis end line line ell k end block line ell l because pcdeduction modus ponens ell k indeed lnot parenthesis meta f lor lnot meta f end parenthesis infer lnot parenthesis meta f lor lnot meta f end parenthesis end line line ell m because notintro modus ponens ell i modus ponens ell l indeed lnot lnot parenthesis meta f lor lnot meta f end parenthesis end line because notnotelim modus ponens ell m indeed meta f lor lnot meta f qed end math ] "

\subsection{A word on $\bot$}
The proof rules of natural deduction in \cite{huth} uses bottom.
Bottom represents the concept of unsoundness, that is it should be impossible to prove bottom in a sound logic.
The way to prove bottom would be to prove any absurdity, that is for any proposition $A$ to prove both $A$ and not $A$. In \cite{huth}
this is captured in the proof rule $\frac{\lnot A \quad A}{\bot}$.
In \cite{huth} bottom is used in two ways. First if you under the assumption of a proposition $A$ can prove bottom then you can conclude that $A$ is false,
that is not $A$ is true. In \cite{huth} this is captured by the proof rule $\frac{\begin{tiny}\begin{array}{c}A \\ \vdots \\ \bot\end{array}\end{tiny}}{\lnot A}$ (notelim).
This makes sense if we assume that the logical system is sound, because this means that it is free of absurdities, so if $A$ was true
it would be impossible to prove an absurdity thus $A$ must be false. Second the assumption of bottom can be used to conclude anything. In \cite{huth} this is
captured in the proof rule $\frac \bot A$ (botelim).

Since the predicate logic from Mathworld, which we have used as a basis for " [ math theory pred calc end theory end math ] ", doesn't use or define the notion of bottom,
we cannot adopt the rules of natural deduction directly. We have chosen to solve this problem by replacing the problematic proof rules above with a new proof rule called
\emph{notintro}. This way we can avoid the use of bottom alltogether while we preserve the rest of the system.

To justify our actions we hand proof the following metatheorem:

\begin{The}
Let Nat' be the system of proof rules introduced in section \ref{sec:natded} and let Nat be the same system without the rule notintro but with rules notelim and botelim added.
Let $F$ be fixed and define $\bot\equiv F \land \lnot F$\footnotemark. Then the following holds:
\begin{enumerate}
\item If $B$ can be proved in Nat then $B[F\land\lnot F/\bot]$ can be proved in Nat'.
\item If $B$ can be proved in Nat' then B can be proved in Nat.
\end{enumerate}
\end{The}
\footnotetext{$F$ must be fixed for all occurrences of bottom e.g. $\bot \lor \bot$ must be translated to $(F \land \lnot F) \lor (F \land \lnot F)$ and can't be translated to $(F \land \lnot F) \lor (G \land \lnot G)$.}
\begin{proof}

Both claims in this metatheorem are proved by induction on the derivation of the proof on the left hand side of the implication.
To save space we only consider the interesting cases. Thus we skip all of the rules the two systems have in common.
\\
\\
\textbf{Proof of 1:}\\
In this proof $A'\equiv A[F\land \lnot F/\bot]$.\\
\\

The rule $\frac{A \quad \lnot A}{\bot}$. \\
Given proofs of $A$ and $\lnot A$ we need to prove $F \land \lnot F$.
Using the induction hypothesis on the proofs of $A$ and $\lnot A$, we get proofs of $A'$ and $\lnot A'$ using our system of lemmas.
Now we have proofs of $A'$ and $\lnot A'$, which means that we can also prove $A'$ and $\lnot A'$ using $F$ or $\lnot F$ as assumptions.
Now we can construct the proof of $F \land \lnot F$ like this:
$$
\frac
{\frac
{\frac
{
\begin{array}{c}
\lnot F \\
\vdots \\
A'
\end{array}
\quad
\begin{array}{c}
\lnot F \\
\vdots \\
\lnot A'
\end{array}
}
{\lnot \lnot F}
}
{F}
\frac
{
\begin{array}{c}
F \\
\vdots \\
A'
\end{array}
\quad
\begin{array}{c}
F \\
\vdots \\
\lnot A'
\end{array}
}
{\lnot F}
}
{F \land \lnot F}
$$
%
The rule $\frac{\bot}{A}$. \\
Given proof of $F \land \lnot F$ we need to prove $A'$.
Using the induction hypothesis we get a proof of $F \land \lnot F$. Using andelim1 and andelim2 we obtain proofs of $F$ and $\lnot F$.
Finally (using weakening) we can construct proofs of $F$ and $\lnot F$ under the assumption of $\lnot A'$.
Now we can construct the proof of $A'$ as follows:
$$
\frac
{\frac
{
\frac
{\begin{array}{c}
\lnot A' \\
\vdots \\
F \land \lnot F
\end{array}
}
{F}
\quad
\frac
{\begin{array}{c}
\lnot A' \\
\vdots \\
F \land \lnot F
\end{array}
}
{\lnot F}
}
{\lnot \lnot A'}
}
{A'}
$$
%
The rule $\frac{A \vdash \bot}{\lnot A}$.
Using the induction hypothesis on the proof of $A \vdash \bot$ we obtain a proof of $A' \vdash F \land \lnot F$.
Using the andelim1 and andelim2 lemmas, we get proofs of $A' \vdash F$ and $A' \vdash \lnot F$.
Now we can construct the proof of $\lnot A'$ like this:
$$
\frac
{
\frac
{\begin{array}{c}
A' \\
\vdots \\
F \land \lnot F
\end{array}
}
{F}
\quad
\frac
{\begin{array}{c}
A' \\
\vdots \\
F \land \lnot F
\end{array}
}
{\lnot F}
}
{\lnot A'}
$$
That concludes all the interesting rules. The other rules follow by using the induction hypothesis on the given proofs, and using the same rule to conclude the desired proposition.
\\
\\
\textbf{Proof of 2:}\\
There is only one interesting rule, and that is notintro.
Given the proofs of $A \vdash B$ and $A \vdash \lnot B$ we wish to prove $\lnot A$.
We construct the proof like this.
$$
\frac
{\frac
{\begin{array}{c}
A \\
\vdots \\
B
\end{array}
\begin{array}{c}
A \\
\vdots \\
\lnot B
\end{array}
}
{\bot}
}
{\lnot A}
$$
That concludes all the interesting rules. The other rules follow by using the induction hypothesis on the given proofs, and using the same rule to conclude the desired proposition.
% }}}
\end{proof}

\subsubsection{A practical lemma}
Above we saw that $\bot$ could be replaced with $F \land \lnot F$ and that the proof rule botelim allows us to conclude anything once we have $\bot$. This gives rise to the
following very usefull lemmas.

\begin{Lem}
" [ math in theory pred calc lemma bottomelim says for all terms meta f comma meta g indeed meta f land lnot meta f infer meta g end lemma end math ] "
\end{Lem}

" [ math pred calc proof of bottomelim reads any term meta f comma meta g end line line ell a premise meta f land lnot meta f end line block any term meta f comma meta g end line line ell b premise lnot meta g end line because andelim1 modus ponens ell a indeed meta f end line line ell c end block line ell d because pcdeduction modus ponens ell c indeed lnot meta g infer meta f end line block any term meta f comma meta g end line line ell e premise lnot meta g end line because andelim2 modus ponens ell a indeed lnot meta f end line line ell f end block line ell g because pcdeduction modus ponens ell f indeed lnot meta g infer lnot meta f end line line ell h because notintro modus ponens ell d modus ponens ell g indeed lnot lnot meta g end line because notnotelim modus ponens ell h indeed meta g qed end math ] "

\begin{Lem}
" [ math in theory pred calc lemma lemnotintro says for all terms meta f comma meta g indeed parenthesis meta f imply meta g land lnot meta g end parenthesis infer lnot meta f end lemma end math ] "
\end{Lem}

" [ math pred calc proof of lemnotintro reads any term meta f comma meta g end line line ell a premise meta f imply meta g land lnot meta g end line block any term meta f comma meta g end line line ell b premise meta f end line line ell c because pcmp modus ponens ell b modus ponens ell a indeed meta g land lnot meta g end line because andelim1 modus ponens ell c indeed meta g end line line ell d end block line ell e because pcdeduction modus ponens ell d indeed meta f infer meta g end line block any term meta f comma meta g end line line ell f premise meta f end line line ell g because pcmp modus ponens ell f modus ponens ell a indeed meta g land lnot meta g end line because andelim2 modus ponens ell g indeed lnot meta g end line line ell h end block line ell i because pcdeduction modus ponens ell h indeed meta f infer lnot meta g end line because notintro modus ponens ell e modus ponens ell i indeed lnot meta f qed end math ] "






\section{Application of natural deduction lemmas}\label{sec:higherproof}
In this section we set out to prove lemma \ref{lem:mainresult} which is the main
result of this project. The content of the lemma is simple, but the formal proof is quite
long. Therefore we have split it into six lemmas. Finally we prove an easy result
containing quantifiers in lemma \ref{lem:lastresult}. We have also tried to prove
" [ math for all terms meta f comma meta g comma meta x comma meta h comma meta p indeed meta x avoid meta g endorse meta x avoid meta h endorse sub meta h is meta f where meta x is meta g end sub endorse meta p imply forall meta x dot meta f end forall infer lnot meta p imply exists meta x dot meta f end exists infer exists meta x dot meta f end exists end math ] "

but we ran into problems when we tried to used side conditions within blocks. Either we got a false side condition or a metageneralization error. Therefore these
attempts have been removed from our final report.

\begin{Lem}
" [ math in theory pred calc lemma hlplem1 says for all terms meta p comma meta q indeed parenthesis meta p imply meta q end parenthesis imply meta q infer meta q imply meta p infer meta p imply meta q infer meta p end lemma end math ] "
\end{Lem}
" [ math pred calc proof of hlplem1 reads any term meta p comma meta q end line line ell a premise parenthesis meta p imply meta q end parenthesis imply meta q end line line ell b premise meta q imply meta p end line line ell c premise meta p imply meta q end line line ell d because pcmp modus ponens ell c modus ponens ell a indeed meta q end line because pcmp modus ponens ell d modus ponens ell b indeed meta p qed end math ] "

\begin{Lem}
" [ math in theory pred calc lemma hlplem2 says for all terms meta p comma meta q indeed meta p infer lnot meta p infer meta q end lemma end math ] "
\end{Lem}

" [ math pred calc proof of hlplem2 reads any term meta p comma meta q end line line ell a premise meta p end line line ell b premise lnot meta p end line line ell c because andintro modus ponens ell a modus ponens ell b indeed meta p land lnot meta p end line because bottomelim modus ponens ell c indeed meta q qed end math ] "

\begin{Lem}
" [ math in theory pred calc lemma hlplem3 says for all terms meta p comma meta q indeed lnot parenthesis meta p imply meta q end parenthesis infer lnot meta p infer parenthesis meta p imply meta q end parenthesis land lnot parenthesis meta p imply meta q end parenthesis end lemma end math ] "
\end{Lem}

" [ math pred calc proof of hlplem3 reads any term meta p comma meta q end line line ell a premise lnot parenthesis meta p imply meta q end parenthesis end line line ell b premise lnot meta p end line block any term meta p comma meta q end line line ell c premise meta p end line because hlplem2 modus ponens ell c modus ponens ell b indeed meta q end line line ell d end block line ell e because pcdeduction modus ponens ell d indeed meta p imply meta q end line because andintro modus ponens ell e modus ponens ell a indeed parenthesis meta p imply meta q end parenthesis land lnot parenthesis meta p imply meta q end parenthesis qed end math ] "

\begin{Lem}
" [ math in theory pred calc lemma hlplem4 says for all terms meta p comma meta q indeed lnot parenthesis meta p imply meta q end parenthesis infer meta p end lemma end math ] "
\end{Lem}

" [ math pred calc proof of hlplem4 reads any term meta p comma meta q end line line ell a premise lnot parenthesis meta p imply meta q end parenthesis end line block any term meta p comma meta q end line line ell b premise lnot meta p end line because hlplem3 modus ponens ell a modus ponens ell b indeed parenthesis meta p imply meta q end parenthesis land lnot parenthesis meta p imply meta q end parenthesis end line line ell c end block line ell d because pcdeduction modus ponens ell c indeed lnot meta p imply parenthesis meta p imply meta q end parenthesis land lnot parenthesis meta p imply meta q end parenthesis end line line ell e because lemnotintro modus ponens ell d indeed lnot lnot meta p end line because notnotelim modus ponens ell e indeed meta p qed end math ] "


\begin{Lem}
" [ math in theory pred calc lemma hlplem5 says for all terms meta p comma meta q indeed parenthesis meta p imply meta q end parenthesis imply meta q infer meta q imply meta p infer meta p end lemma end math ] "
\end{Lem}

" [ math pred calc proof of hlplem5 reads any term meta p comma meta q end line line ell a premise parenthesis meta p imply meta q end parenthesis imply meta q end line line ell b premise meta q imply meta p end line block any term meta p comma meta q end line line ell c premise parenthesis meta p imply meta q end parenthesis imply meta q end line line ell d premise meta q imply meta p end line line ell e premise meta p imply meta q end line because hlplem1 modus ponens ell c modus ponens ell d modus ponens ell e indeed meta p end line line ell f end block line ell g because pcdeduction modus ponens ell f indeed parenthesis parenthesis meta p imply meta q end parenthesis imply meta q end parenthesis imply parenthesis meta q imply meta p end parenthesis imply parenthesis meta p imply meta q end parenthesis imply meta p end line line ell h because pcmp modus ponens ell a modus ponens ell g indeed parenthesis meta q imply meta p end parenthesis imply parenthesis meta p imply meta q end parenthesis imply meta p end line line ell i because pcmp modus ponens ell b modus ponens ell h indeed parenthesis meta p imply meta q end parenthesis imply meta p end line block any term meta p comma meta q end line line ell j premise meta p imply meta q end line because pcmp modus ponens ell j modus ponens ell i indeed meta p end line line ell k end block line ell l because pcdeduction modus ponens ell k indeed meta p imply meta q infer meta p end line block any term meta p comma meta q end line line ell m premise lnot parenthesis meta p imply meta q end parenthesis end line because hlplem4 modus ponens ell m indeed meta p end line line ell n end block line ell o because pcdeduction modus ponens ell n indeed lnot parenthesis meta p imply meta q end parenthesis infer meta p end line line ell p because lem indeed parenthesis meta p imply meta q end parenthesis lor lnot parenthesis meta p imply meta q end parenthesis end line because orelim modus ponens ell p modus ponens ell l modus ponens ell o indeed meta p qed end math ] "

\begin{Lem}[Main result]\label{lem:mainresult}
" [ math in theory pred calc lemma goal1 says for all terms meta p comma meta q indeed parenthesis parenthesis meta p imply meta q end parenthesis imply meta q end parenthesis imply parenthesis parenthesis meta q imply meta p end parenthesis imply meta p end parenthesis end lemma end math ] "
\end{Lem}

" [ math pred calc proof of goal1 reads any term meta p comma meta q end line block any term meta p comma meta q end line line ell a premise parenthesis meta p imply meta q end parenthesis imply meta q end line block any term meta p comma meta q end line line ell b premise meta q imply meta p end line because hlplem5 modus ponens ell a modus ponens ell b indeed meta p end line line ell c end block because pcdeduction modus ponens ell c indeed parenthesis meta q imply meta p end parenthesis imply meta p end line line ell d end block because pcdeduction modus ponens ell d indeed parenthesis parenthesis meta p imply meta q end parenthesis imply meta q end parenthesis imply parenthesis parenthesis meta q imply meta p end parenthesis imply meta p end parenthesis qed end math ] "

\begin{Lem}\hspace{1cm}\\
" [ math in theory pred calc lemma hlplem6 says for all terms meta x comma meta f comma meta g comma meta h indeed meta x avoid meta g endorse meta x avoid meta h endorse sub meta h is meta f where meta x is meta g end sub endorse forall meta x dot meta f end forall infer exists meta x dot meta f end exists end lemma end math ] "
\end{Lem}

" [ math pred calc proof of hlplem6 reads any term meta x comma meta f comma meta g comma meta h end line line ell a side condition meta x avoid meta g end line line ell f side condition meta x avoid meta h end line line ell b side condition sub meta h is meta f where meta x is meta g end sub end line line ell c premise forall meta x dot meta f end forall end line line ell d because forallelim modus probans ell a modus probans ell f modus probans ell b modus ponens ell c indeed meta h end line because existsintro modus probans ell a modus probans ell f modus probans ell b modus ponens ell d indeed exists meta x dot meta f end exists qed end math ] "

\begin{Lem}\label{lem:lastresult}\hspace{1cm}\\
" [ math in theory pred calc lemma goal2 says for all terms meta f comma meta g comma meta x comma meta h comma meta k indeed meta x avoid meta g endorse meta x avoid meta h endorse sub meta h is meta f where meta x is meta g end sub endorse forall meta x dot meta f end forall infer lnot exists meta x dot meta f end exists imply meta k end lemma end math ] "
\end{Lem}

" [ math pred calc proof of goal2 reads any term meta f comma meta g comma meta x comma meta h comma meta k end line line ell a side condition meta x avoid meta g end line line ell b side condition meta x avoid meta h end line line ell c side condition sub meta h is meta f where meta x is meta g end sub end line line ell d premise forall meta x dot meta f end forall end line line ell e because hlplem6 modus probans ell a modus probans ell b modus probans ell c modus ponens ell d indeed exists meta x dot meta f end exists end line block any term meta f comma meta x comma meta k end line line ell f premise exists meta x dot meta f end exists end line line ell g premise lnot exists meta x dot meta f end exists end line line ell h because andintro modus ponens ell f modus ponens ell g indeed exists meta x dot meta f end exists land lnot exists meta x dot meta f end exists end line because bottomelim modus ponens ell h indeed meta k end line line ell i end block line ell j because pcdeduction modus ponens ell i indeed exists meta x dot meta f end exists imply lnot exists meta x dot meta f end exists imply meta k end line because pcmp modus ponens ell e modus ponens ell j indeed lnot exists meta x dot meta f end exists imply meta k qed end math ] "

\begin{appendix}

\section{Ways Logiweb\texttrademark{} could be improved}
Working with Logiweb\texttrademark{} have given us some ideas of how the system could be improved and how it could be made more userfriendly.
Our ideas are summarized below:
\begin{itemize}
\item A getting started manual explaining the basic concepts and quirks of the system including simplified examples. Man pages together with
the base and check pages leaves a lot to be desired.

\item Sample pages / proofs for the current version of the pyk compiler (we have used a lot of time searching other peoples Logiweb\texttrademark{} pages to gain
knowledge but it has often been in vain because the syntax had changed).

\item Better error messages and / or an explanation of how to read them. Also it would be nice if error messages included the line number of the error.

\item It would be nice if \LaTeX{} errors and warnings could be displayed. Just knowing that there is an error leaves a lot of detective work to be done.

\item A pre-parser substituting \texttt{(} with \texttt{parenthesis}, \texttt{)} with \texttt{end parenthesis}, \texttt{,} with \texttt{comma} ect. would be nice.

\end{itemize}


\begin{thebibliography}{99}
%\addcontentsline{toc}{section}{\bibname}
\bibitem[LiCS]{huth} Logic in Computer Science - Modelling and Reasoning about Systems, Second Edition - 2004.\\
\emph{By Michael Huth \& Mark Ryan}\\
ISBN: 0-521-54310-X
\end{thebibliography}


\section{Pyk definitions}

\begin{flushleft}
" [ math protect define pyk of pred calc as text "pred calc" end text end define linebreak define pyk of pc1 as text "pc1" end text end define linebreak define pyk of pc2 as text "pc2" end text end define linebreak define pyk of pc3 as text "pc3" end text end define linebreak define pyk of pc4 as text "pc4" end text end define linebreak define pyk of pc5 as text "pc5" end text end define linebreak define pyk of pc6 as text "pc6" end text end define linebreak define pyk of pc7 as text "pc7" end text end define linebreak define pyk of pc8 as text "pc8" end text end define linebreak define pyk of pc9 as text "pc9" end text end define linebreak define pyk of pc10 as text "pc10" end text end define linebreak define pyk of pc11 as text "pc11" end text end define linebreak define pyk of pc12 as text "pc12" end text end define linebreak define pyk of pcmp as text "pcmp" end text end define linebreak define pyk of pcunsound as text "pcunsound" end text end define linebreak define pyk of pcia as text "pcia" end text end define linebreak define pyk of pcie as text "pcie" end text end define linebreak define pyk of pcdeduction as text "pcdeduction" end text end define linebreak define pyk of trivia as text "trivia" end text end define linebreak define pyk of repeat as text "repeat" end text end define linebreak define pyk of andintro as text "andintro" end text end define linebreak define pyk of andelim1 as text "andelim1" end text end define linebreak define pyk of andelim2 as text "andelim2" end text end define linebreak define pyk of orintro1 as text "orintro1" end text end define linebreak define pyk of orintro2 as text "orintro2" end text end define linebreak define pyk of orelim as text "orelim" end text end define linebreak define pyk of notintro as text "notintro" end text end define linebreak define pyk of implyintro as text "implyintro" end text end define linebreak define pyk of notnotintro as text "notnotintro" end text end define linebreak define pyk of notnotelim as text "notnotelim" end text end define linebreak define pyk of mt as text "mt" end text end define linebreak define pyk of pbc as text "pbc" end text end define linebreak define pyk of lem as text "lem" end text end define linebreak define pyk of forallintro as text "forallintro" end text end define linebreak define pyk of forallelim as text "forallelim" end text end define linebreak define pyk of existsintro as text "existsintro" end text end define linebreak define pyk of existselim as text "existselim" end text end define linebreak define pyk of bottomelim as text "bottomelim" end text end define linebreak define pyk of lemnotintro as text "lemnotintro" end text end define linebreak define pyk of hlplem1 as text "hlplem1" end text end define linebreak define pyk of hlplem2 as text "hlplem2" end text end define linebreak define pyk of hlplem3 as text "hlplem3" end text end define linebreak define pyk of hlplem4 as text "hlplem4" end text end define linebreak define pyk of hlplem5 as text "hlplem5" end text end define linebreak define pyk of goal1 as text "goal1" end text end define linebreak define pyk of hlplem6 as text "hlplem6" end text end define linebreak define pyk of goal2 as text "goal2" end text end define linebreak define pyk of x setequiv x as text ""! setequiv "!" end text end define linebreak define pyk of x setequals x as text ""! setequals "!" end text end define linebreak define pyk of lnot x as text "lnot "!" end text end define linebreak define pyk of x land x as text ""! land "!" end text end define linebreak define pyk of x lor x as text ""! lor "!" end text end define linebreak define pyk of forall x dot x end forall as text "forall "! dot "! end forall" end text end define linebreak define pyk of exists x dot x end exists as text "exists "! dot "! end exists" end text end define linebreak define pyk of x setin x as text ""! setin "!" end text end define linebreak define pyk of finalversion as text "finalversion" end text end define linebreak unicode end of text end protect end math ] "
\end{flushleft}

\section{Tex definitions}
\begin{itemize}
\item " [ math tex define lnot var x as "\neg #1." end define end math ] "
\item " [ math tex define var x land var y as "#1. \wedge #2." end define end math ] "
\item " [ math tex define var x lor var y as "#1. \vee #2." end define end math ] "
\item " [ math tex define var x imply var y as "#1. \Rightarrow #2." end define end math ] "
\item " [ math tex define forall var y dot var b end forall as "\forall #1. . \left(#2.\right)" end define end math ] "
\item " [ math tex define exists var y dot var b end exists as "\exists #1. . \left(#2.\right)" end define end math ] "
\item " [ math tex define var y setin var b as "#1. \in #2." end define end math ] "
\item " [ math tex define var y setequiv var b as "#1. \equiv #2." end define end math ] "
\item " [ math tex define var y setequals var b as "#1. = #2." end define end math ] "
\end{itemize}

\section{Priority table}
" [ flush left math priority table preassociative priority finalversion equal priority base equal priority bracket x end bracket equal priority big bracket x end bracket equal priority math x end math equal priority flush left x end left equal priority var x equal priority var y equal priority var z equal priority proclaim x as x end proclaim equal priority define x of x as x end define equal priority pyk equal priority tex equal priority tex name equal priority priority equal priority x equal priority true equal priority if x then x else x end if equal priority introduce x of x as x end introduce equal priority value equal priority claim equal priority bottom equal priority function f of x end function equal priority identity x end identity equal priority false equal priority untagged zero equal priority untagged one equal priority untagged two equal priority untagged three equal priority untagged four equal priority untagged five equal priority untagged six equal priority untagged seven equal priority untagged eight equal priority untagged nine equal priority zero equal priority one equal priority two equal priority three equal priority four equal priority five equal priority six equal priority seven equal priority eight equal priority nine equal priority var a equal priority var b equal priority var c equal priority var d equal priority var e equal priority var f equal priority var g equal priority var h equal priority var i equal priority var j equal priority var k equal priority var l equal priority var m equal priority var n equal priority var o equal priority var p equal priority var q equal priority var r equal priority var s equal priority var t equal priority var u equal priority var v equal priority var w equal priority tagged parenthesis x end tagged equal priority tagged if x then x else x end if equal priority array x is x end array equal priority left equal priority center equal priority right equal priority empty equal priority substitute x set x to x end substitute equal priority map tag x end tag equal priority raw map untag x end untag equal priority map untag x end untag equal priority normalizing untag x end untag equal priority apply x to x end apply equal priority apply one x to x end apply equal priority identifier x end identifier equal priority identifier one x plus id x end identifier equal priority array plus x and x end plus equal priority array remove x array x level x end remove equal priority array put x value x array x level x end put equal priority array add x value x index x value x level x end add equal priority bit x of x end bit equal priority bit one x of x end bit equal priority example rack equal priority vector hook equal priority bibliography hook equal priority dictionary hook equal priority body hook equal priority codex hook equal priority expansion hook equal priority code hook equal priority cache hook equal priority diagnose hook equal priority pyk aspect equal priority tex aspect equal priority texname aspect equal priority value aspect equal priority message aspect equal priority macro aspect equal priority definition aspect equal priority unpack aspect equal priority claim aspect equal priority priority aspect equal priority lambda identifier equal priority apply identifier equal priority true identifier equal priority if identifier equal priority quote identifier equal priority proclaim identifier equal priority define identifier equal priority introduce identifier equal priority hide identifier equal priority pre identifier equal priority post identifier equal priority eval x stack x cache x end eval equal priority eval two x ref x id x stack x cache x end eval equal priority eval three x function x stack x cache x end eval equal priority eval four x arguments x stack x cache x end eval equal priority lookup x stack x default x end lookup equal priority abstract x term x stack x cache x end abstract equal priority quote x end quote equal priority expand x state x cache x end expand equal priority expand two x definition x state x cache x end expand equal priority expand list x state x cache x end expand equal priority macro equal priority macro state equal priority zip x with x end zip equal priority assoc one x address x index x end assoc equal priority protect x end protect equal priority self equal priority macro define x as x end define equal priority value define x as x end define equal priority intro define x as x end define equal priority pyk define x as x end define equal priority tex define x as x end define equal priority tex name define x as x end define equal priority priority table x end table equal priority macro define one equal priority macro define two x end define equal priority macro define three x end define equal priority macro define four x state x cache x definition x end define equal priority state expand x state x cache x end expand equal priority quote expand x term x stack x end expand equal priority quote expand two x term x stack x end expand equal priority quote expand three x term x stack x value x end expand equal priority quote expand star x term x stack x end expand equal priority parenthesis x end parenthesis equal priority big parenthesis x end parenthesis equal priority display x end display equal priority statement x end statement equal priority spying test x end test equal priority false spying test x end test equal priority aspect x subcodex x end aspect equal priority aspect x term x cache x end aspect equal priority tuple x end tuple equal priority tuple one x end tuple equal priority tuple two x end tuple equal priority let two x apply x end let equal priority let one x apply x end let equal priority claim define x as x end define equal priority checker equal priority check x cache x end check equal priority check two x cache x def x end check equal priority check three x cache x def x end check equal priority check list x cache x end check equal priority check list two x cache x value x end check equal priority test x end test equal priority false test x end test equal priority raw test x end test equal priority message equal priority message define x as x end define equal priority the statement aspect equal priority statement equal priority statement define x as x end define equal priority example axiom equal priority example scheme equal priority example rule equal priority absurdity equal priority contraexample equal priority example theory primed equal priority example lemma equal priority metavar x end metavar equal priority meta a equal priority meta b equal priority meta c equal priority meta d equal priority meta e equal priority meta f equal priority meta g equal priority meta h equal priority meta i equal priority meta j equal priority meta k equal priority meta l equal priority meta m equal priority meta n equal priority meta o equal priority meta p equal priority meta q equal priority meta r equal priority meta s equal priority meta t equal priority meta u equal priority meta v equal priority meta w equal priority meta x equal priority meta y equal priority meta z equal priority sub x set x to x end sub equal priority sub star x set x to x end sub equal priority the empty set equal priority example remainder equal priority make visible x end visible equal priority intro x index x pyk x tex x end intro equal priority intro x pyk x tex x end intro equal priority error x term x end error equal priority error two x term x end error equal priority proof x term x cache x end proof equal priority proof two x term x end proof equal priority sequent eval x term x end eval equal priority seqeval init x term x end eval equal priority seqeval modus x term x end eval equal priority seqeval modus one x term x sequent x end eval equal priority seqeval verify x term x end eval equal priority seqeval verify one x term x sequent x end eval equal priority sequent eval plus x term x end eval equal priority seqeval plus one x term x sequent x end eval equal priority seqeval minus x term x end eval equal priority seqeval minus one x term x sequent x end eval equal priority seqeval deref x term x end eval equal priority seqeval deref one x term x sequent x end eval equal priority seqeval deref two x term x sequent x def x end eval equal priority seqeval at x term x end eval equal priority seqeval at one x term x sequent x end eval equal priority seqeval infer x term x end eval equal priority seqeval infer one x term x premise x sequent x end eval equal priority seqeval endorse x term x end eval equal priority seqeval endorse one x term x side x sequent x end eval equal priority seqeval est x term x end eval equal priority seqeval est one x term x name x sequent x end eval equal priority seqeval est two x term x name x sequent x def x end eval equal priority seqeval all x term x end eval equal priority seqeval all one x term x variable x sequent x end eval equal priority seqeval cut x term x end eval equal priority seqeval cut one x term x forerunner x end eval equal priority seqeval cut two x term x forerunner x sequent x end eval equal priority computably true x end true equal priority claims x cache x ref x end claims equal priority claims two x cache x ref x end claims equal priority the proof aspect equal priority proof equal priority lemma x says x end lemma equal priority proof of x reads x end proof equal priority in theory x lemma x says x end lemma equal priority in theory x antilemma x says x end antilemma equal priority in theory x rule x says x end rule equal priority in theory x antirule x says x end antirule equal priority verifier equal priority verify one x end verify equal priority verify two x proofs x end verify equal priority verify three x ref x sequents x diagnose x end verify equal priority verify four x premises x end verify equal priority verify five x ref x array x sequents x end verify equal priority verify six x ref x list x sequents x end verify equal priority verify seven x ref x id x sequents x end verify equal priority cut x and x end cut equal priority head x end head equal priority tail x end tail equal priority rule one x theory x end rule equal priority rule x subcodex x end rule equal priority rule tactic equal priority plus x and x end plus equal priority theory x end theory equal priority theory two x cache x end theory equal priority theory three x name x end theory equal priority theory four x name x sum x end theory equal priority example axiom lemma primed equal priority example scheme lemma primed equal priority example rule lemma primed equal priority contraexample lemma primed equal priority example axiom lemma equal priority example scheme lemma equal priority example rule lemma equal priority contraexample lemma equal priority example theory equal priority ragged right equal priority ragged right expansion equal priority parameter term x stack x seed x end parameter equal priority parameter term star x stack x seed x end parameter equal priority instantiate x with x end instantiate equal priority instantiate star x with x end instantiate equal priority occur x in x substitution x end occur equal priority occur star x in x substitution x end occur equal priority unify x with x substitution x end unify equal priority unify star x with x substitution x end unify equal priority unify two x with x substitution x end unify equal priority ell a equal priority ell b equal priority ell c equal priority ell d equal priority ell e equal priority ell f equal priority ell g equal priority ell h equal priority ell i equal priority ell j equal priority ell k equal priority ell l equal priority ell m equal priority ell n equal priority ell o equal priority ell p equal priority ell q equal priority ell r equal priority ell s equal priority ell t equal priority ell u equal priority ell v equal priority ell w equal priority ell x equal priority ell y equal priority ell z equal priority ell big a equal priority ell big b equal priority ell big c equal priority ell big d equal priority ell big e equal priority ell big f equal priority ell big g equal priority ell big h equal priority ell big i equal priority ell big j equal priority ell big k equal priority ell big l equal priority ell big m equal priority ell big n equal priority ell big o equal priority ell big p equal priority ell big q equal priority ell big r equal priority ell big s equal priority ell big t equal priority ell big u equal priority ell big v equal priority ell big w equal priority ell big x equal priority ell big y equal priority ell big z equal priority ell dummy equal priority sequent reflexivity equal priority tactic reflexivity equal priority sequent commutativity equal priority tactic commutativity equal priority the tactic aspect equal priority tactic equal priority tactic define x as x end define equal priority proof expand x state x cache x end expand equal priority proof expand list x state x cache x end expand equal priority proof state equal priority conclude one x cache x end conclude equal priority conclude two x proves x cache x end conclude equal priority conclude three x proves x lemma x substitution x end conclude equal priority conclude four x lemma x end conclude equal priority check equal priority general macro define x as x end define equal priority make root visible x end visible equal priority sequent example axiom equal priority sequent example rule equal priority sequent example contradiction equal priority sequent example theory equal priority sequent example lemma equal priority set x end set equal priority object var x end var equal priority object a equal priority object b equal priority object c equal priority object d equal priority object e equal priority object f equal priority object g equal priority object h equal priority object i equal priority object j equal priority object k equal priority object l equal priority object m equal priority object n equal priority object o equal priority object p equal priority object q equal priority object r equal priority object s equal priority object t equal priority object u equal priority object v equal priority object w equal priority object x equal priority object y equal priority object z equal priority sub x is x where x is x end sub equal priority sub zero x is x where x is x end sub equal priority sub one x is x where x is x end sub equal priority sub star x is x where x is x end sub equal priority deduction x conclude x end deduction equal priority deduction zero x conclude x end deduction equal priority deduction one x conclude x condition x end deduction equal priority deduction two x conclude x condition x end deduction equal priority deduction three x conclude x condition x bound x end deduction equal priority deduction four x conclude x condition x bound x end deduction equal priority deduction four star x conclude x condition x bound x end deduction equal priority deduction five x condition x bound x end deduction equal priority deduction six x conclude x exception x bound x end deduction equal priority deduction six star x conclude x exception x bound x end deduction equal priority deduction seven x end deduction equal priority deduction eight x bound x end deduction equal priority deduction eight star x bound x end deduction equal priority system s equal priority double negation equal priority rule mp equal priority rule gen equal priority deduction equal priority axiom s one equal priority axiom s two equal priority axiom s three equal priority axiom s four equal priority axiom s five equal priority axiom s six equal priority axiom s seven equal priority axiom s eight equal priority axiom s nine equal priority repetition equal priority lemma a one equal priority lemma a two equal priority lemma a four equal priority lemma a five equal priority prop three two a equal priority prop three two b equal priority prop three two c equal priority prop three two d equal priority prop three two e one equal priority prop three two e two equal priority prop three two e equal priority prop three two f one equal priority prop three two f two equal priority prop three two f equal priority prop three two g one equal priority prop three two g two equal priority prop three two g equal priority prop three two h one equal priority prop three two h two equal priority prop three two h equal priority block one x state x cache x end block equal priority block two x end block equal priority pred calc equal priority pc1 equal priority pc2 equal priority pc3 equal priority pc4 equal priority pc5 equal priority pc6 equal priority pc7 equal priority pc8 equal priority pc9 equal priority pc10 equal priority pc11 equal priority pc12 equal priority pcmp equal priority pcunsound equal priority pcia equal priority pcie equal priority pcdeduction equal priority trivia equal priority repeat equal priority andintro equal priority andelim1 equal priority andelim2 equal priority orintro1 equal priority orintro2 equal priority orelim equal priority notintro equal priority implyintro equal priority notnotintro equal priority notnotelim equal priority mt equal priority pbc equal priority lem equal priority forallintro equal priority forallelim equal priority existsintro equal priority existselim equal priority bottomelim equal priority lemnotintro equal priority hlplem1 equal priority hlplem2 equal priority hlplem3 equal priority hlplem4 equal priority hlplem5 equal priority goal1 equal priority hlplem6 equal priority goal2 end priority greater than preassociative priority x sub x end sub equal priority x intro x index x pyk x tex x end intro equal priority x intro x pyk x tex x end intro equal priority x intro x index x pyk x tex x name x end intro equal priority x intro x pyk x tex x name x end intro equal priority x prime equal priority x assoc x end assoc equal priority x set x to x end set equal priority x set multi x to x end set equal priority x bit nil equal priority x bit one equal priority binary equal priority x color x end color equal priority x color star x end color equal priority x raw head equal priority x raw tail equal priority x cardinal untag equal priority x head equal priority x tail equal priority x is singular equal priority x is cardinal equal priority x is data equal priority x is atomic equal priority x cardinal retract equal priority x tagged retract equal priority x boolean retract equal priority x ref equal priority x id equal priority x debug equal priority x root equal priority x zeroth equal priority x first equal priority x second equal priority x third equal priority x fourth equal priority x fifth equal priority x sixth equal priority x seventh equal priority x eighth equal priority x ninth equal priority x is error equal priority x is metavar equal priority x is metaclosed equal priority x is metaclosed star equal priority x hide end priority greater than preassociative priority unicode start of text x end unicode text equal priority unicode end of text equal priority text x end text equal priority text x plus x equal priority text x plus indent x equal priority unicode newline x equal priority unicode space x equal priority unicode exclamation mark x equal priority unicode quotation mark x equal priority unicode number sign x equal priority unicode dollar sign x equal priority unicode percent x equal priority unicode ampersand x equal priority unicode apostrophe x equal priority unicode left parenthesis x equal priority unicode right parenthesis x equal priority unicode asterisk x equal priority unicode plus sign x equal priority unicode comma x equal priority unicode hyphen x equal priority unicode period x equal priority unicode slash x equal priority unicode zero x equal priority unicode one x equal priority unicode two x equal priority unicode three x equal priority unicode four x equal priority unicode five x equal priority unicode six x equal priority unicode seven x equal priority unicode eight x equal priority unicode nine x equal priority unicode colon x equal priority unicode semicolon x equal priority unicode less than x equal priority unicode equal sign x equal priority unicode greater than x equal priority unicode question mark x equal priority unicode commercial at x equal priority unicode capital a x equal priority unicode capital b x equal priority unicode capital c x equal priority unicode capital d x equal priority unicode capital e x equal priority unicode capital f x equal priority unicode capital g x equal priority unicode capital h x equal priority unicode capital i x equal priority unicode capital j x equal priority unicode capital k x equal priority unicode capital l x equal priority unicode capital m x equal priority unicode capital n x equal priority unicode capital o x equal priority unicode capital p x equal priority unicode capital q x equal priority unicode capital r x equal priority unicode capital s x equal priority unicode capital t x equal priority unicode capital u x equal priority unicode capital v x equal priority unicode capital w x equal priority unicode capital x x equal priority unicode capital y x equal priority unicode capital z x equal priority unicode left bracket x equal priority unicode backslash x equal priority unicode right bracket x equal priority unicode circumflex x equal priority unicode underscore x equal priority unicode grave accent x equal priority unicode small a x equal priority unicode small b x equal priority unicode small c x equal priority unicode small d x equal priority unicode small e x equal priority unicode small f x equal priority unicode small g x equal priority unicode small h x equal priority unicode small i x equal priority unicode small j x equal priority unicode small k x equal priority unicode small l x equal priority unicode small m x equal priority unicode small n x equal priority unicode small o x equal priority unicode small p x equal priority unicode small q x equal priority unicode small r x equal priority unicode small s x equal priority unicode small t x equal priority unicode small u x equal priority unicode small v x equal priority unicode small w x equal priority unicode small x x equal priority unicode small y x equal priority unicode small z x equal priority unicode left brace x equal priority unicode vertical line x equal priority unicode right brace x equal priority unicode tilde x equal priority preassociative x greater than x equal priority postassociative x greater than x equal priority priority x equal x equal priority priority x end priority equal priority newline x equal priority macro newline x equal priority macro indent x end priority greater than preassociative priority x apply x equal priority x tagged apply x end priority greater than preassociative priority x suc end priority greater than preassociative priority x apply x equal priority x tagged apply x end priority greater than preassociative priority x times x equal priority x times zero x end priority greater than preassociative priority x plus x equal priority x plus zero x equal priority x plus one x equal priority x minus x equal priority x minus zero x equal priority x minus one x end priority greater than preassociative priority x term plus x end plus equal priority x term union x equal priority x term minus x end minus end priority greater than postassociative priority x raw pair x equal priority x eager pair x equal priority x tagged pair x equal priority x untagged double x equal priority x pair x equal priority x double x end priority greater than postassociative priority x comma x end priority greater than preassociative priority x boolean equal x equal priority x data equal x equal priority x cardinal equal x equal priority x peano equal x equal priority x tagged equal x equal priority x math equal x equal priority x reduce to x equal priority x term equal x equal priority x term list equal x equal priority x term root equal x equal priority x term in x equal priority x term subset x equal priority x term set equal x equal priority x sequent equal x equal priority x free in x equal priority x free in star x equal priority x free for x in x equal priority x free for star x in x equal priority x claim in x equal priority x less x equal priority x less zero x equal priority x less one x equal priority x equal x equal priority x unequal x equal priority x is object var equal priority x avoid zero x equal priority x avoid one x equal priority x avoid star x equal priority x setequiv x equal priority x setequals x end priority greater than preassociative priority not x equal priority lnot x end priority greater than preassociative priority x and x equal priority x macro and x equal priority x simple and x equal priority x claim and x equal priority x land x end priority greater than preassociative priority x or x equal priority x parallel x equal priority x macro or x equal priority x lor x end priority greater than preassociative priority exist x indeed x equal priority for all x indeed x equal priority for all objects x indeed x equal priority forall x dot x end forall equal priority exists x dot x end exists end priority greater than postassociative priority x macro imply x equal priority x imply x equal priority x if and only if x end priority greater than postassociative priority x guard x equal priority x spy x equal priority x tagged guard x end priority greater than preassociative priority x select x else x end select end priority greater than preassociative priority lambda x dot x equal priority tagged lambda x dot x equal priority tagging x equal priority open if x then x else x equal priority let x be x in x equal priority let x abbreviate x in x end priority greater than preassociative priority x avoid x end priority greater than preassociative priority x init equal priority x modus equal priority x verify equal priority x curry plus equal priority x curry minus equal priority x dereference end priority greater than preassociative priority x at x equal priority x modus ponens x equal priority x modus probans x equal priority x conclude x equal priority x object modus ponens x end priority greater than postassociative priority x infer x equal priority x endorse x equal priority x id est x end priority greater than preassociative priority all x indeed x equal priority for all terms x indeed x end priority greater than postassociative priority x rule plus x end priority greater than postassociative priority x cut x end priority greater than preassociative priority x proves x end priority greater than preassociative priority x proof of x reads x equal priority line x because x indeed x end line x equal priority because x indeed x qed equal priority line x premise x end line x equal priority line x side condition x end line x equal priority arbitrary x end line x equal priority locally define x as x end line x equal priority block x line x end block x equal priority because x indeed x end line equal priority any term x end line x end priority greater than postassociative priority x alternative x end priority greater than postassociative priority x , x equal priority x [ x ] x end priority greater than preassociative priority x tab x equal priority evaluates to end priority greater than preassociative priority x row x equal priority x linebreak x equal priority x safe row x end priority greater than preassociative priority x setin x end priority greater than unicode end of text end table end math end left ] "

\end{appendix}

\end{document}
End of file
latex page
latex page
dvipdfm page"

The pyk compiler, version 0.grue.20060417+ by Klaus Grue,
GRD-2006-07-14.UTC:09:09:53.060274 = MJD-53930.TAI:09:10:26.060274 = LGT-4659585026060274e-6