added phd and prover
authorChristian Urban <urbanc@in.tum.de>
Thu, 15 Mar 2012 10:07:28 +0000
changeset 96 907b1fff5637
parent 95 345dd18f020e
child 97 3a2a47f967d4
added phd and prover
PhD/index.html
PhD/phd-1.jpg
PhD/phd-2.jpg
PhD/phd-3.jpg
Prover/Contexts.pizza
Prover/Doc/G4ip.Context.html
Prover/Doc/G4ip.Form.html
Prover/Doc/G4ip.Parser.html
Prover/Doc/G4ip.html
Prover/Doc/p-images/.HSancillary
Prover/Doc/p-images/.svn/entries
Prover/Doc/p-images/.svn/prop-base/.HSancillary.svn-base
Prover/Doc/p-images/.svn/prop-base/blue-ball-small.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/blue-ball.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/class-index.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/constructor-index.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/constructors.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/error-index.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/exception-index.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/green-ball-small.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/green-ball.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/innerclass-index.html.svn-base
Prover/Doc/p-images/.svn/prop-base/innerclasses.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/interface-index.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/magenta-ball-small.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/magenta-ball.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/method-index.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/methods.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/package-index.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/red-ball-small.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/red-ball.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/sq-blue.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/sql-blue.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/variable-index.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/variables.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/yellow-ball-small.gif.svn-base
Prover/Doc/p-images/.svn/prop-base/yellow-ball.gif.svn-base
Prover/Doc/p-images/.svn/text-base/.HSancillary.svn-base
Prover/Doc/p-images/.svn/text-base/blue-ball-small.gif.svn-base
Prover/Doc/p-images/.svn/text-base/blue-ball.gif.svn-base
Prover/Doc/p-images/.svn/text-base/class-index.gif.svn-base
Prover/Doc/p-images/.svn/text-base/constructor-index.gif.svn-base
Prover/Doc/p-images/.svn/text-base/constructors.gif.svn-base
Prover/Doc/p-images/.svn/text-base/error-index.gif.svn-base
Prover/Doc/p-images/.svn/text-base/exception-index.gif.svn-base
Prover/Doc/p-images/.svn/text-base/green-ball-small.gif.svn-base
Prover/Doc/p-images/.svn/text-base/green-ball.gif.svn-base
Prover/Doc/p-images/.svn/text-base/innerclass-index.html.svn-base
Prover/Doc/p-images/.svn/text-base/innerclasses.gif.svn-base
Prover/Doc/p-images/.svn/text-base/interface-index.gif.svn-base
Prover/Doc/p-images/.svn/text-base/magenta-ball-small.gif.svn-base
Prover/Doc/p-images/.svn/text-base/magenta-ball.gif.svn-base
Prover/Doc/p-images/.svn/text-base/method-index.gif.svn-base
Prover/Doc/p-images/.svn/text-base/methods.gif.svn-base
Prover/Doc/p-images/.svn/text-base/package-index.gif.svn-base
Prover/Doc/p-images/.svn/text-base/red-ball-small.gif.svn-base
Prover/Doc/p-images/.svn/text-base/red-ball.gif.svn-base
Prover/Doc/p-images/.svn/text-base/sq-blue.gif.svn-base
Prover/Doc/p-images/.svn/text-base/sql-blue.gif.svn-base
Prover/Doc/p-images/.svn/text-base/variable-index.gif.svn-base
Prover/Doc/p-images/.svn/text-base/variables.gif.svn-base
Prover/Doc/p-images/.svn/text-base/yellow-ball-small.gif.svn-base
Prover/Doc/p-images/.svn/text-base/yellow-ball.gif.svn-base
Prover/Doc/p-images/blue-ball-small.gif
Prover/Doc/p-images/blue-ball.gif
Prover/Doc/p-images/class-index.gif
Prover/Doc/p-images/constructor-index.gif
Prover/Doc/p-images/constructors.gif
Prover/Doc/p-images/error-index.gif
Prover/Doc/p-images/exception-index.gif
Prover/Doc/p-images/green-ball-small.gif
Prover/Doc/p-images/green-ball.gif
Prover/Doc/p-images/innerclass-index.html
Prover/Doc/p-images/innerclasses.gif
Prover/Doc/p-images/interface-index.gif
Prover/Doc/p-images/magenta-ball-small.gif
Prover/Doc/p-images/magenta-ball.gif
Prover/Doc/p-images/method-index.gif
Prover/Doc/p-images/methods.gif
Prover/Doc/p-images/package-index.gif
Prover/Doc/p-images/red-ball-small.gif
Prover/Doc/p-images/red-ball.gif
Prover/Doc/p-images/sq-blue.gif
Prover/Doc/p-images/sql-blue.gif
Prover/Doc/p-images/variable-index.gif
Prover/Doc/p-images/variables.gif
Prover/Doc/p-images/yellow-ball-small.gif
Prover/Doc/p-images/yellow-ball.gif
Prover/Formulae.pizza
Prover/G4ip.bbl
Prover/G4ip.blg
Prover/G4ip.dvi
Prover/G4ip.gif
Prover/G4ip.html
Prover/G4ip.mod
Prover/G4ip.ps
Prover/G4ip.tex
Prover/G4ip/.svn/entries
Prover/G4ip/.svn/prop-base/Context.class.svn-base
Prover/G4ip/.svn/prop-base/Form$And.class.svn-base
Prover/G4ip/.svn/prop-base/Form$Atm.class.svn-base
Prover/G4ip/.svn/prop-base/Form$Equ.class.svn-base
Prover/G4ip/.svn/prop-base/Form$False.class.svn-base
Prover/G4ip/.svn/prop-base/Form$Imp.class.svn-base
Prover/G4ip/.svn/prop-base/Form$Or.class.svn-base
Prover/G4ip/.svn/prop-base/Form.class.svn-base
Prover/G4ip/.svn/prop-base/MyLabel.class.svn-base
Prover/G4ip/.svn/prop-base/Parser.class.svn-base
Prover/G4ip/.svn/prop-base/ProofDisplay.class.svn-base
Prover/G4ip/.svn/prop-base/Prover$$closures.class.svn-base
Prover/G4ip/.svn/prop-base/Prover.class.svn-base
Prover/G4ip/.svn/prop-base/ProverApplet.class.svn-base
Prover/G4ip/.svn/prop-base/Sequent.class.svn-base
Prover/G4ip/.svn/prop-base/Token$BINOP.class.svn-base
Prover/G4ip/.svn/prop-base/Token$COMMA.class.svn-base
Prover/G4ip/.svn/prop-base/Token$EOI.class.svn-base
Prover/G4ip/.svn/prop-base/Token$FALSE.class.svn-base
Prover/G4ip/.svn/prop-base/Token$ID.class.svn-base
Prover/G4ip/.svn/prop-base/Token$LPAREN.class.svn-base
Prover/G4ip/.svn/prop-base/Token$RPAREN.class.svn-base
Prover/G4ip/.svn/prop-base/Token.class.svn-base
Prover/G4ip/.svn/text-base/Context.class.svn-base
Prover/G4ip/.svn/text-base/Form$And.class.svn-base
Prover/G4ip/.svn/text-base/Form$Atm.class.svn-base
Prover/G4ip/.svn/text-base/Form$Equ.class.svn-base
Prover/G4ip/.svn/text-base/Form$False.class.svn-base
Prover/G4ip/.svn/text-base/Form$Imp.class.svn-base
Prover/G4ip/.svn/text-base/Form$Or.class.svn-base
Prover/G4ip/.svn/text-base/Form.class.svn-base
Prover/G4ip/.svn/text-base/MyLabel.class.svn-base
Prover/G4ip/.svn/text-base/Parser.class.svn-base
Prover/G4ip/.svn/text-base/ProofDisplay.class.svn-base
Prover/G4ip/.svn/text-base/Prover$$closures.class.svn-base
Prover/G4ip/.svn/text-base/Prover.class.svn-base
Prover/G4ip/.svn/text-base/ProverApplet.class.svn-base
Prover/G4ip/.svn/text-base/Sequent.class.svn-base
Prover/G4ip/.svn/text-base/Token$BINOP.class.svn-base
Prover/G4ip/.svn/text-base/Token$COMMA.class.svn-base
Prover/G4ip/.svn/text-base/Token$EOI.class.svn-base
Prover/G4ip/.svn/text-base/Token$FALSE.class.svn-base
Prover/G4ip/.svn/text-base/Token$ID.class.svn-base
Prover/G4ip/.svn/text-base/Token$LPAREN.class.svn-base
Prover/G4ip/.svn/text-base/Token$RPAREN.class.svn-base
Prover/G4ip/.svn/text-base/Token.class.svn-base
Prover/G4ip/Context.class
Prover/G4ip/Form$And.class
Prover/G4ip/Form$Atm.class
Prover/G4ip/Form$Equ.class
Prover/G4ip/Form$False.class
Prover/G4ip/Form$Imp.class
Prover/G4ip/Form$Or.class
Prover/G4ip/Form.class
Prover/G4ip/MyLabel.class
Prover/G4ip/Parser.class
Prover/G4ip/ProofDisplay.class
Prover/G4ip/Prover$$closures.class
Prover/G4ip/Prover.class
Prover/G4ip/ProverApplet.class
Prover/G4ip/Sequent.class
Prover/G4ip/Token$BINOP.class
Prover/G4ip/Token$COMMA.class
Prover/G4ip/Token$EOI.class
Prover/G4ip/Token$FALSE.class
Prover/G4ip/Token$ID.class
Prover/G4ip/Token$LPAREN.class
Prover/G4ip/Token$RPAREN.class
Prover/G4ip/Token.class
Prover/GettingStarted.html
Prover/Parser.pizza
Prover/ProofDisplay.pizza
Prover/Prover.pizza
Prover/ProverApplet.html
Prover/ProverApplet.pizza
Prover/ProverAppletJar.html
Prover/README
Prover/Sequents.pizza
Prover/Tableaux98.dvi.gz
Prover/Tableaux98.ps.gz
Prover/execution.gif
Prover/fun.html
Prover/index.html
Prover/proof.gif
--- /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>&nbsp;&nbsp;&nbsp; 
+    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> &nbsp;&nbsp;&nbsp; <CODE>=></CODE> F &nbsp;&nbsp;&nbsp; or 
+                 &nbsp;&nbsp;&nbsp; [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>&nbsp;&nbsp;&nbsp; 
+    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> &nbsp;&nbsp;&nbsp; <CODE>=></CODE> F &nbsp;&nbsp;&nbsp; or 
+                 &nbsp;&nbsp;&nbsp; [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>&nbsp;&nbsp;    case False();              </DD>    
+<DD>&nbsp;&nbsp;    case Atm(String c);        </DD>  
+<DD>&nbsp;&nbsp;    case And(Form c1,Form c2); </DD>
+<DD>&nbsp;&nbsp;    case Or(Form c1,Form c2);  </DD>
+<DD>&nbsp;&nbsp;    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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p -> p &nbsp;</CODE> 
+is represented as   <CODE> &nbsp; Imp(Atm("p"),Atm("p"))</CODE><BR>
+<CODE>a v (a -> false) &nbsp;</CODE> is represented as  <CODE> &nbsp; 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>&nbsp;&nbsp; Form  G;                                      </DD>         
+<DD>&nbsp;&nbsp; Context Gamma;                                </DD>
+<DD>&nbsp;&nbsp; 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>&nbsp;&nbsp; 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>&nbsp;&nbsp; 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>&nbsp;&nbsp; prove(new Sequent(Gamma,B1),sc);</DD>
+<DD>&nbsp;&nbsp; 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>&nbsp;&nbsp; prove(new Sequent(Gamma.add(B),G),</DD>
+<DD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
+      fun()->void {prove(new Sequent(Gamma.add(C),G),sc);}</DD>
+<DD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ); 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>&nbsp;&nbsp; if (G instanceof Atm) { </DD>
+<DD>&nbsp;&nbsp; &nbsp;&nbsp; if (G.c.compareTo(c) == 0) { sc(); }</DD>
+<DD>&nbsp;&nbsp; } 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