--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PhD/index.html Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+"http://www.w3.org/TR/REC-html40/loose.dtd">
+<HEAD>
+<TITLE>Homepage of Christian Urban</TITLE>
+<BASE HREF="http://www4.in.tum.de/~urbanc/">
+</HEAD>
+
+<BODY TEXT="#000000"
+ BGCOLOR="#4169E1"
+ LINK="#0000EF"
+ VLINK="#51188E"
+ ALINK="#FF0000">
+
+<TABLE WIDTH="100%"
+ BGCOLOR="#4169E1"
+ BORDER="0"
+ FRAME="border"
+ CELLPADDING="10"
+ CELLSPACING="2"
+ RULES="all">
+
+<!-- left column -->
+<TR>
+<TD BGCOLOR="#FFFFFF"
+ WIDTH="24%"
+ VALIGN="TOP"
+ ROWSPAN="2">
+
+<B>Links</B><BR>
+<A HREF="http://www4.in.tum.de/~urbanc/">Home</A><BR>
+<A HREF="http://www4.in.tum.de/~urbanc/publications.html">Publications</A><BR>
+<A HREF="http://www4.in.tum.de/~urbanc/travelling.html">Recent Talks</A>
+<BR>
+<BR>
+
+<B>Handy Information</B><BR>
+<A HREF="http://www4.in.tum.de/~urbanc/logic.html">People in Logic</A><BR>
+<A HREF="http://www4.in.tum.de/~urbanc/programming.html">Programming Languages</A><BR>
+<A HREF="http://www4.in.tum.de/~urbanc/misc.html">Miscellaneous</A>
+<BR><BR>
+
+<A HREF="http://isabelle.in.tum.de/nominal/">
+<IMG SRC="ribbon.gif" ALT="" style="width: 114px; height: 100px;" align="left">
+</A>
+</TD>
+
+<!-- right column -->
+<TD BGCOLOR="#FFFFFF" WIDTH="75%">
+Postscript file of the thesis:
+<A HREF="http://www4.in.tum.de/~urbanc/Publications/Phd-Urban.ps.gz">ps.gz</A>
+</TD>
+
+<TR>
+<TD BGCOLOR="#FFFFFF" WIDTH="75%">
+<H3>The Dinner after the Viva</H3>
+organised by Gavin in The Three Horseshoes in Maddingley. Very nice.<P>
+
+<IMG SRC="http://www4.in.tum.de/~urbanc/PhD/phd-1.jpg" ALT=""><BR>
+My examiners,
+<A HREF="http://www.cl.cam.ac.uk/~amp12">Andy Pitts</A> and
+<A HREF="http://www.cs.kun.nl/~henk/">Henk Barendregt</A>, are next to me.
+<A HREF="http://research.microsoft.com/~nick/">Nick Benton</A>, Mrs. Barendregt-Kessing (Henk's mother),
+<A HREF="http://research.microsoft.com/~gmb/">Gavin Bierman</A>,
+<A HREF="http://www.cs.bham.ac.uk/~mxj/">Mateja Jamnik</A>,
+<A HREF="http://www.dpmms.cam.ac.uk/~martin/">Martin Hyland</A> and
+<A HREF="http://www.cl.cam.ac.uk/~gw104/">Glynn Winskel</A>
+are standing behind.<P>
+
+<IMG SRC="http://www4.in.tum.de/~urbanc/PhD/phd-2.jpg" ALT=""><BR>
+There are <A HREF="http://www.statslab.cam.ac.uk/Dept/People/pitts.html">Susan Pitts</A> and Alice Benton on the left.<P>
+
+<H3>The Ceremony</H3>
+<IMG SRC="http://www4.in.tum.de/~urbanc/PhD/phd-3.jpg" ALT=""><p>
+
+</TD>
+</TR>
+
+</TABLE>
+<P><!-- Created: Tue Mar 4 00:23:25 GMT 1997 -->
+<!-- hhmts start -->
+Last modified: Thu Feb 28 20:23:06 CET 2008
+<!-- hhmts end -->
+<a href="http://validator.w3.org/check/referer">[Validate this page.]</a>
+</BODY>
+</HTML>
Binary file PhD/phd-1.jpg has changed
Binary file PhD/phd-2.jpg has changed
Binary file PhD/phd-3.jpg has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Contexts.pizza Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,70 @@
+package G4ip;
+
+import java.util.Vector;
+import G4ip.Form.*;
+
+/** Context acts as a multiset.<p>
+ * Typical contexts in logical rules are Gamma, Delta, etc.
+ * @author Christian Urban
+ */
+public class Context extends Vector {
+
+ public Context() { super(); }
+
+ public Context(Context init_context) {
+ super();
+ for (int i=0;i<init_context.size();i++) {
+ addElement(init_context.elementAt(i));
+ }
+ }
+
+ /** should be toString, but this is a "final" method in Vector
+ */
+ public String makeString() {
+ String s = new String();
+ int i; // size()-1 because the last formula
+ for (i=0;i<size()-1;i++) { // should be printed without a comma
+ s=s.concat(elementAt(i).toString());
+ s=s.concat(", ");
+ }
+ if (size() > 0) { // add last formula
+ s=s.concat(elementAt(i).toString());
+ }
+ return s;
+ }
+
+ /** returns a context with one additional formula at the beginning
+ * @param new_formula a formula
+ */
+ public Context add(Form new_formula) {
+ Context new_c = new Context(this);
+ new_c.insertElementAt(new_formula,0);
+ return new_c;
+ }
+
+ /** returns a context with two additional formulae at the beginning
+ * @param new_formula1,new_formula2 two formulae
+ */
+ public Context add(Form new_formula1, Form new_formula2) {
+ Context new_c = new Context(this);
+ new_c.insertElementAt(new_formula1,0);
+ new_c.insertElementAt(new_formula2,0);
+ return new_c;
+ }
+
+ /** tests whether a context contains a specific atom
+ * @param a a formula
+ */
+ public boolean includes(Form a) {
+ if (a instanceof Atm) {
+ for (int i=0;i<size();i++) {
+ switch((Form)elementAt(i)) {
+ case Atm(String c):
+ if (c.compareTo(((Atm)a).c) == 0) return true; break;
+ }
+ }
+ }
+ return false;
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/G4ip.Context.html Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<!--NewPage-->
+<html>
+<head>
+<!-- generated by pizzadoc on Thu Oct 30 13:46:17 GMT+00:00 1997 -->
+<title>
+public class G4ip.Context
+</title>
+</head>
+<body bgcolor=FFFFFF>
+<a name="_top_"></a>
+<code><font size=-1>
+[<a href="index.html">all packages</a>]
+[<a href="G4ip.html">package G4ip</a>]
+[<a href="tree-pd.html">class hierarchy</a>]
+[<a href="names-pd.html">index</a>]
+</font></code>
+<hr>
+<h1>public class G4ip.Context</h1>
+(source file: Contexts.pizza)<br>
+<pre>
+<a href="http://java.sun.com:80/products/jdk/1.1/docs/api/java.lang.Object.html">java.lang.Object</a>
+ |
+ +----<a href="http://java.sun.com:80/products/jdk/1.1/docs/api/java.util.Vector.html">java.util.Vector</a>
+ |
+ +----G4ip.Context
+</pre>
+<hr>
+<pre>
+public class <a href="G4ip.Context.html">Context</a>
+ extends Vector
+</pre>
+<dl>
+ <dd> Contexts act as multiset.<p>
+ Typical contexts in logical rules are Gamma, Delta, etc.<p></dd>
+ <dd><dl><dt></dt>
+ <dt> <b>Author:</b></dt>
+ <dd> Christian Urban</dd>
+ </dl></dd>
+</dl>
+<hr>
+<p><h2><img src="p-images/constructor-index.gif" alt="Constuctor Index"></h2>
+<dl>
+ <dt><img src="p-images/yellow-ball-small.gif" alt="O "> <b><a href="G4ip.Context.html#Context(Context)">Context</a></b>(Context)
+ <dd>
+ <dt><img src="p-images/yellow-ball-small.gif" alt="O "> <b><a href="G4ip.Context.html#Context()">Context</a></b>()
+ <dd>
+</dl>
+<p><h2><img src="p-images/method-index.gif" alt="Methods"></h2>
+<dl>
+ <dt><img src="p-images/red-ball-small.gif" alt="O "> <b><a href="G4ip.Context.html#add(Form, Form)">add</a></b>(Form, Form)
+ <dd>returns a contexts with two additional formulae at the beginning
+ <dt><img src="p-images/red-ball-small.gif" alt="O "> <b><a href="G4ip.Context.html#add(Form)">add</a></b>(Form)
+ <dd>returns a context with one additional formula at the beginning
+ <dt><img src="p-images/red-ball-small.gif" alt="O "> <b><a href="G4ip.Context.html#includes(Form)">includes</a></b>(Form)
+ <dd>tests whether a context contains a specific atom
+ <dt><img src="p-images/red-ball-small.gif" alt="O "> <b><a href="G4ip.Context.html#makeString()">makeString</a></b>()
+ <dd>should be toString, but this is a "final" method in Vector
+</dl>
+<p><h2><img src="p-images/constructors.gif" alt="Constructors"></h2>
+<img src="p-images/yellow-ball.gif" alt="O "> <a name="<init>"></a><a name="Context()"></a><b>Context</b><br>
+<pre>
+public Context();
+</pre>
+<p>
+<img src="p-images/yellow-ball.gif" alt="O "> <a name="<init>"></a><a name="Context(Context)"></a><b>Context</b><br>
+<pre>
+public Context(<a href="G4ip.Context.html">Context</a> init_context);
+</pre>
+<p>
+<p><h2><img src="p-images/methods.gif" alt="Methods"></h2>
+<img src="p-images/red-ball.gif" alt="O "> <a name="makeString"></a><a name="makeString()"></a><b>makeString</b><br>
+<pre>
+public <a href="http://java.sun.com:80/products/jdk/1.1/docs/api/java.lang.String.html">String</a> makeString();
+</pre>
+<dl>
+ <dd> should be toString, but this is a "final" method in Vector <p></dd>
+ <dd><dl><dt></dt>
+ <dt> <b>Overrides:</b></dt>
+ <dd><dl>
+ <dt><b><a href="G4ip.Context.html#makeString()">makeString</a></b> in class <a href="G4ip.Context.html">Context</a></dt>
+ </dl></dd>
+ </dl></dd>
+</dl>
+<p>
+<img src="p-images/red-ball.gif" alt="O "> <a name="add"></a><a name="add(Form)"></a><b>add</b><br>
+<pre>
+public <a href="G4ip.Context.html">Context</a> add(<a href="G4ip.Form.html">Form</a> new_formula);
+</pre>
+<dl>
+ <dd> returns a context with one additional formula at the beginning <p></dd>
+ <dd><dl><dt></dt>
+ <dt> <b>Parameters:</b></dt>
+ <dd><b>new_formula</b> - a formula</dd>
+ <dt> <b>Overrides:</b></dt>
+ <dd><dl>
+ <dt><b><a href="G4ip.Context.html#add(Form)">add</a></b> in class <a href="G4ip.Context.html">Context</a></dt>
+ </dl></dd>
+ </dl></dd>
+</dl>
+<p>
+<img src="p-images/red-ball.gif" alt="O "> <a name="add"></a><a name="add(Form, Form)"></a><b>add</b><br>
+<pre>
+public <a href="G4ip.Context.html">Context</a> add(<a href="G4ip.Form.html">Form</a> new_formula1,
+ <a href="G4ip.Form.html">Form</a> new_formula2);
+</pre>
+<dl>
+ <dd> returns a contexts with two additional formulae at the beginning <p></dd>
+ <dd><dl><dt></dt>
+ <dt> <b>Parameters:</b></dt>
+ <dd><b>new_formula1,new_formula2</b> - two formulae</dd>
+ <dt> <b>Overrides:</b></dt>
+ <dd><dl>
+ <dt><b><a href="G4ip.Context.html#add(Form, Form)">add</a></b> in class <a href="G4ip.Context.html">Context</a></dt>
+ </dl></dd>
+ </dl></dd>
+</dl>
+<p>
+<img src="p-images/red-ball.gif" alt="O "> <a name="includes"></a><a name="includes(Form)"></a><b>includes</b><br>
+<pre>
+public boolean includes(<a href="G4ip.Form.html">Form</a> a);
+</pre>
+<dl>
+ <dd> tests whether a context contains a specific atom <p></dd>
+ <dd><dl><dt></dt>
+ <dt> <b>Parameters:</b></dt>
+ <dd><b>a</b> - a formula</dd>
+ <dt> <b>Overrides:</b></dt>
+ <dd><dl>
+ <dt><b><a href="G4ip.Context.html#includes(Form)">includes</a></b> in class <a href="G4ip.Context.html">Context</a></dt>
+ </dl></dd>
+ </dl></dd>
+</dl>
+<p>
+<hr>
+<code><font size=-1>
+[<a href="index.html">all packages</a>]
+[<a href="G4ip.html">package G4ip</a>]
+[<a href="tree-pd.html">class hierarchy</a>]
+[<a href="names-pd.html">index</a>]
+</font></code>
+<h6>G4ip.Context.html</h6>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/G4ip.Form.html Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,108 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<!--NewPage-->
+<html>
+<head>
+<!-- generated by pizzadoc on Thu Oct 30 13:46:18 GMT+00:00 1997 -->
+<title>
+public class G4ip.Form
+</title>
+</head>
+<body bgcolor=FFFFFF>
+<a name="_top_"></a>
+<code><font size=-1>
+[<a href="index.html">all packages</a>]
+[<a href="G4ip.html">package G4ip</a>]
+[<a href="tree-pd.html">class hierarchy</a>]
+[<a href="names-pd.html">index</a>]
+</font></code>
+<hr>
+<h1>public class G4ip.Form</h1>
+(source file: Formulae.pizza)<br>
+<pre>
+<a href="http://java.sun.com:80/products/jdk/1.1/docs/api/java.lang.Object.html">java.lang.Object</a>
+ |
+ +----G4ip.Form
+</pre>
+<hr>
+<pre>
+public class <a href="G4ip.Form.html">Form</a>
+</pre>
+<dl>
+ <dd> Class for propositional formulae.<p><p></dd>
+ <dd><dl><dt></dt>
+ <dt> <b>Author:</b></dt>
+ <dd> Christian Urban</dd>
+ </dl></dd>
+</dl>
+<hr>
+<p><h2><img src="p-images/constructor-index.gif" alt="Constuctor Index"></h2>
+<dl>
+ <dt><img src="p-images/yellow-ball-small.gif" alt="O "> <b><a href="G4ip.Form.html#And(Form, Form)">And</a></b>(Form, Form)
+ <dd>
+ <dt><img src="p-images/yellow-ball-small.gif" alt="O "> <b><a href="G4ip.Form.html#Atm(String)">Atm</a></b>(String)
+ <dd>
+ <dt><img src="p-images/yellow-ball-small.gif" alt="O "> <b><a href="G4ip.Form.html#Equ(Form, Form)">Equ</a></b>(Form, Form)
+ <dd>
+ <dt><img src="p-images/yellow-ball-small.gif" alt="O "> <b><a href="G4ip.Form.html#False()">False</a></b>()
+ <dd>
+ <dt><img src="p-images/yellow-ball-small.gif" alt="O "> <b><a href="G4ip.Form.html#Imp(Form, Form)">Imp</a></b>(Form, Form)
+ <dd>
+ <dt><img src="p-images/yellow-ball-small.gif" alt="O "> <b><a href="G4ip.Form.html#Or(Form, Form)">Or</a></b>(Form, Form)
+ <dd>
+</dl>
+<p><h2><img src="p-images/method-index.gif" alt="Methods"></h2>
+<dl>
+ <dt><img src="p-images/red-ball-small.gif" alt="O "> <b><a href="G4ip.Form.html#toString()">toString</a></b>()
+ <dd>
+</dl>
+<p><h2><img src="p-images/constructors.gif" alt="Constructors"></h2>
+<img src="p-images/yellow-ball.gif" alt="O "> <a name="False"></a><a name="False()"></a><b>False</b><br>
+<pre>
+public case False();
+</pre>
+<p>
+<img src="p-images/yellow-ball.gif" alt="O "> <a name="And"></a><a name="And(Form, Form)"></a><b>And</b><br>
+<pre>
+public case And(<a href="G4ip.Form.html">Form</a> c1,
+ <a href="G4ip.Form.html">Form</a> c2);
+</pre>
+<p>
+<img src="p-images/yellow-ball.gif" alt="O "> <a name="Or"></a><a name="Or(Form, Form)"></a><b>Or</b><br>
+<pre>
+public case Or(<a href="G4ip.Form.html">Form</a> c1,
+ <a href="G4ip.Form.html">Form</a> c2);
+</pre>
+<p>
+<img src="p-images/yellow-ball.gif" alt="O "> <a name="Imp"></a><a name="Imp(Form, Form)"></a><b>Imp</b><br>
+<pre>
+public case Imp(<a href="G4ip.Form.html">Form</a> c1,
+ <a href="G4ip.Form.html">Form</a> c2);
+</pre>
+<p>
+<img src="p-images/yellow-ball.gif" alt="O "> <a name="Equ"></a><a name="Equ(Form, Form)"></a><b>Equ</b><br>
+<pre>
+public case Equ(<a href="G4ip.Form.html">Form</a> c1,
+ <a href="G4ip.Form.html">Form</a> c2);
+</pre>
+<p>
+<img src="p-images/yellow-ball.gif" alt="O "> <a name="Atm"></a><a name="Atm(String)"></a><b>Atm</b><br>
+<pre>
+public case Atm(<a href="http://java.sun.com:80/products/jdk/1.1/docs/api/java.lang.String.html">String</a> c);
+</pre>
+<p>
+<p><h2><img src="p-images/methods.gif" alt="Methods"></h2>
+<img src="p-images/red-ball.gif" alt="O "> <a name="toString"></a><a name="toString()"></a><b>toString</b><br>
+<pre>
+public <a href="http://java.sun.com:80/products/jdk/1.1/docs/api/java.lang.String.html">String</a> toString();
+</pre>
+<p>
+<hr>
+<code><font size=-1>
+[<a href="index.html">all packages</a>]
+[<a href="G4ip.html">package G4ip</a>]
+[<a href="tree-pd.html">class hierarchy</a>]
+[<a href="names-pd.html">index</a>]
+</font></code>
+<h6>G4ip.Form.html</h6>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/G4ip.Parser.html Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,133 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<!--NewPage-->
+<html>
+<head>
+<!-- generated by pizzadoc on Thu Oct 30 13:46:18 GMT+00:00 1997 -->
+<title>
+public class G4ip.Parser
+</title>
+</head>
+<body bgcolor=FFFFFF>
+<a name="_top_"></a>
+<code><font size=-1>
+[<a href="index.html">all packages</a>]
+[<a href="G4ip.html">package G4ip</a>]
+[<a href="tree-pd.html">class hierarchy</a>]
+[<a href="names-pd.html">index</a>]
+</font></code>
+<hr>
+<h1>public class G4ip.Parser</h1>
+(source file: Parser.pizza)<br>
+<pre>
+<a href="http://java.sun.com:80/products/jdk/1.1/docs/api/java.lang.Object.html">java.lang.Object</a>
+ |
+ +----G4ip.Parser
+</pre>
+<hr>
+<pre>
+public class <a href="G4ip.Parser.html">Parser</a>
+</pre>
+<dl>
+ <dd> A left-to-right, rightmost-derivation parser.<p>
+ The following grammar is implemented:<p>
+ <dl>
+ <dd><u>Formula</u> ::= <u>Id</u> </dd>
+ <dd><code>| false</code> </dd>
+ <dd><code>|</code> ( <u>Formula</u> ) </dd>
+ <dd><code>|</code> <u>Formula</u> <u>Binop</u> <u>Formula</u></dd>
+ </dl><p>
+ <dl>
+ <dd><u>Id</u> is a string of lower case letters</dd>
+ </dl><p>
+ <dl>
+ <dd><u>Binop</u> is either <code>&, v, -></code> or <code><-></code></dd>
+ </dl><p>
+ <dl>
+ <dd><u>FormulaList</u> ::= <em>empty</em></dd>
+ <dd><code>|</code> [ <u>FormulaList</u> ,]* <u>Formula</u></dd>
+ <dl><p>
+ The parser uses a stack where two actions are performed:
+ <dl>
+ <dd><b>shift</b> moves the next token to the top of the stack (getNextToken)</dd>
+ <dd><b>reduce</b> chooses a grammar rule, X -> A B C; pops A, B, C from the
+ top of the stack and pushes X onto the stack
+ </dl><p></dd>
+ <dd><dl><dt></dt>
+ <dt> <b>Author:</b></dt>
+ <dd> Christian Urban</dd>
+ </dl></dd>
+</dl>
+<hr>
+<p><h2><img src="p-images/constructor-index.gif" alt="Constuctor Index"></h2>
+<dl>
+ <dt><img src="p-images/yellow-ball-small.gif" alt="O "> <b><a href="G4ip.Parser.html#Parser(String)">Parser</a></b>(String)
+ <dd>
+</dl>
+<p><h2><img src="p-images/method-index.gif" alt="Methods"></h2>
+<dl>
+ <dt><img src="p-images/red-ball-small.gif" alt="O "> <b><a href="G4ip.Parser.html#getNextToken()">getNextToken</a></b>()
+ <dd>tokens are: identifiers<code>( ) , & v -> <-> false</code>
+ and <code>EOI</code>
+ <dt><img src="p-images/red-ball-small.gif" alt="O "> <b><a href="G4ip.Parser.html#parseFormula()">parseFormula</a></b>()
+ <dd>parses a single formula
+ <dt><img src="p-images/red-ball-small.gif" alt="O "> <b><a href="G4ip.Parser.html#parseFormulae()">parseFormulae</a></b>()
+ <dd>parses a list of formulae separated by commas
+ <dt><img src="p-images/red-ball-small.gif" alt="O "> <b><a href="G4ip.Parser.html#reduce()">reduce</a></b>()
+ <dd>Implements the grammar rules.
+</dl>
+<p><h2><img src="p-images/constructors.gif" alt="Constructors"></h2>
+<img src="p-images/yellow-ball.gif" alt="O "> <a name="<init>"></a><a name="Parser(String)"></a><b>Parser</b><br>
+<pre>
+public Parser(<a href="http://java.sun.com:80/products/jdk/1.1/docs/api/java.lang.String.html">String</a> init_in);
+</pre>
+<p>
+<p><h2><img src="p-images/methods.gif" alt="Methods"></h2>
+<img src="p-images/red-ball.gif" alt="O "> <a name="getNextToken"></a><a name="getNextToken()"></a><b>getNextToken</b><br>
+<pre>
+public <a href="G4ip.Token.html">Token</a> getNextToken()
+ throws <a href="http://java.sun.com:80/products/jdk/1.1/docs/api/java.lang.Exception.html">Exception</a>;
+</pre>
+<dl>
+ <dd> tokens are: identifiers<code>( ) , & v -> <-> false</code>
+ and <code>EOI</code> <em>(end of input)</em> <p></dd>
+ <dd><dl><dt></dt>
+ <dt> <b>Overrides:</b></dt>
+ <dd><dl>
+ <dt><b><a href="G4ip.Parser.html#getNextToken()">getNextToken</a></b> in class <a href="G4ip.Parser.html">Parser</a></dt>
+ </dl></dd>
+ </dl></dd>
+</dl>
+<p>
+<img src="p-images/red-ball.gif" alt="O "> <a name="reduce"></a><a name="reduce()"></a><b>reduce</b><br>
+<pre>
+public void reduce();
+</pre>
+<dl>
+ <dd> Implements the grammar rules.<p></dd>
+ <dd><dl><dt></dt>
+ <dt> <b>Overrides:</b></dt>
+ <dd><dl>
+ <dt><b><a href="G4ip.Parser.html#reduce()">reduce</a></b> in class <a href="G4ip.Parser.html">Parser</a></dt>
+ </dl></dd>
+ </dl></dd>
+</dl>
+<p>
+<img src="p-images/red-ball.gif" alt="O "> <a name="parseFormula"></a><a name="parseFormula()"></a><b>parseFormula</b><br>
+<pre>
+public <a href="G4ip.Form.html">Form</a> parseFormula()
+ throws <a href="http://java.sun.com:80/products/jdk/1.1/docs/api/java.lang.Exception.html">Exception</a>;
+</pre>
+<dl>
+ <dd> parses a single formula<p></dd>
+ <dd><dl><dt></dt>
+ <dt> <b>Overrides:</b></dt>
+ <dd><dl>
+ <dt><b><a href="G4ip.Parser.html#parseFormula()">parseFormula</a></b> in class <a href="G4ip.Parser.html">Parser</a></dt>
+ </dl></dd>
+ </dl></dd>
+</dl>
+<p>
+<img src="p-images/red-ball.gif" alt="O "> <a name="parseFormulae"></a><a name="parseFormulae()"></a><b>parseFormulae</b><br>
+<pre>
+public <a href="G4ip.Context.html">Context</a> parseFormulae()
+ throws <a href="http://java.sun.com:80/products/
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/G4ip.html Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<!--NewPage-->
+<html>
+<head>
+<!-- generated by pizzadoc on Thu Oct 30 13:46:19 GMT+00:00 1997 -->
+<title>
+package G4ip
+</title>
+</head>
+<body bgcolor=FFFFFF>
+<a name="_top_"></a>
+<code><font size=-1>
+[<a href="index.html">all packages</a>]
+[<a href="tree-pd.html">class hierarchy</a>]
+[<a href="names-pd.html">index</a>]
+</font></code>
+<hr>
+<h1>package G4ip</h1>
+<!--pd-start-I-->
+
+<!--pd-start-C-->
+<h2><img src="p-images/class-index.gif" alt="Class Index"></h2>
+<ul>
+<!--pd-C-G4ip.Context--><li> <b>public class <a href="G4ip.Context.html">Context</a></b><br><font size=-1>Contexts act as multiset.</font>
+<!--pd-C-G4ip.Form--><li> <b>public class <a href="G4ip.Form.html">Form</a></b><br><font size=-1>Class for propositional formulae.</font>
+<!--pd-C-G4ip.Parser--><li> <b>public class <a href="G4ip.Parser.html">Parser</a></b><br><font size=-1>A left-to-right, rightmost-derivation parser.</font>
+<!--pd-C-G4ip.ProofDisplay--><li> <b>public class <a href="G4ip.ProofDisplay.html">ProofDisplay</a></b><br><font size=-1>Draws a frame on the screen containing a proof.</font>
+<!--pd-C-G4ip.Prover--><li> <b>public class <a href="G4ip.Prover.html">Prover</a></b><br><font size=-1>The Gi4p prover.</font>
+<!--pd-C-G4ip.ProverApplet--><li> <b>public class <a href="G4ip.ProverApplet.html">ProverApplet</a></b><br><font size=-1>The applet for the prover.</font>
+<!--pd-C-G4ip.Sequent--><li> <b>public class <a href="G4ip.Sequent.html">Sequent</a></b><br><font size=-1>An intuitionistic sequent of the form
+ "Gamma => G".</font>
+<!--pd-C-G4ip.Token--><li> <b>public class <a href="G4ip.Token.html">Token</a></b><br><font size=-1></font>
+<!--pd-end-C-->
+</ul>
+<!--pd-start-EX-->
+
+<!--pd-start-ER-->
+
+<hr>
+<code><font size=-1>
+[<a href="index.html">all packages</a>]
+[<a href="tree-pd.html">class hierarchy</a>]
+[<a href="names-pd.html">index</a>]
+</font></code>
+<h6>G4ip.html</h6>
+</body>
+</html>
Binary file Prover/Doc/p-images/.HSancillary has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/entries Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,366 @@
+10
+
+dir
+715
+file:///home/urbanc/SVN/public-html/Prover/Doc/p-images
+file:///home/urbanc/SVN/public-html
+
+
+
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+fc9df204-d421-0410-9e14-c15ef6e4f2fa
+
+green-ball-small.gif
+file
+
+
+
+
+2006-11-09T18:20:22.444128Z
+52fb6c4bba8c177287130dba706d29f1
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+red-ball.gif
+file
+
+
+
+
+2006-11-09T18:20:22.468129Z
+6805369361a90a6c4181bad65539cfb2
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+.HSancillary
+file
+
+
+
+
+2006-11-09T18:20:22.496131Z
+25358a6a523ec17a7c974d17f21e1fde
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+yellow-ball.gif
+file
+
+
+
+
+2006-11-09T18:20:22.520132Z
+c07a466102656d006a116aa38214e095
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+magenta-ball.gif
+file
+
+
+
+
+2006-11-09T18:20:22.572136Z
+f062d5cc452ffd1817b54f72c1cf062a
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+sql-blue.gif
+file
+
+
+
+
+2006-11-09T18:20:22.592137Z
+12a32734d715390d471a154cb307b566
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+method-index.gif
+file
+
+
+
+
+2006-11-09T18:20:22.640140Z
+7c50fffe59881593aae867a35f6d0a49
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+red-ball-small.gif
+file
+
+
+
+
+2006-11-09T18:20:22.660141Z
+11062a2733e20b17a38c71a551c6aa08
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+innerclasses.gif
+file
+
+
+
+
+2006-11-09T18:20:22.688143Z
+1b25ac6725b2c9b17854bc1cac068392
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+yellow-ball-small.gif
+file
+
+
+
+
+2006-11-09T18:20:22.716145Z
+9278c25c4cf52724d71d210e3f39d8d5
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+magenta-ball-small.gif
+file
+
+
+
+
+2006-11-09T18:20:22.740146Z
+cfef018c27067fb9c0341ae45d9d22a0
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+constructor-index.gif
+file
+
+
+
+
+2006-11-09T18:20:22.772148Z
+ac3286b281d922d338eec3021c466e5c
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+variable-index.gif
+file
+
+
+
+
+2006-11-09T18:20:22.800150Z
+bb9d391a18624a01cfd0700a5bc3e169
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+error-index.gif
+file
+
+
+
+
+2006-11-09T18:20:22.820151Z
+9045ab0e145e262d3be0d85618476eb9
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+blue-ball.gif
+file
+
+
+
+
+2006-11-09T18:20:22.848153Z
+83fe83e454df03e0c4a0a1702c2ddd83
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+package-index.gif
+file
+
+
+
+
+2006-11-09T18:20:22.880155Z
+44a5cb5eabd85d49e810f6d824507be8
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+exception-index.gif
+file
+
+
+
+
+2006-11-09T18:20:22.920157Z
+f599bad77240a1c5fe1acbee2bcfa08b
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+methods.gif
+file
+
+
+
+
+2006-11-09T18:20:22.948159Z
+b7405250aad035b556c29cec8157829f
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+interface-index.gif
+file
+
+
+
+
+2006-11-09T18:20:22.972161Z
+b070c9c8c7adf62433a04c50a95e48a6
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+innerclass-index.html
+file
+
+
+
+
+2006-11-09T18:20:23.000162Z
+161048b44087599e972b1d055f14ac9f
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+blue-ball-small.gif
+file
+
+
+
+
+2006-11-09T18:20:23.024164Z
+8003839f4d37ab8704ac82f7c1c5759a
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+green-ball.gif
+file
+
+
+
+
+2006-11-09T18:20:23.048165Z
+87ad8fda887489ed606193ee91b1c72a
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+constructors.gif
+file
+
+
+
+
+2006-11-09T18:20:23.076167Z
+dd586984bfc6083f523d2bcaa9061151
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+sq-blue.gif
+file
+
+
+
+
+2006-11-09T18:20:23.116170Z
+c07d9f98028d6d8eb82923870038d1c2
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+variables.gif
+file
+
+
+
+
+2006-11-09T18:20:23.152172Z
+9cc4f9c912c912be739556339b9b24e8
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+class-index.gif
+file
+
+
+
+
+2006-11-09T18:20:23.180174Z
+d36cd44f17644975d559dc429762b61f
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/.HSancillary.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/blue-ball-small.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/blue-ball.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/class-index.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/constructor-index.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/constructors.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/error-index.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/exception-index.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/green-ball-small.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/green-ball.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/innerclass-index.html.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/innerclasses.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/interface-index.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/magenta-ball-small.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/magenta-ball.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/method-index.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/methods.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/package-index.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/red-ball-small.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/red-ball.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/sq-blue.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/sql-blue.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/variable-index.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/variables.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/yellow-ball-small.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Doc/p-images/.svn/prop-base/yellow-ball.gif.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
Binary file Prover/Doc/p-images/.svn/text-base/.HSancillary.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/blue-ball-small.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/blue-ball.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/class-index.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/constructor-index.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/constructors.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/error-index.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/exception-index.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/green-ball-small.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/green-ball.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/innerclass-index.html.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/innerclasses.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/interface-index.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/magenta-ball-small.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/magenta-ball.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/method-index.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/methods.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/package-index.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/red-ball-small.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/red-ball.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/sq-blue.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/sql-blue.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/variable-index.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/variables.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/yellow-ball-small.gif.svn-base has changed
Binary file Prover/Doc/p-images/.svn/text-base/yellow-ball.gif.svn-base has changed
Binary file Prover/Doc/p-images/blue-ball-small.gif has changed
Binary file Prover/Doc/p-images/blue-ball.gif has changed
Binary file Prover/Doc/p-images/class-index.gif has changed
Binary file Prover/Doc/p-images/constructor-index.gif has changed
Binary file Prover/Doc/p-images/constructors.gif has changed
Binary file Prover/Doc/p-images/error-index.gif has changed
Binary file Prover/Doc/p-images/exception-index.gif has changed
Binary file Prover/Doc/p-images/green-ball-small.gif has changed
Binary file Prover/Doc/p-images/green-ball.gif has changed
Binary file Prover/Doc/p-images/innerclass-index.html has changed
Binary file Prover/Doc/p-images/innerclasses.gif has changed
Binary file Prover/Doc/p-images/interface-index.gif has changed
Binary file Prover/Doc/p-images/magenta-ball-small.gif has changed
Binary file Prover/Doc/p-images/magenta-ball.gif has changed
Binary file Prover/Doc/p-images/method-index.gif has changed
Binary file Prover/Doc/p-images/methods.gif has changed
Binary file Prover/Doc/p-images/package-index.gif has changed
Binary file Prover/Doc/p-images/red-ball-small.gif has changed
Binary file Prover/Doc/p-images/red-ball.gif has changed
Binary file Prover/Doc/p-images/sq-blue.gif has changed
Binary file Prover/Doc/p-images/sql-blue.gif has changed
Binary file Prover/Doc/p-images/variable-index.gif has changed
Binary file Prover/Doc/p-images/variables.gif has changed
Binary file Prover/Doc/p-images/yellow-ball-small.gif has changed
Binary file Prover/Doc/p-images/yellow-ball.gif has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Formulae.pizza Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,48 @@
+
+package G4ip;
+
+/** Class for propositional formulae.<p>
+ * @author Christian Urban
+ */
+public class Form {
+
+ public case False();
+ public case And(Form c1,Form c2);
+ public case Or(Form c1,Form c2);
+ public case Imp(Form c1,Form c2);
+ //public case Equ(Form c1,Form c2);
+ public case Atm(String c);
+
+ public String toString() {
+ switch(this) {
+ case False():
+ return "false";
+ case And(Form c1,Form c2):
+ return "(" + c1.toString() + " & " + c2.toString() + ")";
+ case Or(Form c1,Form c2):
+ return "(" + c1.toString() + " v " + c2.toString() + ")";
+ case Imp(Form c1,Form c2):
+ return "(" + c1.toString() + " -> " + c2.toString() + ")";
+ case Atm(String c):
+ return c;
+ }
+ }
+
+ // for testing
+ public String internalString() {
+ switch(this) {
+ case False():
+ return "false";
+ case And(Form c1,Form c2):
+ return "And(" + c1.internalString() + "," + c2.internalString() + ")";
+ case Or(Form c1,Form c2):
+ return "Or(" + c1.internalString() + "," + c2.internalString() + ")";
+ case Imp(Form c1,Form c2):
+ return "Imp(" + c1.internalString() + "," + c2.internalString() + ")";
+ case Atm(String c):
+ return "Atm(\"p"+ c + "\")";
+ }
+ }
+
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip.bbl Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,9 @@
+\begin{thebibliography}{}
+
+\bibitem[Dyckhoff, 1992]{Dyckhoff92}
+Dyckhoff, R.
+\newblock {C}ontraction-{F}ree {S}equent {C}alculi for {I}ntuitionistic
+ {L}ogic.
+\newblock {\em Journal of Symbolic Logic}, 57(3):795--807.
+
+\end{thebibliography}
Binary file Prover/G4ip.dvi has changed
Binary file Prover/G4ip.gif has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip.html Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,27 @@
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+ <TITLE>G4ip Infernce Rules</TITLE>
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#C7C3C7" LINK="#0000EF" VLINK="#51188E" ALINK="#FF0000">
+
+<H2>The Inference Rules of G4ip (LJT) </H2>
+
+A <A HREF="G4ip.dvi">dvi</A> and <A HREF="G4ip.ps">ps</A> version; the rules can be found in
+<A HREF="index.html#Dyckhoff92">[Dyckhoff, 1992]</a>.
+
+<HR>
+
+<img src="G4ip.gif" width=467 height=559>
+
+<HR>
+<ADDRESS>
+<A HREF="mailto:Christian.Urban@cl.cam.ac.uk">Christian Urban</A></ADDRESS>
+
+
+<P><!-- Created: Tue Mar 4 00:23:25 GMT 1997 -->
+<!-- hhmts start -->
+Last modified: Wed Jan 28 22:14:28 GMT 1998
+<!-- hhmts end -->
+</BODY>
+</HTML>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip.mod Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,118 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% An Implementation of G4ip for Terzo
+% author: Christian.Urban@cl.cam.ac.uk
+%
+% some solvable sample queries:
+%
+% prove (nil |- p imp p).
+% prove (nil |- (p imp p) imp (p imp p)).
+% prove (nil |- ((((p imp q) imp p) imp p) imp q) imp q).
+% prove (nil |- (a imp (b imp c)) imp ((a imp b) imp (a imp c))).
+% prove (nil |- (a or (a imp b)) imp (((a imp b) imp a) imp a)).
+%
+% two non-solvable queries
+%
+% prove (nil |- a or (a imp false)).
+% prove (nil |- ((a imp b) imp a) imp a).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+module G4ip.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% atomic formulae
+kind form type.
+
+type p form.
+type q form.
+type a form.
+type b form.
+type c form.
+
+type isatomic form -> o.
+
+isatomic p.
+isatomic q.
+isatomic a.
+isatomic b.
+isatomic c.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% logical operators
+type false form.
+type and form -> form -> form.
+type or form -> form -> form.
+type imp form -> form -> form.
+
+infixr and 9.
+infixr or 9.
+infixr imp 9.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% sequent constructor; sequents are of the form: (list |- formula)
+kind seq type.
+
+type |- list form -> form -> seq.
+infixl |- 4.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% prove predicate; prints "solvable" if seq is provable, otherwise "no"
+type prove seq -> o.
+
+prove (Gamma |- G) :- ( membNrest P Gamma Gamma',
+ left (P::Gamma' |- G) );
+ right (Gamma |- G).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% rightrules
+type right seq -> o.
+
+right (Gamma |- B and C) :- prove (Gamma |- B), %% and-R
+ prove (Gamma |- C).
+
+right (Gamma |- B imp C) :- prove (B::Gamma |- C). %% imp-R
+
+right (Gamma |- B or C) :- prove (Gamma |- B); %% or-R
+ prove (Gamma |- C).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% leftrules
+type left seq -> o.
+
+left (false :: Gamma |- G). %% false-L
+
+left (A :: Gamma |- A) :- isatomic A. %% axiom
+
+left (B and C::Gamma |- G) :- prove (B::C::Gamma |- G). %% and-L
+
+left (B or C::Gamma |- G) :- prove (B::Gamma |- G), %% or-L
+ prove (C::Gamma |- G).
+
+
+left (A imp B::Gamma |- G) :- %% imp-L1
+ isatomic A, ismember A Gamma, prove (B::Gamma |- G).
+
+left ((B and C) imp D::Gamma |- G) :- %% imp-L2
+ prove (B imp (C imp D)::Gamma |- G).
+
+left ((B or C) imp D::Gamma |- G) :- %% imp-L3
+ prove (B imp D::C imp D::Gamma |- G).
+
+left ((B imp C) imp D::Gamma |- G) :- %% imp-L4
+ prove (C imp D::Gamma |- B imp C),
+ prove (D::Gamma |- G).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% returns a member and the remainder of a list
+type membNrest A -> list A -> list A -> o.
+
+membNrest X (X::Rest) Rest.
+membNrest X (Y::Tail) (Y::Rest) :- membNrest X Tail Rest.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% succeeds only once if A is element in the list
+type ismember A -> list A -> o.
+
+ismember X (X::Rest) :- !.
+ismember X (Y::Tail) :- ismember X Tail.
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip.ps Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,427 @@
+%!PS-Adobe-2.0
+%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software
+%%Title: G4ip.dvi
+%%Pages: 1
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 596 842
+%%EndComments
+%DVIPSCommandLine: dvips G4ip.dvi
+%DVIPSParameters: dpi=300, comments removed
+%DVIPSSource: TeX output 1997.11.23:1951
+%%BeginProcSet: tex.pro
+/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
+forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
+/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
+/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
+/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
+string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
+end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
+/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
+N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
+length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
+128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
+get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
+dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
+/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
+/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
+0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
+setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
+.1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}
+if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
+length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
+cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
+0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
+add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
+/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
+65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
+0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
+{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
+getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
+ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
+RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
+false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
+round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
+rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
+{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
+B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
+4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
+p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
+a}B /bos{/SS save N}B /eos{SS restore}B end
+%%EndProcSet
+TeXDict begin 39158280 55380996 1000 300 300 (G4ip.dvi)
+@start /Fa 3 63 df<7FFF00FFFF80FFFF807FFF0011047D8F18>45
+D<000300000780001F80003F00007E0001FC0003F00007E0001FC0003F00007E0000FC00
+00FC00007E00003F00001FC00007E00003F00001FC00007E00003F00001F800007800003
+0011187D9918>60 D<600000F00000FC00007E00003F00001FC00007E00003F00001FC00
+007E00003F00001F80001F80003F00007E0001FC0003F00007E0001FC0003F00007E0000
+FC0000F0000060000011187D9918>62 D E /Fb 4 53 df<03000700FF00070007000700
+070007000700070007000700070007000700070007000700070007007FF00C157E9412>
+49 D<0F8030E040708030C038E0384038003800700070006000C00180030006000C0808
+0810183FF07FF0FFF00D157E9412>I<0FE030306018701C701C001C00180038006007E0
+00300018000C000E000EE00EE00EC00C401830300FE00F157F9412>I<00300030007000
+F001F001700270047008701870107020704070C070FFFE0070007000700070007003FE0F
+157F9412>I E /Fc 1 96 df<C00002C0000660000C60000C60000C3000183000181800
+301800301800300C00600C00600600C00600C00600C00301800301800183000183000183
+0000C60000C600006C00006C00006C00003800003800001000171C7D9A1E>95
+D E /Fd 18 122 df<001FFF0000F80000F00000F00000F00001E00001E00001E00001E0
+0003C00003C00003C00003C0000780000780000780000780000F00000F00000F00000F00
+001E00001E00301E00781E00F83C00F83C00F0780080700040E00021C0001F000018207D
+9E18>74 D<01FFF800001F0000001E0000001E0000001E0000003C0000003C0000003C00
+00003C00000078000000780000007800000078000000F0000000F0000000F0000000F000
+0001E0000001E0000001E0000001E0008003C0010003C0010003C0030003C00200078006
+000780060007800C0007801C000F007800FFFFF800191F7D9E1D>76
+D<0007E040001C18C0003005800060038000C0038001C001800180010003800100038001
+00038001000380000003C0000003C0000003F8000001FF800001FFE000007FF000001FF0
+000001F80000007800000078000000380000003800200038002000380020003000600070
+00600060006000E0007000C000E8038000C606000081F800001A217D9F1A>83
+D<00F1800389C00707800E03801C03803C0380380700780700780700780700F00E00F00E
+00F00E00F00E20F01C40F01C40703C40705C40308C800F070013147C9317>97
+D<07803F8007000700070007000E000E000E000E001C001C001CF01D0C3A0E3C0E380F38
+0F700F700F700F700FE01EE01EE01EE01CE03CE038607060E031C01F0010207B9F15>I<
+007E0001C1000300800E07801E07801C07003C0200780000780000780000F00000F00000
+F00000F00000F0000070010070020030040018380007C00011147C9315>I<007C01C207
+010E011C013C013802780C7BF07C00F000F000F000F0007000700170023804183807C010
+147C9315>101 D<00007800019C00033C00033C000718000700000700000E00000E0000
+0E00000E00000E0001FFE0001C00001C00001C00001C0000380000380000380000380000
+380000700000700000700000700000700000700000E00000E00000E00000E00000C00001
+C00001C0000180003180007B0000F300006600003C00001629829F0E>I<003C6000E270
+01C1E00380E00700E00F00E00E01C01E01C01E01C01E01C03C03803C03803C03803C0380
+3C07003C07001C0F001C17000C2E0003CE00000E00000E00001C00001C00301C00783800
+F0700060E0003F8000141D7E9315>I<00C001E001E001C0000000000000000000000000
+00000E003300230043804300470087000E000E000E001C001C001C003840388030807080
+310033001C000B1F7C9E0E>105 D<03C01FC0038003800380038007000700070007000E
+000E000E000E001C001C001C001C0038003800380038007000700070007100E200E200E2
+00E200640038000A207C9F0C>108 D<1C0F80F0002630C318004740640C004780680E00
+4700700E004700700E008E00E01C000E00E01C000E00E01C000E00E01C001C01C038001C
+01C038001C01C038001C01C0708038038071003803806100380380E10038038062007007
+006600300300380021147C9325>I<1C0F802630C04740604780604700704700708E00E0
+0E00E00E00E00E00E01C01C01C01C01C01C01C0384380388380308380708380310700330
+3001C016147C931A>I<007C0001C3000301800E01C01E01C01C01E03C01E07801E07801
+E07801E0F003C0F003C0F003C0F00780F00700700F00700E0030180018700007C0001314
+7C9317>I<1C1E002661004783804787804707804703008E00000E00000E00000E00001C
+00001C00001C00001C000038000038000038000038000070000030000011147C9313>
+114 D<00FC030206010C030C070C060C000F800FF007F803FC003E000E700EF00CF00CE0
+08401020601F8010147D9313>I<0E00C03300E02301C04381C04301C04701C08703800E
+03800E03800E03801C07001C07001C07001C07101C0E20180E20180E201C1E200C264007
+C38014147C9318>117 D<0E00C03300E02301C04381C04301C04701C08703800E03800E
+03800E03801C07001C07001C07001C07001C0E00180E00180E001C1E000C3C0007DC0000
+1C00001C00003800F03800F07000E06000C0C0004380003E0000131D7C9316>121
+D E /Fe 53 124 df<FFFFFC0F803C07800C078004078004078006078002078002078002
+078002078000078000078000078000078000078000078000078000078000078000078000
+0780000780000780000780000780000780000780000780000FC000FFFE00171F7E9E1C>
+0 D<001F83E000F06E3001C078780380F8780300F0300700700007007000070070000700
+7000070070000700700007007000FFFFFF80070070000700700007007000070070000700
+700007007000070070000700700007007000070070000700700007007000070070000700
+7000070070000700700007007000070070007FE3FF001D20809F1B>11
+D<003F0000E0C001C0C00381E00701E00701E00700000700000700000700000700000700
+00FFFFE00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700
+E00700E00700E00700E00700E00700E00700E00700E07FC3FE1720809F19>I<00780000
+008400000184000003020000070200000702000007020000070200000704000007040000
+07080000070800000310000003A00FFC03C003E0038001C001C0008001C0010003E00100
+04E0020008F00200187004003078080070380800701C1000F01E1000F00E2000F0074000
+F003C0087003C0087801C010380670301C18386007E00F801E227EA023>38
+D<0020004000800100020006000C000C00180018003000300030007000600060006000E0
+00E000E000E000E000E000E000E000E000E000E000E00060006000600070003000300030
+00180018000C000C000600020001000080004000200B2E7DA112>40
+D<800040002000100008000C00060006000300030001800180018001C000C000C000C000
+E000E000E000E000E000E000E000E000E000E000E000E000C000C000C001C00180018001
+8003000300060006000C00080010002000400080000B2E7DA112>I<70F8FCFC74040404
+080810102040060E7C840D>44 D<FFC0FFC00A027F8A0F>I<70F8F8F87005057C840D>I<
+03F0000E1C001C0E00180600380700700380700380700380700380F003C0F003C0F003C0
+F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0700380700380
+7003807807803807001806001C0E000E1C0003F000121F7E9D17>48
+D<018003800F80F380038003800380038003800380038003800380038003800380038003
+80038003800380038003800380038003800380038007C0FFFE0F1E7C9D17>I<03F0000C
+1C00100E00200700400780800780F007C0F803C0F803C0F803C02007C00007C000078000
+0780000F00000E00001C0000380000700000600000C0000180000300000600400C004018
+00401000803FFF807FFF80FFFF80121E7E9D17>I<03F0000C1C00100E00200F00780F80
+780780780780380F80000F80000F00000F00000E00001C0000380003F000003C00000E00
+000F000007800007800007C02007C0F807C0F807C0F807C0F00780400780400F00200E00
+1C3C0003F000121F7E9D17>I<000600000600000E00000E00001E00002E00002E00004E
+00008E00008E00010E00020E00020E00040E00080E00080E00100E00200E00200E00400E
+00C00E00FFFFF0000E00000E00000E00000E00000E00000E00000E0000FFE0141E7F9D17
+>I<1803001FFE001FFC001FF8001FE00010000010000010000010000010000010000011
+F000161C00180E001007001007800003800003800003C00003C00003C07003C0F003C0F0
+03C0E00380400380400700200600100E000C380003E000121F7E9D17>I<4000007FFFC0
+7FFF807FFF80400100800200800200800400000800000800001000002000002000004000
+00400000C00000C00001C000018000038000038000038000038000078000078000078000
+078000078000078000078000030000121F7D9D17>55 D<03F0000C0C0010060030030020
+01806001806001806001807001807803003E03003F06001FC8000FF00003F80007FC000C
+7E00103F00300F806003804001C0C001C0C000C0C000C0C000C0C0008060018020010010
+02000C0C0003F000121F7E9D17>I<03F0000E18001C0C00380600380700700700700380
+F00380F00380F003C0F003C0F003C0F003C0F003C07007C07007C03807C0180BC00E13C0
+03E3C0000380000380000380000700300700780600780E00700C002018001070000FC000
+121F7E9D17>I<70F8F8F8700000000000000000000070F8F8F87005147C930D>I<70F8F8
+F8700000000000000000000070F0F8F878080808101010202040051D7C930D>I<000FC0
+40007030C001C009C0038005C0070003C00E0001C01E0000C01C0000C03C0000C07C0000
+407C00004078000040F8000000F8000000F8000000F8000000F8000000F8000000F80000
+00F8000000F8000000780000007C0000407C0000403C0000401C0000401E0000800E0000
+80070001000380020001C0040000703800000FC0001A217D9F21>67
+D<FFFFE0000F803C0007801E000780070007800380078003C0078001E0078001E0078001
+F0078000F0078000F0078000F8078000F8078000F8078000F8078000F8078000F8078000
+F8078000F8078000F8078000F0078000F0078000F0078001E0078001E0078003C0078003
+800780070007800E000F803C00FFFFE0001D1F7E9E23>I<FFFFFF000F800F0007800300
+078003000780010007800180078000800780008007800080078000800780800007808000
+07808000078080000781800007FF80000781800007808000078080000780800007808000
+07800000078000000780000007800000078000000780000007800000078000000FC00000
+FFFE0000191F7E9E1E>70 D<000FE0200078186000E004E0038002E0070001E00F0000E0
+1E0000601E0000603C0000603C0000207C00002078000020F8000000F8000000F8000000
+F8000000F8000000F8000000F8000000F8007FFCF80003E0780001E07C0001E03C0001E0
+3C0001E01E0001E01E0001E00F0001E0070001E0038002E000E0046000781820000FE000
+1E217D9F24>I<FFFC0FC007800780078007800780078007800780078007800780078007
+80078007800780078007800780078007800780078007800780078007800FC0FFFC0E1F7F
+9E10>73 D<FFFE000FC00007800007800007800007800007800007800007800007800007
+800007800007800007800007800007800007800007800007800007800007800207800207
+800207800207800607800407800407800C07801C0F807CFFFFFC171F7E9E1C>76
+D<FFFF80000F80F0000780780007803C0007801E0007801E0007801F0007801F0007801F
+0007801F0007801E0007801E0007803C00078078000780F00007FF80000781C0000780E0
+000780F0000780700007807800078078000780780007807C0007807C0007807C0007807C
+0407807E0407803E040FC01E08FFFC0F10000003E01E207E9E21>82
+D<07E0800C1980100780300380600180600180E00180E00080E00080E00080F00000F000
+007800007F00003FF0001FFC000FFE0003FF00001F800007800003C00003C00001C08001
+C08001C08001C08001C0C00180C00380E00300F00600CE0C0081F80012217D9F19>I<FE
+FEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
+C0C0C0C0C0C0FEFE072D7CA10D>91 D<FEFE060606060606060606060606060606060606
+0606060606060606060606060606060606060606060606FEFE072D7FA10D>93
+D<1FE000303000781800781C00300E00000E00000E00000E0000FE00078E001E0E00380E
+00780E00F00E10F00E10F00E10F01E10781E103867200F83C014147E9317>97
+D<0E0000FE00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00
+000E3E000EC3800F01C00F00E00E00E00E00700E00700E00780E00780E00780E00780E00
+780E00780E00700E00700E00E00F00E00D01C00CC300083E0015207F9F19>I<03F80E0C
+1C1E381E380C70007000F000F000F000F000F000F00070007000380138011C020E0C03F0
+10147E9314>I<000380003F800003800003800003800003800003800003800003800003
+8000038000038003E380061B801C0780380380380380700380700380F00380F00380F003
+80F00380F00380F003807003807003803803803807801C07800E1B8003E3F815207E9F19
+>I<03F0000E1C001C0E00380700380700700700700380F00380F00380FFFF80F00000F0
+0000F000007000007000003800801800800C010007060001F80011147F9314>I<007C00
+C6018F038F07060700070007000700070007000700FFF007000700070007000700070007
+00070007000700070007000700070007000700070007007FF01020809F0E>I<0000E003
+E3300E3C301C1C30380E00780F00780F00780F00780F00780F00380E001C1C001E380033
+E0002000002000003000003000003FFE001FFF800FFFC03001E0600070C00030C00030C0
+0030C000306000603000C01C038003FC00141F7F9417>I<0E0000FE00000E00000E0000
+0E00000E00000E00000E00000E00000E00000E00000E00000E3E000E43000E81800F01C0
+0F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0
+0E01C00E01C00E01C0FFE7FC16207F9F19>I<1C001E003E001E001C0000000000000000
+00000000000E007E000E000E000E000E000E000E000E000E000E000E000E000E000E000E
+000E000E000E00FFC00A1F809E0C>I<0E0000FE00000E00000E00000E00000E00000E00
+000E00000E00000E00000E00000E00000E0FF00E03C00E03000E02000E04000E08000E10
+000E30000E70000EF8000F38000E1C000E1E000E0E000E07000E07800E03800E03C00E03
+E0FFCFF815207F9F18>107 D<0E00FE000E000E000E000E000E000E000E000E000E000E
+000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E
+000E00FFE00B20809F0C>I<0E1F01F000FE618618000E81C81C000F00F00E000F00F00E
+000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E00
+0E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E00FF
+E7FE7FE023147F9326>I<0E3E00FE43000E81800F01C00F01C00E01C00E01C00E01C00E
+01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFE7FC16
+147F9319>I<01F800070E001C03803801C03801C07000E07000E0F000F0F000F0F000F0
+F000F0F000F0F000F07000E07000E03801C03801C01C0380070E0001F80014147F9317>
+I<0E3E00FEC3800F01C00F00E00E00E00E00F00E00700E00780E00780E00780E00780E00
+780E00780E00700E00F00E00E00F01E00F01C00EC3000E3E000E00000E00000E00000E00
+000E00000E00000E00000E0000FFE000151D7F9319>I<03E0800619801C05803C078038
+0380780380700380F00380F00380F00380F00380F00380F0038070038078038038038038
+07801C0B800E138003E38000038000038000038000038000038000038000038000038000
+3FF8151D7E9318>I<0E78FE8C0F1E0F1E0F0C0E000E000E000E000E000E000E000E000E
+000E000E000E000E000E00FFE00F147F9312>I<1F9030704030C010C010C010E0007800
+7F803FE00FF00070803880188018C018C018E030D0608F800D147E9312>I<0200020002
+00060006000E000E003E00FFF80E000E000E000E000E000E000E000E000E000E000E000E
+080E080E080E080E080610031001E00D1C7F9B12>I<0E01C0FE1FC00E01C00E01C00E01
+C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E03
+C00603C0030DC001F1FC16147F9319>I<7FC3FC0F01E00701C007018003810001C20000
+E40000EC00007800003800003C00007C00004E000087000107000303800201C00601E01E
+01E0FF07FE1714809318>120 D<FF83F81E01E01C00C00E00800E00800E008007010007
+010003820003820003820001C40001C40001EC0000E80000E80000700000700000700000
+2000002000004000004000004000F08000F08000F100006200003C0000151D7F9318>I<
+FFFFFC1601808C17>123 D E /Ff 10 121 df<70F8FCFC74040404080810102040060E
+7C840D>59 D<000002000000060000000E0000000E0000001E0000001F0000002F000000
+2F0000004F0000008F0000008F0000010F0000010F0000020F0000040F0000040F000008
+0F8000080780001007800020078000200780007FFF800040078000800780018007800100
+078002000780020007C0040003C00C0003C01E0007C0FF807FFC1E207E9F22>65
+D<00FFFFE0000F0078000F003C000F001C000F001E001E001E001E001E001E001E001E00
+1E003C003C003C003C003C0078003C00F0007803C0007FFF80007803C0007801E000F000
+F000F000F000F000F000F0007001E000F001E000F001E000F001E000E003C001E003C003
+C003C0038003C00F0007801E00FFFFF0001F1F7E9E22>I<0000FE0200078186001C004C
+0038003C0060003C00C0001C01C0001803800018070000180F0000181E0000101E000010
+3C0000003C00000078000000780000007800000078000000F0000000F0000000F0000000
+F0000000F00000807000008070000080700001003800010038000200180004000C001800
+060020000381C00000FE00001F217E9F21>I<00FFFFE000000F007800000F001C00000F
+000E00000F000700001E000700001E000380001E000380001E000380003C000380003C00
+0380003C000380003C000380007800078000780007800078000780007800078000F0000F
+0000F0000F0000F0000E0000F0001E0001E0001C0001E0003C0001E000380001E0007000
+03C000E00003C001C00003C003800003C007000007803C0000FFFFF00000211F7E9E26>
+I<00007E0100038183000E00460038002E0070001E00E0000E01C0000C0380000C070000
+0C0F00000C1E0000081E0000083C0000003C000000780000007800000078000000780000
+00F0000000F0007FFCF00001E0F00001E0F00003C0700003C0700003C0700003C0380007
+80380007801C000F800C000B80060033000380C100007F000020217E9F24>71
+D<00E001E001E000C000000000000000000000000000000E001300238043804380438087
+00070007000E000E001C001C001C20384038403840388019000E000B1F7E9E10>105
+D<1E07C07C00231861860023A032030043C0340300438038038043803803808700700700
+0700700700070070070007007007000E00E00E000E00E00E000E00E00E000E00E01C101C
+01C01C201C01C038201C01C038401C01C0184038038018801801800F0024147E9328>
+109 D<007C0001C3000301800E01C01E01C01C01E03C01E07801E07801E07801E0F003C0
+F003C0F003C0F00780F00700700F00700E0030180018700007C00013147E9316>111
+D<03C1C00C62201034701038F02038F020386040700000700000700000700000E00000E0
+0000E00000E02061C040F1C040F1C080E2C080446300383C0014147E931A>120
+D E /Fg 20 118 df<00030006001C0038007800F000E001E003C003C007800F800F801F
+001F001F003E003E003E007E007E007E007C00FC00FC00FC00FC00FC00FC00FC00FC00FC
+00FC00FC00FC00FC00FC007C007E007E007E003E003E003E001F001F001F000F800F8007
+8003C003C001E000E000F000780038001C00060003103C7BAC1A>40
+D<C000600038001C001E000F000700078003C003C001E001F001F000F800F800F8007C00
+7C007C007E007E007E003E003F003F003F003F003F003F003F003F003F003F003F003F00
+3F003F003E007E007E007E007C007C007C00F800F800F801F001F001E003C003C0078007
+000F001E001C0038006000C000103C7CAC1A>I<00000E0000001E0000003E0000007E00
+0000FE000000FE000001FE000003FE0000077E00000E7E00000E7E00001C7E0000387E00
+00707E0000E07E0000E07E0001C07E0003807E0007007E000E007E000E007E001C007E00
+38007E0070007E00E0007E00FFFFFFF8FFFFFFF8FFFFFFF80000FE000000FE000000FE00
+0000FE000000FE000000FE000000FE000000FE00007FFFF8007FFFF8007FFFF81D277EA6
+22>52 D<00007FE003000007FFFC0700001FFFFF0F00007FF00F9F0000FF0001FF0001FC
+0000FF0003F800007F0007F000003F000FE000001F001FC000001F001FC000000F003F80
+00000F003F80000007007F80000007007F80000007007F0000000000FF0000000000FF00
+00000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00
+00000000FF0000FFFFF87F0000FFFFF87F8000FFFFF87F800000FF003F800000FF003F80
+0000FF001FC00000FF001FC00000FF000FE00000FF0007F00000FF0003F80000FF0001FC
+0000FF0000FF0001FF00007FF007FF00001FFFFF9F000007FFFE0F0000007FF003002D29
+7CA835>71 D<FFFFFCFFFFFCFFFFFC01FE0001FE0001FE0001FE0001FE0001FE0001FE00
+01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00
+01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00
+01FE0001FE0001FE0001FE00FFFFFCFFFFFCFFFFFC16297FA819>73
+D<00FFFFF800FFFFF800FFFFF80000FF000000FF000000FF000000FF000000FF000000FF
+000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF
+000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF
+000000FF000000FF000000FF001800FF007E00FF00FF00FF00FF00FF00FF00FF00FF00FE
+007E01FC007C01F8003E07F0000FFFE00003FF00001D297EA823>I<FFFFFC0000FFFFFC
+0000FFFFFC000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0000
+0003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC000000
+03FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003
+FC00000003FC0001C003FC0001C003FC0001C003FC0001C003FC0003C003FC00038003FC
+00038003FC00078003FC00078003FC000F8003FC000F8003FC001F8003FC007F8003FC01
+FF00FFFFFFFF00FFFFFFFF00FFFFFFFF0022297EA828>76 D<FFFFFFE00000FFFFFFFE00
+00FFFFFFFF800003FC003FE00003FC000FF00003FC0007F80003FC0003FC0003FC0001FC
+0003FC0001FE0003FC0001FE0003FC0001FE0003FC0001FE0003FC0001FE0003FC0001FE
+0003FC0001FC0003FC0003F80003FC0007F80003FC000FE00003FC003FC00003FFFFFE00
+0003FFFFFE000003FC00FF800003FC003FC00003FC001FE00003FC000FF00003FC0007F8
+0003FC0007F80003FC0007F80003FC0007F80003FC0007F80003FC0007F80003FC0007F8
+0003FC0007F80003FC0007F80003FC0007F80E03FC0007F80E03FC0003F80E03FC0001FC
+1CFFFFF000FE1CFFFFF0007FF8FFFFF0000FE02F297EA832>82 D<7FFFFFFFFF807FFFFF
+FFFF807FFFFFFFFF807F807F807F807C007F800F8078007F80078078007F80078070007F
+800380F0007F8003C0F0007F8003C0E0007F8001C0E0007F8001C0E0007F8001C0E0007F
+8001C0E0007F8001C000007F80000000007F80000000007F80000000007F80000000007F
+80000000007F80000000007F80000000007F80000000007F80000000007F80000000007F
+80000000007F80000000007F80000000007F80000000007F80000000007F80000000007F
+80000000007F80000000007F80000000007F80000000007F80000000007F80000000FFFF
+FFC00000FFFFFFC00000FFFFFFC0002A287EA72F>84 D<003FF00001FFFC0003F03E000F
+C07F001F807F003F007F003F007F007F003E007E0000007E000000FE000000FE000000FE
+000000FE000000FE000000FE000000FE0000007E0000007E0000007F0000003F0003803F
+8003801F8007000FE00E0003F83C0001FFF800003FC000191B7E9A1E>99
+D<003FC00001FFF00003E07C000F803E001F801F001F001F003F000F807E000F807E000F
+C07E000FC0FE0007C0FE0007C0FFFFFFC0FFFFFFC0FE000000FE000000FE0000007E0000
+007E0000007F0000003F0001C01F0001C00F80038007C0070003F01E0000FFFC00003FE0
+001A1B7E9A1F>101 D<0007F8003FFC007E3E01FC7F03F87F03F07F07F07F07F03E07F0
+0007F00007F00007F00007F00007F00007F000FFFFC0FFFFC0FFFFC007F00007F00007F0
+0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0
+0007F00007F00007F00007F00007F00007F0007FFF807FFF807FFF80182A7EA915>I<07
+000F801FC03FE03FE03FE01FC00F8007000000000000000000000000000000FFE0FFE0FF
+E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F
+E00FE00FE00FE0FFFEFFFEFFFE0F2B7EAA12>105 D<FFE0FFE0FFE00FE00FE00FE00FE0
+0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0
+0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2A
+7EA912>108 D<FFC07E00FFC1FF80FFC30FC00FC40FE00FC807E00FD807F00FD007F00F
+D007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00F
+E007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F0FFFE3FFFFF
+FE3FFFFFFE3FFF201B7D9A25>110 D<003FE00001FFFC0003F07E000FC01F801F800FC0
+3F0007E03F0007E07E0003F07E0003F07E0003F0FE0003F8FE0003F8FE0003F8FE0003F8
+FE0003F8FE0003F8FE0003F8FE0003F87E0003F07E0003F03F0007E03F0007E01F800FC0
+0FC01F8007F07F0001FFFC00003FE0001D1B7E9A22>I<FFE1FE00FFE7FF80FFFE0FE00F
+F803F00FF001F80FE001FC0FE000FC0FE000FE0FE000FE0FE0007F0FE0007F0FE0007F0F
+E0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007E0FE000FE0FE000FE0FE000FC0F
+E001FC0FF001F80FF803F00FFC0FE00FEFFF800FE1FC000FE000000FE000000FE000000F
+E000000FE000000FE000000FE000000FE000000FE00000FFFE0000FFFE0000FFFE000020
+277E9A25>I<FFC3E0FFC7F8FFCC7C0FD8FE0FD0FE0FD0FE0FF0FE0FE07C0FE0000FE000
+0FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE000
+0FE0000FE000FFFF00FFFF00FFFF00171B7E9A1B>114 D<03FE300FFFF03E03F07800F0
+7000F0F00070F00070F80070FE0000FFE0007FFF007FFFC03FFFE01FFFF007FFF800FFF8
+0007FC0000FCE0007CE0003CF0003CF00038F80038FC0070FF01E0E7FFC0C1FF00161B7E
+9A1B>I<FFE07FF0FFE07FF0FFE07FF00FE007F00FE007F00FE007F00FE007F00FE007F0
+0FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F0
+0FE007F00FE007F00FE007F00FE007F00FE00FF00FE00FF007E017F003F067FF01FFC7FF
+007F87FF201B7D9A25>117 D E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300dpi
+TeXDict begin
+%%PaperSize: a4
+
+%%EndSetup
+%%Page: 1 1
+1 0 bop 25 125 a Fg(Inference)22 b(Rules)h(of)e(G4ip)i(\(LJT\))p
+25 261 1790 2 v 25 1885 2 1625 v 409 412 165 2 v 409
+452 a Ff(A;)8 b Fe(\000)p 502 452 6 20 v 507 443 23 2
+v 48 w Ff(A)595 428 y(Axiom)p 995 412 221 2 v 995 452
+a Fd(false)o Ff(;)g Fe(\000)p 1142 452 6 20 v 1147 443
+23 2 v 48 w Ff(G)1237 423 y Fd(false)p Fe(-L)400 526
+y(\()p Ff(A)15 b Fe(b)q(eing)h(atomic\))409 637 y Ff(B)r(;)8
+b(C)q(;)g Fe(\000)p 558 637 6 20 v 563 628 23 2 v 47
+w Ff(G)p 402 656 238 2 v 402 696 a(B)r Fe(&)p Ff(C)q(;)g
+Fe(\000)p 566 696 6 20 v 571 687 23 2 v 48 w Ff(G)660
+672 y Fe(&-L)994 646 y(\000)p 1033 646 6 20 v 1038 637
+23 2 v 49 w Ff(B)48 b Fe(\000)p 1191 646 6 20 v 1197
+637 23 2 v 48 w Ff(C)p 994 656 272 2 v 1037 696 a Fe(\000)p
+1076 696 6 20 v 1081 687 23 2 v 49 w Ff(B)r Fe(&)p Ff(C)1286
+672 y Fe(&-R)333 807 y Ff(B)r(;)8 b Fe(\000)p 428 807
+6 20 v 434 798 23 2 v 49 w Ff(G)45 b(C)q(;)8 b Fe(\000)p
+640 807 6 20 v 645 798 23 2 v 47 w Ff(G)p 333 826 381
+2 v 407 865 a(B)r Fc(_)q Ff(C)q(;)g Fe(\000)p 566 865
+6 20 v 571 856 23 2 v 47 w Ff(G)734 841 y Fc(_)p Fe(-L)891
+816 y(\000)p 929 816 6 20 v 935 807 23 2 v 48 w Ff(B)p
+858 826 180 2 v 858 865 a Fe(\000)p 896 865 6 20 v 902
+856 23 2 v 48 w Ff(B)r Fc(_)q Ff(C)1058 838 y Fc(_)p
+Fe(-R)1136 845 y Fb(1)1241 816 y Fe(\000)p 1279 816 6
+20 v 1284 807 23 2 v 48 w Ff(C)p 1207 826 180 2 v 1207
+865 a Fe(\000)p 1246 865 6 20 v 1251 856 23 2 v 49 w
+Ff(B)r Fc(_)q Ff(C)1407 838 y Fc(_)q Fe(-R)1486 845 y
+Fb(2)393 976 y Ff(B)r(;)g(A;)g Fe(\000)p 543 976 6 20
+v 548 968 23 2 v 48 w Ff(G)p 352 995 306 2 v 352 1035
+a(A)p Fa(->)p Ff(B)r(;)g(A;)g Fe(\000)p 584 1035 6 20
+v 589 1026 23 2 v 48 w Ff(G)678 1007 y Fa(->)p Fe(-L)769
+1014 y Fb(1)1039 976 y Ff(B)r(;)g Fe(\000)p 1134 976
+6 20 v 1139 968 23 2 v 48 w Ff(C)p 1025 995 197 2 v 1025
+1035 a Fe(\000)p 1063 1035 6 20 v 1069 1026 23 2 v 49
+w Ff(B)r Fa(->)p Ff(C)1243 1011 y Fa(->)o Fe(-R)400 1109
+y(\()p Ff(A)15 b Fe(b)q(eing)h(atomic\))676 1215 y Ff(C)s
+Fa(->)p Fe(\()p Ff(D)q Fa(->)o Ff(B)r Fe(\)\000)p 957
+1215 6 20 v 962 1206 23 2 v 49 w Ff(G)p 672 1236 363
+2 v 672 1279 a Fe(\()p Ff(C)s Fe(&)p Ff(D)q Fe(\))p Fa(->)o
+Ff(B)r(;)8 b Fe(\000)p 961 1279 6 20 v 966 1270 23 2
+v 49 w Ff(G)1056 1249 y Fa(->)o Fe(-L)1146 1256 y Fb(2)655
+1387 y Ff(C)s Fa(->)p Ff(B)r(;)g(D)q Fa(->)o Ff(B)r(;)g
+Fe(\000)p 978 1387 6 20 v 983 1378 23 2 v 49 w Ff(G)p
+655 1406 397 2 v 685 1448 a Fe(\()p Ff(C)s Fc(_)p Ff(D)q
+Fe(\))p Fa(->)o Ff(B)r Fe(\000)p 948 1448 6 20 v 954
+1439 23 2 v 49 w Ff(G)1072 1418 y Fa(->)p Fe(-L)1163
+1425 y Fb(3)575 1556 y Ff(D)q Fa(->)p Ff(B)r(;)g Fe(\000)p
+757 1556 6 20 v 762 1548 23 2 v 48 w Ff(C)s Fa(->)p Ff(D)46
+b(B)r(;)8 b Fe(\000)p 1058 1556 6 20 v 1064 1548 23 2
+v 48 w Ff(G)p 575 1575 558 2 v 676 1618 a Fe(\()p Ff(C)s
+Fa(->)o Ff(D)q Fe(\))p Fa(->)p Ff(B)r Fe(\000)p 957 1618
+6 20 v 962 1609 23 2 v 49 w Ff(G)1153 1587 y Fa(->)p
+Fe(-L)1244 1594 y Fb(4)573 1787 y Ff(B)r Fa(<->)p Ff(C)18
+b Fe(is)e(de\014ned)g(as)f Ff(B)r Fa(->)q Ff(C)s Fe(&)p
+Ff(C)s Fa(->)o Ff(B)p 1812 1885 2 1625 v 25 1887 1790
+2 v 244 1991 a Fe(Figure)h(1:)j(Inference)e(rules)f(for)f(G4ip;)g(see)g
+(for)g(example)h([Dyc)o(kho\013,)d(1992)o(].)25 2332
+y([Dyc)o(kho\013,)g(1992])22 b(Dyc)o(kho\013,)d(R.)32
+b(Con)o(traction-Free)18 b(Sequen)o(t)i(Calculi)h(for)d(In)o
+(tuitionistic)k(Logic.)73 2388 y Fd(Journal)16 b(of)h(Symb)n(olic)e(L)n
+(o)n(gic)p Fe(,)f(57\(3\):795{8)o(07.)908 2798 y(1)p
+eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip.tex Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,116 @@
+\documentclass[11pt]{article}
+\usepackage{dina4}
+\usepackage{my}
+\usepackage{latexsym,amssymb}
+%\usepackage[final]{graphics}
+
+
+\newcommand{\FN}[1]{FN(#1)} % free name
+\newcommand{\FC}[1]{FC(#1)} % free co-name
+\renewcommand{\refname}{\-}
+
+\begin{document}
+\section*{Inference Rules of G4ip (LJT)}
+
+\begin{figure}[h]
+ \begin{center}
+ \begin{FramedTitled}{\-}
+ \centering
+ \def\arraystretch{3.0}
+ \begin{tabular}{cc}
+
+ \infer[Axiom]{\sequ{A,\Gamm}{A}}{} &
+
+ \infer[${\em false}-L$]{\sequ{\mbox{\em false},\Gamm}{G}}{}\\[-8mm]
+
+ ($A$ being atomic) \\
+
+ \infer[\&$-L$]{\sequ{B \& C,\Gamm}{G}}
+ {\sequ{B,C,\Gamm}{G}} &
+
+ \infer[\&$-R$]{\sequ{\Gamm}{B \& C}}
+ { \sequ{\Gamm}{B}
+ & \sequ{\Gamm}{C}}\\
+
+ \infer[\OR$-L$]
+ {\sequ{B\OR C,\Gamm}{G}}
+ { \sequ{B,\Gamm}{G}
+ &\sequ{C,\Gamm}{G}} &
+
+ \infer[\OR$-R$_1]
+ {\sequ{\Gamm}{B\OR C}}
+ {\sequ{\Gamm}{B}}\hspace{3mm}
+ \infer[\OR$-R$_2]
+ {\sequ{\Gamm}{B\OR C}}
+ {\sequ{\Gamm}{C}}\\
+
+ \infer[\mbox{\tt ->}$-L$_1]
+ {\sequ{A\mbox{\tt ->} B,A,\Gamm}{G}}
+ {\sequ{B,A,\Gamm}{G}} &
+
+ \infer[\mbox{\tt ->}$-R$]
+ {\sequ{\Gamm}{B\mbox{\tt ->} C}}
+ { \sequ{B,\Gamm}{C}}\\[-8mm]
+
+ ($A$ being atomic)\\
+
+ \multicolumn{2}{c}{
+ \infer[\mbox{\tt ->}$-L$_2]
+ {\sequ{(C \& D)\mbox{\tt ->} B,\Gamm}{G}}
+ {\sequ{C \mbox{\tt ->} (D \mbox{\tt ->} B)\Gamm}{G}}} \\
+
+ \multicolumn{2}{c}{
+ \infer[\mbox{\tt ->}$-L$_3]
+ {\sequ{(C\OR D)\mbox{\tt ->} B\Gamm}{G}}
+ {\sequ{C\mbox{\tt ->}B,D\mbox{\tt ->}B,\Gamm}{G}}}\\
+
+ \multicolumn{2}{c}{
+ \infer[\mbox{\tt ->}$-L$_4]
+ {\sequ{(C\mbox{\tt ->} D)\mbox{\tt ->} B\Gamm}{G}}
+ {\sequ{D\mbox{\tt ->}B,\Gamm}{C\mbox{\tt ->} D} &
+ \sequ{B,\Gamm}{G}} }\\
+
+ %\infer[\mbox{\tt <->}$-L$]
+ % {\sequ{B\mbox{\tt <->} C,\Gamm}{G}}
+ % {\sequ{B\mbox{\tt ->} C, C\mbox{\tt ->} B,\Gamm}{G}
+ % } &
+
+ %\infer[\mbox{\tt <->}$-R$]
+ % {\sequ{\Gamm}{B\mbox{\tt <->} C}}
+ % { \sequ{\Gamm}{B\mbox{\tt ->} C} &
+ % \sequ{\Gamm}{C\mbox{\tt ->} B} }\\
+
+ \multicolumn{2}{c}
+ { $B\mbox{\tt <->}C$ is defined as $B\mbox{\tt ->}C \& C\mbox{\tt ->}B$
+ }
+ \end{tabular}
+ \end{FramedTitled}
+ \caption{Inference rules for G4ip; see for example \cite{Dyckhoff92}.}
+ \label{fig:CL}
+ \end{center}
+\end{figure}
+
+\bibliography{/home/cu200/tex/bib/all}
+\bibliographystyle{fullnames}
+
+
+\end{document}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "G4ip.tex"
+%%% End:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/entries Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,327 @@
+10
+
+dir
+715
+file:///home/urbanc/SVN/public-html/Prover/G4ip
+file:///home/urbanc/SVN/public-html
+
+
+
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+fc9df204-d421-0410-9e14-c15ef6e4f2fa
+
+ProofDisplay.class
+file
+
+
+
+
+2006-11-09T18:20:17.639827Z
+a97d2c66d3fd7bcdd213d774896841b0
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+Token$BINOP.class
+file
+
+
+
+
+2006-11-09T18:20:17.667829Z
+32b5b9eda53554043d0907125cf8cc7f
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+Prover.class
+file
+
+
+
+
+2006-11-09T18:20:17.691831Z
+8b9be19d3b67b4a369a72c4e5e10bd3d
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+Form$Imp.class
+file
+
+
+
+
+2006-11-09T18:20:17.719832Z
+b60e772948fe43c465df2f2f331396bb
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+Token.class
+file
+
+
+
+
+2006-11-09T18:20:17.747834Z
+2e75c0f87eac4e38d5ace57be283791a
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+Token$EOI.class
+file
+
+
+
+
+2006-11-09T18:20:17.767835Z
+713199ed4110463c33f47233da7fc8a9
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+Form$False.class
+file
+
+
+
+
+2006-11-09T18:20:17.795837Z
+e85886fa4962e0aef939c0c049337511
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+Form$Equ.class
+file
+
+
+
+
+2006-11-09T18:20:17.819839Z
+6b4025b2353b43060e719eea8cd0eda4
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+ProverApplet.class
+file
+
+
+
+
+2006-11-09T18:20:17.839840Z
+c8018005a79c232a2f5a8624eafbb5e4
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+Sequent.class
+file
+
+
+
+
+2006-11-09T18:20:17.871842Z
+3a85bbbc61fe6d9a0386f93236247ae7
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+Context.class
+file
+
+
+
+
+2006-11-09T18:20:17.891843Z
+d0f7d2b96881db4bde92e8f4d536f36d
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+MyLabel.class
+file
+
+
+
+
+2006-11-09T18:20:17.919845Z
+209a43004ea3a59d2159e4ecd1e708f3
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+Token$LPAREN.class
+file
+
+
+
+
+2006-11-09T18:20:17.939846Z
+4ddf81422cc41b67d1316ec0a853dd4f
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+Form$And.class
+file
+
+
+
+
+2006-11-09T18:20:17.967848Z
+d812343d49cd6ca248870b267dcb425b
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+Parser.class
+file
+
+
+
+
+2006-11-09T18:20:17.999850Z
+885d37854254ecb34fffd1f7f3c1cae4
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+Token$RPAREN.class
+file
+
+
+
+
+2006-11-09T18:20:18.023851Z
+687c812e49aad15e7a6e83f4d052c27c
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+Token$FALSE.class
+file
+
+
+
+
+2006-11-09T18:20:18.047853Z
+b1f96237a06174b90beac3a13c882416
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+Token$COMMA.class
+file
+
+
+
+
+2006-11-09T18:20:18.075855Z
+df0b752158c28ab08128e853da44ca3d
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+Token$ID.class
+file
+
+
+
+
+2006-11-09T18:20:18.091856Z
+17c60735102d0a885094c6a741b571a1
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+Form.class
+file
+
+
+
+
+2006-11-09T18:20:18.127858Z
+5daaf19e13f066c1b9d279f756bdf1dd
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+Prover$$closures.class
+file
+
+
+
+
+2006-11-09T18:20:18.151859Z
+7fdf9bd0a96557f94125b2dea0fb8a30
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+Form$Or.class
+file
+
+
+
+
+2006-11-09T18:20:18.195862Z
+03ce91b15fbf88f8389b353b84994a72
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
+Form$Atm.class
+file
+
+
+
+
+2006-11-09T18:20:18.215863Z
+a520b38c1cf82bb4d578912a22cdffb0
+2006-11-09T17:50:57.463278Z
+1
+urbanc
+has-props
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/Context.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/Form$And.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/Form$Atm.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/Form$Equ.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/Form$False.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/Form$Imp.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/Form$Or.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/Form.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/MyLabel.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/Parser.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/ProofDisplay.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/Prover$$closures.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/Prover.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/ProverApplet.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/Sequent.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/Token$BINOP.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/Token$COMMA.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/Token$EOI.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/Token$FALSE.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/Token$ID.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/Token$LPAREN.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/Token$RPAREN.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/G4ip/.svn/prop-base/Token.class.svn-base Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
Binary file Prover/G4ip/.svn/text-base/Context.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/Form$And.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/Form$Atm.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/Form$Equ.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/Form$False.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/Form$Imp.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/Form$Or.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/Form.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/MyLabel.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/Parser.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/ProofDisplay.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/Prover$$closures.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/Prover.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/ProverApplet.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/Sequent.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/Token$BINOP.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/Token$COMMA.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/Token$EOI.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/Token$FALSE.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/Token$ID.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/Token$LPAREN.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/Token$RPAREN.class.svn-base has changed
Binary file Prover/G4ip/.svn/text-base/Token.class.svn-base has changed
Binary file Prover/G4ip/Context.class has changed
Binary file Prover/G4ip/Form$And.class has changed
Binary file Prover/G4ip/Form$Atm.class has changed
Binary file Prover/G4ip/Form$Equ.class has changed
Binary file Prover/G4ip/Form$False.class has changed
Binary file Prover/G4ip/Form$Imp.class has changed
Binary file Prover/G4ip/Form$Or.class has changed
Binary file Prover/G4ip/Form.class has changed
Binary file Prover/G4ip/MyLabel.class has changed
Binary file Prover/G4ip/Parser.class has changed
Binary file Prover/G4ip/ProofDisplay.class has changed
Binary file Prover/G4ip/Prover$$closures.class has changed
Binary file Prover/G4ip/Prover.class has changed
Binary file Prover/G4ip/ProverApplet.class has changed
Binary file Prover/G4ip/Sequent.class has changed
Binary file Prover/G4ip/Token$BINOP.class has changed
Binary file Prover/G4ip/Token$COMMA.class has changed
Binary file Prover/G4ip/Token$EOI.class has changed
Binary file Prover/G4ip/Token$FALSE.class has changed
Binary file Prover/G4ip/Token$ID.class has changed
Binary file Prover/G4ip/Token$LPAREN.class has changed
Binary file Prover/G4ip/Token$RPAREN.class has changed
Binary file Prover/G4ip/Token.class has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/GettingStarted.html Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,1 @@
+Not yet available!
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Parser.pizza Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,183 @@
+package G4ip;
+
+import java.util.*;
+import pizza.lang.Pair;
+import G4ip.Form.*;
+import G4ip.Token.*;
+
+public class Token {
+ public static final int AND = 0;
+ public static final int OR = 1;
+ public static final int IMP = 2;
+ public static final int EQU = 3;
+
+ /** End-of-Input */
+ public case EOI(); // end-of-input
+ public case LPAREN();
+ public case RPAREN();
+ public case ID(String id);
+ public case FALSE();
+ public case BINOP(int op); // binary operation
+ public case COMMA();
+}
+
+/** A left-to-right, rightmost-derivation parser.<p>
+ * The following grammar is implemented:<p>
+ * <dl>
+ * <dd><u>Formula</u> ::= <u>Id</u> </dd>
+ * <dd><code>| false</code> </dd>
+ * <dd><code>|</code> ( <u>Formula</u> ) </dd>
+ * <dd><code>|</code> <u>Formula</u> <u>Binop</u> <u>Formula</u></dd>
+ * </dl><p>
+ * <dl>
+ * <dd><u>Id</u> is a string of lower case letters</dd>
+ * </dl><p>
+ * <dl>
+ * <dd><u>Binop</u> is either <code>&, v, -></code> or <code><-></code></dd>
+ * </dl><p>
+ * <dl>
+ * <dd><u>FormulaList</u> ::= <em>empty</em></dd>
+ * <dd><code>|</code> [ <u>FormulaList</u> ,]* <u>Formula</u></dd>
+ * <dl><p>
+ * The parser uses a stack where two actions are performed:
+ * <dl>
+ * <dd><b>shift</b> moves the next token to the top of the stack (getNextToken)</dd>
+ * <dd><b>reduce</b> chooses a grammar rule, X -> A B C; pops A, B, C from the
+ * top of the stack and pushes X onto the stack
+ * </dl>
+ * @author Christian Urban
+ */
+public class Parser {
+ final Pair<String,Token> keywords[] =
+ { new Pair("(", LPAREN()),
+ new Pair(")", RPAREN()),
+ new Pair(",", COMMA()),
+ new Pair("&", BINOP(Token.AND)),
+ new Pair("v ", BINOP(Token.OR)),
+ new Pair("->", BINOP(Token.IMP)),
+ new Pair("<->", BINOP(Token.EQU)),
+ new Pair("false",FALSE()) };
+ String in; // string to be parsed
+ int index; // position of the current input
+ Stack stack; // stack for the left-to-right parser 'LR(0)'
+
+ public Parser(String init_in){
+ index = 0;
+ in = init_in;
+ stack = new Stack();
+ }
+
+ /** tokens are: identifiers<code>( ) , & v -> <-> false</code>
+ * and <code>EOI</code> <em>(end of input)</em>
+ */
+ public Token getNextToken() throws Exception {
+ while ( index < in.length() && Character.isSpace(in.charAt(index)) )
+ { index++; } //delete white-spaces
+ if (index == in.length()) { return EOI(); } //end-of-string
+ for (int i=0;i<keywords.length;i++) //keywords
+ { if (in.startsWith(keywords[i].fst,index)) {
+ index=index+keywords[i].fst.length();
+ return keywords[i].snd;
+ }
+ }
+ if (Character.isLowerCase(in.charAt(index)) || Character.isDigit(in.charAt(index)))
+ { //reads identifiers
+ String s = "";
+ while ( index < in.length() &&
+ ( Character.isLowerCase(in.charAt(index))
+ || Character.isDigit(in.charAt(index))
+ )
+ )
+ { s=s.concat(in.substring(index,index+1));
+ index++;
+ }
+ return ID(s);
+ }
+ throw new Exception("Syntax error at: '" + in.charAt(index) + "'");
+ // no match at all: probably an unknown character
+ return null;
+ }
+
+ /** Implements the grammar rules. */
+ public void reduce()
+ { boolean again = false;
+ /* ID -> Atm(string) */
+ if (stack.size() > 0 &&
+ (stack.elementAt(stack.size()-1) instanceof ID))
+ { ID id = (ID)stack.pop();
+ stack.push(Atm(id.id));
+ again = true;
+ }
+ /* FALSE -> False() */
+ if (stack.size() > 0 &&
+ (stack.elementAt(stack.size()-1) instanceof FALSE))
+ { stack.pop();
+ stack.push(False());
+ again = true;
+ }
+ /* ( Formula ) -> Formula */
+ if (stack.size() > 2 &&
+ (stack.elementAt(stack.size()-3) instanceof LPAREN) &&
+ (stack.elementAt(stack.size()-2) instanceof Form) &&
+ (stack.elementAt(stack.size()-1) instanceof RPAREN))
+ { stack.pop();
+ Form form = (Form)stack.pop();
+ stack.pop();
+ stack.push(form);
+ again = true;
+ }
+ /* Formula BINOP Formula -> Formula */
+ if (stack.size() > 2 &&
+ (stack.elementAt(stack.size()-3) instanceof Form) &&
+ (stack.elementAt(stack.size()-2) instanceof BINOP) &&
+ (stack.elementAt(stack.size()-1) instanceof Form))
+ { Form c2 = (Form)stack.pop();
+ BINOP op = (BINOP)stack.pop();
+ Form c1 = (Form)stack.pop();
+ switch(op.op) {
+ case Token.AND: stack.push(new And(c1,c2)); again = true;break;
+ case Token.OR: stack.push(new Or(c1,c2)); again = true;break;
+ case Token.IMP: stack.push(new Imp(c1,c2)); again = true;break;
+ case Token.EQU: stack.push(new And(Imp(c1,c2),Imp(c2,c1))); again = true;break;
+ }
+ }
+ if (again == true) { reduce(); } // do as many "reduces" as possible
+ }
+
+ /** parses a single formula
+ */
+ public Form parseFormula() throws Exception {
+ Token tok;
+ while (!((tok = getNextToken()) instanceof EOI)) {
+ stack.push(tok);
+ reduce();
+ }
+ if (stack.size() == 1 &&
+ (stack.elementAt(stack.size()-1) instanceof Form))
+ { return (Form)stack.pop(); }
+ else throw new Exception("Grammar error");
+ return null;
+ }
+
+ /** parses a list of formulae separated by commas
+ */
+ public Context parseFormulae() throws Exception {
+ Token tok;
+ Context erg = new Context();
+ while (!((tok = getNextToken()) instanceof EOI)) {
+ stack.push(tok);
+ reduce();
+ }
+ if (stack.empty()) return erg; // LHS can be empty !!
+ stack.push(new COMMA());
+ for(int i=0;i<stack.size()-1;i=i+2){
+ if (stack.elementAt(i) instanceof Form)
+ { erg.addElement(stack.elementAt(i));
+ } else throw new Exception("Grammar error");
+ if (stack.elementAt(i+1) instanceof COMMA)
+ {} else throw new Exception("Grammar error");
+ }
+ return erg;
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/ProofDisplay.pizza Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,106 @@
+package G4ip;
+
+import pizza.util.Hashtable;
+import java.awt.*;
+import G4ip.Form.*;
+
+
+/** A label with a surrounding box.
+ */
+class MyLabel extends Label {
+ public MyLabel() { super(); }
+ public MyLabel(String s) { super(s); }
+
+ public void paint(Graphics g) {
+ Dimension d = this.size();
+ g.setColor(Color.gray);
+ g.drawRect(0,0,d.width-1,d.height-1);
+ }
+}
+
+
+/** Draws a frame on the screen containing a proof.
+ */
+public class ProofDisplay extends Frame {
+ Button ok;
+ Hashtable<int,Sequent> proof; // contains the indexed sequents
+
+ /** The proof is represented in the hashtable.
+ * @param proof is a hashtable; the structure of the proof (or tree)
+ * is mapped onto a sequence of integers; each integer is a key for
+ * a sequent stored in the hashtable.
+ */
+ public ProofDisplay(Hashtable<int,Sequent> iproof) {
+ super("Proof");
+ ok = new Button("Close");
+ proof = iproof;
+
+ setLayout(new BorderLayout());
+ // SOUTH
+ Panel p = new Panel();
+ p.add(ok);
+ add("South",p);
+
+ //CENTER
+ Panel display = new Panel();
+ printproof(display,1);
+ add("Center", display);
+
+ pack();
+ show();
+ }
+
+ /** Recovers the structure of the proofs from the hashtable representation.
+ */
+ public void printproof(Panel p,int index) {
+ MyLabel l = new MyLabel(proof.get(index).toString());
+ l.setAlignment(MyLabel.CENTER);
+ p.setLayout(new BorderLayout());
+ p.add("South",l);
+ // axiom (do nothing)
+ if ((proof.get(2*index) == null) && (proof.get(2*index+1) == null)) {
+ return;
+ }
+ // rule with a single premise
+ if ((proof.get(2*index) != null) && (proof.get(2*index+1) == null)) {
+ Panel np = new Panel();
+ printproof(np,2*index);
+ p.add("Center",np);
+ return;
+ }
+ // rule with two premises
+ if ((proof.get(2*index) != null) && (proof.get(2*index+1) != null)) {
+ Panel np1 = new Panel();
+ Panel np2 = new Panel();
+ printproof(np1,2*index);
+ printproof(np2,2*index+1);
+ p.add("West",np1);
+ p.add("East",np2);
+ return;
+ }
+
+ }
+
+ /** If either the "Close" or the "Window-destroy" button
+ * is pressed, then close the window.
+ */
+ public boolean handleEvent(Event e) {
+ if (e.id == Event.ACTION_EVENT && e.target == ok) {
+ this.finalize();
+ return true;
+ }
+ if (e.id == Event.WINDOW_DESTROY) {
+ this.finalize();
+ return true;
+ }
+ return false;
+ }
+
+ /** Closes the window.
+ */
+ public void finalize()
+ { this.dispose(); }
+
+}
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Prover.pizza Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,223 @@
+package G4ip;
+
+
+import pizza.util.Hashtable;
+import java.util.Vector;
+import G4ip.Form.*;
+import G4ip.ProofDisplay.*;
+import G4ip.Sequent.*;
+
+
+/** The Gi4p prover.<p>
+ * The prover is a thread in order to suspend the proof search
+ * after one proof is found and to let the user make a choice
+ * of whether to stop or to continue with the proof search.
+ * @author Christian Urban
+ */
+public class Prover extends Thread
+{ ProverApplet parent; // the parent of the prover;
+ boolean once; // if true then at least one proof was found
+ Sequent sequ; // the root sequent to be proved
+ Vector frames; // to record all frames which have been opened
+ int index ;
+ Hashtable<int,Sequent> proof; // keeps a record of the proof
+
+
+ /** The constructor creates a prover which proves a specific sequent.<p>
+ * The parameter parent is for access to the applet buttons.
+ */
+ public Prover(Sequent init_sequ, ProverApplet init_parent) {
+ super("Prover");
+ parent = init_parent;
+ once = false;
+ sequ = new Sequent(init_sequ);
+ frames = new Vector();
+ index = 1;
+ proof = new Hashtable();
+ }
+
+ /** Starts the thread; calls prove and stops the thread when
+ * the proof search is finished.
+ */
+ public void run()
+ { prove(1,sequ,initial_sc);
+ if (once == true) {
+ parent.messages.setText("No more proofs.");
+ parent.messages.repaint();
+ parent.repaint();
+ }
+ else {
+ parent.messages.setText("Not provable.");
+ parent.messages.repaint();
+ parent.repaint();
+ }
+ parent.switch_into_input_mode();
+ this.stop(); // everything is done, stop the thread
+ }
+
+ /** Closes all frames which have been opened.
+ */
+ public void finalize() {
+ for (int i=0; i<frames.size();i++) {
+ if (frames.elementAt != null)
+ { ((ProofDisplay)frames.elementAt(i)).dispose(); }
+ }
+ }
+
+ /** The tactic of the proof search.<p>
+ * Method prove first enumerates all formulae on the LHS
+ * as being the principal formula and attempts to apply left-rules,
+ * subsequently it analyses the goal formula.
+ */
+ public void prove(int index, Sequent is,(() -> void) sc) {
+ Form principal;
+ proof.put(index,new Sequent(is)); // add sequence to proof
+ rightrules(index,is,sc);
+ for (int i=0;i<is.Gamma.size();i++) {
+ principal = (Form)is.Gamma.elementAt(i);
+ is.Gamma.removeElement(principal); // Gamma minus principal formula
+ leftrules(index,principal,is,sc);
+ is.Gamma.insertElementAt(principal,i); // put principal formula
+ } // back into Gamma
+ //rightrules(index,is,sc);
+ proof.remove(index); // remove sequence from proof
+ }
+
+ /** Analyses the goal formula.
+ */
+ public void rightrules(int index, Sequent sequ,(() -> void) sc) {
+ Context Gamma = sequ.Gamma;
+ switch(sequ.G) {
+ /** And-R
+ * Gamma => A Gamma => B
+ * --------------------------
+ * Gamma => A and B
+ */
+ case And(Form A,Form B):
+ prove(2*index,new Sequent(Gamma,A),
+ fun() -> void { prove(2*index+1,new Sequent(Gamma,B),sc); } );
+ break;
+
+ /** Imp-R
+ * Gamma,A => B
+ * -----------------
+ * Gamma => A imp B
+ */
+ case Imp(Form A,Form B):
+ prove(2*index,new Sequent(Gamma.add(A),B),sc); break;
+
+ /** Or-R
+ * Gamma => A Gamma => B
+ * ----------------- or -----------------
+ * Gamma => A or B Gamma => A or B
+ */
+ case Or(Form A,Form B):
+ prove(2*index,new Sequent(Gamma,A),sc);
+ prove(2*index,new Sequent(Gamma,B),sc); break;
+
+ /** Equ-R
+ * Gamma => A -> B Gamma => B -> A
+ * --------------------------------
+ * Gamma => A <-> B
+ */
+ }
+ }
+
+ /** Analyses the principal formula on the LHS.
+ */
+ public void leftrules(int index,Form principal,Sequent sequ,(() -> void) sc){
+ Context Gamma = sequ.Gamma;
+ Form G = sequ.G;
+ switch(principal) {
+ /** false-L
+ * --------------------
+ * false, Gamma => G
+ */
+ case False(): sc(); break;
+
+ /** Axiom
+ * ---------------
+ * Gamma, G => G G being atomic
+ */
+ case Atm(String c):
+ if (G instanceof Atm) {
+ if (((Atm)G).c.compareTo(c) == 0) { sc(); }
+ }
+ break;
+
+ /** And-L
+ * Gamma, A, B => G
+ * --------------------
+ * Gamma, A and B => G
+ */
+
+ case And(Form A, Form B):
+ prove(2*index,new Sequent(Gamma.add(A,B),G),sc); break;
+
+ /** Or-R
+ * Gamma, A => G Gamma, B => G
+ * -------------------------------
+ * Gamma, A or B => G
+ */
+ case Or(Form A, Form B):
+ prove(2*index,new Sequent(Gamma.add(A),G),
+ fun() -> void {prove(2*index+1,new Sequent(Gamma.add(B),G),sc);});
+ break;
+
+ /** Imp-L 2
+ * Gamma, A imp (B imp C) => G
+ * ------------------------------
+ * Gamma, (A and B) imp C => G
+ */
+ case Imp(And(Form A, Form B), Form C):
+ prove(2*index,new Sequent(Gamma.add(Imp(A,Imp(B,C))),G),sc); break;
+
+
+ /** Imp-L 3
+ * Gamma, (A imp C), (B imp C) => G
+ * ----------------------------------
+ * Gamma, (A or B) imp C => G
+ */
+ case Imp(Or(Form A, Form B), Form C):
+ prove(2*index,new Sequent(Gamma.add(Imp(A,C),Imp(B,C)),G),sc); break;
+
+ /** Imp-L 4
+ * Gamma, (B imp C) => (A imp B) Gamma, C => G
+ * ------------------------------------------------
+ * Gamma, (A imp B) imp C => G
+ */
+ case Imp(Imp(Form A, Form B), Form C):
+ prove(2*index,new Sequent(Gamma.add(Imp(B,C)),Imp(A,B)),
+ fun() -> void { prove(2*index+1,new Sequent(Gamma.add(C),G),sc);});
+ break;
+ /** Imp-L 1
+ * Gamma(A), B => G A being atomic
+ * ------------------------ Gamma(A) means:
+ * Gamma(A), A imp B => G Gamma contains A
+ */
+ case Imp(Form A, Form B):
+ if (A instanceof Atm) {
+ if (Gamma.includes(A)) {
+ { prove(2*index,new Sequent(Gamma.add(B),G),sc); }
+ }
+ }
+ break;
+ }
+
+ }
+
+
+ /** The initial success continuation.
+ * Suspends the thread when a proof is found.
+ */
+ public void initial_sc() {
+ once = true;
+ ProofDisplay p = new ProofDisplay(proof);
+ frames.addElement(p); // keep a record for later disposal
+ try { // suspend the proof search,
+ suspend(); } // it might be resumed later on by the user
+ catch(SecurityException sec_exc)
+ { /* this catch is neccessary for Netscape 3.0 (Linux) */ }
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/ProverApplet.html Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,108 @@
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+ <TITLE>G4ip Prover</TITLE>
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#C7C3C7" LINK="#0000EF" VLINK="#51188E" ALINK="#FF0000">
+
+<H2>Prover for G4ip (LJT) </H2>
+
+<A HREF="README">Readme</A>
+
+
+<HR>
+<B>Formulae:</B>
+ F ::= <CODE>false</CODE>
+ | A
+ | F <CODE>&</CODE> F
+ | F <CODE>v</CODE> F
+ | F <CODE>-></CODE> F
+ | F <CODE><-></CODE> F
+ | (F)<BR>
+<B>Sequents:</B> <CODE>=></CODE> F or
+ [F,]* F <CODE>=></CODE> F
+
+<HR>
+<B>Inference Rules:</B>
+<A HREF="G4ip.html">html</A>,
+<A HREF="G4ip.dvi">dvi</A> or
+<A HREF="G4ip.ps">ps</A>.
+
+<HR>
+<B>Start:</B> starts the proof search,
+<B>Clear:</B> clears the text fields,<BR>
+<B>Next:</B> searches for the next proof,
+<B>Stop:</B> stops the proof search.
+
+<HR>
+<APPLET code="G4ip/ProverApplet.class" width=600 height=100>
+<PARAM name="LHS_size" value="22">
+<PARAM name="RHS_size" value="37">
+</APPLET>
+
+
+<HR>
+<B>Provable Examples:</B>
+<TT>
+<DL>
+<DD> => (p v (q v r)) <-> ((p v q) v r)</DD>
+<DD> => (p & (q & r)) <-> ((p & q) & r)</DD>
+<DD> => (p & (q v r)) <-> ((p & q) v (p & r))</DD>
+<DD> => (p v (q & r)) <-> ((p v q) & (p v r))</DD>
+<DD> => (p -> p) -> (p -> p)</DD>
+<DD> => (a -> (b -> c)) -> ((a -> b) -> (a -> c))</DD>
+<DD> => a -> ((a -> b) -> a)</DD>
+<DD> => b -> ((a -> b) -> b)</DD>
+<DD> => (a & b) -> (b & a)</DD>
+<DD> => (a -> (a -> b)) -> (a -> b)</DD>
+<DD> => ((((p -> q) -> p) -> p) -> q) -> q</DD>
+<DD> => (a v (a -> b)) -> (((a -> b) -> a)-> a)</DD>
+<DD> => (a -> (b -> false)) -> (b -> (a -> false))</DD>
+<DD> => ((a v (a -> false))-> false)-> false</DD>
+<DD>a & b, c & d => b & c</DD>
+<DD>(a v (a-> false)) -> false => false</DD>
+</DL>
+</TT>
+
+<B>Non-Provable Examples:</B>
+<TT>
+<DL>
+<DD> => ((a -> b) -> a) -> a</DD>
+<DD> => a v (a -> false)</DD>
+<DD> => (a & b v (((( a-> flase) -> false) -> q) v (b -> q)) -> q) -> q</DD>
+</DL>
+</TT>
+
+
+<A HREF="fun.html">Some advanced examples</A>
+
+<HR>
+<B>Source Code:</B>
+<A HREF="Formulae.pizza">Formulae</A>,
+<A HREF="Contexts.pizza">Contexts</A>,
+<A HREF="Sequents.pizza">Sequents</A>,
+<A HREF="ProofDisplay.pizza">ProofDisplay</A>,
+<A HREF="Prover.pizza">Prover</A>,
+<A HREF="Parser.pizza">Parser</A>,
+<A HREF="ProverApplet.pizza">Applet</A><BR>
+
+<HR>
+<B>Lambda Prolog Version:</B> The programm
+<A HREF="G4ip.mod">G4ip.mod</A> can be executed using
+<A HREF="http://www.cis.upenn.edu/~dale/lProlog/terzo/index.html">Terzo</A>
+Another implementation of G4ip by Joshua Hodas and Dale Miller written in
+<A HREF="http://www.cs.hmc.edu/~hodas/research/lolli/">Lolli</a> can be found
+<A HREF="ftp://ftp.cse.psu.edu/pub/dale/ic94-code/index.html">here</A>.
+
+
+<HR>
+<ADDRESS>
+<A HREF="mailto:Christian.Urban@cl.cam.ac.uk">Christian Urban</A></ADDRESS>
+
+
+<P><!-- Created: Tue Mar 4 00:23:25 GMT 1997 -->
+<!-- hhmts start -->
+Last modified: Sun May 10 18:18:13 GMT 1998
+<!-- hhmts end -->
+</BODY>
+</HTML>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/ProverApplet.pizza Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,150 @@
+package G4ip;
+
+import java.applet.*;
+import java.awt.*;
+import G4ip.Sequent.*;
+import G4ip.Prover.*;
+import G4ip.Parser.*;
+
+/** The applet for the prover.
+ * @author Christian Urban
+ */
+public class ProverApplet extends Applet {
+ Prover prover;
+ Parser parser;
+
+ Button start;
+ Button clear;
+ Button next;
+ Button stop;
+ TextField lhs_text; // place for the program formulae
+ TextField rhs_text; // place for the goal formula
+ /** A field for various messages (e.g. error messages).
+ */
+ public Label messages; // to be verbose
+
+ public void init() {
+ setLayout(new BorderLayout());
+ // NORTH
+ Panel textfields = new Panel();
+ add("North", textfields);
+ // the parameters LHS_size and RHS_size are given in the html-file
+ int LHS_size = Integer.parseInt(this.getParameter("LHS_size"));
+ int RHS_size = Integer.parseInt(this.getParameter("RHS_size"));
+ lhs_text = new TextField(LHS_size); // program textfield
+ rhs_text = new TextField(RHS_size); // goal textfield
+ Label separation = new Label("=>"); // for separation
+
+ if (LHS_size > 0) { // if someone prefears only single side sequents
+ textfields.add(lhs_text); }
+ textfields.add(separation);
+ textfields.add(rhs_text);
+
+ // CENTER
+ Panel buttonfield = new Panel();
+ add("Center", buttonfield);
+ start = new Button("Start");
+ clear = new Button("Clear");
+ next = new Button("Next");
+ stop = new Button("Stop");
+
+ switch_into_input_mode(); // start in input mode
+ buttonfield.add(start);
+ buttonfield.add(clear);
+ buttonfield.add(next);
+ buttonfield.add(stop);
+
+ // SOUTH
+ messages = new Label(""); // for any kind of message
+ messages.setAlignment(Label.CENTER);
+ add("South",messages);
+ }
+
+ /** When start is pressed;
+ * start and clear button are disabled;
+ * next and stop button are enabled.
+ */
+ public void switch_into_prove_mode() {
+ start.disable(); next.enable();
+ clear.disable(); stop.enable();
+ repaint();
+ }
+
+ /** When start is pressed
+ * and (hopefully) when prover finishes.
+ */
+ public void switch_into_input_mode() {
+ start.enable(); next.disable();
+ clear.enable(); stop.disable();
+ repaint();
+ }
+
+ /** Initiates the parse and prove process.
+ */
+ void initiate_proving() {
+ Sequent sequ;
+ messages.setText("");
+ messages.repaint();
+ repaint();
+ Parser rhs_parser = new Parser(rhs_text.getText());
+ Parser lhs_parser = new Parser(lhs_text.getText());
+ try { // try to parse the input
+ sequ = new Sequent(lhs_parser.parseFormulae(),
+ rhs_parser.parseFormula());
+ }
+ catch (Exception exc) { // there was a parser exception
+ messages.setText(exc.getMessage());
+ messages.repaint();
+ repaint();
+ return; // in case there was an exception
+ } // don't run the following code
+ System.out.println(sequ.G.internalString());
+ switch_into_prove_mode();
+ prover = new Prover(sequ,this);
+ prover.start();
+ }
+
+ /** Forces the prover to dispose all open frames.
+ */
+ public void destroy() {
+ if (prover != null && prover.isAlive()) {
+ prover.stop();
+ prover.finalize();
+ }
+ }
+
+
+ /** The actions for the buttons:
+ * this bit of code would be different in Java 1.1
+ */
+ public boolean action(Event e, Object arg) {
+ // clear button has been pressed
+ if (e.target == clear) {
+ messages.setText("");
+ lhs_text.setText("");
+ rhs_text.setText("");
+ messages.repaint();
+ repaint();
+ }
+ // start button has been pressed
+ if (e.target == start) {
+ initiate_proving();
+ return true;
+ }
+ // stop button has been pressed
+ if (e.target == stop) {
+ switch_into_input_mode();
+ if (prover != null && prover.isAlive()) { prover.stop(); }
+ return true;
+ }
+ // next button has been pressed
+ if (e.target == next) {
+ if (prover != null && prover.isAlive()) { prover.resume();}
+ return true;
+ }
+ return false;
+ }
+
+}
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/ProverAppletJar.html Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,110 @@
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+ <TITLE>G4ip Prover</TITLE>
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#C7C3C7" LINK="#0000EF" VLINK="#51188E" ALINK="#FF0000">
+
+<H2>Prover for G4ip (LJT) </H2>
+
+<A HREF="README">Readme</A>
+
+
+<HR>
+<B>Formulae:</B>
+ F ::= <CODE>false</CODE>
+ | A
+ | F <CODE>&</CODE> F
+ | F <CODE>v</CODE> F
+ | F <CODE>-></CODE> F
+ | F <CODE><-></CODE> F
+ | (F)<BR>
+<B>Sequents:</B> <CODE>=></CODE> F or
+ [F,]* F <CODE>=></CODE> F
+
+<HR>
+<B>Inference Rules:</B>
+<A HREF="G4ip.html">html</A>,
+<A HREF="G4ip.dvi">dvi</A> or
+<A HREF="G4ip.ps">ps</A>.
+
+<HR>
+<B>Start:</B> starts the proof search,
+<B>Clear:</B> clears the text fields,<BR>
+<B>Next:</B> searches for the next proof,
+<B>Stop:</B> stops the proof search.
+
+<HR>
+<!-- APPLET code="G4ip/ProverApplet.class" width=600 height=100 -->
+<APPLET code="G4ip/ProverApplet.class" archive="G4ip/ProverApplet.jar" width=600 height=100>
+<PARAM name="LHS_size" value="22">
+<PARAM name="RHS_size" value="37">
+</APPLET>
+
+
+<HR>
+<B>Provable Examples:</B>
+<TT>
+<DL>
+<DD> => (p v (q v r)) <-> ((p v q) v r)</DD>
+<DD> => (p & (q & r)) <-> ((p & q) & r)</DD>
+<DD> => (p & (q v r)) <-> ((p & q) v (p & r))</DD>
+<DD> => (p v (q & r)) <-> ((p v q) & (p v r))</DD>
+<DD> => (p -> p) -> (p -> p)</DD>
+<DD> => (a -> (b -> c)) -> ((a -> b) -> (a -> c))</DD>
+<DD> => a -> ((a -> b) -> a)</DD>
+<DD> => b -> ((a -> b) -> b)</DD>
+<DD> => (a & b) -> (b & a)</DD>
+<DD> => (a -> (a -> b)) -> (a -> b)</DD>
+<DD> => ((((p -> q) -> p) -> p) -> q) -> q</DD>
+<DD> => (a v (a -> b)) -> (((a -> b) -> a)-> a)</DD>
+<DD> => (a -> (b -> false)) -> (b -> (a -> false))</DD>
+<DD> => ((a v (a -> false))-> false)-> false</DD>
+<DD>a & b, c & d => b & c</DD>
+<DD>(a v (a-> false)) -> false => false</DD>
+</DL>
+</TT>
+
+<B>Non-Provable Examples:</B>
+<TT>
+<DL>
+<DD> => ((a -> b) -> a) -> a</DD>
+<DD> => a v (a -> false)</DD>
+<DD> => (a & b v (((( a-> flase) -> false) -> q) v (b -> q)) -> q) -> q</DD>
+</DL>
+</TT>
+
+
+<A HREF="fun.html">Some advanced examples</A>
+
+<HR>
+<B>Source Code:</B>
+<A HREF="Formulae.pizza">Formulae</A>,
+<A HREF="Contexts.pizza">Contexts</A>,
+<A HREF="Sequents.pizza">Sequents</A>,
+<A HREF="ProofDisplay.pizza">ProofDisplay</A>,
+<A HREF="Prover.pizza">Prover</A>,
+<A HREF="Parser.pizza">Parser</A>,
+<A HREF="ProverApplet.pizza">Applet</A><BR>
+
+
+<HR>
+<B>Lambda Prolog Version:</B> The programm
+<A HREF="G4ip.mod">G4ip.mod</A> can be executed using
+<A HREF="http://www.cis.upenn.edu/~dale/lProlog/terzo/index.html">Terzo</A>
+Another implementation of G4ip by Joshua Hodas and Dale Miller written in
+<A HREF="http://www.cs.hmc.edu/~hodas/research/lolli/">Lolli</a> can be found
+<A HREF="ftp://ftp.cse.psu.edu/pub/dale/ic94-code/index.html">here</A>.
+
+
+<HR>
+<ADDRESS>
+<A HREF="mailto:Christian.Urban@cl.cam.ac.uk">Christian Urban</A></ADDRESS>
+
+
+<P><!-- Created: Tue Mar 4 00:23:25 GMT 1997 -->
+<!-- hhmts start -->
+Last modified: Sun May 10 18:18:28 GMT 1998
+<!-- hhmts end -->
+</BODY>
+</HTML>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/README Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,76 @@
+
+Write once, run everywhere
+==========================
+ Good idea, but still wishful thinking.
+
+ From my experience I would like to add:
+ "Write once, run everywhere, show the same behaviour!"
+
+
+Known bugs and failures:
+========================
+
+- Cut-and-paste
+ I have not included any code for cut-and-paste. However,
+ cut-and-paste should work fine under Unix. Cut-and-Paste
+ also works in MS IE 3.0 under Mickeysoft Windows. For most of
+ the other platforms (MacOS etc.) and browsers (Netscape etc.)
+ cut-and-paste does not work.
+
+- Security exception
+ Various versions of Netscape throw a security exception when
+ I try to suspend the thread of the proof search. I have caught
+ this exception, but my literature does not tell me how to resume
+ safely from this exception. In effect the proof search enumerates
+ all possible proofs for a sequent and subsequently stops. The user
+ has no control over how many proofs are shown (the corresponding
+ windows might appear over each other). This unintended behaviour
+ has been encountered in:
+
+ - Netscape Navigator 3.0 Gold under MS Windows'45
+ - Netscape Navigator 3.0 under MacOS
+ - Netscape Communicator 4.0 under MacOS
+ - Netscape Navigator 3.01 Gold under Linux
+ (But here a "catch" of this exception and a "do nothing"
+ helps. God knows why.)
+ - possible others
+
+- Boxes around the sequents in proofs
+ I have modified the "Label" class such that the "MyLabel" class
+ has a surrounding box. This improves the readability of the proofs.
+ However, this feature works ONLY under Unix. The boxes do not
+ appear in MS Windows and MacOS (reason unknown).
+
+- Flickering messages
+ The applet prints some messages ("Grammar error", "No more proofs",
+ "Not provable", etc.) in a field below the control buttons.
+ In some browsers the messages only flicker for a short time.
+ Other browsers show the messages correctly (reason unknown).
+
+
+The applet has been tested under (but see restrictions and bugs):
+=================================================================
+
+Linux:
+ Netscape Navigator 3.01 Gold
+ Netscape Communicator 4.03, 4.04, 4.07
+ HotJava 1.1 beta2 (Linux-port)
+ SUN's appletviewer for JDK 1.1.3
+
+Win'95:
+ Netscape Navigator 3.0 Gold
+ Netscape Communicator 4.01a
+ MS Internet Explorer 3.0.2
+ MS Internet Explorer 4.0
+
+MacOS:
+ Netscape Navigator 3.0
+ Netscape Communicator 4.0
+ MS Internet Explorer 3.0.1b1 (PowerPC)
+
+
+Any comments on success or failure for other
+environments and platforms are appreciated.
+
+Christian.Urban@cl.cam.ac.uk
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/Sequents.pizza Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,29 @@
+package G4ip;
+
+import G4ip.Form.*;
+
+/** An intuitionistic sequent of the form
+ * "Gamma => G".
+ */
+public class Sequent {
+ /** Goal formula on the right-hand side. */
+ public Form G;
+ /** Context (multiset of formulae) on the left-hand side. */
+ public Context Gamma;
+
+ public Sequent(Context init_Gamma, Form init_G) {
+ G = init_G;
+ Gamma = new Context(init_Gamma);
+ }
+
+ public Sequent(Sequent sequ) {
+ G = sequ.G;
+ Gamma = new Context(sequ.Gamma);
+ }
+
+ /** Prints a sequent. */
+ public String toString() {
+ String s = Gamma.makeString() + " => " + G.toString();
+ return s;
+ }
+}
Binary file Prover/Tableaux98.dvi.gz has changed
Binary file Prover/Tableaux98.ps.gz has changed
Binary file Prover/execution.gif has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/fun.html Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,32 @@
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+ <TITLE>Advanced Examples</TITLE>
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#C7C3C7" LINK="#0000EF" VLINK="#51188E" ALINK="#FF0000">
+
+<H2>Some Advanced Examples </H2>
+
+Be cautious: some of the following formulae have big proofs!
+
+<HR>
+<TT>
+<DL>
+<DD> => (((a & b) v (a->f) v (b->f))->f)->f</DD>
+<DD> => (a & b & c v ((a->f) v (b->f) v (c->f))->f)->f</DD>
+<DD> => d&(b->b->a)&(c->c->b)&(d->d->c)->a</DD>
+</DL>
+</TT>
+
+
+<HR>
+<ADDRESS>
+<A HREF="mailto:Christian.Urban@cl.cam.ac.uk">Christian Urban</A></ADDRESS>
+
+
+<P><!-- Created: Tue Mar 4 00:23:25 GMT 1997 -->
+<!-- hhmts start -->
+Last modified: Sun Nov 23 20:20:31 GMT 1997
+<!-- hhmts end -->
+</BODY>
+</HTML>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Prover/index.html Thu Mar 15 10:07:28 2012 +0000
@@ -0,0 +1,384 @@
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+ <TITLE>G4ip</TITLE>
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#C7C3C7" LINK="#0000EF" VLINK="#51188E" ALINK="#FF0000">
+
+<H2>An Implementation of G4ip in Pizza</H2>
+
+<FONT COLOR="#800000"><B>Warning:</B></FONT>
+This page is now rather old! While you might still be interested
+in the algorithms, Robert Macdonald reported that Pizza and the current Java
+implementation (version 1.3.0) do not work together. This means you need to
+install an older Java version if you want to recompile the files given below.
+I am happy to answer all question concerning the prover, but be aware that
+currently for any kind of Java stuff I am using MLJ, which as of writing
+this note has not yet been made available for the general audience (maybe
+in the future also its OCaml equivalent). So I am not very fluent in Pizza
+anymore. <B>Update</B> Pizza development is continued and starting from version
+<A HREF="http://pizzacompiler.sourceforge.net/">0.40</A> it should work
+with recent Java implementations.<P>
+
+
+Jump to the <A HREF="#Implementation">implementation.</a>
+
+
+<H4>Introduction</H4>
+
+
+A convenient representation of intuitionistic logic is Getzen's
+sequent calculus LJ (also G1i). A sequent of LJ can be proved
+by applying inference rules until one reaches axioms, or can make no further
+progress in which case one must backtrack or even abandon the search.
+Unfortunately an interpreter for LJ using this depth-first strategy cannot
+guarantee termination of the proof search. Several modifications can be
+made to LJ's inference rules without loss of soundness and completeness.
+As result an efficient depth-first proof search can be designed for the
+propositional fragment of intuitionistic logic. The name G4ip has been
+assigned to the corresponding calculus in
+<A HREF="#TroelstraSchwichtenberg96">[Troelstra and Schwichtenberg, 1996]</a>.
+This calculus is also known as LJT which has been studied thoroughly
+in <A HREF="#Dyckhoff92">[Dyckhoff, 1992]</a>. The inference rules of
+G4ip are given <A HREF="G4ip.html">here</A>.<P>
+
+It is not very complicated to implement an interpreter for G4ip using a logic
+programming language (backtracking is directly supported within the language).
+Our first implementation is written in the logic programming language
+<A HREF="http://www.cis.upenn.edu/~dale/lProlog/terzo/index.html">Lambda Prolog</A>
+and can be found <A HREF="G4ip.mod">here</A>. Another implementation by
+Hodas and Miller written in <A HREF="http://www.cs.hmc.edu/~hodas/research/lolli/">Lolli</a>
+can be found <A HREF="ftp://ftp.cse.psu.edu/pub/dale/ic94-code/index.html">here</A>
+(see <A HREF="#HodasMiller94">[Hodas and Miller, 1994]</a>). These are simple and
+straightforward implementations of G4ip's rules. On the other hand it seems
+that imperative languages need a rather high overhead of code when implementing
+a logic calculus. For example choice points are usually implemented with stacks.
+We shall demonstrate the implementation technique of success
+continuations which provides an equally simple method for implementing logic calculi
+in imperative languages. This technique is not new: it has been introduced in
+<A HREF="#Carlsson84">[Carlsson, 1984]</a>. This paper presents a rather technical
+implementation of Prolog in LISP. Later an excellent paper,
+<A HREF="#ElliotPfenning91">[Elliot and Pfenning, 1991]</a>, appeared which
+describes a full-fledged implementation of Lambda Prolog in SML.
+We demonstrate the technique of success continuations for G4ip in
+<A HREF="http://www.cis.unisa.edu.au/~pizza/">Pizza</A>.<P>
+
+Pizza is an object-oriented programming language and an attractive extension of
+<A HREF="http://www.javasoft.com/">Java</A>. Although Pizza is a superset of
+Java, Pizza programs can be translated into Java or compiled into ordinary
+Java Byte Code (see <A HREF="#OderskyWadler97">[Odersky and Wadler, 1997]</a>
+for a technical introduction to Pizza). We make use of the following two new
+features of Pizza:
+<UL>
+<LI> higher-order functions, i.e. functions may be passed as parameters or returned
+from methods,
+<LI> class cases and pattern matching: this allows much simpler and more readable code.
+</UL>
+
+These features are not directly present in Java, but Pizza makes them accessible by
+translating them into Java. Pizza provides the programmer with the same
+extensive libraries for graphic and network applications as Java. The higher-order
+functions are essential for the technique of success continuations. The success
+continuations are functions passed as parameters or returned as values.<BR>
+
+
+<H4>The Representation of Formulae and Sequents</H4>
+
+Amongst the new language features of Pizza are class cases and pattern
+matching, which provide a very pleasant syntax for algebraic data types. The
+formulae of G4ip are specified by the following grammar:<P>
+
+<CODE>F ::= false | A | F & F | F v F | F -> F</CODE><P>
+
+
+The class cases allow a straightforward implementation of this specification;
+it is analogous to the SML implementation of
+<A HREF="http://www.cis.upenn.edu/~dale/lProlog/terzo/index.html">Lambda Prolog's</A>
+formulae in <A HREF="#ElliotPfenning91">[Elliot and Pfenning, 1991]</A>. The class
+of formulae for G4ip is given below:<P>
+
+<TT>
+<DL>
+<DD>public class Form { </DD>
+<DD> case False(); </DD>
+<DD> case Atm(String c); </DD>
+<DD> case And(Form c1,Form c2); </DD>
+<DD> case Or(Form c1,Form c2); </DD>
+<DD> case Imp(Form c1,Form c2); </DD>
+<DD>} </DD>
+</DL>
+</TT>
+
+Two examples that illustrate the use of the representation are as follows:<P>
+
+
+<CODE> p -> p </CODE>
+is represented as <CODE> Imp(Atm("p"),Atm("p"))</CODE><BR>
+<CODE>a v (a -> false) </CODE> is represented as <CODE> Or(Atm("a"),Imp(Atm("a"),False()))</CODE><P>
+
+The class cases of Pizza also support an implementation of formulae specified
+by a mutually recursive grammar. This is required, for example, when
+implementing hereditary Harrop formulae.<P>
+
+The sequents of G4ip, which have the form <CODE>Gamma=>G</CODE>, are represented
+by means of the class below. The left-hand side of each sequent is specified by a multiset
+of formulae. Therefore, we do not need to worry about the order in which the
+formulae occur.<P>
+
+<TT>
+<DL>
+<DD>public class Sequent { </DD>
+<DD> Form G; </DD>
+<DD> Context Gamma; </DD>
+<DD> public Sequent(Context _Gamma, Form _G) {...};</DD>
+<DD>} </DD>
+</DL>
+</TT>
+
+We have a constructor for generating new sequents during proof search.
+<CODE>Context</CODE> is a class which represents multisets; it is a simple
+extension of the class <CODe>Vector</CODE> available in the Java libraries.
+This class provides methods for adding elements to a multiset (<CODE>add</CODE>),
+taking out elements from a multiset (<CODE>removeElement</CODE>) and testing
+the membership of an element in a multiset (<CODE>includes</CODE>).
+
+
+<H4>The Technique of Success Continuations</H4>
+
+We have to distinguish between the concepts of proof obligations (which must
+be proved) and choice points (which can be tried out to construct a proof).
+The first argument of the method <CODE>prove</CODE> is the sequent being
+proved; the second argument is an anonymous function. The function <CODE>prove</CODE> is now
+of the form <CODE>prove(sequent,sc)</CODE>. Somewhat simplified the
+first argument is the leftmost premise and the second argument <CODE>sc</CODE>,
+the success continuation, represents the other proof obligations. In case we
+succeed in proving the first premise we then can attempt to prove the other
+premises. The technique of success continuations will be explained using the following
+proof (each sequent is marked with a number):<P>
+
+<UL><img src="proof.gif" width=337 height=112></UL>
+<BR><P>
+
+The inference rules fall into three groups:
+
+<UL>
+<LI> inference rules with a single premise (e.g. ->_R, &_L),
+<LI> inference rules with two premises (e.g. v_L) and
+<LI> inference rules without premises (e.g. Axiom).
+</UL>
+
+The following picture shows the order in which the sequents are being proved.
+
+<UL><img src="execution.gif" width=358 height=191></UL>
+<BR><P>
+
+Suppose we have called <CODE>prove</CODE> with a sequent <B>s</B> and a
+success continuation <B>is</B>. The inference rules of the first
+group manipulate <B>s</B> obtaining <B>s'</B> and call <CODE>prove</CODE>
+again with the new sequent <B>s'</B> and the current success continuation
+(Steps 1-2, 3-4 and 5-6). The inference rules
+of the second group have two premises, <B>s1</B> and <B>s2</B>.
+These rules call <CODE>prove</CODE> with <B>s1</B> and a new success
+continuation <CODE>prove(s2,is)</CODE> (Step 2-3).
+The third group of inference rules only invoke the success continuation
+if the rule was applicable (Steps 4-5 and 6-7).<P>
+
+
+We are going to give a detailed description of the code for the rules: &_L,
+->_R, v_Ri, v_L and Axiom. The function <CODE>prove</CODE> receives as arguments
+a sequent <CODE>Sequent(Gamma,G)</CODE> and a success continuation
+<CODE>sc</CODE>. It enumerates all formulae as being principal and
+two switch statements select a corresponding case depending on the form
+and the occurrence of the principal formula.<P>
+
+The &_L rule is in the first group; it modifies the sequent being proved and calls
+<CODE>prove</CODE> again with the current success continuation sc. The code is as
+follows (<CODE>Gamma</CODE> stands for the set of formulae on the left-hand
+side of a sequent excluding the principal formula; <CODE>G</CODE> stands
+for the goal formula of a sequent; <CODE>B</CODE> and <CODE>C</CODE> stand
+for the two components of the principal formula).<P>
+
+<TT>
+<DL>
+<DD>case And(Form B, Form C):</DD>
+<DD> prove(new Sequent(Gamma.add(B,C),G),sc); break;</DD>
+</DL>
+</TT>
+
+The code for the ->_R rule is similar:<P>
+
+<TT>
+<DL>
+<DD>case Imp(Form B, Form C):</DD>
+<DD> prove(new Sequent(Gamma.add(A),B),sc); break;</DD>
+</DL>
+</TT>
+
+The v_Ri rule is an exception in the first group. It breaks up a goal
+formula of the form <CODE>B1 v B2</CODE> and proceeds with one of its component.
+Since we do not know in advance which component leads to a successful proof we have
+to try both. Therefore this rule acts as a choice point, which is encoded by a
+recursive call of <CODE>prove</CODE> for each case.
+
+<TT>
+<DL>
+<DD>case Or(Form B1,Form B2):</DD>
+<DD> prove(new Sequent(Gamma,B1),sc);</DD>
+<DD> prove(new Sequent(Gamma,B2),sc); break;</DD>
+</DL>
+</TT>
+
+The v_L rule falls into the second group where the current success
+continuation, sc, is modified. It calls <CODE>prove</CODE> with the first premise,
+<CODE>B,Gamma=>G</CODE>, and wraps up the success continuation with the
+new proof obligation, <CODE>C,Gamma=>G</CODE>. The construction
+<CODE>fun()->void {...}</CODE> defines an anonymous function: the new
+success continuation. In case the sequent <CODE>B,Gamma=>G</CODE> can be
+proved, this function is invoked.
+
+<TT>
+<DL>
+<DD>case Or(Form B,Form C):</DD>
+<DD> prove(new Sequent(Gamma.add(B),G),</DD>
+<DD>
+ fun()->void {prove(new Sequent(Gamma.add(C),G),sc);}</DD>
+<DD> ); break</DD>
+</DL>
+</TT>
+
+The Axiom rule falls into the third group. It first checks if the
+principal formula (which is an atom) matches with the goal formula and
+then invokes the success continuation sc in order to prove all remaining
+proof obligations.
+
+<TT>
+<DL>
+<DD>case Atm(String c):</DD>
+<DD> if (G instanceof Atm) { </DD>
+<DD> if (G.c.compareTo(c) == 0) { sc(); }</DD>
+<DD> } break;</DD>
+</DL>
+</TT>
+
+The proof search is started with an initial success continuation <B>is</B>.
+This initial success continuation is invoked when a proof has been found.
+In this case we want to give some response to the user, an
+example for the initial success continuation could be as follows:
+
+<TT>
+<DL>
+<DD> public void initial_sc() { System.out.println("Provable!"); } </DD>
+</DL>
+</TT>
+
+
+Suppose we attempt to start the proof search with <CODE>prove(p,p => p,is)</CODE>.
+We would find that the prover responds twice with <CODE>"Provable!"</CODE>, because
+it finds two proofs. In our implementation this problem is avoided by encoding
+the proof search as a thread. Whenever a proof is found, the initial success
+continuation displays the proof and suspends the thread. The user can
+decide to resume with the proof search or abandon the search.
+
+
+<H4>Conclusion</H4>
+
+The implementation cannot be considered as optimal in terms of speed.
+A much more efficient algorithm for G4ip (but less clear) has been
+implemented by Dyckhoff in Prolog. Similar ideas can be encoded in our
+Pizza implementation; but our point was not the efficiency but the clarity
+of the implementation using success continuations.
+The technique is applicable elsewhere whenever backtracking is required. We
+compared the code of our implementation with an implementation in
+<A HREF="http://www.cis.upenn.edu/~dale/lProlog/terzo/index.html">Lambda Prolog</A>:
+the ratio of code is approximately 2 to 1.
+(see <A HREF="G4ip.mod">LambdaProlog code</A> and
+<A HREF="minimal/MinProver.pizza">Pizza code</A>).
+This result is partly due to the fact that we had to implement a class for
+multisets. In a future version of Java, we could have accessed a package
+in the library. The technique of success continuation can also be applied
+to a first-order calculus as shown in <A HREF="#ElliotPfenning91">[Elliot and Pfenning, 1991]</a>,
+but the required mechanism of substitution needs to be implemented separately.
+However, we think the technique of success continuations provides a remarkable
+simple implementation for logic calculi.<P>
+
+We had to make some compromises in order to support as many platforms
+as possible. This should change with the release of new browsers and a stable
+Java-specification (resp. Pizza-specification).<P>
+
+A paper about the implementation appeared in the LNAI series No 1397,
+Automated Reasoning with Analytic Tableaux and Related Methods,
+ed. Harry de Swart, International Conference Tableaux'98 in Oisterwijk,
+The Netherlands. The title is: Implementation of Proof Search in
+the Imperative Programming Language Pizza (pp. 313-319). The paper can be
+found here: <A HREF="Tableaux98.dvi.gz">DVI</A>, <A HREF="Tableaux98.ps.gz">Postscript</A>
+(© Springer-Verlag <A HREF="http://www.springer.de/comp/lncs/index.html">LNCS</A>).<P>
+
+
+<B>Acknowledgements:</B> I am very grateful for Dr Roy Dyckhoff's constant
+encouragement and many comments on my work. I thank Dr Gavin Bierman who
+helped me to test the prover applet.
+
+<HR>
+<A NAME="Implementation"></A><H4>Implementation</H4>
+
+<A HREF="README">Readme</A><p>
+
+<A HREF="ProverApplet.html"><B>Prover Applet</B></A><BR>
+<A HREF="ProverAppletJar.html"><B>Jar Version</B></A>
+(slightly faster, but requires Netscape 4 or MS Explorer 4).<P>
+
+
+<HR>
+<B>References</B>
+<UL>
+<LI> <A NAME="Carlsson84"></A>
+ [Carlsson, 1984]<BR>
+ M. Carlsson, On Implementing Prolog in Functional Programming,
+ New Generation Computing, pp 347-359.
+<LI> <A NAME="Dyckhoff92"></A>
+ [Dyckhoff, 1992]<BR>
+ <A HREF="http://www-theory.dcs.st-and.ac.uk/~rd/">R. Dyckhoff</A>,
+ Contraction-Free Sequent Calculi for Intuitionistic Logic,
+ Journal of Symbolic Logic 57(3), pp 795-807.
+<LI> <A NAME="ElliotPfenning91"></A>
+ [Elliot and Pfenning, 1991]<BR>
+ C. Elliot,
+ <A HREF="http://foxnet.cs.cmu.edu/people/fp/homepage.html">F. Pfenning</A>,
+ A Semi-Functional Implementation of a Higher-Order Programming Language,
+ In Peter Lee, editor, Topics in Advanced Language Implementation, MIT Press,
+ pp 289-352.
+ <A HREF="http://www.cs.cmu.edu/~fp/papers/elpsml-paper.tar.gz">Available electronically</a>.
+<LI> <A NAME="HodasMiller94"></A>
+ [Hodas and Miller, 1994]<BR>
+ <A HREF="http://www.cs.hmc.edu/~hodas/">J. Hodas</A>,
+ <A HREF="http://www.cse.psu.edu/~dale/">D. Miller</A>,
+ Logic Programming in a Fragment of Intuitionistic Linear Logic,
+ Information and Computation 110(2), pp 327-365.
+ <A HREF="ftp://ftp.cse.psu.edu/pub/dale/ic94.ps.Z">Available electronically</a>.
+<LI> <A NAME="OderskyWadler97"></A>
+ [Odersky and Wadler, 1997]<BR>
+ <A HREF="http://www.cis.unisa.edu.au/~cismxo">M. Odersky</A>,
+ <A HREF="http://cm.bell-labs.com/cm/cs/who/wadler/">P. Wadler</A>,
+ Pizza into Java: Translating Theory into Practice,
+ In Proceedings of the 24th ACM Symposium on Principles of Programming Languages.
+ <A HREF="http://www.cis.unisa.edu.au/~cismxo/papers/popl97.dvi.gz">Available electronically</a>.
+<LI> <A NAME="TroelstraSchwichtenberg96"></A>
+ [Troelstra and Schwichtenberg, 1996]<BR>
+ <A HREF="http://turing.wins.uva.nl/~anne/">A. Troelstra</A>,
+ <A HREF="http://www.mathematik.uni-muenchen.de/~gadmin6/professoren/schwichtenberg">H. Schwichtenberg</A>,
+ Basic Proof Theory, Cambridge Tracts in Theoretical Computer Science,
+ Cambridge University Press.
+</UL>
+
+
+<HR>
+<ADDRESS>
+<A HREF="mailto:Christian.Urban@cl.cam.ac.uk">Christian Urban</A></ADDRESS>
+
+
+<P><!-- Created: Tue Mar 4 00:23:25 GMT 1997 -->
+<!-- hhmts start -->
+Last modified: Sun Sep 23 12:04:47 BST 2001
+<!-- hhmts end -->
+</BODY>
+</HTML>
Binary file Prover/proof.gif has changed