j'Imp Theorem Prover


j'Imp (alias jImp) is an automatic theorem prover based on set of support and ordered resolution for first-order logic. It supports clause indexing techniques, subsumption, and tautology elimination. For propositional inference, j'Imp provides the special Davis-Putnam-Loveland-Logemann (DPLL) inference procedure, which is very similar to tableaux proving. j'Imp has been implemented in Java and is available along with its reusable components as a part of the Orbital library.


The easiest way to use the j'Imp theorem prover is to download the Orbital library and start one of the following scripts

Then type the following first-order formula as an input to show that all transitive irreflexive relations are asymmetric:
  (all a all b all c (r(a,b)&r(b,c)=>r(a,c))) && (all a ~r(a,a))
  |=  all a all b (r(a,b)=>~r(b,a))
See Full syntax of formulas.

You can also just tell j'Imp to prove or disprove a couple of test cases by calling

bin/jimp all none properties fol

Call bin/jimp --help to see further options and to get more information on the available configuration options and prover profiles of j'Imp.
usage: [options] [all|none|properties|fol|<filename>|table]
 all         prove important semantic-equivalence expressions
 none        try to prove some semantic-garbage expressions
 properties  prove some properties of classical logic inference relation
 fol         prove important equivalences of first-order logic

 <filename>  try to prove all expressions in the given file
 table       print a function table of the expression instead
 -           Use no arguments at all to be asked for expressions to prove.

-inference=<prover>  use the specified prover
            for choices of <prover>, see list below
-normalForm check conjunctive and disjunctive forms of formulas
-closure    print universal/existential closures of formulas
-verbose    be more verbose (f.ex. print normal forms if -normalForm)
-charset=<enc>  the character set or encoding to use for reading files
-problem    parse a problem file, i.e. combine all lines into a single
            problem, instead of assuming single-line conjectures.

To check whether A and B are equivalent, enter '|= A<->B' or 'A == B'.
Use -verbose --help to get more help.

Available theorem provers:
   First-order resolution prover with set of support and clausal indexing
   First-order resolution prover based on heuristic search
   with set of support and clausal indexing
   Naive first-order resolution prover based on saturation
   Propositional DPLL procedure
   Propositional inference using simple semantic truth-tables


In addition to the standalone theorem prover application, j'Imp provides components reusable in more general settings. j'Imp include facilities for unified formula representation, flexible type-systems, formal language definition, logical inference systems, term rewrite systems, unification, term and formula parsing, formula evaluation, clause representation, classical logic, modal logic, fuzzy logic, and utilities for formula manipulation like conjunctive normal form or formatting.


The theorem prover j'Imp and its reusable components are written in Java and part of the