# HG changeset patch # User Christian Urban # Date 1331806048 0 # Node ID 907b1fff563752bf8d75d1d73d43cd5f8a0e620e # Parent 345dd18f020e857236774a63ac805e51d64aa74f added phd and prover diff -r 345dd18f020e -r 907b1fff5637 PhD/index.html --- /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 @@ + + +Homepage of Christian Urban + + + + + + + + + + + + + + + + + + +
+ +Links
+Home
+Publications
+Recent Talks +
+
+ +Handy Information
+People in Logic
+Programming Languages
+Miscellaneous +

+ + + + +
+Postscript file of the thesis: +ps.gz +
+

The Dinner after the Viva

+organised by Gavin in The Three Horseshoes in Maddingley. Very nice.

+ +
+My examiners, +Andy Pitts and +Henk Barendregt, are next to me. +Nick Benton, Mrs. Barendregt-Kessing (Henk's mother), +Gavin Bierman, +Mateja Jamnik, +Martin Hyland and +Glynn Winskel +are standing behind.

+ +
+There are Susan Pitts and Alice Benton on the left.

+ +

The Ceremony

+

+ +

+

+ +Last modified: Thu Feb 28 20:23:06 CET 2008 + +[Validate this page.] + + diff -r 345dd18f020e -r 907b1fff5637 PhD/phd-1.jpg Binary file PhD/phd-1.jpg has changed diff -r 345dd18f020e -r 907b1fff5637 PhD/phd-2.jpg Binary file PhD/phd-2.jpg has changed diff -r 345dd18f020e -r 907b1fff5637 PhD/phd-3.jpg Binary file PhD/phd-3.jpg has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Contexts.pizza --- /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.

+ * 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 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 + + + + + +public class G4ip.Context + + + + + +[all packages] +[package G4ip] +[class hierarchy] +[index] + +


+

public class G4ip.Context

+(source file: Contexts.pizza)
+
+java.lang.Object
+   |
+   +----java.util.Vector
+           |
+           +----G4ip.Context
+
+
+
+public class Context
+  extends Vector
+
+
+
Contexts act as multiset.

+ Typical contexts in logical rules are Gamma, Delta, etc.

+
+
Author:
+
Christian Urban
+
+
+
+

Constuctor Index

+
+
O Context(Context) +
+
O Context() +
+
+

Methods

+
+
O add(Form, Form) +
returns a contexts with two additional formulae at the beginning +
O add(Form) +
returns a context with one additional formula at the beginning +
O includes(Form) +
tests whether a context contains a specific atom +
O makeString() +
should be toString, but this is a "final" method in Vector +
+

Constructors

+O Context
+
+public Context();
+
+

+O Context
+

+public Context(Context init_context);
+
+

+

Methods

+O makeString
+
+public String makeString();
+
+
+
should be toString, but this is a "final" method in Vector

+
+
Overrides:
+
+
makeString in class Context
+
+
+
+

+O add
+

+public Context add(Form new_formula);
+
+
+
returns a context with one additional formula at the beginning

+
+
Parameters:
+
new_formula - a formula
+
Overrides:
+
+
add in class Context
+
+
+
+

+O add
+

+public Context add(Form new_formula1,
+                   Form new_formula2);
+
+
+
returns a contexts with two additional formulae at the beginning

+
+
Parameters:
+
new_formula1,new_formula2 - two formulae
+
Overrides:
+
+
add in class Context
+
+
+
+

+O includes
+

+public boolean includes(Form a);
+
+
+
tests whether a context contains a specific atom

+
+
Parameters:
+
a - a formula
+
Overrides:
+
+
includes in class Context
+
+
+
+

+


+ +[all packages] +[package G4ip] +[class hierarchy] +[index] + +
G4ip.Context.html
+ + diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/G4ip.Form.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 @@ + + + + + + +public class G4ip.Form + + + + + +[all packages] +[package G4ip] +[class hierarchy] +[index] + +
+

public class G4ip.Form

+(source file: Formulae.pizza)
+
+java.lang.Object
+   |
+   +----G4ip.Form
+
+
+
+public class Form
+
+
+
Class for propositional formulae.

+
+
Author:
+
Christian Urban
+
+
+
+

Constuctor Index

+
+
O And(Form, Form) +
+
O Atm(String) +
+
O Equ(Form, Form) +
+
O False() +
+
O Imp(Form, Form) +
+
O Or(Form, Form) +
+
+

Methods

+
+
O toString() +
+
+

Constructors

+O False
+
+public case False();
+
+

+O And
+

+public case And(Form c1,
+                Form c2);
+
+

+O Or
+

+public case Or(Form c1,
+               Form c2);
+
+

+O Imp
+

+public case Imp(Form c1,
+                Form c2);
+
+

+O Equ
+

+public case Equ(Form c1,
+                Form c2);
+
+

+O Atm
+

+public case Atm(String c);
+
+

+

Methods

+O toString
+
+public String toString();
+
+

+


+ +[all packages] +[package G4ip] +[class hierarchy] +[index] + +
G4ip.Form.html
+ + diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/G4ip.Parser.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 @@ + + + + + + +public class G4ip.Parser + + + + + +[all packages] +[package G4ip] +[class hierarchy] +[index] + +
+

public class G4ip.Parser

+(source file: Parser.pizza)
+
+java.lang.Object
+   |
+   +----G4ip.Parser
+
+
+
+public class Parser
+
+
+
A left-to-right, rightmost-derivation parser.

+ The following grammar is implemented:

+

+
Formula ::= Id
+
| false
+
| ( Formula )
+
| Formula Binop Formula
+

+

+
Id is a string of lower case letters
+

+

+
Binop is either &, v, -> or <->
+

+

+
FormulaList ::= empty
+
| [ FormulaList ,]* Formula
+

+ The parser uses a stack where two actions are performed: +

+
shift moves the next token to the top of the stack (getNextToken)
+
reduce chooses a grammar rule, X -> A B C; pops A, B, C from the + top of the stack and pushes X onto the stack +

+
+
Author:
+
Christian Urban
+
+
+
+

Constuctor Index

+
+
O Parser(String) +
+
+

Methods

+
+
O getNextToken() +
tokens are: identifiers( ) , & v -> <-> false + and EOI +
O parseFormula() +
parses a single formula +
O parseFormulae() +
parses a list of formulae separated by commas +
O reduce() +
Implements the grammar rules. +
+

Constructors

+O Parser
+
+public Parser(String init_in);
+
+

+

Methods

+O getNextToken
+
+public Token getNextToken()
+  throws Exception;
+
+
+
tokens are: identifiers( ) , & v -> <-> false + and EOI (end of input)

+
+
Overrides:
+
+
getNextToken in class Parser
+
+
+
+

+O reduce
+

+public void reduce();
+
+
+
Implements the grammar rules.

+
+
Overrides:
+
+
reduce in class Parser
+
+
+
+

+O parseFormula
+

+public Form parseFormula()
+  throws Exception;
+
+
+
parses a single formula

+
+
Overrides:
+
+
parseFormula in class Parser
+
+
+
+

+O parseFormulae
+

+public Context parseFormulae()
+  throws 
+
+
+
+
+
+package G4ip
+
+
+
+
+
+[all packages] 
+[class hierarchy] 
+[index] 
+
+
+

package G4ip

+ + + +

Class Index

+ + + + + +
+ +[all packages] +[class hierarchy] +[index] + +
G4ip.html
+ + diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.HSancillary Binary file Prover/Doc/p-images/.HSancillary has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/entries --- /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 + diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/.HSancillary.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/blue-ball-small.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/blue-ball.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/class-index.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/constructor-index.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/constructors.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/error-index.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/exception-index.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/green-ball-small.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/green-ball.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/innerclass-index.html.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/innerclasses.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/interface-index.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/magenta-ball-small.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/magenta-ball.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/method-index.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/methods.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/package-index.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/red-ball-small.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/red-ball.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/sq-blue.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/sql-blue.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/variable-index.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/variables.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/yellow-ball-small.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/prop-base/yellow-ball.gif.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/.HSancillary.svn-base Binary file Prover/Doc/p-images/.svn/text-base/.HSancillary.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/blue-ball-small.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/blue-ball-small.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/blue-ball.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/blue-ball.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/class-index.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/class-index.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/constructor-index.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/constructor-index.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/constructors.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/constructors.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/error-index.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/error-index.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/exception-index.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/exception-index.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/green-ball-small.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/green-ball-small.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/green-ball.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/green-ball.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/innerclass-index.html.svn-base Binary file Prover/Doc/p-images/.svn/text-base/innerclass-index.html.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/innerclasses.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/innerclasses.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/interface-index.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/interface-index.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/magenta-ball-small.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/magenta-ball-small.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/magenta-ball.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/magenta-ball.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/method-index.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/method-index.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/methods.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/methods.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/package-index.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/package-index.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/red-ball-small.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/red-ball-small.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/red-ball.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/red-ball.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/sq-blue.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/sq-blue.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/sql-blue.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/sql-blue.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/variable-index.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/variable-index.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/variables.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/variables.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/yellow-ball-small.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/yellow-ball-small.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/.svn/text-base/yellow-ball.gif.svn-base Binary file Prover/Doc/p-images/.svn/text-base/yellow-ball.gif.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/blue-ball-small.gif Binary file Prover/Doc/p-images/blue-ball-small.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/blue-ball.gif Binary file Prover/Doc/p-images/blue-ball.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/class-index.gif Binary file Prover/Doc/p-images/class-index.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/constructor-index.gif Binary file Prover/Doc/p-images/constructor-index.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/constructors.gif Binary file Prover/Doc/p-images/constructors.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/error-index.gif Binary file Prover/Doc/p-images/error-index.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/exception-index.gif Binary file Prover/Doc/p-images/exception-index.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/green-ball-small.gif Binary file Prover/Doc/p-images/green-ball-small.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/green-ball.gif Binary file Prover/Doc/p-images/green-ball.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/innerclass-index.html Binary file Prover/Doc/p-images/innerclass-index.html has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/innerclasses.gif Binary file Prover/Doc/p-images/innerclasses.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/interface-index.gif Binary file Prover/Doc/p-images/interface-index.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/magenta-ball-small.gif Binary file Prover/Doc/p-images/magenta-ball-small.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/magenta-ball.gif Binary file Prover/Doc/p-images/magenta-ball.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/method-index.gif Binary file Prover/Doc/p-images/method-index.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/methods.gif Binary file Prover/Doc/p-images/methods.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/package-index.gif Binary file Prover/Doc/p-images/package-index.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/red-ball-small.gif Binary file Prover/Doc/p-images/red-ball-small.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/red-ball.gif Binary file Prover/Doc/p-images/red-ball.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/sq-blue.gif Binary file Prover/Doc/p-images/sq-blue.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/sql-blue.gif Binary file Prover/Doc/p-images/sql-blue.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/variable-index.gif Binary file Prover/Doc/p-images/variable-index.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/variables.gif Binary file Prover/Doc/p-images/variables.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/yellow-ball-small.gif Binary file Prover/Doc/p-images/yellow-ball-small.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Doc/p-images/yellow-ball.gif Binary file Prover/Doc/p-images/yellow-ball.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Formulae.pizza --- /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.

+ * @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 + "\")"; + } + } + +} + diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip.bbl --- /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} diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip.blg diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip.dvi Binary file Prover/G4ip.dvi has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip.gif Binary file Prover/G4ip.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip.html --- /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 @@ + + + + G4ip Infernce Rules + + + +

