p/\top <--> p
p\/bot <--> p
p/\bot <--> bot
p\/top <--> top
p/\p <--> p
p\/p <--> p
p/\q <--> q/\p
p\/q <--> q\/p
p/\q --> p
p/\q --> q
p --> p\/q
q --> p\/q
p/\(q/\r) <--> (p/\q)/\r
p\/(q\/r) <--> (p\/q)\/r
p/\(q\/r) <--> (p/\q)\/(p/\r)
p\/(q/\r) <--> (p\/q)/\(p\/r)
p/\(q\/r) --> (p\/q)/\(p\/r)
(p/\q)\/(p/\r) --> p\/(q/\r)
~ ~ p <--> p
p/\ ~p <--> bot
p\/ ~p <--> top
~(p/\q) <--> ~p\/ ~q
~(p\/q) <--> ~p/\ ~q
p->q <--> ~p\/q
~p <--> p->bot
p->q <--> ~q-> ~p
p->q->r <--> q->p->r
p->q->r <--> (p/\q)->r
(p->q)/\(p->r) <--> p->q/\r
(p->r)/\(q->r) <--> (p\/q)->r
p->q, q->r --> p->r
p->(q->p)
(p->(q->r))->((p->q)->(p->r))
(p-> ~q)->((p->q)-> ~p)
(~p-> ~q)->((~p->q)->p)
p/\(p->q)/\(p/\q->s)->s
p\/(p->q)
((p->q)->p)->p
X@p(X) --> p(a)/\p(b)
p(a)\/p(b) --> X#p(X)
X@X@p(X) <--> X@p(X)
X#X#p(X) <--> X#p(X)
X@(p(X)/\q(X)) <--> X@p(X) /\ X@q(X)
X#(p(X)\/q(X)) <--> X#p(X) \/ X#q(X)
~X@p(X) <--> X#(~p(X))
~X#p(X) <--> X@(~p(X))
~X@(p(X)->q(X)) <--> X#(p(X)/\ ~q(X))
~X#(p(X)/\q(X)) <--> X@(p(X)-> ~q(X))
X@p(X) --> X#p(X)
Y#X@(p(X)->p(Y))
X#Y@p(X,Y) --> Y@X#p(X,Y)
(p(a)/\p(b)->q)->X#(p(X)->q)
n(0), X@(n(X)->n(s(X))) --> n(s(s(0)))
This small program seqprover.pl (written in SICStus Prolog) searches a cut-free proof of the given sequent of first-order logic. Of course, the proof search of first-order logic is undecidable. Therefore, this program limits the number of quantifier rules (L\forall and R\exists) for each path of the proof at most five. To format LaTeX output, you need proof.sty by Makoto Tatsuta, and please add the following lines to your LaTeX source file.
\newcommand{\imp}{\supset}
\newcommand{\lra}{\longrightarrow}
Any comments or suggestions are appreciated.