src/HOL/Tools/ATP/VampireCommunication.ML
author wenzelm
Mon, 29 Aug 2005 16:18:04 +0200
changeset 17184 3d80209e9a53
parent 16839 d7b47195ac7b
permissions -rw-r--r--
use AList operations;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16839
d7b47195ac7b proper structure;
wenzelm
parents: 16480
diff changeset
     1
(*  Title:      VampireCommunication.ML
15789
4cb16144c81b added hearder lines and deleted some redundant material
paulson
parents: 15642
diff changeset
     2
    ID:         $Id$
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     3
    Author:     Claire Quigley
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     4
    Copyright   2004  University of Cambridge
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     5
*)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     6
16839
d7b47195ac7b proper structure;
wenzelm
parents: 16480
diff changeset
     7
structure VampireCommunication =
d7b47195ac7b proper structure;
wenzelm
parents: 16480
diff changeset
     8
struct
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
     9
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    10
(***************************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    11
(*  Code to deal with the transfer of proofs from a Vampire process        *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    12
(***************************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    13
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    14
(***********************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    15
(*  Write vampire output to a file *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    16
(***********************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    17
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    18
fun logVampInput (instr, fd) =
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    19
    let val thisLine = TextIO.inputLine instr
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    20
    in if thisLine = "%==============  End of proof. ==================\n"
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    21
       then TextIO.output (fd, thisLine)
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    22
       else (
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    23
             TextIO.output (fd, thisLine); logVampInput (instr,fd))
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    24
    end;
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    25
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    26
(**********************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    27
(*  Transfer the vampire output from the watcher to the input pipe of *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    28
(*  the main Isabelle process                                         *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    29
(**********************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    30
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    31
fun transferVampInput (fromChild, toParent, ppid) =
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    32
    let
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    33
      val thisLine = TextIO.inputLine fromChild
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    34
    in
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    35
      if (thisLine = "%==============  End of proof. ==================\n" )
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    36
      then (
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    37
            TextIO.output (toParent, thisLine);
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    38
            TextIO.flushOut toParent
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    39
            )
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    40
      else (
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    41
            TextIO.output (toParent, thisLine);
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    42
            TextIO.flushOut toParent;
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    43
            transferVampInput (fromChild, toParent, ppid)
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    44
            )
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    45
    end;
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    46
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    47
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    48
(*********************************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    49
(*  Inspect the output of a vampire process to see if it has found a proof,      *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    50
(*  and if so, transfer output to the input pipe of the main Isabelle process    *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    51
(*********************************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    52
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    53
fun startVampireTransfer (fromChild, toParent, ppid, childCmd) =
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    54
    if (isSome (TextIO.canInput(fromChild, 5)))
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    55
    then
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    56
      (
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    57
       let val thisLine = TextIO.inputLine fromChild
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    58
       in
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    59
         if (thisLine = "% Proof found. Thanks to Tanya!\n" )
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    60
         then
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    61
           (
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    62
            Posix.Process.kill(Posix.Process.K_PROC ppid, Posix.Signal.usr1);
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    63
            TextIO.output (toParent,childCmd^"\n" );
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    64
            TextIO.flushOut toParent;
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    65
            TextIO.output (toParent, thisLine);
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    66
            TextIO.flushOut toParent;
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    67
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    68
            transferVampInput (fromChild, toParent, ppid);
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    69
            true)
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    70
         else if (thisLine = "% Unprovable.\n" )
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    71
         then
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    72
           (
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    73
            Posix.Process.kill(Posix.Process.K_PROC ppid, Posix.Signal.usr1);
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    74
            TextIO.output (toParent,childCmd^"\n" );
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    75
            TextIO.flushOut toParent;
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    76
            TextIO.output (toParent, thisLine);
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    77
            TextIO.flushOut toParent;
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    78
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    79
            true)
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    80
         else if (thisLine = "% Proof not found.\n")
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    81
         then
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    82
           (Posix.Process.kill(Posix.Process.K_PROC ppid, Posix.Signal.usr1);
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    83
            TextIO.output (toParent,childCmd^"\n" );
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    84
            TextIO.flushOut toParent;
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    85
            TextIO.output (toParent, thisLine);
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    86
            TextIO.flushOut toParent;
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    87
            true)
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    88
         else
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    89
           (
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    90
            startVampireTransfer (fromChild, toParent, ppid, childCmd)
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    91
            )
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    92
       end
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    93
         )
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    94
    else (false)
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    95
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    96
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    97
(***********************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    98
(*  Function used by the Isabelle process to read in a vampire proof   *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    99
(***********************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
   100
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   101
fun getVampInput instr =
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   102
  let val thisLine = TextIO.inputLine instr
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   103
  in
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   104
    if thisLine = "%==============  End of proof. ==================\n" then
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   105
      Pretty.writeln (Pretty.str (concat ["vampire", thisLine]))
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   106
    else if thisLine = "% Unprovable.\n" then
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   107
      Pretty.writeln (Pretty.str (concat ["vampire", thisLine]))
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   108
    else if thisLine = "% Proof not found.\n" then
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   109
      Pretty.writeln (Pretty.str (concat ["vampire", thisLine]))
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   110
    else
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   111
      (Pretty.writeln (Pretty.str (concat ["vampire", thisLine])); getVampInput instr)
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   112
  end;
16839
d7b47195ac7b proper structure;
wenzelm
parents: 16480
diff changeset
   113
d7b47195ac7b proper structure;
wenzelm
parents: 16480
diff changeset
   114
end;