The Inference Rules of G4ip (LJT)

+ +A dvi and ps version; the rules can be found in +[Dyckhoff, 1992]. + +
+ + + +
+
+Christian Urban
+ + +

+ +Last modified: Wed Jan 28 22:14:28 GMT 1998 + + + diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip.mod --- /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. + + diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip.ps --- /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 df95 +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 +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 DI<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 +DI70 D<000FE0200078186000E004E0038002E0070001E00F0000E0 +1E0000601E0000603C0000603C0000207C00002078000020F8000000F8000000F8000000 +F8000000F8000000F8000000F8000000F8007FFCF80003E0780001E07C0001E03C0001E0 +3C0001E01E0001E01E0001E00F0001E0070001E0038002E000E0046000781820000FE000 +1E217D9F24>I73 D76 +D82 +D<07E0800C1980100780300380600180600180E00180E00080E00080E00080F00000F000 +007800007F00003FF0001FFC000FFE0003FF00001F800007800003C00003C00001C08001 +C08001C08001C08001C0C00180C00380E00300F00600CE0C0081F80012217D9F19>I91 D93 +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 DI< +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 +DI<00000E0000001E0000003E0000007E00 +0000FE000000FE000001FE000003FE0000077E00000E7E00000E7E00001C7E0000387E00 +00707E0000E07E0000E07E0001C07E0003807E0007007E000E007E000E007E001C007E00 +38007E0070007E00E0007E00FFFFFFF8FFFFFFF8FFFFFFF80000FE000000FE000000FE00 +0000FE000000FE000000FE000000FE000000FE00007FFFF8007FFFF8007FFFF81D277EA6 +22>52 D<00007FE003000007FFFC0700001FFFFF0F00007FF00F9F0000FF0001FF0001FC +0000FF0003F800007F0007F000003F000FE000001F001FC000001F001FC000000F003F80 +00000F003F80000007007F80000007007F80000007007F0000000000FF0000000000FF00 +00000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00 +00000000FF0000FFFFF87F0000FFFFF87F8000FFFFF87F800000FF003F800000FF003F80 +0000FF001FC00000FF001FC00000FF000FE00000FF0007F00000FF0003F80000FF0001FC +0000FF0000FF0001FF00007FF007FF00001FFFFF9F000007FFFE0F0000007FF003002D29 +7CA835>71 D73 +D<00FFFFF800FFFFF800FFFFF80000FF000000FF000000FF000000FF000000FF000000FF +000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF +000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF +000000FF000000FF000000FF001800FF007E00FF00FF00FF00FF00FF00FF00FF00FF00FE +007E01FC007C01F8003E07F0000FFFE00003FF00001D297EA823>I76 D82 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 D108 D110 D<003FE00001FFFC0003F07E000FC01F801F800FC0 +3F0007E03F0007E07E0003F07E0003F07E0003F0FE0003F8FE0003F8FE0003F8FE0003F8 +FE0003F8FE0003F8FE0003F8FE0003F87E0003F07E0003F03F0007E03F0007E01F800FC0 +0FC01F8007F07F0001FFFC00003FE0001D1B7E9A22>II114 D<03FE300FFFF03E03F07800F0 +7000F0F00070F00070F80070FE0000FFE0007FFF007FFFC03FFFE01FFFF007FFF800FFF8 +0007FC0000FCE0007CE0003CF0003CF00038F80038FC0070FF01E0E7FFC0C1FF00161B7E +9A1B>I117 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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip.tex --- /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: + + + + + + + + + + + + + + diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/entries --- /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 + diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/Context.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/Form$And.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/Form$Atm.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/Form$Equ.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/Form$False.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/Form$Imp.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/Form$Or.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/Form.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/MyLabel.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/Parser.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/ProofDisplay.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/Prover$$closures.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/Prover.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/ProverApplet.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/Sequent.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/Token$BINOP.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/Token$COMMA.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/Token$EOI.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/Token$FALSE.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/Token$ID.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/Token$LPAREN.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/Token$RPAREN.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/prop-base/Token.class.svn-base --- /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 diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/Context.class.svn-base Binary file Prover/G4ip/.svn/text-base/Context.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/Form$And.class.svn-base Binary file Prover/G4ip/.svn/text-base/Form$And.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/Form$Atm.class.svn-base Binary file Prover/G4ip/.svn/text-base/Form$Atm.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/Form$Equ.class.svn-base Binary file Prover/G4ip/.svn/text-base/Form$Equ.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/Form$False.class.svn-base Binary file Prover/G4ip/.svn/text-base/Form$False.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/Form$Imp.class.svn-base Binary file Prover/G4ip/.svn/text-base/Form$Imp.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/Form$Or.class.svn-base Binary file Prover/G4ip/.svn/text-base/Form$Or.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/Form.class.svn-base Binary file Prover/G4ip/.svn/text-base/Form.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/MyLabel.class.svn-base Binary file Prover/G4ip/.svn/text-base/MyLabel.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/Parser.class.svn-base Binary file Prover/G4ip/.svn/text-base/Parser.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/ProofDisplay.class.svn-base Binary file Prover/G4ip/.svn/text-base/ProofDisplay.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/Prover$$closures.class.svn-base Binary file Prover/G4ip/.svn/text-base/Prover$$closures.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/Prover.class.svn-base Binary file Prover/G4ip/.svn/text-base/Prover.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/ProverApplet.class.svn-base Binary file Prover/G4ip/.svn/text-base/ProverApplet.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/Sequent.class.svn-base Binary file Prover/G4ip/.svn/text-base/Sequent.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/Token$BINOP.class.svn-base Binary file Prover/G4ip/.svn/text-base/Token$BINOP.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/Token$COMMA.class.svn-base Binary file Prover/G4ip/.svn/text-base/Token$COMMA.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/Token$EOI.class.svn-base Binary file Prover/G4ip/.svn/text-base/Token$EOI.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/Token$FALSE.class.svn-base Binary file Prover/G4ip/.svn/text-base/Token$FALSE.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/Token$ID.class.svn-base Binary file Prover/G4ip/.svn/text-base/Token$ID.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/Token$LPAREN.class.svn-base Binary file Prover/G4ip/.svn/text-base/Token$LPAREN.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/Token$RPAREN.class.svn-base Binary file Prover/G4ip/.svn/text-base/Token$RPAREN.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/.svn/text-base/Token.class.svn-base Binary file Prover/G4ip/.svn/text-base/Token.class.svn-base has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/Context.class Binary file Prover/G4ip/Context.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/Form$And.class Binary file Prover/G4ip/Form$And.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/Form$Atm.class Binary file Prover/G4ip/Form$Atm.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/Form$Equ.class Binary file Prover/G4ip/Form$Equ.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/Form$False.class Binary file Prover/G4ip/Form$False.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/Form$Imp.class Binary file Prover/G4ip/Form$Imp.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/Form$Or.class Binary file Prover/G4ip/Form$Or.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/Form.class Binary file Prover/G4ip/Form.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/MyLabel.class Binary file Prover/G4ip/MyLabel.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/Parser.class Binary file Prover/G4ip/Parser.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/ProofDisplay.class Binary file Prover/G4ip/ProofDisplay.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/Prover$$closures.class Binary file Prover/G4ip/Prover$$closures.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/Prover.class Binary file Prover/G4ip/Prover.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/ProverApplet.class Binary file Prover/G4ip/ProverApplet.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/Sequent.class Binary file Prover/G4ip/Sequent.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/Token$BINOP.class Binary file Prover/G4ip/Token$BINOP.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/Token$COMMA.class Binary file Prover/G4ip/Token$COMMA.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/Token$EOI.class Binary file Prover/G4ip/Token$EOI.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/Token$FALSE.class Binary file Prover/G4ip/Token$FALSE.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/Token$ID.class Binary file Prover/G4ip/Token$ID.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/Token$LPAREN.class Binary file Prover/G4ip/Token$LPAREN.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/Token$RPAREN.class Binary file Prover/G4ip/Token$RPAREN.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/G4ip/Token.class Binary file Prover/G4ip/Token.class has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/GettingStarted.html --- /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! diff -r 345dd18f020e -r 907b1fff5637 Prover/Parser.pizza --- /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.

