src/HOL/Tools/ATP/VampCommunication.ML
author wenzelm
Mon, 29 Aug 2005 16:18:04 +0200
changeset 17184 3d80209e9a53
parent 16675 96bdc59afc05
child 17305 6cef3aedd661
permissions -rw-r--r--
use AList operations;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16478
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
     1
(*  Title:      VampCommunication.ml
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
     2
    ID:         $Id$
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
     3
    Author:     Claire Quigley
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
     4
    Copyright   2004  University of Cambridge
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
     5
*)
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
     6
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
     7
(***************************************************************************)
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
     8
(*  Code to deal with the transfer of proofs from a Vamp process          *)
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
     9
(***************************************************************************)
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    10
signature VAMP_COMM =
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    11
  sig
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    12
    val reconstruct : bool ref
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    13
    val getVampInput : TextIO.instream -> string * string * string
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    14
    val checkVampProofFound:  TextIO.instream * TextIO.outstream * Posix.Process.pid * string *
16478
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    15
                               string *string * Thm.thm * int *(ResClause.clause * Thm.thm) Array.array  * int -> bool
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    16
16478
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    17
  end;
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    18
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    19
structure VampComm :VAMP_COMM =
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    20
struct
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    21
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    22
(* switch for whether to reconstruct a proof found, or just list the lemmas used *)
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    23
val reconstruct = ref true;
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    24
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    25
(***********************************)
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    26
(*  Write Vamp   output to a file *)
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    27
(***********************************)
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    28
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    29
fun logVampInput (instr, fd) =
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    30
    let val thisLine = TextIO.inputLine instr
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    31
    in if (thisLine = "%==============  End of proof. ==================\n" )
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    32
       then TextIO.output (fd, thisLine)
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    33
       else (
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    34
             TextIO.output (fd, thisLine); logVampInput (instr,fd))
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    35
    end;
16478
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    36
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    37
(**********************************************************************)
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    38
(*  Reconstruct the Vamp proof w.r.t. thmstring (string version of   *)
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    39
(*  Isabelle goal to be proved), then transfer the reconstruction     *)
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    40
(*  steps as a string to the input pipe of the main Isabelle process  *)
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    41
(**********************************************************************)
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    42
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    43
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    44
val atomize_tac =
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    45
    SUBGOAL
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    46
     (fn (prop,_) =>
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    47
         let val ts = Logic.strip_assums_hyp prop
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    48
         in EVERY1
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    49
                [METAHYPS
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    50
                     (fn hyps => (cut_facts_tac (map (ObjectLogic.atomize_thm o forall_intr_vars) hyps) 1)),
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    51
          REPEAT_DETERM_N (length ts) o (etac thin_rl)]
16478
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    52
     end);
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    53
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    54
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    55
fun reconstruct_tac proofextract thmstring goalstring toParent ppid sg_num clause_arr  (num_of_clauses:int ) =
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    56
  let val foo =   TextIO.openOut( File.platform_path(File.tmp_path (Path.basic"foobar3")));
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    57
  in
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    58
    SELECT_GOAL
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    59
      (EVERY1 [rtac ccontr,atomize_tac, skolemize_tac,
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    60
               METAHYPS(fn negs =>
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    61
                           ((*if !reconstruct
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    62
                              then
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    63
                                Recon_Transfer.vampString_to_reconString proofextract thmstring goalstring
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    64
                                                                         toParent ppid negs clause_arr  num_of_clauses
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    65
                              else*)
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    66
                            Recon_Transfer.vampString_to_lemmaString proofextract thmstring goalstring
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    67
                                                                     toParent ppid negs clause_arr  num_of_clauses ))]) sg_num
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    68
  end ;
