src/Tools/Metis/src/problems2tptp.sml
author blanchet
Thu, 16 Sep 2010 07:30:15 +0200
changeset 39444 beabb8443ee4
parent 39443 e330437cd22a
child 39501 aaa7078fff55
permissions -rw-r--r--
MIT license -> BSD License
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
39348
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     1
(* ========================================================================= *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     2
(* SOME SAMPLE PROBLEMS TO TEST PROOF PROCEDURES                             *)
39444
beabb8443ee4 MIT license -> BSD License
blanchet
parents: 39443
diff changeset
     3
(* Copyright (c) 2001 Joe Hurd, distributed under the BSD License            *)
39348
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     4
(* ========================================================================= *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     5
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     6
open Useful;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     7
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     8
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
     9
(* The program name.                                                         *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    10
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    11
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    12
val PROGRAM = "problems2tptp";
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    13
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    14
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    15
(* Problem data.                                                             *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    16
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    17
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    18
use "problems.sml";
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    19
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    20
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    21
(* Helper functions.                                                         *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    22
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    23
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    24
fun addSlash "" = ""
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    25
  | addSlash dir =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    26
    if String.sub (dir, size dir - 1) = #"/" then dir
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    27
    else dir ^ "/";
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    28
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    29
fun checkProblems (problems : problem list) =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    30
    let
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    31
      fun dups [] = ()
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    32
        | dups [_] = ()
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    33
        | dups (x :: (xs as x' :: _)) =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    34
          if x <> x' then dups xs
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    35
          else raise Error ("duplicate problem name: " ^ x)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    36
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    37
      val names = sort String.compare (map #name problems)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    38
    in
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    39
      dups names
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    40
    end;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    41
39443
e330437cd22a copied the unmodified official Metis 2.3 (15 Sept. 2010) sources into Isabelle
blanchet
parents: 39353
diff changeset
    42
fun listProblem {name, comments = _, goal = _} = TextIO.print (name ^ "\n");
39348
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    43
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    44
fun outputProblem outputDir {name,comments,goal} =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    45
    let
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    46
      val filename = name ^ ".tptp"
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    47
      val filename =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    48
          case outputDir of
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    49
            NONE => filename
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    50
          | SOME dir => addSlash dir ^ filename
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    51
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    52
      val comment_bar = nChars #"-" 77
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    53
      val comment_footer =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    54
          ["TPTP file created by " ^ host () ^ " at " ^
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    55
           time () ^ " on " ^ date () ^ "."]
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    56
      val comments =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    57
          [comment_bar] @
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    58
          ["Name: " ^ name] @
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    59
          (if null comments then [] else "" :: comments) @
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    60
          (if null comment_footer then [] else "" :: comment_footer) @
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    61
          [comment_bar]
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    62
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    63
      val includes = []
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    64
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    65
      val formulas =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    66
          let
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    67
            val name = Tptp.FormulaName "goal"
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    68
            val role = Tptp.ConjectureRole
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    69
            val body = Tptp.FofFormulaBody (Formula.parse goal)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    70
            val source = Tptp.NoFormulaSource
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    71
          in
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    72
            [Tptp.Formula
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    73
               {name = name,
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    74
                role = role,
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    75
                body = body,
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    76
                source = source}]
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    77
          end
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    78
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    79
      val problem =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    80
          Tptp.Problem
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    81
            {comments = comments,
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    82
             includes = includes,
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    83
             formulas = formulas}
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    84
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    85
      val mapping = Tptp.defaultMapping
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    86
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    87
      val () =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    88
          Tptp.write
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    89
            {problem = problem,
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    90
             mapping = mapping,
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    91
             filename = filename}
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    92
    in
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    93
      ()
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    94
    end;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    95
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    96
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    97
(* Program options.                                                          *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    98
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
    99
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   100
datatype mode = OutputMode | ListMode;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   101
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   102
val MODE : mode ref = ref OutputMode;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   103
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   104
val COLLECTION : string option ref = ref NONE;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   105
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   106
val OUTPUT_DIRECTORY : string option ref = ref NONE;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   107
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   108
local
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   109
  open Useful Options;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   110
in
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   111
  val specialOptions =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   112
      [{switches = ["--collection"], arguments = ["C"],
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   113
        description = "restrict to the problems in collection C",
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   114
        processor =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   115
          beginOpt
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   116
            (stringOpt endOpt)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   117
            (fn _ => fn c => COLLECTION := SOME c)},
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   118
       {switches = ["--list"], arguments = [],
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   119
        description = "just list the problems",
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   120
        processor = beginOpt endOpt (fn _ => MODE := ListMode)},
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   121
       {switches = ["--output-dir"], arguments = ["DIR"],
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   122
        description = "the output directory",
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   123
        processor =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   124
          beginOpt
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   125
            (stringOpt endOpt)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   126
            (fn _ => fn d => OUTPUT_DIRECTORY := SOME d)}];
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   127
end;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   128
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   129
val VERSION = "1.0";
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   130
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   131
val versionString = PROGRAM^" v"^VERSION^"\n";
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   132
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   133
val programOptions =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   134
    {name    = PROGRAM,
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   135
     version = versionString,
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   136
     header  = "usage: "^PROGRAM^" [option ...]\n" ^
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   137
               "Outputs the set of sample problems in TPTP format.\n",
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   138
     footer  = "",
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   139
     options = specialOptions @ Options.basicOptions};
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   140
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   141
fun succeed () = Options.succeed programOptions;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   142
fun fail mesg = Options.fail programOptions mesg;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   143
fun usage mesg = Options.usage programOptions mesg;
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   144
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   145
val (opts,work) =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   146
    Options.processOptions programOptions (CommandLine.arguments ());
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   147
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   148
val () = if null work then () else usage "too many arguments";
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   149
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   150
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   151
(* Top level.                                                                *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   152
(* ------------------------------------------------------------------------- *)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   153
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   154
val () =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   155
let
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   156
  val problems =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   157
      case !COLLECTION of
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   158
        NONE => problems
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   159
      | SOME c => List.filter (isCollection c) problems
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   160
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   161
  val () = checkProblems problems
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   162
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   163
  val () =
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   164
      case !MODE of
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   165
        ListMode => app listProblem problems
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   166
      | OutputMode => app (outputProblem (!OUTPUT_DIRECTORY)) problems
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   167
in
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   168
  succeed ()
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   169
end
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   170
handle Error s => die (PROGRAM^" failed:\n" ^ s)
6f9c9899f99f new version of the Metis files
blanchet
parents:
diff changeset
   171
     | Bug s => die ("BUG found in "^PROGRAM^" program:\n" ^ s);