+ * The following grammar is implemented:

+ *

+ *
Formula ::= Id
+ *
| false
+ *
| ( Formula )
+ *
| Formula Binop Formula
+ *

+ *

+ *
Id is a string of lower case letters
+ *

+ *

+ *
Binop is either &, v, -> or <->
+ *

+ *

+ *
FormulaList ::= empty
+ *
| [ FormulaList ,]* Formula
+ *

+ * The parser uses a stack where two actions are performed: + *

+ *
shift moves the next token to the top of the stack (getNextToken)
+ *
reduce chooses a grammar rule, X -> A B C; pops A, B, C from the + * top of the stack and pushes X onto the stack + *
+ * @author Christian Urban + */ +public class Parser { + final Pair 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( ) , & v -> <-> false + * and EOI (end of input) + */ + 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 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 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 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(); } + +} + + diff -r 345dd18f020e -r 907b1fff5637 Prover/Prover.pizza --- /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.

+ * 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 proof; // keeps a record of the proof + + + /** The constructor creates a prover which proves a specific sequent.

+ * 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 + * 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 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) */ } + } + +} diff -r 345dd18f020e -r 907b1fff5637 Prover/ProverApplet.html --- /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 @@ + + + + G4ip Prover + + + +

Prover for G4ip (LJT)