16478
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    69
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    70
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    71
fun transferVampInput (fromChild, toParent, ppid,thmstring,goalstring, currentString, thm, sg_num,clause_arr,  num_of_clauses) =
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    72
  let
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    73
    val thisLine = TextIO.inputLine fromChild
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    74
  in
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    75
    if (thisLine = "%==============  End of proof. ==================\n" )
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    76
    then (
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    77
          let val proofextract = Recon_Parse.extract_proof (currentString^thisLine)
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    78
              val foo =   TextIO.openOut( File.platform_path(File.tmp_path (Path.basic"foobar2")));
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    79
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    80
          in
16478
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    81
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    82
            TextIO.output(foo,(proofextract));TextIO.closeOut foo;
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    83
            reconstruct_tac proofextract thmstring goalstring toParent ppid sg_num  clause_arr  num_of_clauses thm
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    84
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    85
          end
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    86
            )
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    87
    else (
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    88
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    89
          transferVampInput (fromChild, toParent, ppid,thmstring, goalstring,(currentString^thisLine), thm, sg_num, clause_arr,  num_of_clauses)
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    90
          )
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
    91
  end;
16478
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    92
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    93
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    94
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    95
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    96
(*********************************************************************************)
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    97
(*  Inspect the output of a Vamp   process to see if it has found a proof,      *)
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    98
(*  and if so, transfer output to the input pipe of the main Isabelle process    *)
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
    99
