If you want to launch this program you need a Common Lisp implementation
on your machine. This program is tested to run on CLISP (http://clisp.cons.org/).
You need also Another System Definition Facility (http://www.cliki.net/asdf):
download the file

http://cclan.cvs.sourceforge.net/*checkout*/cclan/asdf/asdf.lisp

and put it into the folder which contains lkalculus.asd and all LKalculus files.

To launch it, open a terminal and get into the folder which contains
lkalculus.lisp and all LKalculus files, then in your LISP interpreter type in order

(load "lkalculus.lisp")
(in-package :operators)

Note that the first time it will compile all files. Now you can prove your theorems
by the proof function (see below).

--------------------------------------------------------------------------------

The LKalculus sintax is very simple: you can write propositions, variables and constants
by a list containing symbols and numbers according to the following rules:

   1. a proposition is a list delimited by brackets and preceded by apostrophe;
   2. the first symbol is the proposition identifier;
   3. the rest is made out of symbols (variables) and numbers (constants).

So if P(x,y,c) is a proposition in which x,y are variables and c is a constant, its
translation into LKalculus is '(P x y 1). The sintax is very flexible so that
variables like x1, foo, x57 and constants like 2, 3, 671 are admitted. Connectives
are used by lists too, they are "non" for "not", "et" for "and", "vel" for "or",
"implies" for "implies", "forall" for "for all", "exist" for "there exists".
The translations for

not P(x), P(x) and Q(x), P(x) or Q(x), P(x) implies Q(x),
for all x P(x), there exist x such that P(x)

are, respectively,

'(not '(P x))
'(et '(P x) '(Q x))
'(vel '(P x) '(Q x))
'(implies '(P x) '(Q x))
'(forall x '(P x))
'(exist x '(P x))

Et and vel admit any number of arguments while non and implies only one and two
respectively. The forall and exist operators admit one (bound) variable and one
proposition. Finally the proof function gets two list of statements (ipothesis
and thesis) and searches for a proof.

We want to demostrate the famous Socrates syllogism: all men are mortals, Socrates
is a men, then Socrates is mortal. If we write P(x) for "x is a man", M(x) for
"x is mortal" and 1 for Socrates, than the ipotesis-thesis scheme is

(for all x (P(x) implies Q(x))), P(1)	|-	M(1)

then we use the proof function

(proof '('(forall x '(implies '(P x) '(M x))) '(P 1)) '('(M 1)))	

the sintax of proof is
(proof '(ipothesis statements) '(thesis statements))

----------------------------------------------------------------------------------

This program is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License  as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later version.