+ +Readme + + +
+Formulae:    + F ::= false + | A + | F & F + | F v F + | F -> F + | F <-> F + | (F)
+Sequents:     => F     or +     [F,]* F => F + +
+Inference Rules: +html, +dvi or +ps. + +
+Start: starts the proof search, +Clear: clears the text fields,
+Next: searches for the next proof, +Stop: stops the proof search. + +
+ + + + + + +
+Provable Examples: + +
+
=> (p v (q v r)) <-> ((p v q) v r)
+
=> (p & (q & r)) <-> ((p & q) & r)
+
=> (p & (q v r)) <-> ((p & q) v (p & r))
+
=> (p v (q & r)) <-> ((p v q) & (p v r))
+
=> (p -> p) -> (p -> p)
+
=> (a -> (b -> c)) -> ((a -> b) -> (a -> c))
+
=> a -> ((a -> b) -> a)
+
=> b -> ((a -> b) -> b)
+
=> (a & b) -> (b & a)
+
=> (a -> (a -> b)) -> (a -> b)
+
=> ((((p -> q) -> p) -> p) -> q) -> q
+
=> (a v (a -> b)) -> (((a -> b) -> a)-> a)
+
=> (a -> (b -> false)) -> (b -> (a -> false))
+
=> ((a v (a -> false))-> false)-> false
+
a & b, c & d => b & c
+
(a v (a-> false)) -> false => false
+
+
+ +Non-Provable Examples: + +
+
=> ((a -> b) -> a) -> a
+
=> a v (a -> false)
+
=> (a & b v (((( a-> flase) -> false) -> q) v (b -> q)) -> q) -> q
+
+
+ + +Some advanced examples + +
+Source Code: +Formulae, +Contexts, +Sequents, +ProofDisplay, +Prover, +Parser, +Applet
+ +
+Lambda Prolog Version: The programm +G4ip.mod can be executed using +Terzo +Another implementation of G4ip by Joshua Hodas and Dale Miller written in +Lolli can be found +here. + + +
+
+Christian Urban
+ + +