(*********************************************************************************)
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
   100
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   101
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   102
fun startVampTransfer (fromChild, toParent, ppid, thmstring,goalstring,childCmd,thm, sg_num,clause_arr, num_of_clauses) =
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   103
    (*let val _ = Posix.Process.wait ()
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   104
      in*)
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   105
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   106
    if (isSome (TextIO.canInput(fromChild, 5)))
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   107
    then
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   108
      (
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   109
       let val thisLine = TextIO.inputLine fromChild
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   110
       in
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   111
         if (thisLine = "%================== Proof: ======================\n")
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   112
         then
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   113
           (
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   114
            let
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   115
              val outfile =  TextIO.openAppend(File.platform_path(File.tmp_path (Path.basic "foo_transfer")));
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   116
                  val _=  TextIO.output (outfile, "about to transfer proof, thm is: "^(string_of_thm thm));
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   117
                      val _ =  TextIO.closeOut outfile;
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   118
            in
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   119
              transferVampInput (fromChild, toParent, ppid,thmstring, goalstring,thisLine, thm, sg_num,clause_arr,  num_of_clauses);
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   120
              true
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   121
            end)
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   122
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   123
         else
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   124
           (
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   125
            startVampTransfer (fromChild, toParent, ppid, thmstring, goalstring,childCmd, thm, sg_num,clause_arr, num_of_clauses)
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   126
            )
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   127
       end
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   128
         )
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   129
    else (false)
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   130
(*  end*)
16478
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
   131
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
   132
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
   133
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   134
fun checkVampProofFound (fromChild, toParent, ppid,thmstring,goalstring, childCmd, thm, sg_num, clause_arr,  (num_of_clauses:int )) =
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   135
    let val vamp_proof_file =  TextIO.openAppend(File.platform_path(File.tmp_path (Path.basic "vamp_proof")))
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   136
        val  outfile = TextIO.openOut(File.platform_path(File.tmp_path (Path.basic "foo_checkvamp")));
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   137
             val _ = TextIO.output (outfile, "checking if proof found, thm is: "^(string_of_thm thm))
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   138
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   139
             val _ =  TextIO.closeOut outfile
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   140
    in
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   141
      if (isSome (TextIO.canInput(fromChild, 5)))
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   142
      then
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   143
        (
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   144
         let val thisLine = TextIO.inputLine fromChild
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   145
         in if (thisLine = "% Proof found. Thanks to Tanya!\n" )
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   146
            then
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   147
              (
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   148
               let val  outfile = TextIO.openOut(File.platform_path(File.tmp_path (Path.basic "foo_proof")));                                                                                (*val _ =  Posix.Process.sleep(Time.fromSeconds 3 );*)
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   149
                        val _ = TextIO.output (outfile, (thisLine))
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   150
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   151
                        val _ =  TextIO.closeOut outfile
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   152
               in
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   153
                 startVampTransfer (fromChild, toParent, ppid, thmstring,goalstring,childCmd, thm, sg_num, clause_arr,  num_of_clauses)
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   154
               end
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   155
                 )
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   156
            else if (thisLine = "% Unprovable.\n" )
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   157
            then
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   158
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   159
              (
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   160
               let    val  outfile = TextIO.openOut(File.platform_path(File.tmp_path (Path.basic "foo_proof")));                                                                               (* val _ =  Posix.Process.sleep(Time.fromSeconds 3 );*)
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   161
                           val _ = TextIO.output (outfile, (thisLine))
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   162
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   163
                           val _ =  TextIO.closeOut outfile
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   164
               in
16478
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
   165
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   166
                 TextIO.output (toParent,childCmd^"\n" );
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   167
                 TextIO.flushOut toParent;
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   168
                 TextIO.output (vamp_proof_file, (thisLine));
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   169
                 TextIO.flushOut vamp_proof_file;
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   170
                 TextIO.closeOut vamp_proof_file;
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   171
                 (*TextIO.output (toParent, thisLine);
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   172
                  TextIO.flushOut toParent;
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   173
                  TextIO.output (toParent, "bar\n");
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   174
                  TextIO.flushOut toParent;*)
16478
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
   175
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   176
                 TextIO.output (toParent, thisLine^"\n");
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   177
                 TextIO.flushOut toParent;
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   178
                 TextIO.output (toParent, thmstring^"\n");
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   179
                 TextIO.flushOut toParent;
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   180
                 TextIO.output (toParent, goalstring^"\n");
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   181
                 TextIO.flushOut toParent;
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   182
                 Posix.Process.kill(Posix.Process.K_PROC ppid, Posix.Signal.usr2);
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   183
                 (* Attempt to prevent several signals from turning up simultaneously *)
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   184
                 Posix.Process.sleep(Time.fromSeconds 1);
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   185
                 true
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   186
               end)
16675
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   187
            else if (thisLine = "% Proof not found. Time limit expired.\n")
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   188
            then
16675
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   189
              (let    val  outfile = TextIO.openOut(File.platform_path(File.tmp_path (Path.basic "foo_proof")));                                                                               (* val _ =  Posix.Process.sleep(Time.fromSeconds 3 );*)
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   190
                           val _ = TextIO.output (outfile, (thisLine))
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   191
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   192
                           val _ =  TextIO.closeOut outfile
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   193
               in
16478
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
   194
16675
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   195
                 TextIO.output (toParent,childCmd^"\n" );
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   196
                 TextIO.flushOut toParent;
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   197
                 TextIO.output (vamp_proof_file, (thisLine));
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   198
                 TextIO.flushOut vamp_proof_file;
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   199
                 TextIO.closeOut vamp_proof_file;
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   200
                 (*TextIO.output (toParent, thisLine);
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   201
                  TextIO.flushOut toParent;
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   202
                  TextIO.output (toParent, "bar\n");
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   203
                  TextIO.flushOut toParent;*)
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   204
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   205
                 TextIO.output (toParent, thisLine^"\n");
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   206
                 TextIO.flushOut toParent;
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   207
                 TextIO.output (toParent, thmstring^"\n");
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   208
                 TextIO.flushOut toParent;
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   209
                 TextIO.output (toParent, goalstring^"\n");
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   210
                 TextIO.flushOut toParent;
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   211
                 Posix.Process.kill(Posix.Process.K_PROC ppid, Posix.Signal.usr2);
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   212
                 (* Attempt to prevent several signals from turning up simultaneously *)
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   213
                 Posix.Process.sleep(Time.fromSeconds 1);
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   214
                 true
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   215
               end
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   216
              )
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   217
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   218
            else
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   219
              (TextIO.output (vamp_proof_file, (thisLine));
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   220
               TextIO.flushOut vamp_proof_file;
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   221
               checkVampProofFound  (fromChild, toParent, ppid, thmstring,goalstring,childCmd, thm, sg_num, clause_arr,  num_of_clauses))
16478
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
   222
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   223
         end
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   224
           )
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   225
      else
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   226
        (TextIO.output (vamp_proof_file, ("No proof output seen \n"));TextIO.closeOut vamp_proof_file;false)
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   227
    end
