src/HOL/TPTP/TPTP_Interpret.thy
author blanchet
Thu, 07 Aug 2014 12:17:41 +0200
changeset 57810 2479dc4ef90b
parent 57796 07521fed6071
child 57813 0a84dc31601f
permissions -rw-r--r--
test driver
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
47509
6f215c2ebd72 split TPTP_Parser thy -- parser can rely on smaller image, whereas TPTP_Interpret requires HOL;
sultana
parents:
diff changeset
     1
(*  Title:      HOL/TPTP/TPTP_Interpret.thy
6f215c2ebd72 split TPTP_Parser thy -- parser can rely on smaller image, whereas TPTP_Interpret requires HOL;
sultana
parents:
diff changeset
     2
    Author:     Nik Sultana, Cambridge University Computer Laboratory
6f215c2ebd72 split TPTP_Parser thy -- parser can rely on smaller image, whereas TPTP_Interpret requires HOL;
sultana
parents:
diff changeset
     3
6f215c2ebd72 split TPTP_Parser thy -- parser can rely on smaller image, whereas TPTP_Interpret requires HOL;
sultana
parents:
diff changeset
     4
Importing TPTP files into Isabelle/HOL: parsing TPTP formulas and
6f215c2ebd72 split TPTP_Parser thy -- parser can rely on smaller image, whereas TPTP_Interpret requires HOL;
sultana
parents:
diff changeset
     5
interpreting them as HOL terms (i.e. importing types and type-checking the terms)
6f215c2ebd72 split TPTP_Parser thy -- parser can rely on smaller image, whereas TPTP_Interpret requires HOL;
sultana
parents:
diff changeset
     6
*)
6f215c2ebd72 split TPTP_Parser thy -- parser can rely on smaller image, whereas TPTP_Interpret requires HOL;
sultana
parents:
diff changeset
     7
6f215c2ebd72 split TPTP_Parser thy -- parser can rely on smaller image, whereas TPTP_Interpret requires HOL;
sultana
parents:
diff changeset
     8
theory TPTP_Interpret
57796
07521fed6071 correctly interpret arithmetic types
blanchet
parents: 48891
diff changeset
     9
imports Complex_Main TPTP_Parser
47509
6f215c2ebd72 split TPTP_Parser thy -- parser can rely on smaller image, whereas TPTP_Interpret requires HOL;
sultana
parents:
diff changeset
    10
keywords "import_tptp" :: thy_decl
48891
c0eafbd55de3 prefer ML_file over old uses;
wenzelm
parents: 47519
diff changeset
    11
begin
c0eafbd55de3 prefer ML_file over old uses;
wenzelm
parents: 47519
diff changeset
    12
57796
07521fed6071 correctly interpret arithmetic types
blanchet
parents: 48891
diff changeset
    13
typedecl ind
47509
6f215c2ebd72 split TPTP_Parser thy -- parser can rely on smaller image, whereas TPTP_Interpret requires HOL;
sultana
parents:
diff changeset
    14
57796
07521fed6071 correctly interpret arithmetic types
blanchet
parents: 48891
diff changeset
    15
ML_file "TPTP_Parser/tptp_interpret.ML"
48891
c0eafbd55de3 prefer ML_file over old uses;
wenzelm
parents: 47519
diff changeset
    16
57810
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    17
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    18
ML {*
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    19
open ATP_Util
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    20
open ATP_Problem
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    21
open ATP_Proof
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    22
open ATP_Problem_Generate
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    23
open ATP_Systems
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    24
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    25
fun exploded_absolute_path file_name =
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    26
  Path.explode file_name
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    27
  |> (fn path => path |> not (Path.is_absolute path) ? Path.append (Path.explode "$PWD"))
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    28
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    29
fun read_tptp_file thy postproc file_name =
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    30
  let
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    31
    fun has_role role (_, role', _, _) = (role' = role)
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    32
    fun get_prop f (name, _, P, _) =
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    33
      let val P' = P |> f |> close_form in
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    34
        (name, P') |> postproc
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    35
      end
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    36
    val path = exploded_absolute_path file_name
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    37
    val ((_, _, problem), thy) =
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    38
      TPTP_Interpret.interpret_file true [Path.dir path, Path.explode "$TPTP"]
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    39
                                    path [] [] thy
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    40
    val (conjs, defs_and_nondefs) =
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    41
      problem |> List.partition (has_role TPTP_Syntax.Role_Conjecture)
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    42
              ||> List.partition (has_role TPTP_Syntax.Role_Definition)
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    43
  in
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    44
    (map (get_prop I) conjs,
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    45
     pairself (map (get_prop Logic.varify_global)) defs_and_nondefs,
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    46
     Proof_Context.init_global thy)
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    47
  end
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    48
*}
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    49
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    50
declare [[ML_exception_trace]]
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    51
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    52
setup {*
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    53
snd o Theory.specify_const ((@{binding c}, @{typ "'b * 'a"}), NoSyn)
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    54
*}
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    55
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    56
ML {* Sign.the_const_type @{theory} @{const_name c} *}
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    57
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    58
declare [[ML_print_depth = 1000]]
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    59
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    60
ML {*
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    61
let
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    62
  val (conjs, (defs, nondefs), _) = read_tptp_file @{theory} snd (* "/Users/blanchet/tmp/e.tptp" *)
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    63
    "/Users/blanchet/.isabelle/prob_alt_ergo_1"
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    64
  val ts = conjs @ defs @ nondefs
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    65
    |> map (map_aterms (fn Const (s, T) =>
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    66
        if String.isPrefix "TPTP" s then
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    67
          Const (s |> Long_Name.base_name |> perhaps (try (unprefix "bnd_")), T)
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    68
        else
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    69
          Const (s, T)
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    70
      | t => t))
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    71
in
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    72
  tracing (cat_lines (map (Syntax.string_of_term_global @{theory}) ts));
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    73
  tracing (cat_lines (map @{make_string} ts))
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    74
end
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    75
*}
2479dc4ef90b test driver
blanchet
parents: 57796
diff changeset
    76
47509
6f215c2ebd72 split TPTP_Parser thy -- parser can rely on smaller image, whereas TPTP_Interpret requires HOL;
sultana
parents:
diff changeset
    77
end