+ +Last modified: Sun May 10 18:18:13 GMT 1998 + + + diff -r 345dd18f020e -r 907b1fff5637 Prover/ProverApplet.pizza --- /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; + } + +} + + diff -r 345dd18f020e -r 907b1fff5637 Prover/ProverAppletJar.html --- /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 @@ + + + + G4ip Prover + + + +

Prover for G4ip (LJT)

+ +Readme + + +
+Formulae:    + F ::= false + | A + | F & F + | F v F + | F -> F + | F <-> F + | (F)
+Sequents:     => F     or +     [F,]* F => F + +
+Inference Rules: +html, +dvi or +ps. + +
+Start: starts the proof search, +Clear: clears the text fields,
+Next: searches for the next proof, +Stop: stops the proof search. + +
+ + + + + + + +
+Provable Examples: + +
+
=> (p v (q v r)) <-> ((p v q) v r)
+
=> (p & (q & r)) <-> ((p & q) & r)
+
=> (p & (q v r)) <-> ((p & q) v (p & r))
+
=> (p v (q & r)) <-> ((p v q) & (p v r))
+
=> (p -> p) -> (p -> p)
+
=> (a -> (b -> c)) -> ((a -> b) -> (a -> c))
+
=> a -> ((a -> b) -> a)
+
=> b -> ((a -> b) -> b)
+
=> (a & b) -> (b & a)
+
=> (a -> (a -> b)) -> (a -> b)
+
=> ((((p -> q) -> p) -> p) -> q) -> q
+
=> (a v (a -> b)) -> (((a -> b) -> a)-> a)
+
=> (a -> (b -> false)) -> (b -> (a -> false))
+
=> ((a v (a -> false))-> false)-> false
+
a & b, c & d => b & c
+
(a v (a-> false)) -> false => false
+
+
+ +Non-Provable Examples: + +
+
=> ((a -> b) -> a) -> a
+
=> a v (a -> false)
+
=> (a & b v (((( a-> flase) -> false) -> q) v (b -> q)) -> q) -> q
+
+
+ + +Some advanced examples + +
+Source Code: +Formulae, +Contexts, +Sequents, +ProofDisplay, +Prover, +Parser, +Applet
+ + +
+Lambda Prolog Version: The programm +G4ip.mod can be executed using +Terzo +Another implementation of G4ip by Joshua Hodas and Dale Miller written in +Lolli can be found +here. + + +
+
+Christian Urban
+ + +

