src/HOL/Tools/ATP/VampireCommunication.ML
author nipkow
Thu, 07 Jul 2005 12:36:56 +0200
changeset 16732 1bbe526a552c
parent 16480 abf475cf11f2
child 16839 d7b47195ac7b
permissions -rw-r--r--
Used to be part of Finite_Set (or was it SetInterval?) Added binomial thm.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15642
028059faa963 *** empty log message ***
quigley
parents:
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
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
     7
(* FIXME proper structure definition *)
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
     8
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
     9
(***************************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    10
(*  Code to deal with the transfer of proofs from a Vampire process        *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    11
(***************************************************************************)
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
(*  Write vampire output to a file *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    15
(***********************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    16
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    17
fun logVampInput (instr, fd) =
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    18
    let val thisLine = TextIO.inputLine instr
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    19
    in if thisLine = "%==============  End of proof. ==================\n"
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    20
       then TextIO.output (fd, thisLine)
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    21
       else (
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    22
             TextIO.output (fd, thisLine); logVampInput (instr,fd))
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    23
    end;
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    24
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    25
(**********************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    26
(*  Transfer the vampire output from the watcher to the input pipe of *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    27
(*  the main Isabelle process                                         *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    28
(**********************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    29
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    30
fun transferVampInput (fromChild, toParent, ppid) =
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    31
    let
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    32
      val thisLine = TextIO.inputLine fromChild
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    33
    in
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    34
      if (thisLine = "%==============  End of proof. ==================\n" )
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    35
      then (
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    36
            TextIO.output (toParent, thisLine);
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    37
            TextIO.flushOut toParent
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    38
            )
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    39
      else (
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    40
            TextIO.output (toParent, thisLine);
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    41
            TextIO.flushOut toParent;
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    42
            transferVampInput (fromChild, toParent, ppid)
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    43
            )
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    44
    end;
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    45
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
(*  Inspect the output of a vampire process to see if it has found a proof,      *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    49
(*  and if so, transfer output to the input pipe of the main Isabelle process    *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    50
(*********************************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    51
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    52
fun startVampireTransfer (fromChild, toParent, ppid, childCmd) =
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    53
    if (isSome (TextIO.canInput(fromChild, 5)))
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    54
    then
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    55
      (
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    56
       let val thisLine = TextIO.inputLine fromChild
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    57
       in
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    58
         if (thisLine = "% Proof found. Thanks to Tanya!\n" )
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    59
         then
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    60
           (
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    61
            Posix.Process.kill(Posix.Process.K_PROC ppid, Posix.Signal.usr1);
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    62
            TextIO.output (toParent,childCmd^"\n" );
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    63
            TextIO.flushOut toParent;
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    64
            TextIO.output (toParent, thisLine);
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    65
            TextIO.flushOut toParent;
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    66
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    67
            transferVampInput (fromChild, toParent, ppid);
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    68
            true)
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    69
         else if (thisLine = "% Unprovable.\n" )
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    70
         then
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    71
           (
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    72
            Posix.Process.kill(Posix.Process.K_PROC ppid, Posix.Signal.usr1);
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    73
            TextIO.output (toParent,childCmd^"\n" );
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    74
            TextIO.flushOut toParent;
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    75
            TextIO.output (toParent, thisLine);
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    76
            TextIO.flushOut toParent;
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    77
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    78
            true)
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    79
         else if (thisLine = "% Proof not found.\n")
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    80
         then
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    81
           (Posix.Process.kill(Posix.Process.K_PROC ppid, Posix.Signal.usr1);
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    82
            TextIO.output (toParent,childCmd^"\n" );
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    83
            TextIO.flushOut toParent;
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    84
            TextIO.output (toParent, thisLine);
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    85
            TextIO.flushOut toParent;
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    86
            true)
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    87
         else
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    88
           (
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    89
            startVampireTransfer (fromChild, toParent, ppid, childCmd)
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    90
            )
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    91
       end
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    92
         )
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
    93
    else (false)
15642
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    94
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
(*  Function used by the Isabelle process to read in a vampire proof   *)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    98
(***********************************************************************)
028059faa963 *** empty log message ***
quigley
parents:
diff changeset
    99
16480
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   100
fun getVampInput instr =
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   101
  let val thisLine = TextIO.inputLine instr
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   102
  in
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   103
    if thisLine = "%==============  End of proof. ==================\n" then
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   104
      Pretty.writeln (Pretty.str (concat ["vampire", thisLine]))
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   105
    else if thisLine = "% Unprovable.\n" then
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   106
      Pretty.writeln (Pretty.str (concat ["vampire", thisLine]))
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   107
    else if thisLine = "% Proof not found.\n" then
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   108
      Pretty.writeln (Pretty.str (concat ["vampire", thisLine]))
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   109
    else
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   110
      (Pretty.writeln (Pretty.str (concat ["vampire", thisLine])); getVampInput instr)
abf475cf11f2 improved formatting;
wenzelm
parents: 15789
diff changeset
   111
  end;