16478
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
   228
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   229
16478
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
   230
(***********************************************************************)
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
   231
(*  Function used by the Isabelle process to read in a vamp proof   *)
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
   232
(***********************************************************************)
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
   233
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   234
fun getVampInput instr =
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   235
    if (isSome (TextIO.canInput(instr, 2)))
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   236
    then
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   237
      let val thisLine = TextIO.inputLine instr
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   238
          val  outfile = TextIO.openOut(File.platform_path(File.tmp_path (Path.basic "foo_thisLine")));                                                                     val _ = TextIO.output (outfile, (thisLine))
16478
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
   239
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   240
                                                                                                                                                                            val _ =  TextIO.closeOut outfile
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   241
      in    (* reconstructed proof string *)
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   242
        if ( (substring (thisLine, 0,1))= "[")
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   243
        then
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   244
          (*Pretty.writeln(Pretty.str (thisLine))*)
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   245
          let val reconstr = thisLine
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   246
              val thmstring = TextIO.inputLine instr
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   247
              val goalstring = TextIO.inputLine instr
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   248
          in
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   249
            (reconstr, thmstring, goalstring)
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   250
          end
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   251
        else if (thisLine = "% Unprovable.\n" )
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   252
        then
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   253
          (
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   254
           let val reconstr = thisLine
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   255
               val thmstring = TextIO.inputLine instr
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   256
               val goalstring = TextIO.inputLine instr
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   257
           in
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   258
             (reconstr, thmstring, goalstring)
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   259
           end
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   260
             )
16675
96bdc59afc05 Streamlined the signal handler in watcher.ML
quigley
parents: 16480
diff changeset
   261
        else  if (thisLine = "% Proof not found. Time limit expired.\n")
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   262
        then
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   263
          (
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   264
           let val reconstr = thisLine
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   265
               val thmstring = TextIO.inputLine instr
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   266
               val goalstring = TextIO.inputLine instr
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   267
           in
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   268
             (reconstr, thmstring, goalstring)
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   269
           end
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   270
             )
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   271
        else if (String.isPrefix   "Rules from"  thisLine)
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   272
        then
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   273
          (
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   274
           let val reconstr = thisLine
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   275
               val thmstring = TextIO.inputLine instr
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   276
               val goalstring = TextIO.inputLine instr
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   277
           in
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   278
             (reconstr, thmstring, goalstring)
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   279
           end
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   280
             )
16478
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
   281
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   282
        else if (thisLine = "Proof found but translation failed!")
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   283
        then
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   284
          (
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   285
           let val reconstr = thisLine
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   286
               val thmstring = TextIO.inputLine instr
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   287
               val goalstring = TextIO.inputLine instr
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   288
               val  outfile = TextIO.openOut(File.platform_path(File.tmp_path (Path.basic "foo_getVamp")));
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   289
                    val _ = TextIO.output (outfile, (thisLine))
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   290
                    val _ =  TextIO.closeOut outfile
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   291
           in
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   292
             (reconstr, thmstring, goalstring)
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   293
           end
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   294
             )
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   295
        else
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   296
          getVampInput instr
16478
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
   297
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   298
      end
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   299
    else
abf475cf11f2 improved formatting;
wenzelm
parents: 16478
diff changeset
   300
      ("No output from reconstruction process.\n","","")
16478
d0a1f6231e2f Added VampCommunication.ML.
quigley
parents:
diff changeset
   301
end;