+ +Last modified: Sun May 10 18:18:28 GMT 1998 + + + diff -r 345dd18f020e -r 907b1fff5637 Prover/README --- /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 + diff -r 345dd18f020e -r 907b1fff5637 Prover/Sequents.pizza --- /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; + } +} diff -r 345dd18f020e -r 907b1fff5637 Prover/Tableaux98.dvi.gz Binary file Prover/Tableaux98.dvi.gz has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/Tableaux98.ps.gz Binary file Prover/Tableaux98.ps.gz has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/execution.gif Binary file Prover/execution.gif has changed diff -r 345dd18f020e -r 907b1fff5637 Prover/fun.html --- /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 @@ + + + + Advanced Examples + + + +

Some Advanced Examples

+ +Be cautious: some of the following formulae have big proofs! + +
+ +
+
=> (((a & b) v (a->f) v (b->f))->f)->f
+
=> (a & b & c v ((a->f) v (b->f) v (c->f))->f)->f
+
=> d&(b->b->a)&(c->c->b)&(d->d->c)->a
+
+
+ + +
+
+Christian Urban
+ + +

+ +Last modified: Sun Nov 23 20:20:31 GMT 1997 + + + diff -r 345dd18f020e -r 907b1fff5637 Prover/index.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 @@ + + + + G4ip + + + +

