Skip to content

Latest commit

 

History

History
 
 

metis

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                       HOL4 Metis Library Documentation

Quick Guide to Using the HOL4 Metis Library

   At the top of your proof script, write

     load "metisLib";
     open metisLib;

   Opening the Metis library makes available the automatic provers

       METIS_TAC : thm list -> tactic
     METIS_PROVE : thm list -> term -> thm

   which both take a list of theorems that are used to prove the subgoal.

Examples

   prove (``?x. x``, METIS_TAC []);

   prove (``!x. ~(x = 0) ==> ?!y. x = SUC y``,
          METIS_TAC [numTheory.INV_SUC, arithmeticTheory.num_CASES]);

   METIS_PROVE [prim_recTheory.LESS_SUC_REFL, arithmeticTheory.num_CASES]
   ``(!P. (!n. (!m. m < n ==> P m) ==> P n) ==> !n. P n) ==>
     !P. P 0 /\ (!n. P n ==> P (SUC n)) ==> !n. P n``;

How It Works

   This is how METIS_TAC proves a HOL subgoal:

    1. First some HOL conversions and tactics simplify the subgoal and convert
       it to conjunctive normal form.
    2. The normalized problem is mapped to first-order syntax.
    3. The Metis first-order prover attacks the first-order problem, hopefully
       deriving a refutation.
    4. The first-order refutation is translated to a HOL proof of the original
       subgoal.

   For more details on the interface please refer to the [1]System Description.
   To find out more about the Metis first-order prover (including performance
   information) you can visit its [2]own web page.

Comparison with MESON_TAC

   METIS_TAC is generally slower than MESON_TAC on simple problems, but has
   better coverage. For example, MESON_TAC cannot prove the following theorems:

     METIS_PROVE [] ``?x. x``;
     METIS_PROVE [] ``p (\x. x) /\ q ==> q /\ p (\y. y)``;

   The combination of model elimination and resolution calculi in METIS_TAC
   allows some hard theorems to be proved that are too deep for the HOL version
   of MESON_TAC, such as the GILMORE_9 and STEAM_ROLLER problems. Also, the
   ordered paramodulation used by the resolution component of METIS_TAC allows
   it to prove harder equality problems. An example to illustrate this is the
   following theorem:

     METIS_PROVE []
     ``(!x y. x * y = y * x) /\ (!x y z. x * y * z = x * (y * z)) ==>
      a * b * c * d * e * f = f * e * d * c * b * a``;

Known Bugs

   At the present time all the bugs are unknown.

Credits

   The HOL4 Metis library was written by Joe Hurd, based on John Harrison's
   implementation of MESON_TAC. The library has been much improved by feedback
   from HOL4 users, especially Michael Norrish, Konrad Slind and Mike Gordon.

Change Log

     * Implemented a HOL specific finite model, which knows about numbers,
       lists and sets.
     * Removed multiple provers, METIS_TAC is now solely based on ordered
       resolution.
     * Changed the normalization to eliminate let terms.

  Version 1.5: 14 January 2004

   Subgoals proved by MESON_TAC when HOL is built .......... 2010
   Proved by METIS_TAC within 10s .......................... 1998

  Between Versions 1.4 and 1.5

     * Scheduling provers is no longer based on time used, but rather number of
       inferences.
     * Simplification of resolution clauses using disequation literals.
     * Implemented finite models to guide clause selection in resolution.
     * The model elimination prover optimizes the order of rules and literals
       within rules.

  Version 1.4: 2 October 2003

   Subgoals proved by MESON_TAC when HOL is built .......... 1982
   Proved by METIS_TAC within 10s .......................... 1977

  Between Versions 1.3 and 1.4

     * Added an ordered resolution prover to the default set.
     * Improved resolution performance with a special-purpose datatype for
       inter-reducing equations.

  Version 1.3: 18 June 2003

   Subgoals proved by MESON_TAC when HOL is built .......... 1976
   Proved by METIS_TAC within 10s .......................... 1971

  Between Versions 1.2 and 1.3

     * Implemention of definitional CNF to reduce blow-up in number of clauses
       (usually caused by nested boolean equivalences).
     * Resolution is more robust and efficient, and includes an option (off by
       default) for clauses to inherit ordering constraints.

  Version 1.2: 19 November 2002

   Subgoals proved by MESON_TAC when HOL is built .......... 1779
   Proved by METIS_TAC within 10s .......................... 1774

  Between Versions 1.1 and 1.2

     * Ground-up rewrite of the resolution calculus, which now performs ordered
       resolution and ordered paramodulation.
     * A single entry-point METIS_TAC, which uses heuristics to decide whether
       to apply FO_METIS_TAC or HO_METIS_TAC.
     * {HO|FO}_METIS_TAC  both  initially  operate  in typeless mode, and
       automatically try again with types if an error occurs during proof
       translation.
     * Extensionality theorem now included in HO_METIS_TAC by default.

  Version 1.1: 21 September 2002

   Subgoals proved by MESON_TAC when HOL is built .......... 1745
   Proved by FO_METIS_TAC within 10s ....................... 1485
   Proved by HO_METIS_TAC within 10s ....................... 1698
   Proved by one of {FO|HO}_METIS_TAC within 10s ........... 1717

  Between Versions 1.0 and 1.1

     * Added a "metis" entry to the HOL trace system: it nows prints status
       information during proof (if HOL is in interactive mode).
     * Restricted (universal and existential) quantifiers are now normalized by
       the NNF conversion.
     * Improved performance in the model elimination proof procedure with
       better caching (following a suggestion from John Harrison).
     * First-order substitutions are now fully Boultonized.
     * The  first-order  logical  kernel automatically performs peep-hole
       optimizations to keep proofs as small as possible.

  Version 1.0: 18 July 2002

   Subgoals proved by MESON_TAC when HOL is built .......... 1435
   Proved by FO_METIS_TAC within 10s ....................... 1240
   Proved by HO_METIS_TAC within 10s ....................... 1346
   Proved by one of {FO|HO}_METIS_TAC within 10s ........... 1389

   Metis the moon of Jupiter

References

   1. http://www.cl.cam.ac.uk/~jeh1004/research/papers/hol2fol.html
   2. http://www.cl.cam.ac.uk/~jeh1004/software/metis