An Implementation of G4ip in Pizza

+ +Warning: +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. Update Pizza development is continued and starting from version +0.40 it should work +with recent Java implementations.

+ + +Jump to the implementation. + + +

Introduction

+ + +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 +[Troelstra and Schwichtenberg, 1996]. +This calculus is also known as LJT which has been studied thoroughly +in [Dyckhoff, 1992]. The inference rules of +G4ip are given here.

+ +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 +Lambda Prolog +and can be found here. Another implementation by +Hodas and Miller written in Lolli +can be found here +(see [Hodas and Miller, 1994]). 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 +[Carlsson, 1984]. This paper presents a rather technical +implementation of Prolog in LISP. Later an excellent paper, +[Elliot and Pfenning, 1991], appeared which +describes a full-fledged implementation of Lambda Prolog in SML. +We demonstrate the technique of success continuations for G4ip in +Pizza.

+ +Pizza is an object-oriented programming language and an attractive extension of +Java. Although Pizza is a superset of +Java, Pizza programs can be translated into Java or compiled into ordinary +Java Byte Code (see [Odersky and Wadler, 1997] +for a technical introduction to Pizza). We make use of the following two new +features of Pizza: +

    +
  • higher-order functions, i.e. functions may be passed as parameters or returned +from methods, +
  • class cases and pattern matching: this allows much simpler and more readable code. +
+ +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.
+ + +

The Representation of Formulae and Sequents

+ +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:

+ +F ::= false | A | F & F | F v F | F -> F

+ + +The class cases allow a straightforward implementation of this specification; +it is analogous to the SML implementation of +Lambda Prolog's +formulae in [Elliot and Pfenning, 1991]. The class +of formulae for G4ip is given below:

+ + +

+
public class Form {
+
   case False();
+
   case Atm(String c);
+
   case And(Form c1,Form c2);
+
   case Or(Form c1,Form c2);
+
   case Imp(Form c1,Form c2);
+
}
+
+ + +Two examples that illustrate the use of the representation are as follows:

+ + +          p -> p   +is represented as   Imp(Atm("p"),Atm("p"))
+a v (a -> false)   is represented as   Or(Atm("a"),Imp(Atm("a"),False()))

+ +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.

+ +The sequents of G4ip, which have the form Gamma=>G, 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.

+ + +

+
public class Sequent {
+
   Form G;
+
   Context Gamma;
+
   public Sequent(Context _Gamma, Form _G) {...};
+
}
+
+ + +We have a constructor for generating new sequents during proof search. +Context is a class which represents multisets; it is a simple +extension of the class Vector available in the Java libraries. +This class provides methods for adding elements to a multiset (add), +taking out elements from a multiset (removeElement) and testing +the membership of an element in a multiset (includes). + + +

The Technique of Success Continuations

+ +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 prove is the sequent being +proved; the second argument is an anonymous function. The function prove is now +of the form prove(sequent,sc). Somewhat simplified the +first argument is the leftmost premise and the second argument sc, +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):

+ +

+

+ +The inference rules fall into three groups: + +

    +
  • inference rules with a single premise (e.g. ->_R, &_L), +
  • inference rules with two premises (e.g. v_L) and +
  • inference rules without premises (e.g. Axiom). +
+ +The following picture shows the order in which the sequents are being proved. + +
+

+ +Suppose we have called prove with a sequent s and a +success continuation is. The inference rules of the first +group manipulate s obtaining s' and call prove +again with the new sequent s' and the current success continuation +(Steps 1-2, 3-4 and 5-6). The inference rules +of the second group have two premises, s1 and s2. +These rules call prove with s1 and a new success +continuation prove(s2,is) (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).

+ + +We are going to give a detailed description of the code for the rules: &_L, +->_R, v_Ri, v_L and Axiom. The function prove receives as arguments +a sequent Sequent(Gamma,G) and a success continuation +sc. 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.

+ +The &_L rule is in the first group; it modifies the sequent being proved and calls +prove again with the current success continuation sc. The code is as +follows (Gamma stands for the set of formulae on the left-hand +side of a sequent excluding the principal formula; G stands +for the goal formula of a sequent; B and C stand +for the two components of the principal formula).

+ + +

+
case And(Form B, Form C):
+
   prove(new Sequent(Gamma.add(B,C),G),sc); break;
+
+ + +The code for the ->_R rule is similar:

+ + +

+
case Imp(Form B, Form C):
+
   prove(new Sequent(Gamma.add(A),B),sc); break;
+
+ + +The v_Ri rule is an exception in the first group. It breaks up a goal +formula of the form B1 v B2 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 prove for each case. + + +
+
case Or(Form B1,Form B2):
+
   prove(new Sequent(Gamma,B1),sc);
+
   prove(new Sequent(Gamma,B2),sc); break;
+
+
+ +The v_L rule falls into the second group where the current success +continuation, sc, is modified. It calls prove with the first premise, +B,Gamma=>G, and wraps up the success continuation with the +new proof obligation, C,Gamma=>G. The construction +fun()->void {...} defines an anonymous function: the new +success continuation. In case the sequent B,Gamma=>G can be +proved, this function is invoked. + + +
+
case Or(Form B,Form C):
+
   prove(new Sequent(Gamma.add(B),G),
+
           + fun()->void {prove(new Sequent(Gamma.add(C),G),sc);}
+
        ); break
+
+
+ +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. + + +
+
case Atm(String c):
+
   if (G instanceof Atm) {
+
      if (G.c.compareTo(c) == 0) { sc(); }
+
   } break;
+
+
+ +The proof search is started with an initial success continuation is. +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: + + +
+
public void initial_sc() { System.out.println("Provable!"); }
+
+
+ + +Suppose we attempt to start the proof search with prove(p,p => p,is). +We would find that the prover responds twice with "Provable!", 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. + + +

Conclusion

+ +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 +Lambda Prolog: +the ratio of code is approximately 2 to 1. +(see LambdaProlog code and +Pizza code). +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 [Elliot and Pfenning, 1991], +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.

+ +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).

+ +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: DVI, Postscript +(© Springer-Verlag LNCS).

+ + +Acknowledgements: 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. + +


+

Implementation

+ +Readme

+ +Prover Applet
+Jar Version +(slightly faster, but requires Netscape 4 or MS Explorer 4).

+ + +


+References +
    +
  • + [Carlsson, 1984]
    + M. Carlsson, On Implementing Prolog in Functional Programming, + New Generation Computing, pp 347-359. +
  • + [Dyckhoff, 1992]
    + R. Dyckhoff, + Contraction-Free Sequent Calculi for Intuitionistic Logic, + Journal of Symbolic Logic 57(3), pp 795-807. +
  • + [Elliot and Pfenning, 1991]
    + C. Elliot, + F. Pfenning, + A Semi-Functional Implementation of a Higher-Order Programming Language, + In Peter Lee, editor, Topics in Advanced Language Implementation, MIT Press, + pp 289-352. + Available electronically. +
  • + [Hodas and Miller, 1994]
    + J. Hodas, + D. Miller, + Logic Programming in a Fragment of Intuitionistic Linear Logic, + Information and Computation 110(2), pp 327-365. + Available electronically. +
  • + [Odersky and Wadler, 1997]
    + M. Odersky, + P. Wadler, + Pizza into Java: Translating Theory into Practice, + In Proceedings of the 24th ACM Symposium on Principles of Programming Languages. + Available electronically. +
  • + [Troelstra and Schwichtenberg, 1996]
    + A. Troelstra, + H. Schwichtenberg, + Basic Proof Theory, Cambridge Tracts in Theoretical Computer Science, + Cambridge University Press. +
+ + +
+
+Christian Urban
+ + +

+ +Last modified: Sun Sep 23 12:04:47 BST 2001 + + + diff -r 345dd18f020e -r 907b1fff5637 Prover/proof.gif Binary file Prover/proof.gif has changed